@sockethub/client 5.0.0-alpha.11 → 5.0.0-alpha.13
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/README.md +153 -34
- package/dist/sockethub-client.browser.js +16829 -294
- package/dist/sockethub-client.d.ts +280 -0
- package/dist/sockethub-client.js +16847 -288
- package/dist/sockethub-client.min.js +31 -18
- package/package.json +6 -7
- package/src/sockethub-client.test.ts +0 -389
- package/src/sockethub-client.ts +0 -338
|
@@ -1,19 +1,32 @@
|
|
|
1
|
-
(()=>{var j=Object.create;var{getPrototypeOf:b,defineProperty:I,getOwnPropertyNames:u,getOwnPropertyDescriptor:l}=Object,f=Object.prototype.hasOwnProperty;var v=(z,B,D)=>{D=z!=null?j(b(z)):{};let G=B||!z||!z.__esModule?I(D,"default",{value:z,enumerable:!0}):D;for(let W of u(z))if(!f.call(G,W))I(G,W,{get:()=>z[W],enumerable:!0});return G},P=new WeakMap,m=(z)=>{var B=P.get(z),D;if(B)return B;if(B=I({},"__esModule",{value:!0}),z&&typeof z==="object"||typeof z==="function")u(z).map((G)=>!f.call(B,G)&&I(B,G,{get:()=>z[G],enumerable:!(D=l(z,G))||D.enumerable}));return P.set(z,B),B},c=(z,B)=>()=>(B||z((B={exports:{}}).exports,B),B.exports);var a=(z,B)=>{for(var D in B)I(z,D,{get:B[D],enumerable:!0,configurable:!0,set:(G)=>B[D]=()=>G})};var g=c((Dz,N)=>{var r=Object.prototype.hasOwnProperty,Z="~";function L(){}if(Object.create){if(L.prototype=Object.create(null),!new L().__proto__)Z=!1}function s(z,B,D){this.fn=z,this.context=B,this.once=D||!1}function x(z,B,D,G,W){if(typeof D!=="function")throw TypeError("The listener must be a function");var R=new s(D,G||z,W),Q=Z?Z+B:B;if(!z._events[Q])z._events[Q]=R,z._eventsCount++;else if(!z._events[Q].fn)z._events[Q].push(R);else z._events[Q]=[z._events[Q],R];return z}function V(z,B){if(--z._eventsCount===0)z._events=new L;else delete z._events[B]}function Y(){this._events=new L,this._eventsCount=0}Y.prototype.eventNames=function(){var B=[],D,G;if(this._eventsCount===0)return B;for(G in D=this._events)if(r.call(D,G))B.push(Z?G.slice(1):G);if(Object.getOwnPropertySymbols)return B.concat(Object.getOwnPropertySymbols(D));return B};Y.prototype.listeners=function(B){var D=Z?Z+B:B,G=this._events[D];if(!G)return[];if(G.fn)return[G.fn];for(var W=0,R=G.length,Q=Array(R);W<R;W++)Q[W]=G[W].fn;return Q};Y.prototype.listenerCount=function(B){var D=Z?Z+B:B,G=this._events[D];if(!G)return 0;if(G.fn)return 1;return G.length};Y.prototype.emit=function(B,D,G,W,R,Q){var $=Z?Z+B:B;if(!this._events[$])return!1;var J=this._events[$],K=arguments.length,T,X;if(J.fn){if(J.once)this.removeListener(B,J.fn,void 0,!0);switch(K){case 1:return J.fn.call(J.context),!0;case 2:return J.fn.call(J.context,D),!0;case 3:return J.fn.call(J.context,D,G),!0;case 4:return J.fn.call(J.context,D,G,W),!0;case 5:return J.fn.call(J.context,D,G,W,R),!0;case 6:return J.fn.call(J.context,D,G,W,R,Q),!0}for(X=1,T=Array(K-1);X<K;X++)T[X-1]=arguments[X];J.fn.apply(J.context,T)}else{var p=J.length,F;for(X=0;X<p;X++){if(J[X].once)this.removeListener(B,J[X].fn,void 0,!0);switch(K){case 1:J[X].fn.call(J[X].context);break;case 2:J[X].fn.call(J[X].context,D);break;case 3:J[X].fn.call(J[X].context,D,G);break;case 4:J[X].fn.call(J[X].context,D,G,W);break;default:if(!T)for(F=1,T=Array(K-1);F<K;F++)T[F-1]=arguments[F];J[X].fn.apply(J[X].context,T)}}}return!0};Y.prototype.on=function(B,D,G){return x(this,B,D,G,!1)};Y.prototype.once=function(B,D,G){return x(this,B,D,G,!0)};Y.prototype.removeListener=function(B,D,G,W){var R=Z?Z+B:B;if(!this._events[R])return this;if(!D)return V(this,R),this;var Q=this._events[R];if(Q.fn){if(Q.fn===D&&(!W||Q.once)&&(!G||Q.context===G))V(this,R)}else{for(var $=0,J=[],K=Q.length;$<K;$++)if(Q[$].fn!==D||W&&!Q[$].once||G&&Q[$].context!==G)J.push(Q[$]);if(J.length)this._events[R]=J.length===1?J[0]:J;else V(this,R)}return this};Y.prototype.removeAllListeners=function(B){var D;if(B){if(D=Z?Z+B:B,this._events[D])V(this,D)}else this._events=new L,this._eventsCount=0;return this};Y.prototype.off=Y.prototype.removeListener;Y.prototype.addListener=Y.prototype.on;Y.prefixed=Z;Y.EventEmitter=Y;if(typeof N<"u")N.exports=Y});var zz={};a(zz,{default:()=>M});var d=v(g(),1);var H=d.default;/*!
|
|
2
|
-
* activity-streams
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* Developed and Maintained by:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* activity-streams is released under the MIT (see LICENSE).
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* Please see the corresponding license file for details of these licenses.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
|
|
1
|
+
(()=>{var Lz=Object.create;var{getPrototypeOf:Uz,defineProperty:R1,getOwnPropertyNames:QW,getOwnPropertyDescriptor:jz}=Object,WW=Object.prototype.hasOwnProperty;function ZW(w){return this[w]}var Az,$z,C5=(w,Q,W)=>{var Z=w!=null&&typeof w==="object";if(Z){var Y=Q?Az??=new WeakMap:$z??=new WeakMap,X=Y.get(w);if(X)return X}W=w!=null?Lz(Uz(w)):{};let J=Q||!w||!w.__esModule?R1(W,"default",{value:w,enumerable:!0}):W;for(let q of QW(w))if(!WW.call(J,q))R1(J,q,{get:ZW.bind(w,q),enumerable:!0});if(Z)Y.set(w,J);return J},YW=(w)=>{var Q=(wW??=new WeakMap).get(w),W;if(Q)return Q;if(Q=R1({},"__esModule",{value:!0}),w&&typeof w==="object"||typeof w==="function"){for(var Z of QW(w))if(!WW.call(Q,Z))R1(Q,Z,{get:ZW.bind(w,Z),enumerable:!(W=jz(w,Z))||W.enumerable})}return wW.set(w,Q),Q},wW,O=(w,Q)=>()=>(Q||w((Q={exports:{}}).exports,Q),Q.exports);var Oz=(w)=>w;function Nz(w,Q){this[w]=Oz.bind(null,Q)}var XW=(w,Q)=>{for(var W in Q)R1(w,W,{get:Q[W],enumerable:!0,configurable:!0,set:Nz.bind(Q,W)})};var Dz=(w,Q)=>()=>(w&&(Q=w(w=0)),Q);var S1=O((e)=>{Object.defineProperty(e,"__esModule",{value:!0});e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class y5{}e._CodeOrName=y5;e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class i6 extends y5{constructor(w){super();if(!e.IDENTIFIER.test(w))throw Error("CodeGen: name must be a valid identifier");this.str=w}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=i6;class B0 extends y5{constructor(w){super();this._items=typeof w==="string"?[w]:w}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let w=this._items[0];return w===""||w==='""'}get str(){var w;return(w=this._str)!==null&&w!==void 0?w:this._str=this._items.reduce((Q,W)=>`${Q}${W}`,"")}get names(){var w;return(w=this._names)!==null&&w!==void 0?w:this._names=this._items.reduce((Q,W)=>{if(W instanceof i6)Q[W.str]=(Q[W.str]||0)+1;return Q},{})}}e._Code=B0;e.nil=new B0("");function HW(w,...Q){let W=[w[0]],Z=0;while(Z<Q.length)D8(W,Q[Z]),W.push(w[++Z]);return new B0(W)}e._=HW;var N8=new B0("+");function VW(w,...Q){let W=[b1(w[0])],Z=0;while(Z<Q.length)W.push(N8),D8(W,Q[Z]),W.push(N8,b1(w[++Z]));return bz(W),new B0(W)}e.str=VW;function D8(w,Q){if(Q instanceof B0)w.push(...Q._items);else if(Q instanceof i6)w.push(Q);else w.push(kz(Q))}e.addCodeArg=D8;function bz(w){let Q=1;while(Q<w.length-1){if(w[Q]===N8){let W=Sz(w[Q-1],w[Q+1]);if(W!==void 0){w.splice(Q-1,3,W);continue}w[Q++]="+"}Q++}}function Sz(w,Q){if(Q==='""')return w;if(w==='""')return Q;if(typeof w=="string"){if(Q instanceof i6||w[w.length-1]!=='"')return;if(typeof Q!="string")return`${w.slice(0,-1)}${Q}"`;if(Q[0]==='"')return w.slice(0,-1)+Q.slice(1);return}if(typeof Q=="string"&&Q[0]==='"'&&!(w instanceof i6))return`"${w}${Q.slice(1)}`;return}function Ez(w,Q){return Q.emptyStr()?w:w.emptyStr()?Q:VW`${w}${Q}`}e.strConcat=Ez;function kz(w){return typeof w=="number"||typeof w=="boolean"||w===null?w:b1(Array.isArray(w)?w.join(","):w)}function Cz(w){return new B0(b1(w))}e.stringify=Cz;function b1(w){return JSON.stringify(w).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}e.safeStringify=b1;function fz(w){return typeof w=="string"&&e.IDENTIFIER.test(w)?new B0(`.${w}`):HW`[${w}]`}e.getProperty=fz;function vz(w){if(typeof w=="string"&&e.IDENTIFIER.test(w))return new B0(`${w}`);throw Error(`CodeGen: invalid export name: ${w}, use explicit $id name mapping`)}e.getEsmExportName=vz;function yz(w){return new B0(w.toString())}e.regexpCode=yz});var P8=O((dw)=>{Object.defineProperty(dw,"__esModule",{value:!0});dw.ValueScope=dw.ValueScopeName=dw.Scope=dw.varKinds=dw.UsedValueState=void 0;var cw=S1();class MW extends Error{constructor(w){super(`CodeGen: "code" for ${w} not defined`);this.value=w.value}}var u5;(function(w){w[w.Started=0]="Started",w[w.Completed=1]="Completed"})(u5||(dw.UsedValueState=u5={}));dw.varKinds={const:new cw.Name("const"),let:new cw.Name("let"),var:new cw.Name("var")};class I8{constructor({prefixes:w,parent:Q}={}){this._names={},this._prefixes=w,this._parent=Q}toName(w){return w instanceof cw.Name?w:this.name(w)}name(w){return new cw.Name(this._newName(w))}_newName(w){let Q=this._names[w]||this._nameGroup(w);return`${w}${Q.index++}`}_nameGroup(w){var Q,W;if(((W=(Q=this._parent)===null||Q===void 0?void 0:Q._prefixes)===null||W===void 0?void 0:W.has(w))||this._prefixes&&!this._prefixes.has(w))throw Error(`CodeGen: prefix "${w}" is not allowed in this scope`);return this._names[w]={prefix:w,index:0}}}dw.Scope=I8;class T8 extends cw.Name{constructor(w,Q){super(Q);this.prefix=w}setValue(w,{property:Q,itemIndex:W}){this.value=w,this.scopePath=cw._`.${new cw.Name(Q)}[${W}]`}}dw.ValueScopeName=T8;var uz=cw._`\n`;class LW extends I8{constructor(w){super(w);this._values={},this._scope=w.scope,this.opts={...w,_n:w.lines?uz:cw.nil}}get(){return this._scope}name(w){return new T8(w,this._newName(w))}value(w,Q){var W;if(Q.ref===void 0)throw Error("CodeGen: ref must be passed in value");let Z=this.toName(w),{prefix:Y}=Z,X=(W=Q.key)!==null&&W!==void 0?W:Q.ref,J=this._values[Y];if(J){let z=J.get(X);if(z)return z}else J=this._values[Y]=new Map;J.set(X,Z);let q=this._scope[Y]||(this._scope[Y]=[]),G=q.length;return q[G]=Q.ref,Z.setValue(Q,{property:Y,itemIndex:G}),Z}getValue(w,Q){let W=this._values[w];if(!W)return;return W.get(Q)}scopeRefs(w,Q=this._values){return this._reduceValues(Q,(W)=>{if(W.scopePath===void 0)throw Error(`CodeGen: name "${W}" has no value`);return cw._`${w}${W.scopePath}`})}scopeCode(w=this._values,Q,W){return this._reduceValues(w,(Z)=>{if(Z.value===void 0)throw Error(`CodeGen: name "${Z}" has no value`);return Z.value.code},Q,W)}_reduceValues(w,Q,W={},Z){let Y=cw.nil;for(let X in w){let J=w[X];if(!J)continue;let q=W[X]=W[X]||new Map;J.forEach((G)=>{if(q.has(G))return;q.set(G,u5.Started);let z=Q(G);if(z){let F=this.opts.es5?dw.varKinds.var:dw.varKinds.const;Y=cw._`${Y}${F} ${G} = ${z};${this.opts._n}`}else if(z=Z===null||Z===void 0?void 0:Z(G))Y=cw._`${Y}${z}${this.opts._n}`;else throw new MW(G);q.set(G,u5.Completed)})}return Y}}dw.ValueScope=LW});var m=O((_)=>{Object.defineProperty(_,"__esModule",{value:!0});_.or=_.and=_.not=_.CodeGen=_.operators=_.varKinds=_.ValueScopeName=_.ValueScope=_.Scope=_.Name=_.regexpCode=_.stringify=_.getProperty=_.nil=_.strConcat=_.str=_._=void 0;var d=S1(),H0=P8(),t0=S1();Object.defineProperty(_,"_",{enumerable:!0,get:function(){return t0._}});Object.defineProperty(_,"str",{enumerable:!0,get:function(){return t0.str}});Object.defineProperty(_,"strConcat",{enumerable:!0,get:function(){return t0.strConcat}});Object.defineProperty(_,"nil",{enumerable:!0,get:function(){return t0.nil}});Object.defineProperty(_,"getProperty",{enumerable:!0,get:function(){return t0.getProperty}});Object.defineProperty(_,"stringify",{enumerable:!0,get:function(){return t0.stringify}});Object.defineProperty(_,"regexpCode",{enumerable:!0,get:function(){return t0.regexpCode}});Object.defineProperty(_,"Name",{enumerable:!0,get:function(){return t0.Name}});var i5=P8();Object.defineProperty(_,"Scope",{enumerable:!0,get:function(){return i5.Scope}});Object.defineProperty(_,"ValueScope",{enumerable:!0,get:function(){return i5.ValueScope}});Object.defineProperty(_,"ValueScopeName",{enumerable:!0,get:function(){return i5.ValueScopeName}});Object.defineProperty(_,"varKinds",{enumerable:!0,get:function(){return i5.varKinds}});_.operators={GT:new d._Code(">"),GTE:new d._Code(">="),LT:new d._Code("<"),LTE:new d._Code("<="),EQ:new d._Code("==="),NEQ:new d._Code("!=="),NOT:new d._Code("!"),OR:new d._Code("||"),AND:new d._Code("&&"),ADD:new d._Code("+")};class o0{optimizeNodes(){return this}optimizeNames(w,Q){return this}}class UW extends o0{constructor(w,Q,W){super();this.varKind=w,this.name=Q,this.rhs=W}render({es5:w,_n:Q}){let W=w?H0.varKinds.var:this.varKind,Z=this.rhs===void 0?"":` = ${this.rhs}`;return`${W} ${this.name}${Z};`+Q}optimizeNames(w,Q){if(!w[this.name.str])return;if(this.rhs)this.rhs=p6(this.rhs,w,Q);return this}get names(){return this.rhs instanceof d._CodeOrName?this.rhs.names:{}}}class S8 extends o0{constructor(w,Q,W){super();this.lhs=w,this.rhs=Q,this.sideEffects=W}render({_n:w}){return`${this.lhs} = ${this.rhs};`+w}optimizeNames(w,Q){if(this.lhs instanceof d.Name&&!w[this.lhs.str]&&!this.sideEffects)return;return this.rhs=p6(this.rhs,w,Q),this}get names(){let w=this.lhs instanceof d.Name?{}:{...this.lhs.names};return l5(w,this.rhs)}}class jW extends S8{constructor(w,Q,W,Z){super(w,W,Z);this.op=Q}render({_n:w}){return`${this.lhs} ${this.op}= ${this.rhs};`+w}}class AW extends o0{constructor(w){super();this.label=w,this.names={}}render({_n:w}){return`${this.label}:`+w}}class $W extends o0{constructor(w){super();this.label=w,this.names={}}render({_n:w}){return`break${this.label?` ${this.label}`:""};`+w}}class OW extends o0{constructor(w){super();this.error=w}render({_n:w}){return`throw ${this.error};`+w}get names(){return this.error.names}}class NW extends o0{constructor(w){super();this.code=w}render({_n:w}){return`${this.code};`+w}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(w,Q){return this.code=p6(this.code,w,Q),this}get names(){return this.code instanceof d._CodeOrName?this.code.names:{}}}class m5 extends o0{constructor(w=[]){super();this.nodes=w}render(w){return this.nodes.reduce((Q,W)=>Q+W.render(w),"")}optimizeNodes(){let{nodes:w}=this,Q=w.length;while(Q--){let W=w[Q].optimizeNodes();if(Array.isArray(W))w.splice(Q,1,...W);else if(W)w[Q]=W;else w.splice(Q,1)}return w.length>0?this:void 0}optimizeNames(w,Q){let{nodes:W}=this,Z=W.length;while(Z--){let Y=W[Z];if(Y.optimizeNames(w,Q))continue;hz(w,Y.names),W.splice(Z,1)}return W.length>0?this:void 0}get names(){return this.nodes.reduce((w,Q)=>j6(w,Q.names),{})}}class e0 extends m5{render(w){return"{"+w._n+super.render(w)+"}"+w._n}}class DW extends m5{}class E1 extends e0{}E1.kind="else";class m0 extends e0{constructor(w,Q){super(Q);this.condition=w}render(w){let Q=`if(${this.condition})`+super.render(w);if(this.else)Q+="else "+this.else.render(w);return Q}optimizeNodes(){super.optimizeNodes();let w=this.condition;if(w===!0)return this.nodes;let Q=this.else;if(Q){let W=Q.optimizeNodes();Q=this.else=Array.isArray(W)?new E1(W):W}if(Q){if(w===!1)return Q instanceof m0?Q:Q.nodes;if(this.nodes.length)return this;return new m0(bW(w),Q instanceof m0?[Q]:Q.nodes)}if(w===!1||!this.nodes.length)return;return this}optimizeNames(w,Q){var W;if(this.else=(W=this.else)===null||W===void 0?void 0:W.optimizeNames(w,Q),!(super.optimizeNames(w,Q)||this.else))return;return this.condition=p6(this.condition,w,Q),this}get names(){let w=super.names;if(l5(w,this.condition),this.else)j6(w,this.else.names);return w}}m0.kind="if";class m6 extends e0{}m6.kind="for";class IW extends m6{constructor(w){super();this.iteration=w}render(w){return`for(${this.iteration})`+super.render(w)}optimizeNames(w,Q){if(!super.optimizeNames(w,Q))return;return this.iteration=p6(this.iteration,w,Q),this}get names(){return j6(super.names,this.iteration.names)}}class TW extends m6{constructor(w,Q,W,Z){super();this.varKind=w,this.name=Q,this.from=W,this.to=Z}render(w){let Q=w.es5?H0.varKinds.var:this.varKind,{name:W,from:Z,to:Y}=this;return`for(${Q} ${W}=${Z}; ${W}<${Y}; ${W}++)`+super.render(w)}get names(){let w=l5(super.names,this.from);return l5(w,this.to)}}class R8 extends m6{constructor(w,Q,W,Z){super();this.loop=w,this.varKind=Q,this.name=W,this.iterable=Z}render(w){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(w)}optimizeNames(w,Q){if(!super.optimizeNames(w,Q))return;return this.iterable=p6(this.iterable,w,Q),this}get names(){return j6(super.names,this.iterable.names)}}class h5 extends e0{constructor(w,Q,W){super();this.name=w,this.args=Q,this.async=W}render(w){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(w)}}h5.kind="func";class g5 extends m5{render(w){return"return "+super.render(w)}}g5.kind="return";class PW extends e0{render(w){let Q="try"+super.render(w);if(this.catch)Q+=this.catch.render(w);if(this.finally)Q+=this.finally.render(w);return Q}optimizeNodes(){var w,Q;return super.optimizeNodes(),(w=this.catch)===null||w===void 0||w.optimizeNodes(),(Q=this.finally)===null||Q===void 0||Q.optimizeNodes(),this}optimizeNames(w,Q){var W,Z;return super.optimizeNames(w,Q),(W=this.catch)===null||W===void 0||W.optimizeNames(w,Q),(Z=this.finally)===null||Z===void 0||Z.optimizeNames(w,Q),this}get names(){let w=super.names;if(this.catch)j6(w,this.catch.names);if(this.finally)j6(w,this.finally.names);return w}}class _5 extends e0{constructor(w){super();this.error=w}render(w){return`catch(${this.error})`+super.render(w)}}_5.kind="catch";class x5 extends e0{render(w){return"finally"+super.render(w)}}x5.kind="finally";class RW{constructor(w,Q={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...Q,_n:Q.lines?`
|
|
2
|
+
`:""},this._extScope=w,this._scope=new H0.Scope({parent:w}),this._nodes=[new DW]}toString(){return this._root.render(this.opts)}name(w){return this._scope.name(w)}scopeName(w){return this._extScope.name(w)}scopeValue(w,Q){let W=this._extScope.value(w,Q);return(this._values[W.prefix]||(this._values[W.prefix]=new Set)).add(W),W}getScopeValue(w,Q){return this._extScope.getValue(w,Q)}scopeRefs(w){return this._extScope.scopeRefs(w,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(w,Q,W,Z){let Y=this._scope.toName(Q);if(W!==void 0&&Z)this._constants[Y.str]=W;return this._leafNode(new UW(w,Y,W)),Y}const(w,Q,W){return this._def(H0.varKinds.const,w,Q,W)}let(w,Q,W){return this._def(H0.varKinds.let,w,Q,W)}var(w,Q,W){return this._def(H0.varKinds.var,w,Q,W)}assign(w,Q,W){return this._leafNode(new S8(w,Q,W))}add(w,Q){return this._leafNode(new jW(w,_.operators.ADD,Q))}code(w){if(typeof w=="function")w();else if(w!==d.nil)this._leafNode(new NW(w));return this}object(...w){let Q=["{"];for(let[W,Z]of w){if(Q.length>1)Q.push(",");if(Q.push(W),W!==Z||this.opts.es5)Q.push(":"),(0,d.addCodeArg)(Q,Z)}return Q.push("}"),new d._Code(Q)}if(w,Q,W){if(this._blockNode(new m0(w)),Q&&W)this.code(Q).else().code(W).endIf();else if(Q)this.code(Q).endIf();else if(W)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(w){return this._elseNode(new m0(w))}else(){return this._elseNode(new E1)}endIf(){return this._endBlockNode(m0,E1)}_for(w,Q){if(this._blockNode(w),Q)this.code(Q).endFor();return this}for(w,Q){return this._for(new IW(w),Q)}forRange(w,Q,W,Z,Y=this.opts.es5?H0.varKinds.var:H0.varKinds.let){let X=this._scope.toName(w);return this._for(new TW(Y,X,Q,W),()=>Z(X))}forOf(w,Q,W,Z=H0.varKinds.const){let Y=this._scope.toName(w);if(this.opts.es5){let X=Q instanceof d.Name?Q:this.var("_arr",Q);return this.forRange("_i",0,d._`${X}.length`,(J)=>{this.var(Y,d._`${X}[${J}]`),W(Y)})}return this._for(new R8("of",Z,Y,Q),()=>W(Y))}forIn(w,Q,W,Z=this.opts.es5?H0.varKinds.var:H0.varKinds.const){if(this.opts.ownProperties)return this.forOf(w,d._`Object.keys(${Q})`,W);let Y=this._scope.toName(w);return this._for(new R8("in",Z,Y,Q),()=>W(Y))}endFor(){return this._endBlockNode(m6)}label(w){return this._leafNode(new AW(w))}break(w){return this._leafNode(new $W(w))}return(w){let Q=new g5;if(this._blockNode(Q),this.code(w),Q.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(g5)}try(w,Q,W){if(!Q&&!W)throw Error('CodeGen: "try" without "catch" and "finally"');let Z=new PW;if(this._blockNode(Z),this.code(w),Q){let Y=this.name("e");this._currNode=Z.catch=new _5(Y),Q(Y)}if(W)this._currNode=Z.finally=new x5,this.code(W);return this._endBlockNode(_5,x5)}throw(w){return this._leafNode(new OW(w))}block(w,Q){if(this._blockStarts.push(this._nodes.length),w)this.code(w).endBlock(Q);return this}endBlock(w){let Q=this._blockStarts.pop();if(Q===void 0)throw Error("CodeGen: not in self-balancing block");let W=this._nodes.length-Q;if(W<0||w!==void 0&&W!==w)throw Error(`CodeGen: wrong number of nodes: ${W} vs ${w} expected`);return this._nodes.length=Q,this}func(w,Q=d.nil,W,Z){if(this._blockNode(new h5(w,Q,W)),Z)this.code(Z).endFunc();return this}endFunc(){return this._endBlockNode(h5)}optimize(w=1){while(w-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(w){return this._currNode.nodes.push(w),this}_blockNode(w){this._currNode.nodes.push(w),this._nodes.push(w)}_endBlockNode(w,Q){let W=this._currNode;if(W instanceof w||Q&&W instanceof Q)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${Q?`${w.kind}/${Q.kind}`:w.kind}"`)}_elseNode(w){let Q=this._currNode;if(!(Q instanceof m0))throw Error('CodeGen: "else" without "if"');return this._currNode=Q.else=w,this}get _root(){return this._nodes[0]}get _currNode(){let w=this._nodes;return w[w.length-1]}set _currNode(w){let Q=this._nodes;Q[Q.length-1]=w}}_.CodeGen=RW;function j6(w,Q){for(let W in Q)w[W]=(w[W]||0)+(Q[W]||0);return w}function l5(w,Q){return Q instanceof d._CodeOrName?j6(w,Q.names):w}function p6(w,Q,W){if(w instanceof d.Name)return Z(w);if(!Y(w))return w;return new d._Code(w._items.reduce((X,J)=>{if(J instanceof d.Name)J=Z(J);if(J instanceof d._Code)X.push(...J._items);else X.push(J);return X},[]));function Z(X){let J=W[X.str];if(J===void 0||Q[X.str]!==1)return X;return delete Q[X.str],J}function Y(X){return X instanceof d._Code&&X._items.some((J)=>J instanceof d.Name&&Q[J.str]===1&&W[J.str]!==void 0)}}function hz(w,Q){for(let W in Q)w[W]=(w[W]||0)-(Q[W]||0)}function bW(w){return typeof w=="boolean"||typeof w=="number"||w===null?!w:d._`!${b8(w)}`}_.not=bW;var gz=SW(_.operators.AND);function _z(...w){return w.reduce(gz)}_.and=_z;var xz=SW(_.operators.OR);function lz(...w){return w.reduce(xz)}_.or=lz;function SW(w){return(Q,W)=>Q===d.nil?W:W===d.nil?Q:d._`${b8(Q)} ${w} ${b8(W)}`}function b8(w){return w instanceof d.Name?w:d._`(${w})`}});var s=O((p)=>{Object.defineProperty(p,"__esModule",{value:!0});p.checkStrictMode=p.getErrorPath=p.Type=p.useFunc=p.setEvaluated=p.evaluatedPropsToName=p.mergeEvaluated=p.eachItem=p.unescapeJsonPointer=p.escapeJsonPointer=p.escapeFragment=p.unescapeFragment=p.schemaRefOrVal=p.schemaHasRulesButRef=p.schemaHasRules=p.checkUnknownRules=p.alwaysValidSchema=p.toHash=void 0;var Fw=m(),iz=S1();function mz(w){let Q={};for(let W of w)Q[W]=!0;return Q}p.toHash=mz;function pz(w,Q){if(typeof Q=="boolean")return Q;if(Object.keys(Q).length===0)return!0;return CW(w,Q),!fW(Q,w.self.RULES.all)}p.alwaysValidSchema=pz;function CW(w,Q=w.schema){let{opts:W,self:Z}=w;if(!W.strictSchema)return;if(typeof Q==="boolean")return;let Y=Z.RULES.keywords;for(let X in Q)if(!Y[X])uW(w,`unknown keyword: "${X}"`)}p.checkUnknownRules=CW;function fW(w,Q){if(typeof w=="boolean")return!w;for(let W in w)if(Q[W])return!0;return!1}p.schemaHasRules=fW;function cz(w,Q){if(typeof w=="boolean")return!w;for(let W in w)if(W!=="$ref"&&Q.all[W])return!0;return!1}p.schemaHasRulesButRef=cz;function dz({topSchemaRef:w,schemaPath:Q},W,Z,Y){if(!Y){if(typeof W=="number"||typeof W=="boolean")return W;if(typeof W=="string")return Fw._`${W}`}return Fw._`${w}${Q}${(0,Fw.getProperty)(Z)}`}p.schemaRefOrVal=dz;function nz(w){return vW(decodeURIComponent(w))}p.unescapeFragment=nz;function rz(w){return encodeURIComponent(k8(w))}p.escapeFragment=rz;function k8(w){if(typeof w=="number")return`${w}`;return w.replace(/~/g,"~0").replace(/\//g,"~1")}p.escapeJsonPointer=k8;function vW(w){return w.replace(/~1/g,"/").replace(/~0/g,"~")}p.unescapeJsonPointer=vW;function sz(w,Q){if(Array.isArray(w))for(let W of w)Q(W);else Q(w)}p.eachItem=sz;function EW({mergeNames:w,mergeToName:Q,mergeValues:W,resultToName:Z}){return(Y,X,J,q)=>{let G=J===void 0?X:J instanceof Fw.Name?(X instanceof Fw.Name?w(Y,X,J):Q(Y,X,J),J):X instanceof Fw.Name?(Q(Y,J,X),X):W(X,J);return q===Fw.Name&&!(G instanceof Fw.Name)?Z(Y,G):G}}p.mergeEvaluated={props:EW({mergeNames:(w,Q,W)=>w.if(Fw._`${W} !== true && ${Q} !== undefined`,()=>{w.if(Fw._`${Q} === true`,()=>w.assign(W,!0),()=>w.assign(W,Fw._`${W} || {}`).code(Fw._`Object.assign(${W}, ${Q})`))}),mergeToName:(w,Q,W)=>w.if(Fw._`${W} !== true`,()=>{if(Q===!0)w.assign(W,!0);else w.assign(W,Fw._`${W} || {}`),C8(w,W,Q)}),mergeValues:(w,Q)=>w===!0?!0:{...w,...Q},resultToName:yW}),items:EW({mergeNames:(w,Q,W)=>w.if(Fw._`${W} !== true && ${Q} !== undefined`,()=>w.assign(W,Fw._`${Q} === true ? true : ${W} > ${Q} ? ${W} : ${Q}`)),mergeToName:(w,Q,W)=>w.if(Fw._`${W} !== true`,()=>w.assign(W,Q===!0?!0:Fw._`${W} > ${Q} ? ${W} : ${Q}`)),mergeValues:(w,Q)=>w===!0?!0:Math.max(w,Q),resultToName:(w,Q)=>w.var("items",Q)})};function yW(w,Q){if(Q===!0)return w.var("props",!0);let W=w.var("props",Fw._`{}`);if(Q!==void 0)C8(w,W,Q);return W}p.evaluatedPropsToName=yW;function C8(w,Q,W){Object.keys(W).forEach((Z)=>w.assign(Fw._`${Q}${(0,Fw.getProperty)(Z)}`,!0))}p.setEvaluated=C8;var kW={};function az(w,Q){return w.scopeValue("func",{ref:Q,code:kW[Q.code]||(kW[Q.code]=new iz._Code(Q.code))})}p.useFunc=az;var E8;(function(w){w[w.Num=0]="Num",w[w.Str=1]="Str"})(E8||(p.Type=E8={}));function tz(w,Q,W){if(w instanceof Fw.Name){let Z=Q===E8.Num;return W?Z?Fw._`"[" + ${w} + "]"`:Fw._`"['" + ${w} + "']"`:Z?Fw._`"/" + ${w}`:Fw._`"/" + ${w}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return W?(0,Fw.getProperty)(w).toString():"/"+k8(w)}p.getErrorPath=tz;function uW(w,Q,W=w.opts.strictSchema){if(!W)return;if(Q=`strict mode: ${Q}`,W===!0)throw Error(Q);w.self.logger.warn(Q)}p.checkStrictMode=uW});var p0=O((f8)=>{Object.defineProperty(f8,"__esModule",{value:!0});var kw=m(),oz={data:new kw.Name("data"),valCxt:new kw.Name("valCxt"),instancePath:new kw.Name("instancePath"),parentData:new kw.Name("parentData"),parentDataProperty:new kw.Name("parentDataProperty"),rootData:new kw.Name("rootData"),dynamicAnchors:new kw.Name("dynamicAnchors"),vErrors:new kw.Name("vErrors"),errors:new kw.Name("errors"),this:new kw.Name("this"),self:new kw.Name("self"),scope:new kw.Name("scope"),json:new kw.Name("json"),jsonPos:new kw.Name("jsonPos"),jsonLen:new kw.Name("jsonLen"),jsonPart:new kw.Name("jsonPart")};f8.default=oz});var k1=O((Cw)=>{Object.defineProperty(Cw,"__esModule",{value:!0});Cw.extendErrors=Cw.resetErrorsCount=Cw.reportExtraError=Cw.reportError=Cw.keyword$DataError=Cw.keywordError=void 0;var a=m(),p5=s(),gw=p0();Cw.keywordError={message:({keyword:w})=>a.str`must pass "${w}" keyword validation`};Cw.keyword$DataError={message:({keyword:w,schemaType:Q})=>Q?a.str`"${w}" keyword must be ${Q} ($data)`:a.str`"${w}" keyword is invalid ($data)`};function ez(w,Q=Cw.keywordError,W,Z){let{it:Y}=w,{gen:X,compositeRule:J,allErrors:q}=Y,G=_W(w,Q,W);if(Z!==null&&Z!==void 0?Z:J||q)hW(X,G);else gW(Y,a._`[${G}]`)}Cw.reportError=ez;function w3(w,Q=Cw.keywordError,W){let{it:Z}=w,{gen:Y,compositeRule:X,allErrors:J}=Z,q=_W(w,Q,W);if(hW(Y,q),!(X||J))gW(Z,gw.default.vErrors)}Cw.reportExtraError=w3;function Q3(w,Q){w.assign(gw.default.errors,Q),w.if(a._`${gw.default.vErrors} !== null`,()=>w.if(Q,()=>w.assign(a._`${gw.default.vErrors}.length`,Q),()=>w.assign(gw.default.vErrors,null)))}Cw.resetErrorsCount=Q3;function W3({gen:w,keyword:Q,schemaValue:W,data:Z,errsCount:Y,it:X}){if(Y===void 0)throw Error("ajv implementation error");let J=w.name("err");w.forRange("i",Y,gw.default.errors,(q)=>{if(w.const(J,a._`${gw.default.vErrors}[${q}]`),w.if(a._`${J}.instancePath === undefined`,()=>w.assign(a._`${J}.instancePath`,(0,a.strConcat)(gw.default.instancePath,X.errorPath))),w.assign(a._`${J}.schemaPath`,a.str`${X.errSchemaPath}/${Q}`),X.opts.verbose)w.assign(a._`${J}.schema`,W),w.assign(a._`${J}.data`,Z)})}Cw.extendErrors=W3;function hW(w,Q){let W=w.const("err",Q);w.if(a._`${gw.default.vErrors} === null`,()=>w.assign(gw.default.vErrors,a._`[${W}]`),a._`${gw.default.vErrors}.push(${W})`),w.code(a._`${gw.default.errors}++`)}function gW(w,Q){let{gen:W,validateName:Z,schemaEnv:Y}=w;if(Y.$async)W.throw(a._`new ${w.ValidationError}(${Q})`);else W.assign(a._`${Z}.errors`,Q),W.return(!1)}var A6={keyword:new a.Name("keyword"),schemaPath:new a.Name("schemaPath"),params:new a.Name("params"),propertyName:new a.Name("propertyName"),message:new a.Name("message"),schema:new a.Name("schema"),parentSchema:new a.Name("parentSchema")};function _W(w,Q,W){let{createErrors:Z}=w.it;if(Z===!1)return a._`{}`;return Z3(w,Q,W)}function Z3(w,Q,W={}){let{gen:Z,it:Y}=w,X=[Y3(Y,W),X3(w,W)];return J3(w,Q,X),Z.object(...X)}function Y3({errorPath:w},{instancePath:Q}){let W=Q?a.str`${w}${(0,p5.getErrorPath)(Q,p5.Type.Str)}`:w;return[gw.default.instancePath,(0,a.strConcat)(gw.default.instancePath,W)]}function X3({keyword:w,it:{errSchemaPath:Q}},{schemaPath:W,parentSchema:Z}){let Y=Z?Q:a.str`${Q}/${w}`;if(W)Y=a.str`${Y}${(0,p5.getErrorPath)(W,p5.Type.Str)}`;return[A6.schemaPath,Y]}function J3(w,{params:Q,message:W},Z){let{keyword:Y,data:X,schemaValue:J,it:q}=w,{opts:G,propertyName:z,topSchemaRef:F,schemaPath:K}=q;if(Z.push([A6.keyword,Y],[A6.params,typeof Q=="function"?Q(w):Q||a._`{}`]),G.messages)Z.push([A6.message,typeof W=="function"?W(w):W]);if(G.verbose)Z.push([A6.schema,J],[A6.parentSchema,a._`${F}${K}`],[gw.default.data,X]);if(z)Z.push([A6.propertyName,z])}});var lW=O((c6)=>{Object.defineProperty(c6,"__esModule",{value:!0});c6.boolOrEmptySchema=c6.topBoolOrEmptySchema=void 0;var q3=k1(),G3=m(),z3=p0(),F3={message:"boolean schema is false"};function K3(w){let{gen:Q,schema:W,validateName:Z}=w;if(W===!1)xW(w,!1);else if(typeof W=="object"&&W.$async===!0)Q.return(z3.default.data);else Q.assign(G3._`${Z}.errors`,null),Q.return(!0)}c6.topBoolOrEmptySchema=K3;function B3(w,Q){let{gen:W,schema:Z}=w;if(Z===!1)W.var(Q,!1),xW(w);else W.var(Q,!0)}c6.boolOrEmptySchema=B3;function xW(w,Q){let{gen:W,data:Z}=w,Y={gen:W,keyword:"false schema",data:Z,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:w};(0,q3.reportError)(Y,F3,void 0,Q)}});var v8=O((d6)=>{Object.defineProperty(d6,"__esModule",{value:!0});d6.getRules=d6.isJSONType=void 0;var H3=["string","number","integer","boolean","null","object","array"],V3=new Set(H3);function M3(w){return typeof w=="string"&&V3.has(w)}d6.isJSONType=M3;function L3(){let w={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...w,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},w.number,w.string,w.array,w.object],post:{rules:[]},all:{},keywords:{}}}d6.getRules=L3});var y8=O((w6)=>{Object.defineProperty(w6,"__esModule",{value:!0});w6.shouldUseRule=w6.shouldUseGroup=w6.schemaHasRulesForType=void 0;function U3({schema:w,self:Q},W){let Z=Q.RULES.types[W];return Z&&Z!==!0&&iW(w,Z)}w6.schemaHasRulesForType=U3;function iW(w,Q){return Q.rules.some((W)=>mW(w,W))}w6.shouldUseGroup=iW;function mW(w,Q){var W;return w[Q.keyword]!==void 0||((W=Q.definition.implements)===null||W===void 0?void 0:W.some((Z)=>w[Z]!==void 0))}w6.shouldUseRule=mW});var C1=O((fw)=>{Object.defineProperty(fw,"__esModule",{value:!0});fw.reportTypeError=fw.checkDataTypes=fw.checkDataType=fw.coerceAndCheckDataType=fw.getJSONTypes=fw.getSchemaTypes=fw.DataType=void 0;var j3=v8(),A3=y8(),$3=k1(),y=m(),pW=s(),n6;(function(w){w[w.Correct=0]="Correct",w[w.Wrong=1]="Wrong"})(n6||(fw.DataType=n6={}));function O3(w){let Q=cW(w.type);if(Q.includes("null")){if(w.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!Q.length&&w.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(w.nullable===!0)Q.push("null")}return Q}fw.getSchemaTypes=O3;function cW(w){let Q=Array.isArray(w)?w:w?[w]:[];if(Q.every(j3.isJSONType))return Q;throw Error("type must be JSONType or JSONType[]: "+Q.join(","))}fw.getJSONTypes=cW;function N3(w,Q){let{gen:W,data:Z,opts:Y}=w,X=D3(Q,Y.coerceTypes),J=Q.length>0&&!(X.length===0&&Q.length===1&&(0,A3.schemaHasRulesForType)(w,Q[0]));if(J){let q=h8(Q,Z,Y.strictNumbers,n6.Wrong);W.if(q,()=>{if(X.length)I3(w,Q,X);else g8(w)})}return J}fw.coerceAndCheckDataType=N3;var dW=new Set(["string","number","integer","boolean","null"]);function D3(w,Q){return Q?w.filter((W)=>dW.has(W)||Q==="array"&&W==="array"):[]}function I3(w,Q,W){let{gen:Z,data:Y,opts:X}=w,J=Z.let("dataType",y._`typeof ${Y}`),q=Z.let("coerced",y._`undefined`);if(X.coerceTypes==="array")Z.if(y._`${J} == 'object' && Array.isArray(${Y}) && ${Y}.length == 1`,()=>Z.assign(Y,y._`${Y}[0]`).assign(J,y._`typeof ${Y}`).if(h8(Q,Y,X.strictNumbers),()=>Z.assign(q,Y)));Z.if(y._`${q} !== undefined`);for(let z of W)if(dW.has(z)||z==="array"&&X.coerceTypes==="array")G(z);Z.else(),g8(w),Z.endIf(),Z.if(y._`${q} !== undefined`,()=>{Z.assign(Y,q),T3(w,q)});function G(z){switch(z){case"string":Z.elseIf(y._`${J} == "number" || ${J} == "boolean"`).assign(q,y._`"" + ${Y}`).elseIf(y._`${Y} === null`).assign(q,y._`""`);return;case"number":Z.elseIf(y._`${J} == "boolean" || ${Y} === null
|
|
3
|
+
|| (${J} == "string" && ${Y} && ${Y} == +${Y})`).assign(q,y._`+${Y}`);return;case"integer":Z.elseIf(y._`${J} === "boolean" || ${Y} === null
|
|
4
|
+
|| (${J} === "string" && ${Y} && ${Y} == +${Y} && !(${Y} % 1))`).assign(q,y._`+${Y}`);return;case"boolean":Z.elseIf(y._`${Y} === "false" || ${Y} === 0 || ${Y} === null`).assign(q,!1).elseIf(y._`${Y} === "true" || ${Y} === 1`).assign(q,!0);return;case"null":Z.elseIf(y._`${Y} === "" || ${Y} === 0 || ${Y} === false`),Z.assign(q,null);return;case"array":Z.elseIf(y._`${J} === "string" || ${J} === "number"
|
|
5
|
+
|| ${J} === "boolean" || ${Y} === null`).assign(q,y._`[${Y}]`)}}}function T3({gen:w,parentData:Q,parentDataProperty:W},Z){w.if(y._`${Q} !== undefined`,()=>w.assign(y._`${Q}[${W}]`,Z))}function u8(w,Q,W,Z=n6.Correct){let Y=Z===n6.Correct?y.operators.EQ:y.operators.NEQ,X;switch(w){case"null":return y._`${Q} ${Y} null`;case"array":X=y._`Array.isArray(${Q})`;break;case"object":X=y._`${Q} && typeof ${Q} == "object" && !Array.isArray(${Q})`;break;case"integer":X=J(y._`!(${Q} % 1) && !isNaN(${Q})`);break;case"number":X=J();break;default:return y._`typeof ${Q} ${Y} ${w}`}return Z===n6.Correct?X:(0,y.not)(X);function J(q=y.nil){return(0,y.and)(y._`typeof ${Q} == "number"`,q,W?y._`isFinite(${Q})`:y.nil)}}fw.checkDataType=u8;function h8(w,Q,W,Z){if(w.length===1)return u8(w[0],Q,W,Z);let Y,X=(0,pW.toHash)(w);if(X.array&&X.object){let J=y._`typeof ${Q} != "object"`;Y=X.null?J:y._`!${Q} || ${J}`,delete X.null,delete X.array,delete X.object}else Y=y.nil;if(X.number)delete X.integer;for(let J in X)Y=(0,y.and)(Y,u8(J,Q,W,Z));return Y}fw.checkDataTypes=h8;var P3={message:({schema:w})=>`must be ${w}`,params:({schema:w,schemaValue:Q})=>typeof w=="string"?y._`{type: ${w}}`:y._`{type: ${Q}}`};function g8(w){let Q=R3(w);(0,$3.reportError)(Q,P3)}fw.reportTypeError=g8;function R3(w){let{gen:Q,data:W,schema:Z}=w,Y=(0,pW.schemaRefOrVal)(w,Z,"type");return{gen:Q,keyword:"type",data:W,schema:Z.type,schemaCode:Y,schemaValue:Y,parentSchema:Z,params:{},it:w}}});var rW=O((c5)=>{Object.defineProperty(c5,"__esModule",{value:!0});c5.assignDefaults=void 0;var r6=m(),b3=s();function S3(w,Q){let{properties:W,items:Z}=w.schema;if(Q==="object"&&W)for(let Y in W)nW(w,Y,W[Y].default);else if(Q==="array"&&Array.isArray(Z))Z.forEach((Y,X)=>nW(w,X,Y.default))}c5.assignDefaults=S3;function nW(w,Q,W){let{gen:Z,compositeRule:Y,data:X,opts:J}=w;if(W===void 0)return;let q=r6._`${X}${(0,r6.getProperty)(Q)}`;if(Y){(0,b3.checkStrictMode)(w,`default is ignored for: ${q}`);return}let G=r6._`${q} === undefined`;if(J.useDefaults==="empty")G=r6._`${G} || ${q} === null || ${q} === ""`;Z.if(G,r6._`${q} = ${(0,r6.stringify)(W)}`)}});var Y0=O((Jw)=>{Object.defineProperty(Jw,"__esModule",{value:!0});Jw.validateUnion=Jw.validateArray=Jw.usePattern=Jw.callValidateCode=Jw.schemaProperties=Jw.allSchemaProperties=Jw.noPropertyInData=Jw.propertyInData=Jw.isOwnProperty=Jw.hasPropFunc=Jw.reportMissingProp=Jw.checkMissingProp=Jw.checkReportMissingProp=void 0;var Bw=m(),_8=s(),Q6=p0(),E3=s();function k3(w,Q){let{gen:W,data:Z,it:Y}=w;W.if(l8(W,Z,Q,Y.opts.ownProperties),()=>{w.setParams({missingProperty:Bw._`${Q}`},!0),w.error()})}Jw.checkReportMissingProp=k3;function C3({gen:w,data:Q,it:{opts:W}},Z,Y){return(0,Bw.or)(...Z.map((X)=>(0,Bw.and)(l8(w,Q,X,W.ownProperties),Bw._`${Y} = ${X}`)))}Jw.checkMissingProp=C3;function f3(w,Q){w.setParams({missingProperty:Q},!0),w.error()}Jw.reportMissingProp=f3;function sW(w){return w.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:Bw._`Object.prototype.hasOwnProperty`})}Jw.hasPropFunc=sW;function x8(w,Q,W){return Bw._`${sW(w)}.call(${Q}, ${W})`}Jw.isOwnProperty=x8;function v3(w,Q,W,Z){let Y=Bw._`${Q}${(0,Bw.getProperty)(W)} !== undefined`;return Z?Bw._`${Y} && ${x8(w,Q,W)}`:Y}Jw.propertyInData=v3;function l8(w,Q,W,Z){let Y=Bw._`${Q}${(0,Bw.getProperty)(W)} === undefined`;return Z?(0,Bw.or)(Y,(0,Bw.not)(x8(w,Q,W))):Y}Jw.noPropertyInData=l8;function aW(w){return w?Object.keys(w).filter((Q)=>Q!=="__proto__"):[]}Jw.allSchemaProperties=aW;function y3(w,Q){return aW(Q).filter((W)=>!(0,_8.alwaysValidSchema)(w,Q[W]))}Jw.schemaProperties=y3;function u3({schemaCode:w,data:Q,it:{gen:W,topSchemaRef:Z,schemaPath:Y,errorPath:X},it:J},q,G,z){let F=z?Bw._`${w}, ${Q}, ${Z}${Y}`:Q,K=[[Q6.default.instancePath,(0,Bw.strConcat)(Q6.default.instancePath,X)],[Q6.default.parentData,J.parentData],[Q6.default.parentDataProperty,J.parentDataProperty],[Q6.default.rootData,Q6.default.rootData]];if(J.opts.dynamicRef)K.push([Q6.default.dynamicAnchors,Q6.default.dynamicAnchors]);let j=Bw._`${F}, ${W.object(...K)}`;return G!==Bw.nil?Bw._`${q}.call(${G}, ${j})`:Bw._`${q}(${j})`}Jw.callValidateCode=u3;var h3=Bw._`new RegExp`;function g3({gen:w,it:{opts:Q}},W){let Z=Q.unicodeRegExp?"u":"",{regExp:Y}=Q.code,X=Y(W,Z);return w.scopeValue("pattern",{key:X.toString(),ref:X,code:Bw._`${Y.code==="new RegExp"?h3:(0,E3.useFunc)(w,Y)}(${W}, ${Z})`})}Jw.usePattern=g3;function _3(w){let{gen:Q,data:W,keyword:Z,it:Y}=w,X=Q.name("valid");if(Y.allErrors){let q=Q.let("valid",!0);return J(()=>Q.assign(q,!1)),q}return Q.var(X,!0),J(()=>Q.break()),X;function J(q){let G=Q.const("len",Bw._`${W}.length`);Q.forRange("i",0,G,(z)=>{w.subschema({keyword:Z,dataProp:z,dataPropType:_8.Type.Num},X),Q.if((0,Bw.not)(X),q)})}}Jw.validateArray=_3;function x3(w){let{gen:Q,schema:W,keyword:Z,it:Y}=w;if(!Array.isArray(W))throw Error("ajv implementation error");if(W.some((G)=>(0,_8.alwaysValidSchema)(Y,G))&&!Y.opts.unevaluated)return;let J=Q.let("valid",!1),q=Q.name("_valid");Q.block(()=>W.forEach((G,z)=>{let F=w.subschema({keyword:Z,schemaProp:z,compositeRule:!0},q);if(Q.assign(J,Bw._`${J} || ${q}`),!w.mergeValidEvaluated(F,q))Q.if((0,Bw.not)(J))})),w.result(J,()=>w.reset(),()=>w.error(!0))}Jw.validateUnion=x3});var eW=O((b0)=>{Object.defineProperty(b0,"__esModule",{value:!0});b0.validateKeywordUsage=b0.validSchemaType=b0.funcKeywordCode=b0.macroKeywordCode=void 0;var _w=m(),$6=p0(),l3=Y0(),i3=k1();function m3(w,Q){let{gen:W,keyword:Z,schema:Y,parentSchema:X,it:J}=w,q=Q.macro.call(J.self,Y,X,J),G=oW(W,Z,q);if(J.opts.validateSchema!==!1)J.self.validateSchema(q,!0);let z=W.name("valid");w.subschema({schema:q,schemaPath:_w.nil,errSchemaPath:`${J.errSchemaPath}/${Z}`,topSchemaRef:G,compositeRule:!0},z),w.pass(z,()=>w.error(!0))}b0.macroKeywordCode=m3;function p3(w,Q){var W;let{gen:Z,keyword:Y,schema:X,parentSchema:J,$data:q,it:G}=w;d3(G,Q);let z=!q&&Q.compile?Q.compile.call(G.self,X,J,G):Q.validate,F=oW(Z,Y,z),K=Z.let("valid");w.block$data(K,j),w.ok((W=Q.valid)!==null&&W!==void 0?W:K);function j(){if(Q.errors===!1){if(H(),Q.modifying)tW(w);A(()=>w.error())}else{let $=Q.async?V():M();if(Q.modifying)tW(w);A(()=>c3(w,$))}}function V(){let $=Z.let("ruleErrs",null);return Z.try(()=>H(_w._`await `),(T)=>Z.assign(K,!1).if(_w._`${T} instanceof ${G.ValidationError}`,()=>Z.assign($,_w._`${T}.errors`),()=>Z.throw(T))),$}function M(){let $=_w._`${F}.errors`;return Z.assign($,null),H(_w.nil),$}function H($=Q.async?_w._`await `:_w.nil){let T=G.opts.passContext?$6.default.this:$6.default.self,P=!(("compile"in Q)&&!q||Q.schema===!1);Z.assign(K,_w._`${$}${(0,l3.callValidateCode)(w,F,T,P)}`,Q.modifying)}function A($){var T;Z.if((0,_w.not)((T=Q.valid)!==null&&T!==void 0?T:K),$)}}b0.funcKeywordCode=p3;function tW(w){let{gen:Q,data:W,it:Z}=w;Q.if(Z.parentData,()=>Q.assign(W,_w._`${Z.parentData}[${Z.parentDataProperty}]`))}function c3(w,Q){let{gen:W}=w;W.if(_w._`Array.isArray(${Q})`,()=>{W.assign($6.default.vErrors,_w._`${$6.default.vErrors} === null ? ${Q} : ${$6.default.vErrors}.concat(${Q})`).assign($6.default.errors,_w._`${$6.default.vErrors}.length`),(0,i3.extendErrors)(w)},()=>w.error())}function d3({schemaEnv:w},Q){if(Q.async&&!w.$async)throw Error("async keyword in sync schema")}function oW(w,Q,W){if(W===void 0)throw Error(`keyword "${Q}" failed to compile`);return w.scopeValue("keyword",typeof W=="function"?{ref:W}:{ref:W,code:(0,_w.stringify)(W)})}function n3(w,Q,W=!1){return!Q.length||Q.some((Z)=>Z==="array"?Array.isArray(w):Z==="object"?w&&typeof w=="object"&&!Array.isArray(w):typeof w==Z||W&&typeof w>"u")}b0.validSchemaType=n3;function r3({schema:w,opts:Q,self:W,errSchemaPath:Z},Y,X){if(Array.isArray(Y.keyword)?!Y.keyword.includes(X):Y.keyword!==X)throw Error("ajv implementation error");let J=Y.dependencies;if(J===null||J===void 0?void 0:J.some((q)=>!Object.prototype.hasOwnProperty.call(w,q)))throw Error(`parent schema must have dependencies of ${X}: ${J.join(",")}`);if(Y.validateSchema){if(!Y.validateSchema(w[X])){let G=`keyword "${X}" value is invalid at path "${Z}": `+W.errorsText(Y.validateSchema.errors);if(Q.validateSchema==="log")W.logger.error(G);else throw Error(G)}}}b0.validateKeywordUsage=r3});var QZ=O((W6)=>{Object.defineProperty(W6,"__esModule",{value:!0});W6.extendSubschemaMode=W6.extendSubschemaData=W6.getSubschema=void 0;var S0=m(),wZ=s();function s3(w,{keyword:Q,schemaProp:W,schema:Z,schemaPath:Y,errSchemaPath:X,topSchemaRef:J}){if(Q!==void 0&&Z!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(Q!==void 0){let q=w.schema[Q];return W===void 0?{schema:q,schemaPath:S0._`${w.schemaPath}${(0,S0.getProperty)(Q)}`,errSchemaPath:`${w.errSchemaPath}/${Q}`}:{schema:q[W],schemaPath:S0._`${w.schemaPath}${(0,S0.getProperty)(Q)}${(0,S0.getProperty)(W)}`,errSchemaPath:`${w.errSchemaPath}/${Q}/${(0,wZ.escapeFragment)(W)}`}}if(Z!==void 0){if(Y===void 0||X===void 0||J===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:Z,schemaPath:Y,topSchemaRef:J,errSchemaPath:X}}throw Error('either "keyword" or "schema" must be passed')}W6.getSubschema=s3;function a3(w,Q,{dataProp:W,dataPropType:Z,data:Y,dataTypes:X,propertyName:J}){if(Y!==void 0&&W!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:q}=Q;if(W!==void 0){let{errorPath:z,dataPathArr:F,opts:K}=Q,j=q.let("data",S0._`${Q.data}${(0,S0.getProperty)(W)}`,!0);G(j),w.errorPath=S0.str`${z}${(0,wZ.getErrorPath)(W,Z,K.jsPropertySyntax)}`,w.parentDataProperty=S0._`${W}`,w.dataPathArr=[...F,w.parentDataProperty]}if(Y!==void 0){let z=Y instanceof S0.Name?Y:q.let("data",Y,!0);if(G(z),J!==void 0)w.propertyName=J}if(X)w.dataTypes=X;function G(z){w.data=z,w.dataLevel=Q.dataLevel+1,w.dataTypes=[],Q.definedProperties=new Set,w.parentData=Q.data,w.dataNames=[...Q.dataNames,z]}}W6.extendSubschemaData=a3;function t3(w,{jtdDiscriminator:Q,jtdMetadata:W,compositeRule:Z,createErrors:Y,allErrors:X}){if(Z!==void 0)w.compositeRule=Z;if(Y!==void 0)w.createErrors=Y;if(X!==void 0)w.allErrors=X;w.jtdDiscriminator=Q,w.jtdMetadata=W}W6.extendSubschemaMode=t3});var f1=O((k$,WZ)=>{WZ.exports=function w(Q,W){if(Q===W)return!0;if(Q&&W&&typeof Q=="object"&&typeof W=="object"){if(Q.constructor!==W.constructor)return!1;var Z,Y,X;if(Array.isArray(Q)){if(Z=Q.length,Z!=W.length)return!1;for(Y=Z;Y--!==0;)if(!w(Q[Y],W[Y]))return!1;return!0}if(Q.constructor===RegExp)return Q.source===W.source&&Q.flags===W.flags;if(Q.valueOf!==Object.prototype.valueOf)return Q.valueOf()===W.valueOf();if(Q.toString!==Object.prototype.toString)return Q.toString()===W.toString();if(X=Object.keys(Q),Z=X.length,Z!==Object.keys(W).length)return!1;for(Y=Z;Y--!==0;)if(!Object.prototype.hasOwnProperty.call(W,X[Y]))return!1;for(Y=Z;Y--!==0;){var J=X[Y];if(!w(Q[J],W[J]))return!1}return!0}return Q!==Q&&W!==W}});var i8=O((C$,ZZ)=>{var Z6=ZZ.exports=function(w,Q,W){if(typeof Q=="function")W=Q,Q={};W=Q.cb||W;var Z=typeof W=="function"?W:W.pre||function(){},Y=W.post||function(){};d5(Q,Z,Y,w,"",w)};Z6.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};Z6.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};Z6.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};Z6.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function d5(w,Q,W,Z,Y,X,J,q,G,z){if(Z&&typeof Z=="object"&&!Array.isArray(Z)){Q(Z,Y,X,J,q,G,z);for(var F in Z){var K=Z[F];if(Array.isArray(K)){if(F in Z6.arrayKeywords)for(var j=0;j<K.length;j++)d5(w,Q,W,K[j],Y+"/"+F+"/"+j,X,Y,F,Z,j)}else if(F in Z6.propsKeywords){if(K&&typeof K=="object")for(var V in K)d5(w,Q,W,K[V],Y+"/"+F+"/"+o3(V),X,Y,F,Z,V)}else if(F in Z6.keywords||w.allKeys&&!(F in Z6.skipKeywords))d5(w,Q,W,K,Y+"/"+F,X,Y,F,Z)}W(Z,Y,X,J,q,G,z)}}function o3(w){return w.replace(/~/g,"~0").replace(/\//g,"~1")}});var v1=O((nw)=>{Object.defineProperty(nw,"__esModule",{value:!0});nw.getSchemaRefs=nw.resolveUrl=nw.normalizeId=nw._getFullPath=nw.getFullPath=nw.inlineRef=void 0;var e3=s(),wF=f1(),QF=i8(),WF=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function ZF(w,Q=!0){if(typeof w=="boolean")return!0;if(Q===!0)return!m8(w);if(!Q)return!1;return YZ(w)<=Q}nw.inlineRef=ZF;var YF=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function m8(w){for(let Q in w){if(YF.has(Q))return!0;let W=w[Q];if(Array.isArray(W)&&W.some(m8))return!0;if(typeof W=="object"&&m8(W))return!0}return!1}function YZ(w){let Q=0;for(let W in w){if(W==="$ref")return 1/0;if(Q++,WF.has(W))continue;if(typeof w[W]=="object")(0,e3.eachItem)(w[W],(Z)=>Q+=YZ(Z));if(Q===1/0)return 1/0}return Q}function XZ(w,Q="",W){if(W!==!1)Q=s6(Q);let Z=w.parse(Q);return JZ(w,Z)}nw.getFullPath=XZ;function JZ(w,Q){return w.serialize(Q).split("#")[0]+"#"}nw._getFullPath=JZ;var XF=/#\/?$/;function s6(w){return w?w.replace(XF,""):""}nw.normalizeId=s6;function JF(w,Q,W){return W=s6(W),w.resolve(Q,W)}nw.resolveUrl=JF;var qF=/^[a-z_][-a-z0-9._]*$/i;function GF(w,Q){if(typeof w=="boolean")return{};let{schemaId:W,uriResolver:Z}=this.opts,Y=s6(w[W]||Q),X={"":Y},J=XZ(Z,Y,!1),q={},G=new Set;return QF(w,{allKeys:!0},(K,j,V,M)=>{if(M===void 0)return;let H=J+j,A=X[M];if(typeof K[W]=="string")A=$.call(this,K[W]);T.call(this,K.$anchor),T.call(this,K.$dynamicAnchor),X[j]=A;function $(P){let b=this.opts.uriResolver.resolve;if(P=s6(A?b(A,P):P),G.has(P))throw F(P);G.add(P);let N=this.refs[P];if(typeof N=="string")N=this.refs[N];if(typeof N=="object")z(K,N.schema,P);else if(P!==s6(H))if(P[0]==="#")z(K,q[P],P),q[P]=K;else this.refs[P]=H;return P}function T(P){if(typeof P=="string"){if(!qF.test(P))throw Error(`invalid anchor "${P}"`);$.call(this,`#${P}`)}}}),q;function z(K,j,V){if(j!==void 0&&!wF(K,j))throw F(V)}function F(K){return Error(`reference "${K}" resolves to more than one schema`)}}nw.getSchemaRefs=GF});var h1=O((Y6)=>{Object.defineProperty(Y6,"__esModule",{value:!0});Y6.getData=Y6.KeywordCxt=Y6.validateFunctionCode=void 0;var KZ=lW(),qZ=C1(),c8=y8(),n5=C1(),zF=rW(),u1=eW(),p8=QZ(),E=m(),C=p0(),FF=v1(),c0=s(),y1=k1();function KF(w){if(VZ(w)){if(MZ(w),HZ(w)){VF(w);return}}BZ(w,()=>(0,KZ.topBoolOrEmptySchema)(w))}Y6.validateFunctionCode=KF;function BZ({gen:w,validateName:Q,schema:W,schemaEnv:Z,opts:Y},X){if(Y.code.es5)w.func(Q,E._`${C.default.data}, ${C.default.valCxt}`,Z.$async,()=>{w.code(E._`"use strict"; ${GZ(W,Y)}`),HF(w,Y),w.code(X)});else w.func(Q,E._`${C.default.data}, ${BF(Y)}`,Z.$async,()=>w.code(GZ(W,Y)).code(X))}function BF(w){return E._`{${C.default.instancePath}="", ${C.default.parentData}, ${C.default.parentDataProperty}, ${C.default.rootData}=${C.default.data}${w.dynamicRef?E._`, ${C.default.dynamicAnchors}={}`:E.nil}}={}`}function HF(w,Q){w.if(C.default.valCxt,()=>{if(w.var(C.default.instancePath,E._`${C.default.valCxt}.${C.default.instancePath}`),w.var(C.default.parentData,E._`${C.default.valCxt}.${C.default.parentData}`),w.var(C.default.parentDataProperty,E._`${C.default.valCxt}.${C.default.parentDataProperty}`),w.var(C.default.rootData,E._`${C.default.valCxt}.${C.default.rootData}`),Q.dynamicRef)w.var(C.default.dynamicAnchors,E._`${C.default.valCxt}.${C.default.dynamicAnchors}`)},()=>{if(w.var(C.default.instancePath,E._`""`),w.var(C.default.parentData,E._`undefined`),w.var(C.default.parentDataProperty,E._`undefined`),w.var(C.default.rootData,C.default.data),Q.dynamicRef)w.var(C.default.dynamicAnchors,E._`{}`)})}function VF(w){let{schema:Q,opts:W,gen:Z}=w;BZ(w,()=>{if(W.$comment&&Q.$comment)UZ(w);if(AF(w),Z.let(C.default.vErrors,null),Z.let(C.default.errors,0),W.unevaluated)MF(w);LZ(w),NF(w)});return}function MF(w){let{gen:Q,validateName:W}=w;w.evaluated=Q.const("evaluated",E._`${W}.evaluated`),Q.if(E._`${w.evaluated}.dynamicProps`,()=>Q.assign(E._`${w.evaluated}.props`,E._`undefined`)),Q.if(E._`${w.evaluated}.dynamicItems`,()=>Q.assign(E._`${w.evaluated}.items`,E._`undefined`))}function GZ(w,Q){let W=typeof w=="object"&&w[Q.schemaId];return W&&(Q.code.source||Q.code.process)?E._`/*# sourceURL=${W} */`:E.nil}function LF(w,Q){if(VZ(w)){if(MZ(w),HZ(w)){UF(w,Q);return}}(0,KZ.boolOrEmptySchema)(w,Q)}function HZ({schema:w,self:Q}){if(typeof w=="boolean")return!w;for(let W in w)if(Q.RULES.all[W])return!0;return!1}function VZ(w){return typeof w.schema!="boolean"}function UF(w,Q){let{schema:W,gen:Z,opts:Y}=w;if(Y.$comment&&W.$comment)UZ(w);$F(w),OF(w);let X=Z.const("_errs",C.default.errors);LZ(w,X),Z.var(Q,E._`${X} === ${C.default.errors}`)}function MZ(w){(0,c0.checkUnknownRules)(w),jF(w)}function LZ(w,Q){if(w.opts.jtd)return zZ(w,[],!1,Q);let W=(0,qZ.getSchemaTypes)(w.schema),Z=(0,qZ.coerceAndCheckDataType)(w,W);zZ(w,W,!Z,Q)}function jF(w){let{schema:Q,errSchemaPath:W,opts:Z,self:Y}=w;if(Q.$ref&&Z.ignoreKeywordsWithRef&&(0,c0.schemaHasRulesButRef)(Q,Y.RULES))Y.logger.warn(`$ref: keywords ignored in schema at path "${W}"`)}function AF(w){let{schema:Q,opts:W}=w;if(Q.default!==void 0&&W.useDefaults&&W.strictSchema)(0,c0.checkStrictMode)(w,"default is ignored in the schema root")}function $F(w){let Q=w.schema[w.opts.schemaId];if(Q)w.baseId=(0,FF.resolveUrl)(w.opts.uriResolver,w.baseId,Q)}function OF(w){if(w.schema.$async&&!w.schemaEnv.$async)throw Error("async schema in sync schema")}function UZ({gen:w,schemaEnv:Q,schema:W,errSchemaPath:Z,opts:Y}){let X=W.$comment;if(Y.$comment===!0)w.code(E._`${C.default.self}.logger.log(${X})`);else if(typeof Y.$comment=="function"){let J=E.str`${Z}/$comment`,q=w.scopeValue("root",{ref:Q.root});w.code(E._`${C.default.self}.opts.$comment(${X}, ${J}, ${q}.schema)`)}}function NF(w){let{gen:Q,schemaEnv:W,validateName:Z,ValidationError:Y,opts:X}=w;if(W.$async)Q.if(E._`${C.default.errors} === 0`,()=>Q.return(C.default.data),()=>Q.throw(E._`new ${Y}(${C.default.vErrors})`));else{if(Q.assign(E._`${Z}.errors`,C.default.vErrors),X.unevaluated)DF(w);Q.return(E._`${C.default.errors} === 0`)}}function DF({gen:w,evaluated:Q,props:W,items:Z}){if(W instanceof E.Name)w.assign(E._`${Q}.props`,W);if(Z instanceof E.Name)w.assign(E._`${Q}.items`,Z)}function zZ(w,Q,W,Z){let{gen:Y,schema:X,data:J,allErrors:q,opts:G,self:z}=w,{RULES:F}=z;if(X.$ref&&(G.ignoreKeywordsWithRef||!(0,c0.schemaHasRulesButRef)(X,F))){Y.block(()=>AZ(w,"$ref",F.all.$ref.definition));return}if(!G.jtd)IF(w,Q);Y.block(()=>{for(let j of F.rules)K(j);K(F.post)});function K(j){if(!(0,c8.shouldUseGroup)(X,j))return;if(j.type){if(Y.if((0,n5.checkDataType)(j.type,J,G.strictNumbers)),FZ(w,j),Q.length===1&&Q[0]===j.type&&W)Y.else(),(0,n5.reportTypeError)(w);Y.endIf()}else FZ(w,j);if(!q)Y.if(E._`${C.default.errors} === ${Z||0}`)}}function FZ(w,Q){let{gen:W,schema:Z,opts:{useDefaults:Y}}=w;if(Y)(0,zF.assignDefaults)(w,Q.type);W.block(()=>{for(let X of Q.rules)if((0,c8.shouldUseRule)(Z,X))AZ(w,X.keyword,X.definition,Q.type)})}function IF(w,Q){if(w.schemaEnv.meta||!w.opts.strictTypes)return;if(TF(w,Q),!w.opts.allowUnionTypes)PF(w,Q);RF(w,w.dataTypes)}function TF(w,Q){if(!Q.length)return;if(!w.dataTypes.length){w.dataTypes=Q;return}Q.forEach((W)=>{if(!jZ(w.dataTypes,W))d8(w,`type "${W}" not allowed by context "${w.dataTypes.join(",")}"`)}),SF(w,Q)}function PF(w,Q){if(Q.length>1&&!(Q.length===2&&Q.includes("null")))d8(w,"use allowUnionTypes to allow union type keyword")}function RF(w,Q){let W=w.self.RULES.all;for(let Z in W){let Y=W[Z];if(typeof Y=="object"&&(0,c8.shouldUseRule)(w.schema,Y)){let{type:X}=Y.definition;if(X.length&&!X.some((J)=>bF(Q,J)))d8(w,`missing type "${X.join(",")}" for keyword "${Z}"`)}}}function bF(w,Q){return w.includes(Q)||Q==="number"&&w.includes("integer")}function jZ(w,Q){return w.includes(Q)||Q==="integer"&&w.includes("number")}function SF(w,Q){let W=[];for(let Z of w.dataTypes)if(jZ(Q,Z))W.push(Z);else if(Q.includes("integer")&&Z==="number")W.push("integer");w.dataTypes=W}function d8(w,Q){let W=w.schemaEnv.baseId+w.errSchemaPath;Q+=` at "${W}" (strictTypes)`,(0,c0.checkStrictMode)(w,Q,w.opts.strictTypes)}class n8{constructor(w,Q,W){if((0,u1.validateKeywordUsage)(w,Q,W),this.gen=w.gen,this.allErrors=w.allErrors,this.keyword=W,this.data=w.data,this.schema=w.schema[W],this.$data=Q.$data&&w.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,c0.schemaRefOrVal)(w,this.schema,W,this.$data),this.schemaType=Q.schemaType,this.parentSchema=w.schema,this.params={},this.it=w,this.def=Q,this.$data)this.schemaCode=w.gen.const("vSchema",$Z(this.$data,w));else if(this.schemaCode=this.schemaValue,!(0,u1.validSchemaType)(this.schema,Q.schemaType,Q.allowUndefined))throw Error(`${W} value must be ${JSON.stringify(Q.schemaType)}`);if("code"in Q?Q.trackErrors:Q.errors!==!1)this.errsCount=w.gen.const("_errs",C.default.errors)}result(w,Q,W){this.failResult((0,E.not)(w),Q,W)}failResult(w,Q,W){if(this.gen.if(w),W)W();else this.error();if(Q){if(this.gen.else(),Q(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(w,Q){this.failResult((0,E.not)(w),void 0,Q)}fail(w){if(w===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(w),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(w){if(!this.$data)return this.fail(w);let{schemaCode:Q}=this;this.fail(E._`${Q} !== undefined && (${(0,E.or)(this.invalid$data(),w)})`)}error(w,Q,W){if(Q){this.setParams(Q),this._error(w,W),this.setParams({});return}this._error(w,W)}_error(w,Q){(w?y1.reportExtraError:y1.reportError)(this,this.def.error,Q)}$dataError(){(0,y1.reportError)(this,this.def.$dataError||y1.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,y1.resetErrorsCount)(this.gen,this.errsCount)}ok(w){if(!this.allErrors)this.gen.if(w)}setParams(w,Q){if(Q)Object.assign(this.params,w);else this.params=w}block$data(w,Q,W=E.nil){this.gen.block(()=>{this.check$data(w,W),Q()})}check$data(w=E.nil,Q=E.nil){if(!this.$data)return;let{gen:W,schemaCode:Z,schemaType:Y,def:X}=this;if(W.if((0,E.or)(E._`${Z} === undefined`,Q)),w!==E.nil)W.assign(w,!0);if(Y.length||X.validateSchema){if(W.elseIf(this.invalid$data()),this.$dataError(),w!==E.nil)W.assign(w,!1)}W.else()}invalid$data(){let{gen:w,schemaCode:Q,schemaType:W,def:Z,it:Y}=this;return(0,E.or)(X(),J());function X(){if(W.length){if(!(Q instanceof E.Name))throw Error("ajv implementation error");let q=Array.isArray(W)?W:[W];return E._`${(0,n5.checkDataTypes)(q,Q,Y.opts.strictNumbers,n5.DataType.Wrong)}`}return E.nil}function J(){if(Z.validateSchema){let q=w.scopeValue("validate$data",{ref:Z.validateSchema});return E._`!${q}(${Q})`}return E.nil}}subschema(w,Q){let W=(0,p8.getSubschema)(this.it,w);(0,p8.extendSubschemaData)(W,this.it,w),(0,p8.extendSubschemaMode)(W,w);let Z={...this.it,...W,items:void 0,props:void 0};return LF(Z,Q),Z}mergeEvaluated(w,Q){let{it:W,gen:Z}=this;if(!W.opts.unevaluated)return;if(W.props!==!0&&w.props!==void 0)W.props=c0.mergeEvaluated.props(Z,w.props,W.props,Q);if(W.items!==!0&&w.items!==void 0)W.items=c0.mergeEvaluated.items(Z,w.items,W.items,Q)}mergeValidEvaluated(w,Q){let{it:W,gen:Z}=this;if(W.opts.unevaluated&&(W.props!==!0||W.items!==!0))return Z.if(Q,()=>this.mergeEvaluated(w,E.Name)),!0}}Y6.KeywordCxt=n8;function AZ(w,Q,W,Z){let Y=new n8(w,W,Q);if("code"in W)W.code(Y,Z);else if(Y.$data&&W.validate)(0,u1.funcKeywordCode)(Y,W);else if("macro"in W)(0,u1.macroKeywordCode)(Y,W);else if(W.compile||W.validate)(0,u1.funcKeywordCode)(Y,W)}var EF=/^\/(?:[^~]|~0|~1)*$/,kF=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function $Z(w,{dataLevel:Q,dataNames:W,dataPathArr:Z}){let Y,X;if(w==="")return C.default.rootData;if(w[0]==="/"){if(!EF.test(w))throw Error(`Invalid JSON-pointer: ${w}`);Y=w,X=C.default.rootData}else{let z=kF.exec(w);if(!z)throw Error(`Invalid JSON-pointer: ${w}`);let F=+z[1];if(Y=z[2],Y==="#"){if(F>=Q)throw Error(G("property/index",F));return Z[Q-F]}if(F>Q)throw Error(G("data",F));if(X=W[Q-F],!Y)return X}let J=X,q=Y.split("/");for(let z of q)if(z)X=E._`${X}${(0,E.getProperty)((0,c0.unescapeJsonPointer)(z))}`,J=E._`${J} && ${X}`;return J;function G(z,F){return`Cannot access ${z} ${F} levels up, current level is ${Q}`}}Y6.getData=$Z});var r5=O((r8)=>{Object.defineProperty(r8,"__esModule",{value:!0});class OZ extends Error{constructor(w){super("validation failed");this.errors=w,this.ajv=this.validation=!0}}r8.default=OZ});var g1=O((a8)=>{Object.defineProperty(a8,"__esModule",{value:!0});var s8=v1();class NZ extends Error{constructor(w,Q,W,Z){super(Z||`can't resolve reference ${W} from id ${Q}`);this.missingRef=(0,s8.resolveUrl)(w,Q,W),this.missingSchema=(0,s8.normalizeId)((0,s8.getFullPath)(w,this.missingRef))}}a8.default=NZ});var a5=O((X0)=>{Object.defineProperty(X0,"__esModule",{value:!0});X0.resolveSchema=X0.getCompilingSchema=X0.resolveRef=X0.compileSchema=X0.SchemaEnv=void 0;var V0=m(),CF=r5(),O6=p0(),M0=v1(),DZ=s(),fF=h1();class _1{constructor(w){var Q;this.refs={},this.dynamicAnchors={};let W;if(typeof w.schema=="object")W=w.schema;this.schema=w.schema,this.schemaId=w.schemaId,this.root=w.root||this,this.baseId=(Q=w.baseId)!==null&&Q!==void 0?Q:(0,M0.normalizeId)(W===null||W===void 0?void 0:W[w.schemaId||"$id"]),this.schemaPath=w.schemaPath,this.localRefs=w.localRefs,this.meta=w.meta,this.$async=W===null||W===void 0?void 0:W.$async,this.refs={}}}X0.SchemaEnv=_1;function o8(w){let Q=IZ.call(this,w);if(Q)return Q;let W=(0,M0.getFullPath)(this.opts.uriResolver,w.root.baseId),{es5:Z,lines:Y}=this.opts.code,{ownProperties:X}=this.opts,J=new V0.CodeGen(this.scope,{es5:Z,lines:Y,ownProperties:X}),q;if(w.$async)q=J.scopeValue("Error",{ref:CF.default,code:V0._`require("ajv/dist/runtime/validation_error").default`});let G=J.scopeName("validate");w.validateName=G;let z={gen:J,allErrors:this.opts.allErrors,data:O6.default.data,parentData:O6.default.parentData,parentDataProperty:O6.default.parentDataProperty,dataNames:[O6.default.data],dataPathArr:[V0.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:J.scopeValue("schema",this.opts.code.source===!0?{ref:w.schema,code:(0,V0.stringify)(w.schema)}:{ref:w.schema}),validateName:G,ValidationError:q,schema:w.schema,schemaEnv:w,rootId:W,baseId:w.baseId||W,schemaPath:V0.nil,errSchemaPath:w.schemaPath||(this.opts.jtd?"":"#"),errorPath:V0._`""`,opts:this.opts,self:this},F;try{this._compilations.add(w),(0,fF.validateFunctionCode)(z),J.optimize(this.opts.code.optimize);let K=J.toString();if(F=`${J.scopeRefs(O6.default.scope)}return ${K}`,this.opts.code.process)F=this.opts.code.process(F,w);let V=Function(`${O6.default.self}`,`${O6.default.scope}`,F)(this,this.scope.get());if(this.scope.value(G,{ref:V}),V.errors=null,V.schema=w.schema,V.schemaEnv=w,w.$async)V.$async=!0;if(this.opts.code.source===!0)V.source={validateName:G,validateCode:K,scopeValues:J._values};if(this.opts.unevaluated){let{props:M,items:H}=z;if(V.evaluated={props:M instanceof V0.Name?void 0:M,items:H instanceof V0.Name?void 0:H,dynamicProps:M instanceof V0.Name,dynamicItems:H instanceof V0.Name},V.source)V.source.evaluated=(0,V0.stringify)(V.evaluated)}return w.validate=V,w}catch(K){if(delete w.validate,delete w.validateName,F)this.logger.error("Error compiling schema, function code:",F);throw K}finally{this._compilations.delete(w)}}X0.compileSchema=o8;function vF(w,Q,W){var Z;W=(0,M0.resolveUrl)(this.opts.uriResolver,Q,W);let Y=w.refs[W];if(Y)return Y;let X=hF.call(this,w,W);if(X===void 0){let J=(Z=w.localRefs)===null||Z===void 0?void 0:Z[W],{schemaId:q}=this.opts;if(J)X=new _1({schema:J,schemaId:q,root:w,baseId:Q})}if(X===void 0)return;return w.refs[W]=yF.call(this,X)}X0.resolveRef=vF;function yF(w){if((0,M0.inlineRef)(w.schema,this.opts.inlineRefs))return w.schema;return w.validate?w:o8.call(this,w)}function IZ(w){for(let Q of this._compilations)if(uF(Q,w))return Q}X0.getCompilingSchema=IZ;function uF(w,Q){return w.schema===Q.schema&&w.root===Q.root&&w.baseId===Q.baseId}function hF(w,Q){let W;while(typeof(W=this.refs[Q])=="string")Q=W;return W||this.schemas[Q]||s5.call(this,w,Q)}function s5(w,Q){let W=this.opts.uriResolver.parse(Q),Z=(0,M0._getFullPath)(this.opts.uriResolver,W),Y=(0,M0.getFullPath)(this.opts.uriResolver,w.baseId,void 0);if(Object.keys(w.schema).length>0&&Z===Y)return t8.call(this,W,w);let X=(0,M0.normalizeId)(Z),J=this.refs[X]||this.schemas[X];if(typeof J=="string"){let q=s5.call(this,w,J);if(typeof(q===null||q===void 0?void 0:q.schema)!=="object")return;return t8.call(this,W,q)}if(typeof(J===null||J===void 0?void 0:J.schema)!=="object")return;if(!J.validate)o8.call(this,J);if(X===(0,M0.normalizeId)(Q)){let{schema:q}=J,{schemaId:G}=this.opts,z=q[G];if(z)Y=(0,M0.resolveUrl)(this.opts.uriResolver,Y,z);return new _1({schema:q,schemaId:G,root:w,baseId:Y})}return t8.call(this,W,J)}X0.resolveSchema=s5;var gF=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function t8(w,{baseId:Q,schema:W,root:Z}){var Y;if(((Y=w.fragment)===null||Y===void 0?void 0:Y[0])!=="/")return;for(let q of w.fragment.slice(1).split("/")){if(typeof W==="boolean")return;let G=W[(0,DZ.unescapeFragment)(q)];if(G===void 0)return;W=G;let z=typeof W==="object"&&W[this.opts.schemaId];if(!gF.has(q)&&z)Q=(0,M0.resolveUrl)(this.opts.uriResolver,Q,z)}let X;if(typeof W!="boolean"&&W.$ref&&!(0,DZ.schemaHasRulesButRef)(W,this.RULES)){let q=(0,M0.resolveUrl)(this.opts.uriResolver,Q,W.$ref);X=s5.call(this,Z,q)}let{schemaId:J}=this.opts;if(X=X||new _1({schema:W,schemaId:J,root:Z,baseId:Q}),X.schema!==X.root.schema)return X;return}});var TZ=O((g$,_F)=>{_F.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var w4=O((_$,SZ)=>{var xF=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),RZ=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function e8(w){let Q="",W=0,Z=0;for(Z=0;Z<w.length;Z++){if(W=w[Z].charCodeAt(0),W===48)continue;if(!(W>=48&&W<=57||W>=65&&W<=70||W>=97&&W<=102))return"";Q+=w[Z];break}for(Z+=1;Z<w.length;Z++){if(W=w[Z].charCodeAt(0),!(W>=48&&W<=57||W>=65&&W<=70||W>=97&&W<=102))return"";Q+=w[Z]}return Q}var lF=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function PZ(w){return w.length=0,!0}function iF(w,Q,W){if(w.length){let Z=e8(w);if(Z!=="")Q.push(Z);else return W.error=!0,!1;w.length=0}return!0}function mF(w){let Q=0,W={error:!1,address:"",zone:""},Z=[],Y=[],X=!1,J=!1,q=iF;for(let G=0;G<w.length;G++){let z=w[G];if(z==="["||z==="]")continue;if(z===":"){if(X===!0)J=!0;if(!q(Y,Z,W))break;if(++Q>7){W.error=!0;break}if(G>0&&w[G-1]===":")X=!0;Z.push(":");continue}else if(z==="%"){if(!q(Y,Z,W))break;q=PZ}else{Y.push(z);continue}}if(Y.length)if(q===PZ)W.zone=Y.join("");else if(J)Z.push(Y.join(""));else Z.push(e8(Y));return W.address=Z.join(""),W}function bZ(w){if(pF(w,":")<2)return{host:w,isIPV6:!1};let Q=mF(w);if(!Q.error){let{address:W,address:Z}=Q;if(Q.zone)W+="%"+Q.zone,Z+="%25"+Q.zone;return{host:W,isIPV6:!0,escapedHost:Z}}else return{host:w,isIPV6:!1}}function pF(w,Q){let W=0;for(let Z=0;Z<w.length;Z++)if(w[Z]===Q)W++;return W}function cF(w){let Q=w,W=[],Z=-1,Y=0;while(Y=Q.length){if(Y===1)if(Q===".")break;else if(Q==="/"){W.push("/");break}else{W.push(Q);break}else if(Y===2){if(Q[0]==="."){if(Q[1]===".")break;else if(Q[1]==="/"){Q=Q.slice(2);continue}}else if(Q[0]==="/"){if(Q[1]==="."||Q[1]==="/"){W.push("/");break}}}else if(Y===3){if(Q==="/.."){if(W.length!==0)W.pop();W.push("/");break}}if(Q[0]==="."){if(Q[1]==="."){if(Q[2]==="/"){Q=Q.slice(3);continue}}else if(Q[1]==="/"){Q=Q.slice(2);continue}}else if(Q[0]==="/"){if(Q[1]==="."){if(Q[2]==="/"){Q=Q.slice(2);continue}else if(Q[2]==="."){if(Q[3]==="/"){if(Q=Q.slice(3),W.length!==0)W.pop();continue}}}}if((Z=Q.indexOf("/",1))===-1){W.push(Q);break}else W.push(Q.slice(0,Z)),Q=Q.slice(Z)}return W.join("")}function dF(w,Q){let W=Q!==!0?escape:unescape;if(w.scheme!==void 0)w.scheme=W(w.scheme);if(w.userinfo!==void 0)w.userinfo=W(w.userinfo);if(w.host!==void 0)w.host=W(w.host);if(w.path!==void 0)w.path=W(w.path);if(w.query!==void 0)w.query=W(w.query);if(w.fragment!==void 0)w.fragment=W(w.fragment);return w}function nF(w){let Q=[];if(w.userinfo!==void 0)Q.push(w.userinfo),Q.push("@");if(w.host!==void 0){let W=unescape(w.host);if(!RZ(W)){let Z=bZ(W);if(Z.isIPV6===!0)W=`[${Z.escapedHost}]`;else W=w.host}Q.push(W)}if(typeof w.port==="number"||typeof w.port==="string")Q.push(":"),Q.push(String(w.port));return Q.length?Q.join(""):void 0}SZ.exports={nonSimpleDomain:lF,recomposeAuthority:nF,normalizeComponentEncoding:dF,removeDotSegments:cF,isIPv4:RZ,isUUID:xF,normalizeIPv6:bZ,stringArrayToHexStripped:e8}});var vZ=O((x$,fZ)=>{var{isUUID:rF}=w4(),sF=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,aF=["http","https","ws","wss","urn","urn:uuid"];function tF(w){return aF.indexOf(w)!==-1}function Q4(w){if(w.secure===!0)return!0;else if(w.secure===!1)return!1;else if(w.scheme)return w.scheme.length===3&&(w.scheme[0]==="w"||w.scheme[0]==="W")&&(w.scheme[1]==="s"||w.scheme[1]==="S")&&(w.scheme[2]==="s"||w.scheme[2]==="S");else return!1}function EZ(w){if(!w.host)w.error=w.error||"HTTP URIs must have a host.";return w}function kZ(w){let Q=String(w.scheme).toLowerCase()==="https";if(w.port===(Q?443:80)||w.port==="")w.port=void 0;if(!w.path)w.path="/";return w}function oF(w){return w.secure=Q4(w),w.resourceName=(w.path||"/")+(w.query?"?"+w.query:""),w.path=void 0,w.query=void 0,w}function eF(w){if(w.port===(Q4(w)?443:80)||w.port==="")w.port=void 0;if(typeof w.secure==="boolean")w.scheme=w.secure?"wss":"ws",w.secure=void 0;if(w.resourceName){let[Q,W]=w.resourceName.split("?");w.path=Q&&Q!=="/"?Q:void 0,w.query=W,w.resourceName=void 0}return w.fragment=void 0,w}function wK(w,Q){if(!w.path)return w.error="URN can not be parsed",w;let W=w.path.match(sF);if(W){let Z=Q.scheme||w.scheme||"urn";w.nid=W[1].toLowerCase(),w.nss=W[2];let Y=`${Z}:${Q.nid||w.nid}`,X=W4(Y);if(w.path=void 0,X)w=X.parse(w,Q)}else w.error=w.error||"URN can not be parsed.";return w}function QK(w,Q){if(w.nid===void 0)throw Error("URN without nid cannot be serialized");let W=Q.scheme||w.scheme||"urn",Z=w.nid.toLowerCase(),Y=`${W}:${Q.nid||Z}`,X=W4(Y);if(X)w=X.serialize(w,Q);let J=w,q=w.nss;return J.path=`${Z||Q.nid}:${q}`,Q.skipEscape=!0,J}function WK(w,Q){let W=w;if(W.uuid=W.nss,W.nss=void 0,!Q.tolerant&&(!W.uuid||!rF(W.uuid)))W.error=W.error||"UUID is not valid.";return W}function ZK(w){let Q=w;return Q.nss=(w.uuid||"").toLowerCase(),Q}var CZ={scheme:"http",domainHost:!0,parse:EZ,serialize:kZ},YK={scheme:"https",domainHost:CZ.domainHost,parse:EZ,serialize:kZ},t5={scheme:"ws",domainHost:!0,parse:oF,serialize:eF},XK={scheme:"wss",domainHost:t5.domainHost,parse:t5.parse,serialize:t5.serialize},JK={scheme:"urn",parse:wK,serialize:QK,skipNormalize:!0},qK={scheme:"urn:uuid",parse:WK,serialize:ZK,skipNormalize:!0},o5={http:CZ,https:YK,ws:t5,wss:XK,urn:JK,"urn:uuid":qK};Object.setPrototypeOf(o5,null);function W4(w){return w&&(o5[w]||o5[w.toLowerCase()])||void 0}fZ.exports={wsIsSecure:Q4,SCHEMES:o5,isValidSchemeName:tF,getSchemeHandler:W4}});var hZ=O((l$,w9)=>{var{normalizeIPv6:GK,removeDotSegments:x1,recomposeAuthority:zK,normalizeComponentEncoding:e5,isIPv4:FK,nonSimpleDomain:KK}=w4(),{SCHEMES:BK,getSchemeHandler:yZ}=vZ();function HK(w,Q){if(typeof w==="string")w=E0(d0(w,Q),Q);else if(typeof w==="object")w=d0(E0(w,Q),Q);return w}function VK(w,Q,W){let Z=W?Object.assign({scheme:"null"},W):{scheme:"null"},Y=uZ(d0(w,Z),d0(Q,Z),Z,!0);return Z.skipEscape=!0,E0(Y,Z)}function uZ(w,Q,W,Z){let Y={};if(!Z)w=d0(E0(w,W),W),Q=d0(E0(Q,W),W);if(W=W||{},!W.tolerant&&Q.scheme)Y.scheme=Q.scheme,Y.userinfo=Q.userinfo,Y.host=Q.host,Y.port=Q.port,Y.path=x1(Q.path||""),Y.query=Q.query;else{if(Q.userinfo!==void 0||Q.host!==void 0||Q.port!==void 0)Y.userinfo=Q.userinfo,Y.host=Q.host,Y.port=Q.port,Y.path=x1(Q.path||""),Y.query=Q.query;else{if(!Q.path)if(Y.path=w.path,Q.query!==void 0)Y.query=Q.query;else Y.query=w.query;else{if(Q.path[0]==="/")Y.path=x1(Q.path);else{if((w.userinfo!==void 0||w.host!==void 0||w.port!==void 0)&&!w.path)Y.path="/"+Q.path;else if(!w.path)Y.path=Q.path;else Y.path=w.path.slice(0,w.path.lastIndexOf("/")+1)+Q.path;Y.path=x1(Y.path)}Y.query=Q.query}Y.userinfo=w.userinfo,Y.host=w.host,Y.port=w.port}Y.scheme=w.scheme}return Y.fragment=Q.fragment,Y}function MK(w,Q,W){if(typeof w==="string")w=unescape(w),w=E0(e5(d0(w,W),!0),{...W,skipEscape:!0});else if(typeof w==="object")w=E0(e5(w,!0),{...W,skipEscape:!0});if(typeof Q==="string")Q=unescape(Q),Q=E0(e5(d0(Q,W),!0),{...W,skipEscape:!0});else if(typeof Q==="object")Q=E0(e5(Q,!0),{...W,skipEscape:!0});return w.toLowerCase()===Q.toLowerCase()}function E0(w,Q){let W={host:w.host,scheme:w.scheme,userinfo:w.userinfo,port:w.port,path:w.path,query:w.query,nid:w.nid,nss:w.nss,uuid:w.uuid,fragment:w.fragment,reference:w.reference,resourceName:w.resourceName,secure:w.secure,error:""},Z=Object.assign({},Q),Y=[],X=yZ(Z.scheme||W.scheme);if(X&&X.serialize)X.serialize(W,Z);if(W.path!==void 0)if(!Z.skipEscape){if(W.path=escape(W.path),W.scheme!==void 0)W.path=W.path.split("%3A").join(":")}else W.path=unescape(W.path);if(Z.reference!=="suffix"&&W.scheme)Y.push(W.scheme,":");let J=zK(W);if(J!==void 0){if(Z.reference!=="suffix")Y.push("//");if(Y.push(J),W.path&&W.path[0]!=="/")Y.push("/")}if(W.path!==void 0){let q=W.path;if(!Z.absolutePath&&(!X||!X.absolutePath))q=x1(q);if(J===void 0&&q[0]==="/"&&q[1]==="/")q="/%2F"+q.slice(2);Y.push(q)}if(W.query!==void 0)Y.push("?",W.query);if(W.fragment!==void 0)Y.push("#",W.fragment);return Y.join("")}var LK=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function d0(w,Q){let W=Object.assign({},Q),Z={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},Y=!1;if(W.reference==="suffix")if(W.scheme)w=W.scheme+":"+w;else w="//"+w;let X=w.match(LK);if(X){if(Z.scheme=X[1],Z.userinfo=X[3],Z.host=X[4],Z.port=parseInt(X[5],10),Z.path=X[6]||"",Z.query=X[7],Z.fragment=X[8],isNaN(Z.port))Z.port=X[5];if(Z.host)if(FK(Z.host)===!1){let G=GK(Z.host);Z.host=G.host.toLowerCase(),Y=G.isIPV6}else Y=!0;if(Z.scheme===void 0&&Z.userinfo===void 0&&Z.host===void 0&&Z.port===void 0&&Z.query===void 0&&!Z.path)Z.reference="same-document";else if(Z.scheme===void 0)Z.reference="relative";else if(Z.fragment===void 0)Z.reference="absolute";else Z.reference="uri";if(W.reference&&W.reference!=="suffix"&&W.reference!==Z.reference)Z.error=Z.error||"URI is not a "+W.reference+" reference.";let J=yZ(W.scheme||Z.scheme);if(!W.unicodeSupport&&(!J||!J.unicodeSupport)){if(Z.host&&(W.domainHost||J&&J.domainHost)&&Y===!1&&KK(Z.host))try{Z.host=URL.domainToASCII(Z.host.toLowerCase())}catch(q){Z.error=Z.error||"Host's domain name can not be converted to ASCII: "+q}}if(!J||J&&!J.skipNormalize){if(w.indexOf("%")!==-1){if(Z.scheme!==void 0)Z.scheme=unescape(Z.scheme);if(Z.host!==void 0)Z.host=unescape(Z.host)}if(Z.path)Z.path=escape(unescape(Z.path));if(Z.fragment)Z.fragment=encodeURI(decodeURIComponent(Z.fragment))}if(J&&J.parse)J.parse(Z,W)}else Z.error=Z.error||"URI can not be parsed.";return Z}var Z4={SCHEMES:BK,normalize:HK,resolve:VK,resolveComponent:uZ,equal:MK,serialize:E0,parse:d0};w9.exports=Z4;w9.exports.default=Z4;w9.exports.fastUri=Z4});var _Z=O((Y4)=>{Object.defineProperty(Y4,"__esModule",{value:!0});var gZ=hZ();gZ.code='require("ajv/dist/runtime/uri").default';Y4.default=gZ});var nZ=O((Tw)=>{Object.defineProperty(Tw,"__esModule",{value:!0});Tw.CodeGen=Tw.Name=Tw.nil=Tw.stringify=Tw.str=Tw._=Tw.KeywordCxt=void 0;var UK=h1();Object.defineProperty(Tw,"KeywordCxt",{enumerable:!0,get:function(){return UK.KeywordCxt}});var a6=m();Object.defineProperty(Tw,"_",{enumerable:!0,get:function(){return a6._}});Object.defineProperty(Tw,"str",{enumerable:!0,get:function(){return a6.str}});Object.defineProperty(Tw,"stringify",{enumerable:!0,get:function(){return a6.stringify}});Object.defineProperty(Tw,"nil",{enumerable:!0,get:function(){return a6.nil}});Object.defineProperty(Tw,"Name",{enumerable:!0,get:function(){return a6.Name}});Object.defineProperty(Tw,"CodeGen",{enumerable:!0,get:function(){return a6.CodeGen}});var jK=r5(),pZ=g1(),AK=v8(),l1=a5(),$K=m(),i1=v1(),Q9=C1(),J4=s(),xZ=TZ(),OK=_Z(),cZ=(w,Q)=>new RegExp(w,Q);cZ.code="new RegExp";var NK=["removeAdditional","useDefaults","coerceTypes"],DK=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),IK={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},TK={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},lZ=200;function PK(w){var Q,W,Z,Y,X,J,q,G,z,F,K,j,V,M,H,A,$,T,P,b,N,S,i,g,Zw;let c=w.strict,Aw=(Q=w.code)===null||Q===void 0?void 0:Q.optimize,Gw=Aw===!0||Aw===void 0?1:Aw||0,Iw=(Z=(W=w.code)===null||W===void 0?void 0:W.regExp)!==null&&Z!==void 0?Z:cZ,hw=(Y=w.uriResolver)!==null&&Y!==void 0?Y:OK.default;return{strictSchema:(J=(X=w.strictSchema)!==null&&X!==void 0?X:c)!==null&&J!==void 0?J:!0,strictNumbers:(G=(q=w.strictNumbers)!==null&&q!==void 0?q:c)!==null&&G!==void 0?G:!0,strictTypes:(F=(z=w.strictTypes)!==null&&z!==void 0?z:c)!==null&&F!==void 0?F:"log",strictTuples:(j=(K=w.strictTuples)!==null&&K!==void 0?K:c)!==null&&j!==void 0?j:"log",strictRequired:(M=(V=w.strictRequired)!==null&&V!==void 0?V:c)!==null&&M!==void 0?M:!1,code:w.code?{...w.code,optimize:Gw,regExp:Iw}:{optimize:Gw,regExp:Iw},loopRequired:(H=w.loopRequired)!==null&&H!==void 0?H:lZ,loopEnum:(A=w.loopEnum)!==null&&A!==void 0?A:lZ,meta:($=w.meta)!==null&&$!==void 0?$:!0,messages:(T=w.messages)!==null&&T!==void 0?T:!0,inlineRefs:(P=w.inlineRefs)!==null&&P!==void 0?P:!0,schemaId:(b=w.schemaId)!==null&&b!==void 0?b:"$id",addUsedSchema:(N=w.addUsedSchema)!==null&&N!==void 0?N:!0,validateSchema:(S=w.validateSchema)!==null&&S!==void 0?S:!0,validateFormats:(i=w.validateFormats)!==null&&i!==void 0?i:!0,unicodeRegExp:(g=w.unicodeRegExp)!==null&&g!==void 0?g:!0,int32range:(Zw=w.int32range)!==null&&Zw!==void 0?Zw:!0,uriResolver:hw}}class W9{constructor(w={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,w=this.opts={...w,...PK(w)};let{es5:Q,lines:W}=this.opts.code;this.scope=new $K.ValueScope({scope:{},prefixes:DK,es5:Q,lines:W}),this.logger=CK(w.logger);let Z=w.validateFormats;if(w.validateFormats=!1,this.RULES=(0,AK.getRules)(),iZ.call(this,IK,w,"NOT SUPPORTED"),iZ.call(this,TK,w,"DEPRECATED","warn"),this._metaOpts=EK.call(this),w.formats)bK.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),w.keywords)SK.call(this,w.keywords);if(typeof w.meta=="object")this.addMetaSchema(w.meta);RK.call(this),w.validateFormats=Z}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:w,meta:Q,schemaId:W}=this.opts,Z=xZ;if(W==="id")Z={...xZ},Z.id=Z.$id,delete Z.$id;if(Q&&w)this.addMetaSchema(Z,Z[W],!1)}defaultMeta(){let{meta:w,schemaId:Q}=this.opts;return this.opts.defaultMeta=typeof w=="object"?w[Q]||w:void 0}validate(w,Q){let W;if(typeof w=="string"){if(W=this.getSchema(w),!W)throw Error(`no schema with key or ref "${w}"`)}else W=this.compile(w);let Z=W(Q);if(!("$async"in W))this.errors=W.errors;return Z}compile(w,Q){let W=this._addSchema(w,Q);return W.validate||this._compileSchemaEnv(W)}compileAsync(w,Q){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:W}=this.opts;return Z.call(this,w,Q);async function Z(z,F){await Y.call(this,z.$schema);let K=this._addSchema(z,F);return K.validate||X.call(this,K)}async function Y(z){if(z&&!this.getSchema(z))await Z.call(this,{$ref:z},!0)}async function X(z){try{return this._compileSchemaEnv(z)}catch(F){if(!(F instanceof pZ.default))throw F;return J.call(this,F),await q.call(this,F.missingSchema),X.call(this,z)}}function J({missingSchema:z,missingRef:F}){if(this.refs[z])throw Error(`AnySchema ${z} is loaded but ${F} cannot be resolved`)}async function q(z){let F=await G.call(this,z);if(!this.refs[z])await Y.call(this,F.$schema);if(!this.refs[z])this.addSchema(F,z,Q)}async function G(z){let F=this._loading[z];if(F)return F;try{return await(this._loading[z]=W(z))}finally{delete this._loading[z]}}}addSchema(w,Q,W,Z=this.opts.validateSchema){if(Array.isArray(w)){for(let X of w)this.addSchema(X,void 0,W,Z);return this}let Y;if(typeof w==="object"){let{schemaId:X}=this.opts;if(Y=w[X],Y!==void 0&&typeof Y!="string")throw Error(`schema ${X} must be string`)}return Q=(0,i1.normalizeId)(Q||Y),this._checkUnique(Q),this.schemas[Q]=this._addSchema(w,W,Q,Z,!0),this}addMetaSchema(w,Q,W=this.opts.validateSchema){return this.addSchema(w,Q,!0,W),this}validateSchema(w,Q){if(typeof w=="boolean")return!0;let W;if(W=w.$schema,W!==void 0&&typeof W!="string")throw Error("$schema must be a string");if(W=W||this.opts.defaultMeta||this.defaultMeta(),!W)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let Z=this.validate(W,w);if(!Z&&Q){let Y="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(Y);else throw Error(Y)}return Z}getSchema(w){let Q;while(typeof(Q=mZ.call(this,w))=="string")w=Q;if(Q===void 0){let{schemaId:W}=this.opts,Z=new l1.SchemaEnv({schema:{},schemaId:W});if(Q=l1.resolveSchema.call(this,Z,w),!Q)return;this.refs[w]=Q}return Q.validate||this._compileSchemaEnv(Q)}removeSchema(w){if(w instanceof RegExp)return this._removeAllSchemas(this.schemas,w),this._removeAllSchemas(this.refs,w),this;switch(typeof w){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let Q=mZ.call(this,w);if(typeof Q=="object")this._cache.delete(Q.schema);return delete this.schemas[w],delete this.refs[w],this}case"object":{let Q=w;this._cache.delete(Q);let W=w[this.opts.schemaId];if(W)W=(0,i1.normalizeId)(W),delete this.schemas[W],delete this.refs[W];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(w){for(let Q of w)this.addKeyword(Q);return this}addKeyword(w,Q){let W;if(typeof w=="string"){if(W=w,typeof Q=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),Q.keyword=W}else if(typeof w=="object"&&Q===void 0){if(Q=w,W=Q.keyword,Array.isArray(W)&&!W.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(vK.call(this,W,Q),!Q)return(0,J4.eachItem)(W,(Y)=>X4.call(this,Y)),this;uK.call(this,Q);let Z={...Q,type:(0,Q9.getJSONTypes)(Q.type),schemaType:(0,Q9.getJSONTypes)(Q.schemaType)};return(0,J4.eachItem)(W,Z.type.length===0?(Y)=>X4.call(this,Y,Z):(Y)=>Z.type.forEach((X)=>X4.call(this,Y,Z,X))),this}getKeyword(w){let Q=this.RULES.all[w];return typeof Q=="object"?Q.definition:!!Q}removeKeyword(w){let{RULES:Q}=this;delete Q.keywords[w],delete Q.all[w];for(let W of Q.rules){let Z=W.rules.findIndex((Y)=>Y.keyword===w);if(Z>=0)W.rules.splice(Z,1)}return this}addFormat(w,Q){if(typeof Q=="string")Q=new RegExp(Q);return this.formats[w]=Q,this}errorsText(w=this.errors,{separator:Q=", ",dataVar:W="data"}={}){if(!w||w.length===0)return"No errors";return w.map((Z)=>`${W}${Z.instancePath} ${Z.message}`).reduce((Z,Y)=>Z+Q+Y)}$dataMetaSchema(w,Q){let W=this.RULES.all;w=JSON.parse(JSON.stringify(w));for(let Z of Q){let Y=Z.split("/").slice(1),X=w;for(let J of Y)X=X[J];for(let J in W){let q=W[J];if(typeof q!="object")continue;let{$data:G}=q.definition,z=X[J];if(G&&z)X[J]=dZ(z)}}return w}_removeAllSchemas(w,Q){for(let W in w){let Z=w[W];if(!Q||Q.test(W)){if(typeof Z=="string")delete w[W];else if(Z&&!Z.meta)this._cache.delete(Z.schema),delete w[W]}}}_addSchema(w,Q,W,Z=this.opts.validateSchema,Y=this.opts.addUsedSchema){let X,{schemaId:J}=this.opts;if(typeof w=="object")X=w[J];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof w!="boolean")throw Error("schema must be object or boolean");let q=this._cache.get(w);if(q!==void 0)return q;W=(0,i1.normalizeId)(X||W);let G=i1.getSchemaRefs.call(this,w,W);if(q=new l1.SchemaEnv({schema:w,schemaId:J,meta:Q,baseId:W,localRefs:G}),this._cache.set(q.schema,q),Y&&!W.startsWith("#")){if(W)this._checkUnique(W);this.refs[W]=q}if(Z)this.validateSchema(w,!0);return q}_checkUnique(w){if(this.schemas[w]||this.refs[w])throw Error(`schema with key or id "${w}" already exists`)}_compileSchemaEnv(w){if(w.meta)this._compileMetaSchema(w);else l1.compileSchema.call(this,w);if(!w.validate)throw Error("ajv implementation error");return w.validate}_compileMetaSchema(w){let Q=this.opts;this.opts=this._metaOpts;try{l1.compileSchema.call(this,w)}finally{this.opts=Q}}}W9.ValidationError=jK.default;W9.MissingRefError=pZ.default;Tw.default=W9;function iZ(w,Q,W,Z="error"){for(let Y in w){let X=Y;if(X in Q)this.logger[Z](`${W}: option ${Y}. ${w[X]}`)}}function mZ(w){return w=(0,i1.normalizeId)(w),this.schemas[w]||this.refs[w]}function RK(){let w=this.opts.schemas;if(!w)return;if(Array.isArray(w))this.addSchema(w);else for(let Q in w)this.addSchema(w[Q],Q)}function bK(){for(let w in this.opts.formats){let Q=this.opts.formats[w];if(Q)this.addFormat(w,Q)}}function SK(w){if(Array.isArray(w)){this.addVocabulary(w);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let Q in w){let W=w[Q];if(!W.keyword)W.keyword=Q;this.addKeyword(W)}}function EK(){let w={...this.opts};for(let Q of NK)delete w[Q];return w}var kK={log(){},warn(){},error(){}};function CK(w){if(w===!1)return kK;if(w===void 0)return console;if(w.log&&w.warn&&w.error)return w;throw Error("logger must implement log, warn and error methods")}var fK=/^[a-z_$][a-z0-9_$:-]*$/i;function vK(w,Q){let{RULES:W}=this;if((0,J4.eachItem)(w,(Z)=>{if(W.keywords[Z])throw Error(`Keyword ${Z} is already defined`);if(!fK.test(Z))throw Error(`Keyword ${Z} has invalid name`)}),!Q)return;if(Q.$data&&!(("code"in Q)||("validate"in Q)))throw Error('$data keyword must have "code" or "validate" function')}function X4(w,Q,W){var Z;let Y=Q===null||Q===void 0?void 0:Q.post;if(W&&Y)throw Error('keyword with "post" flag cannot have "type"');let{RULES:X}=this,J=Y?X.post:X.rules.find(({type:G})=>G===W);if(!J)J={type:W,rules:[]},X.rules.push(J);if(X.keywords[w]=!0,!Q)return;let q={keyword:w,definition:{...Q,type:(0,Q9.getJSONTypes)(Q.type),schemaType:(0,Q9.getJSONTypes)(Q.schemaType)}};if(Q.before)yK.call(this,J,q,Q.before);else J.rules.push(q);X.all[w]=q,(Z=Q.implements)===null||Z===void 0||Z.forEach((G)=>this.addKeyword(G))}function yK(w,Q,W){let Z=w.rules.findIndex((Y)=>Y.keyword===W);if(Z>=0)w.rules.splice(Z,0,Q);else w.rules.push(Q),this.logger.warn(`rule ${W} is not defined`)}function uK(w){let{metaSchema:Q}=w;if(Q===void 0)return;if(w.$data&&this.opts.$data)Q=dZ(Q);w.validateSchema=this.compile(Q,!0)}var hK={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function dZ(w){return{anyOf:[w,hK]}}});var rZ=O((q4)=>{Object.defineProperty(q4,"__esModule",{value:!0});var gK={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};q4.default=gK});var oZ=O((N6)=>{Object.defineProperty(N6,"__esModule",{value:!0});N6.callRef=N6.getValidate=void 0;var _K=g1(),sZ=Y0(),rw=m(),t6=p0(),aZ=a5(),Z9=s(),xK={keyword:"$ref",schemaType:"string",code(w){let{gen:Q,schema:W,it:Z}=w,{baseId:Y,schemaEnv:X,validateName:J,opts:q,self:G}=Z,{root:z}=X;if((W==="#"||W==="#/")&&Y===z.baseId)return K();let F=aZ.resolveRef.call(G,z,Y,W);if(F===void 0)throw new _K.default(Z.opts.uriResolver,Y,W);if(F instanceof aZ.SchemaEnv)return j(F);return V(F);function K(){if(X===z)return Y9(w,J,X,X.$async);let M=Q.scopeValue("root",{ref:z});return Y9(w,rw._`${M}.validate`,z,z.$async)}function j(M){let H=tZ(w,M);Y9(w,H,M,M.$async)}function V(M){let H=Q.scopeValue("schema",q.code.source===!0?{ref:M,code:(0,rw.stringify)(M)}:{ref:M}),A=Q.name("valid"),$=w.subschema({schema:M,dataTypes:[],schemaPath:rw.nil,topSchemaRef:H,errSchemaPath:W},A);w.mergeEvaluated($),w.ok(A)}}};function tZ(w,Q){let{gen:W}=w;return Q.validate?W.scopeValue("validate",{ref:Q.validate}):rw._`${W.scopeValue("wrapper",{ref:Q})}.validate`}N6.getValidate=tZ;function Y9(w,Q,W,Z){let{gen:Y,it:X}=w,{allErrors:J,schemaEnv:q,opts:G}=X,z=G.passContext?t6.default.this:rw.nil;if(Z)F();else K();function F(){if(!q.$async)throw Error("async schema referenced by sync schema");let M=Y.let("valid");Y.try(()=>{if(Y.code(rw._`await ${(0,sZ.callValidateCode)(w,Q,z)}`),V(Q),!J)Y.assign(M,!0)},(H)=>{if(Y.if(rw._`!(${H} instanceof ${X.ValidationError})`,()=>Y.throw(H)),j(H),!J)Y.assign(M,!1)}),w.ok(M)}function K(){w.result((0,sZ.callValidateCode)(w,Q,z),()=>V(Q),()=>j(Q))}function j(M){let H=rw._`${M}.errors`;Y.assign(t6.default.vErrors,rw._`${t6.default.vErrors} === null ? ${H} : ${t6.default.vErrors}.concat(${H})`),Y.assign(t6.default.errors,rw._`${t6.default.vErrors}.length`)}function V(M){var H;if(!X.opts.unevaluated)return;let A=(H=W===null||W===void 0?void 0:W.validate)===null||H===void 0?void 0:H.evaluated;if(X.props!==!0)if(A&&!A.dynamicProps){if(A.props!==void 0)X.props=Z9.mergeEvaluated.props(Y,A.props,X.props)}else{let $=Y.var("props",rw._`${M}.evaluated.props`);X.props=Z9.mergeEvaluated.props(Y,$,X.props,rw.Name)}if(X.items!==!0)if(A&&!A.dynamicItems){if(A.items!==void 0)X.items=Z9.mergeEvaluated.items(Y,A.items,X.items)}else{let $=Y.var("items",rw._`${M}.evaluated.items`);X.items=Z9.mergeEvaluated.items(Y,$,X.items,rw.Name)}}}N6.callRef=Y9;N6.default=xK});var eZ=O((G4)=>{Object.defineProperty(G4,"__esModule",{value:!0});var lK=rZ(),iK=oZ(),mK=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",lK.default,iK.default];G4.default=mK});var wY=O((z4)=>{Object.defineProperty(z4,"__esModule",{value:!0});var X9=m(),X6=X9.operators,J9={maximum:{okStr:"<=",ok:X6.LTE,fail:X6.GT},minimum:{okStr:">=",ok:X6.GTE,fail:X6.LT},exclusiveMaximum:{okStr:"<",ok:X6.LT,fail:X6.GTE},exclusiveMinimum:{okStr:">",ok:X6.GT,fail:X6.LTE}},pK={message:({keyword:w,schemaCode:Q})=>X9.str`must be ${J9[w].okStr} ${Q}`,params:({keyword:w,schemaCode:Q})=>X9._`{comparison: ${J9[w].okStr}, limit: ${Q}}`},cK={keyword:Object.keys(J9),type:"number",schemaType:"number",$data:!0,error:pK,code(w){let{keyword:Q,data:W,schemaCode:Z}=w;w.fail$data(X9._`${W} ${J9[Q].fail} ${Z} || isNaN(${W})`)}};z4.default=cK});var QY=O((F4)=>{Object.defineProperty(F4,"__esModule",{value:!0});var m1=m(),dK={message:({schemaCode:w})=>m1.str`must be multiple of ${w}`,params:({schemaCode:w})=>m1._`{multipleOf: ${w}}`},nK={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:dK,code(w){let{gen:Q,data:W,schemaCode:Z,it:Y}=w,X=Y.opts.multipleOfPrecision,J=Q.let("res"),q=X?m1._`Math.abs(Math.round(${J}) - ${J}) > 1e-${X}`:m1._`${J} !== parseInt(${J})`;w.fail$data(m1._`(${Z} === 0 || (${J} = ${W}/${Z}, ${q}))`)}};F4.default=nK});var ZY=O((K4)=>{Object.defineProperty(K4,"__esModule",{value:!0});function WY(w){let Q=w.length,W=0,Z=0,Y;while(Z<Q)if(W++,Y=w.charCodeAt(Z++),Y>=55296&&Y<=56319&&Z<Q){if(Y=w.charCodeAt(Z),(Y&64512)===56320)Z++}return W}K4.default=WY;WY.code='require("ajv/dist/runtime/ucs2length").default'});var YY=O((B4)=>{Object.defineProperty(B4,"__esModule",{value:!0});var D6=m(),rK=s(),sK=ZY(),aK={message({keyword:w,schemaCode:Q}){let W=w==="maxLength"?"more":"fewer";return D6.str`must NOT have ${W} than ${Q} characters`},params:({schemaCode:w})=>D6._`{limit: ${w}}`},tK={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:aK,code(w){let{keyword:Q,data:W,schemaCode:Z,it:Y}=w,X=Q==="maxLength"?D6.operators.GT:D6.operators.LT,J=Y.opts.unicode===!1?D6._`${W}.length`:D6._`${(0,rK.useFunc)(w.gen,sK.default)}(${W})`;w.fail$data(D6._`${J} ${X} ${Z}`)}};B4.default=tK});var XY=O((H4)=>{Object.defineProperty(H4,"__esModule",{value:!0});var oK=Y0(),eK=s(),o6=m(),wB={message:({schemaCode:w})=>o6.str`must match pattern "${w}"`,params:({schemaCode:w})=>o6._`{pattern: ${w}}`},QB={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:wB,code(w){let{gen:Q,data:W,$data:Z,schema:Y,schemaCode:X,it:J}=w,q=J.opts.unicodeRegExp?"u":"";if(Z){let{regExp:G}=J.opts.code,z=G.code==="new RegExp"?o6._`new RegExp`:(0,eK.useFunc)(Q,G),F=Q.let("valid");Q.try(()=>Q.assign(F,o6._`${z}(${X}, ${q}).test(${W})`),()=>Q.assign(F,!1)),w.fail$data(o6._`!${F}`)}else{let G=(0,oK.usePattern)(w,Y);w.fail$data(o6._`!${G}.test(${W})`)}}};H4.default=QB});var JY=O((V4)=>{Object.defineProperty(V4,"__esModule",{value:!0});var p1=m(),WB={message({keyword:w,schemaCode:Q}){let W=w==="maxProperties"?"more":"fewer";return p1.str`must NOT have ${W} than ${Q} properties`},params:({schemaCode:w})=>p1._`{limit: ${w}}`},ZB={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:WB,code(w){let{keyword:Q,data:W,schemaCode:Z}=w,Y=Q==="maxProperties"?p1.operators.GT:p1.operators.LT;w.fail$data(p1._`Object.keys(${W}).length ${Y} ${Z}`)}};V4.default=ZB});var qY=O((M4)=>{Object.defineProperty(M4,"__esModule",{value:!0});var c1=Y0(),d1=m(),YB=s(),XB={message:({params:{missingProperty:w}})=>d1.str`must have required property '${w}'`,params:({params:{missingProperty:w}})=>d1._`{missingProperty: ${w}}`},JB={keyword:"required",type:"object",schemaType:"array",$data:!0,error:XB,code(w){let{gen:Q,schema:W,schemaCode:Z,data:Y,$data:X,it:J}=w,{opts:q}=J;if(!X&&W.length===0)return;let G=W.length>=q.loopRequired;if(J.allErrors)z();else F();if(q.strictRequired){let V=w.parentSchema.properties,{definedProperties:M}=w.it;for(let H of W)if((V===null||V===void 0?void 0:V[H])===void 0&&!M.has(H)){let A=J.schemaEnv.baseId+J.errSchemaPath,$=`required property "${H}" is not defined at "${A}" (strictRequired)`;(0,YB.checkStrictMode)(J,$,J.opts.strictRequired)}}function z(){if(G||X)w.block$data(d1.nil,K);else for(let V of W)(0,c1.checkReportMissingProp)(w,V)}function F(){let V=Q.let("missing");if(G||X){let M=Q.let("valid",!0);w.block$data(M,()=>j(V,M)),w.ok(M)}else Q.if((0,c1.checkMissingProp)(w,W,V)),(0,c1.reportMissingProp)(w,V),Q.else()}function K(){Q.forOf("prop",Z,(V)=>{w.setParams({missingProperty:V}),Q.if((0,c1.noPropertyInData)(Q,Y,V,q.ownProperties),()=>w.error())})}function j(V,M){w.setParams({missingProperty:V}),Q.forOf(V,Z,()=>{Q.assign(M,(0,c1.propertyInData)(Q,Y,V,q.ownProperties)),Q.if((0,d1.not)(M),()=>{w.error(),Q.break()})},d1.nil)}}};M4.default=JB});var GY=O((L4)=>{Object.defineProperty(L4,"__esModule",{value:!0});var n1=m(),qB={message({keyword:w,schemaCode:Q}){let W=w==="maxItems"?"more":"fewer";return n1.str`must NOT have ${W} than ${Q} items`},params:({schemaCode:w})=>n1._`{limit: ${w}}`},GB={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:qB,code(w){let{keyword:Q,data:W,schemaCode:Z}=w,Y=Q==="maxItems"?n1.operators.GT:n1.operators.LT;w.fail$data(n1._`${W}.length ${Y} ${Z}`)}};L4.default=GB});var q9=O((U4)=>{Object.defineProperty(U4,"__esModule",{value:!0});var zY=f1();zY.code='require("ajv/dist/runtime/equal").default';U4.default=zY});var FY=O((A4)=>{Object.defineProperty(A4,"__esModule",{value:!0});var j4=C1(),Pw=m(),zB=s(),FB=q9(),KB={message:({params:{i:w,j:Q}})=>Pw.str`must NOT have duplicate items (items ## ${Q} and ${w} are identical)`,params:({params:{i:w,j:Q}})=>Pw._`{i: ${w}, j: ${Q}}`},BB={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:KB,code(w){let{gen:Q,data:W,$data:Z,schema:Y,parentSchema:X,schemaCode:J,it:q}=w;if(!Z&&!Y)return;let G=Q.let("valid"),z=X.items?(0,j4.getSchemaTypes)(X.items):[];w.block$data(G,F,Pw._`${J} === false`),w.ok(G);function F(){let M=Q.let("i",Pw._`${W}.length`),H=Q.let("j");w.setParams({i:M,j:H}),Q.assign(G,!0),Q.if(Pw._`${M} > 1`,()=>(K()?j:V)(M,H))}function K(){return z.length>0&&!z.some((M)=>M==="object"||M==="array")}function j(M,H){let A=Q.name("item"),$=(0,j4.checkDataTypes)(z,A,q.opts.strictNumbers,j4.DataType.Wrong),T=Q.const("indices",Pw._`{}`);Q.for(Pw._`;${M}--;`,()=>{if(Q.let(A,Pw._`${W}[${M}]`),Q.if($,Pw._`continue`),z.length>1)Q.if(Pw._`typeof ${A} == "string"`,Pw._`${A} += "_"`);Q.if(Pw._`typeof ${T}[${A}] == "number"`,()=>{Q.assign(H,Pw._`${T}[${A}]`),w.error(),Q.assign(G,!1).break()}).code(Pw._`${T}[${A}] = ${M}`)})}function V(M,H){let A=(0,zB.useFunc)(Q,FB.default),$=Q.name("outer");Q.label($).for(Pw._`;${M}--;`,()=>Q.for(Pw._`${H} = ${M}; ${H}--;`,()=>Q.if(Pw._`${A}(${W}[${M}], ${W}[${H}])`,()=>{w.error(),Q.assign(G,!1).break($)})))}}};A4.default=BB});var KY=O((O4)=>{Object.defineProperty(O4,"__esModule",{value:!0});var $4=m(),HB=s(),VB=q9(),MB={message:"must be equal to constant",params:({schemaCode:w})=>$4._`{allowedValue: ${w}}`},LB={keyword:"const",$data:!0,error:MB,code(w){let{gen:Q,data:W,$data:Z,schemaCode:Y,schema:X}=w;if(Z||X&&typeof X=="object")w.fail$data($4._`!${(0,HB.useFunc)(Q,VB.default)}(${W}, ${Y})`);else w.fail($4._`${X} !== ${W}`)}};O4.default=LB});var BY=O((N4)=>{Object.defineProperty(N4,"__esModule",{value:!0});var r1=m(),UB=s(),jB=q9(),AB={message:"must be equal to one of the allowed values",params:({schemaCode:w})=>r1._`{allowedValues: ${w}}`},$B={keyword:"enum",schemaType:"array",$data:!0,error:AB,code(w){let{gen:Q,data:W,$data:Z,schema:Y,schemaCode:X,it:J}=w;if(!Z&&Y.length===0)throw Error("enum must have non-empty array");let q=Y.length>=J.opts.loopEnum,G,z=()=>G!==null&&G!==void 0?G:G=(0,UB.useFunc)(Q,jB.default),F;if(q||Z)F=Q.let("valid"),w.block$data(F,K);else{if(!Array.isArray(Y))throw Error("ajv implementation error");let V=Q.const("vSchema",X);F=(0,r1.or)(...Y.map((M,H)=>j(V,H)))}w.pass(F);function K(){Q.assign(F,!1),Q.forOf("v",X,(V)=>Q.if(r1._`${z()}(${W}, ${V})`,()=>Q.assign(F,!0).break()))}function j(V,M){let H=Y[M];return typeof H==="object"&&H!==null?r1._`${z()}(${W}, ${V}[${M}])`:r1._`${W} === ${H}`}}};N4.default=$B});var HY=O((D4)=>{Object.defineProperty(D4,"__esModule",{value:!0});var OB=wY(),NB=QY(),DB=YY(),IB=XY(),TB=JY(),PB=qY(),RB=GY(),bB=FY(),SB=KY(),EB=BY(),kB=[OB.default,NB.default,DB.default,IB.default,TB.default,PB.default,RB.default,bB.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},SB.default,EB.default];D4.default=kB});var T4=O((s1)=>{Object.defineProperty(s1,"__esModule",{value:!0});s1.validateAdditionalItems=void 0;var I6=m(),I4=s(),CB={message:({params:{len:w}})=>I6.str`must NOT have more than ${w} items`,params:({params:{len:w}})=>I6._`{limit: ${w}}`},fB={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:CB,code(w){let{parentSchema:Q,it:W}=w,{items:Z}=Q;if(!Array.isArray(Z)){(0,I4.checkStrictMode)(W,'"additionalItems" is ignored when "items" is not an array of schemas');return}VY(w,Z)}};function VY(w,Q){let{gen:W,schema:Z,data:Y,keyword:X,it:J}=w;J.items=!0;let q=W.const("len",I6._`${Y}.length`);if(Z===!1)w.setParams({len:Q.length}),w.pass(I6._`${q} <= ${Q.length}`);else if(typeof Z=="object"&&!(0,I4.alwaysValidSchema)(J,Z)){let z=W.var("valid",I6._`${q} <= ${Q.length}`);W.if((0,I6.not)(z),()=>G(z)),w.ok(z)}function G(z){W.forRange("i",Q.length,q,(F)=>{if(w.subschema({keyword:X,dataProp:F,dataPropType:I4.Type.Num},z),!J.allErrors)W.if((0,I6.not)(z),()=>W.break())})}}s1.validateAdditionalItems=VY;s1.default=fB});var P4=O((a1)=>{Object.defineProperty(a1,"__esModule",{value:!0});a1.validateTuple=void 0;var MY=m(),G9=s(),vB=Y0(),yB={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(w){let{schema:Q,it:W}=w;if(Array.isArray(Q))return LY(w,"additionalItems",Q);if(W.items=!0,(0,G9.alwaysValidSchema)(W,Q))return;w.ok((0,vB.validateArray)(w))}};function LY(w,Q,W=w.schema){let{gen:Z,parentSchema:Y,data:X,keyword:J,it:q}=w;if(F(Y),q.opts.unevaluated&&W.length&&q.items!==!0)q.items=G9.mergeEvaluated.items(Z,W.length,q.items);let G=Z.name("valid"),z=Z.const("len",MY._`${X}.length`);W.forEach((K,j)=>{if((0,G9.alwaysValidSchema)(q,K))return;Z.if(MY._`${z} > ${j}`,()=>w.subschema({keyword:J,schemaProp:j,dataProp:j},G)),w.ok(G)});function F(K){let{opts:j,errSchemaPath:V}=q,M=W.length,H=M===K.minItems&&(M===K.maxItems||K[Q]===!1);if(j.strictTuples&&!H){let A=`"${J}" is ${M}-tuple, but minItems or maxItems/${Q} are not specified or different at path "${V}"`;(0,G9.checkStrictMode)(q,A,j.strictTuples)}}}a1.validateTuple=LY;a1.default=yB});var UY=O((R4)=>{Object.defineProperty(R4,"__esModule",{value:!0});var uB=P4(),hB={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(w)=>(0,uB.validateTuple)(w,"items")};R4.default=hB});var AY=O((b4)=>{Object.defineProperty(b4,"__esModule",{value:!0});var jY=m(),gB=s(),_B=Y0(),xB=T4(),lB={message:({params:{len:w}})=>jY.str`must NOT have more than ${w} items`,params:({params:{len:w}})=>jY._`{limit: ${w}}`},iB={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:lB,code(w){let{schema:Q,parentSchema:W,it:Z}=w,{prefixItems:Y}=W;if(Z.items=!0,(0,gB.alwaysValidSchema)(Z,Q))return;if(Y)(0,xB.validateAdditionalItems)(w,Y);else w.ok((0,_B.validateArray)(w))}};b4.default=iB});var $Y=O((S4)=>{Object.defineProperty(S4,"__esModule",{value:!0});var J0=m(),z9=s(),mB={message:({params:{min:w,max:Q}})=>Q===void 0?J0.str`must contain at least ${w} valid item(s)`:J0.str`must contain at least ${w} and no more than ${Q} valid item(s)`,params:({params:{min:w,max:Q}})=>Q===void 0?J0._`{minContains: ${w}}`:J0._`{minContains: ${w}, maxContains: ${Q}}`},pB={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:mB,code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,it:X}=w,J,q,{minContains:G,maxContains:z}=Z;if(X.opts.next)J=G===void 0?1:G,q=z;else J=1;let F=Q.const("len",J0._`${Y}.length`);if(w.setParams({min:J,max:q}),q===void 0&&J===0){(0,z9.checkStrictMode)(X,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(q!==void 0&&J>q){(0,z9.checkStrictMode)(X,'"minContains" > "maxContains" is always invalid'),w.fail();return}if((0,z9.alwaysValidSchema)(X,W)){let H=J0._`${F} >= ${J}`;if(q!==void 0)H=J0._`${H} && ${F} <= ${q}`;w.pass(H);return}X.items=!0;let K=Q.name("valid");if(q===void 0&&J===1)V(K,()=>Q.if(K,()=>Q.break()));else if(J===0){if(Q.let(K,!0),q!==void 0)Q.if(J0._`${Y}.length > 0`,j)}else Q.let(K,!1),j();w.result(K,()=>w.reset());function j(){let H=Q.name("_valid"),A=Q.let("count",0);V(H,()=>Q.if(H,()=>M(A)))}function V(H,A){Q.forRange("i",0,F,($)=>{w.subschema({keyword:"contains",dataProp:$,dataPropType:z9.Type.Num,compositeRule:!0},H),A()})}function M(H){if(Q.code(J0._`${H}++`),q===void 0)Q.if(J0._`${H} >= ${J}`,()=>Q.assign(K,!0).break());else if(Q.if(J0._`${H} > ${q}`,()=>Q.assign(K,!1).break()),J===1)Q.assign(K,!0);else Q.if(J0._`${H} >= ${J}`,()=>Q.assign(K,!0))}}};S4.default=pB});var DY=O((k0)=>{Object.defineProperty(k0,"__esModule",{value:!0});k0.validateSchemaDeps=k0.validatePropertyDeps=k0.error=void 0;var E4=m(),cB=s(),t1=Y0();k0.error={message:({params:{property:w,depsCount:Q,deps:W}})=>{let Z=Q===1?"property":"properties";return E4.str`must have ${Z} ${W} when property ${w} is present`},params:({params:{property:w,depsCount:Q,deps:W,missingProperty:Z}})=>E4._`{property: ${w},
|
|
6
|
+
missingProperty: ${Z},
|
|
7
|
+
depsCount: ${Q},
|
|
8
|
+
deps: ${W}}`};var dB={keyword:"dependencies",type:"object",schemaType:"object",error:k0.error,code(w){let[Q,W]=nB(w);OY(w,Q),NY(w,W)}};function nB({schema:w}){let Q={},W={};for(let Z in w){if(Z==="__proto__")continue;let Y=Array.isArray(w[Z])?Q:W;Y[Z]=w[Z]}return[Q,W]}function OY(w,Q=w.schema){let{gen:W,data:Z,it:Y}=w;if(Object.keys(Q).length===0)return;let X=W.let("missing");for(let J in Q){let q=Q[J];if(q.length===0)continue;let G=(0,t1.propertyInData)(W,Z,J,Y.opts.ownProperties);if(w.setParams({property:J,depsCount:q.length,deps:q.join(", ")}),Y.allErrors)W.if(G,()=>{for(let z of q)(0,t1.checkReportMissingProp)(w,z)});else W.if(E4._`${G} && (${(0,t1.checkMissingProp)(w,q,X)})`),(0,t1.reportMissingProp)(w,X),W.else()}}k0.validatePropertyDeps=OY;function NY(w,Q=w.schema){let{gen:W,data:Z,keyword:Y,it:X}=w,J=W.name("valid");for(let q in Q){if((0,cB.alwaysValidSchema)(X,Q[q]))continue;W.if((0,t1.propertyInData)(W,Z,q,X.opts.ownProperties),()=>{let G=w.subschema({keyword:Y,schemaProp:q},J);w.mergeValidEvaluated(G,J)},()=>W.var(J,!0)),w.ok(J)}}k0.validateSchemaDeps=NY;k0.default=dB});var TY=O((k4)=>{Object.defineProperty(k4,"__esModule",{value:!0});var IY=m(),rB=s(),sB={message:"property name must be valid",params:({params:w})=>IY._`{propertyName: ${w.propertyName}}`},aB={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:sB,code(w){let{gen:Q,schema:W,data:Z,it:Y}=w;if((0,rB.alwaysValidSchema)(Y,W))return;let X=Q.name("valid");Q.forIn("key",Z,(J)=>{w.setParams({propertyName:J}),w.subschema({keyword:"propertyNames",data:J,dataTypes:["string"],propertyName:J,compositeRule:!0},X),Q.if((0,IY.not)(X),()=>{if(w.error(!0),!Y.allErrors)Q.break()})}),w.ok(X)}};k4.default=aB});var f4=O((C4)=>{Object.defineProperty(C4,"__esModule",{value:!0});var F9=Y0(),L0=m(),tB=p0(),K9=s(),oB={message:"must NOT have additional properties",params:({params:w})=>L0._`{additionalProperty: ${w.additionalProperty}}`},eB={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:oB,code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,errsCount:X,it:J}=w;if(!X)throw Error("ajv implementation error");let{allErrors:q,opts:G}=J;if(J.props=!0,G.removeAdditional!=="all"&&(0,K9.alwaysValidSchema)(J,W))return;let z=(0,F9.allSchemaProperties)(Z.properties),F=(0,F9.allSchemaProperties)(Z.patternProperties);K(),w.ok(L0._`${X} === ${tB.default.errors}`);function K(){Q.forIn("key",Y,(A)=>{if(!z.length&&!F.length)M(A);else Q.if(j(A),()=>M(A))})}function j(A){let $;if(z.length>8){let T=(0,K9.schemaRefOrVal)(J,Z.properties,"properties");$=(0,F9.isOwnProperty)(Q,T,A)}else if(z.length)$=(0,L0.or)(...z.map((T)=>L0._`${A} === ${T}`));else $=L0.nil;if(F.length)$=(0,L0.or)($,...F.map((T)=>L0._`${(0,F9.usePattern)(w,T)}.test(${A})`));return(0,L0.not)($)}function V(A){Q.code(L0._`delete ${Y}[${A}]`)}function M(A){if(G.removeAdditional==="all"||G.removeAdditional&&W===!1){V(A);return}if(W===!1){if(w.setParams({additionalProperty:A}),w.error(),!q)Q.break();return}if(typeof W=="object"&&!(0,K9.alwaysValidSchema)(J,W)){let $=Q.name("valid");if(G.removeAdditional==="failing")H(A,$,!1),Q.if((0,L0.not)($),()=>{w.reset(),V(A)});else if(H(A,$),!q)Q.if((0,L0.not)($),()=>Q.break())}}function H(A,$,T){let P={keyword:"additionalProperties",dataProp:A,dataPropType:K9.Type.Str};if(T===!1)Object.assign(P,{compositeRule:!0,createErrors:!1,allErrors:!1});w.subschema(P,$)}}};C4.default=eB});var bY=O((y4)=>{Object.defineProperty(y4,"__esModule",{value:!0});var wH=h1(),PY=Y0(),v4=s(),RY=f4(),QH={keyword:"properties",type:"object",schemaType:"object",code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,it:X}=w;if(X.opts.removeAdditional==="all"&&Z.additionalProperties===void 0)RY.default.code(new wH.KeywordCxt(X,RY.default,"additionalProperties"));let J=(0,PY.allSchemaProperties)(W);for(let K of J)X.definedProperties.add(K);if(X.opts.unevaluated&&J.length&&X.props!==!0)X.props=v4.mergeEvaluated.props(Q,(0,v4.toHash)(J),X.props);let q=J.filter((K)=>!(0,v4.alwaysValidSchema)(X,W[K]));if(q.length===0)return;let G=Q.name("valid");for(let K of q){if(z(K))F(K);else{if(Q.if((0,PY.propertyInData)(Q,Y,K,X.opts.ownProperties)),F(K),!X.allErrors)Q.else().var(G,!0);Q.endIf()}w.it.definedProperties.add(K),w.ok(G)}function z(K){return X.opts.useDefaults&&!X.compositeRule&&W[K].default!==void 0}function F(K){w.subschema({keyword:"properties",schemaProp:K,dataProp:K},G)}}};y4.default=QH});var CY=O((u4)=>{Object.defineProperty(u4,"__esModule",{value:!0});var SY=Y0(),B9=m(),EY=s(),kY=s(),WH={keyword:"patternProperties",type:"object",schemaType:"object",code(w){let{gen:Q,schema:W,data:Z,parentSchema:Y,it:X}=w,{opts:J}=X,q=(0,SY.allSchemaProperties)(W),G=q.filter((H)=>(0,EY.alwaysValidSchema)(X,W[H]));if(q.length===0||G.length===q.length&&(!X.opts.unevaluated||X.props===!0))return;let z=J.strictSchema&&!J.allowMatchingProperties&&Y.properties,F=Q.name("valid");if(X.props!==!0&&!(X.props instanceof B9.Name))X.props=(0,kY.evaluatedPropsToName)(Q,X.props);let{props:K}=X;j();function j(){for(let H of q){if(z)V(H);if(X.allErrors)M(H);else Q.var(F,!0),M(H),Q.if(F)}}function V(H){for(let A in z)if(new RegExp(H).test(A))(0,EY.checkStrictMode)(X,`property ${A} matches pattern ${H} (use allowMatchingProperties)`)}function M(H){Q.forIn("key",Z,(A)=>{Q.if(B9._`${(0,SY.usePattern)(w,H)}.test(${A})`,()=>{let $=G.includes(H);if(!$)w.subschema({keyword:"patternProperties",schemaProp:H,dataProp:A,dataPropType:kY.Type.Str},F);if(X.opts.unevaluated&&K!==!0)Q.assign(B9._`${K}[${A}]`,!0);else if(!$&&!X.allErrors)Q.if((0,B9.not)(F),()=>Q.break())})})}}};u4.default=WH});var fY=O((h4)=>{Object.defineProperty(h4,"__esModule",{value:!0});var ZH=s(),YH={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(w){let{gen:Q,schema:W,it:Z}=w;if((0,ZH.alwaysValidSchema)(Z,W)){w.fail();return}let Y=Q.name("valid");w.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},Y),w.failResult(Y,()=>w.reset(),()=>w.error())},error:{message:"must NOT be valid"}};h4.default=YH});var vY=O((g4)=>{Object.defineProperty(g4,"__esModule",{value:!0});var XH=Y0(),JH={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:XH.validateUnion,error:{message:"must match a schema in anyOf"}};g4.default=JH});var yY=O((_4)=>{Object.defineProperty(_4,"__esModule",{value:!0});var H9=m(),qH=s(),GH={message:"must match exactly one schema in oneOf",params:({params:w})=>H9._`{passingSchemas: ${w.passing}}`},zH={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:GH,code(w){let{gen:Q,schema:W,parentSchema:Z,it:Y}=w;if(!Array.isArray(W))throw Error("ajv implementation error");if(Y.opts.discriminator&&Z.discriminator)return;let X=W,J=Q.let("valid",!1),q=Q.let("passing",null),G=Q.name("_valid");w.setParams({passing:q}),Q.block(z),w.result(J,()=>w.reset(),()=>w.error(!0));function z(){X.forEach((F,K)=>{let j;if((0,qH.alwaysValidSchema)(Y,F))Q.var(G,!0);else j=w.subschema({keyword:"oneOf",schemaProp:K,compositeRule:!0},G);if(K>0)Q.if(H9._`${G} && ${J}`).assign(J,!1).assign(q,H9._`[${q}, ${K}]`).else();Q.if(G,()=>{if(Q.assign(J,!0),Q.assign(q,K),j)w.mergeEvaluated(j,H9.Name)})})}}};_4.default=zH});var uY=O((x4)=>{Object.defineProperty(x4,"__esModule",{value:!0});var FH=s(),KH={keyword:"allOf",schemaType:"array",code(w){let{gen:Q,schema:W,it:Z}=w;if(!Array.isArray(W))throw Error("ajv implementation error");let Y=Q.name("valid");W.forEach((X,J)=>{if((0,FH.alwaysValidSchema)(Z,X))return;let q=w.subschema({keyword:"allOf",schemaProp:J},Y);w.ok(Y),w.mergeEvaluated(q)})}};x4.default=KH});var _Y=O((l4)=>{Object.defineProperty(l4,"__esModule",{value:!0});var V9=m(),gY=s(),BH={message:({params:w})=>V9.str`must match "${w.ifClause}" schema`,params:({params:w})=>V9._`{failingKeyword: ${w.ifClause}}`},HH={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:BH,code(w){let{gen:Q,parentSchema:W,it:Z}=w;if(W.then===void 0&&W.else===void 0)(0,gY.checkStrictMode)(Z,'"if" without "then" and "else" is ignored');let Y=hY(Z,"then"),X=hY(Z,"else");if(!Y&&!X)return;let J=Q.let("valid",!0),q=Q.name("_valid");if(G(),w.reset(),Y&&X){let F=Q.let("ifClause");w.setParams({ifClause:F}),Q.if(q,z("then",F),z("else",F))}else if(Y)Q.if(q,z("then"));else Q.if((0,V9.not)(q),z("else"));w.pass(J,()=>w.error(!0));function G(){let F=w.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},q);w.mergeEvaluated(F)}function z(F,K){return()=>{let j=w.subschema({keyword:F},q);if(Q.assign(J,q),w.mergeValidEvaluated(j,J),K)Q.assign(K,V9._`${F}`);else w.setParams({ifClause:F})}}}};function hY(w,Q){let W=w.schema[Q];return W!==void 0&&!(0,gY.alwaysValidSchema)(w,W)}l4.default=HH});var xY=O((i4)=>{Object.defineProperty(i4,"__esModule",{value:!0});var VH=s(),MH={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:w,parentSchema:Q,it:W}){if(Q.if===void 0)(0,VH.checkStrictMode)(W,`"${w}" without "if" is ignored`)}};i4.default=MH});var lY=O((m4)=>{Object.defineProperty(m4,"__esModule",{value:!0});var LH=T4(),UH=UY(),jH=P4(),AH=AY(),$H=$Y(),OH=DY(),NH=TY(),DH=f4(),IH=bY(),TH=CY(),PH=fY(),RH=vY(),bH=yY(),SH=uY(),EH=_Y(),kH=xY();function CH(w=!1){let Q=[PH.default,RH.default,bH.default,SH.default,EH.default,kH.default,NH.default,DH.default,OH.default,IH.default,TH.default];if(w)Q.push(UH.default,AH.default);else Q.push(LH.default,jH.default);return Q.push($H.default),Q}m4.default=CH});var iY=O((p4)=>{Object.defineProperty(p4,"__esModule",{value:!0});var $w=m(),fH={message:({schemaCode:w})=>$w.str`must match format "${w}"`,params:({schemaCode:w})=>$w._`{format: ${w}}`},vH={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:fH,code(w,Q){let{gen:W,data:Z,$data:Y,schema:X,schemaCode:J,it:q}=w,{opts:G,errSchemaPath:z,schemaEnv:F,self:K}=q;if(!G.validateFormats)return;if(Y)j();else V();function j(){let M=W.scopeValue("formats",{ref:K.formats,code:G.code.formats}),H=W.const("fDef",$w._`${M}[${J}]`),A=W.let("fType"),$=W.let("format");W.if($w._`typeof ${H} == "object" && !(${H} instanceof RegExp)`,()=>W.assign(A,$w._`${H}.type || "string"`).assign($,$w._`${H}.validate`),()=>W.assign(A,$w._`"string"`).assign($,H)),w.fail$data((0,$w.or)(T(),P()));function T(){if(G.strictSchema===!1)return $w.nil;return $w._`${J} && !${$}`}function P(){let b=F.$async?$w._`(${H}.async ? await ${$}(${Z}) : ${$}(${Z}))`:$w._`${$}(${Z})`,N=$w._`(typeof ${$} == "function" ? ${b} : ${$}.test(${Z}))`;return $w._`${$} && ${$} !== true && ${A} === ${Q} && !${N}`}}function V(){let M=K.formats[X];if(!M){T();return}if(M===!0)return;let[H,A,$]=P(M);if(H===Q)w.pass(b());function T(){if(G.strictSchema===!1){K.logger.warn(N());return}throw Error(N());function N(){return`unknown format "${X}" ignored in schema at path "${z}"`}}function P(N){let S=N instanceof RegExp?(0,$w.regexpCode)(N):G.code.formats?$w._`${G.code.formats}${(0,$w.getProperty)(X)}`:void 0,i=W.scopeValue("formats",{key:X,ref:N,code:S});if(typeof N=="object"&&!(N instanceof RegExp))return[N.type||"string",N.validate,$w._`${i}.validate`];return["string",N,i]}function b(){if(typeof M=="object"&&!(M instanceof RegExp)&&M.async){if(!F.$async)throw Error("async format in sync schema");return $w._`await ${$}(${Z})`}return typeof A=="function"?$w._`${$}(${Z})`:$w._`${$}.test(${Z})`}}}};p4.default=vH});var mY=O((c4)=>{Object.defineProperty(c4,"__esModule",{value:!0});var yH=iY(),uH=[yH.default];c4.default=uH});var pY=O((e6)=>{Object.defineProperty(e6,"__esModule",{value:!0});e6.contentVocabulary=e6.metadataVocabulary=void 0;e6.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];e6.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var dY=O((d4)=>{Object.defineProperty(d4,"__esModule",{value:!0});var hH=eZ(),gH=HY(),_H=lY(),xH=mY(),cY=pY(),lH=[hH.default,gH.default,(0,_H.default)(),xH.default,cY.metadataVocabulary,cY.contentVocabulary];d4.default=lH});var rY=O((M9)=>{Object.defineProperty(M9,"__esModule",{value:!0});M9.DiscrError=void 0;var nY;(function(w){w.Tag="tag",w.Mapping="mapping"})(nY||(M9.DiscrError=nY={}))});var aY=O((r4)=>{Object.defineProperty(r4,"__esModule",{value:!0});var w1=m(),n4=rY(),sY=a5(),iH=g1(),mH=s(),pH={message:({params:{discrError:w,tagName:Q}})=>w===n4.DiscrError.Tag?`tag "${Q}" must be string`:`value of tag "${Q}" must be in oneOf`,params:({params:{discrError:w,tag:Q,tagName:W}})=>w1._`{error: ${w}, tag: ${W}, tagValue: ${Q}}`},cH={keyword:"discriminator",type:"object",schemaType:"object",error:pH,code(w){let{gen:Q,data:W,schema:Z,parentSchema:Y,it:X}=w,{oneOf:J}=Y;if(!X.opts.discriminator)throw Error("discriminator: requires discriminator option");let q=Z.propertyName;if(typeof q!="string")throw Error("discriminator: requires propertyName");if(Z.mapping)throw Error("discriminator: mapping is not supported");if(!J)throw Error("discriminator: requires oneOf keyword");let G=Q.let("valid",!1),z=Q.const("tag",w1._`${W}${(0,w1.getProperty)(q)}`);Q.if(w1._`typeof ${z} == "string"`,()=>F(),()=>w.error(!1,{discrError:n4.DiscrError.Tag,tag:z,tagName:q})),w.ok(G);function F(){let V=j();Q.if(!1);for(let M in V)Q.elseIf(w1._`${z} === ${M}`),Q.assign(G,K(V[M]));Q.else(),w.error(!1,{discrError:n4.DiscrError.Mapping,tag:z,tagName:q}),Q.endIf()}function K(V){let M=Q.name("valid"),H=w.subschema({keyword:"oneOf",schemaProp:V},M);return w.mergeEvaluated(H,w1.Name),M}function j(){var V;let M={},H=$(Y),A=!0;for(let b=0;b<J.length;b++){let N=J[b];if((N===null||N===void 0?void 0:N.$ref)&&!(0,mH.schemaHasRulesButRef)(N,X.self.RULES)){let i=N.$ref;if(N=sY.resolveRef.call(X.self,X.schemaEnv.root,X.baseId,i),N instanceof sY.SchemaEnv)N=N.schema;if(N===void 0)throw new iH.default(X.opts.uriResolver,X.baseId,i)}let S=(V=N===null||N===void 0?void 0:N.properties)===null||V===void 0?void 0:V[q];if(typeof S!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${q}"`);A=A&&(H||$(N)),T(S,b)}if(!A)throw Error(`discriminator: "${q}" must be required`);return M;function $({required:b}){return Array.isArray(b)&&b.includes(q)}function T(b,N){if(b.const)P(b.const,N);else if(b.enum)for(let S of b.enum)P(S,N);else throw Error(`discriminator: "properties/${q}" must have "const" or "enum"`)}function P(b,N){if(typeof b!="string"||b in M)throw Error(`discriminator: "${q}" values must be unique strings`);M[b]=N}}}};r4.default=cH});var tY=O((SO,dH)=>{dH.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var eY=O((Hw,s4)=>{Object.defineProperty(Hw,"__esModule",{value:!0});Hw.MissingRefError=Hw.ValidationError=Hw.CodeGen=Hw.Name=Hw.nil=Hw.stringify=Hw.str=Hw._=Hw.KeywordCxt=Hw.Ajv=void 0;var nH=nZ(),rH=dY(),sH=aY(),oY=tY(),aH=["/properties"],L9="http://json-schema.org/draft-07/schema";class o1 extends nH.default{_addVocabularies(){if(super._addVocabularies(),rH.default.forEach((w)=>this.addVocabulary(w)),this.opts.discriminator)this.addKeyword(sH.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let w=this.opts.$data?this.$dataMetaSchema(oY,aH):oY;this.addMetaSchema(w,L9,!1),this.refs["http://json-schema.org/schema"]=L9}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(L9)?L9:void 0)}}Hw.Ajv=o1;s4.exports=Hw=o1;s4.exports.Ajv=o1;Object.defineProperty(Hw,"__esModule",{value:!0});Hw.default=o1;var tH=h1();Object.defineProperty(Hw,"KeywordCxt",{enumerable:!0,get:function(){return tH.KeywordCxt}});var Q1=m();Object.defineProperty(Hw,"_",{enumerable:!0,get:function(){return Q1._}});Object.defineProperty(Hw,"str",{enumerable:!0,get:function(){return Q1.str}});Object.defineProperty(Hw,"stringify",{enumerable:!0,get:function(){return Q1.stringify}});Object.defineProperty(Hw,"nil",{enumerable:!0,get:function(){return Q1.nil}});Object.defineProperty(Hw,"Name",{enumerable:!0,get:function(){return Q1.Name}});Object.defineProperty(Hw,"CodeGen",{enumerable:!0,get:function(){return Q1.CodeGen}});var oH=r5();Object.defineProperty(Hw,"ValidationError",{enumerable:!0,get:function(){return oH.default}});var eH=g1();Object.defineProperty(Hw,"MissingRefError",{enumerable:!0,get:function(){return eH.default}})});var XX=O((C0)=>{Object.defineProperty(C0,"__esModule",{value:!0});C0.formatNames=C0.fastFormats=C0.fullFormats=void 0;function W1(w,Q){return{validate:w,compare:Q}}C0.fullFormats={date:W1(WX,o4),time:W1(ZX,e4),"date-time":W1(ZV,YX),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:JV,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:HV,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:qV,int32:{type:"number",validate:FV},int64:{type:"number",validate:KV},float:{type:"number",validate:QX},double:{type:"number",validate:QX},password:!0,binary:!0};C0.fastFormats={...C0.fullFormats,date:W1(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,o4),time:W1(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,e4),"date-time":W1(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,YX),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};C0.formatNames=Object.keys(C0.fullFormats);function wV(w){return w%4===0&&(w%100!==0||w%400===0)}var QV=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,WV=[0,31,28,31,30,31,30,31,31,30,31,30,31];function WX(w){let Q=QV.exec(w);if(!Q)return!1;let W=+Q[1],Z=+Q[2],Y=+Q[3];return Z>=1&&Z<=12&&Y>=1&&Y<=(Z===2&&wV(W)?29:WV[Z])}function o4(w,Q){if(!(w&&Q))return;if(w>Q)return 1;if(w<Q)return-1;return 0}var a4=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;function ZX(w,Q){let W=a4.exec(w);if(!W)return!1;let Z=+W[1],Y=+W[2],X=+W[3],J=W[5];return(Z<=23&&Y<=59&&X<=59||Z===23&&Y===59&&X===60)&&(!Q||J!=="")}function e4(w,Q){if(!(w&&Q))return;let W=a4.exec(w),Z=a4.exec(Q);if(!(W&&Z))return;if(w=W[1]+W[2]+W[3]+(W[4]||""),Q=Z[1]+Z[2]+Z[3]+(Z[4]||""),w>Q)return 1;if(w<Q)return-1;return 0}var t4=/t|\s/i;function ZV(w){let Q=w.split(t4);return Q.length===2&&WX(Q[0])&&ZX(Q[1],!0)}function YX(w,Q){if(!(w&&Q))return;let[W,Z]=w.split(t4),[Y,X]=Q.split(t4),J=o4(W,Y);if(J===void 0)return;return J||e4(Z,X)}var YV=/\/|:/,XV=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function JV(w){return YV.test(w)&&XV.test(w)}var wX=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function qV(w){return wX.lastIndex=0,wX.test(w)}var GV=-2147483648,zV=2147483647;function FV(w){return Number.isInteger(w)&&w<=zV&&w>=GV}function KV(w){return Number.isInteger(w)}function QX(){return!0}var BV=/[^\\]\\Z/;function HV(w){if(BV.test(w))return!1;try{return new RegExp(w),!0}catch(Q){return!1}}});var w5=O((ww)=>{Object.defineProperty(ww,"__esModule",{value:!0});ww.regexpCode=ww.getEsmExportName=ww.getProperty=ww.safeStringify=ww.stringify=ww.strConcat=ww.addCodeArg=ww.str=ww._=ww.nil=ww._Code=ww.Name=ww.IDENTIFIER=ww._CodeOrName=void 0;class U9{}ww._CodeOrName=U9;ww.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Z1 extends U9{constructor(w){super();if(!ww.IDENTIFIER.test(w))throw Error("CodeGen: name must be a valid identifier");this.str=w}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}ww.Name=Z1;class U0 extends U9{constructor(w){super();this._items=typeof w==="string"?[w]:w}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let w=this._items[0];return w===""||w==='""'}get str(){var w;return(w=this._str)!==null&&w!==void 0?w:this._str=this._items.reduce((Q,W)=>`${Q}${W}`,"")}get names(){var w;return(w=this._names)!==null&&w!==void 0?w:this._names=this._items.reduce((Q,W)=>{if(W instanceof Z1)Q[W.str]=(Q[W.str]||0)+1;return Q},{})}}ww._Code=U0;ww.nil=new U0("");function JX(w,...Q){let W=[w[0]],Z=0;while(Z<Q.length)Q7(W,Q[Z]),W.push(w[++Z]);return new U0(W)}ww._=JX;var w7=new U0("+");function qX(w,...Q){let W=[e1(w[0])],Z=0;while(Z<Q.length)W.push(w7),Q7(W,Q[Z]),W.push(w7,e1(w[++Z]));return VV(W),new U0(W)}ww.str=qX;function Q7(w,Q){if(Q instanceof U0)w.push(...Q._items);else if(Q instanceof Z1)w.push(Q);else w.push(UV(Q))}ww.addCodeArg=Q7;function VV(w){let Q=1;while(Q<w.length-1){if(w[Q]===w7){let W=MV(w[Q-1],w[Q+1]);if(W!==void 0){w.splice(Q-1,3,W);continue}w[Q++]="+"}Q++}}function MV(w,Q){if(Q==='""')return w;if(w==='""')return Q;if(typeof w=="string"){if(Q instanceof Z1||w[w.length-1]!=='"')return;if(typeof Q!="string")return`${w.slice(0,-1)}${Q}"`;if(Q[0]==='"')return w.slice(0,-1)+Q.slice(1);return}if(typeof Q=="string"&&Q[0]==='"'&&!(w instanceof Z1))return`"${w}${Q.slice(1)}`;return}function LV(w,Q){return Q.emptyStr()?w:w.emptyStr()?Q:qX`${w}${Q}`}ww.strConcat=LV;function UV(w){return typeof w=="number"||typeof w=="boolean"||w===null?w:e1(Array.isArray(w)?w.join(","):w)}function jV(w){return new U0(e1(w))}ww.stringify=jV;function e1(w){return JSON.stringify(w).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}ww.safeStringify=e1;function AV(w){return typeof w=="string"&&ww.IDENTIFIER.test(w)?new U0(`.${w}`):JX`[${w}]`}ww.getProperty=AV;function $V(w){if(typeof w=="string"&&ww.IDENTIFIER.test(w))return new U0(`${w}`);throw Error(`CodeGen: invalid export name: ${w}, use explicit $id name mapping`)}ww.getEsmExportName=$V;function OV(w){return new U0(w.toString())}ww.regexpCode=OV});var X7=O((xw)=>{Object.defineProperty(xw,"__esModule",{value:!0});xw.ValueScope=xw.ValueScopeName=xw.Scope=xw.varKinds=xw.UsedValueState=void 0;var sw=w5();class GX extends Error{constructor(w){super(`CodeGen: "code" for ${w} not defined`);this.value=w.value}}var W7;(function(w){w[w.Started=0]="Started",w[w.Completed=1]="Completed"})(W7=xw.UsedValueState||(xw.UsedValueState={}));xw.varKinds={const:new sw.Name("const"),let:new sw.Name("let"),var:new sw.Name("var")};class Z7{constructor({prefixes:w,parent:Q}={}){this._names={},this._prefixes=w,this._parent=Q}toName(w){return w instanceof sw.Name?w:this.name(w)}name(w){return new sw.Name(this._newName(w))}_newName(w){let Q=this._names[w]||this._nameGroup(w);return`${w}${Q.index++}`}_nameGroup(w){var Q,W;if(((W=(Q=this._parent)===null||Q===void 0?void 0:Q._prefixes)===null||W===void 0?void 0:W.has(w))||this._prefixes&&!this._prefixes.has(w))throw Error(`CodeGen: prefix "${w}" is not allowed in this scope`);return this._names[w]={prefix:w,index:0}}}xw.Scope=Z7;class Y7 extends sw.Name{constructor(w,Q){super(Q);this.prefix=w}setValue(w,{property:Q,itemIndex:W}){this.value=w,this.scopePath=sw._`.${new sw.Name(Q)}[${W}]`}}xw.ValueScopeName=Y7;var NV=sw._`\n`;class zX extends Z7{constructor(w){super(w);this._values={},this._scope=w.scope,this.opts={...w,_n:w.lines?NV:sw.nil}}get(){return this._scope}name(w){return new Y7(w,this._newName(w))}value(w,Q){var W;if(Q.ref===void 0)throw Error("CodeGen: ref must be passed in value");let Z=this.toName(w),{prefix:Y}=Z,X=(W=Q.key)!==null&&W!==void 0?W:Q.ref,J=this._values[Y];if(J){let z=J.get(X);if(z)return z}else J=this._values[Y]=new Map;J.set(X,Z);let q=this._scope[Y]||(this._scope[Y]=[]),G=q.length;return q[G]=Q.ref,Z.setValue(Q,{property:Y,itemIndex:G}),Z}getValue(w,Q){let W=this._values[w];if(!W)return;return W.get(Q)}scopeRefs(w,Q=this._values){return this._reduceValues(Q,(W)=>{if(W.scopePath===void 0)throw Error(`CodeGen: name "${W}" has no value`);return sw._`${w}${W.scopePath}`})}scopeCode(w=this._values,Q,W){return this._reduceValues(w,(Z)=>{if(Z.value===void 0)throw Error(`CodeGen: name "${Z}" has no value`);return Z.value.code},Q,W)}_reduceValues(w,Q,W={},Z){let Y=sw.nil;for(let X in w){let J=w[X];if(!J)continue;let q=W[X]=W[X]||new Map;J.forEach((G)=>{if(q.has(G))return;q.set(G,W7.Started);let z=Q(G);if(z){let F=this.opts.es5?xw.varKinds.var:xw.varKinds.const;Y=sw._`${Y}${F} ${G} = ${z};${this.opts._n}`}else if(z=Z===null||Z===void 0?void 0:Z(G))Y=sw._`${Y}${z}${this.opts._n}`;else throw new GX(G);q.set(G,W7.Completed)})}return Y}}xw.ValueScope=zX});var h=O((x)=>{Object.defineProperty(x,"__esModule",{value:!0});x.or=x.and=x.not=x.CodeGen=x.operators=x.varKinds=x.ValueScopeName=x.ValueScope=x.Scope=x.Name=x.regexpCode=x.stringify=x.getProperty=x.nil=x.strConcat=x.str=x._=void 0;var n=w5(),j0=X7(),J6=w5();Object.defineProperty(x,"_",{enumerable:!0,get:function(){return J6._}});Object.defineProperty(x,"str",{enumerable:!0,get:function(){return J6.str}});Object.defineProperty(x,"strConcat",{enumerable:!0,get:function(){return J6.strConcat}});Object.defineProperty(x,"nil",{enumerable:!0,get:function(){return J6.nil}});Object.defineProperty(x,"getProperty",{enumerable:!0,get:function(){return J6.getProperty}});Object.defineProperty(x,"stringify",{enumerable:!0,get:function(){return J6.stringify}});Object.defineProperty(x,"regexpCode",{enumerable:!0,get:function(){return J6.regexpCode}});Object.defineProperty(x,"Name",{enumerable:!0,get:function(){return J6.Name}});var D9=X7();Object.defineProperty(x,"Scope",{enumerable:!0,get:function(){return D9.Scope}});Object.defineProperty(x,"ValueScope",{enumerable:!0,get:function(){return D9.ValueScope}});Object.defineProperty(x,"ValueScopeName",{enumerable:!0,get:function(){return D9.ValueScopeName}});Object.defineProperty(x,"varKinds",{enumerable:!0,get:function(){return D9.varKinds}});x.operators={GT:new n._Code(">"),GTE:new n._Code(">="),LT:new n._Code("<"),LTE:new n._Code("<="),EQ:new n._Code("==="),NEQ:new n._Code("!=="),NOT:new n._Code("!"),OR:new n._Code("||"),AND:new n._Code("&&"),ADD:new n._Code("+")};class q6{optimizeNodes(){return this}optimizeNames(w,Q){return this}}class FX extends q6{constructor(w,Q,W){super();this.varKind=w,this.name=Q,this.rhs=W}render({es5:w,_n:Q}){let W=w?j0.varKinds.var:this.varKind,Z=this.rhs===void 0?"":` = ${this.rhs}`;return`${W} ${this.name}${Z};`+Q}optimizeNames(w,Q){if(!w[this.name.str])return;if(this.rhs)this.rhs=X1(this.rhs,w,Q);return this}get names(){return this.rhs instanceof n._CodeOrName?this.rhs.names:{}}}class G7 extends q6{constructor(w,Q,W){super();this.lhs=w,this.rhs=Q,this.sideEffects=W}render({_n:w}){return`${this.lhs} = ${this.rhs};`+w}optimizeNames(w,Q){if(this.lhs instanceof n.Name&&!w[this.lhs.str]&&!this.sideEffects)return;return this.rhs=X1(this.rhs,w,Q),this}get names(){let w=this.lhs instanceof n.Name?{}:{...this.lhs.names};return N9(w,this.rhs)}}class KX extends G7{constructor(w,Q,W,Z){super(w,W,Z);this.op=Q}render({_n:w}){return`${this.lhs} ${this.op}= ${this.rhs};`+w}}class BX extends q6{constructor(w){super();this.label=w,this.names={}}render({_n:w}){return`${this.label}:`+w}}class HX extends q6{constructor(w){super();this.label=w,this.names={}}render({_n:w}){return`break${this.label?` ${this.label}`:""};`+w}}class VX extends q6{constructor(w){super();this.error=w}render({_n:w}){return`throw ${this.error};`+w}get names(){return this.error.names}}class MX extends q6{constructor(w){super();this.code=w}render({_n:w}){return`${this.code};`+w}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(w,Q){return this.code=X1(this.code,w,Q),this}get names(){return this.code instanceof n._CodeOrName?this.code.names:{}}}class I9 extends q6{constructor(w=[]){super();this.nodes=w}render(w){return this.nodes.reduce((Q,W)=>Q+W.render(w),"")}optimizeNodes(){let{nodes:w}=this,Q=w.length;while(Q--){let W=w[Q].optimizeNodes();if(Array.isArray(W))w.splice(Q,1,...W);else if(W)w[Q]=W;else w.splice(Q,1)}return w.length>0?this:void 0}optimizeNames(w,Q){let{nodes:W}=this,Z=W.length;while(Z--){let Y=W[Z];if(Y.optimizeNames(w,Q))continue;DV(w,Y.names),W.splice(Z,1)}return W.length>0?this:void 0}get names(){return this.nodes.reduce((w,Q)=>T6(w,Q.names),{})}}class G6 extends I9{render(w){return"{"+w._n+super.render(w)+"}"+w._n}}class LX extends I9{}class Q5 extends G6{}Q5.kind="else";class n0 extends G6{constructor(w,Q){super(Q);this.condition=w}render(w){let Q=`if(${this.condition})`+super.render(w);if(this.else)Q+="else "+this.else.render(w);return Q}optimizeNodes(){super.optimizeNodes();let w=this.condition;if(w===!0)return this.nodes;let Q=this.else;if(Q){let W=Q.optimizeNodes();Q=this.else=Array.isArray(W)?new Q5(W):W}if(Q){if(w===!1)return Q instanceof n0?Q:Q.nodes;if(this.nodes.length)return this;return new n0(OX(w),Q instanceof n0?[Q]:Q.nodes)}if(w===!1||!this.nodes.length)return;return this}optimizeNames(w,Q){var W;if(this.else=(W=this.else)===null||W===void 0?void 0:W.optimizeNames(w,Q),!(super.optimizeNames(w,Q)||this.else))return;return this.condition=X1(this.condition,w,Q),this}get names(){let w=super.names;if(N9(w,this.condition),this.else)T6(w,this.else.names);return w}}n0.kind="if";class Y1 extends G6{}Y1.kind="for";class UX extends Y1{constructor(w){super();this.iteration=w}render(w){return`for(${this.iteration})`+super.render(w)}optimizeNames(w,Q){if(!super.optimizeNames(w,Q))return;return this.iteration=X1(this.iteration,w,Q),this}get names(){return T6(super.names,this.iteration.names)}}class jX extends Y1{constructor(w,Q,W,Z){super();this.varKind=w,this.name=Q,this.from=W,this.to=Z}render(w){let Q=w.es5?j0.varKinds.var:this.varKind,{name:W,from:Z,to:Y}=this;return`for(${Q} ${W}=${Z}; ${W}<${Y}; ${W}++)`+super.render(w)}get names(){let w=N9(super.names,this.from);return N9(w,this.to)}}class J7 extends Y1{constructor(w,Q,W,Z){super();this.loop=w,this.varKind=Q,this.name=W,this.iterable=Z}render(w){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(w)}optimizeNames(w,Q){if(!super.optimizeNames(w,Q))return;return this.iterable=X1(this.iterable,w,Q),this}get names(){return T6(super.names,this.iterable.names)}}class j9 extends G6{constructor(w,Q,W){super();this.name=w,this.args=Q,this.async=W}render(w){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(w)}}j9.kind="func";class A9 extends I9{render(w){return"return "+super.render(w)}}A9.kind="return";class AX extends G6{render(w){let Q="try"+super.render(w);if(this.catch)Q+=this.catch.render(w);if(this.finally)Q+=this.finally.render(w);return Q}optimizeNodes(){var w,Q;return super.optimizeNodes(),(w=this.catch)===null||w===void 0||w.optimizeNodes(),(Q=this.finally)===null||Q===void 0||Q.optimizeNodes(),this}optimizeNames(w,Q){var W,Z;return super.optimizeNames(w,Q),(W=this.catch)===null||W===void 0||W.optimizeNames(w,Q),(Z=this.finally)===null||Z===void 0||Z.optimizeNames(w,Q),this}get names(){let w=super.names;if(this.catch)T6(w,this.catch.names);if(this.finally)T6(w,this.finally.names);return w}}class $9 extends G6{constructor(w){super();this.error=w}render(w){return`catch(${this.error})`+super.render(w)}}$9.kind="catch";class O9 extends G6{render(w){return"finally"+super.render(w)}}O9.kind="finally";class $X{constructor(w,Q={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...Q,_n:Q.lines?`
|
|
9
|
+
`:""},this._extScope=w,this._scope=new j0.Scope({parent:w}),this._nodes=[new LX]}toString(){return this._root.render(this.opts)}name(w){return this._scope.name(w)}scopeName(w){return this._extScope.name(w)}scopeValue(w,Q){let W=this._extScope.value(w,Q);return(this._values[W.prefix]||(this._values[W.prefix]=new Set)).add(W),W}getScopeValue(w,Q){return this._extScope.getValue(w,Q)}scopeRefs(w){return this._extScope.scopeRefs(w,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(w,Q,W,Z){let Y=this._scope.toName(Q);if(W!==void 0&&Z)this._constants[Y.str]=W;return this._leafNode(new FX(w,Y,W)),Y}const(w,Q,W){return this._def(j0.varKinds.const,w,Q,W)}let(w,Q,W){return this._def(j0.varKinds.let,w,Q,W)}var(w,Q,W){return this._def(j0.varKinds.var,w,Q,W)}assign(w,Q,W){return this._leafNode(new G7(w,Q,W))}add(w,Q){return this._leafNode(new KX(w,x.operators.ADD,Q))}code(w){if(typeof w=="function")w();else if(w!==n.nil)this._leafNode(new MX(w));return this}object(...w){let Q=["{"];for(let[W,Z]of w){if(Q.length>1)Q.push(",");if(Q.push(W),W!==Z||this.opts.es5)Q.push(":"),(0,n.addCodeArg)(Q,Z)}return Q.push("}"),new n._Code(Q)}if(w,Q,W){if(this._blockNode(new n0(w)),Q&&W)this.code(Q).else().code(W).endIf();else if(Q)this.code(Q).endIf();else if(W)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(w){return this._elseNode(new n0(w))}else(){return this._elseNode(new Q5)}endIf(){return this._endBlockNode(n0,Q5)}_for(w,Q){if(this._blockNode(w),Q)this.code(Q).endFor();return this}for(w,Q){return this._for(new UX(w),Q)}forRange(w,Q,W,Z,Y=this.opts.es5?j0.varKinds.var:j0.varKinds.let){let X=this._scope.toName(w);return this._for(new jX(Y,X,Q,W),()=>Z(X))}forOf(w,Q,W,Z=j0.varKinds.const){let Y=this._scope.toName(w);if(this.opts.es5){let X=Q instanceof n.Name?Q:this.var("_arr",Q);return this.forRange("_i",0,n._`${X}.length`,(J)=>{this.var(Y,n._`${X}[${J}]`),W(Y)})}return this._for(new J7("of",Z,Y,Q),()=>W(Y))}forIn(w,Q,W,Z=this.opts.es5?j0.varKinds.var:j0.varKinds.const){if(this.opts.ownProperties)return this.forOf(w,n._`Object.keys(${Q})`,W);let Y=this._scope.toName(w);return this._for(new J7("in",Z,Y,Q),()=>W(Y))}endFor(){return this._endBlockNode(Y1)}label(w){return this._leafNode(new BX(w))}break(w){return this._leafNode(new HX(w))}return(w){let Q=new A9;if(this._blockNode(Q),this.code(w),Q.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(A9)}try(w,Q,W){if(!Q&&!W)throw Error('CodeGen: "try" without "catch" and "finally"');let Z=new AX;if(this._blockNode(Z),this.code(w),Q){let Y=this.name("e");this._currNode=Z.catch=new $9(Y),Q(Y)}if(W)this._currNode=Z.finally=new O9,this.code(W);return this._endBlockNode($9,O9)}throw(w){return this._leafNode(new VX(w))}block(w,Q){if(this._blockStarts.push(this._nodes.length),w)this.code(w).endBlock(Q);return this}endBlock(w){let Q=this._blockStarts.pop();if(Q===void 0)throw Error("CodeGen: not in self-balancing block");let W=this._nodes.length-Q;if(W<0||w!==void 0&&W!==w)throw Error(`CodeGen: wrong number of nodes: ${W} vs ${w} expected`);return this._nodes.length=Q,this}func(w,Q=n.nil,W,Z){if(this._blockNode(new j9(w,Q,W)),Z)this.code(Z).endFunc();return this}endFunc(){return this._endBlockNode(j9)}optimize(w=1){while(w-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(w){return this._currNode.nodes.push(w),this}_blockNode(w){this._currNode.nodes.push(w),this._nodes.push(w)}_endBlockNode(w,Q){let W=this._currNode;if(W instanceof w||Q&&W instanceof Q)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${Q?`${w.kind}/${Q.kind}`:w.kind}"`)}_elseNode(w){let Q=this._currNode;if(!(Q instanceof n0))throw Error('CodeGen: "else" without "if"');return this._currNode=Q.else=w,this}get _root(){return this._nodes[0]}get _currNode(){let w=this._nodes;return w[w.length-1]}set _currNode(w){let Q=this._nodes;Q[Q.length-1]=w}}x.CodeGen=$X;function T6(w,Q){for(let W in Q)w[W]=(w[W]||0)+(Q[W]||0);return w}function N9(w,Q){return Q instanceof n._CodeOrName?T6(w,Q.names):w}function X1(w,Q,W){if(w instanceof n.Name)return Z(w);if(!Y(w))return w;return new n._Code(w._items.reduce((X,J)=>{if(J instanceof n.Name)J=Z(J);if(J instanceof n._Code)X.push(...J._items);else X.push(J);return X},[]));function Z(X){let J=W[X.str];if(J===void 0||Q[X.str]!==1)return X;return delete Q[X.str],J}function Y(X){return X instanceof n._Code&&X._items.some((J)=>J instanceof n.Name&&Q[J.str]===1&&W[J.str]!==void 0)}}function DV(w,Q){for(let W in Q)w[W]=(w[W]||0)-(Q[W]||0)}function OX(w){return typeof w=="boolean"||typeof w=="number"||w===null?!w:n._`!${q7(w)}`}x.not=OX;var IV=NX(x.operators.AND);function TV(...w){return w.reduce(IV)}x.and=TV;var PV=NX(x.operators.OR);function RV(...w){return w.reduce(PV)}x.or=RV;function NX(w){return(Q,W)=>Q===n.nil?W:W===n.nil?Q:n._`${q7(Q)} ${w} ${q7(W)}`}function q7(w){return w instanceof n.Name?w:n._`(${w})`}});var Qw=O((l)=>{Object.defineProperty(l,"__esModule",{value:!0});l.checkStrictMode=l.getErrorPath=l.Type=l.useFunc=l.setEvaluated=l.evaluatedPropsToName=l.mergeEvaluated=l.eachItem=l.unescapeJsonPointer=l.escapeJsonPointer=l.escapeFragment=l.unescapeFragment=l.schemaRefOrVal=l.schemaHasRulesButRef=l.schemaHasRules=l.checkUnknownRules=l.alwaysValidSchema=l.toHash=void 0;var Kw=h(),bV=w5();function SV(w){let Q={};for(let W of w)Q[W]=!0;return Q}l.toHash=SV;function EV(w,Q){if(typeof Q=="boolean")return Q;if(Object.keys(Q).length===0)return!0;return TX(w,Q),!PX(Q,w.self.RULES.all)}l.alwaysValidSchema=EV;function TX(w,Q=w.schema){let{opts:W,self:Z}=w;if(!W.strictSchema)return;if(typeof Q==="boolean")return;let Y=Z.RULES.keywords;for(let X in Q)if(!Y[X])EX(w,`unknown keyword: "${X}"`)}l.checkUnknownRules=TX;function PX(w,Q){if(typeof w=="boolean")return!w;for(let W in w)if(Q[W])return!0;return!1}l.schemaHasRules=PX;function kV(w,Q){if(typeof w=="boolean")return!w;for(let W in w)if(W!=="$ref"&&Q.all[W])return!0;return!1}l.schemaHasRulesButRef=kV;function CV({topSchemaRef:w,schemaPath:Q},W,Z,Y){if(!Y){if(typeof W=="number"||typeof W=="boolean")return W;if(typeof W=="string")return Kw._`${W}`}return Kw._`${w}${Q}${(0,Kw.getProperty)(Z)}`}l.schemaRefOrVal=CV;function fV(w){return RX(decodeURIComponent(w))}l.unescapeFragment=fV;function vV(w){return encodeURIComponent(z7(w))}l.escapeFragment=vV;function z7(w){if(typeof w=="number")return`${w}`;return w.replace(/~/g,"~0").replace(/\//g,"~1")}l.escapeJsonPointer=z7;function RX(w){return w.replace(/~1/g,"/").replace(/~0/g,"~")}l.unescapeJsonPointer=RX;function yV(w,Q){if(Array.isArray(w))for(let W of w)Q(W);else Q(w)}l.eachItem=yV;function DX({mergeNames:w,mergeToName:Q,mergeValues:W,resultToName:Z}){return(Y,X,J,q)=>{let G=J===void 0?X:J instanceof Kw.Name?(X instanceof Kw.Name?w(Y,X,J):Q(Y,X,J),J):X instanceof Kw.Name?(Q(Y,J,X),X):W(X,J);return q===Kw.Name&&!(G instanceof Kw.Name)?Z(Y,G):G}}l.mergeEvaluated={props:DX({mergeNames:(w,Q,W)=>w.if(Kw._`${W} !== true && ${Q} !== undefined`,()=>{w.if(Kw._`${Q} === true`,()=>w.assign(W,!0),()=>w.assign(W,Kw._`${W} || {}`).code(Kw._`Object.assign(${W}, ${Q})`))}),mergeToName:(w,Q,W)=>w.if(Kw._`${W} !== true`,()=>{if(Q===!0)w.assign(W,!0);else w.assign(W,Kw._`${W} || {}`),F7(w,W,Q)}),mergeValues:(w,Q)=>w===!0?!0:{...w,...Q},resultToName:bX}),items:DX({mergeNames:(w,Q,W)=>w.if(Kw._`${W} !== true && ${Q} !== undefined`,()=>w.assign(W,Kw._`${Q} === true ? true : ${W} > ${Q} ? ${W} : ${Q}`)),mergeToName:(w,Q,W)=>w.if(Kw._`${W} !== true`,()=>w.assign(W,Q===!0?!0:Kw._`${W} > ${Q} ? ${W} : ${Q}`)),mergeValues:(w,Q)=>w===!0?!0:Math.max(w,Q),resultToName:(w,Q)=>w.var("items",Q)})};function bX(w,Q){if(Q===!0)return w.var("props",!0);let W=w.var("props",Kw._`{}`);if(Q!==void 0)F7(w,W,Q);return W}l.evaluatedPropsToName=bX;function F7(w,Q,W){Object.keys(W).forEach((Z)=>w.assign(Kw._`${Q}${(0,Kw.getProperty)(Z)}`,!0))}l.setEvaluated=F7;var IX={};function uV(w,Q){return w.scopeValue("func",{ref:Q,code:IX[Q.code]||(IX[Q.code]=new bV._Code(Q.code))})}l.useFunc=uV;var SX;(function(w){w[w.Num=0]="Num",w[w.Str=1]="Str"})(SX=l.Type||(l.Type={}));function hV(w,Q,W){if(w instanceof Kw.Name){let Z=Q===SX.Num;return W?Z?Kw._`"[" + ${w} + "]"`:Kw._`"['" + ${w} + "']"`:Z?Kw._`"/" + ${w}`:Kw._`"/" + ${w}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return W?(0,Kw.getProperty)(w).toString():"/"+z7(w)}l.getErrorPath=hV;function EX(w,Q,W=w.opts.strictSchema){if(!W)return;if(Q=`strict mode: ${Q}`,W===!0)throw Error(Q);w.self.logger.warn(Q)}l.checkStrictMode=EX});var r0=O((K7)=>{Object.defineProperty(K7,"__esModule",{value:!0});var vw=h(),gV={data:new vw.Name("data"),valCxt:new vw.Name("valCxt"),instancePath:new vw.Name("instancePath"),parentData:new vw.Name("parentData"),parentDataProperty:new vw.Name("parentDataProperty"),rootData:new vw.Name("rootData"),dynamicAnchors:new vw.Name("dynamicAnchors"),vErrors:new vw.Name("vErrors"),errors:new vw.Name("errors"),this:new vw.Name("this"),self:new vw.Name("self"),scope:new vw.Name("scope"),json:new vw.Name("json"),jsonPos:new vw.Name("jsonPos"),jsonLen:new vw.Name("jsonLen"),jsonPart:new vw.Name("jsonPart")};K7.default=gV});var W5=O((yw)=>{Object.defineProperty(yw,"__esModule",{value:!0});yw.extendErrors=yw.resetErrorsCount=yw.reportExtraError=yw.reportError=yw.keyword$DataError=yw.keywordError=void 0;var t=h(),T9=Qw(),lw=r0();yw.keywordError={message:({keyword:w})=>t.str`must pass "${w}" keyword validation`};yw.keyword$DataError={message:({keyword:w,schemaType:Q})=>Q?t.str`"${w}" keyword must be ${Q} ($data)`:t.str`"${w}" keyword is invalid ($data)`};function _V(w,Q=yw.keywordError,W,Z){let{it:Y}=w,{gen:X,compositeRule:J,allErrors:q}=Y,G=fX(w,Q,W);if(Z!==null&&Z!==void 0?Z:J||q)kX(X,G);else CX(Y,t._`[${G}]`)}yw.reportError=_V;function xV(w,Q=yw.keywordError,W){let{it:Z}=w,{gen:Y,compositeRule:X,allErrors:J}=Z,q=fX(w,Q,W);if(kX(Y,q),!(X||J))CX(Z,lw.default.vErrors)}yw.reportExtraError=xV;function lV(w,Q){w.assign(lw.default.errors,Q),w.if(t._`${lw.default.vErrors} !== null`,()=>w.if(Q,()=>w.assign(t._`${lw.default.vErrors}.length`,Q),()=>w.assign(lw.default.vErrors,null)))}yw.resetErrorsCount=lV;function iV({gen:w,keyword:Q,schemaValue:W,data:Z,errsCount:Y,it:X}){if(Y===void 0)throw Error("ajv implementation error");let J=w.name("err");w.forRange("i",Y,lw.default.errors,(q)=>{if(w.const(J,t._`${lw.default.vErrors}[${q}]`),w.if(t._`${J}.instancePath === undefined`,()=>w.assign(t._`${J}.instancePath`,(0,t.strConcat)(lw.default.instancePath,X.errorPath))),w.assign(t._`${J}.schemaPath`,t.str`${X.errSchemaPath}/${Q}`),X.opts.verbose)w.assign(t._`${J}.schema`,W),w.assign(t._`${J}.data`,Z)})}yw.extendErrors=iV;function kX(w,Q){let W=w.const("err",Q);w.if(t._`${lw.default.vErrors} === null`,()=>w.assign(lw.default.vErrors,t._`[${W}]`),t._`${lw.default.vErrors}.push(${W})`),w.code(t._`${lw.default.errors}++`)}function CX(w,Q){let{gen:W,validateName:Z,schemaEnv:Y}=w;if(Y.$async)W.throw(t._`new ${w.ValidationError}(${Q})`);else W.assign(t._`${Z}.errors`,Q),W.return(!1)}var P6={keyword:new t.Name("keyword"),schemaPath:new t.Name("schemaPath"),params:new t.Name("params"),propertyName:new t.Name("propertyName"),message:new t.Name("message"),schema:new t.Name("schema"),parentSchema:new t.Name("parentSchema")};function fX(w,Q,W){let{createErrors:Z}=w.it;if(Z===!1)return t._`{}`;return mV(w,Q,W)}function mV(w,Q,W={}){let{gen:Z,it:Y}=w,X=[pV(Y,W),cV(w,W)];return dV(w,Q,X),Z.object(...X)}function pV({errorPath:w},{instancePath:Q}){let W=Q?t.str`${w}${(0,T9.getErrorPath)(Q,T9.Type.Str)}`:w;return[lw.default.instancePath,(0,t.strConcat)(lw.default.instancePath,W)]}function cV({keyword:w,it:{errSchemaPath:Q}},{schemaPath:W,parentSchema:Z}){let Y=Z?Q:t.str`${Q}/${w}`;if(W)Y=t.str`${Y}${(0,T9.getErrorPath)(W,T9.Type.Str)}`;return[P6.schemaPath,Y]}function dV(w,{params:Q,message:W},Z){let{keyword:Y,data:X,schemaValue:J,it:q}=w,{opts:G,propertyName:z,topSchemaRef:F,schemaPath:K}=q;if(Z.push([P6.keyword,Y],[P6.params,typeof Q=="function"?Q(w):Q||t._`{}`]),G.messages)Z.push([P6.message,typeof W=="function"?W(w):W]);if(G.verbose)Z.push([P6.schema,J],[P6.parentSchema,t._`${F}${K}`],[lw.default.data,X]);if(z)Z.push([P6.propertyName,z])}});var yX=O((J1)=>{Object.defineProperty(J1,"__esModule",{value:!0});J1.boolOrEmptySchema=J1.topBoolOrEmptySchema=void 0;var nV=W5(),rV=h(),sV=r0(),aV={message:"boolean schema is false"};function tV(w){let{gen:Q,schema:W,validateName:Z}=w;if(W===!1)vX(w,!1);else if(typeof W=="object"&&W.$async===!0)Q.return(sV.default.data);else Q.assign(rV._`${Z}.errors`,null),Q.return(!0)}J1.topBoolOrEmptySchema=tV;function oV(w,Q){let{gen:W,schema:Z}=w;if(Z===!1)W.var(Q,!1),vX(w);else W.var(Q,!0)}J1.boolOrEmptySchema=oV;function vX(w,Q){let{gen:W,data:Z}=w,Y={gen:W,keyword:"false schema",data:Z,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:w};(0,nV.reportError)(Y,aV,void 0,Q)}});var B7=O((q1)=>{Object.defineProperty(q1,"__esModule",{value:!0});q1.getRules=q1.isJSONType=void 0;var eV=["string","number","integer","boolean","null","object","array"],wM=new Set(eV);function QM(w){return typeof w=="string"&&wM.has(w)}q1.isJSONType=QM;function WM(){let w={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...w,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},w.number,w.string,w.array,w.object],post:{rules:[]},all:{},keywords:{}}}q1.getRules=WM});var H7=O((z6)=>{Object.defineProperty(z6,"__esModule",{value:!0});z6.shouldUseRule=z6.shouldUseGroup=z6.schemaHasRulesForType=void 0;function ZM({schema:w,self:Q},W){let Z=Q.RULES.types[W];return Z&&Z!==!0&&uX(w,Z)}z6.schemaHasRulesForType=ZM;function uX(w,Q){return Q.rules.some((W)=>hX(w,W))}z6.shouldUseGroup=uX;function hX(w,Q){var W;return w[Q.keyword]!==void 0||((W=Q.definition.implements)===null||W===void 0?void 0:W.some((Z)=>w[Z]!==void 0))}z6.shouldUseRule=hX});var Y5=O((Rw)=>{Object.defineProperty(Rw,"__esModule",{value:!0});Rw.reportTypeError=Rw.checkDataTypes=Rw.checkDataType=Rw.coerceAndCheckDataType=Rw.getJSONTypes=Rw.getSchemaTypes=Rw.DataType=void 0;var YM=B7(),XM=H7(),JM=W5(),u=h(),gX=Qw(),Z5;(function(w){w[w.Correct=0]="Correct",w[w.Wrong=1]="Wrong"})(Z5=Rw.DataType||(Rw.DataType={}));function qM(w){let Q=_X(w.type);if(Q.includes("null")){if(w.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!Q.length&&w.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(w.nullable===!0)Q.push("null")}return Q}Rw.getSchemaTypes=qM;function _X(w){let Q=Array.isArray(w)?w:w?[w]:[];if(Q.every(YM.isJSONType))return Q;throw Error("type must be JSONType or JSONType[]: "+Q.join(","))}Rw.getJSONTypes=_X;function GM(w,Q){let{gen:W,data:Z,opts:Y}=w,X=zM(Q,Y.coerceTypes),J=Q.length>0&&!(X.length===0&&Q.length===1&&(0,XM.schemaHasRulesForType)(w,Q[0]));if(J){let q=M7(Q,Z,Y.strictNumbers,Z5.Wrong);W.if(q,()=>{if(X.length)FM(w,Q,X);else L7(w)})}return J}Rw.coerceAndCheckDataType=GM;var xX=new Set(["string","number","integer","boolean","null"]);function zM(w,Q){return Q?w.filter((W)=>xX.has(W)||Q==="array"&&W==="array"):[]}function FM(w,Q,W){let{gen:Z,data:Y,opts:X}=w,J=Z.let("dataType",u._`typeof ${Y}`),q=Z.let("coerced",u._`undefined`);if(X.coerceTypes==="array")Z.if(u._`${J} == 'object' && Array.isArray(${Y}) && ${Y}.length == 1`,()=>Z.assign(Y,u._`${Y}[0]`).assign(J,u._`typeof ${Y}`).if(M7(Q,Y,X.strictNumbers),()=>Z.assign(q,Y)));Z.if(u._`${q} !== undefined`);for(let z of W)if(xX.has(z)||z==="array"&&X.coerceTypes==="array")G(z);Z.else(),L7(w),Z.endIf(),Z.if(u._`${q} !== undefined`,()=>{Z.assign(Y,q),KM(w,q)});function G(z){switch(z){case"string":Z.elseIf(u._`${J} == "number" || ${J} == "boolean"`).assign(q,u._`"" + ${Y}`).elseIf(u._`${Y} === null`).assign(q,u._`""`);return;case"number":Z.elseIf(u._`${J} == "boolean" || ${Y} === null
|
|
10
|
+
|| (${J} == "string" && ${Y} && ${Y} == +${Y})`).assign(q,u._`+${Y}`);return;case"integer":Z.elseIf(u._`${J} === "boolean" || ${Y} === null
|
|
11
|
+
|| (${J} === "string" && ${Y} && ${Y} == +${Y} && !(${Y} % 1))`).assign(q,u._`+${Y}`);return;case"boolean":Z.elseIf(u._`${Y} === "false" || ${Y} === 0 || ${Y} === null`).assign(q,!1).elseIf(u._`${Y} === "true" || ${Y} === 1`).assign(q,!0);return;case"null":Z.elseIf(u._`${Y} === "" || ${Y} === 0 || ${Y} === false`),Z.assign(q,null);return;case"array":Z.elseIf(u._`${J} === "string" || ${J} === "number"
|
|
12
|
+
|| ${J} === "boolean" || ${Y} === null`).assign(q,u._`[${Y}]`)}}}function KM({gen:w,parentData:Q,parentDataProperty:W},Z){w.if(u._`${Q} !== undefined`,()=>w.assign(u._`${Q}[${W}]`,Z))}function V7(w,Q,W,Z=Z5.Correct){let Y=Z===Z5.Correct?u.operators.EQ:u.operators.NEQ,X;switch(w){case"null":return u._`${Q} ${Y} null`;case"array":X=u._`Array.isArray(${Q})`;break;case"object":X=u._`${Q} && typeof ${Q} == "object" && !Array.isArray(${Q})`;break;case"integer":X=J(u._`!(${Q} % 1) && !isNaN(${Q})`);break;case"number":X=J();break;default:return u._`typeof ${Q} ${Y} ${w}`}return Z===Z5.Correct?X:(0,u.not)(X);function J(q=u.nil){return(0,u.and)(u._`typeof ${Q} == "number"`,q,W?u._`isFinite(${Q})`:u.nil)}}Rw.checkDataType=V7;function M7(w,Q,W,Z){if(w.length===1)return V7(w[0],Q,W,Z);let Y,X=(0,gX.toHash)(w);if(X.array&&X.object){let J=u._`typeof ${Q} != "object"`;Y=X.null?J:u._`!${Q} || ${J}`,delete X.null,delete X.array,delete X.object}else Y=u.nil;if(X.number)delete X.integer;for(let J in X)Y=(0,u.and)(Y,V7(J,Q,W,Z));return Y}Rw.checkDataTypes=M7;var BM={message:({schema:w})=>`must be ${w}`,params:({schema:w,schemaValue:Q})=>typeof w=="string"?u._`{type: ${w}}`:u._`{type: ${Q}}`};function L7(w){let Q=HM(w);(0,JM.reportError)(Q,BM)}Rw.reportTypeError=L7;function HM(w){let{gen:Q,data:W,schema:Z}=w,Y=(0,gX.schemaRefOrVal)(w,Z,"type");return{gen:Q,keyword:"type",data:W,schema:Z.type,schemaCode:Y,schemaValue:Y,parentSchema:Z,params:{},it:w}}});var iX=O((P9)=>{Object.defineProperty(P9,"__esModule",{value:!0});P9.assignDefaults=void 0;var G1=h(),VM=Qw();function MM(w,Q){let{properties:W,items:Z}=w.schema;if(Q==="object"&&W)for(let Y in W)lX(w,Y,W[Y].default);else if(Q==="array"&&Array.isArray(Z))Z.forEach((Y,X)=>lX(w,X,Y.default))}P9.assignDefaults=MM;function lX(w,Q,W){let{gen:Z,compositeRule:Y,data:X,opts:J}=w;if(W===void 0)return;let q=G1._`${X}${(0,G1.getProperty)(Q)}`;if(Y){(0,VM.checkStrictMode)(w,`default is ignored for: ${q}`);return}let G=G1._`${q} === undefined`;if(J.useDefaults==="empty")G=G1._`${G} || ${q} === null || ${q} === ""`;Z.if(G,G1._`${q} = ${(0,G1.stringify)(W)}`)}});var q0=O((qw)=>{Object.defineProperty(qw,"__esModule",{value:!0});qw.validateUnion=qw.validateArray=qw.usePattern=qw.callValidateCode=qw.schemaProperties=qw.allSchemaProperties=qw.noPropertyInData=qw.propertyInData=qw.isOwnProperty=qw.hasPropFunc=qw.reportMissingProp=qw.checkMissingProp=qw.checkReportMissingProp=void 0;var Vw=h(),U7=Qw(),F6=r0(),LM=Qw();function UM(w,Q){let{gen:W,data:Z,it:Y}=w;W.if(A7(W,Z,Q,Y.opts.ownProperties),()=>{w.setParams({missingProperty:Vw._`${Q}`},!0),w.error()})}qw.checkReportMissingProp=UM;function jM({gen:w,data:Q,it:{opts:W}},Z,Y){return(0,Vw.or)(...Z.map((X)=>(0,Vw.and)(A7(w,Q,X,W.ownProperties),Vw._`${Y} = ${X}`)))}qw.checkMissingProp=jM;function AM(w,Q){w.setParams({missingProperty:Q},!0),w.error()}qw.reportMissingProp=AM;function mX(w){return w.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:Vw._`Object.prototype.hasOwnProperty`})}qw.hasPropFunc=mX;function j7(w,Q,W){return Vw._`${mX(w)}.call(${Q}, ${W})`}qw.isOwnProperty=j7;function $M(w,Q,W,Z){let Y=Vw._`${Q}${(0,Vw.getProperty)(W)} !== undefined`;return Z?Vw._`${Y} && ${j7(w,Q,W)}`:Y}qw.propertyInData=$M;function A7(w,Q,W,Z){let Y=Vw._`${Q}${(0,Vw.getProperty)(W)} === undefined`;return Z?(0,Vw.or)(Y,(0,Vw.not)(j7(w,Q,W))):Y}qw.noPropertyInData=A7;function pX(w){return w?Object.keys(w).filter((Q)=>Q!=="__proto__"):[]}qw.allSchemaProperties=pX;function OM(w,Q){return pX(Q).filter((W)=>!(0,U7.alwaysValidSchema)(w,Q[W]))}qw.schemaProperties=OM;function NM({schemaCode:w,data:Q,it:{gen:W,topSchemaRef:Z,schemaPath:Y,errorPath:X},it:J},q,G,z){let F=z?Vw._`${w}, ${Q}, ${Z}${Y}`:Q,K=[[F6.default.instancePath,(0,Vw.strConcat)(F6.default.instancePath,X)],[F6.default.parentData,J.parentData],[F6.default.parentDataProperty,J.parentDataProperty],[F6.default.rootData,F6.default.rootData]];if(J.opts.dynamicRef)K.push([F6.default.dynamicAnchors,F6.default.dynamicAnchors]);let j=Vw._`${F}, ${W.object(...K)}`;return G!==Vw.nil?Vw._`${q}.call(${G}, ${j})`:Vw._`${q}(${j})`}qw.callValidateCode=NM;var DM=Vw._`new RegExp`;function IM({gen:w,it:{opts:Q}},W){let Z=Q.unicodeRegExp?"u":"",{regExp:Y}=Q.code,X=Y(W,Z);return w.scopeValue("pattern",{key:X.toString(),ref:X,code:Vw._`${Y.code==="new RegExp"?DM:(0,LM.useFunc)(w,Y)}(${W}, ${Z})`})}qw.usePattern=IM;function TM(w){let{gen:Q,data:W,keyword:Z,it:Y}=w,X=Q.name("valid");if(Y.allErrors){let q=Q.let("valid",!0);return J(()=>Q.assign(q,!1)),q}return Q.var(X,!0),J(()=>Q.break()),X;function J(q){let G=Q.const("len",Vw._`${W}.length`);Q.forRange("i",0,G,(z)=>{w.subschema({keyword:Z,dataProp:z,dataPropType:U7.Type.Num},X),Q.if((0,Vw.not)(X),q)})}}qw.validateArray=TM;function PM(w){let{gen:Q,schema:W,keyword:Z,it:Y}=w;if(!Array.isArray(W))throw Error("ajv implementation error");if(W.some((G)=>(0,U7.alwaysValidSchema)(Y,G))&&!Y.opts.unevaluated)return;let J=Q.let("valid",!1),q=Q.name("_valid");Q.block(()=>W.forEach((G,z)=>{let F=w.subschema({keyword:Z,schemaProp:z,compositeRule:!0},q);if(Q.assign(J,Vw._`${J} || ${q}`),!w.mergeValidEvaluated(F,q))Q.if((0,Vw.not)(J))})),w.result(J,()=>w.reset(),()=>w.error(!0))}qw.validateUnion=PM});var nX=O((f0)=>{Object.defineProperty(f0,"__esModule",{value:!0});f0.validateKeywordUsage=f0.validSchemaType=f0.funcKeywordCode=f0.macroKeywordCode=void 0;var iw=h(),R6=r0(),RM=q0(),bM=W5();function SM(w,Q){let{gen:W,keyword:Z,schema:Y,parentSchema:X,it:J}=w,q=Q.macro.call(J.self,Y,X,J),G=dX(W,Z,q);if(J.opts.validateSchema!==!1)J.self.validateSchema(q,!0);let z=W.name("valid");w.subschema({schema:q,schemaPath:iw.nil,errSchemaPath:`${J.errSchemaPath}/${Z}`,topSchemaRef:G,compositeRule:!0},z),w.pass(z,()=>w.error(!0))}f0.macroKeywordCode=SM;function EM(w,Q){var W;let{gen:Z,keyword:Y,schema:X,parentSchema:J,$data:q,it:G}=w;CM(G,Q);let z=!q&&Q.compile?Q.compile.call(G.self,X,J,G):Q.validate,F=dX(Z,Y,z),K=Z.let("valid");w.block$data(K,j),w.ok((W=Q.valid)!==null&&W!==void 0?W:K);function j(){if(Q.errors===!1){if(H(),Q.modifying)cX(w);A(()=>w.error())}else{let $=Q.async?V():M();if(Q.modifying)cX(w);A(()=>kM(w,$))}}function V(){let $=Z.let("ruleErrs",null);return Z.try(()=>H(iw._`await `),(T)=>Z.assign(K,!1).if(iw._`${T} instanceof ${G.ValidationError}`,()=>Z.assign($,iw._`${T}.errors`),()=>Z.throw(T))),$}function M(){let $=iw._`${F}.errors`;return Z.assign($,null),H(iw.nil),$}function H($=Q.async?iw._`await `:iw.nil){let T=G.opts.passContext?R6.default.this:R6.default.self,P=!(("compile"in Q)&&!q||Q.schema===!1);Z.assign(K,iw._`${$}${(0,RM.callValidateCode)(w,F,T,P)}`,Q.modifying)}function A($){var T;Z.if((0,iw.not)((T=Q.valid)!==null&&T!==void 0?T:K),$)}}f0.funcKeywordCode=EM;function cX(w){let{gen:Q,data:W,it:Z}=w;Q.if(Z.parentData,()=>Q.assign(W,iw._`${Z.parentData}[${Z.parentDataProperty}]`))}function kM(w,Q){let{gen:W}=w;W.if(iw._`Array.isArray(${Q})`,()=>{W.assign(R6.default.vErrors,iw._`${R6.default.vErrors} === null ? ${Q} : ${R6.default.vErrors}.concat(${Q})`).assign(R6.default.errors,iw._`${R6.default.vErrors}.length`),(0,bM.extendErrors)(w)},()=>w.error())}function CM({schemaEnv:w},Q){if(Q.async&&!w.$async)throw Error("async keyword in sync schema")}function dX(w,Q,W){if(W===void 0)throw Error(`keyword "${Q}" failed to compile`);return w.scopeValue("keyword",typeof W=="function"?{ref:W}:{ref:W,code:(0,iw.stringify)(W)})}function fM(w,Q,W=!1){return!Q.length||Q.some((Z)=>Z==="array"?Array.isArray(w):Z==="object"?w&&typeof w=="object"&&!Array.isArray(w):typeof w==Z||W&&typeof w>"u")}f0.validSchemaType=fM;function vM({schema:w,opts:Q,self:W,errSchemaPath:Z},Y,X){if(Array.isArray(Y.keyword)?!Y.keyword.includes(X):Y.keyword!==X)throw Error("ajv implementation error");let J=Y.dependencies;if(J===null||J===void 0?void 0:J.some((q)=>!Object.prototype.hasOwnProperty.call(w,q)))throw Error(`parent schema must have dependencies of ${X}: ${J.join(",")}`);if(Y.validateSchema){if(!Y.validateSchema(w[X])){let G=`keyword "${X}" value is invalid at path "${Z}": `+W.errorsText(Y.validateSchema.errors);if(Q.validateSchema==="log")W.logger.error(G);else throw Error(G)}}}f0.validateKeywordUsage=vM});var sX=O((K6)=>{Object.defineProperty(K6,"__esModule",{value:!0});K6.extendSubschemaMode=K6.extendSubschemaData=K6.getSubschema=void 0;var v0=h(),rX=Qw();function yM(w,{keyword:Q,schemaProp:W,schema:Z,schemaPath:Y,errSchemaPath:X,topSchemaRef:J}){if(Q!==void 0&&Z!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(Q!==void 0){let q=w.schema[Q];return W===void 0?{schema:q,schemaPath:v0._`${w.schemaPath}${(0,v0.getProperty)(Q)}`,errSchemaPath:`${w.errSchemaPath}/${Q}`}:{schema:q[W],schemaPath:v0._`${w.schemaPath}${(0,v0.getProperty)(Q)}${(0,v0.getProperty)(W)}`,errSchemaPath:`${w.errSchemaPath}/${Q}/${(0,rX.escapeFragment)(W)}`}}if(Z!==void 0){if(Y===void 0||X===void 0||J===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:Z,schemaPath:Y,topSchemaRef:J,errSchemaPath:X}}throw Error('either "keyword" or "schema" must be passed')}K6.getSubschema=yM;function uM(w,Q,{dataProp:W,dataPropType:Z,data:Y,dataTypes:X,propertyName:J}){if(Y!==void 0&&W!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:q}=Q;if(W!==void 0){let{errorPath:z,dataPathArr:F,opts:K}=Q,j=q.let("data",v0._`${Q.data}${(0,v0.getProperty)(W)}`,!0);G(j),w.errorPath=v0.str`${z}${(0,rX.getErrorPath)(W,Z,K.jsPropertySyntax)}`,w.parentDataProperty=v0._`${W}`,w.dataPathArr=[...F,w.parentDataProperty]}if(Y!==void 0){let z=Y instanceof v0.Name?Y:q.let("data",Y,!0);if(G(z),J!==void 0)w.propertyName=J}if(X)w.dataTypes=X;function G(z){w.data=z,w.dataLevel=Q.dataLevel+1,w.dataTypes=[],Q.definedProperties=new Set,w.parentData=Q.data,w.dataNames=[...Q.dataNames,z]}}K6.extendSubschemaData=uM;function hM(w,{jtdDiscriminator:Q,jtdMetadata:W,compositeRule:Z,createErrors:Y,allErrors:X}){if(Z!==void 0)w.compositeRule=Z;if(Y!==void 0)w.createErrors=Y;if(X!==void 0)w.allErrors=X;w.jtdDiscriminator=Q,w.jtdMetadata=W}K6.extendSubschemaMode=hM});var X5=O((aw)=>{Object.defineProperty(aw,"__esModule",{value:!0});aw.getSchemaRefs=aw.resolveUrl=aw.normalizeId=aw._getFullPath=aw.getFullPath=aw.inlineRef=void 0;var gM=Qw(),_M=f1(),xM=i8(),lM=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function iM(w,Q=!0){if(typeof w=="boolean")return!0;if(Q===!0)return!$7(w);if(!Q)return!1;return aX(w)<=Q}aw.inlineRef=iM;var mM=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function $7(w){for(let Q in w){if(mM.has(Q))return!0;let W=w[Q];if(Array.isArray(W)&&W.some($7))return!0;if(typeof W=="object"&&$7(W))return!0}return!1}function aX(w){let Q=0;for(let W in w){if(W==="$ref")return 1/0;if(Q++,lM.has(W))continue;if(typeof w[W]=="object")(0,gM.eachItem)(w[W],(Z)=>Q+=aX(Z));if(Q===1/0)return 1/0}return Q}function tX(w,Q="",W){if(W!==!1)Q=z1(Q);let Z=w.parse(Q);return oX(w,Z)}aw.getFullPath=tX;function oX(w,Q){return w.serialize(Q).split("#")[0]+"#"}aw._getFullPath=oX;var pM=/#\/?$/;function z1(w){return w?w.replace(pM,""):""}aw.normalizeId=z1;function cM(w,Q,W){return W=z1(W),w.resolve(Q,W)}aw.resolveUrl=cM;var dM=/^[a-z_][-a-z0-9._]*$/i;function nM(w,Q){if(typeof w=="boolean")return{};let{schemaId:W,uriResolver:Z}=this.opts,Y=z1(w[W]||Q),X={"":Y},J=tX(Z,Y,!1),q={},G=new Set;return xM(w,{allKeys:!0},(K,j,V,M)=>{if(M===void 0)return;let H=J+j,A=X[M];if(typeof K[W]=="string")A=$.call(this,K[W]);T.call(this,K.$anchor),T.call(this,K.$dynamicAnchor),X[j]=A;function $(P){let b=this.opts.uriResolver.resolve;if(P=z1(A?b(A,P):P),G.has(P))throw F(P);G.add(P);let N=this.refs[P];if(typeof N=="string")N=this.refs[N];if(typeof N=="object")z(K,N.schema,P);else if(P!==z1(H))if(P[0]==="#")z(K,q[P],P),q[P]=K;else this.refs[P]=H;return P}function T(P){if(typeof P=="string"){if(!dM.test(P))throw Error(`invalid anchor "${P}"`);$.call(this,`#${P}`)}}}),q;function z(K,j,V){if(j!==void 0&&!_M(K,j))throw F(V)}function F(K){return Error(`reference "${K}" resolves to more than one schema`)}}aw.getSchemaRefs=nM});var G5=O((B6)=>{Object.defineProperty(B6,"__esModule",{value:!0});B6.getData=B6.KeywordCxt=B6.validateFunctionCode=void 0;var ZJ=yX(),eX=Y5(),N7=H7(),R9=Y5(),rM=iX(),q5=nX(),O7=sX(),k=h(),f=r0(),sM=X5(),s0=Qw(),J5=W5();function aM(w){if(JJ(w)){if(qJ(w),XJ(w)){eM(w);return}}YJ(w,()=>(0,ZJ.topBoolOrEmptySchema)(w))}B6.validateFunctionCode=aM;function YJ({gen:w,validateName:Q,schema:W,schemaEnv:Z,opts:Y},X){if(Y.code.es5)w.func(Q,k._`${f.default.data}, ${f.default.valCxt}`,Z.$async,()=>{w.code(k._`"use strict"; ${wJ(W,Y)}`),oM(w,Y),w.code(X)});else w.func(Q,k._`${f.default.data}, ${tM(Y)}`,Z.$async,()=>w.code(wJ(W,Y)).code(X))}function tM(w){return k._`{${f.default.instancePath}="", ${f.default.parentData}, ${f.default.parentDataProperty}, ${f.default.rootData}=${f.default.data}${w.dynamicRef?k._`, ${f.default.dynamicAnchors}={}`:k.nil}}={}`}function oM(w,Q){w.if(f.default.valCxt,()=>{if(w.var(f.default.instancePath,k._`${f.default.valCxt}.${f.default.instancePath}`),w.var(f.default.parentData,k._`${f.default.valCxt}.${f.default.parentData}`),w.var(f.default.parentDataProperty,k._`${f.default.valCxt}.${f.default.parentDataProperty}`),w.var(f.default.rootData,k._`${f.default.valCxt}.${f.default.rootData}`),Q.dynamicRef)w.var(f.default.dynamicAnchors,k._`${f.default.valCxt}.${f.default.dynamicAnchors}`)},()=>{if(w.var(f.default.instancePath,k._`""`),w.var(f.default.parentData,k._`undefined`),w.var(f.default.parentDataProperty,k._`undefined`),w.var(f.default.rootData,f.default.data),Q.dynamicRef)w.var(f.default.dynamicAnchors,k._`{}`)})}function eM(w){let{schema:Q,opts:W,gen:Z}=w;YJ(w,()=>{if(W.$comment&&Q.$comment)zJ(w);if(YL(w),Z.let(f.default.vErrors,null),Z.let(f.default.errors,0),W.unevaluated)wL(w);GJ(w),qL(w)});return}function wL(w){let{gen:Q,validateName:W}=w;w.evaluated=Q.const("evaluated",k._`${W}.evaluated`),Q.if(k._`${w.evaluated}.dynamicProps`,()=>Q.assign(k._`${w.evaluated}.props`,k._`undefined`)),Q.if(k._`${w.evaluated}.dynamicItems`,()=>Q.assign(k._`${w.evaluated}.items`,k._`undefined`))}function wJ(w,Q){let W=typeof w=="object"&&w[Q.schemaId];return W&&(Q.code.source||Q.code.process)?k._`/*# sourceURL=${W} */`:k.nil}function QL(w,Q){if(JJ(w)){if(qJ(w),XJ(w)){WL(w,Q);return}}(0,ZJ.boolOrEmptySchema)(w,Q)}function XJ({schema:w,self:Q}){if(typeof w=="boolean")return!w;for(let W in w)if(Q.RULES.all[W])return!0;return!1}function JJ(w){return typeof w.schema!="boolean"}function WL(w,Q){let{schema:W,gen:Z,opts:Y}=w;if(Y.$comment&&W.$comment)zJ(w);XL(w),JL(w);let X=Z.const("_errs",f.default.errors);GJ(w,X),Z.var(Q,k._`${X} === ${f.default.errors}`)}function qJ(w){(0,s0.checkUnknownRules)(w),ZL(w)}function GJ(w,Q){if(w.opts.jtd)return QJ(w,[],!1,Q);let W=(0,eX.getSchemaTypes)(w.schema),Z=(0,eX.coerceAndCheckDataType)(w,W);QJ(w,W,!Z,Q)}function ZL(w){let{schema:Q,errSchemaPath:W,opts:Z,self:Y}=w;if(Q.$ref&&Z.ignoreKeywordsWithRef&&(0,s0.schemaHasRulesButRef)(Q,Y.RULES))Y.logger.warn(`$ref: keywords ignored in schema at path "${W}"`)}function YL(w){let{schema:Q,opts:W}=w;if(Q.default!==void 0&&W.useDefaults&&W.strictSchema)(0,s0.checkStrictMode)(w,"default is ignored in the schema root")}function XL(w){let Q=w.schema[w.opts.schemaId];if(Q)w.baseId=(0,sM.resolveUrl)(w.opts.uriResolver,w.baseId,Q)}function JL(w){if(w.schema.$async&&!w.schemaEnv.$async)throw Error("async schema in sync schema")}function zJ({gen:w,schemaEnv:Q,schema:W,errSchemaPath:Z,opts:Y}){let X=W.$comment;if(Y.$comment===!0)w.code(k._`${f.default.self}.logger.log(${X})`);else if(typeof Y.$comment=="function"){let J=k.str`${Z}/$comment`,q=w.scopeValue("root",{ref:Q.root});w.code(k._`${f.default.self}.opts.$comment(${X}, ${J}, ${q}.schema)`)}}function qL(w){let{gen:Q,schemaEnv:W,validateName:Z,ValidationError:Y,opts:X}=w;if(W.$async)Q.if(k._`${f.default.errors} === 0`,()=>Q.return(f.default.data),()=>Q.throw(k._`new ${Y}(${f.default.vErrors})`));else{if(Q.assign(k._`${Z}.errors`,f.default.vErrors),X.unevaluated)GL(w);Q.return(k._`${f.default.errors} === 0`)}}function GL({gen:w,evaluated:Q,props:W,items:Z}){if(W instanceof k.Name)w.assign(k._`${Q}.props`,W);if(Z instanceof k.Name)w.assign(k._`${Q}.items`,Z)}function QJ(w,Q,W,Z){let{gen:Y,schema:X,data:J,allErrors:q,opts:G,self:z}=w,{RULES:F}=z;if(X.$ref&&(G.ignoreKeywordsWithRef||!(0,s0.schemaHasRulesButRef)(X,F))){Y.block(()=>KJ(w,"$ref",F.all.$ref.definition));return}if(!G.jtd)zL(w,Q);Y.block(()=>{for(let j of F.rules)K(j);K(F.post)});function K(j){if(!(0,N7.shouldUseGroup)(X,j))return;if(j.type){if(Y.if((0,R9.checkDataType)(j.type,J,G.strictNumbers)),WJ(w,j),Q.length===1&&Q[0]===j.type&&W)Y.else(),(0,R9.reportTypeError)(w);Y.endIf()}else WJ(w,j);if(!q)Y.if(k._`${f.default.errors} === ${Z||0}`)}}function WJ(w,Q){let{gen:W,schema:Z,opts:{useDefaults:Y}}=w;if(Y)(0,rM.assignDefaults)(w,Q.type);W.block(()=>{for(let X of Q.rules)if((0,N7.shouldUseRule)(Z,X))KJ(w,X.keyword,X.definition,Q.type)})}function zL(w,Q){if(w.schemaEnv.meta||!w.opts.strictTypes)return;if(FL(w,Q),!w.opts.allowUnionTypes)KL(w,Q);BL(w,w.dataTypes)}function FL(w,Q){if(!Q.length)return;if(!w.dataTypes.length){w.dataTypes=Q;return}Q.forEach((W)=>{if(!FJ(w.dataTypes,W))D7(w,`type "${W}" not allowed by context "${w.dataTypes.join(",")}"`)}),VL(w,Q)}function KL(w,Q){if(Q.length>1&&!(Q.length===2&&Q.includes("null")))D7(w,"use allowUnionTypes to allow union type keyword")}function BL(w,Q){let W=w.self.RULES.all;for(let Z in W){let Y=W[Z];if(typeof Y=="object"&&(0,N7.shouldUseRule)(w.schema,Y)){let{type:X}=Y.definition;if(X.length&&!X.some((J)=>HL(Q,J)))D7(w,`missing type "${X.join(",")}" for keyword "${Z}"`)}}}function HL(w,Q){return w.includes(Q)||Q==="number"&&w.includes("integer")}function FJ(w,Q){return w.includes(Q)||Q==="integer"&&w.includes("number")}function VL(w,Q){let W=[];for(let Z of w.dataTypes)if(FJ(Q,Z))W.push(Z);else if(Q.includes("integer")&&Z==="number")W.push("integer");w.dataTypes=W}function D7(w,Q){let W=w.schemaEnv.baseId+w.errSchemaPath;Q+=` at "${W}" (strictTypes)`,(0,s0.checkStrictMode)(w,Q,w.opts.strictTypes)}class I7{constructor(w,Q,W){if((0,q5.validateKeywordUsage)(w,Q,W),this.gen=w.gen,this.allErrors=w.allErrors,this.keyword=W,this.data=w.data,this.schema=w.schema[W],this.$data=Q.$data&&w.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,s0.schemaRefOrVal)(w,this.schema,W,this.$data),this.schemaType=Q.schemaType,this.parentSchema=w.schema,this.params={},this.it=w,this.def=Q,this.$data)this.schemaCode=w.gen.const("vSchema",BJ(this.$data,w));else if(this.schemaCode=this.schemaValue,!(0,q5.validSchemaType)(this.schema,Q.schemaType,Q.allowUndefined))throw Error(`${W} value must be ${JSON.stringify(Q.schemaType)}`);if("code"in Q?Q.trackErrors:Q.errors!==!1)this.errsCount=w.gen.const("_errs",f.default.errors)}result(w,Q,W){this.failResult((0,k.not)(w),Q,W)}failResult(w,Q,W){if(this.gen.if(w),W)W();else this.error();if(Q){if(this.gen.else(),Q(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(w,Q){this.failResult((0,k.not)(w),void 0,Q)}fail(w){if(w===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(w),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(w){if(!this.$data)return this.fail(w);let{schemaCode:Q}=this;this.fail(k._`${Q} !== undefined && (${(0,k.or)(this.invalid$data(),w)})`)}error(w,Q,W){if(Q){this.setParams(Q),this._error(w,W),this.setParams({});return}this._error(w,W)}_error(w,Q){(w?J5.reportExtraError:J5.reportError)(this,this.def.error,Q)}$dataError(){(0,J5.reportError)(this,this.def.$dataError||J5.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,J5.resetErrorsCount)(this.gen,this.errsCount)}ok(w){if(!this.allErrors)this.gen.if(w)}setParams(w,Q){if(Q)Object.assign(this.params,w);else this.params=w}block$data(w,Q,W=k.nil){this.gen.block(()=>{this.check$data(w,W),Q()})}check$data(w=k.nil,Q=k.nil){if(!this.$data)return;let{gen:W,schemaCode:Z,schemaType:Y,def:X}=this;if(W.if((0,k.or)(k._`${Z} === undefined`,Q)),w!==k.nil)W.assign(w,!0);if(Y.length||X.validateSchema){if(W.elseIf(this.invalid$data()),this.$dataError(),w!==k.nil)W.assign(w,!1)}W.else()}invalid$data(){let{gen:w,schemaCode:Q,schemaType:W,def:Z,it:Y}=this;return(0,k.or)(X(),J());function X(){if(W.length){if(!(Q instanceof k.Name))throw Error("ajv implementation error");let q=Array.isArray(W)?W:[W];return k._`${(0,R9.checkDataTypes)(q,Q,Y.opts.strictNumbers,R9.DataType.Wrong)}`}return k.nil}function J(){if(Z.validateSchema){let q=w.scopeValue("validate$data",{ref:Z.validateSchema});return k._`!${q}(${Q})`}return k.nil}}subschema(w,Q){let W=(0,O7.getSubschema)(this.it,w);(0,O7.extendSubschemaData)(W,this.it,w),(0,O7.extendSubschemaMode)(W,w);let Z={...this.it,...W,items:void 0,props:void 0};return QL(Z,Q),Z}mergeEvaluated(w,Q){let{it:W,gen:Z}=this;if(!W.opts.unevaluated)return;if(W.props!==!0&&w.props!==void 0)W.props=s0.mergeEvaluated.props(Z,w.props,W.props,Q);if(W.items!==!0&&w.items!==void 0)W.items=s0.mergeEvaluated.items(Z,w.items,W.items,Q)}mergeValidEvaluated(w,Q){let{it:W,gen:Z}=this;if(W.opts.unevaluated&&(W.props!==!0||W.items!==!0))return Z.if(Q,()=>this.mergeEvaluated(w,k.Name)),!0}}B6.KeywordCxt=I7;function KJ(w,Q,W,Z){let Y=new I7(w,W,Q);if("code"in W)W.code(Y,Z);else if(Y.$data&&W.validate)(0,q5.funcKeywordCode)(Y,W);else if("macro"in W)(0,q5.macroKeywordCode)(Y,W);else if(W.compile||W.validate)(0,q5.funcKeywordCode)(Y,W)}var ML=/^\/(?:[^~]|~0|~1)*$/,LL=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function BJ(w,{dataLevel:Q,dataNames:W,dataPathArr:Z}){let Y,X;if(w==="")return f.default.rootData;if(w[0]==="/"){if(!ML.test(w))throw Error(`Invalid JSON-pointer: ${w}`);Y=w,X=f.default.rootData}else{let z=LL.exec(w);if(!z)throw Error(`Invalid JSON-pointer: ${w}`);let F=+z[1];if(Y=z[2],Y==="#"){if(F>=Q)throw Error(G("property/index",F));return Z[Q-F]}if(F>Q)throw Error(G("data",F));if(X=W[Q-F],!Y)return X}let J=X,q=Y.split("/");for(let z of q)if(z)X=k._`${X}${(0,k.getProperty)((0,s0.unescapeJsonPointer)(z))}`,J=k._`${J} && ${X}`;return J;function G(z,F){return`Cannot access ${z} ${F} levels up, current level is ${Q}`}}B6.getData=BJ});var b9=O((T7)=>{Object.defineProperty(T7,"__esModule",{value:!0});class HJ extends Error{constructor(w){super("validation failed");this.errors=w,this.ajv=this.validation=!0}}T7.default=HJ});var S9=O((R7)=>{Object.defineProperty(R7,"__esModule",{value:!0});var P7=X5();class VJ extends Error{constructor(w,Q,W,Z){super(Z||`can't resolve reference ${W} from id ${Q}`);this.missingRef=(0,P7.resolveUrl)(w,Q,W),this.missingSchema=(0,P7.normalizeId)((0,P7.getFullPath)(w,this.missingRef))}}R7.default=VJ});var k9=O((G0)=>{Object.defineProperty(G0,"__esModule",{value:!0});G0.resolveSchema=G0.getCompilingSchema=G0.resolveRef=G0.compileSchema=G0.SchemaEnv=void 0;var A0=h(),UL=b9(),b6=r0(),$0=X5(),MJ=Qw(),jL=G5();class z5{constructor(w){var Q;this.refs={},this.dynamicAnchors={};let W;if(typeof w.schema=="object")W=w.schema;this.schema=w.schema,this.schemaId=w.schemaId,this.root=w.root||this,this.baseId=(Q=w.baseId)!==null&&Q!==void 0?Q:(0,$0.normalizeId)(W===null||W===void 0?void 0:W[w.schemaId||"$id"]),this.schemaPath=w.schemaPath,this.localRefs=w.localRefs,this.meta=w.meta,this.$async=W===null||W===void 0?void 0:W.$async,this.refs={}}}G0.SchemaEnv=z5;function S7(w){let Q=LJ.call(this,w);if(Q)return Q;let W=(0,$0.getFullPath)(this.opts.uriResolver,w.root.baseId),{es5:Z,lines:Y}=this.opts.code,{ownProperties:X}=this.opts,J=new A0.CodeGen(this.scope,{es5:Z,lines:Y,ownProperties:X}),q;if(w.$async)q=J.scopeValue("Error",{ref:UL.default,code:A0._`require("ajv/dist/runtime/validation_error").default`});let G=J.scopeName("validate");w.validateName=G;let z={gen:J,allErrors:this.opts.allErrors,data:b6.default.data,parentData:b6.default.parentData,parentDataProperty:b6.default.parentDataProperty,dataNames:[b6.default.data],dataPathArr:[A0.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:J.scopeValue("schema",this.opts.code.source===!0?{ref:w.schema,code:(0,A0.stringify)(w.schema)}:{ref:w.schema}),validateName:G,ValidationError:q,schema:w.schema,schemaEnv:w,rootId:W,baseId:w.baseId||W,schemaPath:A0.nil,errSchemaPath:w.schemaPath||(this.opts.jtd?"":"#"),errorPath:A0._`""`,opts:this.opts,self:this},F;try{this._compilations.add(w),(0,jL.validateFunctionCode)(z),J.optimize(this.opts.code.optimize);let K=J.toString();if(F=`${J.scopeRefs(b6.default.scope)}return ${K}`,this.opts.code.process)F=this.opts.code.process(F,w);let V=Function(`${b6.default.self}`,`${b6.default.scope}`,F)(this,this.scope.get());if(this.scope.value(G,{ref:V}),V.errors=null,V.schema=w.schema,V.schemaEnv=w,w.$async)V.$async=!0;if(this.opts.code.source===!0)V.source={validateName:G,validateCode:K,scopeValues:J._values};if(this.opts.unevaluated){let{props:M,items:H}=z;if(V.evaluated={props:M instanceof A0.Name?void 0:M,items:H instanceof A0.Name?void 0:H,dynamicProps:M instanceof A0.Name,dynamicItems:H instanceof A0.Name},V.source)V.source.evaluated=(0,A0.stringify)(V.evaluated)}return w.validate=V,w}catch(K){if(delete w.validate,delete w.validateName,F)this.logger.error("Error compiling schema, function code:",F);throw K}finally{this._compilations.delete(w)}}G0.compileSchema=S7;function AL(w,Q,W){var Z;W=(0,$0.resolveUrl)(this.opts.uriResolver,Q,W);let Y=w.refs[W];if(Y)return Y;let X=NL.call(this,w,W);if(X===void 0){let J=(Z=w.localRefs)===null||Z===void 0?void 0:Z[W],{schemaId:q}=this.opts;if(J)X=new z5({schema:J,schemaId:q,root:w,baseId:Q})}if(X===void 0)return;return w.refs[W]=$L.call(this,X)}G0.resolveRef=AL;function $L(w){if((0,$0.inlineRef)(w.schema,this.opts.inlineRefs))return w.schema;return w.validate?w:S7.call(this,w)}function LJ(w){for(let Q of this._compilations)if(OL(Q,w))return Q}G0.getCompilingSchema=LJ;function OL(w,Q){return w.schema===Q.schema&&w.root===Q.root&&w.baseId===Q.baseId}function NL(w,Q){let W;while(typeof(W=this.refs[Q])=="string")Q=W;return W||this.schemas[Q]||E9.call(this,w,Q)}function E9(w,Q){let W=this.opts.uriResolver.parse(Q),Z=(0,$0._getFullPath)(this.opts.uriResolver,W),Y=(0,$0.getFullPath)(this.opts.uriResolver,w.baseId,void 0);if(Object.keys(w.schema).length>0&&Z===Y)return b7.call(this,W,w);let X=(0,$0.normalizeId)(Z),J=this.refs[X]||this.schemas[X];if(typeof J=="string"){let q=E9.call(this,w,J);if(typeof(q===null||q===void 0?void 0:q.schema)!=="object")return;return b7.call(this,W,q)}if(typeof(J===null||J===void 0?void 0:J.schema)!=="object")return;if(!J.validate)S7.call(this,J);if(X===(0,$0.normalizeId)(Q)){let{schema:q}=J,{schemaId:G}=this.opts,z=q[G];if(z)Y=(0,$0.resolveUrl)(this.opts.uriResolver,Y,z);return new z5({schema:q,schemaId:G,root:w,baseId:Y})}return b7.call(this,W,J)}G0.resolveSchema=E9;var DL=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function b7(w,{baseId:Q,schema:W,root:Z}){var Y;if(((Y=w.fragment)===null||Y===void 0?void 0:Y[0])!=="/")return;for(let q of w.fragment.slice(1).split("/")){if(typeof W==="boolean")return;let G=W[(0,MJ.unescapeFragment)(q)];if(G===void 0)return;W=G;let z=typeof W==="object"&&W[this.opts.schemaId];if(!DL.has(q)&&z)Q=(0,$0.resolveUrl)(this.opts.uriResolver,Q,z)}let X;if(typeof W!="boolean"&&W.$ref&&!(0,MJ.schemaHasRulesButRef)(W,this.RULES)){let q=(0,$0.resolveUrl)(this.opts.uriResolver,Q,W.$ref);X=E9.call(this,Z,q)}let{schemaId:J}=this.opts;if(X=X||new z5({schema:W,schemaId:J,root:Z,baseId:Q}),X.schema!==X.root.schema)return X;return}});var UJ=O((aO,IL)=>{IL.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var f9=O((C9,jJ)=>{(function(w,Q){typeof C9==="object"&&typeof jJ<"u"?Q(C9):typeof define==="function"&&define.amd?define(["exports"],Q):Q(w.URI=w.URI||{})})(C9,function(w){function Q(){for(var L=arguments.length,B=Array(L),U=0;U<L;U++)B[U]=arguments[U];if(B.length>1){B[0]=B[0].slice(0,-1);var D=B.length-1;for(var I=1;I<D;++I)B[I]=B[I].slice(1,-1);return B[D]=B[D].slice(1),B.join("")}else return B[0]}function W(L){return"(?:"+L+")"}function Z(L){return L===void 0?"undefined":L===null?"null":Object.prototype.toString.call(L).split(" ").pop().split("]").shift().toLowerCase()}function Y(L){return L.toUpperCase()}function X(L){return L!==void 0&&L!==null?L instanceof Array?L:typeof L.length!=="number"||L.split||L.setInterval||L.call?[L]:Array.prototype.slice.call(L):[]}function J(L,B){var U=L;if(B)for(var D in B)U[D]=B[D];return U}function q(L){var B="[A-Za-z]",U="[\\x0D]",D="[0-9]",I="[\\x22]",R=Q(D,"[A-Fa-f]"),v="[\\x0A]",o="[\\x20]",Yw=W(W("%[EFef]"+R+"%"+R+R+"%"+R+R)+"|"+W("%[89A-Fa-f]"+R+"%"+R+R)+"|"+W("%"+R+R)),Nw="[\\:\\/\\?\\#\\[\\]\\@]",r="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",Lw=Q(Nw,r),Dw=L?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",Mw=L?"[\\uE000-\\uF8FF]":"[]",Ww=Q(B,D,"[\\-\\.\\_\\~]",Dw),Uw=W(B+Q(B,D,"[\\+\\-\\.]")+"*"),Xw=W(W(Yw+"|"+Q(Ww,r,"[\\:]"))+"*"),M6=W(W("25[0-5]")+"|"+W("2[0-4]"+D)+"|"+W("1"+D+D)+"|"+W("[1-9]"+D)+"|"+D),ew=W(W("25[0-5]")+"|"+W("2[0-4]"+D)+"|"+W("1"+D+D)+"|"+W("0?[1-9]"+D)+"|0?0?"+D),W0=W(ew+"\\."+ew+"\\."+ew+"\\."+ew),zw=W(R+"{1,4}"),w0=W(W(zw+"\\:"+zw)+"|"+W0),Z0=W(W(zw+"\\:")+"{6}"+w0),R0=W("\\:\\:"+W(zw+"\\:")+"{5}"+w0),L6=W(W(zw)+"?\\:\\:"+W(zw+"\\:")+"{4}"+w0),x0=W(W(W(zw+"\\:")+"{0,1}"+zw)+"?\\:\\:"+W(zw+"\\:")+"{3}"+w0),N1=W(W(W(zw+"\\:")+"{0,2}"+zw)+"?\\:\\:"+W(zw+"\\:")+"{2}"+w0),S5=W(W(W(zw+"\\:")+"{0,3}"+zw)+"?\\:\\:"+zw+"\\:"+w0),E5=W(W(W(zw+"\\:")+"{0,4}"+zw)+"?\\:\\:"+w0),u6=W(W(W(zw+"\\:")+"{0,5}"+zw)+"?\\:\\:"+zw),h6=W(W(W(zw+"\\:")+"{0,6}"+zw)+"?\\:\\:"),l0=W([Z0,R0,L6,x0,N1,S5,E5,u6,h6].join("|")),g6=W(W(Ww+"|"+Yw)+"+"),G8=W(l0+"\\%25"+g6),U6=W(l0+W("\\%25|\\%(?!"+R+"{2})")+g6),zz=W("[vV]"+R+"+\\."+Q(Ww,r,"[\\:]")+"+"),Fz=W("\\["+W(U6+"|"+l0+"|"+zz)+"\\]"),aQ=W(W(Yw+"|"+Q(Ww,r))+"*"),D1=W(Fz+"|"+W0+"(?!"+aQ+")|"+aQ),I1=W(D+"*"),tQ=W(W(Xw+"@")+"?"+D1+W("\\:"+I1)+"?"),T1=W(Yw+"|"+Q(Ww,r,"[\\:\\@]")),Kz=W(T1+"*"),oQ=W(T1+"+"),Bz=W(W(Yw+"|"+Q(Ww,r,"[\\@]"))+"+"),i0=W(W("\\/"+Kz)+"*"),_6=W("\\/"+W(oQ+i0)+"?"),z8=W(Bz+i0),k5=W(oQ+i0),x6="(?!"+T1+")",Q$=W(i0+"|"+_6+"|"+z8+"|"+k5+"|"+x6),l6=W(W(T1+"|"+Q("[\\/\\?]",Mw))+"*"),P1=W(W(T1+"|[\\/\\?]")+"*"),eQ=W(W("\\/\\/"+tQ+i0)+"|"+_6+"|"+k5+"|"+x6),Hz=W(Uw+"\\:"+eQ+W("\\?"+l6)+"?"+W("\\#"+P1)+"?"),Vz=W(W("\\/\\/"+tQ+i0)+"|"+_6+"|"+z8+"|"+x6),Mz=W(Vz+W("\\?"+l6)+"?"+W("\\#"+P1)+"?"),W$=W(Hz+"|"+Mz),Z$=W(Uw+"\\:"+eQ+W("\\?"+l6)+"?"),Y$="^("+Uw+")\\:"+W(W("\\/\\/("+W("("+Xw+")@")+"?("+D1+")"+W("\\:("+I1+")")+"?)")+"?("+i0+"|"+_6+"|"+k5+"|"+x6+")")+W("\\?("+l6+")")+"?"+W("\\#("+P1+")")+"?$",X$="^(){0}"+W(W("\\/\\/("+W("("+Xw+")@")+"?("+D1+")"+W("\\:("+I1+")")+"?)")+"?("+i0+"|"+_6+"|"+z8+"|"+x6+")")+W("\\?("+l6+")")+"?"+W("\\#("+P1+")")+"?$",J$="^("+Uw+")\\:"+W(W("\\/\\/("+W("("+Xw+")@")+"?("+D1+")"+W("\\:("+I1+")")+"?)")+"?("+i0+"|"+_6+"|"+k5+"|"+x6+")")+W("\\?("+l6+")")+"?$",q$="^"+W("\\#("+P1+")")+"?$",G$="^"+W("("+Xw+")@")+"?("+D1+")"+W("\\:("+I1+")")+"?$";return{NOT_SCHEME:new RegExp(Q("[^]",B,D,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(Q("[^\\%\\:]",Ww,r),"g"),NOT_HOST:new RegExp(Q("[^\\%\\[\\]\\:]",Ww,r),"g"),NOT_PATH:new RegExp(Q("[^\\%\\/\\:\\@]",Ww,r),"g"),NOT_PATH_NOSCHEME:new RegExp(Q("[^\\%\\/\\@]",Ww,r),"g"),NOT_QUERY:new RegExp(Q("[^\\%]",Ww,r,"[\\:\\@\\/\\?]",Mw),"g"),NOT_FRAGMENT:new RegExp(Q("[^\\%]",Ww,r,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(Q("[^]",Ww,r),"g"),UNRESERVED:new RegExp(Ww,"g"),OTHER_CHARS:new RegExp(Q("[^\\%]",Ww,Lw),"g"),PCT_ENCODED:new RegExp(Yw,"g"),IPV4ADDRESS:new RegExp("^("+W0+")$"),IPV6ADDRESS:new RegExp("^\\[?("+l0+")"+W(W("\\%25|\\%(?!"+R+"{2})")+"("+g6+")")+"?\\]?$")}}var G=q(!1),z=q(!0),F=function(){function L(B,U){var D=[],I=!0,R=!1,v=void 0;try{for(var o=B[Symbol.iterator](),Yw;!(I=(Yw=o.next()).done);I=!0)if(D.push(Yw.value),U&&D.length===U)break}catch(Nw){R=!0,v=Nw}finally{try{if(!I&&o.return)o.return()}finally{if(R)throw v}}return D}return function(B,U){if(Array.isArray(B))return B;else if(Symbol.iterator in Object(B))return L(B,U);else throw TypeError("Invalid attempt to destructure non-iterable instance")}}(),K=function(L){if(Array.isArray(L)){for(var B=0,U=Array(L.length);B<L.length;B++)U[B]=L[B];return U}else return Array.from(L)},j=2147483647,V=36,M=1,H=26,A=38,$=700,T=72,P=128,b="-",N=/^xn--/,S=/[^\0-\x7E]/,i=/[\x2E\u3002\uFF0E\uFF61]/g,g={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Zw=V-M,c=Math.floor,Aw=String.fromCharCode;function Gw(L){throw RangeError(g[L])}function Iw(L,B){var U=[],D=L.length;while(D--)U[D]=B(L[D]);return U}function hw(L,B){var U=L.split("@"),D="";if(U.length>1)D=U[0]+"@",L=U[1];L=L.replace(i,".");var I=L.split("."),R=Iw(I,B).join(".");return D+R}function pw(L){var B=[],U=0,D=L.length;while(U<D){var I=L.charCodeAt(U++);if(I>=55296&&I<=56319&&U<D){var R=L.charCodeAt(U++);if((R&64512)==56320)B.push(((I&1023)<<10)+(R&1023)+65536);else B.push(I),U--}else B.push(I)}return B}var F0=function(B){return String.fromCodePoint.apply(String,K(B))},K0=function(B){if(B-48<10)return B-22;if(B-65<26)return B-65;if(B-97<26)return B-97;return V},D0=function(B,U){return B+22+75*(B<26)-((U!=0)<<5)},a0=function(B,U,D){var I=0;B=D?c(B/$):B>>1,B+=c(B/U);for(;B>Zw*H>>1;I+=V)B=c(B/Zw);return c(I+(Zw+1)*B/(B+A))},A1=function(B){var U=[],D=B.length,I=0,R=P,v=T,o=B.lastIndexOf(b);if(o<0)o=0;for(var Yw=0;Yw<o;++Yw){if(B.charCodeAt(Yw)>=128)Gw("not-basic");U.push(B.charCodeAt(Yw))}for(var Nw=o>0?o+1:0;Nw<D;){var r=I;for(var Lw=1,Dw=V;;Dw+=V){if(Nw>=D)Gw("invalid-input");var Mw=K0(B.charCodeAt(Nw++));if(Mw>=V||Mw>c((j-I)/Lw))Gw("overflow");I+=Mw*Lw;var Ww=Dw<=v?M:Dw>=v+H?H:Dw-v;if(Mw<Ww)break;var Uw=V-Ww;if(Lw>c(j/Uw))Gw("overflow");Lw*=Uw}var Xw=U.length+1;if(v=a0(I-r,Xw,r==0),c(I/Xw)>j-R)Gw("overflow");R+=c(I/Xw),I%=Xw,U.splice(I++,0,R)}return String.fromCodePoint.apply(String,U)},uQ=function(B){var U=[];B=pw(B);var D=B.length,I=P,R=0,v=T,o=!0,Yw=!1,Nw=void 0;try{for(var r=B[Symbol.iterator](),Lw;!(o=(Lw=r.next()).done);o=!0){var Dw=Lw.value;if(Dw<128)U.push(Aw(Dw))}}catch(U6){Yw=!0,Nw=U6}finally{try{if(!o&&r.return)r.return()}finally{if(Yw)throw Nw}}var Mw=U.length,Ww=Mw;if(Mw)U.push(b);while(Ww<D){var Uw=j,Xw=!0,M6=!1,ew=void 0;try{for(var W0=B[Symbol.iterator](),zw;!(Xw=(zw=W0.next()).done);Xw=!0){var w0=zw.value;if(w0>=I&&w0<Uw)Uw=w0}}catch(U6){M6=!0,ew=U6}finally{try{if(!Xw&&W0.return)W0.return()}finally{if(M6)throw ew}}var Z0=Ww+1;if(Uw-I>c((j-R)/Z0))Gw("overflow");R+=(Uw-I)*Z0,I=Uw;var R0=!0,L6=!1,x0=void 0;try{for(var N1=B[Symbol.iterator](),S5;!(R0=(S5=N1.next()).done);R0=!0){var E5=S5.value;if(E5<I&&++R>j)Gw("overflow");if(E5==I){var u6=R;for(var h6=V;;h6+=V){var l0=h6<=v?M:h6>=v+H?H:h6-v;if(u6<l0)break;var g6=u6-l0,G8=V-l0;U.push(Aw(D0(l0+g6%G8,0))),u6=c(g6/G8)}U.push(Aw(D0(u6,0))),v=a0(R,Z0,Ww==Mw),R=0,++Ww}}}catch(U6){L6=!0,x0=U6}finally{try{if(!R0&&N1.return)N1.return()}finally{if(L6)throw x0}}++R,++I}return U.join("")},lG=function(B){return hw(B,function(U){return N.test(U)?A1(U.slice(4).toLowerCase()):U})},iG=function(B){return hw(B,function(U){return S.test(U)?"xn--"+uQ(U):U})},C6={version:"2.1.0",ucs2:{decode:pw,encode:F0},decode:A1,encode:uQ,toASCII:iG,toUnicode:lG},Q0={};function I0(L){var B=L.charCodeAt(0),U=void 0;if(B<16)U="%0"+B.toString(16).toUpperCase();else if(B<128)U="%"+B.toString(16).toUpperCase();else if(B<2048)U="%"+(B>>6|192).toString(16).toUpperCase()+"%"+(B&63|128).toString(16).toUpperCase();else U="%"+(B>>12|224).toString(16).toUpperCase()+"%"+(B>>6&63|128).toString(16).toUpperCase()+"%"+(B&63|128).toString(16).toUpperCase();return U}function f6(L){var B="",U=0,D=L.length;while(U<D){var I=parseInt(L.substr(U+1,2),16);if(I<128)B+=String.fromCharCode(I),U+=3;else if(I>=194&&I<224){if(D-U>=6){var R=parseInt(L.substr(U+4,2),16);B+=String.fromCharCode((I&31)<<6|R&63)}else B+=L.substr(U,6);U+=6}else if(I>=224){if(D-U>=9){var v=parseInt(L.substr(U+4,2),16),o=parseInt(L.substr(U+7,2),16);B+=String.fromCharCode((I&15)<<12|(v&63)<<6|o&63)}else B+=L.substr(U,9);U+=9}else B+=L.substr(U,3),U+=3}return B}function Y8(L,B){function U(D){var I=f6(D);return!I.match(B.UNRESERVED)?D:I}if(L.scheme)L.scheme=String(L.scheme).replace(B.PCT_ENCODED,U).toLowerCase().replace(B.NOT_SCHEME,"");if(L.userinfo!==void 0)L.userinfo=String(L.userinfo).replace(B.PCT_ENCODED,U).replace(B.NOT_USERINFO,I0).replace(B.PCT_ENCODED,Y);if(L.host!==void 0)L.host=String(L.host).replace(B.PCT_ENCODED,U).toLowerCase().replace(B.NOT_HOST,I0).replace(B.PCT_ENCODED,Y);if(L.path!==void 0)L.path=String(L.path).replace(B.PCT_ENCODED,U).replace(L.scheme?B.NOT_PATH:B.NOT_PATH_NOSCHEME,I0).replace(B.PCT_ENCODED,Y);if(L.query!==void 0)L.query=String(L.query).replace(B.PCT_ENCODED,U).replace(B.NOT_QUERY,I0).replace(B.PCT_ENCODED,Y);if(L.fragment!==void 0)L.fragment=String(L.fragment).replace(B.PCT_ENCODED,U).replace(B.NOT_FRAGMENT,I0).replace(B.PCT_ENCODED,Y);return L}function X8(L){return L.replace(/^0*(.*)/,"$1")||"0"}function J8(L,B){var U=L.match(B.IPV4ADDRESS)||[],D=F(U,2),I=D[1];if(I)return I.split(".").map(X8).join(".");else return L}function hQ(L,B){var U=L.match(B.IPV6ADDRESS)||[],D=F(U,3),I=D[1],R=D[2];if(I){var v=I.toLowerCase().split("::").reverse(),o=F(v,2),Yw=o[0],Nw=o[1],r=Nw?Nw.split(":").map(X8):[],Lw=Yw.split(":").map(X8),Dw=B.IPV4ADDRESS.test(Lw[Lw.length-1]),Mw=Dw?7:8,Ww=Lw.length-Mw,Uw=Array(Mw);for(var Xw=0;Xw<Mw;++Xw)Uw[Xw]=r[Xw]||Lw[Ww+Xw]||"";if(Dw)Uw[Mw-1]=J8(Uw[Mw-1],B);var M6=Uw.reduce(function(Z0,R0,L6){if(!R0||R0==="0"){var x0=Z0[Z0.length-1];if(x0&&x0.index+x0.length===L6)x0.length++;else Z0.push({index:L6,length:1})}return Z0},[]),ew=M6.sort(function(Z0,R0){return R0.length-Z0.length})[0],W0=void 0;if(ew&&ew.length>1){var zw=Uw.slice(0,ew.index),w0=Uw.slice(ew.index+ew.length);W0=zw.join(":")+"::"+w0.join(":")}else W0=Uw.join(":");if(R)W0+="%"+R;return W0}else return L}var mG=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,pG="".match(/(){0}/)[1]===void 0;function g0(L){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},U={},D=B.iri!==!1?z:G;if(B.reference==="suffix")L=(B.scheme?B.scheme+":":"")+"//"+L;var I=L.match(mG);if(I){if(pG){if(U.scheme=I[1],U.userinfo=I[3],U.host=I[4],U.port=parseInt(I[5],10),U.path=I[6]||"",U.query=I[7],U.fragment=I[8],isNaN(U.port))U.port=I[5]}else if(U.scheme=I[1]||void 0,U.userinfo=L.indexOf("@")!==-1?I[3]:void 0,U.host=L.indexOf("//")!==-1?I[4]:void 0,U.port=parseInt(I[5],10),U.path=I[6]||"",U.query=L.indexOf("?")!==-1?I[7]:void 0,U.fragment=L.indexOf("#")!==-1?I[8]:void 0,isNaN(U.port))U.port=L.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?I[4]:void 0;if(U.host)U.host=hQ(J8(U.host,D),D);if(U.scheme===void 0&&U.userinfo===void 0&&U.host===void 0&&U.port===void 0&&!U.path&&U.query===void 0)U.reference="same-document";else if(U.scheme===void 0)U.reference="relative";else if(U.fragment===void 0)U.reference="absolute";else U.reference="uri";if(B.reference&&B.reference!=="suffix"&&B.reference!==U.reference)U.error=U.error||"URI is not a "+B.reference+" reference.";var R=Q0[(B.scheme||U.scheme||"").toLowerCase()];if(!B.unicodeSupport&&(!R||!R.unicodeSupport)){if(U.host&&(B.domainHost||R&&R.domainHost))try{U.host=C6.toASCII(U.host.replace(D.PCT_ENCODED,f6).toLowerCase())}catch(v){U.error=U.error||"Host's domain name can not be converted to ASCII via punycode: "+v}Y8(U,G)}else Y8(U,D);if(R&&R.parse)R.parse(U,B)}else U.error=U.error||"URI can not be parsed.";return U}function cG(L,B){var U=B.iri!==!1?z:G,D=[];if(L.userinfo!==void 0)D.push(L.userinfo),D.push("@");if(L.host!==void 0)D.push(hQ(J8(String(L.host),U),U).replace(U.IPV6ADDRESS,function(I,R,v){return"["+R+(v?"%25"+v:"")+"]"}));if(typeof L.port==="number"||typeof L.port==="string")D.push(":"),D.push(String(L.port));return D.length?D.join(""):void 0}var gQ=/^\.\.?\//,_Q=/^\/\.(\/|$)/,xQ=/^\/\.\.(\/|$)/,dG=/^\/?(?:.|\n)*?(?=\/|$)/;function v6(L){var B=[];while(L.length)if(L.match(gQ))L=L.replace(gQ,"");else if(L.match(_Q))L=L.replace(_Q,"/");else if(L.match(xQ))L=L.replace(xQ,"/"),B.pop();else if(L==="."||L==="..")L="";else{var U=L.match(dG);if(U){var D=U[0];L=L.slice(D.length),B.push(D)}else throw Error("Unexpected dot segment condition")}return B.join("")}function T0(L){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},U=B.iri?z:G,D=[],I=Q0[(B.scheme||L.scheme||"").toLowerCase()];if(I&&I.serialize)I.serialize(L,B);if(L.host){if(U.IPV6ADDRESS.test(L.host));else if(B.domainHost||I&&I.domainHost)try{L.host=!B.iri?C6.toASCII(L.host.replace(U.PCT_ENCODED,f6).toLowerCase()):C6.toUnicode(L.host)}catch(o){L.error=L.error||"Host's domain name can not be converted to "+(!B.iri?"ASCII":"Unicode")+" via punycode: "+o}}if(Y8(L,U),B.reference!=="suffix"&&L.scheme)D.push(L.scheme),D.push(":");var R=cG(L,B);if(R!==void 0){if(B.reference!=="suffix")D.push("//");if(D.push(R),L.path&&L.path.charAt(0)!=="/")D.push("/")}if(L.path!==void 0){var v=L.path;if(!B.absolutePath&&(!I||!I.absolutePath))v=v6(v);if(R===void 0)v=v.replace(/^\/\//,"/%2F");D.push(v)}if(L.query!==void 0)D.push("?"),D.push(L.query);if(L.fragment!==void 0)D.push("#"),D.push(L.fragment);return D.join("")}function lQ(L,B){var U=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},D=arguments[3],I={};if(!D)L=g0(T0(L,U),U),B=g0(T0(B,U),U);if(U=U||{},!U.tolerant&&B.scheme)I.scheme=B.scheme,I.userinfo=B.userinfo,I.host=B.host,I.port=B.port,I.path=v6(B.path||""),I.query=B.query;else{if(B.userinfo!==void 0||B.host!==void 0||B.port!==void 0)I.userinfo=B.userinfo,I.host=B.host,I.port=B.port,I.path=v6(B.path||""),I.query=B.query;else{if(!B.path)if(I.path=L.path,B.query!==void 0)I.query=B.query;else I.query=L.query;else{if(B.path.charAt(0)==="/")I.path=v6(B.path);else{if((L.userinfo!==void 0||L.host!==void 0||L.port!==void 0)&&!L.path)I.path="/"+B.path;else if(!L.path)I.path=B.path;else I.path=L.path.slice(0,L.path.lastIndexOf("/")+1)+B.path;I.path=v6(I.path)}I.query=B.query}I.userinfo=L.userinfo,I.host=L.host,I.port=L.port}I.scheme=L.scheme}return I.fragment=B.fragment,I}function nG(L,B,U){var D=J({scheme:"null"},U);return T0(lQ(g0(L,D),g0(B,D),D,!0),D)}function rG(L,B){if(typeof L==="string")L=T0(g0(L,B),B);else if(Z(L)==="object")L=g0(T0(L,B),B);return L}function sG(L,B,U){if(typeof L==="string")L=T0(g0(L,U),U);else if(Z(L)==="object")L=T0(L,U);if(typeof B==="string")B=T0(g0(B,U),U);else if(Z(B)==="object")B=T0(B,U);return L===B}function aG(L,B){return L&&L.toString().replace(!B||!B.iri?G.ESCAPE:z.ESCAPE,I0)}function _0(L,B){return L&&L.toString().replace(!B||!B.iri?G.PCT_ENCODED:z.PCT_ENCODED,f6)}var $1={scheme:"http",domainHost:!0,parse:function(B,U){if(!B.host)B.error=B.error||"HTTP URIs must have a host.";return B},serialize:function(B,U){var D=String(B.scheme).toLowerCase()==="https";if(B.port===(D?443:80)||B.port==="")B.port=void 0;if(!B.path)B.path="/";return B}},iQ={scheme:"https",domainHost:$1.domainHost,parse:$1.parse,serialize:$1.serialize};function mQ(L){return typeof L.secure==="boolean"?L.secure:String(L.scheme).toLowerCase()==="wss"}var O1={scheme:"ws",domainHost:!0,parse:function(B,U){var D=B;return D.secure=mQ(D),D.resourceName=(D.path||"/")+(D.query?"?"+D.query:""),D.path=void 0,D.query=void 0,D},serialize:function(B,U){if(B.port===(mQ(B)?443:80)||B.port==="")B.port=void 0;if(typeof B.secure==="boolean")B.scheme=B.secure?"wss":"ws",B.secure=void 0;if(B.resourceName){var D=B.resourceName.split("?"),I=F(D,2),R=I[0],v=I[1];B.path=R&&R!=="/"?R:void 0,B.query=v,B.resourceName=void 0}return B.fragment=void 0,B}},pQ={scheme:"wss",domainHost:O1.domainHost,parse:O1.parse,serialize:O1.serialize},tG={},oG=!0,cQ="[A-Za-z0-9\\-\\.\\_\\~"+(oG?"\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF":"")+"]",P0="[0-9A-Fa-f]",eG=W(W("%[EFef]"+P0+"%"+P0+P0+"%"+P0+P0)+"|"+W("%[89A-Fa-f]"+P0+"%"+P0+P0)+"|"+W("%"+P0+P0)),wz="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",Qz="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",Wz=Q(Qz,"[\\\"\\\\]"),Zz="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",Yz=new RegExp(cQ,"g"),y6=new RegExp(eG,"g"),Xz=new RegExp(Q("[^]",wz,"[\\.]","[\\\"]",Wz),"g"),dQ=new RegExp(Q("[^]",cQ,Zz),"g"),Jz=dQ;function q8(L){var B=f6(L);return!B.match(Yz)?L:B}var nQ={scheme:"mailto",parse:function(B,U){var D=B,I=D.to=D.path?D.path.split(","):[];if(D.path=void 0,D.query){var R=!1,v={},o=D.query.split("&");for(var Yw=0,Nw=o.length;Yw<Nw;++Yw){var r=o[Yw].split("=");switch(r[0]){case"to":var Lw=r[1].split(",");for(var Dw=0,Mw=Lw.length;Dw<Mw;++Dw)I.push(Lw[Dw]);break;case"subject":D.subject=_0(r[1],U);break;case"body":D.body=_0(r[1],U);break;default:R=!0,v[_0(r[0],U)]=_0(r[1],U);break}}if(R)D.headers=v}D.query=void 0;for(var Ww=0,Uw=I.length;Ww<Uw;++Ww){var Xw=I[Ww].split("@");if(Xw[0]=_0(Xw[0]),!U.unicodeSupport)try{Xw[1]=C6.toASCII(_0(Xw[1],U).toLowerCase())}catch(M6){D.error=D.error||"Email address's domain name can not be converted to ASCII via punycode: "+M6}else Xw[1]=_0(Xw[1],U).toLowerCase();I[Ww]=Xw.join("@")}return D},serialize:function(B,U){var D=B,I=X(B.to);if(I){for(var R=0,v=I.length;R<v;++R){var o=String(I[R]),Yw=o.lastIndexOf("@"),Nw=o.slice(0,Yw).replace(y6,q8).replace(y6,Y).replace(Xz,I0),r=o.slice(Yw+1);try{r=!U.iri?C6.toASCII(_0(r,U).toLowerCase()):C6.toUnicode(r)}catch(Ww){D.error=D.error||"Email address's domain name can not be converted to "+(!U.iri?"ASCII":"Unicode")+" via punycode: "+Ww}I[R]=Nw+"@"+r}D.path=I.join(",")}var Lw=B.headers=B.headers||{};if(B.subject)Lw.subject=B.subject;if(B.body)Lw.body=B.body;var Dw=[];for(var Mw in Lw)if(Lw[Mw]!==tG[Mw])Dw.push(Mw.replace(y6,q8).replace(y6,Y).replace(dQ,I0)+"="+Lw[Mw].replace(y6,q8).replace(y6,Y).replace(Jz,I0));if(Dw.length)D.query=Dw.join("&");return D}},qz=/^([^\:]+)\:(.*)/,rQ={scheme:"urn",parse:function(B,U){var D=B.path&&B.path.match(qz),I=B;if(D){var R=U.scheme||I.scheme||"urn",v=D[1].toLowerCase(),o=D[2],Yw=R+":"+(U.nid||v),Nw=Q0[Yw];if(I.nid=v,I.nss=o,I.path=void 0,Nw)I=Nw.parse(I,U)}else I.error=I.error||"URN can not be parsed.";return I},serialize:function(B,U){var D=U.scheme||B.scheme||"urn",I=B.nid,R=D+":"+(U.nid||I),v=Q0[R];if(v)B=v.serialize(B,U);var o=B,Yw=B.nss;return o.path=(I||U.nid)+":"+Yw,o}},Gz=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,sQ={scheme:"urn:uuid",parse:function(B,U){var D=B;if(D.uuid=D.nss,D.nss=void 0,!U.tolerant&&(!D.uuid||!D.uuid.match(Gz)))D.error=D.error||"UUID is not valid.";return D},serialize:function(B,U){var D=B;return D.nss=(B.uuid||"").toLowerCase(),D}};Q0[$1.scheme]=$1,Q0[iQ.scheme]=iQ,Q0[O1.scheme]=O1,Q0[pQ.scheme]=pQ,Q0[nQ.scheme]=nQ,Q0[rQ.scheme]=rQ,Q0[sQ.scheme]=sQ,w.SCHEMES=Q0,w.pctEncChar=I0,w.pctDecChars=f6,w.parse=g0,w.removeDotSegments=v6,w.serialize=T0,w.resolveComponents=lQ,w.resolve=nG,w.normalize=rG,w.equal=sG,w.escapeComponent=aG,w.unescapeComponent=_0,Object.defineProperty(w,"__esModule",{value:!0})})});var $J=O((E7)=>{Object.defineProperty(E7,"__esModule",{value:!0});var AJ=f9();AJ.code='require("ajv/dist/runtime/uri").default';E7.default=AJ});var bJ=O((bw)=>{Object.defineProperty(bw,"__esModule",{value:!0});bw.CodeGen=bw.Name=bw.nil=bw.stringify=bw.str=bw._=bw.KeywordCxt=void 0;var TL=G5();Object.defineProperty(bw,"KeywordCxt",{enumerable:!0,get:function(){return TL.KeywordCxt}});var F1=h();Object.defineProperty(bw,"_",{enumerable:!0,get:function(){return F1._}});Object.defineProperty(bw,"str",{enumerable:!0,get:function(){return F1.str}});Object.defineProperty(bw,"stringify",{enumerable:!0,get:function(){return F1.stringify}});Object.defineProperty(bw,"nil",{enumerable:!0,get:function(){return F1.nil}});Object.defineProperty(bw,"Name",{enumerable:!0,get:function(){return F1.Name}});Object.defineProperty(bw,"CodeGen",{enumerable:!0,get:function(){return F1.CodeGen}});var PL=b9(),TJ=S9(),RL=B7(),F5=k9(),bL=h(),K5=X5(),v9=Y5(),C7=Qw(),OJ=UJ(),SL=$J(),PJ=(w,Q)=>new RegExp(w,Q);PJ.code="new RegExp";var EL=["removeAdditional","useDefaults","coerceTypes"],kL=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),CL={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},fL={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},NJ=200;function vL(w){var Q,W,Z,Y,X,J,q,G,z,F,K,j,V,M,H,A,$,T,P,b,N,S,i,g,Zw;let c=w.strict,Aw=(Q=w.code)===null||Q===void 0?void 0:Q.optimize,Gw=Aw===!0||Aw===void 0?1:Aw||0,Iw=(Z=(W=w.code)===null||W===void 0?void 0:W.regExp)!==null&&Z!==void 0?Z:PJ,hw=(Y=w.uriResolver)!==null&&Y!==void 0?Y:SL.default;return{strictSchema:(J=(X=w.strictSchema)!==null&&X!==void 0?X:c)!==null&&J!==void 0?J:!0,strictNumbers:(G=(q=w.strictNumbers)!==null&&q!==void 0?q:c)!==null&&G!==void 0?G:!0,strictTypes:(F=(z=w.strictTypes)!==null&&z!==void 0?z:c)!==null&&F!==void 0?F:"log",strictTuples:(j=(K=w.strictTuples)!==null&&K!==void 0?K:c)!==null&&j!==void 0?j:"log",strictRequired:(M=(V=w.strictRequired)!==null&&V!==void 0?V:c)!==null&&M!==void 0?M:!1,code:w.code?{...w.code,optimize:Gw,regExp:Iw}:{optimize:Gw,regExp:Iw},loopRequired:(H=w.loopRequired)!==null&&H!==void 0?H:NJ,loopEnum:(A=w.loopEnum)!==null&&A!==void 0?A:NJ,meta:($=w.meta)!==null&&$!==void 0?$:!0,messages:(T=w.messages)!==null&&T!==void 0?T:!0,inlineRefs:(P=w.inlineRefs)!==null&&P!==void 0?P:!0,schemaId:(b=w.schemaId)!==null&&b!==void 0?b:"$id",addUsedSchema:(N=w.addUsedSchema)!==null&&N!==void 0?N:!0,validateSchema:(S=w.validateSchema)!==null&&S!==void 0?S:!0,validateFormats:(i=w.validateFormats)!==null&&i!==void 0?i:!0,unicodeRegExp:(g=w.unicodeRegExp)!==null&&g!==void 0?g:!0,int32range:(Zw=w.int32range)!==null&&Zw!==void 0?Zw:!0,uriResolver:hw}}class y9{constructor(w={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,w=this.opts={...w,...vL(w)};let{es5:Q,lines:W}=this.opts.code;this.scope=new bL.ValueScope({scope:{},prefixes:kL,es5:Q,lines:W}),this.logger=xL(w.logger);let Z=w.validateFormats;if(w.validateFormats=!1,this.RULES=(0,RL.getRules)(),DJ.call(this,CL,w,"NOT SUPPORTED"),DJ.call(this,fL,w,"DEPRECATED","warn"),this._metaOpts=gL.call(this),w.formats)uL.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),w.keywords)hL.call(this,w.keywords);if(typeof w.meta=="object")this.addMetaSchema(w.meta);yL.call(this),w.validateFormats=Z}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:w,meta:Q,schemaId:W}=this.opts,Z=OJ;if(W==="id")Z={...OJ},Z.id=Z.$id,delete Z.$id;if(Q&&w)this.addMetaSchema(Z,Z[W],!1)}defaultMeta(){let{meta:w,schemaId:Q}=this.opts;return this.opts.defaultMeta=typeof w=="object"?w[Q]||w:void 0}validate(w,Q){let W;if(typeof w=="string"){if(W=this.getSchema(w),!W)throw Error(`no schema with key or ref "${w}"`)}else W=this.compile(w);let Z=W(Q);if(!("$async"in W))this.errors=W.errors;return Z}compile(w,Q){let W=this._addSchema(w,Q);return W.validate||this._compileSchemaEnv(W)}compileAsync(w,Q){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:W}=this.opts;return Z.call(this,w,Q);async function Z(z,F){await Y.call(this,z.$schema);let K=this._addSchema(z,F);return K.validate||X.call(this,K)}async function Y(z){if(z&&!this.getSchema(z))await Z.call(this,{$ref:z},!0)}async function X(z){try{return this._compileSchemaEnv(z)}catch(F){if(!(F instanceof TJ.default))throw F;return J.call(this,F),await q.call(this,F.missingSchema),X.call(this,z)}}function J({missingSchema:z,missingRef:F}){if(this.refs[z])throw Error(`AnySchema ${z} is loaded but ${F} cannot be resolved`)}async function q(z){let F=await G.call(this,z);if(!this.refs[z])await Y.call(this,F.$schema);if(!this.refs[z])this.addSchema(F,z,Q)}async function G(z){let F=this._loading[z];if(F)return F;try{return await(this._loading[z]=W(z))}finally{delete this._loading[z]}}}addSchema(w,Q,W,Z=this.opts.validateSchema){if(Array.isArray(w)){for(let X of w)this.addSchema(X,void 0,W,Z);return this}let Y;if(typeof w==="object"){let{schemaId:X}=this.opts;if(Y=w[X],Y!==void 0&&typeof Y!="string")throw Error(`schema ${X} must be string`)}return Q=(0,K5.normalizeId)(Q||Y),this._checkUnique(Q),this.schemas[Q]=this._addSchema(w,W,Q,Z,!0),this}addMetaSchema(w,Q,W=this.opts.validateSchema){return this.addSchema(w,Q,!0,W),this}validateSchema(w,Q){if(typeof w=="boolean")return!0;let W;if(W=w.$schema,W!==void 0&&typeof W!="string")throw Error("$schema must be a string");if(W=W||this.opts.defaultMeta||this.defaultMeta(),!W)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let Z=this.validate(W,w);if(!Z&&Q){let Y="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(Y);else throw Error(Y)}return Z}getSchema(w){let Q;while(typeof(Q=IJ.call(this,w))=="string")w=Q;if(Q===void 0){let{schemaId:W}=this.opts,Z=new F5.SchemaEnv({schema:{},schemaId:W});if(Q=F5.resolveSchema.call(this,Z,w),!Q)return;this.refs[w]=Q}return Q.validate||this._compileSchemaEnv(Q)}removeSchema(w){if(w instanceof RegExp)return this._removeAllSchemas(this.schemas,w),this._removeAllSchemas(this.refs,w),this;switch(typeof w){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let Q=IJ.call(this,w);if(typeof Q=="object")this._cache.delete(Q.schema);return delete this.schemas[w],delete this.refs[w],this}case"object":{let Q=w;this._cache.delete(Q);let W=w[this.opts.schemaId];if(W)W=(0,K5.normalizeId)(W),delete this.schemas[W],delete this.refs[W];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(w){for(let Q of w)this.addKeyword(Q);return this}addKeyword(w,Q){let W;if(typeof w=="string"){if(W=w,typeof Q=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),Q.keyword=W}else if(typeof w=="object"&&Q===void 0){if(Q=w,W=Q.keyword,Array.isArray(W)&&!W.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(iL.call(this,W,Q),!Q)return(0,C7.eachItem)(W,(Y)=>k7.call(this,Y)),this;pL.call(this,Q);let Z={...Q,type:(0,v9.getJSONTypes)(Q.type),schemaType:(0,v9.getJSONTypes)(Q.schemaType)};return(0,C7.eachItem)(W,Z.type.length===0?(Y)=>k7.call(this,Y,Z):(Y)=>Z.type.forEach((X)=>k7.call(this,Y,Z,X))),this}getKeyword(w){let Q=this.RULES.all[w];return typeof Q=="object"?Q.definition:!!Q}removeKeyword(w){let{RULES:Q}=this;delete Q.keywords[w],delete Q.all[w];for(let W of Q.rules){let Z=W.rules.findIndex((Y)=>Y.keyword===w);if(Z>=0)W.rules.splice(Z,1)}return this}addFormat(w,Q){if(typeof Q=="string")Q=new RegExp(Q);return this.formats[w]=Q,this}errorsText(w=this.errors,{separator:Q=", ",dataVar:W="data"}={}){if(!w||w.length===0)return"No errors";return w.map((Z)=>`${W}${Z.instancePath} ${Z.message}`).reduce((Z,Y)=>Z+Q+Y)}$dataMetaSchema(w,Q){let W=this.RULES.all;w=JSON.parse(JSON.stringify(w));for(let Z of Q){let Y=Z.split("/").slice(1),X=w;for(let J of Y)X=X[J];for(let J in W){let q=W[J];if(typeof q!="object")continue;let{$data:G}=q.definition,z=X[J];if(G&&z)X[J]=RJ(z)}}return w}_removeAllSchemas(w,Q){for(let W in w){let Z=w[W];if(!Q||Q.test(W)){if(typeof Z=="string")delete w[W];else if(Z&&!Z.meta)this._cache.delete(Z.schema),delete w[W]}}}_addSchema(w,Q,W,Z=this.opts.validateSchema,Y=this.opts.addUsedSchema){let X,{schemaId:J}=this.opts;if(typeof w=="object")X=w[J];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof w!="boolean")throw Error("schema must be object or boolean");let q=this._cache.get(w);if(q!==void 0)return q;W=(0,K5.normalizeId)(X||W);let G=K5.getSchemaRefs.call(this,w,W);if(q=new F5.SchemaEnv({schema:w,schemaId:J,meta:Q,baseId:W,localRefs:G}),this._cache.set(q.schema,q),Y&&!W.startsWith("#")){if(W)this._checkUnique(W);this.refs[W]=q}if(Z)this.validateSchema(w,!0);return q}_checkUnique(w){if(this.schemas[w]||this.refs[w])throw Error(`schema with key or id "${w}" already exists`)}_compileSchemaEnv(w){if(w.meta)this._compileMetaSchema(w);else F5.compileSchema.call(this,w);if(!w.validate)throw Error("ajv implementation error");return w.validate}_compileMetaSchema(w){let Q=this.opts;this.opts=this._metaOpts;try{F5.compileSchema.call(this,w)}finally{this.opts=Q}}}bw.default=y9;y9.ValidationError=PL.default;y9.MissingRefError=TJ.default;function DJ(w,Q,W,Z="error"){for(let Y in w){let X=Y;if(X in Q)this.logger[Z](`${W}: option ${Y}. ${w[X]}`)}}function IJ(w){return w=(0,K5.normalizeId)(w),this.schemas[w]||this.refs[w]}function yL(){let w=this.opts.schemas;if(!w)return;if(Array.isArray(w))this.addSchema(w);else for(let Q in w)this.addSchema(w[Q],Q)}function uL(){for(let w in this.opts.formats){let Q=this.opts.formats[w];if(Q)this.addFormat(w,Q)}}function hL(w){if(Array.isArray(w)){this.addVocabulary(w);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let Q in w){let W=w[Q];if(!W.keyword)W.keyword=Q;this.addKeyword(W)}}function gL(){let w={...this.opts};for(let Q of EL)delete w[Q];return w}var _L={log(){},warn(){},error(){}};function xL(w){if(w===!1)return _L;if(w===void 0)return console;if(w.log&&w.warn&&w.error)return w;throw Error("logger must implement log, warn and error methods")}var lL=/^[a-z_$][a-z0-9_$:-]*$/i;function iL(w,Q){let{RULES:W}=this;if((0,C7.eachItem)(w,(Z)=>{if(W.keywords[Z])throw Error(`Keyword ${Z} is already defined`);if(!lL.test(Z))throw Error(`Keyword ${Z} has invalid name`)}),!Q)return;if(Q.$data&&!(("code"in Q)||("validate"in Q)))throw Error('$data keyword must have "code" or "validate" function')}function k7(w,Q,W){var Z;let Y=Q===null||Q===void 0?void 0:Q.post;if(W&&Y)throw Error('keyword with "post" flag cannot have "type"');let{RULES:X}=this,J=Y?X.post:X.rules.find(({type:G})=>G===W);if(!J)J={type:W,rules:[]},X.rules.push(J);if(X.keywords[w]=!0,!Q)return;let q={keyword:w,definition:{...Q,type:(0,v9.getJSONTypes)(Q.type),schemaType:(0,v9.getJSONTypes)(Q.schemaType)}};if(Q.before)mL.call(this,J,q,Q.before);else J.rules.push(q);X.all[w]=q,(Z=Q.implements)===null||Z===void 0||Z.forEach((G)=>this.addKeyword(G))}function mL(w,Q,W){let Z=w.rules.findIndex((Y)=>Y.keyword===W);if(Z>=0)w.rules.splice(Z,0,Q);else w.rules.push(Q),this.logger.warn(`rule ${W} is not defined`)}function pL(w){let{metaSchema:Q}=w;if(Q===void 0)return;if(w.$data&&this.opts.$data)Q=RJ(Q);w.validateSchema=this.compile(Q,!0)}var cL={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function RJ(w){return{anyOf:[w,cL]}}});var SJ=O((f7)=>{Object.defineProperty(f7,"__esModule",{value:!0});var dL={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};f7.default=dL});var fJ=O((S6)=>{Object.defineProperty(S6,"__esModule",{value:!0});S6.callRef=S6.getValidate=void 0;var nL=S9(),EJ=q0(),tw=h(),K1=r0(),kJ=k9(),u9=Qw(),rL={keyword:"$ref",schemaType:"string",code(w){let{gen:Q,schema:W,it:Z}=w,{baseId:Y,schemaEnv:X,validateName:J,opts:q,self:G}=Z,{root:z}=X;if((W==="#"||W==="#/")&&Y===z.baseId)return K();let F=kJ.resolveRef.call(G,z,Y,W);if(F===void 0)throw new nL.default(Z.opts.uriResolver,Y,W);if(F instanceof kJ.SchemaEnv)return j(F);return V(F);function K(){if(X===z)return h9(w,J,X,X.$async);let M=Q.scopeValue("root",{ref:z});return h9(w,tw._`${M}.validate`,z,z.$async)}function j(M){let H=CJ(w,M);h9(w,H,M,M.$async)}function V(M){let H=Q.scopeValue("schema",q.code.source===!0?{ref:M,code:(0,tw.stringify)(M)}:{ref:M}),A=Q.name("valid"),$=w.subschema({schema:M,dataTypes:[],schemaPath:tw.nil,topSchemaRef:H,errSchemaPath:W},A);w.mergeEvaluated($),w.ok(A)}}};function CJ(w,Q){let{gen:W}=w;return Q.validate?W.scopeValue("validate",{ref:Q.validate}):tw._`${W.scopeValue("wrapper",{ref:Q})}.validate`}S6.getValidate=CJ;function h9(w,Q,W,Z){let{gen:Y,it:X}=w,{allErrors:J,schemaEnv:q,opts:G}=X,z=G.passContext?K1.default.this:tw.nil;if(Z)F();else K();function F(){if(!q.$async)throw Error("async schema referenced by sync schema");let M=Y.let("valid");Y.try(()=>{if(Y.code(tw._`await ${(0,EJ.callValidateCode)(w,Q,z)}`),V(Q),!J)Y.assign(M,!0)},(H)=>{if(Y.if(tw._`!(${H} instanceof ${X.ValidationError})`,()=>Y.throw(H)),j(H),!J)Y.assign(M,!1)}),w.ok(M)}function K(){w.result((0,EJ.callValidateCode)(w,Q,z),()=>V(Q),()=>j(Q))}function j(M){let H=tw._`${M}.errors`;Y.assign(K1.default.vErrors,tw._`${K1.default.vErrors} === null ? ${H} : ${K1.default.vErrors}.concat(${H})`),Y.assign(K1.default.errors,tw._`${K1.default.vErrors}.length`)}function V(M){var H;if(!X.opts.unevaluated)return;let A=(H=W===null||W===void 0?void 0:W.validate)===null||H===void 0?void 0:H.evaluated;if(X.props!==!0)if(A&&!A.dynamicProps){if(A.props!==void 0)X.props=u9.mergeEvaluated.props(Y,A.props,X.props)}else{let $=Y.var("props",tw._`${M}.evaluated.props`);X.props=u9.mergeEvaluated.props(Y,$,X.props,tw.Name)}if(X.items!==!0)if(A&&!A.dynamicItems){if(A.items!==void 0)X.items=u9.mergeEvaluated.items(Y,A.items,X.items)}else{let $=Y.var("items",tw._`${M}.evaluated.items`);X.items=u9.mergeEvaluated.items(Y,$,X.items,tw.Name)}}}S6.callRef=h9;S6.default=rL});var vJ=O((v7)=>{Object.defineProperty(v7,"__esModule",{value:!0});var sL=SJ(),aL=fJ(),tL=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",sL.default,aL.default];v7.default=tL});var yJ=O((y7)=>{Object.defineProperty(y7,"__esModule",{value:!0});var g9=h(),H6=g9.operators,_9={maximum:{okStr:"<=",ok:H6.LTE,fail:H6.GT},minimum:{okStr:">=",ok:H6.GTE,fail:H6.LT},exclusiveMaximum:{okStr:"<",ok:H6.LT,fail:H6.GTE},exclusiveMinimum:{okStr:">",ok:H6.GT,fail:H6.LTE}},oL={message:({keyword:w,schemaCode:Q})=>g9.str`must be ${_9[w].okStr} ${Q}`,params:({keyword:w,schemaCode:Q})=>g9._`{comparison: ${_9[w].okStr}, limit: ${Q}}`},eL={keyword:Object.keys(_9),type:"number",schemaType:"number",$data:!0,error:oL,code(w){let{keyword:Q,data:W,schemaCode:Z}=w;w.fail$data(g9._`${W} ${_9[Q].fail} ${Z} || isNaN(${W})`)}};y7.default=eL});var uJ=O((u7)=>{Object.defineProperty(u7,"__esModule",{value:!0});var B5=h(),wU={message:({schemaCode:w})=>B5.str`must be multiple of ${w}`,params:({schemaCode:w})=>B5._`{multipleOf: ${w}}`},QU={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:wU,code(w){let{gen:Q,data:W,schemaCode:Z,it:Y}=w,X=Y.opts.multipleOfPrecision,J=Q.let("res"),q=X?B5._`Math.abs(Math.round(${J}) - ${J}) > 1e-${X}`:B5._`${J} !== parseInt(${J})`;w.fail$data(B5._`(${Z} === 0 || (${J} = ${W}/${Z}, ${q}))`)}};u7.default=QU});var gJ=O((h7)=>{Object.defineProperty(h7,"__esModule",{value:!0});function hJ(w){let Q=w.length,W=0,Z=0,Y;while(Z<Q)if(W++,Y=w.charCodeAt(Z++),Y>=55296&&Y<=56319&&Z<Q){if(Y=w.charCodeAt(Z),(Y&64512)===56320)Z++}return W}h7.default=hJ;hJ.code='require("ajv/dist/runtime/ucs2length").default'});var _J=O((g7)=>{Object.defineProperty(g7,"__esModule",{value:!0});var E6=h(),WU=Qw(),ZU=gJ(),YU={message({keyword:w,schemaCode:Q}){let W=w==="maxLength"?"more":"fewer";return E6.str`must NOT have ${W} than ${Q} characters`},params:({schemaCode:w})=>E6._`{limit: ${w}}`},XU={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:YU,code(w){let{keyword:Q,data:W,schemaCode:Z,it:Y}=w,X=Q==="maxLength"?E6.operators.GT:E6.operators.LT,J=Y.opts.unicode===!1?E6._`${W}.length`:E6._`${(0,WU.useFunc)(w.gen,ZU.default)}(${W})`;w.fail$data(E6._`${J} ${X} ${Z}`)}};g7.default=XU});var xJ=O((_7)=>{Object.defineProperty(_7,"__esModule",{value:!0});var JU=q0(),x9=h(),qU={message:({schemaCode:w})=>x9.str`must match pattern "${w}"`,params:({schemaCode:w})=>x9._`{pattern: ${w}}`},GU={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:qU,code(w){let{data:Q,$data:W,schema:Z,schemaCode:Y,it:X}=w,J=X.opts.unicodeRegExp?"u":"",q=W?x9._`(new RegExp(${Y}, ${J}))`:(0,JU.usePattern)(w,Z);w.fail$data(x9._`!${q}.test(${Q})`)}};_7.default=GU});var lJ=O((x7)=>{Object.defineProperty(x7,"__esModule",{value:!0});var H5=h(),zU={message({keyword:w,schemaCode:Q}){let W=w==="maxProperties"?"more":"fewer";return H5.str`must NOT have ${W} than ${Q} properties`},params:({schemaCode:w})=>H5._`{limit: ${w}}`},FU={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:zU,code(w){let{keyword:Q,data:W,schemaCode:Z}=w,Y=Q==="maxProperties"?H5.operators.GT:H5.operators.LT;w.fail$data(H5._`Object.keys(${W}).length ${Y} ${Z}`)}};x7.default=FU});var iJ=O((l7)=>{Object.defineProperty(l7,"__esModule",{value:!0});var V5=q0(),M5=h(),KU=Qw(),BU={message:({params:{missingProperty:w}})=>M5.str`must have required property '${w}'`,params:({params:{missingProperty:w}})=>M5._`{missingProperty: ${w}}`},HU={keyword:"required",type:"object",schemaType:"array",$data:!0,error:BU,code(w){let{gen:Q,schema:W,schemaCode:Z,data:Y,$data:X,it:J}=w,{opts:q}=J;if(!X&&W.length===0)return;let G=W.length>=q.loopRequired;if(J.allErrors)z();else F();if(q.strictRequired){let V=w.parentSchema.properties,{definedProperties:M}=w.it;for(let H of W)if((V===null||V===void 0?void 0:V[H])===void 0&&!M.has(H)){let A=J.schemaEnv.baseId+J.errSchemaPath,$=`required property "${H}" is not defined at "${A}" (strictRequired)`;(0,KU.checkStrictMode)(J,$,J.opts.strictRequired)}}function z(){if(G||X)w.block$data(M5.nil,K);else for(let V of W)(0,V5.checkReportMissingProp)(w,V)}function F(){let V=Q.let("missing");if(G||X){let M=Q.let("valid",!0);w.block$data(M,()=>j(V,M)),w.ok(M)}else Q.if((0,V5.checkMissingProp)(w,W,V)),(0,V5.reportMissingProp)(w,V),Q.else()}function K(){Q.forOf("prop",Z,(V)=>{w.setParams({missingProperty:V}),Q.if((0,V5.noPropertyInData)(Q,Y,V,q.ownProperties),()=>w.error())})}function j(V,M){w.setParams({missingProperty:V}),Q.forOf(V,Z,()=>{Q.assign(M,(0,V5.propertyInData)(Q,Y,V,q.ownProperties)),Q.if((0,M5.not)(M),()=>{w.error(),Q.break()})},M5.nil)}}};l7.default=HU});var mJ=O((i7)=>{Object.defineProperty(i7,"__esModule",{value:!0});var L5=h(),VU={message({keyword:w,schemaCode:Q}){let W=w==="maxItems"?"more":"fewer";return L5.str`must NOT have ${W} than ${Q} items`},params:({schemaCode:w})=>L5._`{limit: ${w}}`},MU={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:VU,code(w){let{keyword:Q,data:W,schemaCode:Z}=w,Y=Q==="maxItems"?L5.operators.GT:L5.operators.LT;w.fail$data(L5._`${W}.length ${Y} ${Z}`)}};i7.default=MU});var l9=O((m7)=>{Object.defineProperty(m7,"__esModule",{value:!0});var pJ=f1();pJ.code='require("ajv/dist/runtime/equal").default';m7.default=pJ});var cJ=O((c7)=>{Object.defineProperty(c7,"__esModule",{value:!0});var p7=Y5(),Sw=h(),LU=Qw(),UU=l9(),jU={message:({params:{i:w,j:Q}})=>Sw.str`must NOT have duplicate items (items ## ${Q} and ${w} are identical)`,params:({params:{i:w,j:Q}})=>Sw._`{i: ${w}, j: ${Q}}`},AU={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:jU,code(w){let{gen:Q,data:W,$data:Z,schema:Y,parentSchema:X,schemaCode:J,it:q}=w;if(!Z&&!Y)return;let G=Q.let("valid"),z=X.items?(0,p7.getSchemaTypes)(X.items):[];w.block$data(G,F,Sw._`${J} === false`),w.ok(G);function F(){let M=Q.let("i",Sw._`${W}.length`),H=Q.let("j");w.setParams({i:M,j:H}),Q.assign(G,!0),Q.if(Sw._`${M} > 1`,()=>(K()?j:V)(M,H))}function K(){return z.length>0&&!z.some((M)=>M==="object"||M==="array")}function j(M,H){let A=Q.name("item"),$=(0,p7.checkDataTypes)(z,A,q.opts.strictNumbers,p7.DataType.Wrong),T=Q.const("indices",Sw._`{}`);Q.for(Sw._`;${M}--;`,()=>{if(Q.let(A,Sw._`${W}[${M}]`),Q.if($,Sw._`continue`),z.length>1)Q.if(Sw._`typeof ${A} == "string"`,Sw._`${A} += "_"`);Q.if(Sw._`typeof ${T}[${A}] == "number"`,()=>{Q.assign(H,Sw._`${T}[${A}]`),w.error(),Q.assign(G,!1).break()}).code(Sw._`${T}[${A}] = ${M}`)})}function V(M,H){let A=(0,LU.useFunc)(Q,UU.default),$=Q.name("outer");Q.label($).for(Sw._`;${M}--;`,()=>Q.for(Sw._`${H} = ${M}; ${H}--;`,()=>Q.if(Sw._`${A}(${W}[${M}], ${W}[${H}])`,()=>{w.error(),Q.assign(G,!1).break($)})))}}};c7.default=AU});var dJ=O((n7)=>{Object.defineProperty(n7,"__esModule",{value:!0});var d7=h(),$U=Qw(),OU=l9(),NU={message:"must be equal to constant",params:({schemaCode:w})=>d7._`{allowedValue: ${w}}`},DU={keyword:"const",$data:!0,error:NU,code(w){let{gen:Q,data:W,$data:Z,schemaCode:Y,schema:X}=w;if(Z||X&&typeof X=="object")w.fail$data(d7._`!${(0,$U.useFunc)(Q,OU.default)}(${W}, ${Y})`);else w.fail(d7._`${X} !== ${W}`)}};n7.default=DU});var nJ=O((r7)=>{Object.defineProperty(r7,"__esModule",{value:!0});var U5=h(),IU=Qw(),TU=l9(),PU={message:"must be equal to one of the allowed values",params:({schemaCode:w})=>U5._`{allowedValues: ${w}}`},RU={keyword:"enum",schemaType:"array",$data:!0,error:PU,code(w){let{gen:Q,data:W,$data:Z,schema:Y,schemaCode:X,it:J}=w;if(!Z&&Y.length===0)throw Error("enum must have non-empty array");let q=Y.length>=J.opts.loopEnum,G,z=()=>G!==null&&G!==void 0?G:G=(0,IU.useFunc)(Q,TU.default),F;if(q||Z)F=Q.let("valid"),w.block$data(F,K);else{if(!Array.isArray(Y))throw Error("ajv implementation error");let V=Q.const("vSchema",X);F=(0,U5.or)(...Y.map((M,H)=>j(V,H)))}w.pass(F);function K(){Q.assign(F,!1),Q.forOf("v",X,(V)=>Q.if(U5._`${z()}(${W}, ${V})`,()=>Q.assign(F,!0).break()))}function j(V,M){let H=Y[M];return typeof H==="object"&&H!==null?U5._`${z()}(${W}, ${V}[${M}])`:U5._`${W} === ${H}`}}};r7.default=RU});var rJ=O((s7)=>{Object.defineProperty(s7,"__esModule",{value:!0});var bU=yJ(),SU=uJ(),EU=_J(),kU=xJ(),CU=lJ(),fU=iJ(),vU=mJ(),yU=cJ(),uU=dJ(),hU=nJ(),gU=[bU.default,SU.default,EU.default,kU.default,CU.default,fU.default,vU.default,yU.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},uU.default,hU.default];s7.default=gU});var t7=O((j5)=>{Object.defineProperty(j5,"__esModule",{value:!0});j5.validateAdditionalItems=void 0;var k6=h(),a7=Qw(),_U={message:({params:{len:w}})=>k6.str`must NOT have more than ${w} items`,params:({params:{len:w}})=>k6._`{limit: ${w}}`},xU={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:_U,code(w){let{parentSchema:Q,it:W}=w,{items:Z}=Q;if(!Array.isArray(Z)){(0,a7.checkStrictMode)(W,'"additionalItems" is ignored when "items" is not an array of schemas');return}sJ(w,Z)}};function sJ(w,Q){let{gen:W,schema:Z,data:Y,keyword:X,it:J}=w;J.items=!0;let q=W.const("len",k6._`${Y}.length`);if(Z===!1)w.setParams({len:Q.length}),w.pass(k6._`${q} <= ${Q.length}`);else if(typeof Z=="object"&&!(0,a7.alwaysValidSchema)(J,Z)){let z=W.var("valid",k6._`${q} <= ${Q.length}`);W.if((0,k6.not)(z),()=>G(z)),w.ok(z)}function G(z){W.forRange("i",Q.length,q,(F)=>{if(w.subschema({keyword:X,dataProp:F,dataPropType:a7.Type.Num},z),!J.allErrors)W.if((0,k6.not)(z),()=>W.break())})}}j5.validateAdditionalItems=sJ;j5.default=xU});var o7=O((A5)=>{Object.defineProperty(A5,"__esModule",{value:!0});A5.validateTuple=void 0;var aJ=h(),i9=Qw(),lU=q0(),iU={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(w){let{schema:Q,it:W}=w;if(Array.isArray(Q))return tJ(w,"additionalItems",Q);if(W.items=!0,(0,i9.alwaysValidSchema)(W,Q))return;w.ok((0,lU.validateArray)(w))}};function tJ(w,Q,W=w.schema){let{gen:Z,parentSchema:Y,data:X,keyword:J,it:q}=w;if(F(Y),q.opts.unevaluated&&W.length&&q.items!==!0)q.items=i9.mergeEvaluated.items(Z,W.length,q.items);let G=Z.name("valid"),z=Z.const("len",aJ._`${X}.length`);W.forEach((K,j)=>{if((0,i9.alwaysValidSchema)(q,K))return;Z.if(aJ._`${z} > ${j}`,()=>w.subschema({keyword:J,schemaProp:j,dataProp:j},G)),w.ok(G)});function F(K){let{opts:j,errSchemaPath:V}=q,M=W.length,H=M===K.minItems&&(M===K.maxItems||K[Q]===!1);if(j.strictTuples&&!H){let A=`"${J}" is ${M}-tuple, but minItems or maxItems/${Q} are not specified or different at path "${V}"`;(0,i9.checkStrictMode)(q,A,j.strictTuples)}}}A5.validateTuple=tJ;A5.default=iU});var oJ=O((e7)=>{Object.defineProperty(e7,"__esModule",{value:!0});var mU=o7(),pU={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(w)=>(0,mU.validateTuple)(w,"items")};e7.default=pU});var wq=O((wQ)=>{Object.defineProperty(wQ,"__esModule",{value:!0});var eJ=h(),cU=Qw(),dU=q0(),nU=t7(),rU={message:({params:{len:w}})=>eJ.str`must NOT have more than ${w} items`,params:({params:{len:w}})=>eJ._`{limit: ${w}}`},sU={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:rU,code(w){let{schema:Q,parentSchema:W,it:Z}=w,{prefixItems:Y}=W;if(Z.items=!0,(0,cU.alwaysValidSchema)(Z,Q))return;if(Y)(0,nU.validateAdditionalItems)(w,Y);else w.ok((0,dU.validateArray)(w))}};wQ.default=sU});var Qq=O((QQ)=>{Object.defineProperty(QQ,"__esModule",{value:!0});var z0=h(),m9=Qw(),aU={message:({params:{min:w,max:Q}})=>Q===void 0?z0.str`must contain at least ${w} valid item(s)`:z0.str`must contain at least ${w} and no more than ${Q} valid item(s)`,params:({params:{min:w,max:Q}})=>Q===void 0?z0._`{minContains: ${w}}`:z0._`{minContains: ${w}, maxContains: ${Q}}`},tU={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:aU,code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,it:X}=w,J,q,{minContains:G,maxContains:z}=Z;if(X.opts.next)J=G===void 0?1:G,q=z;else J=1;let F=Q.const("len",z0._`${Y}.length`);if(w.setParams({min:J,max:q}),q===void 0&&J===0){(0,m9.checkStrictMode)(X,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(q!==void 0&&J>q){(0,m9.checkStrictMode)(X,'"minContains" > "maxContains" is always invalid'),w.fail();return}if((0,m9.alwaysValidSchema)(X,W)){let H=z0._`${F} >= ${J}`;if(q!==void 0)H=z0._`${H} && ${F} <= ${q}`;w.pass(H);return}X.items=!0;let K=Q.name("valid");if(q===void 0&&J===1)V(K,()=>Q.if(K,()=>Q.break()));else if(J===0){if(Q.let(K,!0),q!==void 0)Q.if(z0._`${Y}.length > 0`,j)}else Q.let(K,!1),j();w.result(K,()=>w.reset());function j(){let H=Q.name("_valid"),A=Q.let("count",0);V(H,()=>Q.if(H,()=>M(A)))}function V(H,A){Q.forRange("i",0,F,($)=>{w.subschema({keyword:"contains",dataProp:$,dataPropType:m9.Type.Num,compositeRule:!0},H),A()})}function M(H){if(Q.code(z0._`${H}++`),q===void 0)Q.if(z0._`${H} >= ${J}`,()=>Q.assign(K,!0).break());else if(Q.if(z0._`${H} > ${q}`,()=>Q.assign(K,!1).break()),J===1)Q.assign(K,!0);else Q.if(z0._`${H} >= ${J}`,()=>Q.assign(K,!0))}}};QQ.default=tU});var Yq=O((y0)=>{Object.defineProperty(y0,"__esModule",{value:!0});y0.validateSchemaDeps=y0.validatePropertyDeps=y0.error=void 0;var WQ=h(),oU=Qw(),$5=q0();y0.error={message:({params:{property:w,depsCount:Q,deps:W}})=>{let Z=Q===1?"property":"properties";return WQ.str`must have ${Z} ${W} when property ${w} is present`},params:({params:{property:w,depsCount:Q,deps:W,missingProperty:Z}})=>WQ._`{property: ${w},
|
|
13
|
+
missingProperty: ${Z},
|
|
14
|
+
depsCount: ${Q},
|
|
15
|
+
deps: ${W}}`};var eU={keyword:"dependencies",type:"object",schemaType:"object",error:y0.error,code(w){let[Q,W]=wj(w);Wq(w,Q),Zq(w,W)}};function wj({schema:w}){let Q={},W={};for(let Z in w){if(Z==="__proto__")continue;let Y=Array.isArray(w[Z])?Q:W;Y[Z]=w[Z]}return[Q,W]}function Wq(w,Q=w.schema){let{gen:W,data:Z,it:Y}=w;if(Object.keys(Q).length===0)return;let X=W.let("missing");for(let J in Q){let q=Q[J];if(q.length===0)continue;let G=(0,$5.propertyInData)(W,Z,J,Y.opts.ownProperties);if(w.setParams({property:J,depsCount:q.length,deps:q.join(", ")}),Y.allErrors)W.if(G,()=>{for(let z of q)(0,$5.checkReportMissingProp)(w,z)});else W.if(WQ._`${G} && (${(0,$5.checkMissingProp)(w,q,X)})`),(0,$5.reportMissingProp)(w,X),W.else()}}y0.validatePropertyDeps=Wq;function Zq(w,Q=w.schema){let{gen:W,data:Z,keyword:Y,it:X}=w,J=W.name("valid");for(let q in Q){if((0,oU.alwaysValidSchema)(X,Q[q]))continue;W.if((0,$5.propertyInData)(W,Z,q,X.opts.ownProperties),()=>{let G=w.subschema({keyword:Y,schemaProp:q},J);w.mergeValidEvaluated(G,J)},()=>W.var(J,!0)),w.ok(J)}}y0.validateSchemaDeps=Zq;y0.default=eU});var Jq=O((ZQ)=>{Object.defineProperty(ZQ,"__esModule",{value:!0});var Xq=h(),Qj=Qw(),Wj={message:"property name must be valid",params:({params:w})=>Xq._`{propertyName: ${w.propertyName}}`},Zj={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:Wj,code(w){let{gen:Q,schema:W,data:Z,it:Y}=w;if((0,Qj.alwaysValidSchema)(Y,W))return;let X=Q.name("valid");Q.forIn("key",Z,(J)=>{w.setParams({propertyName:J}),w.subschema({keyword:"propertyNames",data:J,dataTypes:["string"],propertyName:J,compositeRule:!0},X),Q.if((0,Xq.not)(X),()=>{if(w.error(!0),!Y.allErrors)Q.break()})}),w.ok(X)}};ZQ.default=Zj});var XQ=O((YQ)=>{Object.defineProperty(YQ,"__esModule",{value:!0});var p9=q0(),O0=h(),Yj=r0(),c9=Qw(),Xj={message:"must NOT have additional properties",params:({params:w})=>O0._`{additionalProperty: ${w.additionalProperty}}`},Jj={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:Xj,code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,errsCount:X,it:J}=w;if(!X)throw Error("ajv implementation error");let{allErrors:q,opts:G}=J;if(J.props=!0,G.removeAdditional!=="all"&&(0,c9.alwaysValidSchema)(J,W))return;let z=(0,p9.allSchemaProperties)(Z.properties),F=(0,p9.allSchemaProperties)(Z.patternProperties);K(),w.ok(O0._`${X} === ${Yj.default.errors}`);function K(){Q.forIn("key",Y,(A)=>{if(!z.length&&!F.length)M(A);else Q.if(j(A),()=>M(A))})}function j(A){let $;if(z.length>8){let T=(0,c9.schemaRefOrVal)(J,Z.properties,"properties");$=(0,p9.isOwnProperty)(Q,T,A)}else if(z.length)$=(0,O0.or)(...z.map((T)=>O0._`${A} === ${T}`));else $=O0.nil;if(F.length)$=(0,O0.or)($,...F.map((T)=>O0._`${(0,p9.usePattern)(w,T)}.test(${A})`));return(0,O0.not)($)}function V(A){Q.code(O0._`delete ${Y}[${A}]`)}function M(A){if(G.removeAdditional==="all"||G.removeAdditional&&W===!1){V(A);return}if(W===!1){if(w.setParams({additionalProperty:A}),w.error(),!q)Q.break();return}if(typeof W=="object"&&!(0,c9.alwaysValidSchema)(J,W)){let $=Q.name("valid");if(G.removeAdditional==="failing")H(A,$,!1),Q.if((0,O0.not)($),()=>{w.reset(),V(A)});else if(H(A,$),!q)Q.if((0,O0.not)($),()=>Q.break())}}function H(A,$,T){let P={keyword:"additionalProperties",dataProp:A,dataPropType:c9.Type.Str};if(T===!1)Object.assign(P,{compositeRule:!0,createErrors:!1,allErrors:!1});w.subschema(P,$)}}};YQ.default=Jj});var zq=O((qQ)=>{Object.defineProperty(qQ,"__esModule",{value:!0});var qj=G5(),qq=q0(),JQ=Qw(),Gq=XQ(),Gj={keyword:"properties",type:"object",schemaType:"object",code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,it:X}=w;if(X.opts.removeAdditional==="all"&&Z.additionalProperties===void 0)Gq.default.code(new qj.KeywordCxt(X,Gq.default,"additionalProperties"));let J=(0,qq.allSchemaProperties)(W);for(let K of J)X.definedProperties.add(K);if(X.opts.unevaluated&&J.length&&X.props!==!0)X.props=JQ.mergeEvaluated.props(Q,(0,JQ.toHash)(J),X.props);let q=J.filter((K)=>!(0,JQ.alwaysValidSchema)(X,W[K]));if(q.length===0)return;let G=Q.name("valid");for(let K of q){if(z(K))F(K);else{if(Q.if((0,qq.propertyInData)(Q,Y,K,X.opts.ownProperties)),F(K),!X.allErrors)Q.else().var(G,!0);Q.endIf()}w.it.definedProperties.add(K),w.ok(G)}function z(K){return X.opts.useDefaults&&!X.compositeRule&&W[K].default!==void 0}function F(K){w.subschema({keyword:"properties",schemaProp:K,dataProp:K},G)}}};qQ.default=Gj});var Hq=O((GQ)=>{Object.defineProperty(GQ,"__esModule",{value:!0});var Fq=q0(),d9=h(),Kq=Qw(),Bq=Qw(),zj={keyword:"patternProperties",type:"object",schemaType:"object",code(w){let{gen:Q,schema:W,data:Z,parentSchema:Y,it:X}=w,{opts:J}=X,q=(0,Fq.allSchemaProperties)(W),G=q.filter((H)=>(0,Kq.alwaysValidSchema)(X,W[H]));if(q.length===0||G.length===q.length&&(!X.opts.unevaluated||X.props===!0))return;let z=J.strictSchema&&!J.allowMatchingProperties&&Y.properties,F=Q.name("valid");if(X.props!==!0&&!(X.props instanceof d9.Name))X.props=(0,Bq.evaluatedPropsToName)(Q,X.props);let{props:K}=X;j();function j(){for(let H of q){if(z)V(H);if(X.allErrors)M(H);else Q.var(F,!0),M(H),Q.if(F)}}function V(H){for(let A in z)if(new RegExp(H).test(A))(0,Kq.checkStrictMode)(X,`property ${A} matches pattern ${H} (use allowMatchingProperties)`)}function M(H){Q.forIn("key",Z,(A)=>{Q.if(d9._`${(0,Fq.usePattern)(w,H)}.test(${A})`,()=>{let $=G.includes(H);if(!$)w.subschema({keyword:"patternProperties",schemaProp:H,dataProp:A,dataPropType:Bq.Type.Str},F);if(X.opts.unevaluated&&K!==!0)Q.assign(d9._`${K}[${A}]`,!0);else if(!$&&!X.allErrors)Q.if((0,d9.not)(F),()=>Q.break())})})}}};GQ.default=zj});var Vq=O((zQ)=>{Object.defineProperty(zQ,"__esModule",{value:!0});var Fj=Qw(),Kj={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(w){let{gen:Q,schema:W,it:Z}=w;if((0,Fj.alwaysValidSchema)(Z,W)){w.fail();return}let Y=Q.name("valid");w.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},Y),w.failResult(Y,()=>w.reset(),()=>w.error())},error:{message:"must NOT be valid"}};zQ.default=Kj});var Mq=O((FQ)=>{Object.defineProperty(FQ,"__esModule",{value:!0});var Bj=q0(),Hj={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:Bj.validateUnion,error:{message:"must match a schema in anyOf"}};FQ.default=Hj});var Lq=O((KQ)=>{Object.defineProperty(KQ,"__esModule",{value:!0});var n9=h(),Vj=Qw(),Mj={message:"must match exactly one schema in oneOf",params:({params:w})=>n9._`{passingSchemas: ${w.passing}}`},Lj={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:Mj,code(w){let{gen:Q,schema:W,parentSchema:Z,it:Y}=w;if(!Array.isArray(W))throw Error("ajv implementation error");if(Y.opts.discriminator&&Z.discriminator)return;let X=W,J=Q.let("valid",!1),q=Q.let("passing",null),G=Q.name("_valid");w.setParams({passing:q}),Q.block(z),w.result(J,()=>w.reset(),()=>w.error(!0));function z(){X.forEach((F,K)=>{let j;if((0,Vj.alwaysValidSchema)(Y,F))Q.var(G,!0);else j=w.subschema({keyword:"oneOf",schemaProp:K,compositeRule:!0},G);if(K>0)Q.if(n9._`${G} && ${J}`).assign(J,!1).assign(q,n9._`[${q}, ${K}]`).else();Q.if(G,()=>{if(Q.assign(J,!0),Q.assign(q,K),j)w.mergeEvaluated(j,n9.Name)})})}}};KQ.default=Lj});var Uq=O((BQ)=>{Object.defineProperty(BQ,"__esModule",{value:!0});var Uj=Qw(),jj={keyword:"allOf",schemaType:"array",code(w){let{gen:Q,schema:W,it:Z}=w;if(!Array.isArray(W))throw Error("ajv implementation error");let Y=Q.name("valid");W.forEach((X,J)=>{if((0,Uj.alwaysValidSchema)(Z,X))return;let q=w.subschema({keyword:"allOf",schemaProp:J},Y);w.ok(Y),w.mergeEvaluated(q)})}};BQ.default=jj});var $q=O((HQ)=>{Object.defineProperty(HQ,"__esModule",{value:!0});var r9=h(),Aq=Qw(),Aj={message:({params:w})=>r9.str`must match "${w.ifClause}" schema`,params:({params:w})=>r9._`{failingKeyword: ${w.ifClause}}`},$j={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:Aj,code(w){let{gen:Q,parentSchema:W,it:Z}=w;if(W.then===void 0&&W.else===void 0)(0,Aq.checkStrictMode)(Z,'"if" without "then" and "else" is ignored');let Y=jq(Z,"then"),X=jq(Z,"else");if(!Y&&!X)return;let J=Q.let("valid",!0),q=Q.name("_valid");if(G(),w.reset(),Y&&X){let F=Q.let("ifClause");w.setParams({ifClause:F}),Q.if(q,z("then",F),z("else",F))}else if(Y)Q.if(q,z("then"));else Q.if((0,r9.not)(q),z("else"));w.pass(J,()=>w.error(!0));function G(){let F=w.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},q);w.mergeEvaluated(F)}function z(F,K){return()=>{let j=w.subschema({keyword:F},q);if(Q.assign(J,q),w.mergeValidEvaluated(j,J),K)Q.assign(K,r9._`${F}`);else w.setParams({ifClause:F})}}}};function jq(w,Q){let W=w.schema[Q];return W!==void 0&&!(0,Aq.alwaysValidSchema)(w,W)}HQ.default=$j});var Oq=O((VQ)=>{Object.defineProperty(VQ,"__esModule",{value:!0});var Oj=Qw(),Nj={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:w,parentSchema:Q,it:W}){if(Q.if===void 0)(0,Oj.checkStrictMode)(W,`"${w}" without "if" is ignored`)}};VQ.default=Nj});var Nq=O((MQ)=>{Object.defineProperty(MQ,"__esModule",{value:!0});var Dj=t7(),Ij=oJ(),Tj=o7(),Pj=wq(),Rj=Qq(),bj=Yq(),Sj=Jq(),Ej=XQ(),kj=zq(),Cj=Hq(),fj=Vq(),vj=Mq(),yj=Lq(),uj=Uq(),hj=$q(),gj=Oq();function _j(w=!1){let Q=[fj.default,vj.default,yj.default,uj.default,hj.default,gj.default,Sj.default,Ej.default,bj.default,kj.default,Cj.default];if(w)Q.push(Ij.default,Pj.default);else Q.push(Dj.default,Tj.default);return Q.push(Rj.default),Q}MQ.default=_j});var Dq=O((LQ)=>{Object.defineProperty(LQ,"__esModule",{value:!0});var Ow=h(),xj={message:({schemaCode:w})=>Ow.str`must match format "${w}"`,params:({schemaCode:w})=>Ow._`{format: ${w}}`},lj={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:xj,code(w,Q){let{gen:W,data:Z,$data:Y,schema:X,schemaCode:J,it:q}=w,{opts:G,errSchemaPath:z,schemaEnv:F,self:K}=q;if(!G.validateFormats)return;if(Y)j();else V();function j(){let M=W.scopeValue("formats",{ref:K.formats,code:G.code.formats}),H=W.const("fDef",Ow._`${M}[${J}]`),A=W.let("fType"),$=W.let("format");W.if(Ow._`typeof ${H} == "object" && !(${H} instanceof RegExp)`,()=>W.assign(A,Ow._`${H}.type || "string"`).assign($,Ow._`${H}.validate`),()=>W.assign(A,Ow._`"string"`).assign($,H)),w.fail$data((0,Ow.or)(T(),P()));function T(){if(G.strictSchema===!1)return Ow.nil;return Ow._`${J} && !${$}`}function P(){let b=F.$async?Ow._`(${H}.async ? await ${$}(${Z}) : ${$}(${Z}))`:Ow._`${$}(${Z})`,N=Ow._`(typeof ${$} == "function" ? ${b} : ${$}.test(${Z}))`;return Ow._`${$} && ${$} !== true && ${A} === ${Q} && !${N}`}}function V(){let M=K.formats[X];if(!M){T();return}if(M===!0)return;let[H,A,$]=P(M);if(H===Q)w.pass(b());function T(){if(G.strictSchema===!1){K.logger.warn(N());return}throw Error(N());function N(){return`unknown format "${X}" ignored in schema at path "${z}"`}}function P(N){let S=N instanceof RegExp?(0,Ow.regexpCode)(N):G.code.formats?Ow._`${G.code.formats}${(0,Ow.getProperty)(X)}`:void 0,i=W.scopeValue("formats",{key:X,ref:N,code:S});if(typeof N=="object"&&!(N instanceof RegExp))return[N.type||"string",N.validate,Ow._`${i}.validate`];return["string",N,i]}function b(){if(typeof M=="object"&&!(M instanceof RegExp)&&M.async){if(!F.$async)throw Error("async format in sync schema");return Ow._`await ${$}(${Z})`}return typeof A=="function"?Ow._`${$}(${Z})`:Ow._`${$}.test(${Z})`}}}};LQ.default=lj});var Iq=O((UQ)=>{Object.defineProperty(UQ,"__esModule",{value:!0});var ij=Dq(),mj=[ij.default];UQ.default=mj});var Tq=O((B1)=>{Object.defineProperty(B1,"__esModule",{value:!0});B1.contentVocabulary=B1.metadataVocabulary=void 0;B1.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];B1.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var Rq=O((jQ)=>{Object.defineProperty(jQ,"__esModule",{value:!0});var pj=vJ(),cj=rJ(),dj=Nq(),nj=Iq(),Pq=Tq(),rj=[pj.default,cj.default,(0,dj.default)(),nj.default,Pq.metadataVocabulary,Pq.contentVocabulary];jQ.default=rj});var bq=O((O5)=>{Object.defineProperty(O5,"__esModule",{value:!0});O5.DiscrError=void 0;var sj;(function(w){w.Tag="tag",w.Mapping="mapping"})(sj=O5.DiscrError||(O5.DiscrError={}))});var Eq=O(($Q)=>{Object.defineProperty($Q,"__esModule",{value:!0});var H1=h(),AQ=bq(),Sq=k9(),aj=Qw(),tj={message:({params:{discrError:w,tagName:Q}})=>w===AQ.DiscrError.Tag?`tag "${Q}" must be string`:`value of tag "${Q}" must be in oneOf`,params:({params:{discrError:w,tag:Q,tagName:W}})=>H1._`{error: ${w}, tag: ${W}, tagValue: ${Q}}`},oj={keyword:"discriminator",type:"object",schemaType:"object",error:tj,code(w){let{gen:Q,data:W,schema:Z,parentSchema:Y,it:X}=w,{oneOf:J}=Y;if(!X.opts.discriminator)throw Error("discriminator: requires discriminator option");let q=Z.propertyName;if(typeof q!="string")throw Error("discriminator: requires propertyName");if(Z.mapping)throw Error("discriminator: mapping is not supported");if(!J)throw Error("discriminator: requires oneOf keyword");let G=Q.let("valid",!1),z=Q.const("tag",H1._`${W}${(0,H1.getProperty)(q)}`);Q.if(H1._`typeof ${z} == "string"`,()=>F(),()=>w.error(!1,{discrError:AQ.DiscrError.Tag,tag:z,tagName:q})),w.ok(G);function F(){let V=j();Q.if(!1);for(let M in V)Q.elseIf(H1._`${z} === ${M}`),Q.assign(G,K(V[M]));Q.else(),w.error(!1,{discrError:AQ.DiscrError.Mapping,tag:z,tagName:q}),Q.endIf()}function K(V){let M=Q.name("valid"),H=w.subschema({keyword:"oneOf",schemaProp:V},M);return w.mergeEvaluated(H,H1.Name),M}function j(){var V;let M={},H=$(Y),A=!0;for(let b=0;b<J.length;b++){let N=J[b];if((N===null||N===void 0?void 0:N.$ref)&&!(0,aj.schemaHasRulesButRef)(N,X.self.RULES)){if(N=Sq.resolveRef.call(X.self,X.schemaEnv.root,X.baseId,N===null||N===void 0?void 0:N.$ref),N instanceof Sq.SchemaEnv)N=N.schema}let S=(V=N===null||N===void 0?void 0:N.properties)===null||V===void 0?void 0:V[q];if(typeof S!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${q}"`);A=A&&(H||$(N)),T(S,b)}if(!A)throw Error(`discriminator: "${q}" must be required`);return M;function $({required:b}){return Array.isArray(b)&&b.includes(q)}function T(b,N){if(b.const)P(b.const,N);else if(b.enum)for(let S of b.enum)P(S,N);else throw Error(`discriminator: "properties/${q}" must have "const" or "enum"`)}function P(b,N){if(typeof b!="string"||b in M)throw Error(`discriminator: "${q}" values must be unique strings`);M[b]=N}}}};$Q.default=oj});var kq=O((gN,ej)=>{ej.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var vq=O((jw,fq)=>{Object.defineProperty(jw,"__esModule",{value:!0});jw.MissingRefError=jw.ValidationError=jw.CodeGen=jw.Name=jw.nil=jw.stringify=jw.str=jw._=jw.KeywordCxt=void 0;var wA=bJ(),QA=Rq(),WA=Eq(),Cq=kq(),ZA=["/properties"],s9="http://json-schema.org/draft-07/schema";class OQ extends wA.default{_addVocabularies(){if(super._addVocabularies(),QA.default.forEach((w)=>this.addVocabulary(w)),this.opts.discriminator)this.addKeyword(WA.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let w=this.opts.$data?this.$dataMetaSchema(Cq,ZA):Cq;this.addMetaSchema(w,s9,!1),this.refs["http://json-schema.org/schema"]=s9}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(s9)?s9:void 0)}}fq.exports=jw=OQ;Object.defineProperty(jw,"__esModule",{value:!0});jw.default=OQ;var YA=G5();Object.defineProperty(jw,"KeywordCxt",{enumerable:!0,get:function(){return YA.KeywordCxt}});var V1=h();Object.defineProperty(jw,"_",{enumerable:!0,get:function(){return V1._}});Object.defineProperty(jw,"str",{enumerable:!0,get:function(){return V1.str}});Object.defineProperty(jw,"stringify",{enumerable:!0,get:function(){return V1.stringify}});Object.defineProperty(jw,"nil",{enumerable:!0,get:function(){return V1.nil}});Object.defineProperty(jw,"Name",{enumerable:!0,get:function(){return V1.Name}});Object.defineProperty(jw,"CodeGen",{enumerable:!0,get:function(){return V1.CodeGen}});var XA=b9();Object.defineProperty(jw,"ValidationError",{enumerable:!0,get:function(){return XA.default}});var JA=S9();Object.defineProperty(jw,"MissingRefError",{enumerable:!0,get:function(){return JA.default}})});var yq=O((M1)=>{Object.defineProperty(M1,"__esModule",{value:!0});M1.formatLimitDefinition=void 0;var qA=vq(),N0=h(),V6=N0.operators,a9={formatMaximum:{okStr:"<=",ok:V6.LTE,fail:V6.GT},formatMinimum:{okStr:">=",ok:V6.GTE,fail:V6.LT},formatExclusiveMaximum:{okStr:"<",ok:V6.LT,fail:V6.GTE},formatExclusiveMinimum:{okStr:">",ok:V6.GT,fail:V6.LTE}},GA={message:({keyword:w,schemaCode:Q})=>N0.str`should be ${a9[w].okStr} ${Q}`,params:({keyword:w,schemaCode:Q})=>N0._`{comparison: ${a9[w].okStr}, limit: ${Q}}`};M1.formatLimitDefinition={keyword:Object.keys(a9),type:"string",schemaType:"string",$data:!0,error:GA,code(w){let{gen:Q,data:W,schemaCode:Z,keyword:Y,it:X}=w,{opts:J,self:q}=X;if(!J.validateFormats)return;let G=new qA.KeywordCxt(X,q.RULES.all.format.definition,"format");if(G.$data)z();else F();function z(){let j=Q.scopeValue("formats",{ref:q.formats,code:J.code.formats}),V=Q.const("fmt",N0._`${j}[${G.schemaCode}]`);w.fail$data(N0.or(N0._`typeof ${V} != "object"`,N0._`${V} instanceof RegExp`,N0._`typeof ${V}.compare != "function"`,K(V)))}function F(){let j=G.schema,V=q.formats[j];if(!V||V===!0)return;if(typeof V!="object"||V instanceof RegExp||typeof V.compare!="function")throw Error(`"${Y}": format "${j}" does not define "compare" function`);let M=Q.scopeValue("formats",{key:j,ref:V,code:J.code.formats?N0._`${J.code.formats}${N0.getProperty(j)}`:void 0});w.fail$data(K(M))}function K(j){return N0._`${j}.compare(${W}, ${Z}) ${a9[Y].fail} 0`}},dependencies:["format"]};var zA=(w)=>{return w.addKeyword(M1.formatLimitDefinition),w};M1.default=zA});var _q=O((N5,gq)=>{Object.defineProperty(N5,"__esModule",{value:!0});var L1=XX(),FA=yq(),NQ=h(),uq=new NQ.Name("fullFormats"),KA=new NQ.Name("fastFormats"),DQ=(w,Q={keywords:!0})=>{if(Array.isArray(Q))return hq(w,Q,L1.fullFormats,uq),w;let[W,Z]=Q.mode==="fast"?[L1.fastFormats,KA]:[L1.fullFormats,uq],Y=Q.formats||L1.formatNames;if(hq(w,Y,W,Z),Q.keywords)FA.default(w);return w};DQ.get=(w,Q="full")=>{let Z=(Q==="fast"?L1.fastFormats:L1.fullFormats)[w];if(!Z)throw Error(`Unknown format "${w}"`);return Z};function hq(w,Q,W,Z){var Y,X;(Y=(X=w.opts.code).formats)!==null&&Y!==void 0||(X.formats=NQ._`require("ajv-formats/dist/formats").${Z}`);for(let J of Q)w.addFormat(J,W[J])}gq.exports=N5=DQ;Object.defineProperty(N5,"__esModule",{value:!0});N5.default=DQ});var lq=O((xq,t9)=>{(function(w,Q){if(typeof t9==="object"&&t9.exports)t9.exports=Q();else w.nearley=Q()})(xq,function(){function w(G,z,F){return this.id=++w.highestId,this.name=G,this.symbols=z,this.postprocess=F,this}w.highestId=0,w.prototype.toString=function(G){var z=typeof G>"u"?this.symbols.map(q).join(" "):this.symbols.slice(0,G).map(q).join(" ")+" ● "+this.symbols.slice(G).map(q).join(" ");return this.name+" → "+z};function Q(G,z,F,K){this.rule=G,this.dot=z,this.reference=F,this.data=[],this.wantedBy=K,this.isComplete=this.dot===G.symbols.length}Q.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},Q.prototype.nextState=function(G){var z=new Q(this.rule,this.dot+1,this.reference,this.wantedBy);if(z.left=this,z.right=G,z.isComplete)z.data=z.build(),z.right=void 0;return z},Q.prototype.build=function(){var G=[],z=this;do G.push(z.right.data),z=z.left;while(z.left);return G.reverse(),G},Q.prototype.finish=function(){if(this.rule.postprocess)this.data=this.rule.postprocess(this.data,this.reference,X.fail)};function W(G,z){this.grammar=G,this.index=z,this.states=[],this.wants={},this.scannable=[],this.completed={}}W.prototype.process=function(G){var z=this.states,F=this.wants,K=this.completed;for(var j=0;j<z.length;j++){var V=z[j];if(V.isComplete){if(V.finish(),V.data!==X.fail){var M=V.wantedBy;for(var H=M.length;H--;){var A=M[H];this.complete(A,V)}if(V.reference===this.index){var $=V.rule.name;(this.completed[$]=this.completed[$]||[]).push(V)}}}else{var $=V.rule.symbols[V.dot];if(typeof $!=="string"){this.scannable.push(V);continue}if(F[$]){if(F[$].push(V),K.hasOwnProperty($)){var T=K[$];for(var H=0;H<T.length;H++){var P=T[H];this.complete(V,P)}}}else F[$]=[V],this.predict($)}}},W.prototype.predict=function(G){var z=this.grammar.byName[G]||[];for(var F=0;F<z.length;F++){var K=z[F],j=this.wants[G],V=new Q(K,0,this.index,j);this.states.push(V)}},W.prototype.complete=function(G,z){var F=G.nextState(z);this.states.push(F)};function Z(G,z){this.rules=G,this.start=z||this.rules[0].name;var F=this.byName={};this.rules.forEach(function(K){if(!F.hasOwnProperty(K.name))F[K.name]=[];F[K.name].push(K)})}Z.fromCompiled=function(K,z){var F=K.Lexer;if(K.ParserStart)z=K.ParserStart,K=K.ParserRules;var K=K.map(function(V){return new w(V.name,V.symbols,V.postprocess)}),j=new Z(K,z);return j.lexer=F,j};function Y(){this.reset("")}Y.prototype.reset=function(G,z){this.buffer=G,this.index=0,this.line=z?z.line:1,this.lastLineBreak=z?-z.col:0},Y.prototype.next=function(){if(this.index<this.buffer.length){var G=this.buffer[this.index++];if(G===`
|
|
16
|
+
`)this.line+=1,this.lastLineBreak=this.index;return{value:G}}},Y.prototype.save=function(){return{line:this.line,col:this.index-this.lastLineBreak}},Y.prototype.formatError=function(G,z){var F=this.buffer;if(typeof F==="string"){var K=F.split(`
|
|
17
|
+
`).slice(Math.max(0,this.line-5),this.line),j=F.indexOf(`
|
|
18
|
+
`,this.index);if(j===-1)j=F.length;var V=this.index-this.lastLineBreak,M=String(this.line).length;return z+=" at line "+this.line+" col "+V+`:
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uL2FjdGl2aXR5LXN0cmVhbXMvc3JjL2FjdGl2aXR5LXN0cmVhbXMudHMiLCAic3JjL3NvY2tldGh1Yi1jbGllbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwKICAgICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlciB9XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiIsCiAgICAiLyohXG4gKiBhY3Rpdml0eS1zdHJlYW1zXG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2ZXJidWNrZXQvYWN0aXZpdHktc3RyZWFtc1xuICpcbiAqIERldmVsb3BlZCBhbmQgTWFpbnRhaW5lZCBieTpcbiAqICAgTmljayBKZW5uaW5ncyA8bmlja0BzaWx2ZXJidWNrZXQubmV0PlxuICpcbiAqIGFjdGl2aXR5LXN0cmVhbXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCAoc2VlIExJQ0VOU0UpLlxuICpcbiAqIFlvdSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gY2hvb3NlIG9uZSBsaWNlbnNlIG9yIHRoZSBvdGhlclxuICogYW5kIHlvdSBkb24ndCBoYXZlIHRvIG5vdGlmeSBhbnlvbmUgd2hpY2ggbGljZW5zZSB5b3UgYXJlIHVzaW5nLlxuICogUGxlYXNlIHNlZSB0aGUgY29ycmVzcG9uZGluZyBsaWNlbnNlIGZpbGUgZm9yIGRldGFpbHMgb2YgdGhlc2UgbGljZW5zZXMuXG4gKiBZb3UgYXJlIGZyZWUgdG8gdXNlLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSwgYnV0IGFsbCBjb3B5cmlnaHRcbiAqIGluZm9ybWF0aW9uIG11c3QgcmVtYWluLlxuICpcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5T2JqZWN0LCBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50ZW1pdHRlcjNcIjtcblxuY29uc3QgZWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5jb25zdCBiYXNlUHJvcHMgPSB7XG4gICAgc3RyZWFtOiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiYWN0b3JcIixcbiAgICAgICAgXCJ0YXJnZXRcIixcbiAgICAgICAgXCJvYmplY3RcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcInB1Ymxpc2hlZFwiLFxuICAgICAgICBcImVycm9yXCIsXG4gICAgXSxcbiAgICBvYmplY3Q6IFtcbiAgICAgICAgXCJpZFwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiYWxpYXNcIixcbiAgICAgICAgXCJhdHRhY2hlZFRvXCIsXG4gICAgICAgIFwiYXR0YWNobWVudFwiLFxuICAgICAgICBcImF0dHJpYnV0ZWRUb1wiLFxuICAgICAgICBcImF0dHJpYnV0ZWRXaXRoXCIsXG4gICAgICAgIFwiY29uZGl0aW9uXCIsXG4gICAgICAgIFwiY29udGVudFwiLFxuICAgICAgICBcImNvbnRlbnRNYXBcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiY29udGV4dE9mXCIsXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImVuZFRpbWVcIixcbiAgICAgICAgXCJnZW5lcmF0b3JcIixcbiAgICAgICAgXCJnZW5lcmF0b3JPZlwiLFxuICAgICAgICBcImdyb3VwXCIsXG4gICAgICAgIFwiaWNvblwiLFxuICAgICAgICBcImltYWdlXCIsXG4gICAgICAgIFwiaW5SZXBseVRvXCIsXG4gICAgICAgIFwibWVtYmVyc1wiLFxuICAgICAgICBcIm1lbWJlck9mXCIsXG4gICAgICAgIFwibWVzc2FnZVwiLFxuICAgICAgICBcImxvY2F0aW9uXCIsXG4gICAgICAgIFwibG9jYXRpb25PZlwiLFxuICAgICAgICBcIm9iamVjdE9mXCIsXG4gICAgICAgIFwib3JpZ2luT2ZcIixcbiAgICAgICAgXCJwcmVzZW5jZVwiLFxuICAgICAgICBcInByZXZpZXdcIixcbiAgICAgICAgXCJwcmV2aWV3T2ZcIixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBcInByb3ZpZGVyT2ZcIixcbiAgICAgICAgXCJwdWJsaXNoZWRcIixcbiAgICAgICAgXCJyYXRpbmdcIixcbiAgICAgICAgXCJyZWxhdGlvbnNoaXBcIixcbiAgICAgICAgXCJyZXN1bHRPZlwiLFxuICAgICAgICBcInJlcGxpZXNcIixcbiAgICAgICAgXCJyb2xlXCIsXG4gICAgICAgIFwic2NvcGVcIixcbiAgICAgICAgXCJzY29wZU9mXCIsXG4gICAgICAgIFwic3RhcnRUaW1lXCIsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRvcGljXCIsXG4gICAgICAgIFwidGFnXCIsXG4gICAgICAgIFwidGFnT2ZcIixcbiAgICAgICAgXCJ0YXJnZXRPZlwiLFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgIFwidGl0bGVNYXBcIixcbiAgICAgICAgXCJ1cGRhdGVkXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwieG1wcDpzdGFuemEtaWRcIixcbiAgICBdLFxufTtcbmNvbnN0IHJlbmFtZSA9IHtcbiAgICBcIkBpZFwiOiBcImlkXCIsXG4gICAgXCJAdHlwZVwiOiBcInR5cGVcIixcbiAgICB2ZXJiOiBcInR5cGVcIixcbiAgICBkaXNwbGF5TmFtZTogXCJuYW1lXCIsXG4gICAgb2JqZWN0VHlwZTogXCJ0eXBlXCIsXG4gICAgcGxhdGZvcm06IFwiY29udGV4dFwiLFxufTtcbmNvbnN0IGV4cGFuZCA9IHtcbiAgICBhY3Rvcjoge1xuICAgICAgICBwcmltYXJ5OiBcImlkXCIsXG4gICAgICAgIHByb3BzOiBiYXNlUHJvcHMsXG4gICAgfSxcbiAgICB0YXJnZXQ6IHtcbiAgICAgICAgcHJpbWFyeTogXCJpZFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG4gICAgb2JqZWN0OiB7XG4gICAgICAgIHByaW1hcnk6IFwiY29udGVudFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG59O1xuXG50eXBlIEN1c3RvbVByb3BzID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCBzdHJpbmdbXTtcbn07XG5cbmNvbnN0IG9ianMgPSBuZXcgTWFwKCk7XG5jb25zdCBjdXN0b21Qcm9wczogQ3VzdG9tUHJvcHMgPSB7fTtcblxubGV0IGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID0gZmFsc2U7XG5sZXQgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPSB0cnVlO1xubGV0IHNwZWNpYWxPYmpzID0gW107IC8vIHRoZSBvYmplY3RzIGRvbid0IGdldCByZWplY3RlZCBmb3IgYmFkIHByb3BzXG5cbmZ1bmN0aW9uIG1hdGNoZXNDdXN0b21Qcm9wKHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoY3VzdG9tUHJvcHNbdHlwZV0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gY3VzdG9tUHJvcHNbdHlwZV0gYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChvYmouaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZW5hbWVQcm9wPFQ+KG9iajogVCwga2V5OiBzdHJpbmcpOiBUIHtcbiAgICBvYmpbcmVuYW1lW2tleV1dID0gb2JqW2tleV07XG4gICAgZGVsZXRlIG9ialtrZXldO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0PFQ+KHR5cGU6IHN0cmluZywgaW5jb21pbmdPYmo6IFQsIHJlcXVpcmVJZCA9IGZhbHNlKSB7XG4gICAgLy8gSW5wdXQgdmFsaWRhdGlvbiB3aXRoIGNsZWFyIGVycm9yIG1lc3NhZ2VzXG4gICAgaWYgKGluY29taW5nT2JqID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBpcyBudWxsLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaW5jb21pbmdPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiB0aGUgXCIke3R5cGV9XCIgcHJvcGVydHkgaXMgdW5kZWZpbmVkLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluY29taW5nT2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSByZWNlaXZlZCBzdHJpbmcgXCIke2luY29taW5nT2JqfVwiIGJ1dCBleHBlY3RlZCBhbiBvYmplY3QuIFVzZTogeyBpZDogXCIke2luY29taW5nT2JqfVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5jb21pbmdPYmogIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShpbmNvbWluZ09iaikpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gQXJyYXkuaXNBcnJheShpbmNvbWluZ09iailcbiAgICAgICAgICAgID8gXCJhcnJheVwiXG4gICAgICAgICAgICA6IHR5cGVvZiBpbmNvbWluZ09iajtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRWYWx1ZSA9IFN0cmluZyhpbmNvbWluZ09iaik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIG9iamVjdCwgcmVjZWl2ZWQgJHtyZWNlaXZlZFR5cGV9ICgke3JlY2VpdmVkVmFsdWV9KS4gRXhhbXBsZTogeyBpZDogXCJ1c2VyQGV4YW1wbGUuY29tXCIsIHR5cGU6IFwicGVyc29uXCIgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZSAnaWQnIHByb3BlcnR5IHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgKGUuZy4sIE9iamVjdC5jcmVhdGUoKSlcbiAgICBjb25zdCBvYmogPSBpbmNvbWluZ09iaiBhcyBBY3Rpdml0eU9iamVjdDtcbiAgICBpZiAocmVxdWlyZUlkICYmICFvYmouaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogdGhlIFwiJHt0eXBlfVwiIHByb3BlcnR5IHJlcXVpcmVzIGFuICdpZCcgcHJvcGVydHkuIEV4YW1wbGU6IHsgaWQ6IFwidXNlckBleGFtcGxlLmNvbVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVua25vd25LZXlzID0gT2JqZWN0LmtleXMoaW5jb21pbmdPYmopLmZpbHRlcihcbiAgICAgICAgKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWJhc2VQcm9wc1t0eXBlXS5pbmNsdWRlcyhrZXkpO1xuICAgICAgICB9LFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiB1bmtub3duS2V5cykge1xuICAgICAgICBsZXQgYW86IEFjdGl2aXR5T2JqZWN0ID0gaW5jb21pbmdPYmogYXMgQWN0aXZpdHlPYmplY3Q7XG4gICAgICAgIGlmIChyZW5hbWVba2V5XSkge1xuICAgICAgICAgICAgLy8gcmVuYW1lIHByb3BlcnR5IGluc3RlYWQgb2YgZmFpbFxuICAgICAgICAgICAgYW8gPSByZW5hbWVQcm9wKGFvLCBrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hlc0N1c3RvbVByb3AoYW8udHlwZSwga2V5KSkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHByb3BlcnR5IG1hdGNoZXMsIGNvbnRpbnVlXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3BlY2lhbE9ianMuaW5jbHVkZXMoYW8udHlwZSkpIHtcbiAgICAgICAgICAgIC8vIG5vdCBkZWZpbmVkIGFzIGEgc3BlY2lhbCBwcm9wXG4gICAgICAgICAgICAvLyBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdCwgc28gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFvKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVmFsdWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBhb1trZXldID09PSBcInN0cmluZ1wiID8gYFwiJHthb1trZXldfVwiYCA6IFN0cmluZyhhb1trZXldKTtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHByb3BlcnR5IFwiJHtrZXl9XCIgd2l0aCB2YWx1ZSAke3JlY2VpdmVkVmFsdWV9IGlzIG5vdCBhbGxvd2VkIG9uIHRoZSBcIiR7dHlwZX1cIiBvYmplY3Qgb2YgdHlwZSBcIiR7YW8udHlwZX1cIi5gO1xuICAgICAgICAgICAgaWYgKGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlUHJvcHMob2JqOiBBY3Rpdml0eU9iamVjdCk6IEFjdGl2aXR5T2JqZWN0IHtcbiAgICAvLyBlbnN1cmUgdGhlIG5hbWUgcHJvcGVydHksIHdoaWNoIGNhbiBnZW5lcmFsbHkgYmUgaW5mZXJyZWQgZnJvbSB0aGUgaWRcbiAgICAvLyBuYW1lID0gb2JqLm1hdGNoKC8oPyg/XFx3Kyk6XFwvXFwvKSg/Oi4rQCk/KC4rPykoPzpcXC98JCkvKVsxXVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFN0cmVhbShtZXRhOiBBY3Rpdml0eVN0cmVhbSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGEpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0YVtrZXldID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzdHJlYW1ba2V5XSA9IG9ianMuZ2V0KG1ldGFba2V5XSkgfHwgbWV0YVtrZXldO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWV0YVtrZXldKSkge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWV0YVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW1ba2V5XS5wdXNoKG9ianMuZ2V0KGVudHJ5KSB8fCBlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBtZXRhW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGV4cGFuZCBzdHJpbmcgaW50byBvYmplY3RzIGlmIHRoZXkgYXJlIGluIHRoZSBleHBhbmQgbGlzdFxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV4cGFuZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJlYW1ba2V5XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gZXhwYW5kW2tleV0ucHJpbWFyeTtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgb2JqW2lkeF0gPSBzdHJlYW1ba2V5XTtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gb2JqO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmZ1bmN0aW9uIFN0cmVhbShcbiAgICBtZXRhOiBBY3Rpdml0eVN0cmVhbSxcbik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3QgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4ge1xuICAgIHZhbGlkYXRlT2JqZWN0KFwic3RyZWFtXCIsIG1ldGEpO1xuICAgIGlmICh0eXBlb2YgbWV0YS5vYmplY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFsaWRhdGVPYmplY3QoXCJvYmplY3RcIiwgbWV0YS5vYmplY3QpO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW0gPSBleHBhbmRTdHJlYW0obWV0YSk7XG4gICAgZWUuZW1pdChcImFjdGl2aXR5LXN0cmVhbVwiLCBzdHJlYW0pO1xuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlPYmplY3RNYW5hZ2VyIHtcbiAgICBjcmVhdGUob2JqOiB1bmtub3duKTogdW5rbm93bjtcbiAgICBkZWxldGUoaWQ6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgbGlzdCgpOiBJdGVyYWJsZUl0ZXJhdG9yPHVua25vd24+O1xuICAgIGdldChpZDogc3RyaW5nLCBleHBhbmQ/OiBib29sZWFuKTogdW5rbm93bjtcbn1cblxuY29uc3QgX09iamVjdDogQWN0aXZpdHlPYmplY3RNYW5hZ2VyID0ge1xuICAgIGNyZWF0ZTogKG9iajogQWN0aXZpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRhdGVPYmplY3QoXCJvYmplY3RcIiwgb2JqLCB0cnVlKTsgLy8gcmVxdWlyZSBJRCBmb3IgT2JqZWN0LmNyZWF0ZSgpXG4gICAgICAgIGNvbnN0IGFvID0gZW5zdXJlUHJvcHMob2JqKTtcbiAgICAgICAgb2Jqcy5zZXQoYW8uaWQsIGFvKTtcbiAgICAgICAgZWUuZW1pdChcImFjdGl2aXR5LW9iamVjdC1jcmVhdGVcIiwgYW8pO1xuICAgICAgICByZXR1cm4gYW87XG4gICAgfSxcblxuICAgIGRlbGV0ZTogKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG9ianMuZGVsZXRlKGlkKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZWUuZW1pdChcImFjdGl2aXR5LW9iamVjdC1kZWxldGVcIiwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGdldDogKGlkLCBleHBhbmQpID0+IHtcbiAgICAgICAgbGV0IG9iaiA9IG9ianMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIGlmICghZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqID0geyBpZDogaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5zdXJlUHJvcHMob2JqKTtcbiAgICB9LFxuXG4gICAgbGlzdDogKCk6IEl0ZXJhYmxlSXRlcmF0b3I8dW5rbm93bj4gPT4gb2Jqcy5rZXlzKCksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFTRmFjdG9yeU9wdGlvbnMge1xuICAgIHNwZWNpYWxPYmpzPzogQXJyYXk8c3RyaW5nPjtcbiAgICBmYWlsT25Vbmtub3duT2JqZWN0UHJvcGVydGllcz86IGJvb2xlYW47XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM/OiBib29sZWFuO1xuICAgIGN1c3RvbVByb3BzPzogQ3VzdG9tUHJvcHM7XG59XG5cbnR5cGUgRXZlbnRDYWxsYmFjayA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVNNYW5hZ2VyIHtcbiAgICBTdHJlYW0obWV0YTogdW5rbm93bik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3Q7XG4gICAgT2JqZWN0OiBBY3Rpdml0eU9iamVjdE1hbmFnZXI7XG4gICAgb24oZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG4gICAgb25jZShldmVudDogc3RyaW5nLCBmdW5jOiBFdmVudENhbGxiYWNrKTogdm9pZDtcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBU0ZhY3Rvcnkob3B0czogQVNGYWN0b3J5T3B0aW9ucyA9IHt9KTogQVNNYW5hZ2VyIHtcbiAgICBzcGVjaWFsT2JqcyA9IG9wdHM/LnNwZWNpYWxPYmpzIHx8IFtdO1xuICAgIGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID1cbiAgICAgICAgdHlwZW9mIG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgICA/IG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXNcbiAgICAgICAgICAgIDogZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM7XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPVxuICAgICAgICB0eXBlb2Ygb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcyA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICAgID8gb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllc1xuICAgICAgICAgICAgOiB3YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcztcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKG9wdHMuY3VzdG9tUHJvcHMgfHwge30pKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jdXN0b21Qcm9wc1twcm9wTmFtZV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGN1c3RvbVByb3BzW3Byb3BOYW1lXSA9IG9wdHMuY3VzdG9tUHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgU3RyZWFtOiBTdHJlYW0sXG4gICAgICAgIE9iamVjdDogX09iamVjdCxcbiAgICAgICAgb246IChldmVudCwgZnVuYykgPT4gZWUub24oZXZlbnQsIGZ1bmMpLFxuICAgICAgICBvbmNlOiAoZXZlbnQsIGZ1bmMpID0+IGVlLm9uY2UoZXZlbnQsIGZ1bmMpLFxuICAgICAgICBvZmY6IChldmVudCwgZnVuY05hbWUpID0+IGVlLm9mZihldmVudCwgZnVuY05hbWUpLFxuICAgIH0gYXMgQVNNYW5hZ2VyO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDxleHBsYW5hdGlvbj5cbigoZ2xvYmFsOiBhbnkpID0+IHtcbiAgICBnbG9iYWwuQVNGYWN0b3IgPSBBU0ZhY3Rvcnk7XG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDoge30pO1xuIiwKICAgICJpbXBvcnQgeyBBU0ZhY3RvcnksIHR5cGUgQVNNYW5hZ2VyIH0gZnJvbSBcIkBzb2NrZXRodWIvYWN0aXZpdHktc3RyZWFtc1wiO1xuaW1wb3J0IHR5cGUge1xuICAgIEFjdGl2aXR5T2JqZWN0LFxuICAgIEFjdGl2aXR5U3RyZWFtLFxuICAgIEJhc2VBY3Rpdml0eU9iamVjdCxcbn0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiO1xuaW1wb3J0IHR5cGUgeyBTb2NrZXQgfSBmcm9tIFwic29ja2V0LmlvLWNsaWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TWFwcGluZyB7XG4gICAgY3JlZGVudGlhbHM6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBcImFjdGl2aXR5LW9iamVjdFwiOiBNYXA8c3RyaW5nLCBCYXNlQWN0aXZpdHlPYmplY3Q+O1xuICAgIGNvbm5lY3Q6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBqb2luOiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG59XG5cbmludGVyZmFjZSBDdXN0b21FbWl0dGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBfZW1pdChzOiBzdHJpbmcsIG86IHVua25vd24sIGM/OiB1bmtub3duKTogdm9pZDtcbiAgICBjb25uZWN0KCk6IHZvaWQ7XG4gICAgZGlzY29ubmVjdCgpOiB2b2lkO1xuICAgIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNvY2tldGh1YkNsaWVudCAtIENsaWVudCBsaWJyYXJ5IGZvciBTb2NrZXRodWIgcHJvdG9jb2wgZ2F0ZXdheVxuICpcbiAqIEEgSmF2YVNjcmlwdCBjbGllbnQgZm9yIGNvbm5lY3RpbmcgdG8gU29ja2V0aHViIHNlcnZlcnMuIFByb3ZpZGVzIGEgaGlnaC1sZXZlbFxuICogQVBJIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIG92ZXIgU29ja2V0LklPLCB3aXRoXG4gKiBhdXRvbWF0aWMgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVjb25uZWN0aW9uIGhhbmRsaW5nLlxuICpcbiAqIFNvY2tldGh1YiBhY3RzIGFzIGEgcHJvdG9jb2wgZ2F0ZXdheSwgdHJhbnNsYXRpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIGludG9cbiAqIHZhcmlvdXMgcHJvdG9jb2xzIChYTVBQLCBJUkMsIFJTUywgZXRjLikuIFRoaXMgY2xpZW50IGhhbmRsZXMgdGhlIGNvbW11bmljYXRpb25cbiAqIHdpdGggdGhlIFNvY2tldGh1YiBzZXJ2ZXIsIGluY2x1ZGluZyBjcmVkZW50aWFsIG1hbmFnZW1lbnQsIGNvbm5lY3Rpb24gc3RhdGUsXG4gKiBhbmQgYXV0b21hdGljIHJlY29ubmVjdGlvbi5cbiAqXG4gKiAjIyBBdXRvbWF0aWMgUmVjb25uZWN0aW9uICYgU3RhdGUgUmVwbGF5XG4gKlxuICogVGhpcyBjbGllbnQgYXV0b21hdGljYWxseSBoYW5kbGVzIHRyYW5zaWVudCBuZXR3b3JrIGRpc2Nvbm5lY3Rpb25zIGJ5IHN0b3JpbmdcbiAqIGNvbm5lY3Rpb24gc3RhdGUgaW4gbWVtb3J5IGFuZCByZXBsYXlpbmcgaXQgd2hlbiB0aGUgc29ja2V0IHJlY29ubmVjdHMuXG4gKlxuICogIyMjIFNlY3VyaXR5IE1vZGVsXG4gKlxuICogKipTdG9yYWdlIExvY2F0aW9uOioqXG4gKiAtIEFsbCBjcmVkZW50aWFscyBhbmQgc3RhdGUgYXJlIHN0b3JlZCBPTkxZIGluIEphdmFTY3JpcHQgbWVtb3J5IChoZWFwKVxuICogLSBOb3RoaW5nIGlzIHBlcnNpc3RlZCB0byBsb2NhbFN0b3JhZ2UsIHNlc3Npb25TdG9yYWdlLCBjb29raWVzLCBvciBkaXNrXG4gKiAtIE1lbW9yeSBpcyBjbGVhcmVkIHdoZW4gdGhlIGJyb3dzZXIgdGFiIGNsb3NlcyBvciBwYWdlIHJlZnJlc2hlc1xuICpcbiAqICoqUmVwbGF5IFRyaWdnZXJzOioqXG4gKiAtIEF1dG9tYXRpYyByZXBsYXkgb2NjdXJzIG9uIFNvY2tldC5JTyByZWNvbm5lY3Rpb24gZXZlbnRzXG4gKiAtIFR5cGljYWxseSB0cmlnZ2VyZWQgYnkgYnJpZWYgbmV0d29yayBpbnRlcnJ1cHRpb25zIChXaUZpIHN3aXRjaGluZywgbW9iaWxlIG5ldHdvcmsgYmxpcHMpXG4gKiAtIERvZXMgTk9UIG9jY3VyIG9uIHBhZ2UgcmVmcmVzaCAobmV3IFNvY2tldGh1YkNsaWVudCBpbnN0YW5jZSA9IGVtcHR5IHN0YXRlKVxuICpcbiAqICoqU2VydmVyIFJlc3RhcnQgQmVoYXZpb3I6KipcbiAqIC0gSWYgc2VydmVyIHJlc3RhcnRzLCBjbGllbnQgc29ja2V0IHdpbGwgcmVjb25uZWN0IGFuZCByZXBsYXkgY3JlZGVudGlhbHNcbiAqIC0gU2VydmVyIG11c3QgaGFuZGxlIHJlcGxheWVkIGNyZWRlbnRpYWxzIGFwcHJvcHJpYXRlbHkgKHZhbGlkYXRlLCByZWplY3Qgc3RhbGUgc2Vzc2lvbnMsIGV0Yy4pXG4gKiAtIEFwcGxpY2F0aW9ucyBzaG91bGQgaW1wbGVtZW50IHByb3BlciBzZXNzaW9uIHZhbGlkYXRpb24gc2VydmVyLXNpZGVcbiAqXG4gKiAqKkxpZmV0aW1lOioqXG4gKiAtIENyZWRlbnRpYWxzIGV4aXN0IG9ubHkgZHVyaW5nIHRoZSBicm93c2VyIHRhYidzIGxpZmV0aW1lXG4gKiAtIENsZWFyZWQgb24gcGFnZSByZWxvYWQsIHRhYiBjbG9zZSwgb3IgbWFudWFsIGRpc2Nvbm5lY3RcbiAqIC0gTm90IGFjY2Vzc2libGUgYWNyb3NzIHRhYnMgb3IgYWZ0ZXIgYnJvd3NlciByZXN0YXJ0XG4gKlxuICogKipXaGF0IEdldHMgUmVwbGF5ZWQ6KipcbiAqIC0gQ3JlZGVudGlhbHMgKHVzZXJuYW1lL3Bhc3N3b3JkL3Rva2VucyBzZW50IHZpYSBjcmVkZW50aWFscyBldmVudClcbiAqIC0gQWN0aXZpdHkgT2JqZWN0cyAoYWN0b3IgZGVmaW5pdGlvbnMpXG4gKiAtIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICogLSBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgam9pbnMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBjbGllbnRcbiAqIGNvbnN0IHNvY2tldCA9IGlvKCdodHRwOi8vbG9jYWxob3N0OjEwNTUwJyk7XG4gKiBjb25zdCBjbGllbnQgPSBuZXcgU29ja2V0aHViQ2xpZW50KHNvY2tldCk7XG4gKlxuICogLy8gU2VuZCBjcmVkZW50aWFscyAtIHRoZXNlIHdpbGwgYmUgcmVwbGF5ZWQgb24gcmVjb25uZWN0aW9uXG4gKiBjbGllbnQuc29ja2V0LmVtaXQoJ2NyZWRlbnRpYWxzJywge1xuICogICBhY3RvcjogJ3VzZXJAZXhhbXBsZS5jb20nLFxuICogICBvYmplY3Q6IHsgdXNlcm5hbWU6ICd1c2VyJywgcGFzc3dvcmQ6ICdwYXNzJyB9XG4gKiB9KTtcbiAqXG4gKiAvLyBJZiBuZXR3b3JrIGRpc2Nvbm5lY3RzIGFuZCByZWNvbm5lY3RzLCBjcmVkZW50aWFscyBhcmUgYXV0b21hdGljYWxseSByZXBsYXllZFxuICogLy8gSWYgcGFnZSByZWZyZXNoZXMsIGNyZWRlbnRpYWxzIGFyZSBsb3N0IGFuZCBtdXN0IGJlIHJlc2VudFxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvY2tldGh1YkNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW4tbWVtb3J5IHN0b3JhZ2UgZm9yIGNsaWVudCBzdGF0ZSB0aGF0IHNob3VsZCBiZSByZXBsYXllZCBvbiByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBTZWN1cml0eTogU3RvcmVkIE9OTFkgaW4gSmF2YVNjcmlwdCBoZWFwIG1lbW9yeS4gTmV2ZXIgcGVyc2lzdGVkIHRvIGRpc2ssXG4gICAgICogbG9jYWxTdG9yYWdlLCBvciBhbnkgcGVybWFuZW50IHN0b3JhZ2UuIENsZWFyZWQgb24gcGFnZSByZWxvYWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudHM6IEV2ZW50TWFwcGluZyA9IHtcbiAgICAgICAgY3JlZGVudGlhbHM6IG5ldyBNYXAoKSxcbiAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIjogbmV3IE1hcCgpLFxuICAgICAgICBjb25uZWN0OiBuZXcgTWFwKCksXG4gICAgICAgIGpvaW46IG5ldyBNYXAoKSxcbiAgICB9O1xuICAgIHByaXZhdGUgX3NvY2tldDogU29ja2V0O1xuICAgIHB1YmxpYyBBY3Rpdml0eVN0cmVhbXM6IEFTTWFuYWdlcjtcbiAgICBwdWJsaWMgc29ja2V0OiBDdXN0b21FbWl0dGVyO1xuICAgIHB1YmxpYyBkZWJ1ZyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb2NrZXQ6IFNvY2tldCkge1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29ja2V0aHViQ2xpZW50IHJlcXVpcmVzIGEgc29ja2V0LmlvIGluc3RhbmNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvY2tldCA9IHNvY2tldDtcblxuICAgICAgICB0aGlzLnNvY2tldCA9IHRoaXMuY3JlYXRlUHVibGljRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU29ja2V0SU9IYW5kbGVycygpO1xuICAgICAgICB0aGlzLmluaXRBY3Rpdml0eVN0cmVhbXMoKTtcblxuICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5vbihcbiAgICAgICAgICAgIFwiYWN0aXZpdHktb2JqZWN0LWNyZWF0ZVwiLFxuICAgICAgICAgICAgKG9iajogQWN0aXZpdHlPYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBzb2NrZXQuZW1pdChcImFjdGl2aXR5LW9iamVjdFwiLCBvYmosIChlcnI6IG5ldmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gY3JlYXRlIGFjdGl2aXR5LW9iamVjdCBcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRBY3Rpdml0eU9iamVjdChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHNvY2tldC5vbihcImFjdGl2aXR5LW9iamVjdFwiLCAob2JqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5PYmplY3QuY3JlYXRlKG9iaik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRBY3Rpdml0eVN0cmVhbXMoKSB7XG4gICAgICAgIHRoaXMuQWN0aXZpdHlTdHJlYW1zID0gQVNGYWN0b3J5KHsgc3BlY2lhbE9ianM6IFtcImNyZWRlbnRpYWxzXCJdIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHN0b3JlZCBjcmVkZW50aWFscyB0byBwcmV2ZW50IGF1dG9tYXRpYyByZXBsYXkgb24gcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgc3RvcmVkIGNyZWRlbnRpYWxzIGZyb20gbWVtb3J5LiBVc2VmdWwgZm9yXG4gICAgICogc2VjdXJpdHktc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8gcHJldmVudCBhdXRvbWF0aWMgY3JlZGVudGlhbFxuICAgICAqIHJlcGxheSB3aGVuIHRoZSBzb2NrZXQgcmVjb25uZWN0cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIENsZWFyIGNyZWRlbnRpYWxzIG9uIGRpc2Nvbm5lY3RcbiAgICAgKiBzYy5zb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICogICBzYy5jbGVhckNyZWRlbnRpYWxzKCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyQ3JlZGVudGlhbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQdWJsaWNFbWl0dGVyKCk6IEN1c3RvbUVtaXR0ZXIge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCkgYXMgQ3VzdG9tRW1pdHRlcjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHNvY2tldC5fZW1pdCA9IHNvY2tldC5lbWl0O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc29ja2V0LmVtaXQgPSAoZXZlbnQsIGNvbnRlbnQsIGNhbGxiYWNrKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDcmVkZW50aWFscyhjb250ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09IFwiYWN0aXZpdHktb2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QWN0aXZpdHlPYmplY3QoY29udGVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSBcIm1lc3NhZ2VcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRNZXNzYWdlKGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmVtaXQoZXZlbnQgYXMgc3RyaW5nLCBjb250ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgc29ja2V0LmRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgICAgICBzb2NrZXQuY29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5jb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudEFjdGl2aXR5T2JqZWN0KGNvbnRlbnQ6IEFjdGl2aXR5T2JqZWN0KSB7XG4gICAgICAgIGlmIChjb250ZW50LmlkKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50c1tcImFjdGl2aXR5LW9iamVjdFwiXS5zZXQoY29udGVudC5pZCwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50Q3JlZGVudGlhbHMoY29udGVudDogQWN0aXZpdHlTdHJlYW0pIHtcbiAgICAgICAgaWYgKGNvbnRlbnQub2JqZWN0ICYmIGNvbnRlbnQub2JqZWN0LnR5cGUgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPVxuICAgICAgICAgICAgICAgIGNvbnRlbnQuYWN0b3IuaWQgfHwgKGNvbnRlbnQuYWN0b3IgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY3JlZGVudGlhbHMuc2V0KGtleSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50TWVzc2FnZShjb250ZW50OiBCYXNlQWN0aXZpdHlPYmplY3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zb2NrZXQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWl0aGVyIHN0b3JlcyBvciBkZWxldGUgdGhlIHNwZWNpZmllZCBjb250ZW50IG9udG8gdGhlIHN0b3JlZEpvaW5zIG1hcCxcbiAgICAgICAgLy8gZm9yIHJlcGx5IG9uY2Ugd2UncmUgYmFjayBvbmxpbmUuXG4gICAgICAgIGNvbnN0IGtleSA9IFNvY2tldGh1YkNsaWVudC5nZXRLZXkoY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09IFwiam9pblwiIHx8IGNvbnRlbnQudHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzW2NvbnRlbnQudHlwZV0uc2V0KGtleSwgY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImxlYXZlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmpvaW4uZGVsZXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImRpc2Nvbm5lY3RcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEtleShjb250ZW50OiBBY3Rpdml0eVN0cmVhbSkge1xuICAgICAgICBjb25zdCBhY3RvciA9IGNvbnRlbnQuYWN0b3I/LmlkIHx8IGNvbnRlbnQuYWN0b3I7XG4gICAgICAgIGlmICghYWN0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgYWN0b3IgcHJvcGVydHkgbm90IHByZXNlbnQgZm9yIG1lc3NhZ2UgdHlwZTogJHtjb250ZW50Py50eXBlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA/IGNvbnRlbnQudGFyZ2V0LmlkIHx8IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHthY3Rvcn0tJHt0YXJnZXR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZyhtc2c6IHN0cmluZywgb2JqPzogdW5rbm93bikge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnLCBvYmopO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclNvY2tldElPSGFuZGxlcnMoKSB7XG4gICAgICAgIC8vIG1pZGRsZXdhcmUgZm9yIGV2ZW50cyB3aGljaCBkb24ndCBkZWFsIGluIEFTIG9iamVjdHNcbiAgICAgICAgY29uc3QgY2FsbEhhbmRsZXIgPSAoZXZlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jIChvYmo/OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBcImNvbm5lY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5pZCA9IHRoaXMuX3NvY2tldC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQXV0b21hdGljIHN0YXRlIHJlcGxheSBvbiByZWNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIFdoZW4gU29ja2V0LklPIHJlY29ubmVjdHMgYWZ0ZXIgYSBuZXR3b3JrIGludGVycnVwdGlvbiwgd2UgYXV0b21hdGljYWxseVxuICAgICAgICAgICAgICAgICAgICAgKiByZXBsYXkgYWxsIHN0b3JlZCBzdGF0ZSB0byByZXN0b3JlIHRoZSBzZXNzaW9uIHNlYW1sZXNzbHk6XG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIDEuIEFjdGl2aXR5IE9iamVjdHMgKGFjdG9yIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgKiAyLiBDcmVkZW50aWFscyAoYXV0aGVudGljYXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAqIDMuIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgKiA0LiBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgbWVtYmVyc2hpcHMpXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIFRoaXMgYWxsb3dzIHRoZSBjbGllbnQgdG8gc3Vydml2ZSBicmllZiBuZXR3b3JrIGJsaXBzIHdpdGhvdXQgcmVxdWlyaW5nXG4gICAgICAgICAgICAgICAgICAgICAqIHVzZXIgaW50ZXJ2ZW50aW9uLiBIb3dldmVyLCB0aGUgc2VydmVyIG11c3QgcHJvcGVybHkgdmFsaWRhdGUgcmVwbGF5ZWRcbiAgICAgICAgICAgICAgICAgICAgICogY3JlZGVudGlhbHMgYXMgdGhleSBtYXkgYmUgc3RhbGUgb3IgcmV2b2tlZC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW1wiYWN0aXZpdHktb2JqZWN0XCJdLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxheShcImNyZWRlbnRpYWxzXCIsIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBsYXkoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRzLmNvbm5lY3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxheShcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudHMuam9pbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gXCJkaXNjb25uZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KGV2ZW50LCBvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyByZWdpc3RlciBmb3IgZXZlbnRzIHRoYXQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiBjb25uZWN0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJjb25uZWN0XCIsIGNhbGxIYW5kbGVyKFwiY29ubmVjdFwiKSk7XG4gICAgICAgIHRoaXMuX3NvY2tldC5vbihcImNvbm5lY3RfZXJyb3JcIiwgY2FsbEhhbmRsZXIoXCJjb25uZWN0X2Vycm9yXCIpKTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiZGlzY29ubmVjdFwiLCBjYWxsSGFuZGxlcihcImRpc2Nvbm5lY3RcIikpO1xuXG4gICAgICAgIC8vIHVzZSBhcyBtaWRkbGV3YXJlIHRvIHJlY2VpdmUgaW5jb21pbmcgU29ja2V0aHViIG1lc3NhZ2VzIGFuZCB1bnBhY2sgdGhlbVxuICAgICAgICAvLyB1c2luZyB0aGUgQWN0aXZpdHlTdHJlYW1zIGxpYnJhcnkgYmVmb3JlIHBhc3NpbmcgdGhlbSBhbG9uZyB0byB0aGUgYXBwLlxuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJtZXNzYWdlXCIsIChvYmopID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwibWVzc2FnZVwiLCB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0ob2JqKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEFjdGl2aXR5U3RyZWFtIHdpdGggYSB2YWxpZCBhY3Rvci5pZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhc0FjdG9ySWQoXG4gICAgICAgIG9iajogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCxcbiAgICApOiBvYmogaXMgQWN0aXZpdHlTdHJlYW0ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJhY3RvclwiIGluIG9iaiAmJlxuICAgICAgICAgICAgb2JqLmFjdG9yICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBcImlkXCIgaW4gb2JqLmFjdG9yICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yLmlkID09PSBcInN0cmluZ1wiXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGF5cyBwcmV2aW91c2x5IHNlbnQgZXZlbnRzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgU29ja2V0LklPIGNvbm5lY3Rpb24gaXNcbiAgICAgKiByZS1lc3RhYmxpc2hlZCBhZnRlciBhIHRyYW5zaWVudCBuZXR3b3JrIGludGVycnVwdGlvbi4gSXQgcmVzZW5kc1xuICAgICAqIGNyZWRlbnRpYWxzIGFuZCBjb25uZWN0aW9uIHN0YXRlIHNvIHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBtYW51YWxseVxuICAgICAqIHJlLWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gY2hhbm5lbHMuXG4gICAgICpcbiAgICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICAgKiAtIE9ubHkgcmVwbGF5cyBldmVudHMgc3RvcmVkIGluIG1lbW9yeSBkdXJpbmcgdGhpcyBzZXNzaW9uXG4gICAgICogLSBEb2VzIG5vdCByZXBsYXkgYWZ0ZXIgcGFnZSByZWZyZXNoIChtZW1vcnkgY2xlYXJlZClcbiAgICAgKiAtIFNlcnZlciBzaG91bGQgdmFsaWRhdGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgKG1heSBiZSBzdGFsZS9yZXZva2VkKVxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgLSBFdmVudCBuYW1lIHRvIGVtaXQgKFwiY3JlZGVudGlhbHNcIiwgXCJhY3Rpdml0eS1vYmplY3RcIiwgXCJtZXNzYWdlXCIpXG4gICAgICogQHBhcmFtIGFzTWFwIC0gTWFwIG9mIGV2ZW50cyB0byByZXBsYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcGxheShcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBhc01hcDogTWFwPHN0cmluZywgQWN0aXZpdHlTdHJlYW0gfCBCYXNlQWN0aXZpdHlPYmplY3Q+LFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgLy8gYWN0aXZpdHktb2JqZWN0cyBhcmUgcmF3IG9iamVjdHMsIGRvbid0IHBhc3MgdGhyb3VnaCBTdHJlYW0oKVxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgZGVzaWduZWQgZm9yIGFjdGl2aXR5IHN0cmVhbXMgd2l0aCBhY3Rvci9vYmplY3Qgc3RydWN0dXJlXG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2aXR5T2JqZWN0ID0gbmFtZSA9PT0gXCJhY3Rpdml0eS1vYmplY3RcIjtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkT2JqID0gaXNBY3Rpdml0eU9iamVjdFxuICAgICAgICAgICAgICAgID8gb2JqXG4gICAgICAgICAgICAgICAgOiB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0ob2JqKTtcbiAgICAgICAgICAgIGxldCBpZCA9IGV4cGFuZGVkT2JqPy5pZDtcbiAgICAgICAgICAgIGlmICghaXNBY3Rpdml0eU9iamVjdCAmJiB0aGlzLmhhc0FjdG9ySWQoZXhwYW5kZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0b3IgPSAoZXhwYW5kZWRPYmogYXMgQWN0aXZpdHlTdHJlYW0pLmFjdG9yO1xuICAgICAgICAgICAgICAgIC8vIGFjdG9yIGNhbiBiZSBhIHN0cmluZyAoSklEKSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpZCBmaWVsZFxuICAgICAgICAgICAgICAgIGlkID0gdHlwZW9mIGFjdG9yID09PSBcInN0cmluZ1wiID8gYWN0b3IgOiBhY3Rvci5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXlpbmcgJHtuYW1lfSBmb3IgJHtpZH1gKTtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KG5hbWUsIGV4cGFuZGVkT2JqKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiA8ZXhwbGFuYXRpb24+XG4oKGdsb2JhbDogYW55KSA9PiB7XG4gICAgZ2xvYmFsLlNvY2tldGh1YkNsaWVudCA9IFNvY2tldGh1YkNsaWVudDtcbiAgICAvLyBAdHMtaWdub3JlXG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDoge30pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIm92QkFFQSxJQUFJLEVBQU0sT0FBTyxVQUFVLGVBQ3ZCLEVBQVMsSUFTYixTQUFTLENBQU0sRUFBRyxFQVNsQixHQUFJLE9BQU8sUUFPVCxHQU5BLEVBQU8sVUFBWSxPQUFPLE9BQU8sSUFBSSxFQU1qQyxDQUFDLElBQUksRUFBTyxFQUFFLFVBQVcsRUFBUyxHQVl4QyxTQUFTLENBQUUsQ0FBQyxFQUFJLEVBQVMsRUFBTSxDQUM3QixLQUFLLEdBQUssRUFDVixLQUFLLFFBQVUsRUFDZixLQUFLLEtBQU8sR0FBUSxHQWN0QixTQUFTLENBQVcsQ0FBQyxFQUFTLEVBQU8sRUFBSSxFQUFTLEVBQU0sQ0FDdEQsR0FBSSxPQUFPLElBQU8sV0FDaEIsTUFBVSxVQUFVLGlDQUFpQyxFQUd2RCxJQUFJLEVBQVcsSUFBSSxFQUFHLEVBQUksR0FBVyxFQUFTLENBQUksRUFDOUMsRUFBTSxFQUFTLEVBQVMsRUFBUSxFQUVwQyxHQUFJLENBQUMsRUFBUSxRQUFRLEdBQU0sRUFBUSxRQUFRLEdBQU8sRUFBVSxFQUFRLGVBQy9ELFFBQUksQ0FBQyxFQUFRLFFBQVEsR0FBSyxHQUFJLEVBQVEsUUFBUSxHQUFLLEtBQUssQ0FBUSxFQUNoRSxPQUFRLFFBQVEsR0FBTyxDQUFDLEVBQVEsUUFBUSxHQUFNLENBQVEsRUFFM0QsT0FBTyxFQVVULFNBQVMsQ0FBVSxDQUFDLEVBQVMsRUFBSyxDQUNoQyxHQUFJLEVBQUUsRUFBUSxlQUFpQixFQUFHLEVBQVEsUUFBVSxJQUFJLEVBQ25ELFlBQU8sRUFBUSxRQUFRLEdBVTlCLFNBQVMsQ0FBWSxFQUFHLENBQ3RCLEtBQUssUUFB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QUFHLEVBSXBCLHdCQUF3QixFQUFHLENBRS9CLElBQU0sRUFBYyxDQUFDLElBQWtCLENBQ25DLE1BQU8sT0FBTyxJQUFrQixDQUM1QixHQUFJLElBQVUsVUFDVixLQUFLLE9BQU8sR0FBSyxLQUFLLFFBQVEsR0FDOUIsS0FBSyxPQUFPLFVBQVksR0FpQnhCLEtBQUssT0FDRCxrQkFDQSxLQUFLLE9BQU8sa0JBQ2hCLEVBQ0EsS0FBSyxPQUFPLGNBQWUsS0FBSyxPQUFPLFdBQVcsRUFDbEQsS0FBSyxPQUFPLFVBQVcsS0FBSyxPQUFPLE9BQU8sRUFDMUMsS0FBSyxPQUFPLFVBQVcsS0FBSyxPQUFPLElBQUksRUFDcEMsUUFBSSxJQUFVLGFBQ2pCLEtBQUssT0FBTyxVQUFZLEdBRTVCLEtBQUssT0FBTyxNQUFNLEVBQU8sQ0FBRyxJQUtwQyxLQUFLLFFBQVEsR0FBRyxVQUFXLEVBQVksU0FBUyxDQUFDLEVBQ2pELEtBQUssUUFBUSxHQUFHLGdCQUFpQixFQUFZLGVBQWUsQ0FBQyxFQUM3RCxLQUFLLFFBQVEsR0FBRyxhQUFjLEVBQVksWUFBWSxDQUFDLEVBSXZELEtBQUssUUFBUSxHQUFHLFVBQVcsQ0FBQyxJQUFRLENBQ2hDLEtBQUssT0FBTyxNQUFNLFVBQVcsS0FBSyxnQkFBZ0IsT0FBTyxDQUFHLENBQUMsRUFDaEUsRUFNRyxVQUFVLENBQ2QsRUFDcUIsQ0FDckIsTUFDSSxVQUFXLEdBQ1gsRUFBSSxRQUFVLE1BQ2QsT0FBTyxFQUFJLFFBQVUsVUFDckIsT0FBUSxFQUFJLE9BQ1osT0FBTyxFQUFJLE1BQU0sS0FBTyxTQW9CeEIsTUFBTSxDQUNWLEVBQ0EsRUFDRixDQUNFLFFBQVcsS0FBTyxFQUFNLE9BQU8sRUFBRyxDQUc5QixJQUFNLEVBQW1CLElBQVMsa0JBQzVCLEVBQWMsRUFDZCxFQUNBLEtBQUssZ0JBQWdCLE9BQU8sQ0FBRyxFQUNqQyxFQUFLLEdBQWEsR0FDdEIsR0FBSSxDQUFDLEdBQW9CLEtBQUssV0FBVyxDQUFXLEVBQUcsQ0FDbkQsSUFBTSxFQUFTLEVBQStCLE1BRTlDLEVBQUssT0FBTyxJQUFVLFNBQVcsRUFBUSxFQUFNLEdBRW5ELEtBQUssSUFBSSxhQUFhLFNBQVksR0FBSSxFQUN0QyxLQUFLLFFBQVEsS0FBSyxFQUFNLENBQVcsR0FHL0MsRUFHQyxDQUFDLElBQWdCLENBQ2QsRUFBTyxnQkFBa0IsSUFFMUIsT0FBTyxTQUFXLFNBQVcsT0FBUyxDQUFDLENBQUMiLAogICJkZWJ1Z0lkIjogIjBGMzg0QkE4MUZFQzIzMzc2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
|
20
|
+
`,z+=K.map(function(A,$){return H(this.line-K.length+$+1,M)+" "+A},this).join(`
|
|
21
|
+
`),z+=`
|
|
22
|
+
`+H("",M+V)+`^
|
|
23
|
+
`,z}else return z+" at index "+(this.index-1);function H(A,$){var T=String(A);return Array($-T.length+1).join(" ")+T}};function X(G,z,F){if(G instanceof Z)var K=G,F=z;else var K=Z.fromCompiled(G,z);this.grammar=K,this.options={keepHistory:!1,lexer:K.lexer||new Y};for(var j in F||{})this.options[j]=F[j];this.lexer=this.options.lexer,this.lexerState=void 0;var V=new W(K,0),M=this.table=[V];V.wants[K.start]=[],V.predict(K.start),V.process(),this.current=0}X.fail={},X.prototype.feed=function(G){var z=this.lexer;z.reset(G,this.lexerState);var F;while(!0){try{if(F=z.next(),!F)break}catch(S){var M=new W(this.grammar,this.current+1);this.table.push(M);var K=Error(this.reportLexerError(S));throw K.offset=this.current,K.token=S.token,K}var j=this.table[this.current];if(!this.options.keepHistory)delete this.table[this.current-1];var V=this.current+1,M=new W(this.grammar,V);this.table.push(M);var H=F.text!==void 0?F.text:F.value,A=z.constructor===Y?F.value:F,$=j.scannable;for(var T=$.length;T--;){var P=$[T],b=P.rule.symbols[P.dot];if(b.test?b.test(A):b.type?b.type===F.type:b.literal===H){var N=P.nextState({data:A,token:F,isToken:!0,reference:V-1});M.states.push(N)}}if(M.process(),M.states.length===0){var K=Error(this.reportError(F));throw K.offset=this.current,K.token=F,K}if(this.options.keepHistory)j.lexerState=z.save();this.current++}if(j)this.lexerState=z.save();return this.results=this.finish(),this},X.prototype.reportLexerError=function(G){var z,F,K=G.token;if(K)z="input "+JSON.stringify(K.text[0])+" (lexer error)",F=this.lexer.formatError(K,"Syntax error");else z="input (lexer error)",F=G.message;return this.reportErrorCommon(F,z)},X.prototype.reportError=function(G){var z=(G.type?G.type+" token: ":"")+JSON.stringify(G.value!==void 0?G.value:G),F=this.lexer.formatError(G,"Syntax error");return this.reportErrorCommon(F,z)},X.prototype.reportErrorCommon=function(G,z){var F=[];F.push(G);var K=this.table.length-2,j=this.table[K],V=j.states.filter(function(H){var A=H.rule.symbols[H.dot];return A&&typeof A!=="string"});if(V.length===0)F.push("Unexpected "+z+`. I did not expect any more input. Here is the state of my parse table:
|
|
24
|
+
`),this.displayStateStack(j.states,F);else{F.push("Unexpected "+z+`. Instead, I was expecting to see one of the following:
|
|
25
|
+
`);var M=V.map(function(H){return this.buildFirstStateStack(H,[])||[H]},this);M.forEach(function(H){var A=H[0],$=A.rule.symbols[A.dot],T=this.getSymbolDisplay($);F.push("A "+T+" based on:"),this.displayStateStack(H,F)},this)}return F.push(""),F.join(`
|
|
26
|
+
`)},X.prototype.displayStateStack=function(G,z){var F,K=0;for(var j=0;j<G.length;j++){var V=G[j],M=V.rule.toString(V.dot);if(M===F)K++;else{if(K>0)z.push(" ^ "+K+" more lines identical to this");K=0,z.push(" "+M)}F=M}},X.prototype.getSymbolDisplay=function(G){return J(G)},X.prototype.buildFirstStateStack=function(G,z){if(z.indexOf(G)!==-1)return null;if(G.wantedBy.length===0)return[G];var F=G.wantedBy[0],K=[G].concat(z),j=this.buildFirstStateStack(F,K);if(j===null)return null;return[G].concat(j)},X.prototype.save=function(){var G=this.table[this.current];return G.lexerState=this.lexerState,G},X.prototype.restore=function(G){var z=G.index;this.current=z,this.table[z]=G,this.table.splice(z+1),this.lexerState=G.lexerState,this.results=this.finish()},X.prototype.rewind=function(G){if(!this.options.keepHistory)throw Error("set option `keepHistory` to enable rewinding");this.restore(this.table[G])},X.prototype.finish=function(){var G=[],z=this.grammar.start,F=this.table[this.table.length-1];return F.states.forEach(function(K){if(K.rule.name===z&&K.dot===K.rule.symbols.length&&K.reference===0&&K.data!==X.fail)G.push(K)}),G.map(function(K){return K.data})};function J(G){var z=typeof G;if(z==="string")return G;else if(z==="object")if(G.literal)return JSON.stringify(G.literal);else if(G instanceof RegExp)return"character matching "+G;else if(G.type)return G.type+" token";else if(G.test)return"token matching "+String(G.test);else throw Error("Unknown symbol type: "+G)}function q(G){var z=typeof G;if(z==="string")return G;else if(z==="object")if(G.literal)return JSON.stringify(G.literal);else if(G instanceof RegExp)return G.toString();else if(G.type)return"%"+G.type;else if(G.test)return"<"+String(G.test)+">";else throw Error("Unknown symbol type: "+G)}return{Parser:X,Grammar:Z,Rule:w}})});var mq=O((IQ)=>{Object.defineProperty(IQ,"__esModule",{value:!0});function Ew(w){return w[0]}var iq=(w)=>[].concat(...w.map((Q)=>Array.isArray(Q)?iq(Q):Q));function U1(w){if(w){if(Array.isArray(w))return iq(w).join("");return w}return""}var BA={Lexer:void 0,ParserRules:[{name:"Reverse_path",symbols:["Path"]},{name:"Reverse_path$string$1",symbols:[{literal:"<"},{literal:">"}],postprocess:(w)=>w.join("")},{name:"Reverse_path",symbols:["Reverse_path$string$1"]},{name:"Forward_path$subexpression$1$subexpression$1",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:"@"}],postprocess:function(w){return w.join("")}},{name:"Forward_path$subexpression$1",symbols:["Forward_path$subexpression$1$subexpression$1","Domain",{literal:">"}]},{name:"Forward_path",symbols:["Forward_path$subexpression$1"]},{name:"Forward_path$subexpression$2",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:">"}],postprocess:function(w){return w.join("")}},{name:"Forward_path",symbols:["Forward_path$subexpression$2"]},{name:"Forward_path",symbols:["Path"]},{name:"Path$ebnf$1$subexpression$1",symbols:["A_d_l",{literal:":"}]},{name:"Path$ebnf$1",symbols:["Path$ebnf$1$subexpression$1"],postprocess:Ew},{name:"Path$ebnf$1",symbols:[],postprocess:()=>null},{name:"Path",symbols:[{literal:"<"},"Path$ebnf$1","Mailbox",{literal:">"}]},{name:"A_d_l$ebnf$1",symbols:[]},{name:"A_d_l$ebnf$1$subexpression$1",symbols:[{literal:","},"At_domain"]},{name:"A_d_l$ebnf$1",symbols:["A_d_l$ebnf$1","A_d_l$ebnf$1$subexpression$1"],postprocess:(w)=>w[0].concat([w[1]])},{name:"A_d_l",symbols:["At_domain","A_d_l$ebnf$1"]},{name:"At_domain",symbols:[{literal:"@"},"Domain"]},{name:"Domain$ebnf$1",symbols:[]},{name:"Domain$ebnf$1$subexpression$1",symbols:[{literal:"."},"sub_domain"]},{name:"Domain$ebnf$1",symbols:["Domain$ebnf$1","Domain$ebnf$1$subexpression$1"],postprocess:(w)=>w[0].concat([w[1]])},{name:"Domain",symbols:["sub_domain","Domain$ebnf$1"]},{name:"sub_domain",symbols:["U_label"]},{name:"Let_dig",symbols:["ALPHA_DIGIT"],postprocess:Ew},{name:"Ldh_str$ebnf$1",symbols:[]},{name:"Ldh_str$ebnf$1",symbols:["Ldh_str$ebnf$1","ALPHA_DIG_DASH"],postprocess:(w)=>w[0].concat([w[1]])},{name:"Ldh_str",symbols:["Ldh_str$ebnf$1","Let_dig"]},{name:"U_Let_dig",symbols:["ALPHA_DIGIT_U"],postprocess:Ew},{name:"U_Ldh_str$ebnf$1",symbols:[]},{name:"U_Ldh_str$ebnf$1",symbols:["U_Ldh_str$ebnf$1","ALPHA_DIG_DASH_U"],postprocess:(w)=>w[0].concat([w[1]])},{name:"U_Ldh_str",symbols:["U_Ldh_str$ebnf$1","U_Let_dig"]},{name:"U_label$ebnf$1$subexpression$1",symbols:["U_Ldh_str"]},{name:"U_label$ebnf$1",symbols:["U_label$ebnf$1$subexpression$1"],postprocess:Ew},{name:"U_label$ebnf$1",symbols:[],postprocess:()=>null},{name:"U_label",symbols:["U_Let_dig","U_label$ebnf$1"]},{name:"address_literal$subexpression$1",symbols:["IPv4_address_literal"]},{name:"address_literal$subexpression$1",symbols:["IPv6_address_literal"]},{name:"address_literal$subexpression$1",symbols:["General_address_literal"]},{name:"address_literal",symbols:[{literal:"["},"address_literal$subexpression$1",{literal:"]"}]},{name:"non_local_part",symbols:["Domain"],postprocess:function(w){return{DomainName:U1(w[0])}}},{name:"non_local_part",symbols:["address_literal"],postprocess:function(w){return{AddressLiteral:U1(w[0])}}},{name:"Mailbox",symbols:["Local_part",{literal:"@"},"non_local_part"],postprocess:function(w){return{localPart:U1(w[0]),domainPart:U1(w[2])}}},{name:"Local_part",symbols:["Dot_string"],postprocess:function(w){return{DotString:U1(w[0])}}},{name:"Local_part",symbols:["Quoted_string"],postprocess:function(w){return{QuotedString:U1(w[0])}}},{name:"Dot_string$ebnf$1",symbols:[]},{name:"Dot_string$ebnf$1$subexpression$1",symbols:[{literal:"."},"Atom"]},{name:"Dot_string$ebnf$1",symbols:["Dot_string$ebnf$1","Dot_string$ebnf$1$subexpression$1"],postprocess:(w)=>w[0].concat([w[1]])},{name:"Dot_string",symbols:["Atom","Dot_string$ebnf$1"]},{name:"Atom$ebnf$1",symbols:[/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/]},{name:"Atom$ebnf$1",symbols:["Atom$ebnf$1",/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/],postprocess:(w)=>w[0].concat([w[1]])},{name:"Atom",symbols:["Atom$ebnf$1"]},{name:"Quoted_string$ebnf$1",symbols:[]},{name:"Quoted_string$ebnf$1",symbols:["Quoted_string$ebnf$1","QcontentSMTP"],postprocess:(w)=>w[0].concat([w[1]])},{name:"Quoted_string",symbols:["DQUOTE","Quoted_string$ebnf$1","DQUOTE"]},{name:"QcontentSMTP",symbols:["qtextSMTP"]},{name:"QcontentSMTP",symbols:["quoted_pairSMTP"]},{name:"quoted_pairSMTP",symbols:[{literal:"\\"},/[\x20-\x7e]/]},{name:"qtextSMTP",symbols:[/[\x20-\x21\x23-\x5b\x5d-\x7e\u0080-\uFFFF]/],postprocess:Ew},{name:"IPv4_address_literal$macrocall$2",symbols:[{literal:"."},"Snum"]},{name:"IPv4_address_literal$macrocall$1",symbols:["IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2"]},{name:"IPv4_address_literal",symbols:["Snum","IPv4_address_literal$macrocall$1"]},{name:"IPv6_address_literal$subexpression$1",symbols:[/[iI]/,/[pP]/,/[vV]/,{literal:"6"},{literal:":"}],postprocess:function(w){return w.join("")}},{name:"IPv6_address_literal",symbols:["IPv6_address_literal$subexpression$1","IPv6_addr"]},{name:"General_address_literal$ebnf$1",symbols:["dcontent"]},{name:"General_address_literal$ebnf$1",symbols:["General_address_literal$ebnf$1","dcontent"],postprocess:(w)=>w[0].concat([w[1]])},{name:"General_address_literal",symbols:["Standardized_tag",{literal:":"},"General_address_literal$ebnf$1"]},{name:"Standardized_tag",symbols:["Ldh_str"]},{name:"dcontent",symbols:[/[\x21-\x5a\x5e-\x7e]/],postprocess:Ew},{name:"Snum",symbols:["DIGIT"]},{name:"Snum$subexpression$1",symbols:[/[1-9]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$1"]},{name:"Snum$subexpression$2",symbols:[{literal:"1"},"DIGIT","DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$2"]},{name:"Snum$subexpression$3",symbols:[{literal:"2"},/[0-4]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$3"]},{name:"Snum$subexpression$4",symbols:[{literal:"2"},{literal:"5"},/[0-5]/]},{name:"Snum",symbols:["Snum$subexpression$4"]},{name:"IPv6_addr",symbols:["IPv6_full"]},{name:"IPv6_addr",symbols:["IPv6_comp"]},{name:"IPv6_addr",symbols:["IPv6v4_full"]},{name:"IPv6_addr",symbols:["IPv6v4_comp"]},{name:"IPv6_hex",symbols:["HEXDIG"]},{name:"IPv6_hex$subexpression$1",symbols:["HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$1"]},{name:"IPv6_hex$subexpression$2",symbols:["HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$2"]},{name:"IPv6_hex$subexpression$3",symbols:["HEXDIG","HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$3"]},{name:"IPv6_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_full$macrocall$1",symbols:["IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2"]},{name:"IPv6_full",symbols:["IPv6_hex","IPv6_full$macrocall$1"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$1",symbols:["IPv6_comp$ebnf$1$subexpression$1"],postprocess:Ew},{name:"IPv6_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(w)=>w.join("")},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$2$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$2",symbols:["IPv6_comp$ebnf$2$subexpression$1"],postprocess:Ew},{name:"IPv6_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6_comp",symbols:["IPv6_comp$ebnf$1","IPv6_comp$string$1","IPv6_comp$ebnf$2"]},{name:"IPv6v4_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_full$macrocall$1",symbols:["IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2"]},{name:"IPv6v4_full",symbols:["IPv6_hex","IPv6v4_full$macrocall$1",{literal:":"},"IPv4_address_literal"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6v4_comp$ebnf$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1"],postprocess:Ew},{name:"IPv6v4_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(w)=>w.join("")},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",{literal:":"}]},{name:"IPv6v4_comp$ebnf$2",symbols:["IPv6v4_comp$ebnf$2$subexpression$1"],postprocess:Ew},{name:"IPv6v4_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp",symbols:["IPv6v4_comp$ebnf$1","IPv6v4_comp$string$1","IPv6v4_comp$ebnf$2","IPv4_address_literal"]},{name:"DIGIT",symbols:[/[0-9]/],postprocess:Ew},{name:"ALPHA_DIGIT_U",symbols:[/[0-9A-Za-z\u0080-\uFFFF]/],postprocess:Ew},{name:"ALPHA_DIGIT",symbols:[/[0-9A-Za-z]/],postprocess:Ew},{name:"ALPHA_DIG_DASH",symbols:[/[-0-9A-Za-z]/],postprocess:Ew},{name:"ALPHA_DIG_DASH_U",symbols:[/[-0-9A-Za-z\u0080-\uFFFF]/],postprocess:Ew},{name:"HEXDIG",symbols:[/[0-9A-Fa-f]/],postprocess:Ew},{name:"DQUOTE",symbols:[{literal:'"'}],postprocess:Ew}],ParserStart:"Reverse_path"};IQ.default=BA});var o9=O((ow)=>{var HA=ow&&ow.__importDefault||function(w){return w&&w.__esModule?w:{default:w}};Object.defineProperty(ow,"__esModule",{value:!0});ow.canonicalize=ow.canonicalize_quoted_string=ow.normalize=ow.normalize_dot_string=ow.parse=void 0;var pq=lq(),cq=HA(mq());cq.default.ParserStart="Mailbox";var VA=pq.Grammar.fromCompiled(cq.default);function TQ(w){if(w.length>986)throw Error("address too long");let W=new pq.Parser(VA);if(W.feed(w),W.results.length!==1)throw Error("address parsing failed: ambiguous grammar");let Z=w.lastIndexOf("@"),Y=w.substring(Z+1);if(Y[0]!=="["){if(Y.length>253)throw Error("domain too long");let X=Y.split(".");if(X.length<2)throw Error("domain not fully qualified");if(X[X.length-1].length<2)throw Error("top level domain label too short");if(X.sort(function(J,q){return q.length-J.length}),X[0].length>63)throw Error("domain label too long")}return W.results[0]}ow.parse=TQ;function dq(w){return function(){let Z=w.indexOf("+");if(Z===-1)return w;return w.substr(0,Z)}().replace(/\./g,"").toLowerCase()}ow.normalize_dot_string=dq;function MA(w){var Q,W;let Z=TQ(w),Y=(Q=Z.domainPart.AddressLiteral)!==null&&Q!==void 0?Q:Z.domainPart.DomainName.toLowerCase();return`${(W=Z.localPart.QuotedString)!==null&&W!==void 0?W:dq(Z.localPart.DotString)}@${Y}`}ow.normalize=MA;function nq(w){return`"${w.substr(1).substr(0,w.length-2).replace(/(?:\\(.))/g,"$1").replace(/(?:(["\\]))/g,"\\$1")}"`}ow.canonicalize_quoted_string=nq;function LA(w){var Q;let W=TQ(w),Z=(Q=W.domainPart.AddressLiteral)!==null&&Q!==void 0?Q:W.domainPart.DomainName.toLowerCase();return`${W.localPart.QuotedString?nq(W.localPart.QuotedString):W.localPart.DotString}@${Z}`}ow.canonicalize=LA});var WG=O((iN,QG)=>{var e9=Object.prototype.hasOwnProperty,wG=Object.prototype.toString,rq=Object.defineProperty,sq=Object.getOwnPropertyDescriptor,aq=function(Q){if(typeof Array.isArray==="function")return Array.isArray(Q);return wG.call(Q)==="[object Array]"},tq=function(Q){if(!Q||wG.call(Q)!=="[object Object]")return!1;var W=e9.call(Q,"constructor"),Z=Q.constructor&&Q.constructor.prototype&&e9.call(Q.constructor.prototype,"isPrototypeOf");if(Q.constructor&&!W&&!Z)return!1;var Y;for(Y in Q);return typeof Y>"u"||e9.call(Q,Y)},oq=function(Q,W){if(rq&&W.name==="__proto__")rq(Q,W.name,{enumerable:!0,configurable:!0,value:W.newValue,writable:!0});else Q[W.name]=W.newValue},eq=function(Q,W){if(W==="__proto__"){if(!e9.call(Q,W))return;else if(sq)return sq(Q,W).value}return Q[W]};QG.exports=function w(){var Q,W,Z,Y,X,J,q=arguments[0],G=1,z=arguments.length,F=!1;if(typeof q==="boolean")F=q,q=arguments[1]||{},G=2;if(q==null||typeof q!=="object"&&typeof q!=="function")q={};for(;G<z;++G)if(Q=arguments[G],Q!=null){for(W in Q)if(Z=eq(q,W),Y=eq(Q,W),q!==Y){if(F&&Y&&(tq(Y)||(X=aq(Y)))){if(X)X=!1,J=Z&&aq(Z)?Z:[];else J=Z&&tq(Z)?Z:{};oq(q,{name:W,newValue:w(F,J,Y)})}else if(typeof Y<"u")oq(q,{name:W,newValue:Y})}}return q}});var ZG=O((mN,UA)=>{UA.exports=[{scheme:"aaa",description:"Diameter Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"aaas",description:"Diameter Protocol with Secure Transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"about",description:"about",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6694"}]},{scheme:"acap",description:"application configuration access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2244"}]},{scheme:"acct",description:"acct",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7565"}]},{scheme:"cap",description:"Calendar Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4324"}]},{scheme:"cid",description:"content identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"coap",description:"coap",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"coaps",description:"coaps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"crid",description:"TV-Anytime Content Reference Identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4078"}]},{scheme:"data",description:"data",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2397"}]},{scheme:"dav",description:"dav",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"dict",description:"dictionary service protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2229"}]},{scheme:"dns",description:"Domain Name System",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4501"}]},{scheme:"example",description:"example",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7595"}]},{scheme:"file",description:"Host-specific file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"ftp",description:"File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"geo",description:"Geographic Locations",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5870"}]},{scheme:"go",description:"go",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3368"}]},{scheme:"gopher",description:"The Gopher Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4266"}]},{scheme:"h323",description:"H.323",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3508"}]},{scheme:"http",description:"Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"https",description:"Hypertext Transfer Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"iax",description:"Inter-Asterisk eXchange Version 2",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5456"}]},{scheme:"icap",description:"Internet Content Adaptation Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3507"}]},{scheme:"im",description:"Instant Messaging",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3860"}]},{scheme:"imap",description:"internet message access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5092"}]},{scheme:"info",description:`Information Assets with Identifiers in Public Namespaces.
|
|
27
|
+
(section 3) defines an "info" registry
|
|
28
|
+
of public namespaces, which is maintained by NISO and can be accessed
|
|
29
|
+
from .`,reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4452"}]},{scheme:"ipp",description:"Internet Printing Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3510"}]},{scheme:"ipps",description:"Internet Printing Protocol over HTTPS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7472"}]},{scheme:"iris",description:"Internet Registry Information Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3981"}]},{scheme:"iris.beep",description:"iris.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3983"}]},{scheme:"iris.lwz",description:"iris.lwz",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4993"}]},{scheme:"iris.xpc",description:"iris.xpc",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"iris.xpcs",description:"iris.xpcs",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"jabber",description:"jabber",reference:[],template:"http://www.iana.org/assignments/uri-schemes/perm/jabber"},{scheme:"ldap",description:"Lightweight Directory Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4516"}]},{scheme:"mailto",description:"Electronic mail address",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6068"}]},{scheme:"mid",description:"message identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"msrp",description:"Message Session Relay Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"msrps",description:"Message Session Relay Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"mtqp",description:"Message Tracking Query Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3887"}]},{scheme:"mupdate",description:"Mailbox Update (MUPDATE) Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3656"}]},{scheme:"news",description:"USENET news",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"nfs",description:"network file system protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2224"}]},{scheme:"ni",description:"ni",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nih",description:"nih",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nntp",description:"USENET news using NNTP access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"opaquelocktoken",description:"opaquelocktokent",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"pkcs11",description:"PKCS#11",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7512"}]},{scheme:"pop",description:"Post Office Protocol v3",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2384"}]},{scheme:"pres",description:"Presence",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3859"}]},{scheme:"reload",description:"reload",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6940"}]},{scheme:"rtsp",description:"Real-time Streaming Protocol (RTSP)",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtsps",description:"Real-time Streaming Protocol (RTSP) over TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtspu",description:"Real-time Streaming Protocol (RTSP) over unreliable datagram transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"}]},{scheme:"service",description:"service location",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2609"}]},{scheme:"session",description:"session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6787"}]},{scheme:"shttp",description:"Secure Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2660"}]},{scheme:"sieve",description:"ManageSieve Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5804"}]},{scheme:"sip",description:"session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sips",description:"secure session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sms",description:"Short Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5724"}]},{scheme:"snmp",description:"Simple Network Management Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4088"}]},{scheme:"soap.beep",description:"soap.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"soap.beeps",description:"soap.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"stun",description:"stun",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"stuns",description:"stuns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"tag",description:"tag",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4151"}]},{scheme:"tel",description:"telephone",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"telnet",description:"Reference to interactive sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4248"}]},{scheme:"tftp",description:"Trivial File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3617"}]},{scheme:"thismessage",description:"multipart/related relative reference resolution",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2557"}],template:"http://www.iana.org/assignments/uri-schemes/perm/thismessage"},{scheme:"tip",description:"Transaction Internet Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2371"}]},{scheme:"tn3270",description:"Interactive 3270 emulation sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6270"}]},{scheme:"turn",description:"turn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"turns",description:"turns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"tv",description:"TV Broadcasts",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2838"}]},{scheme:"urn",description:"Uniform Resource Names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2141"},{type:"registry",href:"http://www.iana.org/assignments/urn-namespaces"}]},{scheme:"vemmi",description:"versatile multimedia interface",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2122"}]},{scheme:"vnc",description:"Remote Framebuffer Protocol",reference:[{type:"draft",href:"http://www.iana.org/go/RFC-warden-appsawg-vnc-scheme-10"}]},{scheme:"ws",description:"WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"wss",description:"Encrypted WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"xcon",description:"xcon",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xcon-userid",description:"xcon-userid",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xmlrpc.beep",description:"xmlrpc.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmlrpc.beeps",description:"xmlrpc.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmpp",description:"Extensible Messaging and Presence Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5122"}]},{scheme:"z39.50r",description:"Z39.50 Retrieval",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]},{scheme:"z39.50s",description:"Z39.50 Session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var YG=O((pN,jA)=>{jA.exports=[{scheme:"acr",description:"acr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/acr"},{scheme:"adiumxtra",description:"adiumxtra",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/adiumxtra"},{scheme:"afp",description:"afp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/afp"},{scheme:"afs",description:"Andrew File System global file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"aim",description:"aim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aim"},{scheme:"appdata",description:"appdata",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/appdata"},{scheme:"apt",description:"apt",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/apt"},{scheme:"attachment",description:"attachment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/attachment"},{scheme:"aw",description:"aw",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aw"},{scheme:"barion",description:"barion",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/barion"},{scheme:"beshare",description:"beshare",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/beshare"},{scheme:"bitcoin",description:"bitcoin",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bitcoin"},{scheme:"blob",description:"blob",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/blob"},{scheme:"bolo",description:"bolo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bolo"},{scheme:"callto",description:"callto",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/callto"},{scheme:"chrome",description:"chrome",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome"},{scheme:"chrome-extension",description:"chrome-extension",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome-extension"},{scheme:"com-eventbrite-attendee",description:"com-eventbrite-attendee",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/com-eventbrite-attendee"},{scheme:"content",description:"content",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/content"},{scheme:"cvs",description:"cvs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/cvs"},{scheme:"dis",description:"dis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dis"},{scheme:"dlna-playcontainer",description:"dlna-playcontainer",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playcontainer"},{scheme:"dlna-playsingle",description:"dlna-playsingle",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playsingle"},{scheme:"dntp",description:"dntp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dntp"},{scheme:"dtn",description:"DTNRG research and development",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5050"}]},{scheme:"dvb",description:"dvb",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mcroberts-uri-dvb"}]},{scheme:"ed2k",description:"ed2k",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ed2k"},{scheme:"facetime",description:"facetime",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/facetime"},{scheme:"feed",description:"feed",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feed"},{scheme:"feedready",description:"feedready",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feedready"},{scheme:"finger",description:"finger",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/finger"},{scheme:"fish",description:"fish",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/fish"},{scheme:"gg",description:"gg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gg"},{scheme:"git",description:"git",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/git"},{scheme:"gizmoproject",description:"gizmoproject",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gizmoproject"},{scheme:"gtalk",description:"gtalk",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gtalk"},{scheme:"ham",description:"ham",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7046"}]},{scheme:"hcp",description:"hcp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/hcp"},{scheme:"icon",description:"icon",reference:[{type:"draft",href:"http://www.iana.org/go/draft-lafayette-icon-uri-scheme"}]},{scheme:"iotdisco",description:"iotdisco",reference:[{type:"uri",href:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco.pdf"}],template:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco"},{scheme:"ipn",description:"ipn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6260"}]},{scheme:"irc",description:"irc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc"},{scheme:"irc6",description:"irc6",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc6"},{scheme:"ircs",description:"ircs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ircs"},{scheme:"isostore",description:"isostore",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/isostore"},{scheme:"itms",description:"itms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/itms"},{scheme:"jar",description:"jar",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/jar"},{scheme:"jms",description:"Java Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6167"}]},{scheme:"keyparc",description:"keyparc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/keyparc"},{scheme:"lastfm",description:"lastfm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/lastfm"},{scheme:"ldaps",description:"ldaps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ldaps"},{scheme:"magnet",description:"magnet",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/magnet"},{scheme:"maps",description:"maps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/maps"},{scheme:"market",description:"market",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/market"},{scheme:"message",description:"message",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/message"},{scheme:"mms",description:"mms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mms"},{scheme:"ms-access",description:"ms-access",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-access"},{scheme:"ms-drive-to",description:"ms-drive-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-drive-to"},{scheme:"ms-enrollment",description:"ms-enrollment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-enrollment"},{scheme:"ms-excel",description:"ms-excel",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-excel"},{scheme:"ms-getoffice",description:"ms-getoffice",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-getoffice"},{scheme:"ms-help",description:"ms-help",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-help"},{scheme:"ms-infopath",description:"ms-infopath",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-infopath"},{scheme:"ms-media-stream-id",description:"ms-media-stream-id",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-media-stream-id"},{scheme:"ms-powerpoint",description:"ms-powerpoint",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-powerpoint"},{scheme:"ms-project",description:"ms-project",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-project"},{scheme:"ms-publisher",description:"ms-publisher",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-publisher"},{scheme:"ms-search-repair",description:"ms-search-repair",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-search-repair"},{scheme:"ms-secondary-screen-controller",description:"ms-secondary-screen-controller",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-controller"},{scheme:"ms-secondary-screen-setup",description:"ms-secondary-screen-setup",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-setup"},{scheme:"ms-settings",description:"ms-settings",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings"},{scheme:"ms-settings-airplanemode",description:"ms-settings-airplanemode",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-airplanemode"},{scheme:"ms-settings-bluetooth",description:"ms-settings-bluetooth",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-bluetooth"},{scheme:"ms-settings-camera",description:"ms-settings-camera",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-camera"},{scheme:"ms-settings-cellular",description:"ms-settings-cellular",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cellular"},{scheme:"ms-settings-cloudstorage",description:"ms-settings-cloudstorage",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cloudstorage"},{scheme:"ms-settings-connectabledevices",description:"ms-settings-connectabledevices",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-connectabledevices"},{scheme:"ms-settings-displays-topology",description:"ms-settings-displays-topology",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-displays-topology"},{scheme:"ms-settings-emailandaccounts",description:"ms-settings-emailandaccounts",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-emailandaccounts"},{scheme:"ms-settings-language",description:"ms-settings-language",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-language"},{scheme:"ms-settings-location",description:"ms-settings-location",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-location"},{scheme:"ms-settings-lock",description:"ms-settings-lock",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-lock"},{scheme:"ms-settings-nfctransactions",description:"ms-settings-nfctransactions",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-nfctransactions"},{scheme:"ms-settings-notifications",description:"ms-settings-notifications",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-notifications"},{scheme:"ms-settings-power",description:"ms-settings-power",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-power"},{scheme:"ms-settings-privacy",description:"ms-settings-privacy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-privacy"},{scheme:"ms-settings-proximity",description:"ms-settings-proximity",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-proximity"},{scheme:"ms-settings-screenrotation",description:"ms-settings-screenrotation",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-screenrotation"},{scheme:"ms-settings-wifi",description:"ms-settings-wifi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-wifi"},{scheme:"ms-settings-workplace",description:"ms-settings-workplace",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-workplace"},{scheme:"ms-spd",description:"ms-spd",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-spd"},{scheme:"ms-transit-to",description:"ms-transit-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-transit-to"},{scheme:"ms-visio",description:"ms-visio",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-visio"},{scheme:"ms-walk-to",description:"ms-walk-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-walk-to"},{scheme:"ms-word",description:"ms-word",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-word"},{scheme:"msnim",description:"msnim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/msnim"},{scheme:"mumble",description:"mumble",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mumble"},{scheme:"mvn",description:"mvn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mvn"},{scheme:"notes",description:"notes",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/notes"},{scheme:"oid",description:"oid",reference:[{type:"draft",href:"http://www.iana.org/go/draft-larmouth-oid-iri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/oid"},{scheme:"palm",description:"palm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/palm"},{scheme:"paparazzi",description:"paparazzi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/paparazzi"},{scheme:"platform",description:"platform",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/platform"},{scheme:"proxy",description:"proxy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/proxy"},{scheme:"psyc",description:"psyc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/psyc"},{scheme:"query",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/query"},{scheme:"redis",description:"redis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/redis"},{scheme:"rediss",description:"rediss",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rediss"},{scheme:"res",description:"res",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/res"},{scheme:"resource",description:"resource",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/resource"},{scheme:"rmi",description:"rmi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rmi"},{scheme:"rsync",description:"rsync",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5781"}]},{scheme:"rtmfp",description:"rtmfp",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7425"}],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmfp"},{scheme:"rtmp",description:"rtmp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmp"},{scheme:"secondlife",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/secondlife"},{scheme:"sftp",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sftp"},{scheme:"sgn",description:"sgn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sgn"},{scheme:"skype",description:"skype",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/skype"},{scheme:"smb",description:"smb",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/smb"},{scheme:"smtp",description:"smtp",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/smtp"},{scheme:"soldat",description:"soldat",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/soldat"},{scheme:"spotify",description:"spotify",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/spotify"},{scheme:"ssh",description:"ssh",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ssh"},{scheme:"steam",description:"steam",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/steam"},{scheme:"submit",description:"submit",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/submit"},{scheme:"svn",description:"svn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/svn"},{scheme:"teamspeak",description:"teamspeak",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teamspeak"},{scheme:"teliaeid",description:"teliaeid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teliaeid"},{scheme:"things",description:"things",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/things"},{scheme:"tool",description:"tool",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/tool"},{scheme:"udp",description:"udp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/udp"},{scheme:"unreal",description:"unreal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/unreal"},{scheme:"ut2004",description:"ut2004",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ut2004"},{scheme:"v-event",description:"v-event",reference:[{type:"draft",href:"http://www.iana.org/go/draft-menderico-v-event-uri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/v-event"},{scheme:"ventrilo",description:"ventrilo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ventrilo"},{scheme:"view-source",description:"view-source",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/view-source"},{scheme:"webcal",description:"webcal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/webcal"},{scheme:"wpid",description:"wpid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wpid"},{scheme:"wtai",description:"wtai",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wtai"},{scheme:"wyciwyg",description:"wyciwyg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wyciwyg"},{scheme:"xfire",description:"xfire",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xfire"},{scheme:"xri",description:"xri",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xri"},{scheme:"ymsgr",description:"ymsgr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ymsgr"}]});var XG=O((cN,AA)=>{AA.exports=[{scheme:"fax",description:"fax",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"filesystem",description:"filesystem",reference:[],template:"http://www.iana.org/assignments/uri-schemes/historic/filesystem"},{scheme:"mailserver",description:"Access to data available from mail servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6196"}]},{scheme:"modem",description:"modem",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"pack",description:"pack",reference:[{type:"draft",href:"http://www.iana.org/go/draft-shur-pack-uri-scheme"}],template:"http://www.iana.org/assignments/uri-schemes/historic/pack"},{scheme:"prospero",description:"Prospero Directory Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4157"}]},{scheme:"snews",description:"NNTP over SSL/TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"videotex",description:"videotex",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mavrakis-videotex-url-spec"},{type:"rfc",href:"http://www.iana.org/go/rfc2122"},{type:"rfc",href:"http://www.iana.org/go/rfc3986"}],template:"http://www.iana.org/assignments/uri-schemes/historic/videotex"},{scheme:"wais",description:"Wide Area Information Servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4156"}]},{scheme:"z39.50",description:"Z39.50 information access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"},{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var JG=O((dN,$A)=>{$A.exports=[{scheme:"android-app"},{scheme:"webpack"},{scheme:"s3",description:"Amazon Web Services S3 bucket"},{scheme:"gs",description:"Google Cloud Storage"},{scheme:"mqtt",description:"Message Queuing Telemetry Transport Protocol"},{scheme:"modbus+tcp",description:"Modbus over TCP"}]});var RQ=O((nN,qG)=>{var PQ=WG(),D5={permanent:ZG(),provosional:YG(),historical:XG()},w8={};Object.keys(D5).forEach(function(w){D5[w].forEach(function(Q){w8[Q.scheme]=PQ(Q,{type:w})})});D5.unofficial=JG().filter(function(w){return!w8[w.scheme]});D5.unofficial.forEach(function(w){w8[w.scheme]=PQ(w,{type:"unofficial"})});qG.exports=PQ(D5,{allByName:w8})});var zG=O((rN,GG)=>{var{parse:OA}=f9(),{addressParser:NA}=o9(),DA=RQ();function IA(w){try{return NA(w),!0}catch(Q){return!1}}GG.exports=(w)=>{let Q=OA(w);if(Q.scheme==="mailto"&&Q.to.every(IA))return!0;if(Q.reference==="absolute"&&DA.allByName[Q.scheme])return!0;return!1}});var KG=O((sN,FG)=>{FG.exports=/^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$/});var HG=O((aN,BG)=>{var{parse:TA}=o9();BG.exports=(w)=>{try{return TA(w),!0}catch(Q){return!1}}});var AG={};XW(AG,{default:()=>yA});function SQ(w){return this[w]}function fA(w,Q){this[w]=CA.bind(null,Q)}var PA,RA,I5,VG,bQ,bA=(w,Q,W)=>{var Z=VG(Q);for(let Y of Z)if(!bQ.call(w,Y)&&Y!=="default")I5(w,Y,{get:SQ.bind(Q,Y),enumerable:!0});if(W){for(let Y of Z)if(!bQ.call(W,Y)&&Y!=="default")I5(W,Y,{get:SQ.bind(Q,Y),enumerable:!0});return W}},SA,EA,MG=(w,Q,W)=>{var Z=w!=null&&typeof w==="object";if(Z){var Y=Q?SA??=new WeakMap:EA??=new WeakMap,X=Y.get(w);if(X)return X}W=w!=null?PA(RA(w)):{};let J=Q||!w||!w.__esModule?I5(W,"default",{value:w,enumerable:!0}):W;for(let q of VG(w))if(!bQ.call(J,q))I5(J,q,{get:SQ.bind(w,q),enumerable:!0});if(Z)Y.set(w,J);return J},kA=(w,Q)=>()=>(Q||w((Q={exports:{}}).exports,Q),Q.exports),CA=(w)=>w,vA=(w,Q)=>{for(var W in Q)I5(w,W,{get:Q[W],enumerable:!0,configurable:!0,set:fA.bind(Q,W)})},LG,UG,jG,yA;var $G=Dz(()=>{PA=Object.create,{getPrototypeOf:RA,defineProperty:I5,getOwnPropertyNames:VG}=Object,bQ=Object.prototype.hasOwnProperty;LG=kA((w,Q)=>{var W=/^xn--/,Z=/[^\0-\x7F]/,Y=/[\x2E\u3002\uFF0E\uFF61]/g,X={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},J=Math.floor,q=String.fromCharCode;function G(N){throw RangeError(X[N])}function z(N,S){let i=[],g=N.length;while(g--)i[g]=S(N[g]);return i}function F(N,S){let i=N.split("@"),g="";if(i.length>1)g=i[0]+"@",N=i[1];N=N.replace(Y,".");let Zw=N.split("."),c=z(Zw,S).join(".");return g+c}function K(N){let S=[],i=0,g=N.length;while(i<g){let Zw=N.charCodeAt(i++);if(Zw>=55296&&Zw<=56319&&i<g){let c=N.charCodeAt(i++);if((c&64512)==56320)S.push(((Zw&1023)<<10)+(c&1023)+65536);else S.push(Zw),i--}else S.push(Zw)}return S}var j=(N)=>String.fromCodePoint(...N),V=function(N){if(N>=48&&N<58)return 26+(N-48);if(N>=65&&N<91)return N-65;if(N>=97&&N<123)return N-97;return 36},M=function(N,S){return N+22+75*(N<26)-((S!=0)<<5)},H=function(N,S,i){let g=0;N=i?J(N/700):N>>1,N+=J(N/S);for(;N>455;g+=36)N=J(N/35);return J(g+36*N/(N+38))},A=function(N){let S=[],i=N.length,g=0,Zw=128,c=72,Aw=N.lastIndexOf("-");if(Aw<0)Aw=0;for(let Gw=0;Gw<Aw;++Gw){if(N.charCodeAt(Gw)>=128)G("not-basic");S.push(N.charCodeAt(Gw))}for(let Gw=Aw>0?Aw+1:0;Gw<i;){let Iw=g;for(let pw=1,F0=36;;F0+=36){if(Gw>=i)G("invalid-input");let K0=V(N.charCodeAt(Gw++));if(K0>=36)G("invalid-input");if(K0>J((2147483647-g)/pw))G("overflow");g+=K0*pw;let D0=F0<=c?1:F0>=c+26?26:F0-c;if(K0<D0)break;let a0=36-D0;if(pw>J(2147483647/a0))G("overflow");pw*=a0}let hw=S.length+1;if(c=H(g-Iw,hw,Iw==0),J(g/hw)>2147483647-Zw)G("overflow");Zw+=J(g/hw),g%=hw,S.splice(g++,0,Zw)}return String.fromCodePoint(...S)},$=function(N){let S=[];N=K(N);let i=N.length,g=128,Zw=0,c=72;for(let Iw of N)if(Iw<128)S.push(q(Iw));let Aw=S.length,Gw=Aw;if(Aw)S.push("-");while(Gw<i){let Iw=2147483647;for(let pw of N)if(pw>=g&&pw<Iw)Iw=pw;let hw=Gw+1;if(Iw-g>J((2147483647-Zw)/hw))G("overflow");Zw+=(Iw-g)*hw,g=Iw;for(let pw of N){if(pw<g&&++Zw>2147483647)G("overflow");if(pw===g){let F0=Zw;for(let K0=36;;K0+=36){let D0=K0<=c?1:K0>=c+26?26:K0-c;if(F0<D0)break;let a0=F0-D0,A1=36-D0;S.push(q(M(D0+a0%A1,0))),F0=J(a0/A1)}S.push(q(M(F0,0))),c=H(Zw,hw,Gw===Aw),Zw=0,++Gw}}++Zw,++g}return S.join("")},T=function(N){return F(N,function(S){return W.test(S)?A(S.slice(4).toLowerCase()):S})},P=function(N){return F(N,function(S){return Z.test(S)?"xn--"+$(S):S})},b={version:"2.3.1",ucs2:{decode:K,encode:j},decode:A,encode:$,toASCII:P,toUnicode:T};Q.exports=b}),UG={};vA(UG,{default:()=>jG.default});bA(UG,MG(LG(),1));jG=MG(LG(),1),yA=jG.default});var NG=O((tN,OG)=>{var{toASCII:uA}=($G(),YW(AG)),hA=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;OG.exports=(w)=>{let Q=uA(w);return Q.replace(/\.$/,"").length<=253&&hA.test(Q)}});var TG=O((oN,IG)=>{var{parse:gA}=f9(),{addressParser:_A}=o9(),DG=RQ();function xA(w){try{return _A(w),!0}catch(Q){return!1}}IG.exports=(w)=>{let Q=gA(w);if(Q.scheme==="mailto"&&Q.to.every(xA))return!0;if(Q.reference==="absolute"&&Q.path!==void 0&&DG.allByName[Q.scheme])return!0;if(Q.scheme&&!DG.allByName[Q.scheme])return!1;return Q.path!==void 0&&(Q.reference==="relative"||Q.reference==="same-document"||Q.reference==="uri")}});var PG=O((eN,j1)=>{eN.iri=zG();eN.duration=KG();eN["idn-email"]=HG();eN["idn-hostname"]=NG();eN["iri-reference"]=TG()});var SG=O((wD,bG)=>{var RG=PG();bG.exports=(w,Q={})=>{let W=Object.keys(RG),Z=W;if(Q.formats){if(!Array.isArray(Q.formats))throw Error("options.formats must be an array");Z=Q.formats}return W.filter((Y)=>Z.includes(Y)).forEach((Y)=>{w.addFormat(Y,RG[Y])}),w}});var gG=O((SD,yQ)=>{var oA=Object.prototype.hasOwnProperty,mw="~";function R5(){}if(Object.create){if(R5.prototype=Object.create(null),!new R5().__proto__)mw=!1}function eA(w,Q,W){this.fn=w,this.context=Q,this.once=W||!1}function hG(w,Q,W,Z,Y){if(typeof W!=="function")throw TypeError("The listener must be a function");var X=new eA(W,Z||w,Y),J=mw?mw+Q:Q;if(!w._events[J])w._events[J]=X,w._eventsCount++;else if(!w._events[J].fn)w._events[J].push(X);else w._events[J]=[w._events[J],X];return w}function Z8(w,Q){if(--w._eventsCount===0)w._events=new R5;else delete w._events[Q]}function uw(){this._events=new R5,this._eventsCount=0}uw.prototype.eventNames=function(){var Q=[],W,Z;if(this._eventsCount===0)return Q;for(Z in W=this._events)if(oA.call(W,Z))Q.push(mw?Z.slice(1):Z);if(Object.getOwnPropertySymbols)return Q.concat(Object.getOwnPropertySymbols(W));return Q};uw.prototype.listeners=function(Q){var W=mw?mw+Q:Q,Z=this._events[W];if(!Z)return[];if(Z.fn)return[Z.fn];for(var Y=0,X=Z.length,J=Array(X);Y<X;Y++)J[Y]=Z[Y].fn;return J};uw.prototype.listenerCount=function(Q){var W=mw?mw+Q:Q,Z=this._events[W];if(!Z)return 0;if(Z.fn)return 1;return Z.length};uw.prototype.emit=function(Q,W,Z,Y,X,J){var q=mw?mw+Q:Q;if(!this._events[q])return!1;var G=this._events[q],z=arguments.length,F,K;if(G.fn){if(G.once)this.removeListener(Q,G.fn,void 0,!0);switch(z){case 1:return G.fn.call(G.context),!0;case 2:return G.fn.call(G.context,W),!0;case 3:return G.fn.call(G.context,W,Z),!0;case 4:return G.fn.call(G.context,W,Z,Y),!0;case 5:return G.fn.call(G.context,W,Z,Y,X),!0;case 6:return G.fn.call(G.context,W,Z,Y,X,J),!0}for(K=1,F=Array(z-1);K<z;K++)F[K-1]=arguments[K];G.fn.apply(G.context,F)}else{var j=G.length,V;for(K=0;K<j;K++){if(G[K].once)this.removeListener(Q,G[K].fn,void 0,!0);switch(z){case 1:G[K].fn.call(G[K].context);break;case 2:G[K].fn.call(G[K].context,W);break;case 3:G[K].fn.call(G[K].context,W,Z);break;case 4:G[K].fn.call(G[K].context,W,Z,Y);break;default:if(!F)for(V=1,F=Array(z-1);V<z;V++)F[V-1]=arguments[V];G[K].fn.apply(G[K].context,F)}}}return!0};uw.prototype.on=function(Q,W,Z){return hG(this,Q,W,Z,!1)};uw.prototype.once=function(Q,W,Z){return hG(this,Q,W,Z,!0)};uw.prototype.removeListener=function(Q,W,Z,Y){var X=mw?mw+Q:Q;if(!this._events[X])return this;if(!W)return Z8(this,X),this;var J=this._events[X];if(J.fn){if(J.fn===W&&(!Y||J.once)&&(!Z||J.context===Z))Z8(this,X)}else{for(var q=0,G=[],z=J.length;q<z;q++)if(J[q].fn!==W||Y&&!J[q].once||Z&&J[q].context!==Z)G.push(J[q]);if(G.length)this._events[X]=G.length===1?G[0]:G;else Z8(this,X)}return this};uw.prototype.removeAllListeners=function(Q){var W;if(Q){if(W=mw?mw+Q:Q,this._events[W])Z8(this,W)}else this._events=new R5,this._eventsCount=0;return this};uw.prototype.off=uw.prototype.removeListener;uw.prototype.addListener=uw.prototype.on;uw.prefixed=mw;uw.EventEmitter=uw;if(typeof yQ<"u")yQ.exports=uw});var w$={};XW(w$,{default:()=>b5});var F8="https://www.w3.org/ns/activitystreams",K8="https://sockethub.org/ns/context/v1.jsonld";var B8="error",H8="https://sockethub.org/ns/context/platform/error/v1.jsonld",V8="sockethub:internal",M8="https://sockethub.org/ns/context/platform/sockethub:internal/v1.jsonld",L8=new Map,JW=new Map,qW=new Map;function Iz(w){if(!Array.isArray(w))return[];return w.filter((Q)=>typeof Q==="string")}function Tz(w){return Iz(w["@context"])}function U8(w,Q,W,Z){L8.set(Q,w),JW.set(Q,W),qW.set(Q,Z)}function f5(w){let W=Tz(w).filter((Z)=>L8.has(Z));if(W.length!==1)return null;return W[0]}function GW(w){return L8.get(w)}function zW(w){return JW.get(w)}function FW(w){return qW.get(w)}var v5={feed:{required:["id","type"],additionalProperties:!0,properties:{type:{enum:["feed"]},id:{type:"string",format:"iri"},name:{type:"string"},description:{type:"string"},author:{type:"string"},favicon:{type:"string"}}},person:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["person"]},name:{type:"string"}}},room:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["room"]},name:{type:"string"}}},service:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["service"]},name:{type:"string"}}},platform:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["platform"]},name:{type:"string"}}},website:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string",format:"iri"},type:{enum:["website"]},name:{type:"string"}}},address:{required:["type"],additionalProperties:!1,properties:{type:{enum:["address"]}}}};var j8=Object.keys(v5),A8=["person","room","service","feed","website","platform"],$8=["person","room","service","feed","website","platform","address"],KW=A8.map((w)=>({$ref:`#/definitions/type/${w}`})),BW=$8.map((w)=>({$ref:`#/definitions/type/${w}`}));var Pz={type:"array",minItems:3,maxItems:3,items:{type:"string"},allOf:[{contains:{const:F8}},{contains:{const:K8}}]},Rz={type:"string"},O8={$id:"https://sockethub.org/schemas/v/activity-stream.json",description:"Schema for Sockethub Activity Streams",type:"object",required:["@context","type","actor"],additionalProperties:!1,properties:{"@context":Pz,id:{type:"string"},type:Rz,actor:{type:"object",oneOf:KW},target:{type:"object",oneOf:BW},object:{type:"object"},published:{type:"string",format:"date-time"}},definitions:{type:v5}};var CG=C5(eY(),1),fG=C5(_q(),1),vG=C5(SG(),1);function lA(w){let Q=`${w.instancePath?w.instancePath:"activity stream"}: ${w.message}`;if(w.keyword==="additionalProperties")Q+=`: ${w.params.additionalProperty}`;else if(w.keyword==="enum")Q+=`: ${w.params.allowedValues.join(", ")}`;return Q}function T5(w){let Q=[];if(w?.type)Q.push(w.type);let W=w;for(let Z in W){let Y=W[Z];if(Y&&typeof Y==="object"&&"type"in Y)Q.push(...T5(Y))}return Q}function iA(w){let Q=w.schemaPath.match(/#\/\w+\/\w+\/([\w-]+)\//);return Q?Q[1]:void 0}function mA(w){let Q=w.instancePath.match(/\/(\w+)/);return Q?Q[1]:void 0}function pA(w,Q){let W=iA(w),Z=mA(w);if(!Z)return-1;let Y=Q[Z];if(!Y)return-1;if(!W||!Y.includes(W))return-1;return w.instancePath.split("/").length}function cA(w){if(!Array.isArray(w["@context"]))return{actor:[],target:[],object:T5(w)};let Q=w;return{actor:T5(Q.actor),target:T5(Q.target),object:Q.object?T5(Q.object):[]}}function EQ(w,Q,W){let Z=cA(w),Y=0,X=-1;for(let J=0;J<Q.length;J++){let q=pA(Q[J],Z);if(q>X)X=q,Y=J}return X>=0?lA(Q[Y]):nA(Q[Q.length-1],W)}function dA(w,Q){if(!Q?.excludeTypes||Q.excludeTypes.length===0)return w;let W=new Set(Q.excludeTypes);return w.filter((Z)=>!W.has(Z))}function nA(w,Q){let W;if(w.keyword==="oneOf"){let Z=w.instancePath.split("/")[1],Y=Z==="actor"?A8:Z==="target"?$8:j8,X=dA(Y,Q),J=X.length>0?X:Y;W=`${w.instancePath}: ${w.message}: ${J.join(", ")}`}else W=`${w.instancePath?w.instancePath:"activity stream"}: ${w.message}`;if("additionalProperty"in w.params)W+=`: ${w.params.additionalProperty}`;return W}var u0=new CG.default({strictTypes:!1,allErrors:!0});fG.default(u0);vG.default(u0);var h0="https://sockethub.org/schemas/v0",kQ={},aA={},EG=!1;kQ[`${h0}/activity-stream`]=O8;for(let w in kQ)u0.addSchema(kQ[w],w);function kG(w,Q){U8(w,Q,`${h0}/context/${w}/messages`,`${h0}/context/${w}/credentials`);let W=`${h0}/context/${w}/messages`;if(!u0.getSchema(W))u0.addSchema({},W);let Z=`${h0}/context/${w}/credentials`;if(!u0.getSchema(Z))u0.addSchema({},Z)}function yG(){if(EG)return;kG(B8,H8),kG(V8,M8),EG=!0}yG();function Q8(w,Q){let W=u0.getSchema(w);if(!W)return`schema ${w} not found`;if(!W(Q)){let Y=EQ(Q,W.errors,aA);if(Array.isArray(Q["@context"])){let X=f5(Q);if(X){let J=GW(X);if(J)Y=`[${J}] ${Y}`}}return Y}return""}function CQ(w){let Q=Q8(`${h0}/activity-stream`,w);if(Q)return Q;let W=f5(w);if(!W)return"activity streams must have exactly one registered platform context URL in @context";let Z=zW(W);if(!Z)return`platform context URL ${W} does not have a registered message schema`;return Q8(Z,w)}function fQ(w){if(!Array.isArray(w["@context"]))return"credential activity streams must have an @context set";if(w.type!=="credentials")return"credential activity streams must have credentials set as type";let Q=Q8(`${h0}/activity-stream`,w);if(Q)return Q;let W=f5(w);if(!W)return"credential activity streams must have exactly one registered platform context URL in @context";let Z=FW(W);if(!Z)return`platform context URL ${W} does not have a registered credentials schema`;return Q8(Z,w)}function W8(w,Q){let W=`${h0}/context/${Q}`;if(!u0.getSchema(W))u0.addSchema(w,W)}function vQ(w,Q){U8(w,Q,`${h0}/context/${w}/messages`,`${h0}/context/${w}/credentials`)}var uG={actor:"id",target:"id",object:"content"};function tA(w,Q){if(typeof w==="string")return{[Q]:w};if(Array.isArray(w))return w.map((W)=>{if(typeof W==="string")return{id:W};return W});return w}function P5(w){let Q={...w};for(let W of Object.keys(uG))if(W in Q)Q[W]=tA(Q[W],uG[W]);return Q}var _G=C5(gG(),1);var xG=_G.default;class b5{events={credentials:new Map,connect:new Map,join:new Map};_socket;socket;debug=!0;options;platformRegistry=new Map;asContextUrl;sockethubContextUrl;sockethubVersion;initState="idle";hasReadyOnce=!1;initCycle;initTokenCounter=0;initTimeoutTimer;waitingWarningTimer;waitingWarningIntervalMs=1e4;readyWaiters=[];outboundQueue=[];outboundSequence=0;registryFingerprint;latestReadyInfo;constructor(w,Q={}){if(!w)throw Error("SockethubClient requires a socket.io instance");if(this._socket=w,this.options={initTimeoutMs:Q.initTimeoutMs??5000,maxQueuedOutbound:Q.maxQueuedOutbound??1000,maxQueuedAgeMs:Q.maxQueuedAgeMs??30000},this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this._socket.connected)this.socket.connected=!0,this.socket.id=this._socket.id,this.socket._emit("connect"),this.startInitialization("initial-connect",!0)}clearCredentials(){this.events.credentials.clear()}getRegisteredPlatforms(){return Array.from(this.platformRegistry.values()).map((w)=>({...w,types:[...w.types],schemas:{...w.schemas}}))}isSchemasReady(){return this.isReady()}isReady(){return this.initState==="ready"}getInitState(){return this.initState}getRegisteredBaseContexts(){if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");return{as:this.asContextUrl,sockethub:this.sockethubContextUrl}}getPlatformSchema(w,Q="messages"){let W=w?.trim();if(!W)return;return this.platformRegistry.get(W)?.schemas?.[Q]}async waitForSchemas(w=2000){return await this.ready(w),this.buildPlatformRegistryPayload()}ready(w=this.options.initTimeoutMs){if(this.isReady()&&this.latestReadyInfo)return Promise.resolve(this.latestReadyInfo);return new Promise((Q,W)=>{let Z={resolve:Q,reject:W};if(w>0)Z.timer=setTimeout(()=>{this.readyWaiters=this.readyWaiters.filter((Y)=>Y!==Z),W(Error(`SockethubClient ready() timed out after ${w}ms`))},w);if(this.readyWaiters.push(Z),this.socket.connected&&this.initState==="idle")this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)})}validateActivity(w){if(w.type==="credentials")return fQ(w);return CQ(w)}contextFor(w){if(typeof w!=="string"||w.trim().length===0)throw Error("SockethubClient.contextFor(platform) requires a non-empty platform string");if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");let Q=w.trim(),W=this.platformRegistry.get(Q);if(!W){let Z=Array.from(this.platformRegistry.keys()).sort();throw Error(`unknown platform '${Q}'. Registered platforms: ${Z.join(", ")}`)}return[this.asContextUrl,this.sockethubContextUrl,W.contextUrl]}createPublicEmitter(){let w=new xG;return w._emit=w.emit,w.emit=(Q,W,Z)=>{this.handlePublicEmit(Q,W,Z)},w.connected=!1,w.disconnect=()=>{this._socket.disconnect()},w.connect=()=>{this._socket.connect()},w}requestSchemaRegistry(){if(!("io"in this._socket))return;this._socket.emit("schemas",this.registryFingerprint,(Q)=>{this.handleSchemasPayload(Q)})}applyPlatformRegistry(w){if(!w||typeof w!=="object")return;let Q=w,W=Q.contexts?.as,Z=Q.contexts?.sockethub;if(typeof W!=="string"||typeof Z!=="string"||!Array.isArray(Q.platforms))return;this.sockethubVersion=typeof Q.version==="string"?Q.version:"unknown",this.asContextUrl=W,this.sockethubContextUrl=Z,this.platformRegistry.clear();for(let X of Q.platforms){if(!X||typeof X!=="object"||typeof X.id!=="string"||typeof X.version!=="string"||typeof X.contextUrl!=="string")continue;this.platformRegistry.set(X.id,{...X,version:X.version,types:Array.isArray(X.types)?X.types:[],schemas:X.schemas||{}}),vQ(X.id,X.contextUrl);try{let J=X.schemas?.credentials;if(J&&typeof J==="object"&&!Array.isArray(J))W8(J,`${X.id}/credentials`);let q=X.schemas?.messages;if(q&&typeof q==="object"&&!Array.isArray(q))W8(q,`${X.id}/messages`)}catch(J){let q=J instanceof Error?J.message:String(J);console.warn(`[SockethubClient] Failed to register schemas for platform ${X.id}: ${q}`)}}let Y=this.buildPlatformRegistryPayload();return this.registryFingerprint=typeof Q.fingerprint==="string"?Q.fingerprint:void 0,this.socket._emit("schemas",Y),Y}eventCredentials(w){if(w.object&&w.object.type==="credentials"){let Q=w.actor.id||w.actor;this.events.credentials.set(Q,w)}}eventMessage(w){if(!this._socket.connected)return;let Q=b5.getKey(w);if(w.type==="join"||w.type==="connect")this.events[w.type].set(Q,w);else if(w.type==="leave")this.events.join.delete(Q);else if(w.type==="disconnect")this.events.connect.delete(Q)}static getKey(w){let Q=w.actor?.id||w.actor;if(!Q)throw Error(`actor property not present for message type: ${w?.type}`);let W=w.target?w.target.id||w.target:"";return`${Q}-${W}`}buildPlatformRegistryPayload(){return{version:this.sockethubVersion,contexts:this.asContextUrl&&this.sockethubContextUrl?{as:this.asContextUrl,sockethub:this.sockethubContextUrl}:void 0,platforms:this.getRegisteredPlatforms()}}buildReadyInfo(w){if(!this.sockethubVersion||!this.asContextUrl||!this.sockethubContextUrl)return;return{state:"ready",reason:w,sockethubVersion:this.sockethubVersion,contexts:{as:this.asContextUrl,sockethub:this.sockethubContextUrl},platforms:this.getRegisteredPlatforms().map((Q)=>({id:Q.id,version:Q.version,contextUrl:Q.contextUrl,contextVersion:Q.contextVersion,schemaVersion:Q.schemaVersion,types:[...Q.types]}))}}resolveReadyWaiters(w){let Q=this.readyWaiters;this.readyWaiters=[];for(let W of Q){if(W.timer)clearTimeout(W.timer);W.resolve(w)}}rejectReadyWaiters(w){let Q=this.readyWaiters;this.readyWaiters=[];for(let W of Q){if(W.timer)clearTimeout(W.timer);W.reject(w)}}emitInitError(w,Q,W){this.socket._emit("init_error",{error:w,phase:Q,retrying:W})}emitClientError(w,Q,W){if(typeof Q==="function"){Q({error:W});return}this.socket._emit("client_error",{event:w,error:W})}clearInitTimers(){if(this.initTimeoutTimer)clearTimeout(this.initTimeoutTimer),this.initTimeoutTimer=void 0;if(this.waitingWarningTimer)clearInterval(this.waitingWarningTimer),this.waitingWarningTimer=void 0}startWaitingWarnings(){if(this.waitingWarningTimer)return;this.waitingWarningTimer=setInterval(()=>{if(this.isReady()||this.initState==="closed"){this.clearInitTimers();return}let w=this.outboundQueue.length,Q=this.outboundQueue[0],W=Q?((Date.now()-Q.enqueuedAt)/1000).toFixed(1):"0.0";console.warn(`[SockethubClient] Still waiting for schemas; queued outbound messages: ${w}; oldest queued age: ${W}s.`)},this.waitingWarningIntervalMs)}startInitialization(w,Q){if(!this.socket.connected||this.initState==="closed")return;let W=++this.initTokenCounter;this.initCycle={token:W,reason:w,startedAt:Date.now(),replayOnReady:Q,timedOut:!1},this.initState="initializing",this.clearInitTimers(),this.initTimeoutTimer=setTimeout(()=>{if(!this.initCycle||this.initCycle.token!==W)return;this.initCycle.timedOut=!0,this.initState="init_error";let Z=`Initialization timed out after ${this.options.initTimeoutMs}ms waiting for schemas`;console.warn(`[SockethubClient] ${Z}; queued outbound messages: ${this.outboundQueue.length}. Waiting for schemas event from server.`),this.emitInitError(Z,"timeout",!1),this.startWaitingWarnings()},this.options.initTimeoutMs);try{this.requestSchemaRegistry()}catch(Z){this.initState="init_error";let Y=Z instanceof Error?Z.message:String(Z);this.emitInitError(Y,"schemas-request",!1),this.startWaitingWarnings()}}markReady(w){let Q=this.initCycle,W=Boolean(Q?.replayOnReady);this.initCycle=void 0,this.clearInitTimers(),this.initState="ready",this.hasReadyOnce=!0;let Z=this.buildReadyInfo(w);if(!Z){let Y=Error("Failed to build ready payload");this.initState="init_error",this.emitInitError(Y.message,"schemas-apply",!0),this.rejectReadyWaiters(Y);return}if(this.socket._emit("ready",Z),this.latestReadyInfo=Z,this.resolveReadyWaiters(Z),W)this.replay("credentials",this.events.credentials),this.replay("message",this.events.connect),this.replay("message",this.events.join);this.flushOutboundQueue()}handleSchemasPayload(w){if(!w||typeof w!=="object")return;if(w.unchanged===!0){if(typeof this.registryFingerprint==="string"&&this.platformRegistry.size>0){if(this.initCycle)this.markReady(this.initCycle.reason);else if(this.initState!=="ready")this.markReady("schemas-update");return}}let Q=w.fingerprint;if(this.initState==="ready"&&!this.initCycle&&Q&&Q===this.registryFingerprint)return;if(this.initState==="ready"&&!this.initCycle)this.initState="initializing";if(!this.applyPlatformRegistry(w)){this.initState="init_error",this.emitInitError("Received invalid schemas payload from server","schemas-apply",!0),this.startWaitingWarnings();return}if(this.initCycle){this.markReady(this.initCycle.reason);return}this.markReady("schemas-update")}handlePublicEmit(w,Q,W){let Z={event:w,content:Q,callback:W,enqueuedAt:Date.now(),sequence:this.outboundSequence++};if(!this.isReady()){this.enqueueOutbound(Z);return}this.sendOutbound(Z)}enqueueOutbound(w){if(this.outboundQueue.push(w),this.outboundQueue.length<=this.options.maxQueuedOutbound)return;let Q=this.outboundQueue.shift();if(!Q)return;this.emitClientError(Q.event,Q.callback,"SockethubClient queue overflow before ready")}flushOutboundQueue(){if(!this.isReady()||this.outboundQueue.length===0)return;let w=Date.now(),Q=this.outboundQueue.sort((W,Z)=>W.sequence-Z.sequence);this.outboundQueue=[];for(let W of Q){if(w-W.enqueuedAt>this.options.maxQueuedAgeMs){this.emitClientError(W.event,W.callback,`SockethubClient queued message expired after ${this.options.maxQueuedAgeMs}ms before initialization`);continue}this.sendOutbound(W)}}sendOutbound(w){let Q=w.content;try{if(w.event==="credentials"||w.event==="message"){if(Q=P5(w.content),Q&&typeof Q==="object"){let W=Q;if(w.event==="credentials"&&!W.type)W.type="credentials";if(W.actor&&typeof W.actor==="object"&&!W.actor.type)W.actor.type="person"}if(this.platformRegistry.size>0){let W=this.validateActivity(Q);if(W){this.emitClientError(w.event,w.callback,`SockethubClient validation failed: ${W}`);return}}}if(w.event==="credentials")this.eventCredentials(Q);else if(w.event==="message")this.eventMessage(Q);this._socket.emit(w.event,Q,w.callback)}catch(W){let Z=W instanceof Error?W.message:String(W);this.emitClientError(w.event,w.callback,Z)}}log(w,Q){if(this.debug)console.log(w,Q)}registerSocketIOHandlers(){this._socket.on("connect",()=>{this.socket.id=this._socket.id,this.socket.connected=!0,this.socket._emit("connect"),this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)}),this._socket.on("connect_error",(w)=>{this.socket._emit("connect_error",w)}),this._socket.on("disconnect",(w)=>{if(this.socket.connected=!1,this.initState!=="closed")this.initState="idle";this.clearInitTimers(),this.socket._emit("disconnect",w)}),this._socket.on("schemas",(w)=>{this.handleSchemasPayload(w)}),this._socket.on("message",(w)=>{this.socket._emit("message",P5(w))})}hasActorId(w){return"actor"in w&&w.actor!==null&&typeof w.actor==="object"&&"id"in w.actor&&typeof w.actor.id==="string"}replay(w,Q){for(let W of Q.values()){let Z=P5(W),Y=Z?.id;if(this.hasActorId(Z)){let X=Z.actor;Y=typeof X==="string"?X:X.id}this.log(`replaying ${w} for ${Y}`),this._socket.emit(w,Z)}}}((w)=>{w.SockethubClient=b5})(typeof globalThis==="object"?globalThis:{});})();
|
|
30
|
+
|
|
31
|
+
//# debugId=A02C048169FBA5DF64756E2164756E21
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vc2NvcGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL25hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2Vycm9ycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3J1bGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2FwcGxpY2FiaWxpdHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGVmYXVsdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvc3Vic2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLXRyYXZlcnNlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3Jlc29sdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9yZWZfZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2xpYi91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC11cmkvbGliL3NjaGVtZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VyaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29yZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb3JlL3JlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9tdWx0aXBsZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9wYXR0ZXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL2VxdWFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vY29uc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2VudW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsSXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMyMDIwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0eU5hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsUHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcGF0dGVyblByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL25vdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL29uZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbGxPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3RoZW5FbHNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9mb3JtYXQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9tZXRhZGF0YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvZm9ybWF0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL3Njb3BlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9uYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9ydWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvYXBwbGljYWJpbGl0eS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RlZmF1bHRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL3N1YnNjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvcmVzb2x2ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3JlZl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9kaXN0L2VzNS91cmkuYWxsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvcnVudGltZS91cmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb3JlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9yZWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbXVsdGlwbGVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vcGF0dGVybi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0UHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXRJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvZXF1YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2NvbnN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vZW51bS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYWRkaXRpb25hbEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zMjAyMC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2NvbnRhaW5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydHlOYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3BhdHRlcm5Qcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3Ivbm90LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9vbmVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FsbE9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci90aGVuRWxzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZm9ybWF0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL21ldGFkYXRhLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvbGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL25lYXJsZXkvbGliL25lYXJsZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NtdHAtYWRkcmVzcy1wYXJzZXIvZGlzdC9saWIvZ3JhbW1hci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc210cC1hZGRyZXNzLXBhcnNlci9kaXN0L2xpYi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zY2hlbWVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzLWRyYWZ0MjAxOS9mb3JtYXRzL2R1cmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pZG4tZW1haWwuanMiLCAibm9kZTpwdW55Y29kZSIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2Zvcm1hdHMvaWRuLWhvc3RuYW1lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmktcmVmZXJlbmNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwgIi4uL3NjaGVtYXMvc3JjL2NvbnRleHQudHMiLCAiLi4vc2NoZW1hcy9zcmMvaGVscGVycy9vYmplY3RzLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYXMvYWN0aXZpdHktc3RyZWFtLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3ZhbGlkYXRvci50cyIsICIuLi9zY2hlbWFzL3NyYy9oZWxwZXJzL2Vycm9yLXBhcnNlci50cyIsICIuLi9zY2hlbWFzL3NyYy9hY3Rpdml0eS1zdHJlYW0taGVscGVyLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4Lm1qcyIsICJzcmMvc29ja2V0aHViLWNsaWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVnZXhwQ29kZSA9IGV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGV4cG9ydHMuZ2V0UHJvcGVydHkgPSBleHBvcnRzLnNhZmVTdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyQ29uY2F0ID0gZXhwb3J0cy5hZGRDb2RlQXJnID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuX0NvZGUgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLklERU5USUZJRVIgPSBleHBvcnRzLl9Db2RlT3JOYW1lID0gdm9pZCAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHRyYW5lb3VzLWNsYXNzXG5jbGFzcyBfQ29kZU9yTmFtZSB7XG59XG5leHBvcnRzLl9Db2RlT3JOYW1lID0gX0NvZGVPck5hbWU7XG5leHBvcnRzLklERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbmNsYXNzIE5hbWUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3Iocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIWV4cG9ydHMuSURFTlRJRklFUi50ZXN0KHMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclwiKTtcbiAgICAgICAgdGhpcy5zdHIgPSBzO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB7IFt0aGlzLnN0cl06IDEgfTtcbiAgICB9XG59XG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuY2xhc3MgX0NvZGUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiID8gW2NvZGVdIDogY29kZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbMF07XG4gICAgICAgIHJldHVybiBpdGVtID09PSBcIlwiIHx8IGl0ZW0gPT09ICdcIlwiJztcbiAgICB9XG4gICAgZ2V0IHN0cigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX3N0cikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX3N0ciA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgocywgYykgPT4gYCR7c30ke2N9YCwgXCJcIikpKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fbmFtZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9uYW1lcyA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgobmFtZXMsIGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgICAgICAgICBuYW1lc1tjLnN0cl0gPSAobmFtZXNbYy5zdHJdIHx8IDApICsgMTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgfSwge30pKSk7XG4gICAgfVxufVxuZXhwb3J0cy5fQ29kZSA9IF9Db2RlO1xuZXhwb3J0cy5uaWwgPSBuZXcgX0NvZGUoXCJcIik7XG5mdW5jdGlvbiBfKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb2RlID0gW3N0cnNbMF1dO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGFkZENvZGVBcmcoY29kZSwgYXJnc1tpXSk7XG4gICAgICAgIGNvZGUucHVzaChzdHJzWysraV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9Db2RlKGNvZGUpO1xufVxuZXhwb3J0cy5fID0gXztcbmNvbnN0IHBsdXMgPSBuZXcgX0NvZGUoXCIrXCIpO1xuZnVuY3Rpb24gc3RyKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHByID0gW3NhZmVTdHJpbmdpZnkoc3Ryc1swXSldO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGV4cHIucHVzaChwbHVzKTtcbiAgICAgICAgYWRkQ29kZUFyZyhleHByLCBhcmdzW2ldKTtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMsIHNhZmVTdHJpbmdpZnkoc3Ryc1srK2ldKSk7XG4gICAgfVxuICAgIG9wdGltaXplKGV4cHIpO1xuICAgIHJldHVybiBuZXcgX0NvZGUoZXhwcik7XG59XG5leHBvcnRzLnN0ciA9IHN0cjtcbmZ1bmN0aW9uIGFkZENvZGVBcmcoY29kZSwgYXJnKSB7XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIF9Db2RlKVxuICAgICAgICBjb2RlLnB1c2goLi4uYXJnLl9pdGVtcyk7XG4gICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgY29kZS5wdXNoKGFyZyk7XG4gICAgZWxzZVxuICAgICAgICBjb2RlLnB1c2goaW50ZXJwb2xhdGUoYXJnKSk7XG59XG5leHBvcnRzLmFkZENvZGVBcmcgPSBhZGRDb2RlQXJnO1xuZnVuY3Rpb24gb3B0aW1pemUoZXhwcikge1xuICAgIGxldCBpID0gMTtcbiAgICB3aGlsZSAoaSA8IGV4cHIubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAoZXhwcltpXSA9PT0gcGx1cykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbWVyZ2VFeHBySXRlbXMoZXhwcltpIC0gMV0sIGV4cHJbaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGV4cHIuc3BsaWNlKGkgLSAxLCAzLCByZXMpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwcltpKytdID0gXCIrXCI7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRXhwckl0ZW1zKGEsIGIpIHtcbiAgICBpZiAoYiA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYTtcbiAgICBpZiAoYSA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYjtcbiAgICBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5hbWUgfHwgYVthLmxlbmd0aCAtIDFdICE9PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGIgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBgJHthLnNsaWNlKDAsIC0xKX0ke2J9XCJgO1xuICAgICAgICBpZiAoYlswXSA9PT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybiBhLnNsaWNlKDAsIC0xKSArIGIuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgJiYgYlswXSA9PT0gJ1wiJyAmJiAhKGEgaW5zdGFuY2VvZiBOYW1lKSlcbiAgICAgICAgcmV0dXJuIGBcIiR7YX0ke2Iuc2xpY2UoMSl9YDtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiBzdHJDb25jYXQoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLmVtcHR5U3RyKCkgPyBjMSA6IGMxLmVtcHR5U3RyKCkgPyBjMiA6IHN0ciBgJHtjMX0ke2MyfWA7XG59XG5leHBvcnRzLnN0ckNvbmNhdCA9IHN0ckNvbmNhdDtcbi8vIFRPRE8gZG8gbm90IGFsbG93IGFycmF5cyBoZXJlXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgeCA9PT0gbnVsbFxuICAgICAgICA/IHhcbiAgICAgICAgOiBzYWZlU3RyaW5naWZ5KEFycmF5LmlzQXJyYXkoeCkgPyB4LmpvaW4oXCIsXCIpIDogeCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUoc2FmZVN0cmluZ2lmeSh4KSk7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCBcIlxcXFx1MjAyOFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCBcIlxcXFx1MjAyOVwiKTtcbn1cbmV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IHNhZmVTdHJpbmdpZnk7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkgPyBuZXcgX0NvZGUoYC4ke2tleX1gKSA6IF8gYFske2tleX1dYDtcbn1cbmV4cG9ydHMuZ2V0UHJvcGVydHkgPSBnZXRQcm9wZXJ0eTtcbi8vRG9lcyBiZXN0IGVmZm9ydCB0byBmb3JtYXQgdGhlIG5hbWUgcHJvcGVybHlcbmZ1bmN0aW9uIGdldEVzbUV4cG9ydE5hbWUoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgX0NvZGUoYCR7a2V5fWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IGludmFsaWQgZXhwb3J0IG5hbWU6ICR7a2V5fSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKTtcbn1cbmV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGdldEVzbUV4cG9ydE5hbWU7XG5mdW5jdGlvbiByZWdleHBDb2RlKHJ4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShyeC50b1N0cmluZygpKTtcbn1cbmV4cG9ydHMucmVnZXhwQ29kZSA9IHJlZ2V4cENvZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNsYXNzIFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgQ29kZUdlbjogXCJjb2RlXCIgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5hbWUudmFsdWU7XG4gICAgfVxufVxudmFyIFVzZWRWYWx1ZVN0YXRlO1xuKGZ1bmN0aW9uIChVc2VkVmFsdWVTdGF0ZSkge1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiU3RhcnRlZFwiXSA9IDBdID0gXCJTdGFydGVkXCI7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJDb21wbGV0ZWRcIl0gPSAxXSA9IFwiQ29tcGxldGVkXCI7XG59KShVc2VkVmFsdWVTdGF0ZSB8fCAoZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSA9IFVzZWRWYWx1ZVN0YXRlID0ge30pKTtcbmV4cG9ydHMudmFyS2luZHMgPSB7XG4gICAgY29uc3Q6IG5ldyBjb2RlXzEuTmFtZShcImNvbnN0XCIpLFxuICAgIGxldDogbmV3IGNvZGVfMS5OYW1lKFwibGV0XCIpLFxuICAgIHZhcjogbmV3IGNvZGVfMS5OYW1lKFwidmFyXCIpLFxufTtcbmNsYXNzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3Rvcih7IHByZWZpeGVzLCBwYXJlbnQgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX25hbWVzID0ge307XG4gICAgICAgIHRoaXMuX3ByZWZpeGVzID0gcHJlZml4ZXM7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdG9OYW1lKG5hbWVPclByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmFtZU9yUHJlZml4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBuYW1lT3JQcmVmaXggOiB0aGlzLm5hbWUobmFtZU9yUHJlZml4KTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuTmFtZSh0aGlzLl9uZXdOYW1lKHByZWZpeCkpO1xuICAgIH1cbiAgICBfbmV3TmFtZShwcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbmcgPSB0aGlzLl9uYW1lc1twcmVmaXhdIHx8IHRoaXMuX25hbWVHcm91cChwcmVmaXgpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bmcuaW5kZXgrK31gO1xuICAgIH1cbiAgICBfbmFtZUdyb3VwKHByZWZpeCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKChfYiA9IChfYSA9IHRoaXMuX3BhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl9wcmVmaXhlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhwcmVmaXgpKSB8fCAodGhpcy5fcHJlZml4ZXMgJiYgIXRoaXMuX3ByZWZpeGVzLmhhcyhwcmVmaXgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBwcmVmaXggXCIke3ByZWZpeH1cIiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHNjb3BlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLl9uYW1lc1twcmVmaXhdID0geyBwcmVmaXgsIGluZGV4OiAwIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2NvcGUgPSBTY29wZTtcbmNsYXNzIFZhbHVlU2NvcGVOYW1lIGV4dGVuZHMgY29kZV8xLk5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHByZWZpeCwgbmFtZVN0cikge1xuICAgICAgICBzdXBlcihuYW1lU3RyKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgfVxuICAgIHNldFZhbHVlKHZhbHVlLCB7IHByb3BlcnR5LCBpdGVtSW5kZXggfSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2NvcGVQYXRoID0gKDAsIGNvZGVfMS5fKSBgLiR7bmV3IGNvZGVfMS5OYW1lKHByb3BlcnR5KX1bJHtpdGVtSW5kZXh9XWA7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IFZhbHVlU2NvcGVOYW1lO1xuY29uc3QgbGluZSA9ICgwLCBjb2RlXzEuXykgYFxcbmA7XG5jbGFzcyBWYWx1ZVNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9zY29wZSA9IG9wdHMuc2NvcGU7XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBsaW5lIDogY29kZV8xLm5pbCB9O1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZVNjb3BlTmFtZShwcmVmaXgsIHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIHZhbHVlKG5hbWVPclByZWZpeCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodmFsdWUucmVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiByZWYgbXVzdCBiZSBwYXNzZWQgaW4gdmFsdWVcIik7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBjb25zdCB7IHByZWZpeCB9ID0gbmFtZTtcbiAgICAgICAgY29uc3QgdmFsdWVLZXkgPSAoX2EgPSB2YWx1ZS5rZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlLnJlZjtcbiAgICAgICAgbGV0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICh2cykge1xuICAgICAgICAgICAgY29uc3QgX25hbWUgPSB2cy5nZXQodmFsdWVLZXkpO1xuICAgICAgICAgICAgaWYgKF9uYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF0gPSBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdnMuc2V0KHZhbHVlS2V5LCBuYW1lKTtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuX3Njb3BlW3ByZWZpeF0gfHwgKHRoaXMuX3Njb3BlW3ByZWZpeF0gPSBbXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHMubGVuZ3RoO1xuICAgICAgICBzW2l0ZW1JbmRleF0gPSB2YWx1ZS5yZWY7XG4gICAgICAgIG5hbWUuc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHk6IHByZWZpeCwgaXRlbUluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdO1xuICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gdnMuZ2V0KGtleU9yUmVmKTtcbiAgICB9XG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSwgdmFsdWVzID0gdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXModmFsdWVzLCAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUuc2NvcGVQYXRoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlXzEuXykgYCR7c2NvcGVOYW1lfSR7bmFtZS5zY29wZVBhdGh9YDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSh2YWx1ZXMgPSB0aGlzLl92YWx1ZXMsIHVzZWRWYWx1ZXMsIGdldENvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS52YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbmFtZSBcIiR7bmFtZX1cIiBoYXMgbm8gdmFsdWVgKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnZhbHVlLmNvZGU7XG4gICAgICAgIH0sIHVzZWRWYWx1ZXMsIGdldENvZGUpO1xuICAgIH1cbiAgICBfcmVkdWNlVmFsdWVzKHZhbHVlcywgdmFsdWVDb2RlLCB1c2VkVmFsdWVzID0ge30sIGdldENvZGUpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBjb2RlXzEubmlsO1xuICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZzID0gdmFsdWVzW3ByZWZpeF07XG4gICAgICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbmFtZVNldCA9ICh1c2VkVmFsdWVzW3ByZWZpeF0gPSB1c2VkVmFsdWVzW3ByZWZpeF0gfHwgbmV3IE1hcCgpKTtcbiAgICAgICAgICAgIHZzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZVNldC5oYXMobmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5TdGFydGVkKTtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IHZhbHVlQ29kZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWYgPSB0aGlzLm9wdHMuZXM1ID8gZXhwb3J0cy52YXJLaW5kcy52YXIgOiBleHBvcnRzLnZhcktpbmRzLmNvbnN0O1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7ZGVmfSAke25hbWV9ID0gJHtjfTske3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgoYyA9IGdldENvZGUgPT09IG51bGwgfHwgZ2V0Q29kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0Q29kZShuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgwLCBjb2RlXzEuXykgYCR7Y29kZX0ke2N9JHt0aGlzLm9wdHMuX259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5Db21wbGV0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlID0gVmFsdWVTY29wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjb3BlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9yID0gZXhwb3J0cy5hbmQgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMub3BlcmF0b3JzID0gZXhwb3J0cy52YXJLaW5kcyA9IGV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBleHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlNjb3BlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNvbnN0IHNjb3BlXzEgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbnZhciBjb2RlXzIgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJDb25jYXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJDb25jYXQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLmdldFByb3BlcnR5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVnZXhwQ29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnJlZ2V4cENvZGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuTmFtZTsgfSB9KTtcbnZhciBzY29wZV8yID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5TY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGVOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyS2luZHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIudmFyS2luZHM7IH0gfSk7XG5leHBvcnRzLm9wZXJhdG9ycyA9IHtcbiAgICBHVDogbmV3IGNvZGVfMS5fQ29kZShcIj5cIiksXG4gICAgR1RFOiBuZXcgY29kZV8xLl9Db2RlKFwiPj1cIiksXG4gICAgTFQ6IG5ldyBjb2RlXzEuX0NvZGUoXCI8XCIpLFxuICAgIExURTogbmV3IGNvZGVfMS5fQ29kZShcIjw9XCIpLFxuICAgIEVROiBuZXcgY29kZV8xLl9Db2RlKFwiPT09XCIpLFxuICAgIE5FUTogbmV3IGNvZGVfMS5fQ29kZShcIiE9PVwiKSxcbiAgICBOT1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCIhXCIpLFxuICAgIE9SOiBuZXcgY29kZV8xLl9Db2RlKFwifHxcIiksXG4gICAgQU5EOiBuZXcgY29kZV8xLl9Db2RlKFwiJiZcIiksXG4gICAgQUREOiBuZXcgY29kZV8xLl9Db2RlKFwiK1wiKSxcbn07XG5jbGFzcyBOb2RlIHtcbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhfbmFtZXMsIF9jb25zdGFudHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuY2xhc3MgRGVmIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgcmhzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgIH1cbiAgICByZW5kZXIoeyBlczUsIF9uIH0pIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IGVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgPSAke3RoaXMucmhzfWA7XG4gICAgICAgIHJldHVybiBgJHt2YXJLaW5kfSAke3RoaXMubmFtZX0ke3Joc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFuYW1lc1t0aGlzLm5hbWUuc3RyXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucmhzKVxuICAgICAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yaHMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLnJocy5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgICAgIHRoaXMuc2lkZUVmZmVjdHMgPSBzaWRlRWZmZWN0cztcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ID0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgIW5hbWVzW3RoaXMubGhzLnN0cl0gJiYgIXRoaXMuc2lkZUVmZmVjdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8ge30gOiB7IC4uLnRoaXMubGhzLm5hbWVzIH07XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMucmhzKTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ25PcCBleHRlbmRzIEFzc2lnbiB7XG4gICAgY29uc3RydWN0b3IobGhzLCBvcCwgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcihsaHMsIHJocywgc2lkZUVmZmVjdHMpO1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSAke3RoaXMub3B9PSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgTGFiZWwgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH06YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIEJyZWFrIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsID8gYCAke3RoaXMubGFiZWx9YCA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgYnJlYWske2xhYmVsfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgVGhyb3cgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGB0aHJvdyAke3RoaXMuZXJyb3J9O2AgKyBfbjtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvci5uYW1lcztcbiAgICB9XG59XG5jbGFzcyBBbnlDb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX1gID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGltaXplRXhwcih0aGlzLmNvZGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2RlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5jb2RlLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgUGFyZW50Tm9kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5vZGVzID0gW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKGNvZGUsIG4pID0+IGNvZGUgKyBuLnJlbmRlcihvcHRzKSwgXCJcIik7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV0ub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobikpXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEsIC4uLm4pO1xuICAgICAgICAgICAgZWxzZSBpZiAobilcbiAgICAgICAgICAgICAgICBub2Rlc1tpXSA9IG47XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRpbmcgYmFja3dhcmRzIGltcHJvdmVzIDEtcGFzcyBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChuLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBuLm5hbWVzKTtcbiAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChuYW1lcywgbikgPT4gYWRkTmFtZXMobmFtZXMsIG4ubmFtZXMpLCB7fSk7XG4gICAgfVxufVxuY2xhc3MgQmxvY2tOb2RlIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgb3B0cy5fbiArIHN1cGVyLnJlbmRlcihvcHRzKSArIFwifVwiICsgb3B0cy5fbjtcbiAgICB9XG59XG5jbGFzcyBSb290IGV4dGVuZHMgUGFyZW50Tm9kZSB7XG59XG5jbGFzcyBFbHNlIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkVsc2Uua2luZCA9IFwiZWxzZVwiO1xuY2xhc3MgSWYgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvbmRpdGlvbiwgbm9kZXMpIHtcbiAgICAgICAgc3VwZXIobm9kZXMpO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBgaWYoJHt0aGlzLmNvbmRpdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGNvZGUgKz0gXCJlbHNlIFwiICsgdGhpcy5lbHNlLnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgY29uc3QgY29uZCA9IHRoaXMuY29uZGl0aW9uO1xuICAgICAgICBpZiAoY29uZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVzOyAvLyBlbHNlIGlzIGlnbm9yZWQgaGVyZVxuICAgICAgICBsZXQgZSA9IHRoaXMuZWxzZTtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gZS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBlID0gdGhpcy5lbHNlID0gQXJyYXkuaXNBcnJheShucykgPyBuZXcgRWxzZShucykgOiBucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgSWYgPyBlIDogZS5ub2RlcztcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWYobm90KGNvbmQpLCBlIGluc3RhbmNlb2YgSWYgPyBbZV0gOiBlLm5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UgfHwgIXRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZWxzZSA9IChfYSA9IHRoaXMuZWxzZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIGlmICghKHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykgfHwgdGhpcy5lbHNlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5jb25kaXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmVsc2UubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuSWYua2luZCA9IFwiaWZcIjtcbmNsYXNzIEZvciBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5Gb3Iua2luZCA9IFwiZm9yXCI7XG5jbGFzcyBGb3JMb29wIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVyYXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy5pdGVyYXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmF0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhdGlvbi5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRm9yUmFuZ2UgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZnJvbSA9IGZyb207XG4gICAgICAgIHRoaXMudG8gPSB0bztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IG9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZnJvbSwgdG8gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dmFyS2luZH0gJHtuYW1lfT0ke2Zyb219OyAke25hbWV9PCR7dG99OyAke25hbWV9KyspYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IGFkZEV4cHJOYW1lcyhzdXBlci5uYW1lcywgdGhpcy5mcm9tKTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy50byk7XG4gICAgfVxufVxuY2xhc3MgRm9ySXRlciBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IobG9vcCwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb29wID0gbG9vcDtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IGl0ZXJhYmxlO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMudmFyS2luZH0gJHt0aGlzLm5hbWV9ICR7dGhpcy5sb29wfSAke3RoaXMuaXRlcmFibGV9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYWJsZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYWJsZS5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRnVuYyBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgYXJncywgYXN5bmMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5hc3luYyA9IGFzeW5jO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCBfYXN5bmMgPSB0aGlzLmFzeW5jID8gXCJhc3luYyBcIiA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHtfYXN5bmN9ZnVuY3Rpb24gJHt0aGlzLm5hbWV9KCR7dGhpcy5hcmdzfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZ1bmMua2luZCA9IFwiZnVuY1wiO1xuY2xhc3MgUmV0dXJuIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwicmV0dXJuIFwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cblJldHVybi5raW5kID0gXCJyZXR1cm5cIjtcbmNsYXNzIFRyeSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBcInRyeVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5jYXRjaC5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuZmluYWxseS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5jYXRjaC5uYW1lcyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5maW5hbGx5Lm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIENhdGNoIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgY2F0Y2goJHt0aGlzLmVycm9yfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkNhdGNoLmtpbmQgPSBcImNhdGNoXCI7XG5jbGFzcyBGaW5hbGx5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJmaW5hbGx5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRmluYWxseS5raW5kID0gXCJmaW5hbGx5XCI7XG5jbGFzcyBDb2RlR2VuIHtcbiAgICBjb25zdHJ1Y3RvcihleHRTY29wZSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cyA9IFtdO1xuICAgICAgICB0aGlzLl9jb25zdGFudHMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IFwiXFxuXCIgOiBcIlwiIH07XG4gICAgICAgIHRoaXMuX2V4dFNjb3BlID0gZXh0U2NvcGU7XG4gICAgICAgIHRoaXMuX3Njb3BlID0gbmV3IHNjb3BlXzEuU2NvcGUoeyBwYXJlbnQ6IGV4dFNjb3BlIH0pO1xuICAgICAgICB0aGlzLl9ub2RlcyA9IFtuZXcgUm9vdCgpXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LnJlbmRlcih0aGlzLm9wdHMpO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHVuaXF1ZSBuYW1lIGluIHRoZSBpbnRlcm5hbCBzY29wZVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZVxuICAgIHNjb3BlTmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlIGFuZCBhc3NpZ25zIHZhbHVlIHRvIGl0XG4gICAgc2NvcGVWYWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9leHRTY29wZS52YWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgdnMgPSB0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdIHx8ICh0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdID0gbmV3IFNldCgpKTtcbiAgICAgICAgdnMuYWRkKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0U2NvcGVWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5nZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKTtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGNvZGUgdGhhdCBhc3NpZ25zIHZhbHVlcyBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgdG8gdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgaW50ZXJuYWxseVxuICAgIC8vIChzYW1lIG5hbWVzIHRoYXQgd2VyZSByZXR1cm5lZCBieSBnZW4uc2NvcGVOYW1lIG9yIGdlbi5zY29wZVZhbHVlKVxuICAgIHNjb3BlUmVmcyhzY29wZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlUmVmcyhzY29wZU5hbWUsIHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlQ29kZSh0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBfZGVmKHZhcktpbmQsIG5hbWVPclByZWZpeCwgcmhzLCBjb25zdGFudCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmIChyaHMgIT09IHVuZGVmaW5lZCAmJiBjb25zdGFudClcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1tuYW1lLnN0cl0gPSByaHM7XG4gICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBEZWYodmFyS2luZCwgbmFtZSwgcmhzKSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICAvLyBgY29uc3RgIGRlY2xhcmF0aW9uIChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBjb25zdChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5jb25zdCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGBsZXRgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudCAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgbGV0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmxldCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGB2YXJgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudFxuICAgIHZhcihuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy52YXIsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBhc3NpZ25tZW50IGNvZGVcbiAgICBhc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykpO1xuICAgIH1cbiAgICAvLyBgKz1gIGNvZGVcbiAgICBhZGQobGhzLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ25PcChsaHMsIGV4cG9ydHMub3BlcmF0b3JzLkFERCwgcmhzKSk7XG4gICAgfVxuICAgIC8vIGFwcGVuZHMgcGFzc2VkIFNhZmVFeHByIHRvIGNvZGUgb3IgZXhlY3V0ZXMgQmxvY2tcbiAgICBjb2RlKGMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGMoKTtcbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gY29kZV8xLm5pbClcbiAgICAgICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBBbnlDb2RlKGMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIHJldHVybnMgY29kZSBmb3Igb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSBwYXNzZWQgYXJndW1lbnQgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnNcbiAgICBvYmplY3QoLi4ua2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBbXCJ7XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBrZXlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChjb2RlLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiLFwiKTtcbiAgICAgICAgICAgIGNvZGUucHVzaChrZXkpO1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gdmFsdWUgfHwgdGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIjpcIik7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5hZGRDb2RlQXJnKShjb2RlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29kZS5wdXNoKFwifVwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoY29kZSk7XG4gICAgfVxuICAgIC8vIGBpZmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYHRoZW5Cb2R5YCBhbmQsIG9wdGlvbmFsbHksIGBlbHNlQm9keWAgYXJlIHBhc3NlZClcbiAgICBpZihjb25kaXRpb24sIHRoZW5Cb2R5LCBlbHNlQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgICAgICBpZiAodGhlbkJvZHkgJiYgZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZWxzZSgpLmNvZGUoZWxzZUJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhlbkJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiBib2R5IHdpdGhvdXQgXCJ0aGVuXCIgYm9keScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZWxzZSBpZmAgY2xhdXNlIC0gaW52YWxpZCB3aXRob3V0IGBpZmAgb3IgYWZ0ZXIgYGVsc2VgIGNsYXVzZXNcbiAgICBlbHNlSWYoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgfVxuICAgIC8vIGBlbHNlYCBjbGF1c2UgLSBvbmx5IHZhbGlkIGFmdGVyIGBpZmAgb3IgYGVsc2UgaWZgIGNsYXVzZXNcbiAgICBlbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IEVsc2UoKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgaWZgIHN0YXRlbWVudCAobmVlZGVkIGlmIGdlbi5pZiB3YXMgdXNlZCBvbmx5IHdpdGggY29uZGl0aW9uKVxuICAgIGVuZElmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKElmLCBFbHNlKTtcbiAgICB9XG4gICAgX2Zvcihub2RlLCBmb3JCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZvckJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZm9yQm9keSkuZW5kRm9yKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBhIGdlbmVyaWMgYGZvcmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYGZvckJvZHlgIGlzIHBhc3NlZClcbiAgICBmb3IoaXRlcmF0aW9uLCBmb3JCb2R5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckxvb3AoaXRlcmF0aW9uKSwgZm9yQm9keSk7XG4gICAgfVxuICAgIC8vIGBmb3JgIHN0YXRlbWVudCBmb3IgYSByYW5nZSBvZiB2YWx1ZXNcbiAgICBmb3JSYW5nZShuYW1lT3JQcmVmaXgsIGZyb20sIHRvLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5sZXQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JSYW5nZSh2YXJLaW5kLCBuYW1lLCBmcm9tLCB0byksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLW9mYCBzdGF0ZW1lbnQgKGluIGVzNSBtb2RlIHJlcGxhY2Ugd2l0aCBhIG5vcm1hbCBmb3IgbG9vcClcbiAgICBmb3JPZihuYW1lT3JQcmVmaXgsIGl0ZXJhYmxlLCBmb3JCb2R5LCB2YXJLaW5kID0gc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBpdGVyYWJsZSBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8gaXRlcmFibGUgOiB0aGlzLnZhcihcIl9hcnJcIiwgaXRlcmFibGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yUmFuZ2UoXCJfaVwiLCAwLCAoMCwgY29kZV8xLl8pIGAke2Fycn0ubGVuZ3RoYCwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcihuYW1lLCAoMCwgY29kZV8xLl8pIGAke2Fycn1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBmb3JCb2R5KG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcIm9mXCIsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3ItaW5gIHN0YXRlbWVudC5cbiAgICAvLyBXaXRoIG9wdGlvbiBgb3duUHJvcGVydGllc2AgcmVwbGFjZWQgd2l0aCBhIGBmb3Itb2ZgIGxvb3AgZm9yIG9iamVjdCBrZXlzXG4gICAgZm9ySW4obmFtZU9yUHJlZml4LCBvYmosIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMub3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yT2YobmFtZU9yUHJlZml4LCAoMCwgY29kZV8xLl8pIGBPYmplY3Qua2V5cygke29ian0pYCwgZm9yQm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwiaW5cIiwgdmFyS2luZCwgbmFtZSwgb2JqKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgZm9yYCBsb29wXG4gICAgZW5kRm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZvcik7XG4gICAgfVxuICAgIC8vIGBsYWJlbGAgc3RhdGVtZW50XG4gICAgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBMYWJlbChsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgYnJlYWtgIHN0YXRlbWVudFxuICAgIGJyZWFrKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQnJlYWsobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYHJldHVybmAgc3RhdGVtZW50XG4gICAgcmV0dXJuKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHZhbHVlKTtcbiAgICAgICAgaWYgKG5vZGUubm9kZXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInJldHVyblwiIHNob3VsZCBoYXZlIG9uZSBub2RlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoUmV0dXJuKTtcbiAgICB9XG4gICAgLy8gYHRyeWAgc3RhdGVtZW50XG4gICAgdHJ5KHRyeUJvZHksIGNhdGNoQ29kZSwgZmluYWxseUNvZGUpIHtcbiAgICAgICAgaWYgKCFjYXRjaENvZGUgJiYgIWZpbmFsbHlDb2RlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInRyeVwiIHdpdGhvdXQgXCJjYXRjaFwiIGFuZCBcImZpbmFsbHlcIicpO1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyeSgpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh0cnlCb2R5KTtcbiAgICAgICAgaWYgKGNhdGNoQ29kZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5hbWUoXCJlXCIpO1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmNhdGNoID0gbmV3IENhdGNoKGVycm9yKTtcbiAgICAgICAgICAgIGNhdGNoQ29kZShlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsbHlDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuZmluYWxseSA9IG5ldyBGaW5hbGx5KCk7XG4gICAgICAgICAgICB0aGlzLmNvZGUoZmluYWxseUNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoQ2F0Y2gsIEZpbmFsbHkpO1xuICAgIH1cbiAgICAvLyBgdGhyb3dgIHN0YXRlbWVudFxuICAgIHRocm93KGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgVGhyb3coZXJyb3IpKTtcbiAgICB9XG4gICAgLy8gc3RhcnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBibG9jayhib2R5LCBub2RlQ291bnQpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMucHVzaCh0aGlzLl9ub2Rlcy5sZW5ndGgpO1xuICAgICAgICBpZiAoYm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShib2R5KS5lbmRCbG9jayhub2RlQ291bnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIHRoZSBjdXJyZW50IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgZW5kQmxvY2sobm9kZUNvdW50KSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuX2Jsb2NrU3RhcnRzLnBvcCgpO1xuICAgICAgICBpZiAobGVuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiBub3QgaW4gc2VsZi1iYWxhbmNpbmcgYmxvY2tcIik7XG4gICAgICAgIGNvbnN0IHRvQ2xvc2UgPSB0aGlzLl9ub2Rlcy5sZW5ndGggLSBsZW47XG4gICAgICAgIGlmICh0b0Nsb3NlIDwgMCB8fCAobm9kZUNvdW50ICE9PSB1bmRlZmluZWQgJiYgdG9DbG9zZSAhPT0gbm9kZUNvdW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiB3cm9uZyBudW1iZXIgb2Ygbm9kZXM6ICR7dG9DbG9zZX0gdnMgJHtub2RlQ291bnR9IGV4cGVjdGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbm9kZXMubGVuZ3RoID0gbGVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGZ1bmN0aW9uYCBoZWFkaW5nIChvciBkZWZpbml0aW9uIGlmIGZ1bmNCb2R5IGlzIHBhc3NlZClcbiAgICBmdW5jKG5hbWUsIGFyZ3MgPSBjb2RlXzEubmlsLCBhc3luYywgZnVuY0JvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBGdW5jKG5hbWUsIGFyZ3MsIGFzeW5jKSk7XG4gICAgICAgIGlmIChmdW5jQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmdW5jQm9keSkuZW5kRnVuYygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICBlbmRGdW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZ1bmMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShuID0gMSkge1xuICAgICAgICB3aGlsZSAobi0tID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTmFtZXModGhpcy5fcm9vdC5uYW1lcywgdGhpcy5fY29uc3RhbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfbGVhZk5vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgX2Jsb2NrTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIF9lbmRCbG9ja05vZGUoTjEsIE4yKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBOMSB8fCAoTjIgJiYgbiBpbnN0YW5jZW9mIE4yKSkge1xuICAgICAgICAgICAgdGhpcy5fbm9kZXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5vdCBpbiBibG9jayBcIiR7TjIgPyBgJHtOMS5raW5kfS8ke04yLmtpbmR9YCA6IE4xLmtpbmR9XCJgKTtcbiAgICB9XG4gICAgX2Vsc2VOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAoIShuIGluc3RhbmNlb2YgSWYpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIHdpdGhvdXQgXCJpZlwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBuLmVsc2UgPSBub2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IF9yb290KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbMF07XG4gICAgfVxuICAgIGdldCBfY3Vyck5vZGUoKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIHJldHVybiBuc1tucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgc2V0IF9jdXJyTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIG5zW25zLmxlbmd0aCAtIDFdID0gbm9kZTtcbiAgICB9XG59XG5leHBvcnRzLkNvZGVHZW4gPSBDb2RlR2VuO1xuZnVuY3Rpb24gYWRkTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgKyAoZnJvbVtuXSB8fCAwKTtcbiAgICByZXR1cm4gbmFtZXM7XG59XG5mdW5jdGlvbiBhZGRFeHByTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICByZXR1cm4gZnJvbSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IGFkZE5hbWVzKG5hbWVzLCBmcm9tLm5hbWVzKSA6IG5hbWVzO1xufVxuZnVuY3Rpb24gb3B0aW1pemVFeHByKGV4cHIsIG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICBpZiAoZXhwciBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICByZXR1cm4gcmVwbGFjZU5hbWUoZXhwcik7XG4gICAgaWYgKCFjYW5PcHRpbWl6ZShleHByKSlcbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoZXhwci5faXRlbXMucmVkdWNlKChpdGVtcywgYykgPT4ge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICAgICAgYyA9IHJlcGxhY2VOYW1lKGMpO1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSlcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uYy5faXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGMpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10pKTtcbiAgICBmdW5jdGlvbiByZXBsYWNlTmFtZShuKSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdGFudHNbbi5zdHJdO1xuICAgICAgICBpZiAoYyA9PT0gdW5kZWZpbmVkIHx8IG5hbWVzW24uc3RyXSAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWxldGUgbmFtZXNbbi5zdHJdO1xuICAgICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoZSkge1xuICAgICAgICByZXR1cm4gKGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUgJiZcbiAgICAgICAgICAgIGUuX2l0ZW1zLnNvbWUoKGMpID0+IGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiBuYW1lc1tjLnN0cl0gPT09IDEgJiYgY29uc3RhbnRzW2Muc3RyXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3VidHJhY3ROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSAtIChmcm9tW25dIHx8IDApO1xufVxuZnVuY3Rpb24gbm90KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIHggPT0gXCJudW1iZXJcIiB8fCB4ID09PSBudWxsID8gIXggOiAoMCwgY29kZV8xLl8pIGAhJHtwYXIoeCl9YDtcbn1cbmV4cG9ydHMubm90ID0gbm90O1xuY29uc3QgYW5kQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuQU5EKTtcbi8vIGJvb2xlYW4gQU5EICgmJikgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBhbmQoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShhbmRDb2RlKTtcbn1cbmV4cG9ydHMuYW5kID0gYW5kO1xuY29uc3Qgb3JDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5PUik7XG4vLyBib29sZWFuIE9SICh8fCkgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBvciguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKG9yQ29kZSk7XG59XG5leHBvcnRzLm9yID0gb3I7XG5mdW5jdGlvbiBtYXBwZW5kKG9wKSB7XG4gICAgcmV0dXJuICh4LCB5KSA9PiAoeCA9PT0gY29kZV8xLm5pbCA/IHkgOiB5ID09PSBjb2RlXzEubmlsID8geCA6ICgwLCBjb2RlXzEuXykgYCR7cGFyKHgpfSAke29wfSAke3Bhcih5KX1gKTtcbn1cbmZ1bmN0aW9uIHBhcih4KSB7XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHggOiAoMCwgY29kZV8xLl8pIGAoJHt4fSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gZXhwb3J0cy5nZXRFcnJvclBhdGggPSBleHBvcnRzLlR5cGUgPSBleHBvcnRzLnVzZUZ1bmMgPSBleHBvcnRzLnNldEV2YWx1YXRlZCA9IGV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBleHBvcnRzLm1lcmdlRXZhbHVhdGVkID0gZXhwb3J0cy5lYWNoSXRlbSA9IGV4cG9ydHMudW5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBleHBvcnRzLmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy51bmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gZXhwb3J0cy5jaGVja1Vua25vd25SdWxlcyA9IGV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBleHBvcnRzLnRvSGFzaCA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuL2NvZGVcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBTZXRcbmZ1bmN0aW9uIHRvSGFzaChhcnIpIHtcbiAgICBjb25zdCBoYXNoID0ge307XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFycilcbiAgICAgICAgaGFzaFtpdGVtXSA9IHRydWU7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5leHBvcnRzLnRvSGFzaCA9IHRvSGFzaDtcbmZ1bmN0aW9uIGFsd2F5c1ZhbGlkU2NoZW1hKGl0LCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hKS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEpO1xuICAgIHJldHVybiAhc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBpdC5zZWxmLlJVTEVTLmFsbCk7XG59XG5leHBvcnRzLmFsd2F5c1ZhbGlkU2NoZW1hID0gYWx3YXlzVmFsaWRTY2hlbWE7XG5mdW5jdGlvbiBjaGVja1Vua25vd25SdWxlcyhpdCwgc2NoZW1hID0gaXQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoIW9wdHMuc3RyaWN0U2NoZW1hKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZXMgPSBzZWxmLlJVTEVTLmtleXdvcmRzO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoIXJ1bGVzW2tleV0pXG4gICAgICAgICAgICBjaGVja1N0cmljdE1vZGUoaXQsIGB1bmtub3duIGtleXdvcmQ6IFwiJHtrZXl9XCJgKTtcbiAgICB9XG59XG5leHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gY2hlY2tVbmtub3duUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIHJ1bGVzKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHJ1bGVzW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gc2NoZW1hSGFzUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlc0J1dFJlZihzY2hlbWEsIFJVTEVTKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKGtleSAhPT0gXCIkcmVmXCIgJiYgUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzQnV0UmVmID0gc2NoZW1hSGFzUnVsZXNCdXRSZWY7XG5mdW5jdGlvbiBzY2hlbWFSZWZPclZhbCh7IHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9LCBzY2hlbWEsIGtleXdvcmQsICRkYXRhKSB7XG4gICAgaWYgKCEkZGF0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm51bWJlclwiIHx8IHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfWA7XG4gICAgfVxuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX1gO1xufVxuZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IHNjaGVtYVJlZk9yVmFsO1xuZnVuY3Rpb24gdW5lc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5leHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSB1bmVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlc2NhcGVKc29uUG9pbnRlcihzdHIpKTtcbn1cbmV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBlc2NhcGVGcmFnbWVudDtcbmZ1bmN0aW9uIGVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICAgIGlmICh0eXBlb2Ygc3RyID09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybiBgJHtzdHJ9YDtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbn1cbmV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBlc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCBcIi9cIikucmVwbGFjZSgvfjAvZywgXCJ+XCIpO1xufVxuZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gdW5lc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIGVhY2hJdGVtKHhzLCBmKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgeCBvZiB4cylcbiAgICAgICAgICAgIGYoeCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmKHhzKTtcbiAgICB9XG59XG5leHBvcnRzLmVhY2hJdGVtID0gZWFjaEl0ZW07XG5mdW5jdGlvbiBtYWtlTWVyZ2VFdmFsdWF0ZWQoeyBtZXJnZU5hbWVzLCBtZXJnZVRvTmFtZSwgbWVyZ2VWYWx1ZXMsIHJlc3VsdFRvTmFtZSwgfSkge1xuICAgIHJldHVybiAoZ2VuLCBmcm9tLCB0bywgdG9OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRvID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZnJvbVxuICAgICAgICAgICAgOiB0byBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgPyAoZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gbWVyZ2VOYW1lcyhnZW4sIGZyb20sIHRvKSA6IG1lcmdlVG9OYW1lKGdlbiwgZnJvbSwgdG8pLCB0bylcbiAgICAgICAgICAgICAgICA6IGZyb20gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZVxuICAgICAgICAgICAgICAgICAgICA/IChtZXJnZVRvTmFtZShnZW4sIHRvLCBmcm9tKSwgZnJvbSlcbiAgICAgICAgICAgICAgICAgICAgOiBtZXJnZVZhbHVlcyhmcm9tLCB0byk7XG4gICAgICAgIHJldHVybiB0b05hbWUgPT09IGNvZGVnZW5fMS5OYW1lICYmICEocmVzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpID8gcmVzdWx0VG9OYW1lKGdlbiwgcmVzKSA6IHJlcztcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZUV2YWx1YXRlZCA9IHtcbiAgICBwcm9wczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZWAsICgpID0+IGdlbi5hc3NpZ24odG8sIHRydWUpLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LmFzc2lnbigke3RvfSwgJHtmcm9tfSlgKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZVRvTmFtZTogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZWAsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmcm9tID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih0bywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApO1xuICAgICAgICAgICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHRvLCBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IHsgLi4uZnJvbSwgLi4udG8gfSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogZXZhbHVhdGVkUHJvcHNUb05hbWUsXG4gICAgfSksXG4gICAgaXRlbXM6IG1ha2VNZXJnZUV2YWx1YXRlZCh7XG4gICAgICAgIG1lcmdlTmFtZXM6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWUgJiYgJHtmcm9tfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZSA/IHRydWUgOiAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IE1hdGgubWF4KGZyb20sIHRvKSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogKGdlbiwgaXRlbXMpID0+IGdlbi52YXIoXCJpdGVtc1wiLCBpdGVtcyksXG4gICAgfSksXG59O1xuZnVuY3Rpb24gZXZhbHVhdGVkUHJvcHNUb05hbWUoZ2VuLCBwcykge1xuICAgIGlmIChwcyA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuIGdlbi52YXIoXCJwcm9wc1wiLCB0cnVlKTtcbiAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgIGlmIChwcyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzZXRFdmFsdWF0ZWQoZ2VuLCBwcm9wcywgcHMpO1xuICAgIHJldHVybiBwcm9wcztcbn1cbmV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBldmFsdWF0ZWRQcm9wc1RvTmFtZTtcbmZ1bmN0aW9uIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcykge1xuICAgIE9iamVjdC5rZXlzKHBzKS5mb3JFYWNoKChwKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwKX1gLCB0cnVlKSk7XG59XG5leHBvcnRzLnNldEV2YWx1YXRlZCA9IHNldEV2YWx1YXRlZDtcbmNvbnN0IHNuaXBwZXRzID0ge307XG5mdW5jdGlvbiB1c2VGdW5jKGdlbiwgZikge1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImZ1bmNcIiwge1xuICAgICAgICByZWY6IGYsXG4gICAgICAgIGNvZGU6IHNuaXBwZXRzW2YuY29kZV0gfHwgKHNuaXBwZXRzW2YuY29kZV0gPSBuZXcgY29kZV8xLl9Db2RlKGYuY29kZSkpLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VGdW5jID0gdXNlRnVuYztcbnZhciBUeXBlO1xuKGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgVHlwZVtUeXBlW1wiTnVtXCJdID0gMF0gPSBcIk51bVwiO1xuICAgIFR5cGVbVHlwZVtcIlN0clwiXSA9IDFdID0gXCJTdHJcIjtcbn0pKFR5cGUgfHwgKGV4cG9ydHMuVHlwZSA9IFR5cGUgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0RXJyb3JQYXRoKGRhdGFQcm9wLCBkYXRhUHJvcFR5cGUsIGpzUHJvcGVydHlTeW50YXgpIHtcbiAgICAvLyBsZXQgcGF0aFxuICAgIGlmIChkYXRhUHJvcCBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gZGF0YVByb3BUeXBlID09PSBUeXBlLk51bTtcbiAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXhcbiAgICAgICAgICAgID8gaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiW1wiICsgJHtkYXRhUHJvcH0gKyBcIl1cImBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiWydcIiArICR7ZGF0YVByb3B9ICsgXCInXVwiYFxuICAgICAgICAgICAgOiBpc051bWJlclxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgXCIvXCIgKyAke2RhdGFQcm9wfWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH0ucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcXFwvL2csIFwifjFcIilgOyAvLyBUT0RPIG1heWJlIHVzZSBnbG9iYWwgZXNjYXBlUG9pbnRlclxuICAgIH1cbiAgICByZXR1cm4ganNQcm9wZXJ0eVN5bnRheCA/ICgwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGRhdGFQcm9wKS50b1N0cmluZygpIDogXCIvXCIgKyBlc2NhcGVKc29uUG9pbnRlcihkYXRhUHJvcCk7XG59XG5leHBvcnRzLmdldEVycm9yUGF0aCA9IGdldEVycm9yUGF0aDtcbmZ1bmN0aW9uIGNoZWNrU3RyaWN0TW9kZShpdCwgbXNnLCBtb2RlID0gaXQub3B0cy5zdHJpY3RTY2hlbWEpIHtcbiAgICBpZiAoIW1vZGUpXG4gICAgICAgIHJldHVybjtcbiAgICBtc2cgPSBgc3RyaWN0IG1vZGU6ICR7bXNnfWA7XG4gICAgaWYgKG1vZGUgPT09IHRydWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIGl0LnNlbGYubG9nZ2VyLndhcm4obXNnKTtcbn1cbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gY2hlY2tTdHJpY3RNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzID0ge1xuICAgIC8vIHZhbGlkYXRpb24gZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgZGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZGF0YVwiKSwgLy8gZGF0YSBwYXNzZWQgdG8gdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgIC8vIGFyZ3MgcGFzc2VkIGZyb20gcmVmZXJlbmNpbmcgc2NoZW1hXG4gICAgdmFsQ3h0OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2YWxDeHRcIiksIC8vIHZhbGlkYXRpb24vZGF0YSBjb250ZXh0IC0gc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LCBpdCBpcyBkZXN0cnVjdHVyZWQgdG8gdGhlIG5hbWVzIGJlbG93XG4gICAgaW5zdGFuY2VQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJpbnN0YW5jZVBhdGhcIiksXG4gICAgcGFyZW50RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVwiKSxcbiAgICBwYXJlbnREYXRhUHJvcGVydHk6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudERhdGFQcm9wZXJ0eVwiKSxcbiAgICByb290RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicm9vdERhdGFcIiksIC8vIHJvb3QgZGF0YSAtIHNhbWUgYXMgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBmaXJzdC90b3AgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgIGR5bmFtaWNBbmNob3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJkeW5hbWljQW5jaG9yc1wiKSwgLy8gdXNlZCB0byBzdXBwb3J0IHJlY3Vyc2l2ZVJlZiBhbmQgZHluYW1pY1JlZlxuICAgIC8vIGZ1bmN0aW9uIHNjb3BlZCB2YXJpYWJsZXNcbiAgICB2RXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2RXJyb3JzXCIpLCAvLyBudWxsIG9yIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgZXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJlcnJvcnNcIiksIC8vIGNvdW50ZXIgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB0aGlzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ0aGlzXCIpLFxuICAgIC8vIFwiZ2xvYmFsc1wiXG4gICAgc2VsZjogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2VsZlwiKSxcbiAgICBzY29wZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2NvcGVcIiksXG4gICAgLy8gSlREIHNlcmlhbGl6ZS9wYXJzZSBuYW1lIGZvciBKU09OIHN0cmluZyBhbmQgcG9zaXRpb25cbiAgICBqc29uOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uXCIpLFxuICAgIGpzb25Qb3M6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25Qb3NcIiksXG4gICAganNvbkxlbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvbkxlblwiKSxcbiAgICBqc29uUGFydDogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblBhcnRcIiksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gbmFtZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSBleHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSBleHBvcnRzLnJlcG9ydEVycm9yID0gZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5leHBvcnRzLmtleXdvcmRFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBwYXNzIFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgdmFsaWRhdGlvbmAsXG59O1xuZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFUeXBlIH0pID0+IHNjaGVtYVR5cGVcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgbXVzdCBiZSAke3NjaGVtYVR5cGV9ICgkZGF0YSlgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0RXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzLCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgaWYgKG92ZXJyaWRlQWxsRXJyb3JzICE9PSBudWxsICYmIG92ZXJyaWRlQWxsRXJyb3JzICE9PSB2b2lkIDAgPyBvdmVycmlkZUFsbEVycm9ycyA6IChjb21wb3NpdGVSdWxlIHx8IGFsbEVycm9ycykpIHtcbiAgICAgICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuRXJyb3JzKGl0LCAoMCwgY29kZWdlbl8xLl8pIGBbJHtlcnJPYmp9XWApO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXJyb3IgPSByZXBvcnRFcnJvcjtcbmZ1bmN0aW9uIHJlcG9ydEV4dHJhRXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzKSB7XG4gICAgY29uc3QgeyBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBhbGxFcnJvcnMgfSA9IGl0O1xuICAgIGNvbnN0IGVyck9iaiA9IGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbiAgICBhZGRFcnJvcihnZW4sIGVyck9iaik7XG4gICAgaWYgKCEoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXh0cmFFcnJvciA9IHJlcG9ydEV4dHJhRXJyb3I7XG5mdW5jdGlvbiByZXNldEVycm9yc0NvdW50KGdlbiwgZXJyc0NvdW50KSB7XG4gICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCBlcnJzQ291bnQpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsICgpID0+IGdlbi5pZihlcnJzQ291bnQsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCwgZXJyc0NvdW50KSwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCkpKTtcbn1cbmV4cG9ydHMucmVzZXRFcnJvcnNDb3VudCA9IHJlc2V0RXJyb3JzQ291bnQ7XG5mdW5jdGlvbiBleHRlbmRFcnJvcnMoeyBnZW4sIGtleXdvcmQsIHNjaGVtYVZhbHVlLCBkYXRhLCBlcnJzQ291bnQsIGl0LCB9KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgZXJyID0gZ2VuLm5hbWUoXCJlcnJcIik7XG4gICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBlcnJzQ291bnQsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIChpKSA9PiB7XG4gICAgICAgIGdlbi5jb25zdChlcnIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9WyR7aX1dYCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5pbnN0YW5jZVBhdGhgLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaXQuZXJyb3JQYXRoKSkpO1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5zY2hlbWFQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHIpIGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hYCwgc2NoZW1hVmFsdWUpO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uZGF0YWAsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmV4dGVuZEVycm9ycyA9IGV4dGVuZEVycm9ycztcbmZ1bmN0aW9uIGFkZEVycm9yKGdlbiwgZXJyT2JqKSB7XG4gICAgY29uc3QgZXJyID0gZ2VuLmNvbnN0KFwiZXJyXCIsIGVyck9iaik7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsYCwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyfV1gKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ucHVzaCgke2Vycn0pYCk7XG4gICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSsrYCk7XG59XG5mdW5jdGlvbiByZXR1cm5FcnJvcnMoaXQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWFFbnYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KCR7ZXJyc30pYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBlcnJzKTtcbiAgICAgICAgZ2VuLnJldHVybihmYWxzZSk7XG4gICAgfVxufVxuY29uc3QgRSA9IHtcbiAgICBrZXl3b3JkOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJrZXl3b3JkXCIpLFxuICAgIHNjaGVtYVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVBhdGhcIiksIC8vIGFsc28gdXNlZCBpbiBKVEQgZXJyb3JzXG4gICAgcGFyYW1zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJhbXNcIiksXG4gICAgcHJvcGVydHlOYW1lOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwcm9wZXJ0eU5hbWVcIiksXG4gICAgbWVzc2FnZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwibWVzc2FnZVwiKSxcbiAgICBzY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVwiKSxcbiAgICBwYXJlbnRTY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudFNjaGVtYVwiKSxcbn07XG5mdW5jdGlvbiBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgY3JlYXRlRXJyb3JzIH0gPSBjeHQuaXQ7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7fWA7XG4gICAgcmV0dXJuIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xufVxuZnVuY3Rpb24gZXJyb3JPYmplY3QoY3h0LCBlcnJvciwgZXJyb3JQYXRocyA9IHt9KSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3Qga2V5VmFsdWVzID0gW1xuICAgICAgICBlcnJvckluc3RhbmNlUGF0aChpdCwgZXJyb3JQYXRocyksXG4gICAgICAgIGVycm9yU2NoZW1hUGF0aChjeHQsIGVycm9yUGF0aHMpLFxuICAgIF07XG4gICAgZXh0cmFFcnJvclByb3BzKGN4dCwgZXJyb3IsIGtleVZhbHVlcyk7XG4gICAgcmV0dXJuIGdlbi5vYmplY3QoLi4ua2V5VmFsdWVzKTtcbn1cbmZ1bmN0aW9uIGVycm9ySW5zdGFuY2VQYXRoKHsgZXJyb3JQYXRoIH0sIHsgaW5zdGFuY2VQYXRoIH0pIHtcbiAgICBjb25zdCBpbnN0UGF0aCA9IGluc3RhbmNlUGF0aFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoaW5zdGFuY2VQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWBcbiAgICAgICAgOiBlcnJvclBhdGg7XG4gICAgcmV0dXJuIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaW5zdFBhdGgpXTtcbn1cbmZ1bmN0aW9uIGVycm9yU2NoZW1hUGF0aCh7IGtleXdvcmQsIGl0OiB7IGVyclNjaGVtYVBhdGggfSB9LCB7IHNjaGVtYVBhdGgsIHBhcmVudFNjaGVtYSB9KSB7XG4gICAgbGV0IHNjaFBhdGggPSBwYXJlbnRTY2hlbWEgPyBlcnJTY2hlbWFQYXRoIDogKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gO1xuICAgIGlmIChzY2hlbWFQYXRoKSB7XG4gICAgICAgIHNjaFBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7c2NoUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShzY2hlbWFQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWA7XG4gICAgfVxuICAgIHJldHVybiBbRS5zY2hlbWFQYXRoLCBzY2hQYXRoXTtcbn1cbmZ1bmN0aW9uIGV4dHJhRXJyb3JQcm9wcyhjeHQsIHsgcGFyYW1zLCBtZXNzYWdlIH0sIGtleVZhbHVlcykge1xuICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hVmFsdWUsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBvcHRzLCBwcm9wZXJ0eU5hbWUsIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAga2V5VmFsdWVzLnB1c2goW0Uua2V5d29yZCwga2V5d29yZF0sIFtFLnBhcmFtcywgdHlwZW9mIHBhcmFtcyA9PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMoY3h0KSA6IHBhcmFtcyB8fCAoMCwgY29kZWdlbl8xLl8pIGB7fWBdKTtcbiAgICBpZiAob3B0cy5tZXNzYWdlcykge1xuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5tZXNzYWdlLCB0eXBlb2YgbWVzc2FnZSA9PSBcImZ1bmN0aW9uXCIgPyBtZXNzYWdlKGN4dCkgOiBtZXNzYWdlXSk7XG4gICAgfVxuICAgIGlmIChvcHRzLnZlcmJvc2UpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0Uuc2NoZW1hLCBzY2hlbWFWYWx1ZV0sIFtFLnBhcmVudFNjaGVtYSwgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWBdLCBbbmFtZXNfMS5kZWZhdWx0LmRhdGEsIGRhdGFdKTtcbiAgICB9XG4gICAgaWYgKHByb3BlcnR5TmFtZSlcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ib29sT3JFbXB0eVNjaGVtYSA9IGV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCBib29sRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJib29sZWFuIHNjaGVtYSBpcyBmYWxzZVwiLFxufTtcbmZ1bmN0aW9uIHRvcEJvb2xPckVtcHR5U2NoZW1hKGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0LCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiBzY2hlbWEuJGFzeW5jID09PSB0cnVlKSB7XG4gICAgICAgIGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgbnVsbCk7XG4gICAgICAgIGdlbi5yZXR1cm4odHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy50b3BCb29sT3JFbXB0eVNjaGVtYSA9IHRvcEJvb2xPckVtcHR5U2NoZW1hO1xuZnVuY3Rpb24gYm9vbE9yRW1wdHlTY2hlbWEoaXQsIHZhbGlkKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZ2VuLnZhcih2YWxpZCwgZmFsc2UpOyAvLyBUT0RPIHZhclxuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIHRydWUpOyAvLyBUT0RPIHZhclxuICAgIH1cbn1cbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBib29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGZhbHNlU2NoZW1hRXJyb3IoaXQsIG92ZXJyaWRlQWxsRXJyb3JzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEgfSA9IGl0O1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBvdGhlciBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgZm9yIG5vbi1rZXl3b3JkIHZhbGlkYXRpb24gZXJyb3JzLi4uXG4gICAgY29uc3QgY3h0ID0ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwiZmFsc2Ugc2NoZW1hXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogZmFsc2UsXG4gICAgICAgIHNjaGVtYUNvZGU6IGZhbHNlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogZmFsc2UsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIGJvb2xFcnJvciwgdW5kZWZpbmVkLCBvdmVycmlkZUFsbEVycm9ycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib29sU2NoZW1hLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bGVzID0gZXhwb3J0cy5pc0pTT05UeXBlID0gdm9pZCAwO1xuY29uc3QgX2pzb25UeXBlcyA9IFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImludGVnZXJcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcImFycmF5XCJdO1xuY29uc3QganNvblR5cGVzID0gbmV3IFNldChfanNvblR5cGVzKTtcbmZ1bmN0aW9uIGlzSlNPTlR5cGUoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcInN0cmluZ1wiICYmIGpzb25UeXBlcy5oYXMoeCk7XG59XG5leHBvcnRzLmlzSlNPTlR5cGUgPSBpc0pTT05UeXBlO1xuZnVuY3Rpb24gZ2V0UnVsZXMoKSB7XG4gICAgY29uc3QgZ3JvdXBzID0ge1xuICAgICAgICBudW1iZXI6IHsgdHlwZTogXCJudW1iZXJcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIHN0cmluZzogeyB0eXBlOiBcInN0cmluZ1wiLCBydWxlczogW10gfSxcbiAgICAgICAgYXJyYXk6IHsgdHlwZTogXCJhcnJheVwiLCBydWxlczogW10gfSxcbiAgICAgICAgb2JqZWN0OiB7IHR5cGU6IFwib2JqZWN0XCIsIHJ1bGVzOiBbXSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IHsgLi4uZ3JvdXBzLCBpbnRlZ2VyOiB0cnVlLCBib29sZWFuOiB0cnVlLCBudWxsOiB0cnVlIH0sXG4gICAgICAgIHJ1bGVzOiBbeyBydWxlczogW10gfSwgZ3JvdXBzLm51bWJlciwgZ3JvdXBzLnN0cmluZywgZ3JvdXBzLmFycmF5LCBncm91cHMub2JqZWN0XSxcbiAgICAgICAgcG9zdDogeyBydWxlczogW10gfSxcbiAgICAgICAgYWxsOiB7fSxcbiAgICAgICAga2V5d29yZHM6IHt9LFxuICAgIH07XG59XG5leHBvcnRzLmdldFJ1bGVzID0gZ2V0UnVsZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydWxlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gdm9pZCAwO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNGb3JUeXBlKHsgc2NoZW1hLCBzZWxmIH0sIHR5cGUpIHtcbiAgICBjb25zdCBncm91cCA9IHNlbGYuUlVMRVMudHlwZXNbdHlwZV07XG4gICAgcmV0dXJuIGdyb3VwICYmIGdyb3VwICE9PSB0cnVlICYmIHNob3VsZFVzZUdyb3VwKHNjaGVtYSwgZ3JvdXApO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0ZvclR5cGUgPSBzY2hlbWFIYXNSdWxlc0ZvclR5cGU7XG5mdW5jdGlvbiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKSB7XG4gICAgcmV0dXJuIGdyb3VwLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHNob3VsZFVzZVJ1bGUoc2NoZW1hLCBydWxlKSk7XG59XG5leHBvcnRzLnNob3VsZFVzZUdyb3VwID0gc2hvdWxkVXNlR3JvdXA7XG5mdW5jdGlvbiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKHNjaGVtYVtydWxlLmtleXdvcmRdICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKChfYSA9IHJ1bGUuZGVmaW5pdGlvbi5pbXBsZW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc29tZSgoa3dkKSA9PiBzY2hlbWFba3dkXSAhPT0gdW5kZWZpbmVkKSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gc2hvdWxkVXNlUnVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcGxpY2FiaWxpdHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVwb3J0VHlwZUVycm9yID0gZXhwb3J0cy5jaGVja0RhdGFUeXBlcyA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuZ2V0SlNPTlR5cGVzID0gZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGV4cG9ydHMuRGF0YVR5cGUgPSB2b2lkIDA7XG5jb25zdCBydWxlc18xID0gcmVxdWlyZShcIi4uL3J1bGVzXCIpO1xuY29uc3QgYXBwbGljYWJpbGl0eV8xID0gcmVxdWlyZShcIi4vYXBwbGljYWJpbGl0eVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG52YXIgRGF0YVR5cGU7XG4oZnVuY3Rpb24gKERhdGFUeXBlKSB7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJDb3JyZWN0XCJdID0gMF0gPSBcIkNvcnJlY3RcIjtcbiAgICBEYXRhVHlwZVtEYXRhVHlwZVtcIldyb25nXCJdID0gMV0gPSBcIldyb25nXCI7XG59KShEYXRhVHlwZSB8fCAoZXhwb3J0cy5EYXRhVHlwZSA9IERhdGFUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldFNjaGVtYVR5cGVzKHNjaGVtYSkge1xuICAgIGNvbnN0IHR5cGVzID0gZ2V0SlNPTlR5cGVzKHNjaGVtYS50eXBlKTtcbiAgICBjb25zdCBoYXNOdWxsID0gdHlwZXMuaW5jbHVkZXMoXCJudWxsXCIpO1xuICAgIGlmIChoYXNOdWxsKSB7XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2VcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXR5cGVzLmxlbmd0aCAmJiBzY2hlbWEubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm51bGxhYmxlXCIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBcInR5cGVcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IHRydWUpXG4gICAgICAgICAgICB0eXBlcy5wdXNoKFwibnVsbFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGdldFNjaGVtYVR5cGVzO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWR1bmRhbnQtdHlwZS1jb25zdGl0dWVudHNcbmZ1bmN0aW9uIGdldEpTT05UeXBlcyh0cykge1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkuaXNBcnJheSh0cykgPyB0cyA6IHRzID8gW3RzXSA6IFtdO1xuICAgIGlmICh0eXBlcy5ldmVyeShydWxlc18xLmlzSlNPTlR5cGUpKVxuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZSBtdXN0IGJlIEpTT05UeXBlIG9yIEpTT05UeXBlW106IFwiICsgdHlwZXMuam9pbihcIixcIikpO1xufVxuZXhwb3J0cy5nZXRKU09OVHlwZXMgPSBnZXRKU09OVHlwZXM7XG5mdW5jdGlvbiBjb2VyY2VBbmRDaGVja0RhdGFUeXBlKGl0LCB0eXBlcykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBjb2VyY2VUbyA9IGNvZXJjZVRvVHlwZXModHlwZXMsIG9wdHMuY29lcmNlVHlwZXMpO1xuICAgIGNvbnN0IGNoZWNrVHlwZXMgPSB0eXBlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICEoY29lcmNlVG8ubGVuZ3RoID09PSAwICYmIHR5cGVzLmxlbmd0aCA9PT0gMSAmJiAoMCwgYXBwbGljYWJpbGl0eV8xLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSkoaXQsIHR5cGVzWzBdKSk7XG4gICAgaWYgKGNoZWNrVHlwZXMpIHtcbiAgICAgICAgY29uc3Qgd3JvbmdUeXBlID0gY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycywgRGF0YVR5cGUuV3JvbmcpO1xuICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29lcmNlVG8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmVwb3J0VHlwZUVycm9yKGl0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja1R5cGVzO1xufVxuZXhwb3J0cy5jb2VyY2VBbmRDaGVja0RhdGFUeXBlID0gY29lcmNlQW5kQ2hlY2tEYXRhVHlwZTtcbmNvbnN0IENPRVJDSUJMRSA9IG5ldyBTZXQoW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiaW50ZWdlclwiLCBcImJvb2xlYW5cIiwgXCJudWxsXCJdKTtcbmZ1bmN0aW9uIGNvZXJjZVRvVHlwZXModHlwZXMsIGNvZXJjZVR5cGVzKSB7XG4gICAgcmV0dXJuIGNvZXJjZVR5cGVzXG4gICAgICAgID8gdHlwZXMuZmlsdGVyKCh0KSA9PiBDT0VSQ0lCTEUuaGFzKHQpIHx8IChjb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiICYmIHQgPT09IFwiYXJyYXlcIikpXG4gICAgICAgIDogW107XG59XG5mdW5jdGlvbiBjb2VyY2VEYXRhKGl0LCB0eXBlcywgY29lcmNlVG8pIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBnZW4ubGV0KFwiZGF0YVR5cGVcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKTtcbiAgICBjb25zdCBjb2VyY2VkID0gZ2VuLmxldChcImNvZXJjZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgaWYgKG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikge1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSgke2RhdGF9KSAmJiAke2RhdGF9Lmxlbmd0aCA9PSAxYCwgKCkgPT4gZ2VuXG4gICAgICAgICAgICAuYXNzaWduKGRhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bMF1gKVxuICAgICAgICAgICAgLmFzc2lnbihkYXRhVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKVxuICAgICAgICAgICAgLmlmKGNoZWNrRGF0YVR5cGVzKHR5cGVzLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpLCAoKSA9PiBnZW4uYXNzaWduKGNvZXJjZWQsIGRhdGEpKSk7XG4gICAgfVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgKTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29lcmNlVG8pIHtcbiAgICAgICAgaWYgKENPRVJDSUJMRS5oYXModCkgfHwgKHQgPT09IFwiYXJyYXlcIiAmJiBvcHRzLmNvZXJjZVR5cGVzID09PSBcImFycmF5XCIpKSB7XG4gICAgICAgICAgICBjb2VyY2VTcGVjaWZpY1R5cGUodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2VuLmVsc2UoKTtcbiAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgIGdlbi5lbmRJZigpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgIGdlbi5hc3NpZ24oZGF0YSwgY29lcmNlZCk7XG4gICAgICAgIGFzc2lnblBhcmVudERhdGEoaXQsIGNvZXJjZWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNvZXJjZVNwZWNpZmljVHlwZSh0KSB7XG4gICAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwibnVtYmVyXCIgfHwgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCJgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCIgKyAke2RhdGF9YClcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09IFwic3RyaW5nXCIgJiYgJHtkYXRhfSAmJiAke2RhdGF9ID09ICske2RhdGF9KWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgKyR7ZGF0YX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsXG4gICAgICAgICAgICAgIHx8ICgke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0gJiYgISgke2RhdGF9ICUgMSkpYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJmYWxzZVwiIHx8ICR7ZGF0YX0gPT09IDAgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJ0cnVlXCIgfHwgJHtkYXRhfSA9PT0gMWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICBnZW4uZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwiXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBmYWxzZWApO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oY29lcmNlZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwic3RyaW5nXCIgfHwgJHtkYXRhVHlwZX0gPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgfHwgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFske2RhdGF9XWApO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduUGFyZW50RGF0YSh7IGdlbiwgcGFyZW50RGF0YSwgcGFyZW50RGF0YVByb3BlcnR5IH0sIGV4cHIpIHtcbiAgICAvLyBUT0RPIHVzZSBnZW4ucHJvcGVydHlcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtwYXJlbnREYXRhfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9WyR7cGFyZW50RGF0YVByb3BlcnR5fV1gLCBleHByKSk7XG59XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0ID0gRGF0YVR5cGUuQ29ycmVjdCkge1xuICAgIGNvbnN0IEVRID0gY29ycmVjdCA9PT0gRGF0YVR5cGUuQ29ycmVjdCA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuRVEgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLk5FUTtcbiAgICBsZXQgY29uZDtcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0VRfSBudWxsYDtcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJiYgdHlwZW9mICR7ZGF0YX0gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCgwLCBjb2RlZ2VuXzEuXykgYCEoJHtkYXRhfSAlIDEpICYmICFpc05hTigke2RhdGF9KWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAke0VRfSAke2RhdGFUeXBlfWA7XG4gICAgfVxuICAgIHJldHVybiBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29uZCA6ICgwLCBjb2RlZ2VuXzEubm90KShjb25kKTtcbiAgICBmdW5jdGlvbiBudW1Db25kKF9jb25kID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5hbmQpKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ID09IFwibnVtYmVyXCJgLCBfY29uZCwgc3RyaWN0TnVtcyA/ICgwLCBjb2RlZ2VuXzEuXykgYGlzRmluaXRlKCR7ZGF0YX0pYCA6IGNvZGVnZW5fMS5uaWwpO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGNoZWNrRGF0YVR5cGU7XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlcyhkYXRhVHlwZXMsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpIHtcbiAgICBpZiAoZGF0YVR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gY2hlY2tEYXRhVHlwZShkYXRhVHlwZXNbMF0sIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpO1xuICAgIH1cbiAgICBsZXQgY29uZDtcbiAgICBjb25zdCB0eXBlcyA9ICgwLCB1dGlsXzEudG9IYXNoKShkYXRhVHlwZXMpO1xuICAgIGlmICh0eXBlcy5hcnJheSAmJiB0eXBlcy5vYmplY3QpIHtcbiAgICAgICAgY29uc3Qgbm90T2JqID0gKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gIT0gXCJvYmplY3RcImA7XG4gICAgICAgIGNvbmQgPSB0eXBlcy5udWxsID8gbm90T2JqIDogKDAsIGNvZGVnZW5fMS5fKSBgISR7ZGF0YX0gfHwgJHtub3RPYmp9YDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm51bGw7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5hcnJheTtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm9iamVjdDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbmQgPSBjb2RlZ2VuXzEubmlsO1xuICAgIH1cbiAgICBpZiAodHlwZXMubnVtYmVyKVxuICAgICAgICBkZWxldGUgdHlwZXMuaW50ZWdlcjtcbiAgICBmb3IgKGNvbnN0IHQgaW4gdHlwZXMpXG4gICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLmFuZCkoY29uZCwgY2hlY2tEYXRhVHlwZSh0LCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KSk7XG4gICAgcmV0dXJuIGNvbmQ7XG59XG5leHBvcnRzLmNoZWNrRGF0YVR5cGVzID0gY2hlY2tEYXRhVHlwZXM7XG5jb25zdCB0eXBlRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hIH0pID0+IGBtdXN0IGJlICR7c2NoZW1hfWAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWEsIHNjaGVtYVZhbHVlIH0pID0+IHR5cGVvZiBzY2hlbWEgPT0gXCJzdHJpbmdcIiA/ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYX19YCA6ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYVZhbHVlfX1gLFxufTtcbmZ1bmN0aW9uIHJlcG9ydFR5cGVFcnJvcihpdCkge1xuICAgIGNvbnN0IGN4dCA9IGdldFR5cGVFcnJvckNvbnRleHQoaXQpO1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCB0eXBlRXJyb3IpO1xufVxuZXhwb3J0cy5yZXBvcnRUeXBlRXJyb3IgPSByZXBvcnRUeXBlRXJyb3I7XG5mdW5jdGlvbiBnZXRUeXBlRXJyb3JDb250ZXh0KGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYSB9ID0gaXQ7XG4gICAgY29uc3Qgc2NoZW1hQ29kZSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBzY2hlbWEsIFwidHlwZVwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwidHlwZVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYS50eXBlLFxuICAgICAgICBzY2hlbWFDb2RlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogc2NoZW1hQ29kZSxcbiAgICAgICAgcGFyZW50U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhVHlwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0cyhpdCwgdHkpIHtcbiAgICBjb25zdCB7IHByb3BlcnRpZXMsIGl0ZW1zIH0gPSBpdC5zY2hlbWE7XG4gICAgaWYgKHR5ID09PSBcIm9iamVjdFwiICYmIHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgYXNzaWduRGVmYXVsdChpdCwga2V5LCBwcm9wZXJ0aWVzW2tleV0uZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHkgPT09IFwiYXJyYXlcIiAmJiBBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChzY2gsIGkpID0+IGFzc2lnbkRlZmF1bHQoaXQsIGksIHNjaC5kZWZhdWx0KSk7XG4gICAgfVxufVxuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IGFzc2lnbkRlZmF1bHRzO1xuZnVuY3Rpb24gYXNzaWduRGVmYXVsdChpdCwgcHJvcCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGNoaWxkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3ApfWA7XG4gICAgaWYgKGNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJHtjaGlsZERhdGF9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYDtcbiAgICBpZiAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiKSB7XG4gICAgICAgIGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZGl0aW9ufSB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYDtcbiAgICB9XG4gICAgLy8gYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYCArXG4gICAgLy8gKG9wdHMudXNlRGVmYXVsdHMgPT09IFwiZW1wdHlcIiA/IGAgfHwgJHtjaGlsZERhdGF9ID09PSBudWxsIHx8ICR7Y2hpbGREYXRhfSA9PT0gXCJcImAgOiBcIlwiKVxuICAgIGdlbi5pZihjb25kaXRpb24sICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9ICR7KDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKGRlZmF1bHRWYWx1ZSl9YCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gZXhwb3J0cy51c2VQYXR0ZXJuID0gZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gZXhwb3J0cy5zY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5hbGxTY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5ub1Byb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IGV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBleHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCB1dGlsXzIgPSByZXF1aXJlKFwiLi4vY29tcGlsZS91dGlsXCIpO1xuZnVuY3Rpb24gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcChjeHQsIHByb3ApIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wfWAgfSwgdHJ1ZSk7XG4gICAgICAgIGN4dC5lcnJvcigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIGNoZWNrTWlzc2luZ1Byb3AoeyBnZW4sIGRhdGEsIGl0OiB7IG9wdHMgfSB9LCBwcm9wZXJ0aWVzLCBtaXNzaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BlcnRpZXMubWFwKChwcm9wKSA9PiAoMCwgY29kZWdlbl8xLmFuZCkobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIG9wdHMub3duUHJvcGVydGllcyksICgwLCBjb2RlZ2VuXzEuXykgYCR7bWlzc2luZ30gPSAke3Byb3B9YCkpKTtcbn1cbmV4cG9ydHMuY2hlY2tNaXNzaW5nUHJvcCA9IGNoZWNrTWlzc2luZ1Byb3A7XG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nUHJvcChjeHQsIG1pc3NpbmcpIHtcbiAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0sIHRydWUpO1xuICAgIGN4dC5lcnJvcigpO1xufVxuZXhwb3J0cy5yZXBvcnRNaXNzaW5nUHJvcCA9IHJlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gaGFzUHJvcEZ1bmMoZ2VuKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgcmVmOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5YCxcbiAgICB9KTtcbn1cbmV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBoYXNQcm9wRnVuYztcbmZ1bmN0aW9uIGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BGdW5jKGdlbil9LmNhbGwoJHtkYXRhfSwgJHtwcm9wZXJ0eX0pYDtcbn1cbmV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGlzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBwcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gIT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmR9ICYmICR7aXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KX1gIDogY29uZDtcbn1cbmV4cG9ydHMucHJvcGVydHlJbkRhdGEgPSBwcm9wZXJ0eUluRGF0YTtcbmZ1bmN0aW9uIG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wZXJ0eSwgb3duUHJvcGVydGllcykge1xuICAgIGNvbnN0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wZXJ0eSl9ID09PSB1bmRlZmluZWRgO1xuICAgIHJldHVybiBvd25Qcm9wZXJ0aWVzID8gKDAsIGNvZGVnZW5fMS5vcikoY29uZCwgKDAsIGNvZGVnZW5fMS5ub3QpKGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkpKSA6IGNvbmQ7XG59XG5leHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBub1Byb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gc2NoZW1hTWFwID8gT2JqZWN0LmtleXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+IHAgIT09IFwiX19wcm90b19fXCIpIDogW107XG59XG5leHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBhbGxTY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gc2NoZW1hUHJvcGVydGllcyhpdCwgc2NoZW1hTWFwKSB7XG4gICAgcmV0dXJuIGFsbFNjaGVtYVByb3BlcnRpZXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hTWFwW3BdKSk7XG59XG5leHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBzY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gY2FsbFZhbGlkYXRlQ29kZSh7IHNjaGVtYUNvZGUsIGRhdGEsIGl0OiB7IGdlbiwgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoLCBlcnJvclBhdGggfSwgaXQgfSwgZnVuYywgY29udGV4dCwgcGFzc1NjaGVtYSkge1xuICAgIGNvbnN0IGRhdGFBbmRTY2hlbWEgPSBwYXNzU2NoZW1hID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSwgJHtkYXRhfSwgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWAgOiBkYXRhO1xuICAgIGNvbnN0IHZhbEN4dCA9IFtcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuc3RyQ29uY2F0KShuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCBlcnJvclBhdGgpXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCBpdC5wYXJlbnREYXRhXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksIGl0LnBhcmVudERhdGFQcm9wZXJ0eV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YV0sXG4gICAgXTtcbiAgICBpZiAoaXQub3B0cy5keW5hbWljUmVmKVxuICAgICAgICB2YWxDeHQucHVzaChbbmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCBuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnNdKTtcbiAgICBjb25zdCBhcmdzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhQW5kU2NoZW1hfSwgJHtnZW4ub2JqZWN0KC4uLnZhbEN4dCl9YDtcbiAgICByZXR1cm4gY29udGV4dCAhPT0gY29kZWdlbl8xLm5pbCA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30uY2FsbCgke2NvbnRleHR9LCAke2FyZ3N9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Z1bmN9KCR7YXJnc30pYDtcbn1cbmV4cG9ydHMuY2FsbFZhbGlkYXRlQ29kZSA9IGNhbGxWYWxpZGF0ZUNvZGU7XG5jb25zdCBuZXdSZWdFeHAgPSAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYDtcbmZ1bmN0aW9uIHVzZVBhdHRlcm4oeyBnZW4sIGl0OiB7IG9wdHMgfSB9LCBwYXR0ZXJuKSB7XG4gICAgY29uc3QgdSA9IG9wdHMudW5pY29kZVJlZ0V4cCA/IFwidVwiIDogXCJcIjtcbiAgICBjb25zdCB7IHJlZ0V4cCB9ID0gb3B0cy5jb2RlO1xuICAgIGNvbnN0IHJ4ID0gcmVnRXhwKHBhdHRlcm4sIHUpO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcInBhdHRlcm5cIiwge1xuICAgICAgICBrZXk6IHJ4LnRvU3RyaW5nKCksXG4gICAgICAgIHJlZjogcngsXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwLmNvZGUgPT09IFwibmV3IFJlZ0V4cFwiID8gbmV3UmVnRXhwIDogKDAsIHV0aWxfMi51c2VGdW5jKShnZW4sIHJlZ0V4cCl9KCR7cGF0dGVybn0sICR7dX0pYCxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlUGF0dGVybiA9IHVzZVBhdHRlcm47XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkQXJyID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5hc3NpZ24odmFsaWRBcnIsIGZhbHNlKSk7XG4gICAgICAgIHJldHVybiB2YWxpZEFycjtcbiAgICB9XG4gICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgdmFsaWRhdGVJdGVtcygoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgcmV0dXJuIHZhbGlkO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXMobm90VmFsaWQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCBub3RWYWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVBcnJheSA9IHZhbGlkYXRlQXJyYXk7XG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICBjb25zdCBhbHdheXNWYWxpZCA9IHNjaGVtYS5zb21lKChzY2gpID0+ICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKTtcbiAgICBpZiAoYWx3YXlzVmFsaWQgJiYgIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICBnZW4uYmxvY2soKCkgPT4gc2NoZW1hLmZvckVhY2goKF9zY2gsIGkpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZH0gfHwgJHtzY2hWYWxpZH1gKTtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCBzY2hWYWxpZCk7XG4gICAgICAgIC8vIGNhbiBzaG9ydC1jaXJjdWl0IGlmIGB1bmV2YWx1YXRlZFByb3BlcnRpZXMvSXRlbXNgIG5vdCBzdXBwb3J0ZWQgKG9wdHMudW5ldmFsdWF0ZWQgIT09IHRydWUpXG4gICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIGFuZCBpdGVtcyB3ZXJlIGV2YWx1YXRlZCAoaXQucHJvcHMgPT09IHRydWUgJiYgaXQuaXRlbXMgPT09IHRydWUpXG4gICAgICAgIGlmICghbWVyZ2VkKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCkpO1xuICAgIH0pKTtcbiAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVVbmlvbiA9IHZhbGlkYXRlVW5pb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSBleHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi8uLi92b2NhYnVsYXJpZXMvY29kZVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIG1hY3JvS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgbWFjcm9TY2hlbWEgPSBkZWYubWFjcm8uY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCBtYWNyb1NjaGVtYSk7XG4gICAgaWYgKGl0Lm9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKVxuICAgICAgICBpdC5zZWxmLnZhbGlkYXRlU2NoZW1hKG1hY3JvU2NoZW1hLCB0cnVlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgIHNjaGVtYTogbWFjcm9TY2hlbWEsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaGVtYVJlZixcbiAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICB9LCB2YWxpZCk7XG4gICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG59XG5leHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSBtYWNyb0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gZnVuY0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tBc3luY0tleXdvcmQoaXQsIGRlZik7XG4gICAgY29uc3QgdmFsaWRhdGUgPSAhJGRhdGEgJiYgZGVmLmNvbXBpbGUgPyBkZWYuY29tcGlsZS5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCkgOiBkZWYudmFsaWRhdGU7XG4gICAgY29uc3QgdmFsaWRhdGVSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgdmFsaWRhdGUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCB2YWxpZGF0ZUtleXdvcmQpO1xuICAgIGN4dC5vaygoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKTtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoKSB7XG4gICAgICAgIGlmIChkZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXNzaWduVmFsaWQoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcnVsZUVycnMgPSBkZWYuYXN5bmMgPyB2YWxpZGF0ZUFzeW5jKCkgOiB2YWxpZGF0ZVN5bmMoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gYWRkRXJycyhjeHQsIHJ1bGVFcnJzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVBc3luYygpIHtcbiAgICAgICAgY29uc3QgcnVsZUVycnMgPSBnZW4ubGV0KFwicnVsZUVycnNcIiwgbnVsbCk7XG4gICAgICAgIGdlbi50cnkoKCkgPT4gYXNzaWduVmFsaWQoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCksIChlKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlfSBpbnN0YW5jZW9mICR7aXQuVmFsaWRhdGlvbkVycm9yfWAsICgpID0+IGdlbi5hc3NpZ24ocnVsZUVycnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0uZXJyb3JzYCksICgpID0+IGdlbi50aHJvdyhlKSkpO1xuICAgICAgICByZXR1cm4gcnVsZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3luYygpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVFcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZVJlZn0uZXJyb3JzYDtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZGF0ZUVycnMsIG51bGwpO1xuICAgICAgICBhc3NpZ25WYWxpZChjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gYXNzaWduVmFsaWQoX2F3YWl0ID0gZGVmLmFzeW5jID8gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCA6IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgY29uc3QgcGFzc0N4dCA9IGl0Lm9wdHMucGFzc0NvbnRleHQgPyBuYW1lc18xLmRlZmF1bHQudGhpcyA6IG5hbWVzXzEuZGVmYXVsdC5zZWxmO1xuICAgICAgICBjb25zdCBwYXNzU2NoZW1hID0gISgoXCJjb21waWxlXCIgaW4gZGVmICYmICEkZGF0YSkgfHwgZGVmLnNjaGVtYSA9PT0gZmFsc2UpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke19hd2FpdH0keygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2YWxpZGF0ZVJlZiwgcGFzc0N4dCwgcGFzc1NjaGVtYSl9YCwgZGVmLm1vZGlmeWluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcG9ydEVycnMoZXJyb3JzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSgoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKSwgZXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGZ1bmNLZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIG1vZGlmeURhdGEoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgZ2VuLmlmKGl0LnBhcmVudERhdGEsICgpID0+IGdlbi5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5wYXJlbnREYXRhfVske2l0LnBhcmVudERhdGFQcm9wZXJ0eX1dYCkpO1xufVxuZnVuY3Rpb24gYWRkRXJycyhjeHQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZXJyc30pYCwgKCkgPT4ge1xuICAgICAgICBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgICAgICAoMCwgZXJyb3JzXzEuZXh0ZW5kRXJyb3JzKShjeHQpO1xuICAgIH0sICgpID0+IGN4dC5lcnJvcigpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNLZXl3b3JkKHsgc2NoZW1hRW52IH0sIGRlZikge1xuICAgIGlmIChkZWYuYXN5bmMgJiYgIXNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGtleXdvcmQgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgcmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleXdvcmQgXCIke2tleXdvcmR9XCIgZmFpbGVkIHRvIGNvbXBpbGVgKTtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJrZXl3b3JkXCIsIHR5cGVvZiByZXN1bHQgPT0gXCJmdW5jdGlvblwiID8geyByZWY6IHJlc3VsdCB9IDogeyByZWY6IHJlc3VsdCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHJlc3VsdCkgfSk7XG59XG5mdW5jdGlvbiB2YWxpZFNjaGVtYVR5cGUoc2NoZW1hLCBzY2hlbWFUeXBlLCBhbGxvd1VuZGVmaW5lZCA9IGZhbHNlKSB7XG4gICAgLy8gVE9ETyBhZGQgdGVzdHNcbiAgICByZXR1cm4gKCFzY2hlbWFUeXBlLmxlbmd0aCB8fFxuICAgICAgICBzY2hlbWFUeXBlLnNvbWUoKHN0KSA9PiBzdCA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgOiBzdCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygc2NoZW1hID09IHN0IHx8IChhbGxvd1VuZGVmaW5lZCAmJiB0eXBlb2Ygc2NoZW1hID09IFwidW5kZWZpbmVkXCIpKSk7XG59XG5leHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IHZhbGlkU2NoZW1hVHlwZTtcbmZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZFVzYWdlKHsgc2NoZW1hLCBvcHRzLCBzZWxmLCBlcnJTY2hlbWFQYXRoIH0sIGRlZiwga2V5d29yZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZi5rZXl3b3JkKSA/ICFkZWYua2V5d29yZC5pbmNsdWRlcyhrZXl3b3JkKSA6IGRlZi5rZXl3b3JkICE9PSBrZXl3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVwcyA9IGRlZi5kZXBlbmRlbmNpZXM7XG4gICAgaWYgKGRlcHMgPT09IG51bGwgfHwgZGVwcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwcy5zb21lKChrd2QpID0+ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCBrd2QpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGRlcGVuZGVuY2llcyBvZiAke2tleXdvcmR9OiAke2RlcHMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBkZWYudmFsaWRhdGVTY2hlbWEoc2NoZW1hW2tleXdvcmRdKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYGtleXdvcmQgXCIke2tleXdvcmR9XCIgdmFsdWUgaXMgaW52YWxpZCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiOiBgICtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yc1RleHQoZGVmLnZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtc2cpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IHZhbGlkYXRlS2V5d29yZFVzYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5d29yZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFEYXRhID0gZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZnVuY3Rpb24gZ2V0U3Vic2NoZW1hKGl0LCB7IGtleXdvcmQsIHNjaGVtYVByb3AsIHNjaGVtYSwgc2NoZW1hUGF0aCwgZXJyU2NoZW1hUGF0aCwgdG9wU2NoZW1hUmVmIH0pIHtcbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImtleXdvcmRcIiBhbmQgXCJzY2hlbWFcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgaWYgKGtleXdvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2ggPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHJldHVybiBzY2hlbWFQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaFtzY2hlbWFQcm9wXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnNjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfS8keygwLCB1dGlsXzEuZXNjYXBlRnJhZ21lbnQpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCBlcnJTY2hlbWFQYXRoID09PSB1bmRlZmluZWQgfHwgdG9wU2NoZW1hUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzY2hlbWFQYXRoXCIsIFwiZXJyU2NoZW1hUGF0aFwiIGFuZCBcInRvcFNjaGVtYVJlZlwiIGFyZSByZXF1aXJlZCB3aXRoIFwic2NoZW1hXCInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgc2NoZW1hUGF0aCxcbiAgICAgICAgICAgIHRvcFNjaGVtYVJlZixcbiAgICAgICAgICAgIGVyclNjaGVtYVBhdGgsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZWl0aGVyIFwia2V5d29yZFwiIG9yIFwic2NoZW1hXCIgbXVzdCBiZSBwYXNzZWQnKTtcbn1cbmV4cG9ydHMuZ2V0U3Vic2NoZW1hID0gZ2V0U3Vic2NoZW1hO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hRGF0YShzdWJzY2hlbWEsIGl0LCB7IGRhdGFQcm9wLCBkYXRhUHJvcFR5cGU6IGRwVHlwZSwgZGF0YSwgZGF0YVR5cGVzLCBwcm9wZXJ0eU5hbWUgfSkge1xuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGggXCJkYXRhXCIgYW5kIFwiZGF0YVByb3BcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBnZW4gfSA9IGl0O1xuICAgIGlmIChkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JQYXRoLCBkYXRhUGF0aEFyciwgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZ2VuLmxldChcImRhdGFcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5kYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoZGF0YVByb3ApfWAsIHRydWUpO1xuICAgICAgICBkYXRhQ29udGV4dFByb3BzKG5leHREYXRhKTtcbiAgICAgICAgc3Vic2NoZW1hLmVycm9yUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoZGF0YVByb3AsIGRwVHlwZSwgb3B0cy5qc1Byb3BlcnR5U3ludGF4KX1gO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YVByb3BlcnR5ID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhUHJvcH1gO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVBhdGhBcnIgPSBbLi4uZGF0YVBhdGhBcnIsIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHldO1xuICAgIH1cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZGF0YSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gZGF0YSA6IGdlbi5sZXQoXCJkYXRhXCIsIGRhdGEsIHRydWUpOyAvLyByZXBsYWNlYWJsZSBpZiB1c2VkIG9uY2U/XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzdWJzY2hlbWEucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgICAgICAvLyBUT0RPIHNvbWV0aGluZyBpcyBwb3NzaWJseSB3cm9uZyBoZXJlIHdpdGggbm90IGNoYW5naW5nIHBhcmVudERhdGFQcm9wZXJ0eSBhbmQgbm90IGFwcGVuZGluZyBkYXRhUGF0aEFyclxuICAgIH1cbiAgICBpZiAoZGF0YVR5cGVzKVxuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gZGF0YVR5cGVzO1xuICAgIGZ1bmN0aW9uIGRhdGFDb250ZXh0UHJvcHMoX25leHREYXRhKSB7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhID0gX25leHREYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFUeXBlcyA9IFtdO1xuICAgICAgICBpdC5kZWZpbmVkUHJvcGVydGllcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgc3Vic2NoZW1hLnBhcmVudERhdGEgPSBpdC5kYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YU5hbWVzID0gWy4uLml0LmRhdGFOYW1lcywgX25leHREYXRhXTtcbiAgICB9XG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHRlbmRTdWJzY2hlbWFEYXRhO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hTW9kZShzdWJzY2hlbWEsIHsganRkRGlzY3JpbWluYXRvciwganRkTWV0YWRhdGEsIGNvbXBvc2l0ZVJ1bGUsIGNyZWF0ZUVycm9ycywgYWxsRXJyb3JzIH0pIHtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY29tcG9zaXRlUnVsZSA9IGNvbXBvc2l0ZVJ1bGU7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY3JlYXRlRXJyb3JzID0gY3JlYXRlRXJyb3JzO1xuICAgIGlmIChhbGxFcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmFsbEVycm9ycyA9IGFsbEVycm9ycztcbiAgICBzdWJzY2hlbWEuanRkRGlzY3JpbWluYXRvciA9IGp0ZERpc2NyaW1pbmF0b3I7IC8vIG5vdCBpbmhlcml0ZWRcbiAgICBzdWJzY2hlbWEuanRkTWV0YWRhdGEgPSBqdGRNZXRhZGF0YTsgLy8gbm90IGluaGVyaXRlZFxufVxuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXh0ZW5kU3Vic2NoZW1hTW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjaGVtYS5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxuLy8gZG8gbm90IGVkaXQgLmpzIGZpbGVzIGRpcmVjdGx5IC0gZWRpdCBzcmMvaW5kZXguanN0XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuXG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgYm90aCBOYU4sIGZhbHNlIG90aGVyd2lzZVxuICByZXR1cm4gYSE9PWEgJiYgYiE9PWI7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciB0cmF2ZXJzZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVtYSwgb3B0cywgY2IpIHtcbiAgLy8gTGVnYWN5IHN1cHBvcnQgZm9yIHYwLjMuMSBhbmQgZWFybGllci5cbiAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgY2IgPSBvcHRzLmNiIHx8IGNiO1xuICB2YXIgcHJlID0gKHR5cGVvZiBjYiA9PSAnZnVuY3Rpb24nKSA/IGNiIDogY2IucHJlIHx8IGZ1bmN0aW9uKCkge307XG4gIHZhciBwb3N0ID0gY2IucG9zdCB8fCBmdW5jdGlvbigpIHt9O1xuXG4gIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwgJycsIHNjaGVtYSk7XG59O1xuXG5cbnRyYXZlcnNlLmtleXdvcmRzID0ge1xuICBhZGRpdGlvbmFsSXRlbXM6IHRydWUsXG4gIGl0ZW1zOiB0cnVlLFxuICBjb250YWluczogdHJ1ZSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gIHByb3BlcnR5TmFtZXM6IHRydWUsXG4gIG5vdDogdHJ1ZSxcbiAgaWY6IHRydWUsXG4gIHRoZW46IHRydWUsXG4gIGVsc2U6IHRydWVcbn07XG5cbnRyYXZlcnNlLmFycmF5S2V5d29yZHMgPSB7XG4gIGl0ZW1zOiB0cnVlLFxuICBhbGxPZjogdHJ1ZSxcbiAgYW55T2Y6IHRydWUsXG4gIG9uZU9mOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5wcm9wc0tleXdvcmRzID0ge1xuICAkZGVmczogdHJ1ZSxcbiAgZGVmaW5pdGlvbnM6IHRydWUsXG4gIHByb3BlcnRpZXM6IHRydWUsXG4gIHBhdHRlcm5Qcm9wZXJ0aWVzOiB0cnVlLFxuICBkZXBlbmRlbmNpZXM6IHRydWVcbn07XG5cbnRyYXZlcnNlLnNraXBLZXl3b3JkcyA9IHtcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgZW51bTogdHJ1ZSxcbiAgY29uc3Q6IHRydWUsXG4gIHJlcXVpcmVkOiB0cnVlLFxuICBtYXhpbXVtOiB0cnVlLFxuICBtaW5pbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNYXhpbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNaW5pbXVtOiB0cnVlLFxuICBtdWx0aXBsZU9mOiB0cnVlLFxuICBtYXhMZW5ndGg6IHRydWUsXG4gIG1pbkxlbmd0aDogdHJ1ZSxcbiAgcGF0dGVybjogdHJ1ZSxcbiAgZm9ybWF0OiB0cnVlLFxuICBtYXhJdGVtczogdHJ1ZSxcbiAgbWluSXRlbXM6IHRydWUsXG4gIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICBtYXhQcm9wZXJ0aWVzOiB0cnVlLFxuICBtaW5Qcm9wZXJ0aWVzOiB0cnVlXG59O1xuXG5cbmZ1bmN0aW9uIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCkge1xuICBpZiAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHByZShzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIHtcbiAgICAgIHZhciBzY2ggPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0cmF2ZXJzZS5hcnJheUtleXdvcmRzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHNjaC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtpXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2UucHJvcHNLZXl3b3Jkcykge1xuICAgICAgICBpZiAoc2NoICYmIHR5cGVvZiBzY2ggPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNjaClcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtwcm9wXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGVzY2FwZUpzb25QdHIocHJvcCksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2Uua2V5d29yZHMgfHwgKG9wdHMuYWxsS2V5cyAmJiAhKGtleSBpbiB0cmF2ZXJzZS5za2lwS2V5d29yZHMpKSkge1xuICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2gsIGpzb25QdHIgKyAnLycgKyBrZXksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcG9zdChzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblB0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csICd+MCcpLnJlcGxhY2UoL1xcLy9nLCAnfjEnKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBleHBvcnRzLnJlc29sdmVVcmwgPSBleHBvcnRzLm5vcm1hbGl6ZUlkID0gZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBleHBvcnRzLmdldEZ1bGxQYXRoID0gZXhwb3J0cy5pbmxpbmVSZWYgPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuY29uc3QgdHJhdmVyc2UgPSByZXF1aXJlKFwianNvbi1zY2hlbWEtdHJhdmVyc2VcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBrZXl3b3JkIGRlZmluaXRpb25zXG5jb25zdCBTSU1QTEVfSU5MSU5FRCA9IG5ldyBTZXQoW1xuICAgIFwidHlwZVwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1pbkxlbmd0aFwiLFxuICAgIFwibWF4UHJvcGVydGllc1wiLFxuICAgIFwibWluUHJvcGVydGllc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcIm1pbkl0ZW1zXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJ1bmlxdWVJdGVtc1wiLFxuICAgIFwibXVsdGlwbGVPZlwiLFxuICAgIFwicmVxdWlyZWRcIixcbiAgICBcImVudW1cIixcbiAgICBcImNvbnN0XCIsXG5dKTtcbmZ1bmN0aW9uIGlubGluZVJlZihzY2hlbWEsIGxpbWl0ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobGltaXQgPT09IHRydWUpXG4gICAgICAgIHJldHVybiAhaGFzUmVmKHNjaGVtYSk7XG4gICAgaWYgKCFsaW1pdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cbmV4cG9ydHMuaW5saW5lUmVmID0gaW5saW5lUmVmO1xuY29uc3QgUkVGX0tFWVdPUkRTID0gbmV3IFNldChbXG4gICAgXCIkcmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlUmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlQW5jaG9yXCIsXG4gICAgXCIkZHluYW1pY1JlZlwiLFxuICAgIFwiJGR5bmFtaWNBbmNob3JcIixcbl0pO1xuZnVuY3Rpb24gaGFzUmVmKHNjaGVtYSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoUkVGX0tFWVdPUkRTLmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpICYmIHNjaC5zb21lKGhhc1JlZikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIiAmJiBoYXNSZWYoc2NoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChTSU1QTEVfSU5MSU5FRC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYVtrZXldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKHNjaGVtYVtrZXldLCAoc2NoKSA9PiAoY291bnQgKz0gY291bnRLZXlzKHNjaCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IEluZmluaXR5KVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5mdW5jdGlvbiBnZXRGdWxsUGF0aChyZXNvbHZlciwgaWQgPSBcIlwiLCBub3JtYWxpemUpIHtcbiAgICBpZiAobm9ybWFsaXplICE9PSBmYWxzZSlcbiAgICAgICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgY29uc3QgcCA9IHJlc29sdmVyLnBhcnNlKGlkKTtcbiAgICByZXR1cm4gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKTtcbn1cbmV4cG9ydHMuZ2V0RnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSByZXNvbHZlci5zZXJpYWxpemUocCk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQuc3BsaXQoXCIjXCIpWzBdICsgXCIjXCI7XG59XG5leHBvcnRzLl9nZXRGdWxsUGF0aCA9IF9nZXRGdWxsUGF0aDtcbmNvbnN0IFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCBcIlwiKSA6IFwiXCI7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUlkID0gbm9ybWFsaXplSWQ7XG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlc29sdmVyLCBiYXNlSWQsIGlkKSB7XG4gICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5leHBvcnRzLnJlc29sdmVVcmwgPSByZXNvbHZlVXJsO1xuY29uc3QgQU5DSE9SID0gL15bYS16X11bLWEtejAtOS5fXSokL2k7XG5mdW5jdGlvbiBnZXRTY2hlbWFSZWZzKHNjaGVtYSwgYmFzZUlkKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHNjaGVtYUlkLCB1cmlSZXNvbHZlciB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IHNjaElkID0gbm9ybWFsaXplSWQoc2NoZW1hW3NjaGVtYUlkXSB8fCBiYXNlSWQpO1xuICAgIGNvbnN0IGJhc2VJZHMgPSB7IFwiXCI6IHNjaElkIH07XG4gICAgY29uc3QgcGF0aFByZWZpeCA9IGdldEZ1bGxQYXRoKHVyaVJlc29sdmVyLCBzY2hJZCwgZmFsc2UpO1xuICAgIGNvbnN0IGxvY2FsUmVmcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYVJlZnMgPSBuZXcgU2V0KCk7XG4gICAgdHJhdmVyc2Uoc2NoZW1hLCB7IGFsbEtleXM6IHRydWUgfSwgKHNjaCwganNvblB0ciwgXywgcGFyZW50SnNvblB0cikgPT4ge1xuICAgICAgICBpZiAocGFyZW50SnNvblB0ciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhQcmVmaXggKyBqc29uUHRyO1xuICAgICAgICBsZXQgaW5uZXJCYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgICAgICBpZiAodHlwZW9mIHNjaFtzY2hlbWFJZF0gPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGlubmVyQmFzZUlkID0gYWRkUmVmLmNhbGwodGhpcywgc2NoW3NjaGVtYUlkXSk7XG4gICAgICAgIGFkZEFuY2hvci5jYWxsKHRoaXMsIHNjaC4kYW5jaG9yKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRkeW5hbWljQW5jaG9yKTtcbiAgICAgICAgYmFzZUlkc1tqc29uUHRyXSA9IGlubmVyQmFzZUlkO1xuICAgICAgICBmdW5jdGlvbiBhZGRSZWYocmVmKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgICAgICBjb25zdCBfcmVzb2x2ZSA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5yZXNvbHZlO1xuICAgICAgICAgICAgcmVmID0gbm9ybWFsaXplSWQoaW5uZXJCYXNlSWQgPyBfcmVzb2x2ZShpbm5lckJhc2VJZCwgcmVmKSA6IHJlZik7XG4gICAgICAgICAgICBpZiAoc2NoZW1hUmVmcy5oYXMocmVmKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgICAgICAgICAgc2NoZW1hUmVmcy5hZGQocmVmKTtcbiAgICAgICAgICAgIGxldCBzY2hPclJlZiA9IHRoaXMucmVmc1tyZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHNjaE9yUmVmID0gdGhpcy5yZWZzW3NjaE9yUmVmXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBzY2hPclJlZi5zY2hlbWEsIHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYgIT09IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWZbMF0gPT09IFwiI1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBsb2NhbFJlZnNbcmVmXSwgcmVmKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZWZzW3JlZl0gPSBzY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnNbcmVmXSA9IGZ1bGxQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWY7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkQW5jaG9yKGFuY2hvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhbmNob3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICghQU5DSE9SLnRlc3QoYW5jaG9yKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFuY2hvciBcIiR7YW5jaG9yfVwiYCk7XG4gICAgICAgICAgICAgICAgYWRkUmVmLmNhbGwodGhpcywgYCMke2FuY2hvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsb2NhbFJlZnM7XG4gICAgZnVuY3Rpb24gY2hlY2tBbWJpZ3Vvc1JlZihzY2gxLCBzY2gyLCByZWYpIHtcbiAgICAgICAgaWYgKHNjaDIgIT09IHVuZGVmaW5lZCAmJiAhZXF1YWwoc2NoMSwgc2NoMikpXG4gICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhbWJpZ3VvcyhyZWYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgcmVmZXJlbmNlIFwiJHtyZWZ9XCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWFgKTtcbiAgICB9XG59XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBnZXRTY2hlbWFSZWZzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREYXRhID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGJvb2xTY2hlbWFfMSA9IHJlcXVpcmUoXCIuL2Jvb2xTY2hlbWFcIik7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBhcHBsaWNhYmlsaXR5XzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhYmlsaXR5XCIpO1xuY29uc3QgZGF0YVR5cGVfMiA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgZGVmYXVsdHNfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRzXCIpO1xuY29uc3Qga2V5d29yZF8xID0gcmVxdWlyZShcIi4va2V5d29yZFwiKTtcbmNvbnN0IHN1YnNjaGVtYV8xID0gcmVxdWlyZShcIi4vc3Vic2NoZW1hXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4uL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIGdlbmVyYXRlcyB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBzdWJzY2hlbWFDb2RlIChiZWxvdykgaXMgdXNlZCBmb3Igc3Vic2NoZW1hc1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvZGUoaXQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICB0b3BTY2hlbWFPYmpDb2RlKGl0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiAoMCwgYm9vbFNjaGVtYV8xLnRvcEJvb2xPckVtcHR5U2NoZW1hKShpdCkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZhbGlkYXRlRnVuY3Rpb25Db2RlO1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWEsIHNjaGVtYUVudiwgb3B0cyB9LCBib2R5KSB7XG4gICAgaWYgKG9wdHMuY29kZS5lczUpIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYFwidXNlIHN0cmljdFwiOyAke2Z1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKX1gKTtcbiAgICAgICAgICAgIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cyk7XG4gICAgICAgICAgICBnZW4uY29kZShib2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke2Rlc3RydWN0dXJlVmFsQ3h0KG9wdHMpfWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IGdlbi5jb2RlKGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSkuY29kZShib2R5KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cykge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7JHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofT1cIlwiLCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fSwgJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9PSR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9JHtvcHRzLmR5bmFtaWNSZWYgPyAoMCwgY29kZWdlbl8xLl8pIGAsICR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfT17fWAgOiBjb2RlZ2VuXzEubmlsfX09e31gO1xufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKSB7XG4gICAgZ2VuLmlmKG5hbWVzXzEuZGVmYXVsdC52YWxDeHQsICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX1gKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfWApO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0b3BTY2hlbWFPYmpDb2RlKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMsIGdlbiB9ID0gaXQ7XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4ge1xuICAgICAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgICAgIGNoZWNrTm9EZWZhdWx0KGl0KTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LmVycm9ycywgMCk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmVzZXRFdmFsdWF0ZWQoaXQpO1xuICAgICAgICB0eXBlQW5kS2V5d29yZHMoaXQpO1xuICAgICAgICByZXR1cm5SZXN1bHRzKGl0KTtcbiAgICB9KTtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiByZXNldEV2YWx1YXRlZChpdCkge1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBob29rIHRvIGV4ZWN1dGUgaXQgaW4gdGhlIGVuZCB0byBjaGVjayB3aGV0aGVyIHByb3BzL2l0ZW1zIGFyZSBOYW1lLCBhcyBpbiBhc3NpZ25FdmFsdWF0ZWRcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpdC5ldmFsdWF0ZWQgPSBnZW4uY29uc3QoXCJldmFsdWF0ZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmV2YWx1YXRlZGApO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY1Byb3BzYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0ucHJvcHNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljSXRlbXNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5pdGVtc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbn1cbmZ1bmN0aW9uIGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSB7XG4gICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hW29wdHMuc2NoZW1hSWRdO1xuICAgIHJldHVybiBzY2hJZCAmJiAob3B0cy5jb2RlLnNvdXJjZSB8fCBvcHRzLmNvZGUucHJvY2VzcykgPyAoMCwgY29kZWdlbl8xLl8pIGAvKiMgc291cmNlVVJMPSR7c2NoSWR9ICovYCA6IGNvZGVnZW5fMS5uaWw7XG59XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgdG8gZ2VuZXJhdGUgY29kZSBmb3Igc3ViLXNjaGVtYXNcbmZ1bmN0aW9uIHN1YnNjaGVtYUNvZGUoaXQsIHZhbGlkKSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBib29sU2NoZW1hXzEuYm9vbE9yRW1wdHlTY2hlbWEpKGl0LCB2YWxpZCk7XG59XG5mdW5jdGlvbiBzY2hlbWFDeHRIYXNSdWxlcyh7IHNjaGVtYSwgc2VsZiB9KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHNlbGYuUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc1NjaGVtYU9iaihpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQuc2NoZW1hICE9IFwiYm9vbGVhblwiO1xufVxuZnVuY3Rpb24gc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZ2VuLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICB1cGRhdGVDb250ZXh0KGl0KTtcbiAgICBjaGVja0FzeW5jU2NoZW1hKGl0KTtcbiAgICBjb25zdCBlcnJzQ291bnQgPSBnZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCk7XG4gICAgLy8gVE9ETyB2YXJcbiAgICBnZW4udmFyKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZHMoaXQpIHtcbiAgICAoMCwgdXRpbF8xLmNoZWNrVW5rbm93blJ1bGVzKShpdCk7XG4gICAgY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpO1xufVxuZnVuY3Rpb24gdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpIHtcbiAgICBpZiAoaXQub3B0cy5qdGQpXG4gICAgICAgIHJldHVybiBzY2hlbWFLZXl3b3JkcyhpdCwgW10sIGZhbHNlLCBlcnJzQ291bnQpO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKGl0LnNjaGVtYSk7XG4gICAgY29uc3QgY2hlY2tlZFR5cGVzID0gKDAsIGRhdGFUeXBlXzEuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSkoaXQsIHR5cGVzKTtcbiAgICBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsICFjaGVja2VkVHlwZXMsIGVycnNDb3VudCk7XG59XG5mdW5jdGlvbiBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgb3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgJiYgKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBzZWxmLlJVTEVTKSkge1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKGAkcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tOb0RlZmF1bHQoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgb3B0cy51c2VEZWZhdWx0cyAmJiBvcHRzLnN0cmljdFNjaGVtYSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIFwiZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0KGl0KSB7XG4gICAgY29uc3Qgc2NoSWQgPSBpdC5zY2hlbWFbaXQub3B0cy5zY2hlbWFJZF07XG4gICAgaWYgKHNjaElkKVxuICAgICAgICBpdC5iYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGl0LmJhc2VJZCwgc2NoSWQpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY1NjaGVtYShpdCkge1xuICAgIGlmIChpdC5zY2hlbWEuJGFzeW5jICYmICFpdC5zY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiBjb21tZW50S2V5d29yZCh7IGdlbiwgc2NoZW1hRW52LCBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMgfSkge1xuICAgIGNvbnN0IG1zZyA9IHNjaGVtYS4kY29tbWVudDtcbiAgICBpZiAob3B0cy4kY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5sb2dnZXIubG9nKCR7bXNnfSlgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9wdHMuJGNvbW1lbnQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyU2NoZW1hUGF0aH0vJGNvbW1lbnRgO1xuICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogc2NoZW1hRW52LnJvb3QgfSk7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9Lm9wdHMuJGNvbW1lbnQoJHttc2d9LCAke3NjaGVtYVBhdGh9LCAke3Jvb3ROYW1lfS5zY2hlbWEpYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmV0dXJuUmVzdWx0cyhpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFFbnYsIHZhbGlkYXRlTmFtZSwgVmFsaWRhdGlvbkVycm9yLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICAvLyBUT0RPIGFzc2lnbiB1bmV2YWx1YXRlZFxuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGAsICgpID0+IGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpLCAoKSA9PiBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7VmFsaWRhdGlvbkVycm9yfSgke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSlgKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBuYW1lc18xLmRlZmF1bHQudkVycm9ycyk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgYXNzaWduRXZhbHVhdGVkKGl0KTtcbiAgICAgICAgZ2VuLnJldHVybigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduRXZhbHVhdGVkKHsgZ2VuLCBldmFsdWF0ZWQsIHByb3BzLCBpdGVtcyB9KSB7XG4gICAgaWYgKHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9LnByb3BzYCwgcHJvcHMpO1xuICAgIGlmIChpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5pdGVtc2AsIGl0ZW1zKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgdHlwZUVycm9ycywgZXJyc0NvdW50KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgYWxsRXJyb3JzLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSBzZWxmO1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiAob3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgfHwgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgUlVMRVMpKSkge1xuICAgICAgICBnZW4uYmxvY2soKCkgPT4ga2V5d29yZENvZGUoaXQsIFwiJHJlZlwiLCBSVUxFUy5hbGwuJHJlZi5kZWZpbml0aW9uKSk7IC8vIFRPRE8gdHlwZWNhc3RcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW9wdHMuanRkKVxuICAgICAgICBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBSVUxFUy5ydWxlcylcbiAgICAgICAgICAgIGdyb3VwS2V5d29yZHMoZ3JvdXApO1xuICAgICAgICBncm91cEtleXdvcmRzKFJVTEVTLnBvc3QpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGdyb3VwS2V5d29yZHMoZ3JvdXApIHtcbiAgICAgICAgaWYgKCEoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZUdyb3VwKShzY2hlbWEsIGdyb3VwKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGdyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlKShncm91cC50eXBlLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpKTtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0eXBlc1swXSA9PT0gZ3JvdXAudHlwZSAmJiB0eXBlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgICAgICAoMCwgZGF0YVR5cGVfMi5yZXBvcnRUeXBlRXJyb3IpKGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBtYWtlIGl0IFwib2tcIiBjYWxsP1xuICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAke2VycnNDb3VudCB8fCAwfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBvcHRzOiB7IHVzZURlZmF1bHRzIH0sIH0gPSBpdDtcbiAgICBpZiAodXNlRGVmYXVsdHMpXG4gICAgICAgICgwLCBkZWZhdWx0c18xLmFzc2lnbkRlZmF1bHRzKShpdCwgZ3JvdXAudHlwZSk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGdyb3VwLnJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShzY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAga2V5d29yZENvZGUoaXQsIHJ1bGUua2V5d29yZCwgcnVsZS5kZWZpbml0aW9uLCBncm91cC50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoaXQuc2NoZW1hRW52Lm1ldGEgfHwgIWl0Lm9wdHMuc3RyaWN0VHlwZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGlmICghaXQub3B0cy5hbGxvd1VuaW9uVHlwZXMpXG4gICAgICAgIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGNoZWNrS2V5d29yZFR5cGVzKGl0LCBpdC5kYXRhVHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKCF0eXBlcy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIWl0LmRhdGFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgaXQuZGF0YVR5cGVzID0gdHlwZXM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHlwZXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBpZiAoIWluY2x1ZGVzVHlwZShpdC5kYXRhVHlwZXMsIHQpKSB7XG4gICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgdHlwZSBcIiR7dH1cIiBub3QgYWxsb3dlZCBieSBjb250ZXh0IFwiJHtpdC5kYXRhVHlwZXMuam9pbihcIixcIil9XCJgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB0eXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja011bHRpcGxlVHlwZXMoaXQsIHRzKSB7XG4gICAgaWYgKHRzLmxlbmd0aCA+IDEgJiYgISh0cy5sZW5ndGggPT09IDIgJiYgdHMuaW5jbHVkZXMoXCJudWxsXCIpKSkge1xuICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBcInVzZSBhbGxvd1VuaW9uVHlwZXMgdG8gYWxsb3cgdW5pb24gdHlwZSBrZXl3b3JkXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZFR5cGVzKGl0LCB0cykge1xuICAgIGNvbnN0IHJ1bGVzID0gaXQuc2VsZi5SVUxFUy5hbGw7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIHJ1bGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShpdC5zY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICh0eXBlLmxlbmd0aCAmJiAhdHlwZS5zb21lKCh0KSA9PiBoYXNBcHBsaWNhYmxlVHlwZSh0cywgdCkpKSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYG1pc3NpbmcgdHlwZSBcIiR7dHlwZS5qb2luKFwiLFwiKX1cIiBmb3Iga2V5d29yZCBcIiR7a2V5d29yZH1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzQXBwbGljYWJsZVR5cGUoc2NoVHMsIGt3ZFQpIHtcbiAgICByZXR1cm4gc2NoVHMuaW5jbHVkZXMoa3dkVCkgfHwgKGt3ZFQgPT09IFwibnVtYmVyXCIgJiYgc2NoVHMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpKTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzVHlwZSh0cywgdCkge1xuICAgIHJldHVybiB0cy5pbmNsdWRlcyh0KSB8fCAodCA9PT0gXCJpbnRlZ2VyXCIgJiYgdHMuaW5jbHVkZXMoXCJudW1iZXJcIikpO1xufVxuZnVuY3Rpb24gbmFycm93U2NoZW1hVHlwZXMoaXQsIHdpdGhUeXBlcykge1xuICAgIGNvbnN0IHRzID0gW107XG4gICAgZm9yIChjb25zdCB0IG9mIGl0LmRhdGFUeXBlcykge1xuICAgICAgICBpZiAoaW5jbHVkZXNUeXBlKHdpdGhUeXBlcywgdCkpXG4gICAgICAgICAgICB0cy5wdXNoKHQpO1xuICAgICAgICBlbHNlIGlmICh3aXRoVHlwZXMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpICYmIHQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB0cy5wdXNoKFwiaW50ZWdlclwiKTtcbiAgICB9XG4gICAgaXQuZGF0YVR5cGVzID0gdHM7XG59XG5mdW5jdGlvbiBzdHJpY3RUeXBlc0Vycm9yKGl0LCBtc2cpIHtcbiAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgbXNnICs9IGAgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFR5cGVzKWA7XG4gICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0VHlwZXMpO1xufVxuY2xhc3MgS2V5d29yZEN4dCB7XG4gICAgY29uc3RydWN0b3IoaXQsIGRlZiwga2V5d29yZCkge1xuICAgICAgICAoMCwga2V5d29yZF8xLnZhbGlkYXRlS2V5d29yZFVzYWdlKShpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICAgICAgdGhpcy5nZW4gPSBpdC5nZW47XG4gICAgICAgIHRoaXMuYWxsRXJyb3JzID0gaXQuYWxsRXJyb3JzO1xuICAgICAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICB0aGlzLmRhdGEgPSBpdC5kYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgdGhpcy4kZGF0YSA9IGRlZi4kZGF0YSAmJiBpdC5vcHRzLiRkYXRhICYmIHRoaXMuc2NoZW1hICYmIHRoaXMuc2NoZW1hLiRkYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYVZhbHVlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHRoaXMuc2NoZW1hLCBrZXl3b3JkLCB0aGlzLiRkYXRhKTtcbiAgICAgICAgdGhpcy5zY2hlbWFUeXBlID0gZGVmLnNjaGVtYVR5cGU7XG4gICAgICAgIHRoaXMucGFyZW50U2NoZW1hID0gaXQuc2NoZW1hO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IHt9O1xuICAgICAgICB0aGlzLml0ID0gaXQ7XG4gICAgICAgIHRoaXMuZGVmID0gZGVmO1xuICAgICAgICBpZiAodGhpcy4kZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gaXQuZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBnZXREYXRhKHRoaXMuJGRhdGEsIGl0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSB0aGlzLnNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgaWYgKCEoMCwga2V5d29yZF8xLnZhbGlkU2NoZW1hVHlwZSkodGhpcy5zY2hlbWEsIGRlZi5zY2hlbWFUeXBlLCBkZWYuYWxsb3dVbmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleXdvcmR9IHZhbHVlIG11c3QgYmUgJHtKU09OLnN0cmluZ2lmeShkZWYuc2NoZW1hVHlwZSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiY29kZVwiIGluIGRlZiA/IGRlZi50cmFja0Vycm9ycyA6IGRlZi5lcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmVycnNDb3VudCA9IGl0Lmdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbFJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKGZhaWxBY3Rpb24pXG4gICAgICAgICAgICBmYWlsQWN0aW9uKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3NBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIHN1Y2Nlc3NBY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhc3MoY29uZGl0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgdW5kZWZpbmVkLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbChjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGZhbHNlKTsgLy8gdGhpcyBicmFuY2ggd2lsbCBiZSByZW1vdmVkIGJ5IGdlbi5vcHRpbWl6ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgIH1cbiAgICBmYWlsJGRhdGEoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWwoY29uZGl0aW9uKTtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFDb2RlIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmZhaWwoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSAhPT0gdW5kZWZpbmVkICYmICgkeygwLCBjb2RlZ2VuXzEub3IpKHRoaXMuaW52YWxpZCRkYXRhKCksIGNvbmRpdGlvbil9KWApO1xuICAgIH1cbiAgICBlcnJvcihhcHBlbmQsIGVycm9yUGFyYW1zLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIGlmIChlcnJvclBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoZXJyb3JQYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICBfZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIDtcbiAgICAgICAgKGFwcGVuZCA/IGVycm9yc18xLnJlcG9ydEV4dHJhRXJyb3IgOiBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICAkZGF0YUVycm9yKCkge1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLiRkYXRhRXJyb3IgfHwgZXJyb3JzXzEua2V5d29yZCREYXRhRXJyb3IpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyc0NvdW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZCBcInRyYWNrRXJyb3JzXCIgdG8ga2V5d29yZCBkZWZpbml0aW9uJyk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXNldEVycm9yc0NvdW50KSh0aGlzLmdlbiwgdGhpcy5lcnJzQ291bnQpO1xuICAgIH1cbiAgICBvayhjb25kKSB7XG4gICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5pZihjb25kKTtcbiAgICB9XG4gICAgc2V0UGFyYW1zKG9iaiwgYXNzaWduKSB7XG4gICAgICAgIGlmIChhc3NpZ24pXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucGFyYW1zLCBvYmopO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IG9iajtcbiAgICB9XG4gICAgYmxvY2skZGF0YSh2YWxpZCwgY29kZUJsb2NrLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICB0aGlzLmdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrJGRhdGEodmFsaWQsICRkYXRhVmFsaWQpO1xuICAgICAgICAgICAgY29kZUJsb2NrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjaGVjayRkYXRhKHZhbGlkID0gY29kZWdlbl8xLm5pbCwgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmIH0gPSB0aGlzO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5vcikoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gdW5kZWZpbmVkYCwgJGRhdGFWYWxpZCkpO1xuICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoIHx8IGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgZ2VuLmVsc2VJZih0aGlzLmludmFsaWQkZGF0YSgpKTtcbiAgICAgICAgICAgIHRoaXMuJGRhdGFFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBnZW4uZWxzZSgpO1xuICAgIH1cbiAgICBpbnZhbGlkJGRhdGEoKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYsIGl0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikod3JvbmckRGF0YVR5cGUoKSwgaW52YWxpZCREYXRhU2NoZW1hKCkpO1xuICAgICAgICBmdW5jdGlvbiB3cm9uZyREYXRhVHlwZSgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghKHNjaGVtYUNvZGUgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdCA9IEFycmF5LmlzQXJyYXkoc2NoZW1hVHlwZSkgPyBzY2hlbWFUeXBlIDogW3NjaGVtYVR5cGVdO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGVzKShzdCwgc2NoZW1hQ29kZSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8yLkRhdGFUeXBlLldyb25nKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW52YWxpZCREYXRhU2NoZW1hKCkge1xuICAgICAgICAgICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlU2NoZW1hUmVmID0gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZSRkYXRhXCIsIHsgcmVmOiBkZWYudmFsaWRhdGVTY2hlbWEgfSk7IC8vIFRPRE8gdmFsdWUuY29kZSBmb3Igc3RhbmRhbG9uZVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZGF0ZVNjaGVtYVJlZn0oJHtzY2hlbWFDb2RlfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NoZW1hKGFwcGwsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjaGVtYSA9ICgwLCBzdWJzY2hlbWFfMS5nZXRTdWJzY2hlbWEpKHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hRGF0YSkoc3Vic2NoZW1hLCB0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYU1vZGUpKHN1YnNjaGVtYSwgYXBwbCk7XG4gICAgICAgIGNvbnN0IG5leHRDb250ZXh0ID0geyAuLi50aGlzLml0LCAuLi5zdWJzY2hlbWEsIGl0ZW1zOiB1bmRlZmluZWQsIHByb3BzOiB1bmRlZmluZWQgfTtcbiAgICAgICAgc3Vic2NoZW1hQ29kZShuZXh0Q29udGV4dCwgdmFsaWQpO1xuICAgICAgICByZXR1cm4gbmV4dENvbnRleHQ7XG4gICAgfVxuICAgIG1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgdG9OYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgc2NoZW1hQ3h0LnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgc2NoZW1hQ3h0LnByb3BzLCBpdC5wcm9wcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUgJiYgc2NoZW1hQ3h0Lml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoZW1hQ3h0Lml0ZW1zLCBpdC5pdGVtcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZVZhbGlkRXZhbHVhdGVkKHNjaGVtYUN4dCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiAoaXQucHJvcHMgIT09IHRydWUgfHwgaXQuaXRlbXMgIT09IHRydWUpKSB7XG4gICAgICAgICAgICBnZW4uaWYodmFsaWQsICgpID0+IHRoaXMubWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCBjb2RlZ2VuXzEuTmFtZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLktleXdvcmRDeHQgPSBLZXl3b3JkQ3h0O1xuZnVuY3Rpb24ga2V5d29yZENvZGUoaXQsIGtleXdvcmQsIGRlZiwgcnVsZVR5cGUpIHtcbiAgICBjb25zdCBjeHQgPSBuZXcgS2V5d29yZEN4dChpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICBpZiAoXCJjb2RlXCIgaW4gZGVmKSB7XG4gICAgICAgIGRlZi5jb2RlKGN4dCwgcnVsZVR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjeHQuJGRhdGEgJiYgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKFwibWFjcm9cIiBpbiBkZWYpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5tYWNyb0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRlZi5jb21waWxlIHx8IGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbn1cbmNvbnN0IEpTT05fUE9JTlRFUiA9IC9eXFwvKD86W15+XXx+MHx+MSkqJC87XG5jb25zdCBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIHsgZGF0YUxldmVsLCBkYXRhTmFtZXMsIGRhdGFQYXRoQXJyIH0pIHtcbiAgICBsZXQganNvblBvaW50ZXI7XG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKCRkYXRhID09PSBcIlwiKVxuICAgICAgICByZXR1cm4gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIGlmICgkZGF0YVswXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgaWYgKCFKU09OX1BPSU5URVIudGVzdCgkZGF0YSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgICAgICBkYXRhID0gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFJFTEFUSVZFX0pTT05fUE9JTlRFUi5leGVjKCRkYXRhKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAgY29uc3QgdXAgPSArbWF0Y2hlc1sxXTtcbiAgICAgICAganNvblBvaW50ZXIgPSBtYXRjaGVzWzJdO1xuICAgICAgICBpZiAoanNvblBvaW50ZXIgPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAodXAgPj0gZGF0YUxldmVsKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcInByb3BlcnR5L2luZGV4XCIsIHVwKSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVBhdGhBcnJbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCA+IGRhdGFMZXZlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcImRhdGFcIiwgdXApKTtcbiAgICAgICAgZGF0YSA9IGRhdGFOYW1lc1tkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIGlmICghanNvblBvaW50ZXIpXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgbGV0IGV4cHIgPSBkYXRhO1xuICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgZGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKCgwLCB1dGlsXzEudW5lc2NhcGVKc29uUG9pbnRlcikoc2VnbWVudCkpfWA7XG4gICAgICAgICAgICBleHByID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtleHByfSAmJiAke2RhdGF9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbiAgICBmdW5jdGlvbiBlcnJvck1zZyhwb2ludGVyVHlwZSwgdXApIHtcbiAgICAgICAgcmV0dXJuIGBDYW5ub3QgYWNjZXNzICR7cG9pbnRlclR5cGV9ICR7dXB9IGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAke2RhdGFMZXZlbH1gO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0RGF0YSA9IGdldERhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9ycykge1xuICAgICAgICBzdXBlcihcInZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5hanYgPSB0aGlzLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFZhbGlkYXRpb25FcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRpb25fZXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jbGFzcyBNaXNzaW5nUmVmRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocmVzb2x2ZXIsIGJhc2VJZCwgcmVmLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnIHx8IGBjYW4ndCByZXNvbHZlIHJlZmVyZW5jZSAke3JlZn0gZnJvbSBpZCAke2Jhc2VJZH1gKTtcbiAgICAgICAgdGhpcy5taXNzaW5nUmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShyZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgICAgICB0aGlzLm1pc3NpbmdTY2hlbWEgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKSgoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKShyZXNvbHZlciwgdGhpcy5taXNzaW5nUmVmKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWlzc2luZ1JlZkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmX2Vycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSBleHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGV4cG9ydHMucmVzb2x2ZVJlZiA9IGV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGV4cG9ydHMuU2NoZW1hRW52ID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVwiKTtcbmNsYXNzIFNjaGVtYUVudiB7XG4gICAgY29uc3RydWN0b3IoZW52KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZHluYW1pY0FuY2hvcnMgPSB7fTtcbiAgICAgICAgbGV0IHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYuc2NoZW1hID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBzY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hSWQgPSBlbnYuc2NoZW1hSWQ7XG4gICAgICAgIHRoaXMucm9vdCA9IGVudi5yb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuYmFzZUlkID0gKF9hID0gZW52LmJhc2VJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hW2Vudi5zY2hlbWFJZCB8fCBcIiRpZFwiXSk7XG4gICAgICAgIHRoaXMuc2NoZW1hUGF0aCA9IGVudi5zY2hlbWFQYXRoO1xuICAgICAgICB0aGlzLmxvY2FsUmVmcyA9IGVudi5sb2NhbFJlZnM7XG4gICAgICAgIHRoaXMubWV0YSA9IGVudi5tZXRhO1xuICAgICAgICB0aGlzLiRhc3luYyA9IHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYS4kYXN5bmM7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2NoZW1hRW52ID0gU2NoZW1hRW52O1xuLy8gbGV0IGNvZGVTaXplID0gMFxuLy8gbGV0IG5vZGVDb3VudCA9IDBcbi8vIENvbXBpbGVzIHNjaGVtYSBpbiBTY2hlbWFFbnZcbmZ1bmN0aW9uIGNvbXBpbGVTY2hlbWEoc2NoKSB7XG4gICAgLy8gVE9ETyByZWZhY3RvciAtIHJlbW92ZSBjb21waWxhdGlvbnNcbiAgICBjb25zdCBfc2NoID0gZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICBpZiAoX3NjaClcbiAgICAgICAgcmV0dXJuIF9zY2g7XG4gICAgY29uc3Qgcm9vdElkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBzY2gucm9vdC5iYXNlSWQpOyAvLyBUT0RPIGlmIGdldEZ1bGxQYXRoIHJlbW92ZWQgMSB0ZXN0cyBmYWlsc1xuICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgY29uc3QgeyBvd25Qcm9wZXJ0aWVzIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3QgZ2VuID0gbmV3IGNvZGVnZW5fMS5Db2RlR2VuKHRoaXMuc2NvcGUsIHsgZXM1LCBsaW5lcywgb3duUHJvcGVydGllcyB9KTtcbiAgICBsZXQgX1ZhbGlkYXRpb25FcnJvcjtcbiAgICBpZiAoc2NoLiRhc3luYykge1xuICAgICAgICBfVmFsaWRhdGlvbkVycm9yID0gZ2VuLnNjb3BlVmFsdWUoXCJFcnJvclwiLCB7XG4gICAgICAgICAgICByZWY6IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0LFxuICAgICAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgcmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKS5kZWZhdWx0YCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IGdlbi5zY29wZU5hbWUoXCJ2YWxpZGF0ZVwiKTtcbiAgICBzY2gudmFsaWRhdGVOYW1lID0gdmFsaWRhdGVOYW1lO1xuICAgIGNvbnN0IHNjaGVtYUN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBhbGxFcnJvcnM6IHRoaXMub3B0cy5hbGxFcnJvcnMsXG4gICAgICAgIGRhdGE6IG5hbWVzXzEuZGVmYXVsdC5kYXRhLFxuICAgICAgICBwYXJlbnREYXRhOiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSxcbiAgICAgICAgcGFyZW50RGF0YVByb3BlcnR5OiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LFxuICAgICAgICBkYXRhTmFtZXM6IFtuYW1lc18xLmRlZmF1bHQuZGF0YV0sXG4gICAgICAgIGRhdGFQYXRoQXJyOiBbY29kZWdlbl8xLm5pbF0sIC8vIFRPRE8gY2FuIGl0cyBsZW5ndGggYmUgdXNlZCBhcyBkYXRhTGV2ZWwgaWYgbmlsIGlzIHJlbW92ZWQ/XG4gICAgICAgIGRhdGFMZXZlbDogMCxcbiAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgZGVmaW5lZFByb3BlcnRpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCB0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWVcbiAgICAgICAgICAgID8geyByZWY6IHNjaC5zY2hlbWEsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2guc2NoZW1hKSB9XG4gICAgICAgICAgICA6IHsgcmVmOiBzY2guc2NoZW1hIH0pLFxuICAgICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcjogX1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgc2NoZW1hOiBzY2guc2NoZW1hLFxuICAgICAgICBzY2hlbWFFbnY6IHNjaCxcbiAgICAgICAgcm9vdElkLFxuICAgICAgICBiYXNlSWQ6IHNjaC5iYXNlSWQgfHwgcm9vdElkLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBzY2guc2NoZW1hUGF0aCB8fCAodGhpcy5vcHRzLmp0ZCA/IFwiXCIgOiBcIiNcIiksXG4gICAgICAgIGVycm9yUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgXCJcImAsXG4gICAgICAgIG9wdHM6IHRoaXMub3B0cyxcbiAgICAgICAgc2VsZjogdGhpcyxcbiAgICB9O1xuICAgIGxldCBzb3VyY2VDb2RlO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5hZGQoc2NoKTtcbiAgICAgICAgKDAsIHZhbGlkYXRlXzEudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHNjaGVtYUN4dCk7XG4gICAgICAgIGdlbi5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7XG4gICAgICAgIC8vIGdlbi5vcHRpbWl6ZSgxKVxuICAgICAgICBjb25zdCB2YWxpZGF0ZUNvZGUgPSBnZW4udG9TdHJpbmcoKTtcbiAgICAgICAgc291cmNlQ29kZSA9IGAke2dlbi5zY29wZVJlZnMobmFtZXNfMS5kZWZhdWx0LnNjb3BlKX1yZXR1cm4gJHt2YWxpZGF0ZUNvZGV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coKGNvZGVTaXplICs9IHNvdXJjZUNvZGUubGVuZ3RoKSwgKG5vZGVDb3VudCArPSBnZW4ubm9kZUNvdW50KSlcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnByb2Nlc3MpXG4gICAgICAgICAgICBzb3VyY2VDb2RlID0gdGhpcy5vcHRzLmNvZGUucHJvY2Vzcyhzb3VyY2VDb2RlLCBzY2gpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUpXG4gICAgICAgIGNvbnN0IG1ha2VWYWxpZGF0ZSA9IG5ldyBGdW5jdGlvbihgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn1gLCBgJHtuYW1lc18xLmRlZmF1bHQuc2NvcGV9YCwgc291cmNlQ29kZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gbWFrZVZhbGlkYXRlKHRoaXMsIHRoaXMuc2NvcGUuZ2V0KCkpO1xuICAgICAgICB0aGlzLnNjb3BlLnZhbHVlKHZhbGlkYXRlTmFtZSwgeyByZWY6IHZhbGlkYXRlIH0pO1xuICAgICAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWEgPSBzY2guc2NoZW1hO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWFFbnYgPSBzY2g7XG4gICAgICAgIGlmIChzY2guJGFzeW5jKVxuICAgICAgICAgICAgdmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlID0geyB2YWxpZGF0ZU5hbWUsIHZhbGlkYXRlQ29kZSwgc2NvcGVWYWx1ZXM6IGdlbi5fdmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy51bmV2YWx1YXRlZCkge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgaXRlbXMgfSA9IHNjaGVtYUN4dDtcbiAgICAgICAgICAgIHZhbGlkYXRlLmV2YWx1YXRlZCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IHByb3BzLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogaXRlbXMsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNJdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodmFsaWRhdGUuc291cmNlKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZS5ldmFsdWF0ZWQgPSAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkodmFsaWRhdGUuZXZhbHVhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzY2gudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZTtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZU5hbWU7XG4gICAgICAgIGlmIChzb3VyY2VDb2RlKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOlwiLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlLCB0aGlzLm9wdHMpXG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKHNjaCk7XG4gICAgfVxufVxuZXhwb3J0cy5jb21waWxlU2NoZW1hID0gY29tcGlsZVNjaGVtYTtcbmZ1bmN0aW9uIHJlc29sdmVSZWYocm9vdCwgYmFzZUlkLCByZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICBjb25zdCBzY2hPckZ1bmMgPSByb290LnJlZnNbcmVmXTtcbiAgICBpZiAoc2NoT3JGdW5jKVxuICAgICAgICByZXR1cm4gc2NoT3JGdW5jO1xuICAgIGxldCBfc2NoID0gcmVzb2x2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSAoX2EgPSByb290LmxvY2FsUmVmcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3JlZl07IC8vIFRPRE8gbWF5YmUgbG9jYWxSZWZzIHNob3VsZCBob2xkIFNjaGVtYUVudlxuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmIChzY2hlbWEpXG4gICAgICAgICAgICBfc2NoID0gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiAocm9vdC5yZWZzW3JlZl0gPSBpbmxpbmVPckNvbXBpbGUuY2FsbCh0aGlzLCBfc2NoKSk7XG59XG5leHBvcnRzLnJlc29sdmVSZWYgPSByZXNvbHZlUmVmO1xuZnVuY3Rpb24gaW5saW5lT3JDb21waWxlKHNjaCkge1xuICAgIGlmICgoMCwgcmVzb2x2ZV8xLmlubGluZVJlZikoc2NoLnNjaGVtYSwgdGhpcy5vcHRzLmlubGluZVJlZnMpKVxuICAgICAgICByZXR1cm4gc2NoLnNjaGVtYTtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlID8gc2NoIDogY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG59XG4vLyBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG5mdW5jdGlvbiBnZXRDb21waWxpbmdTY2hlbWEoc2NoRW52KSB7XG4gICAgZm9yIChjb25zdCBzY2ggb2YgdGhpcy5fY29tcGlsYXRpb25zKSB7XG4gICAgICAgIGlmIChzYW1lU2NoZW1hRW52KHNjaCwgc2NoRW52KSlcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBnZXRDb21waWxpbmdTY2hlbWE7XG5mdW5jdGlvbiBzYW1lU2NoZW1hRW52KHMxLCBzMikge1xuICAgIHJldHVybiBzMS5zY2hlbWEgPT09IHMyLnNjaGVtYSAmJiBzMS5yb290ID09PSBzMi5yb290ICYmIHMxLmJhc2VJZCA9PT0gczIuYmFzZUlkO1xufVxuLy8gcmVzb2x2ZSBhbmQgY29tcGlsZSB0aGUgcmVmZXJlbmNlcyAoJHJlZilcbi8vIFRPRE8gcmV0dXJucyBBbnlTY2hlbWFPYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbmZ1bmN0aW9uIHJlc29sdmUocm9vdCwgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgbGV0IHNjaDtcbiAgICB3aGlsZSAodHlwZW9mIChzY2ggPSB0aGlzLnJlZnNbcmVmXSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmVmID0gc2NoO1xuICAgIHJldHVybiBzY2ggfHwgdGhpcy5zY2hlbWFzW3JlZl0gfHwgcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG59XG4vLyBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShyb290LCAvLyByb290IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByZWZzIFRPRE8gYmVsb3cgU2NoZW1hRW52IGlzIGFzc2lnbmVkIHRvIGl0XG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGNvbnN0IHAgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucGFyc2UocmVmKTtcbiAgICBjb25zdCByZWZQYXRoID0gKDAsIHJlc29sdmVfMS5fZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcCk7XG4gICAgbGV0IGJhc2VJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcm9vdC5iYXNlSWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gVE9ETyBgT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDBgIHNob3VsZCBub3QgYmUgbmVlZGVkIC0gYnV0IHJlbW92aW5nIGJyZWFrcyAyIHRlc3RzXG4gICAgaWYgKE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwICYmIHJlZlBhdGggPT09IGJhc2VJZCkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCByb290KTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWZQYXRoKTtcbiAgICBjb25zdCBzY2hPclJlZiA9IHRoaXMucmVmc1tpZF0gfHwgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHNjaE9yUmVmKTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHNjaE9yUmVmID09PSBudWxsIHx8IHNjaE9yUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hPclJlZi5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFzY2hPclJlZi52YWxpZGF0ZSlcbiAgICAgICAgY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaE9yUmVmKTtcbiAgICBpZiAoaWQgPT09ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZikpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHNjaE9yUmVmO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGNvbnN0IHNjaElkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgaWYgKHNjaElkKVxuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoT3JSZWYpO1xufVxuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gcmVzb2x2ZVNjaGVtYTtcbmNvbnN0IFBSRVZFTlRfU0NPUEVfQ0hBTkdFID0gbmV3IFNldChbXG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuXSk7XG5mdW5jdGlvbiBnZXRKc29uUG9pbnRlcihwYXJzZWRSZWYsIHsgYmFzZUlkLCBzY2hlbWEsIHJvb3QgfSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKChfYSA9IHBhcnNlZFJlZi5mcmFnbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSAhPT0gXCIvXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFyc2VkUmVmLmZyYWdtZW50LnNsaWNlKDEpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcnRTY2hlbWEgPSBzY2hlbWFbKDAsIHV0aWxfMS51bmVzY2FwZUZyYWdtZW50KShwYXJ0KV07XG4gICAgICAgIGlmIChwYXJ0U2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNjaGVtYSA9IHBhcnRTY2hlbWE7XG4gICAgICAgIC8vIFRPRE8gUFJFVkVOVF9TQ09QRV9DSEFOR0UgY291bGQgYmUgZGVmaW5lZCBpbiBrZXl3b3JkIGRlZj9cbiAgICAgICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIHNjaGVtYVt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICBpZiAoIVBSRVZFTlRfU0NPUEVfQ0hBTkdFLmhhcyhwYXJ0KSAmJiBzY2hJZCkge1xuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBlbnY7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIgJiYgc2NoZW1hLiRyZWYgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgdGhpcy5SVUxFUykpIHtcbiAgICAgICAgY29uc3QgJHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaGVtYS4kcmVmKTtcbiAgICAgICAgZW52ID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsICRyZWYpO1xuICAgIH1cbiAgICAvLyBldmVuIHRob3VnaCByZXNvbHV0aW9uIGZhaWxlZCB3ZSBuZWVkIHRvIHJldHVybiBTY2hlbWFFbnYgdG8gdGhyb3cgZXhjZXB0aW9uXG4gICAgLy8gc28gdGhhdCBjb21waWxlQXN5bmMgbG9hZHMgbWlzc2luZyBzY2hlbWEuXG4gICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgIGVudiA9IGVudiB8fCBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIGlmIChlbnYuc2NoZW1hICE9PSBlbnYucm9vdC5zY2hlbWEpXG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7KHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59ICovXG5jb25zdCBpc1VVSUQgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXltcXGRhLWZdezh9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezEyfSQvaXUpXG5cbi8qKiBAdHlwZSB7KHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59ICovXG5jb25zdCBpc0lQdjQgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGR7Mn18WzEtOV1cXGR8XFxkKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkezJ9fFsxLTldXFxkfFxcZCkkL3UpXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpbnB1dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkIChpbnB1dCkge1xuICBsZXQgYWNjID0gJydcbiAgbGV0IGNvZGUgPSAwXG4gIGxldCBpID0gMFxuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvZGUgPSBpbnB1dFtpXS5jaGFyQ29kZUF0KDApXG4gICAgaWYgKGNvZGUgPT09IDQ4KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoISgoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB8fCAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDcwKSB8fCAoY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEwMikpKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgYWNjICs9IGlucHV0W2ldXG4gICAgYnJlYWtcbiAgfVxuXG4gIGZvciAoaSArPSAxOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb2RlID0gaW5wdXRbaV0uY2hhckNvZGVBdCgwKVxuICAgIGlmICghKChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHx8IChjb2RlID49IDY1ICYmIGNvZGUgPD0gNzApIHx8IChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTAyKSkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBhY2MgKz0gaW5wdXRbaV1cbiAgfVxuICByZXR1cm4gYWNjXG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gR2V0SVBWNlJlc3VsdFxuICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvciAtIEluZGljYXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgSVB2NiBhZGRyZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgcGFyc2VkIElQdjYgYWRkcmVzcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbem9uZV0gLSBUaGUgem9uZSBpZGVudGlmaWVyLCBpZiBwcmVzZW50LlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3Qgbm9uU2ltcGxlRG9tYWluID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoL1teIVwiJCYnKCkqKyxcXC0uOz1fYGEtent9fl0vdSlcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGJ1ZmZlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVJc1pvbmUgKGJ1ZmZlcikge1xuICBidWZmZXIubGVuZ3RoID0gMFxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYnVmZmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFkZHJlc3NcbiAqIEBwYXJhbSB7R2V0SVBWNlJlc3VsdH0gb3V0cHV0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uc3VtZUhleHRldHMgKGJ1ZmZlciwgYWRkcmVzcywgb3V0cHV0KSB7XG4gIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgY29uc3QgaGV4ID0gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkKGJ1ZmZlcilcbiAgICBpZiAoaGV4ICE9PSAnJykge1xuICAgICAgYWRkcmVzcy5wdXNoKGhleClcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LmVycm9yID0gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGJ1ZmZlci5sZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEByZXR1cm5zIHtHZXRJUFY2UmVzdWx0fVxuICovXG5mdW5jdGlvbiBnZXRJUFY2IChpbnB1dCkge1xuICBsZXQgdG9rZW5Db3VudCA9IDBcbiAgY29uc3Qgb3V0cHV0ID0geyBlcnJvcjogZmFsc2UsIGFkZHJlc3M6ICcnLCB6b25lOiAnJyB9XG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgYWRkcmVzcyA9IFtdXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgYnVmZmVyID0gW11cbiAgbGV0IGVuZGlwdjZFbmNvdW50ZXJlZCA9IGZhbHNlXG4gIGxldCBlbmRJcHY2ID0gZmFsc2VcblxuICBsZXQgY29uc3VtZSA9IGNvbnN1bWVIZXh0ZXRzXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnNvciA9IGlucHV0W2ldXG4gICAgaWYgKGN1cnNvciA9PT0gJ1snIHx8IGN1cnNvciA9PT0gJ10nKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAoY3Vyc29yID09PSAnOicpIHtcbiAgICAgIGlmIChlbmRpcHY2RW5jb3VudGVyZWQgPT09IHRydWUpIHtcbiAgICAgICAgZW5kSXB2NiA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICghY29uc3VtZShidWZmZXIsIGFkZHJlc3MsIG91dHB1dCkpIHsgYnJlYWsgfVxuICAgICAgaWYgKCsrdG9rZW5Db3VudCA+IDcpIHtcbiAgICAgICAgLy8gbm90IHZhbGlkXG4gICAgICAgIG91dHB1dC5lcnJvciA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChpID4gMCAmJiBpbnB1dFtpIC0gMV0gPT09ICc6Jykge1xuICAgICAgICBlbmRpcHY2RW5jb3VudGVyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICBhZGRyZXNzLnB1c2goJzonKVxuICAgICAgY29udGludWVcbiAgICB9IGVsc2UgaWYgKGN1cnNvciA9PT0gJyUnKSB7XG4gICAgICBpZiAoIWNvbnN1bWUoYnVmZmVyLCBhZGRyZXNzLCBvdXRwdXQpKSB7IGJyZWFrIH1cbiAgICAgIC8vIHN3aXRjaCB0byB6b25lIGRldGVjdGlvblxuICAgICAgY29uc3VtZSA9IGNvbnN1bWVJc1pvbmVcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLnB1c2goY3Vyc29yKVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgaWYgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gY29uc3VtZUlzWm9uZSkge1xuICAgICAgb3V0cHV0LnpvbmUgPSBidWZmZXIuam9pbignJylcbiAgICB9IGVsc2UgaWYgKGVuZElwdjYpIHtcbiAgICAgIGFkZHJlc3MucHVzaChidWZmZXIuam9pbignJykpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaChzdHJpbmdBcnJheVRvSGV4U3RyaXBwZWQoYnVmZmVyKSlcbiAgICB9XG4gIH1cbiAgb3V0cHV0LmFkZHJlc3MgPSBhZGRyZXNzLmpvaW4oJycpXG4gIHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBOb3JtYWxpemVJUHY2UmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaG9zdCAtIFRoZSBub3JtYWxpemVkIGhvc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2VzY2FwZWRIb3N0XSAtIFRoZSBlc2NhcGVkIGhvc3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzSVBWNiAtIEluZGljYXRlcyBpZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9zdFxuICogQHJldHVybnMge05vcm1hbGl6ZUlQdjZSZXN1bHR9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlQdjYgKGhvc3QpIHtcbiAgaWYgKGZpbmRUb2tlbihob3N0LCAnOicpIDwgMikgeyByZXR1cm4geyBob3N0LCBpc0lQVjY6IGZhbHNlIH0gfVxuICBjb25zdCBpcHY2ID0gZ2V0SVBWNihob3N0KVxuXG4gIGlmICghaXB2Ni5lcnJvcikge1xuICAgIGxldCBuZXdIb3N0ID0gaXB2Ni5hZGRyZXNzXG4gICAgbGV0IGVzY2FwZWRIb3N0ID0gaXB2Ni5hZGRyZXNzXG4gICAgaWYgKGlwdjYuem9uZSkge1xuICAgICAgbmV3SG9zdCArPSAnJScgKyBpcHY2LnpvbmVcbiAgICAgIGVzY2FwZWRIb3N0ICs9ICclMjUnICsgaXB2Ni56b25lXG4gICAgfVxuICAgIHJldHVybiB7IGhvc3Q6IG5ld0hvc3QsIGlzSVBWNjogdHJ1ZSwgZXNjYXBlZEhvc3QgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGhvc3QsIGlzSVBWNjogZmFsc2UgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBmaW5kVG9rZW4gKHN0ciwgdG9rZW4pIHtcbiAgbGV0IGluZCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RyW2ldID09PSB0b2tlbikgaW5kKytcbiAgfVxuICByZXR1cm4gaW5kXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIuNFxuICovXG5mdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyAocGF0aCkge1xuICBsZXQgaW5wdXQgPSBwYXRoXG4gIGNvbnN0IG91dHB1dCA9IFtdXG4gIGxldCBuZXh0U2xhc2ggPSAtMVxuICBsZXQgbGVuID0gMFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuICB3aGlsZSAobGVuID0gaW5wdXQubGVuZ3RoKSB7XG4gICAgaWYgKGxlbiA9PT0gMSkge1xuICAgICAgaWYgKGlucHV0ID09PSAnLicpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICcvJykge1xuICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaChpbnB1dClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gMikge1xuICAgICAgaWYgKGlucHV0WzBdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDIpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dFswXSA9PT0gJy8nKSB7XG4gICAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nIHx8IGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGVuID09PSAzKSB7XG4gICAgICBpZiAoaW5wdXQgPT09ICcvLi4nKSB7XG4gICAgICAgIGlmIChvdXRwdXQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgb3V0cHV0LnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0LnB1c2goJy8nKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5wdXRbMF0gPT09ICcuJykge1xuICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzJdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDMpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dFsxXSA9PT0gJy8nKSB7XG4gICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMilcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlucHV0WzBdID09PSAnLycpIHtcbiAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nKSB7XG4gICAgICAgIGlmIChpbnB1dFsyXSA9PT0gJy8nKSB7XG4gICAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgyKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRbMl0gPT09ICcuJykge1xuICAgICAgICAgIGlmIChpbnB1dFszXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDMpXG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICBvdXRwdXQucG9wKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUnVsZSAyRTogTW92ZSBub3JtYWwgcGF0aCBzZWdtZW50IHRvIG91dHB1dFxuICAgIGlmICgobmV4dFNsYXNoID0gaW5wdXQuaW5kZXhPZignLycsIDEpKSA9PT0gLTEpIHtcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0KVxuICAgICAgYnJlYWtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goaW5wdXQuc2xpY2UoMCwgbmV4dFNsYXNoKSlcbiAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UobmV4dFNsYXNoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHBhcmFtIHtib29sZWFufSBlc2NcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyAoY29tcG9uZW50LCBlc2MpIHtcbiAgY29uc3QgZnVuYyA9IGVzYyAhPT0gdHJ1ZSA/IGVzY2FwZSA6IHVuZXNjYXBlXG4gIGlmIChjb21wb25lbnQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQuc2NoZW1lID0gZnVuYyhjb21wb25lbnQuc2NoZW1lKVxuICB9XG4gIGlmIChjb21wb25lbnQudXNlcmluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC51c2VyaW5mbyA9IGZ1bmMoY29tcG9uZW50LnVzZXJpbmZvKVxuICB9XG4gIGlmIChjb21wb25lbnQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50Lmhvc3QgPSBmdW5jKGNvbXBvbmVudC5ob3N0KVxuICB9XG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50LnBhdGggPSBmdW5jKGNvbXBvbmVudC5wYXRoKVxuICB9XG4gIGlmIChjb21wb25lbnQucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5xdWVyeSA9IGZ1bmMoY29tcG9uZW50LnF1ZXJ5KVxuICB9XG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5mcmFnbWVudCA9IGZ1bmMoY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHJlY29tcG9zZUF1dGhvcml0eSAoY29tcG9uZW50KSB7XG4gIGNvbnN0IHVyaVRva2VucyA9IFtdXG5cbiAgaWYgKGNvbXBvbmVudC51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50LnVzZXJpbmZvKVxuICAgIHVyaVRva2Vucy5wdXNoKCdAJylcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGhvc3QgPSB1bmVzY2FwZShjb21wb25lbnQuaG9zdClcbiAgICBpZiAoIWlzSVB2NChob3N0KSkge1xuICAgICAgY29uc3QgaXBWNnJlcyA9IG5vcm1hbGl6ZUlQdjYoaG9zdClcbiAgICAgIGlmIChpcFY2cmVzLmlzSVBWNiA9PT0gdHJ1ZSkge1xuICAgICAgICBob3N0ID0gYFske2lwVjZyZXMuZXNjYXBlZEhvc3R9XWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhvc3QgPSBjb21wb25lbnQuaG9zdFxuICAgICAgfVxuICAgIH1cbiAgICB1cmlUb2tlbnMucHVzaChob3N0KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb21wb25lbnQucG9ydCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGNvbXBvbmVudC5wb3J0ID09PSAnc3RyaW5nJykge1xuICAgIHVyaVRva2Vucy5wdXNoKCc6JylcbiAgICB1cmlUb2tlbnMucHVzaChTdHJpbmcoY29tcG9uZW50LnBvcnQpKVxuICB9XG5cbiAgcmV0dXJuIHVyaVRva2Vucy5sZW5ndGggPyB1cmlUb2tlbnMuam9pbignJykgOiB1bmRlZmluZWRcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBub25TaW1wbGVEb21haW4sXG4gIHJlY29tcG9zZUF1dGhvcml0eSxcbiAgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsXG4gIHJlbW92ZURvdFNlZ21lbnRzLFxuICBpc0lQdjQsXG4gIGlzVVVJRCxcbiAgbm9ybWFsaXplSVB2NixcbiAgc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVVJRCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCBVUk5fUkVHID0gLyhbXFxkYS16XVtcXGRcXC1hLXpdezAsMzF9KTooKD86W1xcdyEkJygpKissXFwtLjo7PUBdfCVbXFxkYS1mXXsyfSkrKS9pdVxuXG5jb25zdCBzdXBwb3J0ZWRTY2hlbWVOYW1lcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2h0dHAnLCAnaHR0cHMnLCAnd3MnLFxuICAnd3NzJywgJ3VybicsICd1cm46dXVpZCddKVxuXG4vKiogQHR5cGVkZWYge3N1cHBvcnRlZFNjaGVtZU5hbWVzW251bWJlcl19IFNjaGVtZU5hbWUgKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge25hbWUgaXMgU2NoZW1lTmFtZX1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFNjaGVtZU5hbWUgKG5hbWUpIHtcbiAgcmV0dXJuIHN1cHBvcnRlZFNjaGVtZU5hbWVzLmluZGV4T2YoLyoqIEB0eXBlIHsqfSAqLyAobmFtZSkpICE9PSAtMVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayBTY2hlbWVGblxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSBjb21wb25lbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2NoZW1lSGFuZGxlclxuICogQHByb3BlcnR5IHtTY2hlbWVOYW1lfSBzY2hlbWUgLSBUaGUgc2NoZW1lIG5hbWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkb21haW5Ib3N0XSAtIEluZGljYXRlcyBpZiB0aGUgc2NoZW1lIHN1cHBvcnRzIGRvbWFpbiBob3N0cy5cbiAqIEBwcm9wZXJ0eSB7U2NoZW1lRm59IHBhcnNlIC0gRnVuY3Rpb24gdG8gcGFyc2UgdGhlIFVSSSBjb21wb25lbnQgZm9yIHRoaXMgc2NoZW1lLlxuICogQHByb3BlcnR5IHtTY2hlbWVGbn0gc2VyaWFsaXplIC0gRnVuY3Rpb24gdG8gc2VyaWFsaXplIHRoZSBVUkkgY29tcG9uZW50IGZvciB0aGlzIHNjaGVtZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBOb3JtYWxpemVdIC0gSW5kaWNhdGVzIGlmIG5vcm1hbGl6YXRpb24gc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoaXMgc2NoZW1lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYWJzb2x1dGVQYXRoXSAtIEluZGljYXRlcyBpZiB0aGUgc2NoZW1lIHVzZXMgYWJzb2x1dGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1bmljb2RlU3VwcG9ydF0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjaGVtZSBzdXBwb3J0cyBVbmljb2RlLlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSB3c0NvbXBvbmVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHdzSXNTZWN1cmUgKHdzQ29tcG9uZW50KSB7XG4gIGlmICh3c0NvbXBvbmVudC5zZWN1cmUgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHdzQ29tcG9uZW50LnNlY3VyZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICh3c0NvbXBvbmVudC5zY2hlbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgd3NDb21wb25lbnQuc2NoZW1lLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVswXSA9PT0gJ3cnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVswXSA9PT0gJ1cnKSAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVsxXSA9PT0gJ3MnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVsxXSA9PT0gJ1MnKSAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVsyXSA9PT0gJ3MnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVsyXSA9PT0gJ1MnKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gaHR0cFBhcnNlIChjb21wb25lbnQpIHtcbiAgaWYgKCFjb21wb25lbnQuaG9zdCkge1xuICAgIGNvbXBvbmVudC5lcnJvciA9IGNvbXBvbmVudC5lcnJvciB8fCAnSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuJ1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gaHR0cFNlcmlhbGl6ZSAoY29tcG9uZW50KSB7XG4gIGNvbnN0IHNlY3VyZSA9IFN0cmluZyhjb21wb25lbnQuc2NoZW1lKS50b0xvd2VyQ2FzZSgpID09PSAnaHR0cHMnXG5cbiAgLy8gbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgaWYgKGNvbXBvbmVudC5wb3J0ID09PSAoc2VjdXJlID8gNDQzIDogODApIHx8IGNvbXBvbmVudC5wb3J0ID09PSAnJykge1xuICAgIGNvbXBvbmVudC5wb3J0ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBub3JtYWxpemUgdGhlIGVtcHR5IHBhdGhcbiAgaWYgKCFjb21wb25lbnQucGF0aCkge1xuICAgIGNvbXBvbmVudC5wYXRoID0gJy8nXG4gIH1cblxuICAvLyBOT1RFOiBXZSBkbyBub3QgcGFyc2UgcXVlcnkgc3RyaW5ncyBmb3IgSFRUUCBVUklzXG4gIC8vIGFzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuICAvLyBhbmQgbm90IHRoZSBIVFRQIHNwZWMuXG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gd3NQYXJzZSAod3NDb21wb25lbnQpIHtcbi8vIGluZGljYXRlIGlmIHRoZSBzZWN1cmUgZmxhZyBpcyBzZXRcbiAgd3NDb21wb25lbnQuc2VjdXJlID0gd3NJc1NlY3VyZSh3c0NvbXBvbmVudClcblxuICAvLyBjb25zdHJ1Y3QgcmVzb3VjZSBuYW1lXG4gIHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSA9ICh3c0NvbXBvbmVudC5wYXRoIHx8ICcvJykgKyAod3NDb21wb25lbnQucXVlcnkgPyAnPycgKyB3c0NvbXBvbmVudC5xdWVyeSA6ICcnKVxuICB3c0NvbXBvbmVudC5wYXRoID0gdW5kZWZpbmVkXG4gIHdzQ29tcG9uZW50LnF1ZXJ5ID0gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHdzQ29tcG9uZW50XG59XG5cbi8qKiBAdHlwZSB7U2NoZW1lRm59ICovXG5mdW5jdGlvbiB3c1NlcmlhbGl6ZSAod3NDb21wb25lbnQpIHtcbi8vIG5vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmICh3c0NvbXBvbmVudC5wb3J0ID09PSAod3NJc1NlY3VyZSh3c0NvbXBvbmVudCkgPyA0NDMgOiA4MCkgfHwgd3NDb21wb25lbnQucG9ydCA9PT0gJycpIHtcbiAgICB3c0NvbXBvbmVudC5wb3J0ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBlbnN1cmUgc2NoZW1lIG1hdGNoZXMgc2VjdXJlIGZsYWdcbiAgaWYgKHR5cGVvZiB3c0NvbXBvbmVudC5zZWN1cmUgPT09ICdib29sZWFuJykge1xuICAgIHdzQ29tcG9uZW50LnNjaGVtZSA9ICh3c0NvbXBvbmVudC5zZWN1cmUgPyAnd3NzJyA6ICd3cycpXG4gICAgd3NDb21wb25lbnQuc2VjdXJlID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyByZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuICBpZiAod3NDb21wb25lbnQucmVzb3VyY2VOYW1lKSB7XG4gICAgY29uc3QgW3BhdGgsIHF1ZXJ5XSA9IHdzQ29tcG9uZW50LnJlc291cmNlTmFtZS5zcGxpdCgnPycpXG4gICAgd3NDb21wb25lbnQucGF0aCA9IChwYXRoICYmIHBhdGggIT09ICcvJyA/IHBhdGggOiB1bmRlZmluZWQpXG4gICAgd3NDb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgIHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gZm9yYmlkIGZyYWdtZW50IGNvbXBvbmVudFxuICB3c0NvbXBvbmVudC5mcmFnbWVudCA9IHVuZGVmaW5lZFxuXG4gIHJldHVybiB3c0NvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJuUGFyc2UgKHVybkNvbXBvbmVudCwgb3B0aW9ucykge1xuICBpZiAoIXVybkNvbXBvbmVudC5wYXRoKSB7XG4gICAgdXJuQ29tcG9uZW50LmVycm9yID0gJ1VSTiBjYW4gbm90IGJlIHBhcnNlZCdcbiAgICByZXR1cm4gdXJuQ29tcG9uZW50XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHVybkNvbXBvbmVudC5wYXRoLm1hdGNoKFVSTl9SRUcpXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50LnNjaGVtZSB8fCAndXJuJ1xuICAgIHVybkNvbXBvbmVudC5uaWQgPSBtYXRjaGVzWzFdLnRvTG93ZXJDYXNlKClcbiAgICB1cm5Db21wb25lbnQubnNzID0gbWF0Y2hlc1syXVxuICAgIGNvbnN0IHVyblNjaGVtZSA9IGAke3NjaGVtZX06JHtvcHRpb25zLm5pZCB8fCB1cm5Db21wb25lbnQubmlkfWBcbiAgICBjb25zdCBzY2hlbWVIYW5kbGVyID0gZ2V0U2NoZW1lSGFuZGxlcih1cm5TY2hlbWUpXG4gICAgdXJuQ29tcG9uZW50LnBhdGggPSB1bmRlZmluZWRcblxuICAgIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgICB1cm5Db21wb25lbnQgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudCwgb3B0aW9ucylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdXJuQ29tcG9uZW50LmVycm9yID0gdXJuQ29tcG9uZW50LmVycm9yIHx8ICdVUk4gY2FuIG5vdCBiZSBwYXJzZWQuJ1xuICB9XG5cbiAgcmV0dXJuIHVybkNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJuU2VyaWFsaXplICh1cm5Db21wb25lbnQsIG9wdGlvbnMpIHtcbiAgaWYgKHVybkNvbXBvbmVudC5uaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJOIHdpdGhvdXQgbmlkIGNhbm5vdCBiZSBzZXJpYWxpemVkJylcbiAgfVxuICBjb25zdCBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnQuc2NoZW1lIHx8ICd1cm4nXG4gIGNvbnN0IG5pZCA9IHVybkNvbXBvbmVudC5uaWQudG9Mb3dlckNhc2UoKVxuICBjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWBcbiAgY29uc3Qgc2NoZW1lSGFuZGxlciA9IGdldFNjaGVtZUhhbmRsZXIodXJuU2NoZW1lKVxuXG4gIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgdXJuQ29tcG9uZW50ID0gc2NoZW1lSGFuZGxlci5zZXJpYWxpemUodXJuQ29tcG9uZW50LCBvcHRpb25zKVxuICB9XG5cbiAgY29uc3QgdXJpQ29tcG9uZW50ID0gdXJuQ29tcG9uZW50XG4gIGNvbnN0IG5zcyA9IHVybkNvbXBvbmVudC5uc3NcbiAgdXJpQ29tcG9uZW50LnBhdGggPSBgJHtuaWQgfHwgb3B0aW9ucy5uaWR9OiR7bnNzfWBcblxuICBvcHRpb25zLnNraXBFc2NhcGUgPSB0cnVlXG4gIHJldHVybiB1cmlDb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVybnV1aWRQYXJzZSAodXJuQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHV1aWRDb21wb25lbnQgPSB1cm5Db21wb25lbnRcbiAgdXVpZENvbXBvbmVudC51dWlkID0gdXVpZENvbXBvbmVudC5uc3NcbiAgdXVpZENvbXBvbmVudC5uc3MgPSB1bmRlZmluZWRcblxuICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgKCF1dWlkQ29tcG9uZW50LnV1aWQgfHwgIWlzVVVJRCh1dWlkQ29tcG9uZW50LnV1aWQpKSkge1xuICAgIHV1aWRDb21wb25lbnQuZXJyb3IgPSB1dWlkQ29tcG9uZW50LmVycm9yIHx8ICdVVUlEIGlzIG5vdCB2YWxpZC4nXG4gIH1cblxuICByZXR1cm4gdXVpZENvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJudXVpZFNlcmlhbGl6ZSAodXVpZENvbXBvbmVudCkge1xuICBjb25zdCB1cm5Db21wb25lbnQgPSB1dWlkQ29tcG9uZW50XG4gIC8vIG5vcm1hbGl6ZSBVVUlEXG4gIHVybkNvbXBvbmVudC5uc3MgPSAodXVpZENvbXBvbmVudC51dWlkIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiB1cm5Db21wb25lbnRcbn1cblxuY29uc3QgaHR0cCA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAnaHR0cCcsXG4gIGRvbWFpbkhvc3Q6IHRydWUsXG4gIHBhcnNlOiBodHRwUGFyc2UsXG4gIHNlcmlhbGl6ZTogaHR0cFNlcmlhbGl6ZVxufSlcblxuY29uc3QgaHR0cHMgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ2h0dHBzJyxcbiAgZG9tYWluSG9zdDogaHR0cC5kb21haW5Ib3N0LFxuICBwYXJzZTogaHR0cFBhcnNlLFxuICBzZXJpYWxpemU6IGh0dHBTZXJpYWxpemVcbn0pXG5cbmNvbnN0IHdzID0gLyoqIEB0eXBlIHtTY2hlbWVIYW5kbGVyfSAqLyAoe1xuICBzY2hlbWU6ICd3cycsXG4gIGRvbWFpbkhvc3Q6IHRydWUsXG4gIHBhcnNlOiB3c1BhcnNlLFxuICBzZXJpYWxpemU6IHdzU2VyaWFsaXplXG59KVxuXG5jb25zdCB3c3MgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ3dzcycsXG4gIGRvbWFpbkhvc3Q6IHdzLmRvbWFpbkhvc3QsXG4gIHBhcnNlOiB3cy5wYXJzZSxcbiAgc2VyaWFsaXplOiB3cy5zZXJpYWxpemVcbn0pXG5cbmNvbnN0IHVybiA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAndXJuJyxcbiAgcGFyc2U6IHVyblBhcnNlLFxuICBzZXJpYWxpemU6IHVyblNlcmlhbGl6ZSxcbiAgc2tpcE5vcm1hbGl6ZTogdHJ1ZVxufSlcblxuY29uc3QgdXJudXVpZCA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAndXJuOnV1aWQnLFxuICBwYXJzZTogdXJudXVpZFBhcnNlLFxuICBzZXJpYWxpemU6IHVybnV1aWRTZXJpYWxpemUsXG4gIHNraXBOb3JtYWxpemU6IHRydWVcbn0pXG5cbmNvbnN0IFNDSEVNRVMgPSAvKiogQHR5cGUge1JlY29yZDxTY2hlbWVOYW1lLCBTY2hlbWVIYW5kbGVyPn0gKi8gKHtcbiAgaHR0cCxcbiAgaHR0cHMsXG4gIHdzLFxuICB3c3MsXG4gIHVybixcbiAgJ3Vybjp1dWlkJzogdXJudXVpZFxufSlcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFNDSEVNRVMsIG51bGwpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBzY2hlbWVcbiAqIEByZXR1cm5zIHtTY2hlbWVIYW5kbGVyfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1lSGFuZGxlciAoc2NoZW1lKSB7XG4gIHJldHVybiAoXG4gICAgc2NoZW1lICYmIChcbiAgICAgIFNDSEVNRVNbLyoqIEB0eXBlIHtTY2hlbWVOYW1lfSAqLyAoc2NoZW1lKV0gfHxcbiAgICAgIFNDSEVNRVNbLyoqIEB0eXBlIHtTY2hlbWVOYW1lfSAqLyhzY2hlbWUudG9Mb3dlckNhc2UoKSldKVxuICApIHx8XG4gICAgdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3c0lzU2VjdXJlLFxuICBTQ0hFTUVTLFxuICBpc1ZhbGlkU2NoZW1lTmFtZSxcbiAgZ2V0U2NoZW1lSGFuZGxlcixcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbm9ybWFsaXplSVB2NiwgcmVtb3ZlRG90U2VnbWVudHMsIHJlY29tcG9zZUF1dGhvcml0eSwgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsIGlzSVB2NCwgbm9uU2ltcGxlRG9tYWluIH0gPSByZXF1aXJlKCcuL2xpYi91dGlscycpXG5jb25zdCB7IFNDSEVNRVMsIGdldFNjaGVtZUhhbmRsZXIgfSA9IHJlcXVpcmUoJy4vbGliL3NjaGVtZXMnKVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fHN0cmluZ30gVFxuICogQHBhcmFtIHtUfSB1cmlcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7VH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplICh1cmksIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAoc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB1cmkgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAocGFyc2Uoc2VyaWFsaXplKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9XG4gIHJldHVybiB1cmlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJJXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZSAoYmFzZVVSSSwgcmVsYXRpdmVVUkksIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2NoZW1lbGVzc09wdGlvbnMgPSBvcHRpb25zID8gT2JqZWN0LmFzc2lnbih7IHNjaGVtZTogJ251bGwnIH0sIG9wdGlvbnMpIDogeyBzY2hlbWU6ICdudWxsJyB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUNvbXBvbmVudChwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKVxuICBzY2hlbWVsZXNzT3B0aW9ucy5za2lwRXNjYXBlID0gdHJ1ZVxuICByZXR1cm4gc2VyaWFsaXplKHJlc29sdmVkLCBzY2hlbWVsZXNzT3B0aW9ucylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGJhc2VcbiAqIEBwYXJhbSB7aW1wb3J0ICgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gcmVsYXRpdmVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwTm9ybWFsaXphdGlvbj1mYWxzZV1cbiAqIEByZXR1cm5zIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50IChiYXNlLCByZWxhdGl2ZSwgb3B0aW9ucywgc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHRhcmdldCA9IHt9XG4gIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICBiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKSAvLyBub3JtYWxpemUgYmFzZSBjb21wb25lbnRcbiAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcbiAgICB0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lXG4gICAgLy8gdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcbiAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgIHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdFxuICAgIHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydFxuICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeVxuICB9IGVsc2Uge1xuICAgIGlmIChyZWxhdGl2ZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0XG4gICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnRcbiAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcmVsYXRpdmUucGF0aCkge1xuICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aFxuICAgICAgICBpZiAocmVsYXRpdmUucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVsYXRpdmUucGF0aFswXSA9PT0gJy8nKSB7XG4gICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgoYmFzZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IGJhc2UuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IGJhc2UucG9ydCAhPT0gdW5kZWZpbmVkKSAmJiAhYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9ICcvJyArIHJlbGF0aXZlLnBhdGhcbiAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICB9XG4gICAgICAvLyB0YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvXG4gICAgICB0YXJnZXQuaG9zdCA9IGJhc2UuaG9zdFxuICAgICAgdGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnRcbiAgICB9XG4gICAgdGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lXG4gIH1cblxuICB0YXJnZXQuZnJhZ21lbnQgPSByZWxhdGl2ZS5mcmFnbWVudFxuXG4gIHJldHVybiB0YXJnZXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlBXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlCXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXF1YWwgKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmlBID09PSAnc3RyaW5nJykge1xuICAgIHVyaUEgPSB1bmVzY2FwZSh1cmlBKVxuICAgIHVyaUEgPSBzZXJpYWxpemUobm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcocGFyc2UodXJpQSwgb3B0aW9ucyksIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXJpQSA9PT0gJ29iamVjdCcpIHtcbiAgICB1cmlBID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHVyaUEsIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgdXJpQiA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmlCID0gdW5lc2NhcGUodXJpQilcbiAgICB1cmlCID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHVyaUIgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpQiA9IHNlcmlhbGl6ZShub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyh1cmlCLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH1cblxuICByZXR1cm4gdXJpQS50b0xvd2VyQ2FzZSgpID09PSB1cmlCLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRvbmx5PGltcG9ydCgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudD59IGNtcHRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplIChjbXB0cywgb3B0cykge1xuICBjb25zdCBjb21wb25lbnQgPSB7XG4gICAgaG9zdDogY21wdHMuaG9zdCxcbiAgICBzY2hlbWU6IGNtcHRzLnNjaGVtZSxcbiAgICB1c2VyaW5mbzogY21wdHMudXNlcmluZm8sXG4gICAgcG9ydDogY21wdHMucG9ydCxcbiAgICBwYXRoOiBjbXB0cy5wYXRoLFxuICAgIHF1ZXJ5OiBjbXB0cy5xdWVyeSxcbiAgICBuaWQ6IGNtcHRzLm5pZCxcbiAgICBuc3M6IGNtcHRzLm5zcyxcbiAgICB1dWlkOiBjbXB0cy51dWlkLFxuICAgIGZyYWdtZW50OiBjbXB0cy5mcmFnbWVudCxcbiAgICByZWZlcmVuY2U6IGNtcHRzLnJlZmVyZW5jZSxcbiAgICByZXNvdXJjZU5hbWU6IGNtcHRzLnJlc291cmNlTmFtZSxcbiAgICBzZWN1cmU6IGNtcHRzLnNlY3VyZSxcbiAgICBlcnJvcjogJydcbiAgfVxuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgY29uc3QgdXJpVG9rZW5zID0gW11cblxuICAvLyBmaW5kIHNjaGVtZSBoYW5kbGVyXG4gIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudC5zY2hlbWUpXG5cbiAgLy8gcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50LCBvcHRpb25zKVxuXG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFvcHRpb25zLnNraXBFc2NhcGUpIHtcbiAgICAgIGNvbXBvbmVudC5wYXRoID0gZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuXG4gICAgICBpZiAoY29tcG9uZW50LnNjaGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbXBvbmVudC5wYXRoID0gY29tcG9uZW50LnBhdGguc3BsaXQoJyUzQScpLmpvaW4oJzonKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnQucGF0aCA9IHVuZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcgJiYgY29tcG9uZW50LnNjaGVtZSkge1xuICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudC5zY2hlbWUsICc6JylcbiAgfVxuXG4gIGNvbnN0IGF1dGhvcml0eSA9IHJlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnQpXG4gIGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvLycpXG4gICAgfVxuXG4gICAgdXJpVG9rZW5zLnB1c2goYXV0aG9yaXR5KVxuXG4gICAgaWYgKGNvbXBvbmVudC5wYXRoICYmIGNvbXBvbmVudC5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvJylcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudC5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgcyA9IGNvbXBvbmVudC5wYXRoXG5cbiAgICBpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG4gICAgICBzID0gcmVtb3ZlRG90U2VnbWVudHMocylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRob3JpdHkgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgc1swXSA9PT0gJy8nICYmXG4gICAgICBzWzFdID09PSAnLydcbiAgICApIHtcbiAgICAgIC8vIGRvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgICBzID0gJy8lMkYnICsgcy5zbGljZSgyKVxuICAgIH1cblxuICAgIHVyaVRva2Vucy5wdXNoKHMpXG4gIH1cblxuICBpZiAoY29tcG9uZW50LnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cmlUb2tlbnMucHVzaCgnPycsIGNvbXBvbmVudC5xdWVyeSlcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHVyaVRva2Vucy5wdXNoKCcjJywgY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiB1cmlUb2tlbnMuam9pbignJylcbn1cblxuY29uc3QgVVJJX1BBUlNFID0gL14oPzooW14jLzo/XSspOik/KD86XFwvXFwvKCg/OihbXiMvP0BdKilAKT8oXFxbW14jLz9cXF1dK1xcXXxbXiMvOj9dKikoPzo6KFxcZCopKT8pKT8oW14jP10qKSg/OlxcPyhbXiNdKikpPyg/OiMoKD86LnxbXFxuXFxyXSkqKSk/L3VcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJpXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHVyaSwgb3B0cykge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHBhcnNlZCA9IHtcbiAgICBzY2hlbWU6IHVuZGVmaW5lZCxcbiAgICB1c2VyaW5mbzogdW5kZWZpbmVkLFxuICAgIGhvc3Q6ICcnLFxuICAgIHBvcnQ6IHVuZGVmaW5lZCxcbiAgICBwYXRoOiAnJyxcbiAgICBxdWVyeTogdW5kZWZpbmVkLFxuICAgIGZyYWdtZW50OiB1bmRlZmluZWRcbiAgfVxuXG4gIGxldCBpc0lQID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSAnc3VmZml4Jykge1xuICAgIGlmIChvcHRpb25zLnNjaGVtZSkge1xuICAgICAgdXJpID0gb3B0aW9ucy5zY2hlbWUgKyAnOicgKyB1cmlcbiAgICB9IGVsc2Uge1xuICAgICAgdXJpID0gJy8vJyArIHVyaVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXMgPSB1cmkubWF0Y2goVVJJX1BBUlNFKVxuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgLy8gc3RvcmUgZWFjaCBjb21wb25lbnRcbiAgICBwYXJzZWQuc2NoZW1lID0gbWF0Y2hlc1sxXVxuICAgIHBhcnNlZC51c2VyaW5mbyA9IG1hdGNoZXNbM11cbiAgICBwYXJzZWQuaG9zdCA9IG1hdGNoZXNbNF1cbiAgICBwYXJzZWQucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKVxuICAgIHBhcnNlZC5wYXRoID0gbWF0Y2hlc1s2XSB8fCAnJ1xuICAgIHBhcnNlZC5xdWVyeSA9IG1hdGNoZXNbN11cbiAgICBwYXJzZWQuZnJhZ21lbnQgPSBtYXRjaGVzWzhdXG5cbiAgICAvLyBmaXggcG9ydCBudW1iZXJcbiAgICBpZiAoaXNOYU4ocGFyc2VkLnBvcnQpKSB7XG4gICAgICBwYXJzZWQucG9ydCA9IG1hdGNoZXNbNV1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5ob3N0KSB7XG4gICAgICBjb25zdCBpcHY0cmVzdWx0ID0gaXNJUHY0KHBhcnNlZC5ob3N0KVxuICAgICAgaWYgKGlwdjRyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGlwdjZyZXN1bHQgPSBub3JtYWxpemVJUHY2KHBhcnNlZC5ob3N0KVxuICAgICAgICBwYXJzZWQuaG9zdCA9IGlwdjZyZXN1bHQuaG9zdC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGlzSVAgPSBpcHY2cmVzdWx0LmlzSVBWNlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNJUCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQudXNlcmluZm8gPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQuaG9zdCA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZC5wb3J0ID09PSB1bmRlZmluZWQgJiYgcGFyc2VkLnF1ZXJ5ID09PSB1bmRlZmluZWQgJiYgIXBhcnNlZC5wYXRoKSB7XG4gICAgICBwYXJzZWQucmVmZXJlbmNlID0gJ3NhbWUtZG9jdW1lbnQnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZC5yZWZlcmVuY2UgPSAncmVsYXRpdmUnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICdhYnNvbHV0ZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICd1cmknXG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHJlZmVyZW5jZSBlcnJvcnNcbiAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09ICdzdWZmaXgnICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBwYXJzZWQucmVmZXJlbmNlKSB7XG4gICAgICBwYXJzZWQuZXJyb3IgPSBwYXJzZWQuZXJyb3IgfHwgJ1VSSSBpcyBub3QgYSAnICsgb3B0aW9ucy5yZWZlcmVuY2UgKyAnIHJlZmVyZW5jZS4nXG4gICAgfVxuXG4gICAgLy8gZmluZCBzY2hlbWUgaGFuZGxlclxuICAgIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IHBhcnNlZC5zY2hlbWUpXG5cbiAgICAvLyBjaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcbiAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgLy8gaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuICAgICAgaWYgKHBhcnNlZC5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkgJiYgaXNJUCA9PT0gZmFsc2UgJiYgbm9uU2ltcGxlRG9tYWluKHBhcnNlZC5ob3N0KSkge1xuICAgICAgICAvLyBjb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gVVJMLmRvbWFpblRvQVNDSUkocGFyc2VkLmhvc3QudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSTogXCIgKyBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbnZlcnQgSVJJIC0+IFVSSVxuICAgIH1cblxuICAgIGlmICghc2NoZW1lSGFuZGxlciB8fCAoc2NoZW1lSGFuZGxlciAmJiAhc2NoZW1lSGFuZGxlci5za2lwTm9ybWFsaXplKSkge1xuICAgICAgaWYgKHVyaS5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgIGlmIChwYXJzZWQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJzZWQuc2NoZW1lID0gdW5lc2NhcGUocGFyc2VkLnNjaGVtZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gdW5lc2NhcGUocGFyc2VkLmhvc3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYXJzZWQucGF0aCkge1xuICAgICAgICBwYXJzZWQucGF0aCA9IGVzY2FwZSh1bmVzY2FwZShwYXJzZWQucGF0aCkpXG4gICAgICB9XG4gICAgICBpZiAocGFyc2VkLmZyYWdtZW50KSB7XG4gICAgICAgIHBhcnNlZC5mcmFnbWVudCA9IGVuY29kZVVSSShkZWNvZGVVUklDb21wb25lbnQocGFyc2VkLmZyYWdtZW50KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBwYXJzaW5nXG4gICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuICAgICAgc2NoZW1lSGFuZGxlci5wYXJzZShwYXJzZWQsIG9wdGlvbnMpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCAnVVJJIGNhbiBub3QgYmUgcGFyc2VkLidcbiAgfVxuICByZXR1cm4gcGFyc2VkXG59XG5cbmNvbnN0IGZhc3RVcmkgPSB7XG4gIFNDSEVNRVMsXG4gIG5vcm1hbGl6ZSxcbiAgcmVzb2x2ZSxcbiAgcmVzb2x2ZUNvbXBvbmVudCxcbiAgZXF1YWwsXG4gIHNlcmlhbGl6ZSxcbiAgcGFyc2Vcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYXN0VXJpXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZmFzdFVyaVxubW9kdWxlLmV4cG9ydHMuZmFzdFVyaSA9IGZhc3RVcmlcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1cmkgPSByZXF1aXJlKFwiZmFzdC11cmlcIik7XG51cmkuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91cmlcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSB1cmk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcnVsZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlXCIpO1xuY29uc3QgY29kZWdlbl8yID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZXNvbHZlXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCAkZGF0YVJlZlNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvZGF0YS5qc29uXCIpO1xuY29uc3QgdXJpXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3VyaVwiKTtcbmNvbnN0IGRlZmF1bHRSZWdFeHAgPSAoc3RyLCBmbGFncykgPT4gbmV3IFJlZ0V4cChzdHIsIGZsYWdzKTtcbmRlZmF1bHRSZWdFeHAuY29kZSA9IFwibmV3IFJlZ0V4cFwiO1xuY29uc3QgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFtcInJlbW92ZUFkZGl0aW9uYWxcIiwgXCJ1c2VEZWZhdWx0c1wiLCBcImNvZXJjZVR5cGVzXCJdO1xuY29uc3QgRVhUX1NDT1BFX05BTUVTID0gbmV3IFNldChbXG4gICAgXCJ2YWxpZGF0ZVwiLFxuICAgIFwic2VyaWFsaXplXCIsXG4gICAgXCJwYXJzZVwiLFxuICAgIFwid3JhcHBlclwiLFxuICAgIFwicm9vdFwiLFxuICAgIFwic2NoZW1hXCIsXG4gICAgXCJrZXl3b3JkXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJmb3JtYXRzXCIsXG4gICAgXCJ2YWxpZGF0ZSRkYXRhXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJvYmpcIixcbiAgICBcIkVycm9yXCIsXG5dKTtcbmNvbnN0IHJlbW92ZWRPcHRpb25zID0ge1xuICAgIGVycm9yRGF0YVBhdGg6IFwiXCIsXG4gICAgZm9ybWF0OiBcImB2YWxpZGF0ZUZvcm1hdHM6IGZhbHNlYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG51bGxhYmxlOiAnXCJudWxsYWJsZVwiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxcbiAgICBqc29uUG9pbnRlcnM6IFwiRGVwcmVjYXRlZCBqc1Byb3BlcnR5U3ludGF4IGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgZXh0ZW5kUmVmczogXCJEZXByZWNhdGVkIGlnbm9yZUtleXdvcmRzV2l0aFJlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG1pc3NpbmdSZWZzOiBcIlBhc3MgZW1wdHkgc2NoZW1hIHdpdGggJGlkIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgdG8gYWp2LmFkZFNjaGVtYS5cIixcbiAgICBwcm9jZXNzQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7cHJvY2VzczogKGNvZGUsIHNjaGVtYUVudjogb2JqZWN0KSA9PiBzdHJpbmd9YFwiLFxuICAgIHNvdXJjZUNvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3NvdXJjZTogdHJ1ZX1gXCIsXG4gICAgc3RyaWN0RGVmYXVsdHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgc3RyaWN0S2V5d29yZHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgdW5pcXVlSXRlbXM6ICdcInVuaXF1ZUl0ZW1zXCIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsXG4gICAgdW5rbm93bkZvcm1hdHM6IFwiRGlzYWJsZSBzdHJpY3QgbW9kZSBvciBwYXNzIGB0cnVlYCB0byBgYWp2LmFkZEZvcm1hdGAgKG9yIGBmb3JtYXRzYCBvcHRpb24pLlwiLFxuICAgIGNhY2hlOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBzZXJpYWxpemU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIGFqdkVycm9yczogXCJJdCBpcyBkZWZhdWx0IG5vdy5cIixcbn07XG5jb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVLZXl3b3Jkc1dpdGhSZWY6IFwiXCIsXG4gICAganNQcm9wZXJ0eVN5bnRheDogXCJcIixcbiAgICB1bmljb2RlOiAnXCJtaW5MZW5ndGhcIi9cIm1heExlbmd0aFwiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0LicsXG59O1xuY29uc3QgTUFYX0VYUFJFU1NJT04gPSAyMDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVxdWlyZWRPcHRpb25zKG8pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdCwgX3UsIF92LCBfdywgX3gsIF95LCBfeiwgXzA7XG4gICAgY29uc3QgcyA9IG8uc3RyaWN0O1xuICAgIGNvbnN0IF9vcHR6ID0gKF9hID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemU7XG4gICAgY29uc3Qgb3B0aW1pemUgPSBfb3B0eiA9PT0gdHJ1ZSB8fCBfb3B0eiA9PT0gdW5kZWZpbmVkID8gMSA6IF9vcHR6IHx8IDA7XG4gICAgY29uc3QgcmVnRXhwID0gKF9jID0gKF9iID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVnRXhwKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0UmVnRXhwO1xuICAgIGNvbnN0IHVyaVJlc29sdmVyID0gKF9kID0gby51cmlSZXNvbHZlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdXJpXzEuZGVmYXVsdDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdHJpY3RTY2hlbWE6IChfZiA9IChfZSA9IG8uc3RyaWN0U2NoZW1hKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBzKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB0cnVlLFxuICAgICAgICBzdHJpY3ROdW1iZXJzOiAoX2ggPSAoX2cgPSBvLnN0cmljdE51bWJlcnMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IHMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHRydWUsXG4gICAgICAgIHN0cmljdFR5cGVzOiAoX2sgPSAoX2ogPSBvLnN0cmljdFR5cGVzKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RUdXBsZXM6IChfbSA9IChfbCA9IG8uc3RyaWN0VHVwbGVzKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiBzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RSZXF1aXJlZDogKF9wID0gKF9vID0gby5zdHJpY3RSZXF1aXJlZCkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogcykgIT09IG51bGwgJiYgX3AgIT09IHZvaWQgMCA/IF9wIDogZmFsc2UsXG4gICAgICAgIGNvZGU6IG8uY29kZSA/IHsgLi4uby5jb2RlLCBvcHRpbWl6ZSwgcmVnRXhwIH0gOiB7IG9wdGltaXplLCByZWdFeHAgfSxcbiAgICAgICAgbG9vcFJlcXVpcmVkOiAoX3EgPSBvLmxvb3BSZXF1aXJlZCkgIT09IG51bGwgJiYgX3EgIT09IHZvaWQgMCA/IF9xIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIGxvb3BFbnVtOiAoX3IgPSBvLmxvb3BFbnVtKSAhPT0gbnVsbCAmJiBfciAhPT0gdm9pZCAwID8gX3IgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbWV0YTogKF9zID0gby5tZXRhKSAhPT0gbnVsbCAmJiBfcyAhPT0gdm9pZCAwID8gX3MgOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogKF90ID0gby5tZXNzYWdlcykgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogdHJ1ZSxcbiAgICAgICAgaW5saW5lUmVmczogKF91ID0gby5pbmxpbmVSZWZzKSAhPT0gbnVsbCAmJiBfdSAhPT0gdm9pZCAwID8gX3UgOiB0cnVlLFxuICAgICAgICBzY2hlbWFJZDogKF92ID0gby5zY2hlbWFJZCkgIT09IG51bGwgJiYgX3YgIT09IHZvaWQgMCA/IF92IDogXCIkaWRcIixcbiAgICAgICAgYWRkVXNlZFNjaGVtYTogKF93ID0gby5hZGRVc2VkU2NoZW1hKSAhPT0gbnVsbCAmJiBfdyAhPT0gdm9pZCAwID8gX3cgOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogKF94ID0gby52YWxpZGF0ZVNjaGVtYSkgIT09IG51bGwgJiYgX3ggIT09IHZvaWQgMCA/IF94IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiAoX3kgPSBvLnZhbGlkYXRlRm9ybWF0cykgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogdHJ1ZSxcbiAgICAgICAgdW5pY29kZVJlZ0V4cDogKF96ID0gby51bmljb2RlUmVnRXhwKSAhPT0gbnVsbCAmJiBfeiAhPT0gdm9pZCAwID8gX3ogOiB0cnVlLFxuICAgICAgICBpbnQzMnJhbmdlOiAoXzAgPSBvLmludDMycmFuZ2UpICE9PSBudWxsICYmIF8wICE9PSB2b2lkIDAgPyBfMCA6IHRydWUsXG4gICAgICAgIHVyaVJlc29sdmVyOiB1cmlSZXNvbHZlcixcbiAgICB9O1xufVxuY2xhc3MgQWp2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0ge307XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmZvcm1hdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBvcHRzID0gdGhpcy5vcHRzID0geyAuLi5vcHRzLCAuLi5yZXF1aXJlZE9wdGlvbnMob3B0cykgfTtcbiAgICAgICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IG5ldyBjb2RlZ2VuXzIuVmFsdWVTY29wZSh7IHNjb3BlOiB7fSwgcHJlZml4ZXM6IEVYVF9TQ09QRV9OQU1FUywgZXM1LCBsaW5lcyB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIob3B0cy5sb2dnZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXRPcHQgPSBvcHRzLnZhbGlkYXRlRm9ybWF0cztcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5SVUxFUyA9ICgwLCBydWxlc18xLmdldFJ1bGVzKSgpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCByZW1vdmVkT3B0aW9ucywgb3B0cywgXCJOT1QgU1VQUE9SVEVEXCIpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCBkZXByZWNhdGVkT3B0aW9ucywgb3B0cywgXCJERVBSRUNBVEVEXCIsIFwid2FyblwiKTtcbiAgICAgICAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAob3B0cy5mb3JtYXRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEZvcm1hdHMuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEtleXdvcmRzLmNhbGwodGhpcywgb3B0cy5rZXl3b3Jkcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgICAgICAgYWRkSW5pdGlhbFNjaGVtYXMuY2FsbCh0aGlzKTtcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmb3JtYXRPcHQ7XG4gICAgfVxuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChcIiRhc3luY1wiKTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBjb25zdCB7ICRkYXRhLCBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBsZXQgX2RhdGFSZWZTY2hlbWEgPSAkZGF0YVJlZlNjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYUlkID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hID0geyAuLi4kZGF0YVJlZlNjaGVtYSB9O1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEuaWQgPSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgICAgICBkZWxldGUgX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhICYmICRkYXRhKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKF9kYXRhUmVmU2NoZW1hLCBfZGF0YVJlZlNjaGVtYVtzY2hlbWFJZF0sIGZhbHNlKTtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSBcIm9iamVjdFwiID8gbWV0YVtzY2hlbWFJZF0gfHwgbWV0YSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgLy8ga2V5LCByZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgZGF0YSAvLyB0byBiZSB2YWxpZGF0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmdldFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgaWYgKCF2KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gc2NoZW1hIHdpdGgga2V5IG9yIHJlZiBcIiR7c2NoZW1hS2V5UmVmfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5jb21waWxlKHNjaGVtYUtleVJlZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB2KGRhdGEpO1xuICAgICAgICBpZiAoIShcIiRhc3luY1wiIGluIHYpKVxuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB2LmVycm9ycztcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICBjb21waWxlKHNjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEpO1xuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICBjb21waWxlQXN5bmMoc2NoZW1hLCBtZXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmxvYWRTY2hlbWEgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2FkU2NoZW1hIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIHJldHVybiBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2hlbWEsIG1ldGEpO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiBydW5Db21waWxlQXN5bmMoX3NjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvYWRNZXRhU2NoZW1hLmNhbGwodGhpcywgX3NjaGVtYS4kc2NoZW1hKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShfc2NoZW1hLCBfbWV0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlIHx8IF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hKCRyZWYpIHtcbiAgICAgICAgICAgIGlmICgkcmVmICYmICF0aGlzLmdldFNjaGVtYSgkcmVmKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHsgJHJlZiB9LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgcmVmX2Vycm9yXzEuZGVmYXVsdCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWlzc2luZ1NjaGVtYS5jYWxsKHRoaXMsIGUubWlzc2luZ1NjaGVtYSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKHsgbWlzc2luZ1NjaGVtYTogcmVmLCBtaXNzaW5nUmVmIH0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnNbcmVmXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQW55U2NoZW1hICR7cmVmfSBpcyBsb2FkZWQgYnV0ICR7bWlzc2luZ1JlZn0gY2Fubm90IGJlIHJlc29sdmVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1pc3NpbmdTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBfc2NoZW1hID0gYXdhaXQgX2xvYWRTY2hlbWEuY2FsbCh0aGlzLCByZWYpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmc1tyZWZdKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKF9zY2hlbWEsIHJlZiwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2xvYWRTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgaWYgKHApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCAodGhpcy5fbG9hZGluZ1tyZWZdID0gbG9hZFNjaGVtYShyZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sb2FkaW5nW3JlZl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWRkcyBzY2hlbWEgdG8gdGhlIGluc3RhbmNlXG4gICAgYWRkU2NoZW1hKHNjaGVtYSwgLy8gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCB3aWxsIGJlIGlnbm9yZWRcbiAgICBrZXksIC8vIE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gICAgX21ldGEsIC8vIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLiBVc2VkIGludGVybmFsbHksIG9wdGlvbiB2YWxpZGF0ZVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgICkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaCBvZiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEoc2NoLCB1bmRlZmluZWQsIF9tZXRhLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGlkICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSAke3NjaGVtYUlkfSBtdXN0IGJlIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleSB8fCBpZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrVW5pcXVlKGtleSk7XG4gICAgICAgIHRoaXMuc2NoZW1hc1trZXldID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEsIGtleSwgX3ZhbGlkYXRlU2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBzY2hlbWEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgb3RoZXIgc2NoZW1hc1xuICAgIC8vIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gICAgYWRkTWV0YVNjaGVtYShzY2hlbWEsIGtleSwgLy8gc2NoZW1hIGtleVxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gICAgKSB7XG4gICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaGVtYSwga2V5LCB0cnVlLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gIFZhbGlkYXRlIHNjaGVtYSBhZ2FpbnN0IGl0cyBtZXRhLXNjaGVtYVxuICAgIHZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCAkc2NoZW1hO1xuICAgICAgICAkc2NoZW1hID0gc2NoZW1hLiRzY2hlbWE7XG4gICAgICAgIGlmICgkc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICRzY2hlbWEgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJHNjaGVtYSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgICRzY2hlbWEgPSAkc2NoZW1hIHx8IHRoaXMub3B0cy5kZWZhdWx0TWV0YSB8fCB0aGlzLmRlZmF1bHRNZXRhKCk7XG4gICAgICAgIGlmICghJHNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1ldGEtc2NoZW1hIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcInNjaGVtYSBpcyBpbnZhbGlkOiBcIiArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICAvLyBHZXQgY29tcGlsZWQgc2NoZW1hIGJ5IGBrZXlgIG9yIGByZWZgLlxuICAgIC8vIChga2V5YCB0aGF0IHdhcyBwYXNzZWQgdG8gYGFkZFNjaGVtYWAgb3IgZnVsbCBzY2hlbWEgcmVmZXJlbmNlIC0gYHNjaGVtYS4kaWRgIG9yIHJlc29sdmVkIGlkKVxuICAgIGdldFNjaGVtYShrZXlSZWYpIHtcbiAgICAgICAgbGV0IHNjaDtcbiAgICAgICAgd2hpbGUgKHR5cGVvZiAoc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywga2V5UmVmKSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGtleVJlZiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgICAgICBjb25zdCByb290ID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWE6IHt9LCBzY2hlbWFJZCB9KTtcbiAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwga2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghc2NoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucmVmc1trZXlSZWZdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2NoLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSk7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBjYWNoZWQgc2NoZW1hKHMpLlxuICAgIC8vIElmIG5vIHBhcmFtZXRlciBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBFdmVuIGlmIHNjaGVtYSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIHNjaGVtYXMgaXQgc3RpbGwgY2FuIGJlIHJlbW92ZWQgYXMgb3RoZXIgc2NoZW1hcyBoYXZlIGxvY2FsIHJlZmVyZW5jZXMuXG4gICAgcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICAgICAgICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlb2Ygc2NoZW1hS2V5UmVmKSB7XG4gICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gc2NoZW1hS2V5UmVmO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gc2NoZW1hS2V5UmVmW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoaWQpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVmc1tpZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYucmVtb3ZlU2NoZW1hOiBpbnZhbGlkIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhZGQgXCJ2b2NhYnVsYXJ5XCIgLSBhIGNvbGxlY3Rpb24gb2Yga2V5d29yZHNcbiAgICBhZGRWb2NhYnVsYXJ5KGRlZmluaXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRLZXl3b3JkKGt3ZE9yRGVmLCBkZWYgLy8gZGVwcmVjYXRlZFxuICAgICkge1xuICAgICAgICBsZXQga2V5d29yZDtcbiAgICAgICAgaWYgKHR5cGVvZiBrd2RPckRlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBrZXl3b3JkID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcInRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQsIHNlZSBkb2NzIGZvciBhZGRLZXl3b3JkXCIpO1xuICAgICAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJvYmplY3RcIiAmJiBkZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVmID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBrZXl3b3JkID0gZGVmLmtleXdvcmQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXl3b3JkKSAmJiAha2V5d29yZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRLZXl3b3Jkczoga2V5d29yZCBtdXN0IGJlIHN0cmluZyBvciBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGFkZEtleXdvcmRzIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tLZXl3b3JkLmNhbGwodGhpcywga2V5d29yZCwgZGVmKTtcbiAgICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrd2QpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGtleXdvcmRNZXRhc2NoZW1hLmNhbGwodGhpcywgZGVmKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWYuc2NoZW1hVHlwZSksXG4gICAgICAgIH07XG4gICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIGRlZmluaXRpb24udHlwZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gKGspID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uKVxuICAgICAgICAgICAgOiAoaykgPT4gZGVmaW5pdGlvbi50eXBlLmZvckVhY2goKHQpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uLCB0KSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLlJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgPyBydWxlLmRlZmluaXRpb24gOiAhIXJ1bGU7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBrZXl3b3JkXG4gICAgcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIC8vIFRPRE8gcmV0dXJuIHR5cGUgc2hvdWxkIGJlIEFqdlxuICAgICAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICAgICBkZWxldGUgUlVMRVMua2V5d29yZHNba2V5d29yZF07XG4gICAgICAgIGRlbGV0ZSBSVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBncm91cC5ydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHJ1bGUua2V5d29yZCA9PT0ga2V5d29yZCk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGdyb3VwLnJ1bGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQWRkIGZvcm1hdFxuICAgIGFkZEZvcm1hdChuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGZvcm1hdCA9IG5ldyBSZWdFeHAoZm9ybWF0KTtcbiAgICAgICAgdGhpcy5mb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXJyb3JzVGV4dChlcnJvcnMgPSB0aGlzLmVycm9ycywgLy8gb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB7IHNlcGFyYXRvciA9IFwiLCBcIiwgZGF0YVZhciA9IFwiZGF0YVwiIH0gPSB7fSAvLyBvcHRpb25hbCBvcHRpb25zIHdpdGggcHJvcGVydGllcyBgc2VwYXJhdG9yYCBhbmQgYGRhdGFWYXJgXG4gICAgKSB7XG4gICAgICAgIGlmICghZXJyb3JzIHx8IGVycm9ycy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gXCJObyBlcnJvcnNcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yc1xuICAgICAgICAgICAgLm1hcCgoZSkgPT4gYCR7ZGF0YVZhcn0ke2UuaW5zdGFuY2VQYXRofSAke2UubWVzc2FnZX1gKVxuICAgICAgICAgICAgLnJlZHVjZSgodGV4dCwgbXNnKSA9PiB0ZXh0ICsgc2VwYXJhdG9yICsgbXNnKTtcbiAgICB9XG4gICAgJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5SVUxFUy5hbGw7XG4gICAgICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICAgICAgZm9yIChjb25zdCBqc29uUG9pbnRlciBvZiBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIikuc2xpY2UoMSk7IC8vIGZpcnN0IHNlZ21lbnQgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBsZXQga2V5d29yZHMgPSBtZXRhU2NoZW1hO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpXG4gICAgICAgICAgICAgICAga2V5d29yZHMgPSBrZXl3b3Jkc1tzZWddO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyAkZGF0YSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGtleXdvcmRzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCRkYXRhICYmIHNjaGVtYSlcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHNba2V5XSA9IHNjaGVtYU9yRGF0YShzY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXRhU2NoZW1hO1xuICAgIH1cbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzY2hlbWFzLCByZWdleCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICBpZiAoIXJlZ2V4IHx8IHJlZ2V4LnRlc3Qoa2V5UmVmKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoICYmICFzY2gubWV0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9hZGRTY2hlbWEoc2NoZW1hLCBtZXRhLCBiYXNlSWQsIHZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hLCBhZGRTY2hlbWEgPSB0aGlzLm9wdHMuYWRkVXNlZFNjaGVtYSkge1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5qdGQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2hlbWEgbXVzdCBiZSBvYmplY3Qgb3IgYm9vbGVhblwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2NoID0gdGhpcy5fY2FjaGUuZ2V0KHNjaGVtYSk7XG4gICAgICAgIGlmIChzY2ggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkIHx8IGJhc2VJZCk7XG4gICAgICAgIGNvbnN0IGxvY2FsUmVmcyA9IHJlc29sdmVfMS5nZXRTY2hlbWFSZWZzLmNhbGwodGhpcywgc2NoZW1hLCBiYXNlSWQpO1xuICAgICAgICBzY2ggPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIG1ldGEsIGJhc2VJZCwgbG9jYWxSZWZzIH0pO1xuICAgICAgICB0aGlzLl9jYWNoZS5zZXQoc2NoLnNjaGVtYSwgc2NoKTtcbiAgICAgICAgaWYgKGFkZFNjaGVtYSAmJiAhYmFzZUlkLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGF0bSBpdCBpcyBhbGxvd2VkIHRvIG92ZXJ3cml0ZSBzY2hlbWFzIHdpdGhvdXQgaWQgKGluc3RlYWQgb2Ygbm90IGFkZGluZyB0aGVtKVxuICAgICAgICAgICAgaWYgKGJhc2VJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShiYXNlSWQpO1xuICAgICAgICAgICAgdGhpcy5yZWZzW2Jhc2VJZF0gPSBzY2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKVxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBfY2hlY2tVbmlxdWUoaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NoZW1hc1tpZF0gfHwgdGhpcy5yZWZzW2lkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgd2l0aCBrZXkgb3IgaWQgXCIke2lkfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSB7XG4gICAgICAgIGlmIChzY2gubWV0YSlcbiAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghc2NoLnZhbGlkYXRlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlO1xuICAgIH1cbiAgICBfY29tcGlsZU1ldGFTY2hlbWEoc2NoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRzID0gdGhpcy5vcHRzO1xuICAgICAgICB0aGlzLm9wdHMgPSB0aGlzLl9tZXRhT3B0cztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMub3B0cyA9IGN1cnJlbnRPcHRzO1xuICAgICAgICB9XG4gICAgfVxufVxuQWp2LlZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0O1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IHJlZl9lcnJvcl8xLmRlZmF1bHQ7XG5leHBvcnRzLmRlZmF1bHQgPSBBanY7XG5mdW5jdGlvbiBjaGVja09wdGlvbnMoY2hlY2tPcHRzLCBvcHRpb25zLCBtc2csIGxvZyA9IFwiZXJyb3JcIikge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoZWNrT3B0cykge1xuICAgICAgICBjb25zdCBvcHQgPSBrZXk7XG4gICAgICAgIGlmIChvcHQgaW4gb3B0aW9ucylcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyW2xvZ10oYCR7bXNnfTogb3B0aW9uICR7a2V5fS4gJHtjaGVja09wdHNbb3B0XX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTY2hFbnYoa2V5UmVmKSB7XG4gICAga2V5UmVmID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoa2V5UmVmKTsgLy8gVE9ETyB0ZXN0cyBmYWlsIHdpdGhvdXQgdGhpcyBsaW5lXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hc1trZXlSZWZdIHx8IHRoaXMucmVmc1trZXlSZWZdO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbFNjaGVtYXMoKSB7XG4gICAgY29uc3Qgb3B0c1NjaGVtYXMgPSB0aGlzLm9wdHMuc2NoZW1hcztcbiAgICBpZiAoIW9wdHNTY2hlbWFzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0c1NjaGVtYXMpKVxuICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hcyk7XG4gICAgZWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRzU2NoZW1hcylcbiAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKG9wdHNTY2hlbWFzW2tleV0sIGtleSk7XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cygpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5vcHRzLmZvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5vcHRzLmZvcm1hdHNbbmFtZV07XG4gICAgICAgIGlmIChmb3JtYXQpXG4gICAgICAgICAgICB0aGlzLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxLZXl3b3JkcyhkZWZzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmcykpIHtcbiAgICAgICAgdGhpcy5hZGRWb2NhYnVsYXJ5KGRlZnMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLndhcm4oXCJrZXl3b3JkcyBvcHRpb24gYXMgbWFwIGlzIGRlcHJlY2F0ZWQsIHBhc3MgYXJyYXlcIik7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIGRlZnMpIHtcbiAgICAgICAgY29uc3QgZGVmID0gZGVmc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKCFkZWYua2V5d29yZClcbiAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0TWV0YVNjaGVtYU9wdGlvbnMoKSB7XG4gICAgY29uc3QgbWV0YU9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIE1FVEFfSUdOT1JFX09QVElPTlMpXG4gICAgICAgIGRlbGV0ZSBtZXRhT3B0c1tvcHRdO1xuICAgIHJldHVybiBtZXRhT3B0cztcbn1cbmNvbnN0IG5vTG9ncyA9IHsgbG9nKCkgeyB9LCB3YXJuKCkgeyB9LCBlcnJvcigpIHsgfSB9O1xuZnVuY3Rpb24gZ2V0TG9nZ2VyKGxvZ2dlcikge1xuICAgIGlmIChsb2dnZXIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbm9Mb2dzO1xuICAgIGlmIChsb2dnZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGNvbnNvbGU7XG4gICAgaWYgKGxvZ2dlci5sb2cgJiYgbG9nZ2VyLndhcm4gJiYgbG9nZ2VyLmVycm9yKVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIHRocm93IG5ldyBFcnJvcihcImxvZ2dlciBtdXN0IGltcGxlbWVudCBsb2csIHdhcm4gYW5kIGVycm9yIG1ldGhvZHNcIik7XG59XG5jb25zdCBLRVlXT1JEX05BTUUgPSAvXlthLXpfJF1bYS16MC05XyQ6LV0qJC9pO1xuZnVuY3Rpb24gY2hlY2tLZXl3b3JkKGtleXdvcmQsIGRlZikge1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgKGt3ZCkgPT4ge1xuICAgICAgICBpZiAoUlVMRVMua2V5d29yZHNba3dkXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaXMgYWxyZWFkeSBkZWZpbmVkYCk7XG4gICAgICAgIGlmICghS0VZV09SRF9OQU1FLnRlc3Qoa3dkKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaGFzIGludmFsaWQgbmFtZWApO1xuICAgIH0pO1xuICAgIGlmICghZGVmKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGRlZi4kZGF0YSAmJiAhKFwiY29kZVwiIGluIGRlZiB8fCBcInZhbGlkYXRlXCIgaW4gZGVmKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRkYXRhIGtleXdvcmQgbXVzdCBoYXZlIFwiY29kZVwiIG9yIFwidmFsaWRhdGVcIiBmdW5jdGlvbicpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZFJ1bGUoa2V5d29yZCwgZGVmaW5pdGlvbiwgZGF0YVR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcG9zdCA9IGRlZmluaXRpb24gPT09IG51bGwgfHwgZGVmaW5pdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVmaW5pdGlvbi5wb3N0O1xuICAgIGlmIChkYXRhVHlwZSAmJiBwb3N0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgd2l0aCBcInBvc3RcIiBmbGFnIGNhbm5vdCBoYXZlIFwidHlwZVwiJyk7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICBsZXQgcnVsZUdyb3VwID0gcG9zdCA/IFJVTEVTLnBvc3QgOiBSVUxFUy5ydWxlcy5maW5kKCh7IHR5cGU6IHQgfSkgPT4gdCA9PT0gZGF0YVR5cGUpO1xuICAgIGlmICghcnVsZUdyb3VwKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgICBSVUxFUy5ydWxlcy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuICAgIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdID0gdHJ1ZTtcbiAgICBpZiAoIWRlZmluaXRpb24pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBrZXl3b3JkLFxuICAgICAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgICAgICAgdHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnNjaGVtYVR5cGUpLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKGRlZmluaXRpb24uYmVmb3JlKVxuICAgICAgICBhZGRCZWZvcmVSdWxlLmNhbGwodGhpcywgcnVsZUdyb3VwLCBydWxlLCBkZWZpbml0aW9uLmJlZm9yZSk7XG4gICAgZWxzZVxuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5hbGxba2V5d29yZF0gPSBydWxlO1xuICAgIChfYSA9IGRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2goKGt3ZCkgPT4gdGhpcy5hZGRLZXl3b3JkKGt3ZCkpO1xufVxuZnVuY3Rpb24gYWRkQmVmb3JlUnVsZShydWxlR3JvdXAsIHJ1bGUsIGJlZm9yZSkge1xuICAgIGNvbnN0IGkgPSBydWxlR3JvdXAucnVsZXMuZmluZEluZGV4KChfcnVsZSkgPT4gX3J1bGUua2V5d29yZCA9PT0gYmVmb3JlKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5zcGxpY2UoaSwgMCwgcnVsZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcnVsZSAke2JlZm9yZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBrZXl3b3JkTWV0YXNjaGVtYShkZWYpIHtcbiAgICBsZXQgeyBtZXRhU2NoZW1hIH0gPSBkZWY7XG4gICAgaWYgKG1ldGFTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgdGhpcy5vcHRzLiRkYXRhKVxuICAgICAgICBtZXRhU2NoZW1hID0gc2NoZW1hT3JEYXRhKG1ldGFTY2hlbWEpO1xuICAgIGRlZi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbn1cbmNvbnN0ICRkYXRhUmVmID0ge1xuICAgICRyZWY6IFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jXCIsXG59O1xuZnVuY3Rpb24gc2NoZW1hT3JEYXRhKHNjaGVtYSkge1xuICAgIHJldHVybiB7IGFueU9mOiBbc2NoZW1hLCAkZGF0YVJlZl0gfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlkXCIsXG4gICAgY29kZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOT1QgU1VQUE9SVEVEOiBrZXl3b3JkIFwiaWRcIiwgdXNlIFwiJGlkXCIgZm9yIHNjaGVtYSBJRCcpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FsbFJlZiA9IGV4cG9ydHMuZ2V0VmFsaWRhdGUgPSB2b2lkIDA7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIiRyZWZcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWE6ICRyZWYsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgYmFzZUlkLCBzY2hlbWFFbnY6IGVudiwgdmFsaWRhdGVOYW1lLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICAgICAgY29uc3QgeyByb290IH0gPSBlbnY7XG4gICAgICAgIGlmICgoJHJlZiA9PT0gXCIjXCIgfHwgJHJlZiA9PT0gXCIjL1wiKSAmJiBiYXNlSWQgPT09IHJvb3QuYmFzZUlkKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxSb290UmVmKCk7XG4gICAgICAgIGNvbnN0IHNjaE9yRW52ID0gY29tcGlsZV8xLnJlc29sdmVSZWYuY2FsbChzZWxmLCByb290LCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyByZWZfZXJyb3JfMS5kZWZhdWx0KGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgJHJlZik7XG4gICAgICAgIGlmIChzY2hPckVudiBpbnN0YW5jZW9mIGNvbXBpbGVfMS5TY2hlbWFFbnYpXG4gICAgICAgICAgICByZXR1cm4gY2FsbFZhbGlkYXRlKHNjaE9yRW52KTtcbiAgICAgICAgcmV0dXJuIGlubGluZVJlZlNjaGVtYShzY2hPckVudik7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxSb290UmVmKCkge1xuICAgICAgICAgICAgaWYgKGVudiA9PT0gcm9vdClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbFJlZihjeHQsIHZhbGlkYXRlTmFtZSwgZW52LCBlbnYuJGFzeW5jKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3ROYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJyb290XCIsIHsgcmVmOiByb290IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCAoMCwgY29kZWdlbl8xLl8pIGAke3Jvb3ROYW1lfS52YWxpZGF0ZWAsIHJvb3QsIHJvb3QuJGFzeW5jKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoc2NoKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpO1xuICAgICAgICAgICAgY2FsbFJlZihjeHQsIHYsIHNjaCwgc2NoLiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW5saW5lUmVmU2NoZW1hKHNjaCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoTmFtZSA9IGdlbi5zY29wZVZhbHVlKFwic2NoZW1hXCIsIG9wdHMuY29kZS5zb3VyY2UgPT09IHRydWUgPyB7IHJlZjogc2NoLCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoc2NoKSB9IDogeyByZWY6IHNjaCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlczogW10sXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaE5hbWUsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogJHJlZixcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIHJldHVybiBzY2gudmFsaWRhdGVcbiAgICAgICAgPyBnZW4uc2NvcGVWYWx1ZShcInZhbGlkYXRlXCIsIHsgcmVmOiBzY2gudmFsaWRhdGUgfSlcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2dlbi5zY29wZVZhbHVlKFwid3JhcHBlclwiLCB7IHJlZjogc2NoIH0pfS52YWxpZGF0ZWA7XG59XG5leHBvcnRzLmdldFZhbGlkYXRlID0gZ2V0VmFsaWRhdGU7XG5mdW5jdGlvbiBjYWxsUmVmKGN4dCwgdiwgc2NoLCAkYXN5bmMpIHtcbiAgICBjb25zdCB7IGdlbiwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGFsbEVycm9ycywgc2NoZW1hRW52OiBlbnYsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IHBhc3NDeHQgPSBvcHRzLnBhc3NDb250ZXh0ID8gbmFtZXNfMS5kZWZhdWx0LnRoaXMgOiBjb2RlZ2VuXzEubmlsO1xuICAgIGlmICgkYXN5bmMpXG4gICAgICAgIGNhbGxBc3luY1JlZigpO1xuICAgIGVsc2VcbiAgICAgICAgY2FsbFN5bmNSZWYoKTtcbiAgICBmdW5jdGlvbiBjYWxsQXN5bmNSZWYoKSB7XG4gICAgICAgIGlmICghZW52LiRhc3luYylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLnRyeSgoKSA9PiB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCAkeygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2LCBwYXNzQ3h0KX1gKTtcbiAgICAgICAgICAgIGFkZEV2YWx1YXRlZEZyb20odik7IC8vIFRPRE8gd2lsbCBub3Qgd29yayB3aXRoIGFzeW5jLCBpdCBoYXMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgcmVzdWx0XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAhKCR7ZX0gaW5zdGFuY2VvZiAke2l0LlZhbGlkYXRpb25FcnJvcn0pYCwgKCkgPT4gZ2VuLnRocm93KGUpKTtcbiAgICAgICAgICAgIGFkZEVycm9yc0Zyb20oZSk7XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsU3luY1JlZigpIHtcbiAgICAgICAgY3h0LnJlc3VsdCgoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCksICgpID0+IGFkZEV2YWx1YXRlZEZyb20odiksICgpID0+IGFkZEVycm9yc0Zyb20odikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFcnJvcnNGcm9tKHNvdXJjZSkge1xuICAgICAgICBjb25zdCBlcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmVycm9yc2A7XG4gICAgICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApOyAvLyBUT0RPIHRhZ2dlZFxuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFdmFsdWF0ZWRGcm9tKHNvdXJjZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoRXZhbHVhdGVkID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnZhbGlkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXZhbHVhdGVkO1xuICAgICAgICAvLyBUT0RPIHJlZmFjdG9yXG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHNjaEV2YWx1YXRlZC5wcm9wcywgaXQucHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQucHJvcHNgKTtcbiAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHByb3BzLCBpdC5wcm9wcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5pdGVtcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNJdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQuaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaEV2YWx1YXRlZC5pdGVtcywgaXQuaXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2VuLnZhcihcIml0ZW1zXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQuaXRlbXNgKTtcbiAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIGl0ZW1zLCBpdC5pdGVtcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5jYWxsUmVmID0gY2FsbFJlZjtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaWRfMSA9IHJlcXVpcmUoXCIuL2lkXCIpO1xuY29uc3QgcmVmXzEgPSByZXF1aXJlKFwiLi9yZWZcIik7XG5jb25zdCBjb3JlID0gW1xuICAgIFwiJHNjaGVtYVwiLFxuICAgIFwiJGlkXCIsXG4gICAgXCIkZGVmc1wiLFxuICAgIFwiJHZvY2FidWxhcnlcIixcbiAgICB7IGtleXdvcmQ6IFwiJGNvbW1lbnRcIiB9LFxuICAgIFwiZGVmaW5pdGlvbnNcIixcbiAgICBpZF8xLmRlZmF1bHQsXG4gICAgcmVmXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBjb3JlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBtYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBtaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7S1dEc1trZXl3b3JkXS5mYWlsfSAke3NjaGVtYUNvZGV9IHx8IGlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdE51bWJlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlIG11bHRpcGxlIG9mICR7c2NoZW1hQ29kZX1gLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bXVsdGlwbGVPZjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm11bHRpcGxlT2ZcIixcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8vIGNvbnN0IGJkdCA9IGJhZCREYXRhVHlwZShzY2hlbWFDb2RlLCA8c3RyaW5nPmRlZi5zY2hlbWFUeXBlLCAkZGF0YSlcbiAgICAgICAgY29uc3QgcHJlYyA9IGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbjtcbiAgICAgICAgY29uc3QgcmVzID0gZ2VuLmxldChcInJlc1wiKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHByZWNcbiAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgTWF0aC5hYnMoTWF0aC5yb3VuZCgke3Jlc30pIC0gJHtyZXN9KSA+IDFlLSR7cHJlY31gXG4gICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVzfSAhPT0gcGFyc2VJbnQoJHtyZXN9KWA7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgKCR7c2NoZW1hQ29kZX0gPT09IDAgfHwgKCR7cmVzfSA9ICR7ZGF0YX0vJHtzY2hlbWFDb2RlfSwgJHtpbnZhbGlkfSkpYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBsZU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzIC0gcHVueWNvZGUudWNzMi5kZWNvZGVcbmZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gICAgY29uc3QgbGVuID0gc3RyLmxlbmd0aDtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBsZXQgdmFsdWU7XG4gICAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgICAgICBsZW5ndGgrKztcbiAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MrKyk7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAweGQ4MDAgJiYgdmFsdWUgPD0gMHhkYmZmICYmIHBvcyA8IGxlbikge1xuICAgICAgICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICAgICAgICBpZiAoKHZhbHVlICYgMHhmYzAwKSA9PT0gMHhkYzAwKVxuICAgICAgICAgICAgICAgIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHVjczJsZW5ndGg7XG51Y3MybGVuZ3RoLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aFwiKS5kZWZhdWx0Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVjczJsZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgdWNzMmxlbmd0aF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvdWNzMmxlbmd0aFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBjaGFyYWN0ZXJzYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4TGVuZ3RoXCIsIFwibWluTGVuZ3RoXCJdLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhMZW5ndGhcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjb25zdCBsZW4gPSBpdC5vcHRzLnVuaWNvZGUgPT09IGZhbHNlID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGN4dC5nZW4sIHVjczJsZW5ndGhfMS5kZWZhdWx0KX0oJHtkYXRhfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdExlbmd0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIHBhdHRlcm4gXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGF0dGVybjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5cIixcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHUgPSBpdC5vcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgICAgIGlmICgkZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgeyByZWdFeHAgfSA9IGl0Lm9wdHMuY29kZTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cENvZGUgPSByZWdFeHAuY29kZSA9PT0gXCJuZXcgUmVnRXhwXCIgPyAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYCA6ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCByZWdFeHApO1xuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgICAgICBnZW4udHJ5KCgpID0+IGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwQ29kZX0oJHtzY2hlbWFDb2RlfSwgJHt1fSkudGVzdCgke2RhdGF9KWApLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9ICgwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBzY2hlbWEpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHtyZWdFeHB9LnRlc3QoJHtkYXRhfSlgKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4UHJvcGVydGllc1wiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gcHJvcGVydGllc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heFByb3BlcnRpZXNcIiwgXCJtaW5Qcm9wZXJ0aWVzXCJdLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5rZXlzKCR7ZGF0YX0pLmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJyR7bWlzc2luZ1Byb3BlcnR5fSdgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHttaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInJlcXVpcmVkXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgc2NoZW1hQ29kZSwgZGF0YSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gb3B0cy5sb29wUmVxdWlyZWQ7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICBhbGxFcnJvcnNNb2RlKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGV4aXRPbkVycm9yTW9kZSgpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RSZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBjeHQucGFyZW50U2NoZW1hLnByb3BlcnRpZXM7XG4gICAgICAgICAgICBjb25zdCB7IGRlZmluZWRQcm9wZXJ0aWVzIH0gPSBjeHQuaXQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVpcmVkS2V5IG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmICgocHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzW3JlcXVpcmVkS2V5XSkgPT09IHVuZGVmaW5lZCAmJiAhZGVmaW5lZFByb3BlcnRpZXMuaGFzKHJlcXVpcmVkS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGByZXF1aXJlZCBwcm9wZXJ0eSBcIiR7cmVxdWlyZWRLZXl9XCIgaXMgbm90IGRlZmluZWQgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFJlcXVpcmVkKWA7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWxsRXJyb3JzTW9kZSgpIHtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEoY29kZWdlbl8xLm5pbCwgbG9vcEFsbFJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleGl0T25FcnJvck1vZGUoKSB7XG4gICAgICAgICAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCAoKSA9PiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSk7XG4gICAgICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgc2NoZW1hLCBtaXNzaW5nKSk7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BBbGxSZXF1aXJlZCgpIHtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInByb3BcIiwgc2NoZW1hQ29kZSwgKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBwcm9wIH0pO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLm5vUHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcFVudGlsTWlzc2luZyhtaXNzaW5nLCB2YWxpZCkge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogbWlzc2luZyB9KTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihtaXNzaW5nLCBzY2hlbWFDb2RlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBtaXNzaW5nLCBvcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWlyZWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBpdGVtc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heEl0ZW1zXCIsIFwibWluSXRlbXNcIl0sXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy84ODlcbmNvbnN0IGVxdWFsID0gcmVxdWlyZShcImZhc3QtZGVlcC1lcXVhbFwiKTtcbmVxdWFsLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvZXF1YWxcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSBlcXVhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVxdWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgJHtqfSBhbmQgJHtpfSBhcmUgaWRlbnRpY2FsKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtpOiAke2l9LCBqOiAke2p9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJib29sZWFuXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiAhc2NoZW1hKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGVzID0gcGFyZW50U2NoZW1hLml0ZW1zID8gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKHBhcmVudFNjaGVtYS5pdGVtcykgOiBbXTtcbiAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlVW5pcXVlSXRlbXMsICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IGZhbHNlYCk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlVW5pcXVlSXRlbXMoKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ2VuLmxldChcImlcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnZW4ubGV0KFwialwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpLCBqIH0pO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpfSA+IDFgLCAoKSA9PiAoY2FuT3B0aW1pemUoKSA/IGxvb3BOIDogbG9vcE4yKShpLCBqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVR5cGVzLmxlbmd0aCA+IDAgJiYgIWl0ZW1UeXBlcy5zb21lKCh0KSA9PiB0ID09PSBcIm9iamVjdFwiIHx8IHQgPT09IFwiYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4oaSwgaikge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdlbi5uYW1lKFwiaXRlbVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHdyb25nVHlwZSA9ICgwLCBkYXRhVHlwZV8xLmNoZWNrRGF0YVR5cGVzKShpdGVtVHlwZXMsIGl0ZW0sIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMS5EYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZ2VuLmNvbnN0KFwiaW5kaWNlc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgICAgICAgICAgZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4ubGV0KGl0ZW0sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBjb250aW51ZWApO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2l0ZW19ID09IFwic3RyaW5nXCJgLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0ZW19ICs9IFwiX1wiYCk7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpbmRpY2VzfVske2l0ZW19XSA9PSBcIm51bWJlclwiYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGosICgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV0gPSAke2l9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTjIoaSwgaikge1xuICAgICAgICAgICAgY29uc3QgZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCk7XG4gICAgICAgICAgICBjb25zdCBvdXRlciA9IGdlbi5uYW1lKFwib3V0ZXJcIik7XG4gICAgICAgICAgICBnZW4ubGFiZWwob3V0ZXIpLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgJHtqfSA9ICR7aX07ICR7an0tLTtgLCAoKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcWx9KCR7ZGF0YX1bJHtpfV0sICR7ZGF0YX1bJHtqfV0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhayhvdXRlcik7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gY29uc3RhbnRcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZTogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnN0XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWFDb2RlLCBzY2hlbWEgfSA9IGN4dDtcbiAgICAgICAgaWYgKCRkYXRhIHx8IChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KX0oJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfSAhPT0gJHtkYXRhfWApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1wiLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWxsb3dlZFZhbHVlczogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImVudW1cIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVudW0gbXVzdCBoYXZlIG5vbi1lbXB0eSBhcnJheVwiKTtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gaXQub3B0cy5sb29wRW51bTtcbiAgICAgICAgbGV0IGVxbDtcbiAgICAgICAgY29uc3QgZ2V0RXFsID0gKCkgPT4gKGVxbCAhPT0gbnVsbCAmJiBlcWwgIT09IHZvaWQgMCA/IGVxbCA6IChlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KSkpO1xuICAgICAgICBsZXQgdmFsaWQ7XG4gICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCBsb29wRW51bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IHZTY2hlbWEgPSBnZW4uY29uc3QoXCJ2U2NoZW1hXCIsIHNjaGVtYUNvZGUpO1xuICAgICAgICAgICAgdmFsaWQgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5zY2hlbWEubWFwKChfeCwgaSkgPT4gZXF1YWxDb2RlKHZTY2hlbWEsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiBsb29wRW51bSgpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInZcIiwgc2NoZW1hQ29kZSwgKHYpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3Z9KWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBlcXVhbENvZGUodlNjaGVtYSwgaSkge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2ldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzY2ggPT09IFwib2JqZWN0XCIgJiYgc2NoICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3ZTY2hlbWF9WyR7aX1dKWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09ICR7c2NofWA7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudW0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGxpbWl0TnVtYmVyXzEgPSByZXF1aXJlKFwiLi9saW1pdE51bWJlclwiKTtcbmNvbnN0IG11bHRpcGxlT2ZfMSA9IHJlcXVpcmUoXCIuL211bHRpcGxlT2ZcIik7XG5jb25zdCBsaW1pdExlbmd0aF8xID0gcmVxdWlyZShcIi4vbGltaXRMZW5ndGhcIik7XG5jb25zdCBwYXR0ZXJuXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuXCIpO1xuY29uc3QgbGltaXRQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9saW1pdFByb3BlcnRpZXNcIik7XG5jb25zdCByZXF1aXJlZF8xID0gcmVxdWlyZShcIi4vcmVxdWlyZWRcIik7XG5jb25zdCBsaW1pdEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9saW1pdEl0ZW1zXCIpO1xuY29uc3QgdW5pcXVlSXRlbXNfMSA9IHJlcXVpcmUoXCIuL3VuaXF1ZUl0ZW1zXCIpO1xuY29uc3QgY29uc3RfMSA9IHJlcXVpcmUoXCIuL2NvbnN0XCIpO1xuY29uc3QgZW51bV8xID0gcmVxdWlyZShcIi4vZW51bVwiKTtcbmNvbnN0IHZhbGlkYXRpb24gPSBbXG4gICAgLy8gbnVtYmVyXG4gICAgbGltaXROdW1iZXJfMS5kZWZhdWx0LFxuICAgIG11bHRpcGxlT2ZfMS5kZWZhdWx0LFxuICAgIC8vIHN0cmluZ1xuICAgIGxpbWl0TGVuZ3RoXzEuZGVmYXVsdCxcbiAgICBwYXR0ZXJuXzEuZGVmYXVsdCxcbiAgICAvLyBvYmplY3RcbiAgICBsaW1pdFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIHJlcXVpcmVkXzEuZGVmYXVsdCxcbiAgICAvLyBhcnJheVxuICAgIGxpbWl0SXRlbXNfMS5kZWZhdWx0LFxuICAgIHVuaXF1ZUl0ZW1zXzEuZGVmYXVsdCxcbiAgICAvLyBhbnlcbiAgICB7IGtleXdvcmQ6IFwidHlwZVwiLCBzY2hlbWFUeXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiXSB9LFxuICAgIHsga2V5d29yZDogXCJudWxsYWJsZVwiLCBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIiB9LFxuICAgIGNvbnN0XzEuZGVmYXVsdCxcbiAgICBlbnVtXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSB2YWxpZGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWQgd2hlbiBcIml0ZW1zXCIgaXMgbm90IGFuIGFycmF5IG9mIHNjaGVtYXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbGVuOiBpdGVtcy5sZW5ndGggfSk7XG4gICAgICAgIGN4dC5wYXNzKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi52YXIoXCJ2YWxpZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7IC8vIFRPRE8gdmFyXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXModmFsaWQpIHtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBpdGVtcy5sZW5ndGgsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBkYXRhUHJvcDogaSwgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0gfSwgdmFsaWQpO1xuICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYXJyYXlcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVHVwbGUoY3h0LCBcImFkZGl0aW9uYWxJdGVtc1wiLCBzY2hlbWEpO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZVR1cGxlKGN4dCwgZXh0cmFJdGVtcywgc2NoQXJyID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tTdHJpY3RUdXBsZShwYXJlbnRTY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHNjaEFyci5sZW5ndGggJiYgaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hBcnIubGVuZ3RoLCBpdC5pdGVtcyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA+ICR7aX1gLCAoKSA9PiBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgIH0sIHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY2hlY2tTdHJpY3RUdXBsZShzY2gpIHtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBlcnJTY2hlbWFQYXRoIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbCA9IHNjaEFyci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGxUdXBsZSA9IGwgPT09IHNjaC5taW5JdGVtcyAmJiAobCA9PT0gc2NoLm1heEl0ZW1zIHx8IHNjaFtleHRyYUl0ZW1zXSA9PT0gZmFsc2UpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RUdXBsZXMgJiYgIWZ1bGxUdXBsZSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYFwiJHtrZXl3b3JkfVwiIGlzICR7bH0tdHVwbGUsIGJ1dCBtaW5JdGVtcyBvciBtYXhJdGVtcy8ke2V4dHJhSXRlbXN9IGFyZSBub3Qgc3BlY2lmaWVkIG9yIGRpZmZlcmVudCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBvcHRzLnN0cmljdFR1cGxlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2YWxpZGF0ZVR1cGxlO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByZWZpeEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImFycmF5XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGU6IChjeHQpID0+ICgwLCBpdGVtc18xLnZhbGlkYXRlVHVwbGUpKGN4dCwgXCJpdGVtc1wiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVmaXhJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBwcmVmaXhJdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHByZWZpeEl0ZW1zKVxuICAgICAgICAgICAgKDAsIGFkZGl0aW9uYWxJdGVtc18xLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKShjeHQsIHByZWZpeEl0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtczIwMjAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gdmFsaWQgaXRlbShzKWBcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gYW5kIG5vIG1vcmUgdGhhbiAke21heH0gdmFsaWQgaXRlbShzKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWluLCBtYXggfSB9KSA9PiBtYXggPT09IHVuZGVmaW5lZCA/ICgwLCBjb2RlZ2VuXzEuXykgYHttaW5Db250YWluczogJHttaW59fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufSwgbWF4Q29udGFpbnM6ICR7bWF4fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBsZXQgbWluO1xuICAgICAgICBsZXQgbWF4O1xuICAgICAgICBjb25zdCB7IG1pbkNvbnRhaW5zLCBtYXhDb250YWlucyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoaXQub3B0cy5uZXh0KSB7XG4gICAgICAgICAgICBtaW4gPSBtaW5Db250YWlucyA9PT0gdW5kZWZpbmVkID8gMSA6IG1pbkNvbnRhaW5zO1xuICAgICAgICAgICAgbWF4ID0gbWF4Q29udGFpbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaW4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWluLCBtYXggfSk7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPT09IDApIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA9PSAwIHdpdGhvdXQgXCJtYXhDb250YWluc1wiOiBcImNvbnRhaW5zXCIga2V5d29yZCBpZ25vcmVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIG1pbiA+IG1heCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCJtaW5Db250YWluc1wiID4gXCJtYXhDb250YWluc1wiIGlzIGFsd2F5cyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgbGV0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPj0gJHttaW59YDtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kfSAmJiAke2xlbn0gPD0gJHttYXh9YDtcbiAgICAgICAgICAgIGN4dC5wYXNzKGNvbmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAxKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zKHZhbGlkLCAoKSA9PiBnZW4uaWYodmFsaWQsICgpID0+IGdlbi5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWluID09PSAwKSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggPiAwYCwgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZ2VuLmxldChcImNvdW50XCIsIDApO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyhzY2hWYWxpZCwgKCkgPT4gZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiBjaGVja0xpbWl0cyhjb3VudCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKF92YWxpZCwgYmxvY2spIHtcbiAgICAgICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgICAgIGJsb2NrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xpbWl0cyhjb3VudCkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0rK2ApO1xuICAgICAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID4gJHttYXh9YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGFpbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IGV4cG9ydHMuZXJyb3IgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuZXhwb3J0cy5lcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlfaWVzID0gZGVwc0NvdW50ID09PSAxID8gXCJwcm9wZXJ0eVwiIDogXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSAke3Byb3BlcnR5X2llc30gJHtkZXBzfSB3aGVuIHByb3BlcnR5ICR7cHJvcGVydHl9IGlzIHByZXNlbnRgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcywgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Byb3BlcnR5OiAke3Byb3BlcnR5fSxcbiAgICBtaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fSxcbiAgICBkZXBzQ291bnQ6ICR7ZGVwc0NvdW50fSxcbiAgICBkZXBzOiAke2RlcHN9fWAsIC8vIFRPRE8gY2hhbmdlIHRvIHJlZmVyZW5jZVxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRlcGVuZGVuY2llc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcjogZXhwb3J0cy5lcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCBbcHJvcERlcHMsIHNjaERlcHNdID0gc3BsaXREZXBlbmRlbmNpZXMoY3h0KTtcbiAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wRGVwcyk7XG4gICAgICAgIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaERlcHMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gc3BsaXREZXBlbmRlbmNpZXMoeyBzY2hlbWEgfSkge1xuICAgIGNvbnN0IHByb3BlcnR5RGVwcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYURlcHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBkZXBzID0gQXJyYXkuaXNBcnJheShzY2hlbWFba2V5XSkgPyBwcm9wZXJ0eURlcHMgOiBzY2hlbWFEZXBzO1xuICAgICAgICBkZXBzW2tleV0gPSBzY2hlbWFba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm9wZXJ0eURlcHMsIHNjaGVtYURlcHNdO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wZXJ0eURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BlcnR5RGVwcykubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbWlzc2luZyA9IGdlbi5sZXQoXCJtaXNzaW5nXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wZXJ0eURlcHMpIHtcbiAgICAgICAgY29uc3QgZGVwcyA9IHByb3BlcnR5RGVwc1twcm9wXTtcbiAgICAgICAgaWYgKGRlcHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGhhc1Byb3BlcnR5ID0gKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLFxuICAgICAgICAgICAgZGVwc0NvdW50OiBkZXBzLmxlbmd0aCxcbiAgICAgICAgICAgIGRlcHM6IGRlcHMuam9pbihcIiwgXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgZ2VuLmlmKGhhc1Byb3BlcnR5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBQcm9wIG9mIGRlcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIGRlcFByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcGVydHl9ICYmICgkeygwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBkZXBzLCBtaXNzaW5nKX0pYCk7XG4gICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSB2YWxpZGF0ZVByb3BlcnR5RGVwcztcbmZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaGVtYURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzY2hlbWFEZXBzKSB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hRGVwc1twcm9wXSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIHNjaGVtYVByb3A6IHByb3AgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCB2YWxpZCk7XG4gICAgICAgIH0sICgpID0+IGdlbi52YXIodmFsaWQsIHRydWUpIC8vIFRPRE8gdmFyXG4gICAgICAgICk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSB2YWxpZGF0ZVNjaGVtYURlcHM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBlbmRlbmNpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJwcm9wZXJ0eSBuYW1lIG11c3QgYmUgdmFsaWRcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHlOYW1lOiAke3BhcmFtcy5wcm9wZXJ0eU5hbWV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwcm9wZXJ0eU5hbWU6IGtleSB9KTtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydHlOYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXNcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWRkaXRpb25hbFByb3BlcnR5OiAke3BhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBbXCJvYmplY3RcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBhbGxvd1VuZGVmaW5lZDogdHJ1ZSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGVycnNDb3VudCwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghZXJyc0NvdW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBjb25zdCB7IGFsbEVycm9ycywgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGl0LnByb3BzID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAhPT0gXCJhbGxcIiAmJiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcGF0UHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgIGNoZWNrQWRkaXRpb25hbFByb3BlcnRpZXMoKTtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xuICAgICAgICBmdW5jdGlvbiBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BzLmxlbmd0aCAmJiAhcGF0UHJvcHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoaXNBZGRpdGlvbmFsKGtleSksICgpID0+IGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0FkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBsZXQgZGVmaW5lZFByb3A7XG4gICAgICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gOCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gbWF5YmUgYW4gb3B0aW9uIGluc3RlYWQgb2YgaGFyZC1jb2RlZCA4P1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzU2NoZW1hID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzLCBcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZV8xLmlzT3duUHJvcGVydHkpKGdlbiwgcHJvcHNTY2hlbWEsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl9ID09PSAke3B9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdFByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVnZW5fMS5vcikoZGVmaW5lZFByb3AsIC4uLnBhdFByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcCl9LnRlc3QoJHtrZXl9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm5vdCkoZGVmaW5lZFByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBkZWxldGUgJHtkYXRhfVske2tleX1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgfHwgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAmJiBzY2hlbWEgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBhZGRpdGlvbmFsUHJvcGVydHk6IGtleSB9KTtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJmYWlsaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQWRkaXRpb25hbChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCwgZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5TdHIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN1YnNjaGVtYSwge1xuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYShzdWJzY2hlbWEsIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiICYmIHBhcmVudFNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQuY29kZShuZXcgdmFsaWRhdGVfMS5LZXl3b3JkQ3h0KGl0LCBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsbFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgYWxsUHJvcHMpIHtcbiAgICAgICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBhbGxQcm9wcy5sZW5ndGggJiYgaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgKDAsIHV0aWxfMS50b0hhc2gpKGFsbFByb3BzKSwgaXQucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBhbGxQcm9wcy5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGhhc0RlZmF1bHQocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmVsc2UoKS52YXIodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0Lml0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzRGVmYXVsdChwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZSAmJiBzY2hlbWFbcHJvcF0uZGVmYXVsdCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCkge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogcHJvcCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogcHJvcCxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBjb25zdCBhbHdheXNWYWxpZFBhdHRlcm5zID0gcGF0dGVybnMuZmlsdGVyKChwKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChhbHdheXNWYWxpZFBhdHRlcm5zLmxlbmd0aCA9PT0gcGF0dGVybnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKCFpdC5vcHRzLnVuZXZhbHVhdGVkIHx8IGl0LnByb3BzID09PSB0cnVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1Byb3BlcnRpZXMgPSBvcHRzLnN0cmljdFNjaGVtYSAmJiAhb3B0cy5hbGxvd01hdGNoaW5nUHJvcGVydGllcyAmJiBwYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgIShpdC5wcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSAoMCwgdXRpbF8yLmV2YWx1YXRlZFByb3BzVG9OYW1lKShnZW4sIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBpdDtcbiAgICAgICAgdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXQgb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZih2YWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNoZWNrUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdCkudGVzdChwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBwcm9wZXJ0eSAke3Byb3B9IG1hdGNoZXMgcGF0dGVybiAke3BhdH0gKHVzZSBhbGxvd01hdGNoaW5nUHJvcGVydGllcylgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcGF0KX0udGVzdCgke2tleX0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbHdheXNWYWxpZCA9IGFsd2F5c1ZhbGlkUGF0dGVybnMuaW5jbHVkZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHdheXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8yLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9WyR7a2V5fV1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWx3YXlzVmFsaWQgJiYgIWl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllc2AgaXMgbm90IHN1cHBvcnRlZCAob3B0cy5uZXh0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIHdlcmUgZXZhbHVhdGVkIChwcm9wcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuUHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIGN4dC5mYWlsUmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgIH0sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IE5PVCBiZSB2YWxpZFwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFueU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGU6IGNvZGVfMS52YWxpZGF0ZVVuaW9uLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBtYXRjaCBhIHNjaGVtYSBpbiBhbnlPZlwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW55T2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZlwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXNzaW5nU2NoZW1hczogJHtwYXJhbXMucGFzc2luZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMuZGlzY3JpbWluYXRvciAmJiBwYXJlbnRTY2hlbWEuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoQXJyID0gc2NoZW1hO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBhc3NpbmcgPSBnZW4ubGV0KFwicGFzc2luZ1wiLCBudWxsKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IHBhc3NpbmcgfSk7XG4gICAgICAgIC8vIFRPRE8gcG9zc2libHkgZmFpbCBzdHJhaWdodCBhd2F5ICh3aXRoIHdhcm5pbmcgb3IgZXhjZXB0aW9uKSBpZiB0aGVyZSBhcmUgdHdvIGVtcHR5IGFsd2F5cyB2YWxpZCBzY2hlbWFzXG4gICAgICAgIGdlbi5ibG9jayh2YWxpZGF0ZU9uZU9mKTtcbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlT25lT2YoKSB7XG4gICAgICAgICAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaEN4dDtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcihzY2hWYWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGAke3NjaFZhbGlkfSAmJiAke3ZhbGlkfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHZhbGlkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24ocGFzc2luZywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7cGFzc2luZ30sICR7aX1dYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lbHNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihwYXNzaW5nLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaEN4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbmVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFsbE9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBzY2hlbWEuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwiYWxsT2ZcIiwgc2NoZW1hUHJvcDogaSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBcIiR7cGFyYW1zLmlmQ2xhdXNlfVwiIHNjaGVtYWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2ZhaWxpbmdLZXl3b3JkOiAke3BhcmFtcy5pZkNsYXVzZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZlwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYS50aGVuID09PSB1bmRlZmluZWQgJiYgcGFyZW50U2NoZW1hLmVsc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCAnXCJpZlwiIHdpdGhvdXQgXCJ0aGVuXCIgYW5kIFwiZWxzZVwiIGlzIGlnbm9yZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNUaGVuID0gaGFzU2NoZW1hKGl0LCBcInRoZW5cIik7XG4gICAgICAgIGNvbnN0IGhhc0Vsc2UgPSBoYXNTY2hlbWEoaXQsIFwiZWxzZVwiKTtcbiAgICAgICAgaWYgKCFoYXNUaGVuICYmICFoYXNFbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgdmFsaWRhdGVJZigpO1xuICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgaWYgKGhhc1RoZW4gJiYgaGFzRWxzZSkge1xuICAgICAgICAgICAgY29uc3QgaWZDbGF1c2UgPSBnZW4ubGV0KFwiaWZDbGF1c2VcIik7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaWZDbGF1c2UgfSk7XG4gICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsIHZhbGlkYXRlQ2xhdXNlKFwidGhlblwiLCBpZkNsYXVzZSksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiLCBpZkNsYXVzZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1RoZW4pIHtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoc2NoVmFsaWQpLCB2YWxpZGF0ZUNsYXVzZShcImVsc2VcIikpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUlmKCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJpZlwiLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVDbGF1c2Uoa2V5d29yZCwgaWZDbGF1c2UpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaWZDbGF1c2UpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaWZDbGF1c2UsICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5d29yZH1gKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZToga2V5d29yZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGhhc1NjaGVtYShpdCwga2V5d29yZCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICByZXR1cm4gc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1widGhlblwiLCBcImVsc2VcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuaWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwiJHtrZXl3b3JkfVwiIHdpdGhvdXQgXCJpZlwiIGlzIGlnbm9yZWRgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW5FbHNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBhZGRpdGlvbmFsSXRlbXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxJdGVtc1wiKTtcbmNvbnN0IHByZWZpeEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9wcmVmaXhJdGVtc1wiKTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGl0ZW1zMjAyMF8xID0gcmVxdWlyZShcIi4vaXRlbXMyMDIwXCIpO1xuY29uc3QgY29udGFpbnNfMSA9IHJlcXVpcmUoXCIuL2NvbnRhaW5zXCIpO1xuY29uc3QgZGVwZW5kZW5jaWVzXzEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNcIik7XG5jb25zdCBwcm9wZXJ0eU5hbWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0eU5hbWVzXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgcHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcHJvcGVydGllc1wiKTtcbmNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuUHJvcGVydGllc1wiKTtcbmNvbnN0IG5vdF8xID0gcmVxdWlyZShcIi4vbm90XCIpO1xuY29uc3QgYW55T2ZfMSA9IHJlcXVpcmUoXCIuL2FueU9mXCIpO1xuY29uc3Qgb25lT2ZfMSA9IHJlcXVpcmUoXCIuL29uZU9mXCIpO1xuY29uc3QgYWxsT2ZfMSA9IHJlcXVpcmUoXCIuL2FsbE9mXCIpO1xuY29uc3QgaWZfMSA9IHJlcXVpcmUoXCIuL2lmXCIpO1xuY29uc3QgdGhlbkVsc2VfMSA9IHJlcXVpcmUoXCIuL3RoZW5FbHNlXCIpO1xuZnVuY3Rpb24gZ2V0QXBwbGljYXRvcihkcmFmdDIwMjAgPSBmYWxzZSkge1xuICAgIGNvbnN0IGFwcGxpY2F0b3IgPSBbXG4gICAgICAgIC8vIGFueVxuICAgICAgICBub3RfMS5kZWZhdWx0LFxuICAgICAgICBhbnlPZl8xLmRlZmF1bHQsXG4gICAgICAgIG9uZU9mXzEuZGVmYXVsdCxcbiAgICAgICAgYWxsT2ZfMS5kZWZhdWx0LFxuICAgICAgICBpZl8xLmRlZmF1bHQsXG4gICAgICAgIHRoZW5FbHNlXzEuZGVmYXVsdCxcbiAgICAgICAgLy8gb2JqZWN0XG4gICAgICAgIHByb3BlcnR5TmFtZXNfMS5kZWZhdWx0LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIGRlcGVuZGVuY2llc18xLmRlZmF1bHQsXG4gICAgICAgIHByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwYXR0ZXJuUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgXTtcbiAgICAvLyBhcnJheVxuICAgIGlmIChkcmFmdDIwMjApXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChwcmVmaXhJdGVtc18xLmRlZmF1bHQsIGl0ZW1zMjAyMF8xLmRlZmF1bHQpO1xuICAgIGVsc2VcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKGFkZGl0aW9uYWxJdGVtc18xLmRlZmF1bHQsIGl0ZW1zXzEuZGVmYXVsdCk7XG4gICAgYXBwbGljYXRvci5wdXNoKGNvbnRhaW5zXzEuZGVmYXVsdCk7XG4gICAgcmV0dXJuIGFwcGxpY2F0b3I7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBnZXRBcHBsaWNhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBmb3JtYXQgXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7Zm9ybWF0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZm9ybWF0XCIsXG4gICAgdHlwZTogW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQsIHJ1bGVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMsIGVyclNjaGVtYVBhdGgsIHNjaGVtYUVudiwgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGlmICghb3B0cy52YWxpZGF0ZUZvcm1hdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICgkZGF0YSlcbiAgICAgICAgICAgIHZhbGlkYXRlJERhdGFGb3JtYXQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXQoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGUkRGF0YUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZtdHMgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogc2VsZi5mb3JtYXRzLFxuICAgICAgICAgICAgICAgIGNvZGU6IG9wdHMuY29kZS5mb3JtYXRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmRGVmID0gZ2VuLmNvbnN0KFwiZkRlZlwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdHN9WyR7c2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjb25zdCBmVHlwZSA9IGdlbi5sZXQoXCJmVHlwZVwiKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGdlbi5sZXQoXCJmb3JtYXRcIik7XG4gICAgICAgICAgICAvLyBUT0RPIHNpbXBsaWZ5XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZkRlZn0gPT0gXCJvYmplY3RcIiAmJiAhKCR7ZkRlZn0gaW5zdGFuY2VvZiBSZWdFeHApYCwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmRGVmfS50eXBlIHx8IFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnZhbGlkYXRlYCksICgpID0+IGdlbi5hc3NpZ24oZlR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCBmRGVmKSk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEub3IpKHVua25vd25GbXQoKSwgaW52YWxpZEZtdCgpKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm10KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICYmICEke2Zvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaW52YWxpZEZtdCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsRm9ybWF0ID0gc2NoZW1hRW52LiRhc3luY1xuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCgke2ZEZWZ9LmFzeW5jID8gYXdhaXQgJHtmb3JtYXR9KCR7ZGF0YX0pIDogJHtmb3JtYXR9KCR7ZGF0YX0pKWBcbiAgICAgICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0oJHtkYXRhfSlgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCh0eXBlb2YgJHtmb3JtYXR9ID09IFwiZnVuY3Rpb25cIiA/ICR7Y2FsbEZvcm1hdH0gOiAke2Zvcm1hdH0udGVzdCgke2RhdGF9KSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0gJiYgJHtmb3JtYXR9ICE9PSB0cnVlICYmICR7ZlR5cGV9ID09PSAke3J1bGVUeXBlfSAmJiAhJHt2YWxpZERhdGF9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdERlZiA9IHNlbGYuZm9ybWF0c1tzY2hlbWFdO1xuICAgICAgICAgICAgaWYgKCFmb3JtYXREZWYpIHtcbiAgICAgICAgICAgICAgICB1bmtub3duRm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBbZm10VHlwZSwgZm9ybWF0LCBmbXRSZWZdID0gZ2V0Rm9ybWF0KGZvcm1hdERlZik7XG4gICAgICAgICAgICBpZiAoZm10VHlwZSA9PT0gcnVsZVR5cGUpXG4gICAgICAgICAgICAgICAgY3h0LnBhc3ModmFsaWRDb25kaXRpb24oKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm9ybWF0KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Nc2coKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgdW5rbm93biBmb3JtYXQgXCIke3NjaGVtYX1cIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRGb3JtYXQoZm10RGVmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEucmVnZXhwQ29kZSkoZm10RGVmKVxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMuY29kZS5mb3JtYXRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7b3B0cy5jb2RlLmZvcm1hdHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShzY2hlbWEpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7IGtleTogc2NoZW1hLCByZWY6IGZtdERlZiwgY29kZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2ZtdERlZi50eXBlIHx8IFwic3RyaW5nXCIsIGZtdERlZi52YWxpZGF0ZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXR9LnZhbGlkYXRlYF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXCJzdHJpbmdcIiwgZm10RGVmLCBmbXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRDb25kaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXREZWYgPT0gXCJvYmplY3RcIiAmJiAhKGZvcm1hdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgZm9ybWF0RGVmLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGZvcm1hdCBpbiBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0ICR7Zm10UmVmfSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZm9ybWF0ID09IFwiZnVuY3Rpb25cIiA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfSgke2RhdGF9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdFJlZn0udGVzdCgke2RhdGF9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBmb3JtYXQgPSBbZm9ybWF0XzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IGV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gdm9pZCAwO1xuZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSBbXG4gICAgXCJ0aXRsZVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlcHJlY2F0ZWRcIixcbiAgICBcInJlYWRPbmx5XCIsXG4gICAgXCJ3cml0ZU9ubHlcIixcbiAgICBcImV4YW1wbGVzXCIsXG5dO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IFtcbiAgICBcImNvbnRlbnRNZWRpYVR5cGVcIixcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldGFkYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFwcGxpY2F0b3JfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2F0b3JcIik7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGRyYWZ0N1ZvY2FidWxhcmllcyA9IFtcbiAgICBjb3JlXzEuZGVmYXVsdCxcbiAgICB2YWxpZGF0aW9uXzEuZGVmYXVsdCxcbiAgICAoMCwgYXBwbGljYXRvcl8xLmRlZmF1bHQpKCksXG4gICAgZm9ybWF0XzEuZGVmYXVsdCxcbiAgICBtZXRhZGF0YV8xLm1ldGFkYXRhVm9jYWJ1bGFyeSxcbiAgICBtZXRhZGF0YV8xLmNvbnRlbnRWb2NhYnVsYXJ5LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyYWZ0N1ZvY2FidWxhcmllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRyYWZ0Ny5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaXNjckVycm9yID0gdm9pZCAwO1xudmFyIERpc2NyRXJyb3I7XG4oZnVuY3Rpb24gKERpc2NyRXJyb3IpIHtcbiAgICBEaXNjckVycm9yW1wiVGFnXCJdID0gXCJ0YWdcIjtcbiAgICBEaXNjckVycm9yW1wiTWFwcGluZ1wiXSA9IFwibWFwcGluZ1wiO1xufSkoRGlzY3JFcnJvciB8fCAoZXhwb3J0cy5EaXNjckVycm9yID0gRGlzY3JFcnJvciA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vZGlzY3JpbWluYXRvci90eXBlc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZ05hbWUgfSB9KSA9PiBkaXNjckVycm9yID09PSB0eXBlc18xLkRpc2NyRXJyb3IuVGFnXG4gICAgICAgID8gYHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHN0cmluZ2BcbiAgICAgICAgOiBgdmFsdWUgb2YgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgaW4gb25lT2ZgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZywgdGFnTmFtZSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtlcnJvcjogJHtkaXNjckVycm9yfSwgdGFnOiAke3RhZ05hbWV9LCB0YWdWYWx1ZTogJHt0YWd9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGlzY3JpbWluYXRvclwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb25lT2YgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKCFpdC5vcHRzLmRpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIGRpc2NyaW1pbmF0b3Igb3B0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBzY2hlbWEucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAodHlwZW9mIHRhZ05hbWUgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIHByb3BlcnR5TmFtZVwiKTtcbiAgICAgICAgaWYgKHNjaGVtYS5tYXBwaW5nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogbWFwcGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICBpZiAoIW9uZU9mKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgb25lT2Yga2V5d29yZFwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgICAgICBjb25zdCB0YWcgPSBnZW4uY29uc3QoXCJ0YWdcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkodGFnTmFtZSl9YCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHt0YWd9ID09IFwic3RyaW5nXCJgLCAoKSA9PiB2YWxpZGF0ZU1hcHBpbmcoKSwgKCkgPT4gY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5UYWcsIHRhZywgdGFnTmFtZSB9KSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlTWFwcGluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBnZXRNYXBwaW5nKCk7XG4gICAgICAgICAgICBnZW4uaWYoZmFsc2UpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBpbiBtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke3RhZ30gPT09ICR7dGFnVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgYXBwbHlUYWdTY2hlbWEobWFwcGluZ1t0YWdWYWx1ZV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLk1hcHBpbmcsIHRhZywgdGFnTmFtZSB9KTtcbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5VGFnU2NoZW1hKHNjaGVtYVByb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZDogXCJvbmVPZlwiLCBzY2hlbWFQcm9wIH0sIF92YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0LCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gX3ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE1hcHBpbmcoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvbmVPZk1hcHBpbmcgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFJlcXVpcmVkID0gaGFzUmVxdWlyZWQocGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIGxldCB0YWdSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZU9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaCA9IG9uZU9mW2ldO1xuICAgICAgICAgICAgICAgIGlmICgoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpICYmICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2gsIGl0LnNlbGYuUlVMRVMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IHNjaC4kcmVmO1xuICAgICAgICAgICAgICAgICAgICBzY2ggPSBjb21waWxlXzEucmVzb2x2ZVJlZi5jYWxsKGl0LnNlbGYsIGl0LnNjaGVtYUVudi5yb290LCBpdC5iYXNlSWQsIHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2ggaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoID0gc2NoLnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IHJlZl9lcnJvcl8xLmRlZmF1bHQoaXQub3B0cy51cmlSZXNvbHZlciwgaXQuYmFzZUlkLCByZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wU2NoID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnByb3BlcnRpZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVt0YWdOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BTY2ggIT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IG9uZU9mIHN1YnNjaGVtYXMgKG9yIHJlZmVyZW5jZWQgc2NoZW1hcykgbXVzdCBoYXZlIFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFnUmVxdWlyZWQgPSB0YWdSZXF1aXJlZCAmJiAodG9wUmVxdWlyZWQgfHwgaGFzUmVxdWlyZWQoc2NoKSk7XG4gICAgICAgICAgICAgICAgYWRkTWFwcGluZ3MocHJvcFNjaCwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRhZ1JlcXVpcmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgbXVzdCBiZSByZXF1aXJlZGApO1xuICAgICAgICAgICAgcmV0dXJuIG9uZU9mTWFwcGluZztcbiAgICAgICAgICAgIGZ1bmN0aW9uIGhhc1JlcXVpcmVkKHsgcmVxdWlyZWQgfSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJlcXVpcmVkKSAmJiByZXF1aXJlZC5pbmNsdWRlcyh0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdzKHNjaCwgaSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2guY29uc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkTWFwcGluZyhzY2guY29uc3QsIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2guZW51bSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIG9mIHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHRhZ1ZhbHVlLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcInByb3BlcnRpZXMvJHt0YWdOYW1lfVwiIG11c3QgaGF2ZSBcImNvbnN0XCIgb3IgXCJlbnVtXCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhZGRNYXBwaW5nKHRhZ1ZhbHVlLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YWdWYWx1ZSAhPSBcInN0cmluZ1wiIHx8IHRhZ1ZhbHVlIGluIG9uZU9mTWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwiJHt0YWdOYW1lfVwiIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSBzdHJpbmdzYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9uZU9mTWFwcGluZ1t0YWdWYWx1ZV0gPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NaXNzaW5nUmVmRXJyb3IgPSBleHBvcnRzLlZhbGlkYXRpb25FcnJvciA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IGV4cG9ydHMuQWp2ID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IGRyYWZ0N18xID0gcmVxdWlyZShcIi4vdm9jYWJ1bGFyaWVzL2RyYWZ0N1wiKTtcbmNvbnN0IGRpc2NyaW1pbmF0b3JfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yXCIpO1xuY29uc3QgZHJhZnQ3TWV0YVNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvblwiKTtcbmNvbnN0IE1FVEFfU1VQUE9SVF9EQVRBID0gW1wiL3Byb3BlcnRpZXNcIl07XG5jb25zdCBNRVRBX1NDSEVNQV9JRCA9IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWFcIjtcbmNsYXNzIEFqdiBleHRlbmRzIGNvcmVfMS5kZWZhdWx0IHtcbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICBzdXBlci5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIGRyYWZ0N18xLmRlZmF1bHQuZm9yRWFjaCgodikgPT4gdGhpcy5hZGRWb2NhYnVsYXJ5KHYpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRpc2NyaW1pbmF0b3JfMS5kZWZhdWx0KTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBzdXBlci5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubWV0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbWV0YVNjaGVtYSA9IHRoaXMub3B0cy4kZGF0YVxuICAgICAgICAgICAgPyB0aGlzLiRkYXRhTWV0YVNjaGVtYShkcmFmdDdNZXRhU2NoZW1hLCBNRVRBX1NVUFBPUlRfREFUQSlcbiAgICAgICAgICAgIDogZHJhZnQ3TWV0YVNjaGVtYTtcbiAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCBmYWxzZSk7XG4gICAgICAgIHRoaXMucmVmc1tcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hXCJdID0gTUVUQV9TQ0hFTUFfSUQ7XG4gICAgfVxuICAgIGRlZmF1bHRNZXRhKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5kZWZhdWx0TWV0YSA9XG4gICAgICAgICAgICBzdXBlci5kZWZhdWx0TWV0YSgpIHx8ICh0aGlzLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRCkgPyBNRVRBX1NDSEVNQV9JRCA6IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQWp2ID0gQWp2O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gQWp2O1xubW9kdWxlLmV4cG9ydHMuQWp2ID0gQWp2O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gQWp2O1xudmFyIHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS2V5d29yZEN4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGVfMS5LZXl3b3JkQ3h0OyB9IH0pO1xudmFyIGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvY29kZWdlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLk5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2RlR2VuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuQ29kZUdlbjsgfSB9KTtcbnZhciB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWxpZGF0aW9uRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNaXNzaW5nUmVmRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZl9lcnJvcl8xLmRlZmF1bHQ7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hanYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZm9ybWF0TmFtZXMgPSBleHBvcnRzLmZhc3RGb3JtYXRzID0gZXhwb3J0cy5mdWxsRm9ybWF0cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGZtdERlZih2YWxpZGF0ZSwgY29tcGFyZSkge1xuICAgIHJldHVybiB7IHZhbGlkYXRlLCBjb21wYXJlIH07XG59XG5leHBvcnRzLmZ1bGxGb3JtYXRzID0ge1xuICAgIC8vIGRhdGU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICBkYXRlOiBmbXREZWYoZGF0ZSwgY29tcGFyZURhdGUpLFxuICAgIC8vIGRhdGUtdGltZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIHRpbWU6IGZtdERlZih0aW1lLCBjb21wYXJlVGltZSksXG4gICAgXCJkYXRlLXRpbWVcIjogZm10RGVmKGRhdGVfdGltZSwgY29tcGFyZURhdGVUaW1lKSxcbiAgICAvLyBkdXJhdGlvbjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQVxuICAgIGR1cmF0aW9uOiAvXlAoPyEkKSgoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8oVCg/PVxcZCkoXFxkK0gpPyhcXGQrTSk/KFxcZCtTKT8pP3woXFxkK1cpPykkLyxcbiAgICB1cmksXG4gICAgXCJ1cmktcmVmZXJlbmNlXCI6IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopPyg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKnxcXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopPyg/OlxcPyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2ksXG4gICAgLy8gdXJpLXRlbXBsYXRlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU3MFxuICAgIFwidXJpLXRlbXBsYXRlXCI6IC9eKD86KD86W15cXHgwMC1cXHgyMFwiJzw+JVxcXFxeYHt8fV18JVswLTlhLWZdezJ9KXxcXHtbKyMuLzs/Jj0sIUB8XT8oPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KD86LCg/OlthLXowLTlfXXwlWzAtOWEtZl17Mn0pKyg/OjpbMS05XVswLTldezAsM318XFwqKT8pKlxcfSkqJC9pLFxuICAgIC8vIEZvciB0aGUgc291cmNlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kcGVyaW5pLzcyOTI5NFxuICAgIC8vIEZvciB0ZXN0IGNhc2VzOiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvZGVtby91cmwtcmVnZXhcbiAgICB1cmw6IC9eKD86aHR0cHM/fGZ0cCk6XFwvXFwvKD86XFxTKyg/OjpcXFMqKT9AKT8oPzooPyEoPzoxMHwxMjcpKD86XFwuXFxkezEsM30pezN9KSg/ISg/OjE2OVxcLjI1NHwxOTJcXC4xNjgpKD86XFwuXFxkezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyXFxkfDNbMC0xXSkoPzpcXC5cXGR7MSwzfSl7Mn0pKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSstKSpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rKSg/OlxcLig/OlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSstKSpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rKSooPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfV17Mix9KSkpKD86OlxcZHsyLDV9KT8oPzpcXC9bXlxcc10qKT8kL2l1LFxuICAgIGVtYWlsOiAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgICBob3N0bmFtZTogL14oPz0uezEsMjUzfVxcLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXFwuPyQvaSxcbiAgICAvLyBvcHRpbWl6ZWQgaHR0cHM6Ly93d3cuc2FmYXJpYm9va3NvbmxpbmUuY29tL2xpYnJhcnkvdmlldy9yZWd1bGFyLWV4cHJlc3Npb25zLWNvb2tib29rLzk3ODA1OTY4MDI4MzcvY2gwN3MxNi5odG1sXG4gICAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkLyxcbiAgICBpcHY2OiAvXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpKSQvaSxcbiAgICByZWdleCxcbiAgICAvLyB1dWlkOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyXG4gICAgdXVpZDogL14oPzp1cm46dXVpZDopP1swLTlhLWZdezh9LSg/OlswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kL2ksXG4gICAgLy8gSlNPTi1wb2ludGVyOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMVxuICAgIC8vIHVyaSBmcmFnbWVudDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQVxuICAgIFwianNvbi1wb2ludGVyXCI6IC9eKD86XFwvKD86W15+L118fjB8fjEpKikqJC8sXG4gICAgXCJqc29uLXBvaW50ZXItdXJpLWZyYWdtZW50XCI6IC9eIyg/OlxcLyg/OlthLXowLTlfXFwtLiEkJicoKSorLDs6PUBdfCVbMC05YS1mXXsyfXx+MHx+MSkqKSokL2ksXG4gICAgLy8gcmVsYXRpdmUgSlNPTi1wb2ludGVyOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1sdWZmLXJlbGF0aXZlLWpzb24tcG9pbnRlci0wMFxuICAgIFwicmVsYXRpdmUtanNvbi1wb2ludGVyXCI6IC9eKD86MHxbMS05XVswLTldKikoPzojfCg/OlxcLyg/Oltefi9dfH4wfH4xKSopKikkLyxcbiAgICAvLyB0aGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHVzZWQgYnkgdGhlIG9wZW5hcGkgc3BlY2lmaWNhdGlvbjogaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4wI2RhdGEtdHlwZXNcbiAgICAvLyBieXRlOiBodHRwczovL2dpdGh1Yi5jb20vbWlndWVsbW90YS9pcy1iYXNlNjRcbiAgICBieXRlLFxuICAgIC8vIHNpZ25lZCAzMiBiaXQgaW50ZWdlclxuICAgIGludDMyOiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZUludDMyIH0sXG4gICAgLy8gc2lnbmVkIDY0IGJpdCBpbnRlZ2VyXG4gICAgaW50NjQ6IHsgdHlwZTogXCJudW1iZXJcIiwgdmFsaWRhdGU6IHZhbGlkYXRlSW50NjQgfSxcbiAgICAvLyBDLXR5cGUgZmxvYXRcbiAgICBmbG9hdDogeyB0eXBlOiBcIm51bWJlclwiLCB2YWxpZGF0ZTogdmFsaWRhdGVOdW1iZXIgfSxcbiAgICAvLyBDLXR5cGUgZG91YmxlXG4gICAgZG91YmxlOiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZU51bWJlciB9LFxuICAgIC8vIGhpbnQgdG8gdGhlIFVJIHRvIGhpZGUgaW5wdXQgc3RyaW5nc1xuICAgIHBhc3N3b3JkOiB0cnVlLFxuICAgIC8vIHVuY2hlY2tlZCBzdHJpbmcgcGF5bG9hZFxuICAgIGJpbmFyeTogdHJ1ZSxcbn07XG5leHBvcnRzLmZhc3RGb3JtYXRzID0ge1xuICAgIC4uLmV4cG9ydHMuZnVsbEZvcm1hdHMsXG4gICAgZGF0ZTogZm10RGVmKC9eXFxkXFxkXFxkXFxkLVswLTFdXFxkLVswLTNdXFxkJC8sIGNvbXBhcmVEYXRlKSxcbiAgICB0aW1lOiBmbXREZWYoL14oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2ksIGNvbXBhcmVUaW1lKSxcbiAgICBcImRhdGUtdGltZVwiOiBmbXREZWYoL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGRbdFxcc10oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KSQvaSwgY29tcGFyZURhdGVUaW1lKSxcbiAgICAvLyB1cmk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvaXMtbXktanNvbi12YWxpZC9ibG9iL21hc3Rlci9mb3JtYXRzLmpzXG4gICAgdXJpOiAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KSg/OlxcLz9cXC8pP1teXFxzXSokL2ksXG4gICAgXCJ1cmktcmVmZXJlbmNlXCI6IC9eKD86KD86W2Etel1bYS16MC05K1xcLS5dKjopP1xcLz9cXC8pPyg/OlteXFxcXFxccyNdW15cXHMjXSopPyg/OiNbXlxcXFxcXHNdKik/JC9pLFxuICAgIC8vIGVtYWlsIChzb3VyY2VzIGZyb20ganNlbiB2YWxpZGF0b3IpOlxuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjAxMzIzL3VzaW5nLWEtcmVndWxhci1leHByZXNzaW9uLXRvLXZhbGlkYXRlLWFuLWVtYWlsLWFkZHJlc3MjYW5zd2VyLTg4MjkzNjNcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzIChzZWFyY2ggZm9yICd3aWxmdWwgdmlvbGF0aW9uJylcbiAgICBlbWFpbDogL15bYS16MC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8pKiQvaSxcbn07XG5leHBvcnRzLmZvcm1hdE5hbWVzID0gT2JqZWN0LmtleXMoZXhwb3J0cy5mdWxsRm9ybWF0cyk7XG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNhcHBlbmRpeC1DXG4gICAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xufVxuY29uc3QgREFURSA9IC9eKFxcZFxcZFxcZFxcZCktKFxcZFxcZCktKFxcZFxcZCkkLztcbmNvbnN0IERBWVMgPSBbMCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5mdW5jdGlvbiBkYXRlKHN0cikge1xuICAgIC8vIGZ1bGwtZGF0ZSBmcm9tIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICBjb25zdCBtYXRjaGVzID0gREFURS5leGVjKHN0cik7XG4gICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgeWVhciA9ICttYXRjaGVzWzFdO1xuICAgIGNvbnN0IG1vbnRoID0gK21hdGNoZXNbMl07XG4gICAgY29uc3QgZGF5ID0gK21hdGNoZXNbM107XG4gICAgcmV0dXJuIChtb250aCA+PSAxICYmXG4gICAgICAgIG1vbnRoIDw9IDEyICYmXG4gICAgICAgIGRheSA+PSAxICYmXG4gICAgICAgIGRheSA8PSAobW9udGggPT09IDIgJiYgaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogREFZU1ttb250aF0pKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVEYXRlKGQxLCBkMikge1xuICAgIGlmICghKGQxICYmIGQyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoZDEgPiBkMilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKGQxIDwgZDIpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICByZXR1cm4gMDtcbn1cbmNvbnN0IFRJTUUgPSAvXihcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpKFxcLlxcZCspPyh6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2k7XG5mdW5jdGlvbiB0aW1lKHN0ciwgd2l0aFRpbWVab25lKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IFRJTUUuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2hlcylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhvdXIgPSArbWF0Y2hlc1sxXTtcbiAgICBjb25zdCBtaW51dGUgPSArbWF0Y2hlc1syXTtcbiAgICBjb25zdCBzZWNvbmQgPSArbWF0Y2hlc1szXTtcbiAgICBjb25zdCB0aW1lWm9uZSA9IG1hdGNoZXNbNV07XG4gICAgcmV0dXJuICgoKGhvdXIgPD0gMjMgJiYgbWludXRlIDw9IDU5ICYmIHNlY29uZCA8PSA1OSkgfHxcbiAgICAgICAgKGhvdXIgPT09IDIzICYmIG1pbnV0ZSA9PT0gNTkgJiYgc2Vjb25kID09PSA2MCkpICYmXG4gICAgICAgICghd2l0aFRpbWVab25lIHx8IHRpbWVab25lICE9PSBcIlwiKSk7XG59XG5mdW5jdGlvbiBjb21wYXJlVGltZSh0MSwgdDIpIHtcbiAgICBpZiAoISh0MSAmJiB0MikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYTEgPSBUSU1FLmV4ZWModDEpO1xuICAgIGNvbnN0IGEyID0gVElNRS5leGVjKHQyKTtcbiAgICBpZiAoIShhMSAmJiBhMikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdDEgPSBhMVsxXSArIGExWzJdICsgYTFbM10gKyAoYTFbNF0gfHwgXCJcIik7XG4gICAgdDIgPSBhMlsxXSArIGEyWzJdICsgYTJbM10gKyAoYTJbNF0gfHwgXCJcIik7XG4gICAgaWYgKHQxID4gdDIpXG4gICAgICAgIHJldHVybiAxO1xuICAgIGlmICh0MSA8IHQyKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG59XG5jb25zdCBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBkYXRlX3RpbWUoc3RyKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIGNvbnN0IGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICAgIHJldHVybiBkYXRlVGltZS5sZW5ndGggPT09IDIgJiYgZGF0ZShkYXRlVGltZVswXSkgJiYgdGltZShkYXRlVGltZVsxXSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBjb21wYXJlRGF0ZVRpbWUoZHQxLCBkdDIpIHtcbiAgICBpZiAoIShkdDEgJiYgZHQyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBbZDEsIHQxXSA9IGR0MS5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgICBjb25zdCBbZDIsIHQyXSA9IGR0Mi5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgICBjb25zdCByZXMgPSBjb21wYXJlRGF0ZShkMSwgZDIpO1xuICAgIGlmIChyZXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzIHx8IGNvbXBhcmVUaW1lKHQxLCB0Mik7XG59XG5jb25zdCBOT1RfVVJJX0ZSQUdNRU5UID0gL1xcL3w6LztcbmNvbnN0IFVSSSA9IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopKD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSp8XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKikoPzpcXD8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG5mdW5jdGlvbiB1cmkoc3RyKSB7XG4gICAgLy8gaHR0cDovL2ptcndhcmUuY29tL2FydGljbGVzLzIwMDkvdXJpX3JlZ2V4cC9VUklfcmVnZXguaHRtbCArIG9wdGlvbmFsIHByb3RvY29sICsgcmVxdWlyZWQgXCIuXCJcbiAgICByZXR1cm4gTk9UX1VSSV9GUkFHTUVOVC50ZXN0KHN0cikgJiYgVVJJLnRlc3Qoc3RyKTtcbn1cbmNvbnN0IEJZVEUgPSAvXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC9nbTtcbmZ1bmN0aW9uIGJ5dGUoc3RyKSB7XG4gICAgQllURS5sYXN0SW5kZXggPSAwO1xuICAgIHJldHVybiBCWVRFLnRlc3Qoc3RyKTtcbn1cbmNvbnN0IE1JTl9JTlQzMiA9IC0oMiAqKiAzMSk7XG5jb25zdCBNQVhfSU5UMzIgPSAyICoqIDMxIC0gMTtcbmZ1bmN0aW9uIHZhbGlkYXRlSW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPD0gTUFYX0lOVDMyICYmIHZhbHVlID49IE1JTl9JTlQzMjtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlSW50NjQodmFsdWUpIHtcbiAgICAvLyBKU09OIGFuZCBqYXZhc2NyaXB0IG1heCBJbnQgaXMgMioqNTMsIHNvIGFueSBpbnQgdGhhdCBwYXNzZXMgaXNJbnRlZ2VyIGlzIHZhbGlkIGZvciBJbnQ2NFxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKCkge1xuICAgIHJldHVybiB0cnVlO1xufVxuY29uc3QgWl9BTkNIT1IgPSAvW15cXFxcXVxcXFxaLztcbmZ1bmN0aW9uIHJlZ2V4KHN0cikge1xuICAgIGlmIChaX0FOQ0hPUi50ZXN0KHN0cikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBuZXcgUmVnRXhwKHN0cik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5nZXRFc21FeHBvcnROYW1lID0gZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJDb25jYXQgPSBleHBvcnRzLmFkZENvZGVBcmcgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5fQ29kZSA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMuSURFTlRJRklFUiA9IGV4cG9ydHMuX0NvZGVPck5hbWUgPSB2b2lkIDA7XG5jbGFzcyBfQ29kZU9yTmFtZSB7XG59XG5leHBvcnRzLl9Db2RlT3JOYW1lID0gX0NvZGVPck5hbWU7XG5leHBvcnRzLklERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbmNsYXNzIE5hbWUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3Iocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIWV4cG9ydHMuSURFTlRJRklFUi50ZXN0KHMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclwiKTtcbiAgICAgICAgdGhpcy5zdHIgPSBzO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB7IFt0aGlzLnN0cl06IDEgfTtcbiAgICB9XG59XG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuY2xhc3MgX0NvZGUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiID8gW2NvZGVdIDogY29kZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbMF07XG4gICAgICAgIHJldHVybiBpdGVtID09PSBcIlwiIHx8IGl0ZW0gPT09ICdcIlwiJztcbiAgICB9XG4gICAgZ2V0IHN0cigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX3N0cikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX3N0ciA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgocywgYykgPT4gYCR7c30ke2N9YCwgXCJcIikpKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fbmFtZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9uYW1lcyA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgobmFtZXMsIGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgICAgICAgICBuYW1lc1tjLnN0cl0gPSAobmFtZXNbYy5zdHJdIHx8IDApICsgMTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgfSwge30pKSk7XG4gICAgfVxufVxuZXhwb3J0cy5fQ29kZSA9IF9Db2RlO1xuZXhwb3J0cy5uaWwgPSBuZXcgX0NvZGUoXCJcIik7XG5mdW5jdGlvbiBfKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb2RlID0gW3N0cnNbMF1dO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGFkZENvZGVBcmcoY29kZSwgYXJnc1tpXSk7XG4gICAgICAgIGNvZGUucHVzaChzdHJzWysraV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9Db2RlKGNvZGUpO1xufVxuZXhwb3J0cy5fID0gXztcbmNvbnN0IHBsdXMgPSBuZXcgX0NvZGUoXCIrXCIpO1xuZnVuY3Rpb24gc3RyKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHByID0gW3NhZmVTdHJpbmdpZnkoc3Ryc1swXSldO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGV4cHIucHVzaChwbHVzKTtcbiAgICAgICAgYWRkQ29kZUFyZyhleHByLCBhcmdzW2ldKTtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMsIHNhZmVTdHJpbmdpZnkoc3Ryc1srK2ldKSk7XG4gICAgfVxuICAgIG9wdGltaXplKGV4cHIpO1xuICAgIHJldHVybiBuZXcgX0NvZGUoZXhwcik7XG59XG5leHBvcnRzLnN0ciA9IHN0cjtcbmZ1bmN0aW9uIGFkZENvZGVBcmcoY29kZSwgYXJnKSB7XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIF9Db2RlKVxuICAgICAgICBjb2RlLnB1c2goLi4uYXJnLl9pdGVtcyk7XG4gICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgY29kZS5wdXNoKGFyZyk7XG4gICAgZWxzZVxuICAgICAgICBjb2RlLnB1c2goaW50ZXJwb2xhdGUoYXJnKSk7XG59XG5leHBvcnRzLmFkZENvZGVBcmcgPSBhZGRDb2RlQXJnO1xuZnVuY3Rpb24gb3B0aW1pemUoZXhwcikge1xuICAgIGxldCBpID0gMTtcbiAgICB3aGlsZSAoaSA8IGV4cHIubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAoZXhwcltpXSA9PT0gcGx1cykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbWVyZ2VFeHBySXRlbXMoZXhwcltpIC0gMV0sIGV4cHJbaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGV4cHIuc3BsaWNlKGkgLSAxLCAzLCByZXMpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwcltpKytdID0gXCIrXCI7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRXhwckl0ZW1zKGEsIGIpIHtcbiAgICBpZiAoYiA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYTtcbiAgICBpZiAoYSA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYjtcbiAgICBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5hbWUgfHwgYVthLmxlbmd0aCAtIDFdICE9PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGIgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBgJHthLnNsaWNlKDAsIC0xKX0ke2J9XCJgO1xuICAgICAgICBpZiAoYlswXSA9PT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybiBhLnNsaWNlKDAsIC0xKSArIGIuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgJiYgYlswXSA9PT0gJ1wiJyAmJiAhKGEgaW5zdGFuY2VvZiBOYW1lKSlcbiAgICAgICAgcmV0dXJuIGBcIiR7YX0ke2Iuc2xpY2UoMSl9YDtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiBzdHJDb25jYXQoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLmVtcHR5U3RyKCkgPyBjMSA6IGMxLmVtcHR5U3RyKCkgPyBjMiA6IHN0ciBgJHtjMX0ke2MyfWA7XG59XG5leHBvcnRzLnN0ckNvbmNhdCA9IHN0ckNvbmNhdDtcbi8vIFRPRE8gZG8gbm90IGFsbG93IGFycmF5cyBoZXJlXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgeCA9PT0gbnVsbFxuICAgICAgICA/IHhcbiAgICAgICAgOiBzYWZlU3RyaW5naWZ5KEFycmF5LmlzQXJyYXkoeCkgPyB4LmpvaW4oXCIsXCIpIDogeCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUoc2FmZVN0cmluZ2lmeSh4KSk7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCBcIlxcXFx1MjAyOFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCBcIlxcXFx1MjAyOVwiKTtcbn1cbmV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IHNhZmVTdHJpbmdpZnk7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkgPyBuZXcgX0NvZGUoYC4ke2tleX1gKSA6IF8gYFske2tleX1dYDtcbn1cbmV4cG9ydHMuZ2V0UHJvcGVydHkgPSBnZXRQcm9wZXJ0eTtcbi8vRG9lcyBiZXN0IGVmZm9ydCB0byBmb3JtYXQgdGhlIG5hbWUgcHJvcGVybHlcbmZ1bmN0aW9uIGdldEVzbUV4cG9ydE5hbWUoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgX0NvZGUoYCR7a2V5fWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IGludmFsaWQgZXhwb3J0IG5hbWU6ICR7a2V5fSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKTtcbn1cbmV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGdldEVzbUV4cG9ydE5hbWU7XG5mdW5jdGlvbiByZWdleHBDb2RlKHJ4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShyeC50b1N0cmluZygpKTtcbn1cbmV4cG9ydHMucmVnZXhwQ29kZSA9IHJlZ2V4cENvZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNsYXNzIFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgQ29kZUdlbjogXCJjb2RlXCIgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5hbWUudmFsdWU7XG4gICAgfVxufVxudmFyIFVzZWRWYWx1ZVN0YXRlO1xuKGZ1bmN0aW9uIChVc2VkVmFsdWVTdGF0ZSkge1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiU3RhcnRlZFwiXSA9IDBdID0gXCJTdGFydGVkXCI7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJDb21wbGV0ZWRcIl0gPSAxXSA9IFwiQ29tcGxldGVkXCI7XG59KShVc2VkVmFsdWVTdGF0ZSA9IGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgfHwgKGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgPSB7fSkpO1xuZXhwb3J0cy52YXJLaW5kcyA9IHtcbiAgICBjb25zdDogbmV3IGNvZGVfMS5OYW1lKFwiY29uc3RcIiksXG4gICAgbGV0OiBuZXcgY29kZV8xLk5hbWUoXCJsZXRcIiksXG4gICAgdmFyOiBuZXcgY29kZV8xLk5hbWUoXCJ2YXJcIiksXG59O1xuY2xhc3MgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHsgcHJlZml4ZXMsIHBhcmVudCB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5fbmFtZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcHJlZml4ZXMgPSBwcmVmaXhlcztcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICB0b05hbWUobmFtZU9yUHJlZml4KSB7XG4gICAgICAgIHJldHVybiBuYW1lT3JQcmVmaXggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IG5hbWVPclByZWZpeCA6IHRoaXMubmFtZShuYW1lT3JQcmVmaXgpO1xuICAgIH1cbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmV3IGNvZGVfMS5OYW1lKHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIF9uZXdOYW1lKHByZWZpeCkge1xuICAgICAgICBjb25zdCBuZyA9IHRoaXMuX25hbWVzW3ByZWZpeF0gfHwgdGhpcy5fbmFtZUdyb3VwKHByZWZpeCk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtuZy5pbmRleCsrfWA7XG4gICAgfVxuICAgIF9uYW1lR3JvdXAocHJlZml4KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoKF9iID0gKF9hID0gdGhpcy5fcGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuX3ByZWZpeGVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGFzKHByZWZpeCkpIHx8ICh0aGlzLl9wcmVmaXhlcyAmJiAhdGhpcy5fcHJlZml4ZXMuaGFzKHByZWZpeCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHByZWZpeCBcIiR7cHJlZml4fVwiIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc2NvcGVgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuX25hbWVzW3ByZWZpeF0gPSB7IHByZWZpeCwgaW5kZXg6IDAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TY29wZSA9IFNjb3BlO1xuY2xhc3MgVmFsdWVTY29wZU5hbWUgZXh0ZW5kcyBjb2RlXzEuTmFtZSB7XG4gICAgY29uc3RydWN0b3IocHJlZml4LCBuYW1lU3RyKSB7XG4gICAgICAgIHN1cGVyKG5hbWVTdHIpO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgICB9XG4gICAgc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHksIGl0ZW1JbmRleCB9KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zY29wZVBhdGggPSAoMCwgY29kZV8xLl8pIGAuJHtuZXcgY29kZV8xLk5hbWUocHJvcGVydHkpfVske2l0ZW1JbmRleH1dYDtcbiAgICB9XG59XG5leHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gVmFsdWVTY29wZU5hbWU7XG5jb25zdCBsaW5lID0gKDAsIGNvZGVfMS5fKSBgXFxuYDtcbmNsYXNzIFZhbHVlU2NvcGUgZXh0ZW5kcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuX3Njb3BlID0gb3B0cy5zY29wZTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IGxpbmUgOiBjb2RlXzEubmlsIH07XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xuICAgIH1cbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbHVlU2NvcGVOYW1lKHByZWZpeCwgdGhpcy5fbmV3TmFtZShwcmVmaXgpKTtcbiAgICB9XG4gICAgdmFsdWUobmFtZU9yUHJlZml4LCB2YWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh2YWx1ZS5yZWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IHJlZiBtdXN0IGJlIHBhc3NlZCBpbiB2YWx1ZVwiKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGNvbnN0IHsgcHJlZml4IH0gPSBuYW1lO1xuICAgICAgICBjb25zdCB2YWx1ZUtleSA9IChfYSA9IHZhbHVlLmtleSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsdWUucmVmO1xuICAgICAgICBsZXQgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgaWYgKHZzKSB7XG4gICAgICAgICAgICBjb25zdCBfbmFtZSA9IHZzLmdldCh2YWx1ZUtleSk7XG4gICAgICAgICAgICBpZiAoX25hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XSA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICB2cy5zZXQodmFsdWVLZXksIG5hbWUpO1xuICAgICAgICBjb25zdCBzID0gdGhpcy5fc2NvcGVbcHJlZml4XSB8fCAodGhpcy5fc2NvcGVbcHJlZml4XSA9IFtdKTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gcy5sZW5ndGg7XG4gICAgICAgIHNbaXRlbUluZGV4XSA9IHZhbHVlLnJlZjtcbiAgICAgICAgbmFtZS5zZXRWYWx1ZSh2YWx1ZSwgeyBwcm9wZXJ0eTogcHJlZml4LCBpdGVtSW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBnZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIGNvbnN0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICghdnMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiB2cy5nZXQoa2V5T3JSZWYpO1xuICAgIH1cbiAgICBzY29wZVJlZnMoc2NvcGVOYW1lLCB2YWx1ZXMgPSB0aGlzLl92YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS5zY29wZVBhdGggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgXCIke25hbWV9XCIgaGFzIG5vIHZhbHVlYCk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVfMS5fKSBgJHtzY29wZU5hbWV9JHtuYW1lLnNjb3BlUGF0aH1gO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2NvcGVDb2RlKHZhbHVlcyA9IHRoaXMuX3ZhbHVlcywgdXNlZFZhbHVlcywgZ2V0Q29kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkdWNlVmFsdWVzKHZhbHVlcywgKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lLnZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWUudmFsdWUuY29kZTtcbiAgICAgICAgfSwgdXNlZFZhbHVlcywgZ2V0Q29kZSk7XG4gICAgfVxuICAgIF9yZWR1Y2VWYWx1ZXModmFsdWVzLCB2YWx1ZUNvZGUsIHVzZWRWYWx1ZXMgPSB7fSwgZ2V0Q29kZSkge1xuICAgICAgICBsZXQgY29kZSA9IGNvZGVfMS5uaWw7XG4gICAgICAgIGZvciAoY29uc3QgcHJlZml4IGluIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdnMgPSB2YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgICAgIGlmICghdnMpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBuYW1lU2V0ID0gKHVzZWRWYWx1ZXNbcHJlZml4XSA9IHVzZWRWYWx1ZXNbcHJlZml4XSB8fCBuZXcgTWFwKCkpO1xuICAgICAgICAgICAgdnMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lU2V0LmhhcyhuYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5hbWVTZXQuc2V0KG5hbWUsIFVzZWRWYWx1ZVN0YXRlLlN0YXJ0ZWQpO1xuICAgICAgICAgICAgICAgIGxldCBjID0gdmFsdWVDb2RlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZiA9IHRoaXMub3B0cy5lczUgPyBleHBvcnRzLnZhcktpbmRzLnZhciA6IGV4cG9ydHMudmFyS2luZHMuY29uc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoMCwgY29kZV8xLl8pIGAke2NvZGV9JHtkZWZ9ICR7bmFtZX0gPSAke2N9OyR7dGhpcy5vcHRzLl9ufWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChjID0gZ2V0Q29kZSA9PT0gbnVsbCB8fCBnZXRDb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRDb2RlKG5hbWUpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7Y30ke3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlRXJyb3IobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5hbWVTZXQuc2V0KG5hbWUsIFVzZWRWYWx1ZVN0YXRlLkNvbXBsZXRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG59XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBWYWx1ZVNjb3BlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NvcGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub3IgPSBleHBvcnRzLmFuZCA9IGV4cG9ydHMubm90ID0gZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5vcGVyYXRvcnMgPSBleHBvcnRzLnZhcktpbmRzID0gZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IGV4cG9ydHMuVmFsdWVTY29wZSA9IGV4cG9ydHMuU2NvcGUgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLnJlZ2V4cENvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuZ2V0UHJvcGVydHkgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyQ29uY2F0ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSB2b2lkIDA7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuY29uc3Qgc2NvcGVfMSA9IHJlcXVpcmUoXCIuL3Njb3BlXCIpO1xudmFyIGNvZGVfMiA9IHJlcXVpcmUoXCIuL2NvZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ckNvbmNhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0ckNvbmNhdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFByb3BlcnR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuZ2V0UHJvcGVydHk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJpbmdpZnk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWdleHBDb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIucmVnZXhwQ29kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5OYW1lOyB9IH0pO1xudmFyIHNjb3BlXzIgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNjb3BlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlNjb3BlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsdWVTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5WYWx1ZVNjb3BlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsdWVTY29wZU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJLaW5kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi52YXJLaW5kczsgfSB9KTtcbmV4cG9ydHMub3BlcmF0b3JzID0ge1xuICAgIEdUOiBuZXcgY29kZV8xLl9Db2RlKFwiPlwiKSxcbiAgICBHVEU6IG5ldyBjb2RlXzEuX0NvZGUoXCI+PVwiKSxcbiAgICBMVDogbmV3IGNvZGVfMS5fQ29kZShcIjxcIiksXG4gICAgTFRFOiBuZXcgY29kZV8xLl9Db2RlKFwiPD1cIiksXG4gICAgRVE6IG5ldyBjb2RlXzEuX0NvZGUoXCI9PT1cIiksXG4gICAgTkVROiBuZXcgY29kZV8xLl9Db2RlKFwiIT09XCIpLFxuICAgIE5PVDogbmV3IGNvZGVfMS5fQ29kZShcIiFcIiksXG4gICAgT1I6IG5ldyBjb2RlXzEuX0NvZGUoXCJ8fFwiKSxcbiAgICBBTkQ6IG5ldyBjb2RlXzEuX0NvZGUoXCImJlwiKSxcbiAgICBBREQ6IG5ldyBjb2RlXzEuX0NvZGUoXCIrXCIpLFxufTtcbmNsYXNzIE5vZGUge1xuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKF9uYW1lcywgX2NvbnN0YW50cykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5jbGFzcyBEZWYgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcih2YXJLaW5kLCBuYW1lLCByaHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgfVxuICAgIHJlbmRlcih7IGVzNSwgX24gfSkge1xuICAgICAgICBjb25zdCB2YXJLaW5kID0gZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHJocyA9IHRoaXMucmhzID09PSB1bmRlZmluZWQgPyBcIlwiIDogYCA9ICR7dGhpcy5yaHN9YDtcbiAgICAgICAgcmV0dXJuIGAke3ZhcktpbmR9ICR7dGhpcy5uYW1lfSR7cmhzfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIW5hbWVzW3RoaXMubmFtZS5zdHJdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5yaHMpXG4gICAgICAgICAgICB0aGlzLnJocyA9IG9wdGltaXplRXhwcih0aGlzLnJocywgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJocyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IHRoaXMucmhzLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgQXNzaWduIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGhzID0gbGhzO1xuICAgICAgICB0aGlzLnJocyA9IHJocztcbiAgICAgICAgdGhpcy5zaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxoc30gPSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAodGhpcy5saHMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiAhbmFtZXNbdGhpcy5saHMuc3RyXSAmJiAhdGhpcy5zaWRlRWZmZWN0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyB7fSA6IHsgLi4udGhpcy5saHMubmFtZXMgfTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy5yaHMpO1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbk9wIGV4dGVuZHMgQXNzaWduIHtcbiAgICBjb25zdHJ1Y3RvcihsaHMsIG9wLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHN1cGVyKGxocywgcmhzLCBzaWRlRWZmZWN0cyk7XG4gICAgICAgIHRoaXMub3AgPSBvcDtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ICR7dGhpcy5vcH09ICR7dGhpcy5yaHN9O2AgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBMYWJlbCBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgdGhpcy5uYW1lcyA9IHt9O1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxhYmVsfTpgICsgX247XG4gICAgfVxufVxuY2xhc3MgQnJlYWsgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgPyBgICR7dGhpcy5sYWJlbH1gIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIGBicmVhayR7bGFiZWx9O2AgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBUaHJvdyBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYHRocm93ICR7dGhpcy5lcnJvcn07YCArIF9uO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yLm5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIEFueUNvZGUgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX07YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2RlfWAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdGhpcy5jb2RlID0gb3B0aW1pemVFeHByKHRoaXMuY29kZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvZGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLmNvZGUubmFtZXMgOiB7fTtcbiAgICB9XG59XG5jbGFzcyBQYXJlbnROb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3Iobm9kZXMgPSBbXSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5vZGVzID0gbm9kZXM7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLnJlZHVjZSgoY29kZSwgbikgPT4gY29kZSArIG4ucmVuZGVyKG9wdHMpLCBcIlwiKTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgY29uc3QgeyBub2RlcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuKSlcbiAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSwgLi4ubik7XG4gICAgICAgICAgICBlbHNlIGlmIChuKVxuICAgICAgICAgICAgICAgIG5vZGVzW2ldID0gbjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVzLmxlbmd0aCA+IDAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgY29uc3QgeyBub2RlcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGluZyBiYWNrd2FyZHMgaW1wcm92ZXMgMS1wYXNzIG9wdGltaXphdGlvblxuICAgICAgICAgICAgY29uc3QgbiA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKG4ub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHN1YnRyYWN0TmFtZXMobmFtZXMsIG4ubmFtZXMpO1xuICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKG5hbWVzLCBuKSA9PiBhZGROYW1lcyhuYW1lcywgbi5uYW1lcyksIHt9KTtcbiAgICB9XG59XG5jbGFzcyBCbG9ja05vZGUgZXh0ZW5kcyBQYXJlbnROb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJ7XCIgKyBvcHRzLl9uICsgc3VwZXIucmVuZGVyKG9wdHMpICsgXCJ9XCIgKyBvcHRzLl9uO1xuICAgIH1cbn1cbmNsYXNzIFJvb3QgZXh0ZW5kcyBQYXJlbnROb2RlIHtcbn1cbmNsYXNzIEVsc2UgZXh0ZW5kcyBCbG9ja05vZGUge1xufVxuRWxzZS5raW5kID0gXCJlbHNlXCI7XG5jbGFzcyBJZiBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29uZGl0aW9uLCBub2Rlcykge1xuICAgICAgICBzdXBlcihub2Rlcyk7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBsZXQgY29kZSA9IGBpZigke3RoaXMuY29uZGl0aW9ufSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5lbHNlKVxuICAgICAgICAgICAgY29kZSArPSBcImVsc2UgXCIgKyB0aGlzLmVsc2UucmVuZGVyKG9wdHMpO1xuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOb2RlcygpO1xuICAgICAgICBjb25zdCBjb25kID0gdGhpcy5jb25kaXRpb247XG4gICAgICAgIGlmIChjb25kID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXM7IC8vIGVsc2UgaXMgaWdub3JlZCBoZXJlXG4gICAgICAgIGxldCBlID0gdGhpcy5lbHNlO1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgY29uc3QgbnMgPSBlLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIGUgPSB0aGlzLmVsc2UgPSBBcnJheS5pc0FycmF5KG5zKSA/IG5ldyBFbHNlKG5zKSA6IG5zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBJZiA/IGUgOiBlLm5vZGVzO1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJZihub3QoY29uZCksIGUgaW5zdGFuY2VvZiBJZiA/IFtlXSA6IGUubm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kID09PSBmYWxzZSB8fCAhdGhpcy5ub2Rlcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5lbHNlID0gKF9hID0gdGhpcy5lbHNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgaWYgKCEoc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB8fCB0aGlzLmVsc2UpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IG9wdGltaXplRXhwcih0aGlzLmNvbmRpdGlvbiwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gc3VwZXIubmFtZXM7XG4gICAgICAgIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy5jb25kaXRpb24pO1xuICAgICAgICBpZiAodGhpcy5lbHNlKVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuZWxzZS5uYW1lcyk7XG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG59XG5JZi5raW5kID0gXCJpZlwiO1xuY2xhc3MgRm9yIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkZvci5raW5kID0gXCJmb3JcIjtcbmNsYXNzIEZvckxvb3AgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKGl0ZXJhdGlvbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLml0ZXJhdGlvbiA9IGl0ZXJhdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt0aGlzLml0ZXJhdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gYWRkTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuaXRlcmF0aW9uLm5hbWVzKTtcbiAgICB9XG59XG5jbGFzcyBGb3JSYW5nZSBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgZnJvbSwgdG8pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5mcm9tID0gZnJvbTtcbiAgICAgICAgdGhpcy50byA9IHRvO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCB2YXJLaW5kID0gb3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHRoaXMudmFyS2luZDtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBmcm9tLCB0byB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt2YXJLaW5kfSAke25hbWV9PSR7ZnJvbX07ICR7bmFtZX08JHt0b307ICR7bmFtZX0rKylgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gYWRkRXhwck5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLmZyb20pO1xuICAgICAgICByZXR1cm4gYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLnRvKTtcbiAgICB9XG59XG5jbGFzcyBGb3JJdGVyIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihsb29wLCB2YXJLaW5kLCBuYW1lLCBpdGVyYWJsZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvb3AgPSBsb29wO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLml0ZXJhYmxlID0gaXRlcmFibGU7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy52YXJLaW5kfSAke3RoaXMubmFtZX0gJHt0aGlzLmxvb3B9ICR7dGhpcy5pdGVyYWJsZX0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IG9wdGltaXplRXhwcih0aGlzLml0ZXJhYmxlLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhYmxlLm5hbWVzKTtcbiAgICB9XG59XG5jbGFzcyBGdW5jIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBhcmdzLCBhc3luYykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgICAgICB0aGlzLmFzeW5jID0gYXN5bmM7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IF9hc3luYyA9IHRoaXMuYXN5bmMgPyBcImFzeW5jIFwiIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIGAke19hc3luY31mdW5jdGlvbiAke3RoaXMubmFtZX0oJHt0aGlzLmFyZ3N9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRnVuYy5raW5kID0gXCJmdW5jXCI7XG5jbGFzcyBSZXR1cm4gZXh0ZW5kcyBQYXJlbnROb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJyZXR1cm4gXCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuUmV0dXJuLmtpbmQgPSBcInJldHVyblwiO1xuY2xhc3MgVHJ5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBsZXQgY29kZSA9IFwidHJ5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmNhdGNoKVxuICAgICAgICAgICAgY29kZSArPSB0aGlzLmNhdGNoLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZmluYWxseSlcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5maW5hbGx5LnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgKF9hID0gdGhpcy5jYXRjaCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOb2RlcygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2IgPSB0aGlzLmZpbmFsbHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmNhdGNoLm5hbWVzKTtcbiAgICAgICAgaWYgKHRoaXMuZmluYWxseSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmZpbmFsbHkubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuY2xhc3MgQ2F0Y2ggZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBjYXRjaCgke3RoaXMuZXJyb3J9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuQ2F0Y2gua2luZCA9IFwiY2F0Y2hcIjtcbmNsYXNzIEZpbmFsbHkgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcImZpbmFsbHlcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5GaW5hbGx5LmtpbmQgPSBcImZpbmFsbHlcIjtcbmNsYXNzIENvZGVHZW4ge1xuICAgIGNvbnN0cnVjdG9yKGV4dFNjb3BlLCBvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuX2Jsb2NrU3RhcnRzID0gW107XG4gICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IHt9O1xuICAgICAgICB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIF9uOiBvcHRzLmxpbmVzID8gXCJcXG5cIiA6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5fZXh0U2NvcGUgPSBleHRTY29wZTtcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBuZXcgc2NvcGVfMS5TY29wZSh7IHBhcmVudDogZXh0U2NvcGUgfSk7XG4gICAgICAgIHRoaXMuX25vZGVzID0gW25ldyBSb290KCldO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QucmVuZGVyKHRoaXMub3B0cyk7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdW5pcXVlIG5hbWUgaW4gdGhlIGludGVybmFsIHNjb3BlXG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlXG4gICAgc2NvcGVOYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUubmFtZShwcmVmaXgpO1xuICAgIH1cbiAgICAvLyByZXNlcnZlcyB1bmlxdWUgbmFtZSBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgYW5kIGFzc2lnbnMgdmFsdWUgdG8gaXRcbiAgICBzY29wZVZhbHVlKHByZWZpeE9yTmFtZSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX2V4dFNjb3BlLnZhbHVlKHByZWZpeE9yTmFtZSwgdmFsdWUpO1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1tuYW1lLnByZWZpeF0gfHwgKHRoaXMuX3ZhbHVlc1tuYW1lLnByZWZpeF0gPSBuZXcgU2V0KCkpO1xuICAgICAgICB2cy5hZGQobmFtZSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBnZXRTY29wZVZhbHVlKHByZWZpeCwga2V5T3JSZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLmdldFZhbHVlKHByZWZpeCwga2V5T3JSZWYpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gY29kZSB0aGF0IGFzc2lnbnMgdmFsdWVzIGluIHRoZSBleHRlcm5hbCBzY29wZSB0byB0aGUgbmFtZXMgdGhhdCBhcmUgdXNlZCBpbnRlcm5hbGx5XG4gICAgLy8gKHNhbWUgbmFtZXMgdGhhdCB3ZXJlIHJldHVybmVkIGJ5IGdlbi5zY29wZU5hbWUgb3IgZ2VuLnNjb3BlVmFsdWUpXG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuc2NvcGVSZWZzKHNjb3BlTmFtZSwgdGhpcy5fdmFsdWVzKTtcbiAgICB9XG4gICAgc2NvcGVDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuc2NvcGVDb2RlKHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIF9kZWYodmFyS2luZCwgbmFtZU9yUHJlZml4LCByaHMsIGNvbnN0YW50KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgaWYgKHJocyAhPT0gdW5kZWZpbmVkICYmIGNvbnN0YW50KVxuICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW25hbWUuc3RyXSA9IHJocztcbiAgICAgICAgdGhpcy5fbGVhZk5vZGUobmV3IERlZih2YXJLaW5kLCBuYW1lLCByaHMpKTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIC8vIGBjb25zdGAgZGVjbGFyYXRpb24gKGB2YXJgIGluIGVzNSBtb2RlKVxuICAgIGNvbnN0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmNvbnN0LCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYGxldGAgZGVjbGFyYXRpb24gd2l0aCBvcHRpb25hbCBhc3NpZ25tZW50IChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBsZXQobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMubGV0LCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYHZhcmAgZGVjbGFyYXRpb24gd2l0aCBvcHRpb25hbCBhc3NpZ25tZW50XG4gICAgdmFyKG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLnZhciwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGFzc2lnbm1lbnQgY29kZVxuICAgIGFzc2lnbihsaHMsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSk7XG4gICAgfVxuICAgIC8vIGArPWAgY29kZVxuICAgIGFkZChsaHMsIHJocykge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEFzc2lnbk9wKGxocywgZXhwb3J0cy5vcGVyYXRvcnMuQURELCByaHMpKTtcbiAgICB9XG4gICAgLy8gYXBwZW5kcyBwYXNzZWQgU2FmZUV4cHIgdG8gY29kZSBvciBleGVjdXRlcyBCbG9ja1xuICAgIGNvZGUoYykge1xuICAgICAgICBpZiAodHlwZW9mIGMgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgYygpO1xuICAgICAgICBlbHNlIGlmIChjICE9PSBjb2RlXzEubmlsKVxuICAgICAgICAgICAgdGhpcy5fbGVhZk5vZGUobmV3IEFueUNvZGUoYykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gcmV0dXJucyBjb2RlIGZvciBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlIHBhc3NlZCBhcmd1bWVudCBsaXN0IG9mIGtleS12YWx1ZSBwYWlyc1xuICAgIG9iamVjdCguLi5rZXlWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IFtcIntcIl07XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGtleVZhbHVlcykge1xuICAgICAgICAgICAgaWYgKGNvZGUubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICBjb2RlLnB1c2goXCIsXCIpO1xuICAgICAgICAgICAgY29kZS5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSB2YWx1ZSB8fCB0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiOlwiKTtcbiAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmFkZENvZGVBcmcpKGNvZGUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2RlLnB1c2goXCJ9XCIpO1xuICAgICAgICByZXR1cm4gbmV3IGNvZGVfMS5fQ29kZShjb2RlKTtcbiAgICB9XG4gICAgLy8gYGlmYCBjbGF1c2UgKG9yIHN0YXRlbWVudCBpZiBgdGhlbkJvZHlgIGFuZCwgb3B0aW9uYWxseSwgYGVsc2VCb2R5YCBhcmUgcGFzc2VkKVxuICAgIGlmKGNvbmRpdGlvbiwgdGhlbkJvZHksIGVsc2VCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgICAgIGlmICh0aGVuQm9keSAmJiBlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlKHRoZW5Cb2R5KS5lbHNlKCkuY29kZShlbHNlQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGVuQm9keSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlKHRoZW5Cb2R5KS5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVsc2VCb2R5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIGJvZHkgd2l0aG91dCBcInRoZW5cIiBib2R5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGBlbHNlIGlmYCBjbGF1c2UgLSBpbnZhbGlkIHdpdGhvdXQgYGlmYCBvciBhZnRlciBgZWxzZWAgY2xhdXNlc1xuICAgIGVsc2VJZihjb25kaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyBJZihjb25kaXRpb24pKTtcbiAgICB9XG4gICAgLy8gYGVsc2VgIGNsYXVzZSAtIG9ubHkgdmFsaWQgYWZ0ZXIgYGlmYCBvciBgZWxzZSBpZmAgY2xhdXNlc1xuICAgIGVsc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgRWxzZSgpKTtcbiAgICB9XG4gICAgLy8gZW5kIGBpZmAgc3RhdGVtZW50IChuZWVkZWQgaWYgZ2VuLmlmIHdhcyB1c2VkIG9ubHkgd2l0aCBjb25kaXRpb24pXG4gICAgZW5kSWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoSWYsIEVsc2UpO1xuICAgIH1cbiAgICBfZm9yKG5vZGUsIGZvckJvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICBpZiAoZm9yQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmb3JCb2R5KS5lbmRGb3IoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGEgZ2VuZXJpYyBgZm9yYCBjbGF1c2UgKG9yIHN0YXRlbWVudCBpZiBgZm9yQm9keWAgaXMgcGFzc2VkKVxuICAgIGZvcihpdGVyYXRpb24sIGZvckJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9yTG9vcChpdGVyYXRpb24pLCBmb3JCb2R5KTtcbiAgICB9XG4gICAgLy8gYGZvcmAgc3RhdGVtZW50IGZvciBhIHJhbmdlIG9mIHZhbHVlc1xuICAgIGZvclJhbmdlKG5hbWVPclByZWZpeCwgZnJvbSwgdG8sIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmxldCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvclJhbmdlKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3Itb2ZgIHN0YXRlbWVudCAoaW4gZXM1IG1vZGUgcmVwbGFjZSB3aXRoIGEgbm9ybWFsIGZvciBsb29wKVxuICAgIGZvck9mKG5hbWVPclByZWZpeCwgaXRlcmFibGUsIGZvckJvZHksIHZhcktpbmQgPSBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5lczUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IGl0ZXJhYmxlIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBpdGVyYWJsZSA6IHRoaXMudmFyKFwiX2FyclwiLCBpdGVyYWJsZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JSYW5nZShcIl9pXCIsIDAsICgwLCBjb2RlXzEuXykgYCR7YXJyfS5sZW5ndGhgLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmFyKG5hbWUsICgwLCBjb2RlXzEuXykgYCR7YXJyfVske2l9XWApO1xuICAgICAgICAgICAgICAgIGZvckJvZHkobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwib2ZcIiwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gYGZvci1pbmAgc3RhdGVtZW50LlxuICAgIC8vIFdpdGggb3B0aW9uIGBvd25Qcm9wZXJ0aWVzYCByZXBsYWNlZCB3aXRoIGEgYGZvci1vZmAgbG9vcCBmb3Igb2JqZWN0IGtleXNcbiAgICBmb3JJbihuYW1lT3JQcmVmaXgsIG9iaiwgZm9yQm9keSwgdmFyS2luZCA9IHRoaXMub3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHNjb3BlXzEudmFyS2luZHMuY29uc3QpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5vd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JPZihuYW1lT3JQcmVmaXgsICgwLCBjb2RlXzEuXykgYE9iamVjdC5rZXlzKCR7b2JqfSlgLCBmb3JCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckl0ZXIoXCJpblwiLCB2YXJLaW5kLCBuYW1lLCBvYmopLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gZW5kIGBmb3JgIGxvb3BcbiAgICBlbmRGb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoRm9yKTtcbiAgICB9XG4gICAgLy8gYGxhYmVsYCBzdGF0ZW1lbnRcbiAgICBsYWJlbChsYWJlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IExhYmVsKGxhYmVsKSk7XG4gICAgfVxuICAgIC8vIGBicmVha2Agc3RhdGVtZW50XG4gICAgYnJlYWsobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBCcmVhayhsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgcmV0dXJuYCBzdGF0ZW1lbnRcbiAgICByZXR1cm4odmFsdWUpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBSZXR1cm4oKTtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLmNvZGUodmFsdWUpO1xuICAgICAgICBpZiAobm9kZS5ub2Rlcy5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwicmV0dXJuXCIgc2hvdWxkIGhhdmUgb25lIG5vZGUnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShSZXR1cm4pO1xuICAgIH1cbiAgICAvLyBgdHJ5YCBzdGF0ZW1lbnRcbiAgICB0cnkodHJ5Qm9keSwgY2F0Y2hDb2RlLCBmaW5hbGx5Q29kZSkge1xuICAgICAgICBpZiAoIWNhdGNoQ29kZSAmJiAhZmluYWxseUNvZGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwidHJ5XCIgd2l0aG91dCBcImNhdGNoXCIgYW5kIFwiZmluYWxseVwiJyk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJ5KCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHRyeUJvZHkpO1xuICAgICAgICBpZiAoY2F0Y2hDb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubmFtZShcImVcIik7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuY2F0Y2ggPSBuZXcgQ2F0Y2goZXJyb3IpO1xuICAgICAgICAgICAgY2F0Y2hDb2RlKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmluYWxseUNvZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbm9kZS5maW5hbGx5ID0gbmV3IEZpbmFsbHkoKTtcbiAgICAgICAgICAgIHRoaXMuY29kZShmaW5hbGx5Q29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShDYXRjaCwgRmluYWxseSk7XG4gICAgfVxuICAgIC8vIGB0aHJvd2Agc3RhdGVtZW50XG4gICAgdGhyb3coZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBUaHJvdyhlcnJvcikpO1xuICAgIH1cbiAgICAvLyBzdGFydCBzZWxmLWJhbGFuY2luZyBibG9ja1xuICAgIGJsb2NrKGJvZHksIG5vZGVDb3VudCkge1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cy5wdXNoKHRoaXMuX25vZGVzLmxlbmd0aCk7XG4gICAgICAgIGlmIChib2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGJvZHkpLmVuZEJsb2NrKG5vZGVDb3VudCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBlbmQgdGhlIGN1cnJlbnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBlbmRCbG9jayhub2RlQ291bnQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5fYmxvY2tTdGFydHMucG9wKCk7XG4gICAgICAgIGlmIChsZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IG5vdCBpbiBzZWxmLWJhbGFuY2luZyBibG9ja1wiKTtcbiAgICAgICAgY29uc3QgdG9DbG9zZSA9IHRoaXMuX25vZGVzLmxlbmd0aCAtIGxlbjtcbiAgICAgICAgaWYgKHRvQ2xvc2UgPCAwIHx8IChub2RlQ291bnQgIT09IHVuZGVmaW5lZCAmJiB0b0Nsb3NlICE9PSBub2RlQ291bnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHdyb25nIG51bWJlciBvZiBub2RlczogJHt0b0Nsb3NlfSB2cyAke25vZGVDb3VudH0gZXhwZWN0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ub2Rlcy5sZW5ndGggPSBsZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZnVuY3Rpb25gIGhlYWRpbmcgKG9yIGRlZmluaXRpb24gaWYgZnVuY0JvZHkgaXMgcGFzc2VkKVxuICAgIGZ1bmMobmFtZSwgYXJncyA9IGNvZGVfMS5uaWwsIGFzeW5jLCBmdW5jQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IEZ1bmMobmFtZSwgYXJncywgYXN5bmMpKTtcbiAgICAgICAgaWYgKGZ1bmNCb2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGZ1bmNCb2R5KS5lbmRGdW5jKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBlbmQgZnVuY3Rpb24gZGVmaW5pdGlvblxuICAgIGVuZEZ1bmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoRnVuYyk7XG4gICAgfVxuICAgIG9wdGltaXplKG4gPSAxKSB7XG4gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3Qub3B0aW1pemVOYW1lcyh0aGlzLl9yb290Lm5hbWVzLCB0aGlzLl9jb25zdGFudHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9sZWFmTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBfYmxvY2tOb2RlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3Vyck5vZGUubm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgdGhpcy5fbm9kZXMucHVzaChub2RlKTtcbiAgICB9XG4gICAgX2VuZEJsb2NrTm9kZShOMSwgTjIpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAobiBpbnN0YW5jZW9mIE4xIHx8IChOMiAmJiBuIGluc3RhbmNlb2YgTjIpKSB7XG4gICAgICAgICAgICB0aGlzLl9ub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbm90IGluIGJsb2NrIFwiJHtOMiA/IGAke04xLmtpbmR9LyR7TjIua2luZH1gIDogTjEua2luZH1cImApO1xuICAgIH1cbiAgICBfZWxzZU5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBuID0gdGhpcy5fY3Vyck5vZGU7XG4gICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBJZikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJlbHNlXCIgd2l0aG91dCBcImlmXCInKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG4uZWxzZSA9IG5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgX3Jvb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1swXTtcbiAgICB9XG4gICAgZ2V0IF9jdXJyTm9kZSgpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLl9ub2RlcztcbiAgICAgICAgcmV0dXJuIG5zW25zLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBzZXQgX2N1cnJOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLl9ub2RlcztcbiAgICAgICAgbnNbbnMubGVuZ3RoIC0gMV0gPSBub2RlO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29kZUdlbiA9IENvZGVHZW47XG5mdW5jdGlvbiBhZGROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSArIChmcm9tW25dIHx8IDApO1xuICAgIHJldHVybiBuYW1lcztcbn1cbmZ1bmN0aW9uIGFkZEV4cHJOYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIHJldHVybiBmcm9tIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gYWRkTmFtZXMobmFtZXMsIGZyb20ubmFtZXMpIDogbmFtZXM7XG59XG5mdW5jdGlvbiBvcHRpbWl6ZUV4cHIoZXhwciwgbmFtZXMsIGNvbnN0YW50cykge1xuICAgIGlmIChleHByIGluc3RhbmNlb2YgY29kZV8xLk5hbWUpXG4gICAgICAgIHJldHVybiByZXBsYWNlTmFtZShleHByKTtcbiAgICBpZiAoIWNhbk9wdGltaXplKGV4cHIpKVxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICByZXR1cm4gbmV3IGNvZGVfMS5fQ29kZShleHByLl9pdGVtcy5yZWR1Y2UoKGl0ZW1zLCBjKSA9PiB7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgY29kZV8xLk5hbWUpXG4gICAgICAgICAgICBjID0gcmVwbGFjZU5hbWUoYyk7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlKVxuICAgICAgICAgICAgaXRlbXMucHVzaCguLi5jLl9pdGVtcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSkpO1xuICAgIGZ1bmN0aW9uIHJlcGxhY2VOYW1lKG4pIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0YW50c1tuLnN0cl07XG4gICAgICAgIGlmIChjID09PSB1bmRlZmluZWQgfHwgbmFtZXNbbi5zdHJdICE9PSAxKVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIGRlbGV0ZSBuYW1lc1tuLnN0cl07XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW5PcHRpbWl6ZShlKSB7XG4gICAgICAgIHJldHVybiAoZSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSAmJlxuICAgICAgICAgICAgZS5faXRlbXMuc29tZSgoYykgPT4gYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lICYmIG5hbWVzW2Muc3RyXSA9PT0gMSAmJiBjb25zdGFudHNbYy5zdHJdICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgZm9yIChjb25zdCBuIGluIGZyb20pXG4gICAgICAgIG5hbWVzW25dID0gKG5hbWVzW25dIHx8IDApIC0gKGZyb21bbl0gfHwgMCk7XG59XG5mdW5jdGlvbiBub3QoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcImJvb2xlYW5cIiB8fCB0eXBlb2YgeCA9PSBcIm51bWJlclwiIHx8IHggPT09IG51bGwgPyAheCA6ICgwLCBjb2RlXzEuXykgYCEke3Bhcih4KX1gO1xufVxuZXhwb3J0cy5ub3QgPSBub3Q7XG5jb25zdCBhbmRDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5BTkQpO1xuLy8gYm9vbGVhbiBBTkQgKCYmKSBleHByZXNzaW9uIHdpdGggdGhlIHBhc3NlZCBhcmd1bWVudHNcbmZ1bmN0aW9uIGFuZCguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKGFuZENvZGUpO1xufVxuZXhwb3J0cy5hbmQgPSBhbmQ7XG5jb25zdCBvckNvZGUgPSBtYXBwZW5kKGV4cG9ydHMub3BlcmF0b3JzLk9SKTtcbi8vIGJvb2xlYW4gT1IgKHx8KSBleHByZXNzaW9uIHdpdGggdGhlIHBhc3NlZCBhcmd1bWVudHNcbmZ1bmN0aW9uIG9yKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2Uob3JDb2RlKTtcbn1cbmV4cG9ydHMub3IgPSBvcjtcbmZ1bmN0aW9uIG1hcHBlbmQob3ApIHtcbiAgICByZXR1cm4gKHgsIHkpID0+ICh4ID09PSBjb2RlXzEubmlsID8geSA6IHkgPT09IGNvZGVfMS5uaWwgPyB4IDogKDAsIGNvZGVfMS5fKSBgJHtwYXIoeCl9ICR7b3B9ICR7cGFyKHkpfWApO1xufVxuZnVuY3Rpb24gcGFyKHgpIHtcbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8geCA6ICgwLCBjb2RlXzEuXykgYCgke3h9KWA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGVja1N0cmljdE1vZGUgPSBleHBvcnRzLmdldEVycm9yUGF0aCA9IGV4cG9ydHMuVHlwZSA9IGV4cG9ydHMudXNlRnVuYyA9IGV4cG9ydHMuc2V0RXZhbHVhdGVkID0gZXhwb3J0cy5ldmFsdWF0ZWRQcm9wc1RvTmFtZSA9IGV4cG9ydHMubWVyZ2VFdmFsdWF0ZWQgPSBleHBvcnRzLmVhY2hJdGVtID0gZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gZXhwb3J0cy5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBleHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSBleHBvcnRzLnNjaGVtYVJlZk9yVmFsID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0J1dFJlZiA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXMgPSBleHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gZXhwb3J0cy5hbHdheXNWYWxpZFNjaGVtYSA9IGV4cG9ydHMudG9IYXNoID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW4vY29kZVwiKTtcbi8vIFRPRE8gcmVmYWN0b3IgdG8gdXNlIFNldFxuZnVuY3Rpb24gdG9IYXNoKGFycikge1xuICAgIGNvbnN0IGhhc2ggPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKVxuICAgICAgICBoYXNoW2l0ZW1dID0gdHJ1ZTtcbiAgICByZXR1cm4gaGFzaDtcbn1cbmV4cG9ydHMudG9IYXNoID0gdG9IYXNoO1xuZnVuY3Rpb24gYWx3YXlzVmFsaWRTY2hlbWEoaXQsIHNjaGVtYSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIGlmIChPYmplY3Qua2V5cyhzY2hlbWEpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2hlY2tVbmtub3duUnVsZXMoaXQsIHNjaGVtYSk7XG4gICAgcmV0dXJuICFzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIGl0LnNlbGYuUlVMRVMuYWxsKTtcbn1cbmV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBhbHdheXNWYWxpZFNjaGVtYTtcbmZ1bmN0aW9uIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEgPSBpdC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGlmICghb3B0cy5zdHJpY3RTY2hlbWEpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlcyA9IHNlbGYuUlVMRVMua2V5d29yZHM7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmICghcnVsZXNba2V5XSlcbiAgICAgICAgICAgIGNoZWNrU3RyaWN0TW9kZShpdCwgYHVua25vd24ga2V5d29yZDogXCIke2tleX1cImApO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tVbmtub3duUnVsZXMgPSBjaGVja1Vua25vd25SdWxlcztcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzKHNjaGVtYSwgcnVsZXMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAocnVsZXNba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXMgPSBzY2hlbWFIYXNSdWxlcztcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzQnV0UmVmKHNjaGVtYSwgUlVMRVMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAoa2V5ICE9PSBcIiRyZWZcIiAmJiBSVUxFUy5hbGxba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBzY2hlbWFIYXNSdWxlc0J1dFJlZjtcbmZ1bmN0aW9uIHNjaGVtYVJlZk9yVmFsKHsgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoIH0sIHNjaGVtYSwga2V5d29yZCwgJGRhdGEpIHtcbiAgICBpZiAoISRkYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWF9YDtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWA7XG59XG5leHBvcnRzLnNjaGVtYVJlZk9yVmFsID0gc2NoZW1hUmVmT3JWYWw7XG5mdW5jdGlvbiB1bmVzY2FwZUZyYWdtZW50KHN0cikge1xuICAgIHJldHVybiB1bmVzY2FwZUpzb25Qb2ludGVyKGRlY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cbmV4cG9ydHMudW5lc2NhcGVGcmFnbWVudCA9IHVuZXNjYXBlRnJhZ21lbnQ7XG5mdW5jdGlvbiBlc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGVzY2FwZUpzb25Qb2ludGVyKHN0cikpO1xufVxuZXhwb3J0cy5lc2NhcGVGcmFnbWVudCA9IGVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIGAke3N0cn1gO1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcLy9nLCBcIn4xXCIpO1xufVxuZXhwb3J0cy5lc2NhcGVKc29uUG9pbnRlciA9IGVzY2FwZUpzb25Qb2ludGVyO1xuZnVuY3Rpb24gdW5lc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34xL2csIFwiL1wiKS5yZXBsYWNlKC9+MC9nLCBcIn5cIik7XG59XG5leHBvcnRzLnVuZXNjYXBlSnNvblBvaW50ZXIgPSB1bmVzY2FwZUpzb25Qb2ludGVyO1xuZnVuY3Rpb24gZWFjaEl0ZW0oeHMsIGYpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4cykpIHtcbiAgICAgICAgZm9yIChjb25zdCB4IG9mIHhzKVxuICAgICAgICAgICAgZih4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGYoeHMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZWFjaEl0ZW0gPSBlYWNoSXRlbTtcbmZ1bmN0aW9uIG1ha2VNZXJnZUV2YWx1YXRlZCh7IG1lcmdlTmFtZXMsIG1lcmdlVG9OYW1lLCBtZXJnZVZhbHVlcywgcmVzdWx0VG9OYW1lLCB9KSB7XG4gICAgcmV0dXJuIChnZW4sIGZyb20sIHRvLCB0b05hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcmVzID0gdG8gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBmcm9tXG4gICAgICAgICAgICA6IHRvIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWVcbiAgICAgICAgICAgICAgICA/IChmcm9tIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyBtZXJnZU5hbWVzKGdlbiwgZnJvbSwgdG8pIDogbWVyZ2VUb05hbWUoZ2VuLCBmcm9tLCB0byksIHRvKVxuICAgICAgICAgICAgICAgIDogZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgICAgID8gKG1lcmdlVG9OYW1lKGdlbiwgdG8sIGZyb20pLCBmcm9tKVxuICAgICAgICAgICAgICAgICAgICA6IG1lcmdlVmFsdWVzKGZyb20sIHRvKTtcbiAgICAgICAgcmV0dXJuIHRvTmFtZSA9PT0gY29kZWdlbl8xLk5hbWUgJiYgIShyZXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkgPyByZXN1bHRUb05hbWUoZ2VuLCByZXMpIDogcmVzO1xuICAgIH07XG59XG5leHBvcnRzLm1lcmdlRXZhbHVhdGVkID0ge1xuICAgIHByb3BzOiBtYWtlTWVyZ2VFdmFsdWF0ZWQoe1xuICAgICAgICBtZXJnZU5hbWVzOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlICYmICR7ZnJvbX0gIT09IHVuZGVmaW5lZGAsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Zyb219ID09PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgdHJ1ZSksICgpID0+IGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99IHx8IHt9YCkuY29kZSgoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QuYXNzaWduKCR7dG99LCAke2Zyb219KWApKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZyb20gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99IHx8IHt9YCk7XG4gICAgICAgICAgICAgICAgc2V0RXZhbHVhdGVkKGdlbiwgdG8sIGZyb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VWYWx1ZXM6IChmcm9tLCB0bykgPT4gKGZyb20gPT09IHRydWUgPyB0cnVlIDogeyAuLi5mcm9tLCAuLi50byB9KSxcbiAgICAgICAgcmVzdWx0VG9OYW1lOiBldmFsdWF0ZWRQcm9wc1RvTmFtZSxcbiAgICB9KSxcbiAgICBpdGVtczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke2Zyb219ID09PSB0cnVlID8gdHJ1ZSA6ICR7dG99ID4gJHtmcm9tfSA/ICR7dG99IDogJHtmcm9tfWApKSxcbiAgICAgICAgbWVyZ2VUb05hbWU6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWVgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCBmcm9tID09PSB0cnVlID8gdHJ1ZSA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ID4gJHtmcm9tfSA/ICR7dG99IDogJHtmcm9tfWApKSxcbiAgICAgICAgbWVyZ2VWYWx1ZXM6IChmcm9tLCB0bykgPT4gKGZyb20gPT09IHRydWUgPyB0cnVlIDogTWF0aC5tYXgoZnJvbSwgdG8pKSxcbiAgICAgICAgcmVzdWx0VG9OYW1lOiAoZ2VuLCBpdGVtcykgPT4gZ2VuLnZhcihcIml0ZW1zXCIsIGl0ZW1zKSxcbiAgICB9KSxcbn07XG5mdW5jdGlvbiBldmFsdWF0ZWRQcm9wc1RvTmFtZShnZW4sIHBzKSB7XG4gICAgaWYgKHBzID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gZ2VuLnZhcihcInByb3BzXCIsIHRydWUpO1xuICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgaWYgKHBzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcyk7XG4gICAgcmV0dXJuIHByb3BzO1xufVxuZXhwb3J0cy5ldmFsdWF0ZWRQcm9wc1RvTmFtZSA9IGV2YWx1YXRlZFByb3BzVG9OYW1lO1xuZnVuY3Rpb24gc2V0RXZhbHVhdGVkKGdlbiwgcHJvcHMsIHBzKSB7XG4gICAgT2JqZWN0LmtleXMocHMpLmZvckVhY2goKHApID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wc30keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHApfWAsIHRydWUpKTtcbn1cbmV4cG9ydHMuc2V0RXZhbHVhdGVkID0gc2V0RXZhbHVhdGVkO1xuY29uc3Qgc25pcHBldHMgPSB7fTtcbmZ1bmN0aW9uIHVzZUZ1bmMoZ2VuLCBmKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIHJlZjogZixcbiAgICAgICAgY29kZTogc25pcHBldHNbZi5jb2RlXSB8fCAoc25pcHBldHNbZi5jb2RlXSA9IG5ldyBjb2RlXzEuX0NvZGUoZi5jb2RlKSksXG4gICAgfSk7XG59XG5leHBvcnRzLnVzZUZ1bmMgPSB1c2VGdW5jO1xudmFyIFR5cGU7XG4oZnVuY3Rpb24gKFR5cGUpIHtcbiAgICBUeXBlW1R5cGVbXCJOdW1cIl0gPSAwXSA9IFwiTnVtXCI7XG4gICAgVHlwZVtUeXBlW1wiU3RyXCJdID0gMV0gPSBcIlN0clwiO1xufSkoVHlwZSA9IGV4cG9ydHMuVHlwZSB8fCAoZXhwb3J0cy5UeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldEVycm9yUGF0aChkYXRhUHJvcCwgZGF0YVByb3BUeXBlLCBqc1Byb3BlcnR5U3ludGF4KSB7XG4gICAgLy8gbGV0IHBhdGhcbiAgICBpZiAoZGF0YVByb3AgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkge1xuICAgICAgICBjb25zdCBpc051bWJlciA9IGRhdGFQcm9wVHlwZSA9PT0gVHlwZS5OdW07XG4gICAgICAgIHJldHVybiBqc1Byb3BlcnR5U3ludGF4XG4gICAgICAgICAgICA/IGlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGBcIltcIiArICR7ZGF0YVByb3B9ICsgXCJdXCJgXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIlsnXCIgKyAke2RhdGFQcm9wfSArIFwiJ11cImBcbiAgICAgICAgICAgIDogaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH1gXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIi9cIiArICR7ZGF0YVByb3B9LnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXFxcLy9nLCBcIn4xXCIpYDsgLy8gVE9ETyBtYXliZSB1c2UgZ2xvYmFsIGVzY2FwZVBvaW50ZXJcbiAgICB9XG4gICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXggPyAoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCkudG9TdHJpbmcoKSA6IFwiL1wiICsgZXNjYXBlSnNvblBvaW50ZXIoZGF0YVByb3ApO1xufVxuZXhwb3J0cy5nZXRFcnJvclBhdGggPSBnZXRFcnJvclBhdGg7XG5mdW5jdGlvbiBjaGVja1N0cmljdE1vZGUoaXQsIG1zZywgbW9kZSA9IGl0Lm9wdHMuc3RyaWN0U2NoZW1hKSB7XG4gICAgaWYgKCFtb2RlKVxuICAgICAgICByZXR1cm47XG4gICAgbXNnID0gYHN0cmljdCBtb2RlOiAke21zZ31gO1xuICAgIGlmIChtb2RlID09PSB0cnVlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICBpdC5zZWxmLmxvZ2dlci53YXJuKG1zZyk7XG59XG5leHBvcnRzLmNoZWNrU3RyaWN0TW9kZSA9IGNoZWNrU3RyaWN0TW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lcyA9IHtcbiAgICAvLyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgIGRhdGE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImRhdGFcIiksXG4gICAgLy8gYXJncyBwYXNzZWQgZnJvbSByZWZlcmVuY2luZyBzY2hlbWFcbiAgICB2YWxDeHQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZhbEN4dFwiKSxcbiAgICBpbnN0YW5jZVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImluc3RhbmNlUGF0aFwiKSxcbiAgICBwYXJlbnREYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnREYXRhXCIpLFxuICAgIHBhcmVudERhdGFQcm9wZXJ0eTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVByb3BlcnR5XCIpLFxuICAgIHJvb3REYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJyb290RGF0YVwiKSxcbiAgICBkeW5hbWljQW5jaG9yczogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZHluYW1pY0FuY2hvcnNcIiksXG4gICAgLy8gZnVuY3Rpb24gc2NvcGVkIHZhcmlhYmxlc1xuICAgIHZFcnJvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZFcnJvcnNcIiksXG4gICAgZXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJlcnJvcnNcIiksXG4gICAgdGhpczogbmV3IGNvZGVnZW5fMS5OYW1lKFwidGhpc1wiKSxcbiAgICAvLyBcImdsb2JhbHNcIlxuICAgIHNlbGY6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNlbGZcIiksXG4gICAgc2NvcGU6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjb3BlXCIpLFxuICAgIC8vIEpURCBzZXJpYWxpemUvcGFyc2UgbmFtZSBmb3IgSlNPTiBzdHJpbmcgYW5kIHBvc2l0aW9uXG4gICAganNvbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblwiKSxcbiAgICBqc29uUG9zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uUG9zXCIpLFxuICAgIGpzb25MZW46IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25MZW5cIiksXG4gICAganNvblBhcnQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25QYXJ0XCIpLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IG5hbWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXh0ZW5kRXJyb3JzID0gZXhwb3J0cy5yZXNldEVycm9yc0NvdW50ID0gZXhwb3J0cy5yZXBvcnRFeHRyYUVycm9yID0gZXhwb3J0cy5yZXBvcnRFcnJvciA9IGV4cG9ydHMua2V5d29yZCREYXRhRXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuL25hbWVzXCIpO1xuZXhwb3J0cy5rZXl3b3JkRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgcGFzcyBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIHZhbGlkYXRpb25gLFxufTtcbmV4cG9ydHMua2V5d29yZCREYXRhRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hVHlwZSB9KSA9PiBzY2hlbWFUeXBlXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIG11c3QgYmUgJHtzY2hlbWFUeXBlfSAoJGRhdGEpYFxuICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgXCIke2tleXdvcmR9XCIga2V5d29yZCBpcyBpbnZhbGlkICgkZGF0YSlgLFxufTtcbmZ1bmN0aW9uIHJlcG9ydEVycm9yKGN4dCwgZXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciwgZXJyb3JQYXRocywgb3ZlcnJpZGVBbGxFcnJvcnMpIHtcbiAgICBjb25zdCB7IGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGFsbEVycm9ycyB9ID0gaXQ7XG4gICAgY29uc3QgZXJyT2JqID0gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIGlmIChvdmVycmlkZUFsbEVycm9ycyAhPT0gbnVsbCAmJiBvdmVycmlkZUFsbEVycm9ycyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVBbGxFcnJvcnMgOiAoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIGFkZEVycm9yKGdlbiwgZXJyT2JqKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyT2JqfV1gKTtcbiAgICB9XG59XG5leHBvcnRzLnJlcG9ydEVycm9yID0gcmVwb3J0RXJyb3I7XG5mdW5jdGlvbiByZXBvcnRFeHRyYUVycm9yKGN4dCwgZXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIGlmICghKGNvbXBvc2l0ZVJ1bGUgfHwgYWxsRXJyb3JzKSkge1xuICAgICAgICByZXR1cm5FcnJvcnMoaXQsIG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSByZXBvcnRFeHRyYUVycm9yO1xuZnVuY3Rpb24gcmVzZXRFcnJvcnNDb3VudChnZW4sIGVycnNDb3VudCkge1xuICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgZXJyc0NvdW50KTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gIT09IG51bGxgLCAoKSA9PiBnZW4uaWYoZXJyc0NvdW50LCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGAsIGVycnNDb3VudCksICgpID0+IGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsIG51bGwpKSk7XG59XG5leHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSByZXNldEVycm9yc0NvdW50O1xuZnVuY3Rpb24gZXh0ZW5kRXJyb3JzKHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWFWYWx1ZSwgZGF0YSwgZXJyc0NvdW50LCBpdCwgfSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlcnJzQ291bnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIGNvbnN0IGVyciA9IGdlbi5uYW1lKFwiZXJyXCIpO1xuICAgIGdlbi5mb3JSYW5nZShcImlcIiwgZXJyc0NvdW50LCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoaSkgPT4ge1xuICAgICAgICBnZW4uY29uc3QoZXJyLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfVske2l9XWApO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9Lmluc3RhbmNlUGF0aCA9PT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGl0LmVycm9yUGF0aCkpKTtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hUGF0aGAsICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCk7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LnNjaGVtYWAsIHNjaGVtYVZhbHVlKTtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LmRhdGFgLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHRlbmRFcnJvcnM7XG5mdW5jdGlvbiBhZGRFcnJvcihnZW4sIGVyck9iaikge1xuICAgIGNvbnN0IGVyciA9IGdlbi5jb25zdChcImVyclwiLCBlcnJPYmopO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbGAsICgpID0+IGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYFske2Vycn1dYCksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LnB1c2goJHtlcnJ9KWApO1xuICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30rK2ApO1xufVxuZnVuY3Rpb24gcmV0dXJuRXJyb3JzKGl0LCBlcnJzKSB7XG4gICAgY29uc3QgeyBnZW4sIHZhbGlkYXRlTmFtZSwgc2NoZW1hRW52IH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7aXQuVmFsaWRhdGlvbkVycm9yfSgke2VycnN9KWApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgZXJycyk7XG4gICAgICAgIGdlbi5yZXR1cm4oZmFsc2UpO1xuICAgIH1cbn1cbmNvbnN0IEUgPSB7XG4gICAga2V5d29yZDogbmV3IGNvZGVnZW5fMS5OYW1lKFwia2V5d29yZFwiKSxcbiAgICBzY2hlbWFQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY2hlbWFQYXRoXCIpLFxuICAgIHBhcmFtczogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyYW1zXCIpLFxuICAgIHByb3BlcnR5TmFtZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicHJvcGVydHlOYW1lXCIpLFxuICAgIG1lc3NhZ2U6IG5ldyBjb2RlZ2VuXzEuTmFtZShcIm1lc3NhZ2VcIiksXG4gICAgc2NoZW1hOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY2hlbWFcIiksXG4gICAgcGFyZW50U2NoZW1hOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnRTY2hlbWFcIiksXG59O1xuZnVuY3Rpb24gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpIHtcbiAgICBjb25zdCB7IGNyZWF0ZUVycm9ycyB9ID0gY3h0Lml0O1xuICAgIGlmIChjcmVhdGVFcnJvcnMgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBge31gO1xuICAgIHJldHVybiBlcnJvck9iamVjdChjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbn1cbmZ1bmN0aW9uIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMgPSB7fSkge1xuICAgIGNvbnN0IHsgZ2VuLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IGtleVZhbHVlcyA9IFtcbiAgICAgICAgZXJyb3JJbnN0YW5jZVBhdGgoaXQsIGVycm9yUGF0aHMpLFxuICAgICAgICBlcnJvclNjaGVtYVBhdGgoY3h0LCBlcnJvclBhdGhzKSxcbiAgICBdO1xuICAgIGV4dHJhRXJyb3JQcm9wcyhjeHQsIGVycm9yLCBrZXlWYWx1ZXMpO1xuICAgIHJldHVybiBnZW4ub2JqZWN0KC4uLmtleVZhbHVlcyk7XG59XG5mdW5jdGlvbiBlcnJvckluc3RhbmNlUGF0aCh7IGVycm9yUGF0aCB9LCB7IGluc3RhbmNlUGF0aCB9KSB7XG4gICAgY29uc3QgaW5zdFBhdGggPSBpbnN0YW5jZVBhdGhcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyb3JQYXRofSR7KDAsIHV0aWxfMS5nZXRFcnJvclBhdGgpKGluc3RhbmNlUGF0aCwgdXRpbF8xLlR5cGUuU3RyKX1gXG4gICAgICAgIDogZXJyb3JQYXRoO1xuICAgIHJldHVybiBbbmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGluc3RQYXRoKV07XG59XG5mdW5jdGlvbiBlcnJvclNjaGVtYVBhdGgoeyBrZXl3b3JkLCBpdDogeyBlcnJTY2hlbWFQYXRoIH0gfSwgeyBzY2hlbWFQYXRoLCBwYXJlbnRTY2hlbWEgfSkge1xuICAgIGxldCBzY2hQYXRoID0gcGFyZW50U2NoZW1hID8gZXJyU2NoZW1hUGF0aCA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YDtcbiAgICBpZiAoc2NoZW1hUGF0aCkge1xuICAgICAgICBzY2hQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke3NjaFBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoc2NoZW1hUGF0aCwgdXRpbF8xLlR5cGUuU3RyKX1gO1xuICAgIH1cbiAgICByZXR1cm4gW0Uuc2NoZW1hUGF0aCwgc2NoUGF0aF07XG59XG5mdW5jdGlvbiBleHRyYUVycm9yUHJvcHMoY3h0LCB7IHBhcmFtcywgbWVzc2FnZSB9LCBrZXlWYWx1ZXMpIHtcbiAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYVZhbHVlLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgb3B0cywgcHJvcGVydHlOYW1lLCB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGggfSA9IGl0O1xuICAgIGtleVZhbHVlcy5wdXNoKFtFLmtleXdvcmQsIGtleXdvcmRdLCBbRS5wYXJhbXMsIHR5cGVvZiBwYXJhbXMgPT0gXCJmdW5jdGlvblwiID8gcGFyYW1zKGN4dCkgOiBwYXJhbXMgfHwgKDAsIGNvZGVnZW5fMS5fKSBge31gXSk7XG4gICAgaWYgKG9wdHMubWVzc2FnZXMpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UubWVzc2FnZSwgdHlwZW9mIG1lc3NhZ2UgPT0gXCJmdW5jdGlvblwiID8gbWVzc2FnZShjeHQpIDogbWVzc2FnZV0pO1xuICAgIH1cbiAgICBpZiAob3B0cy52ZXJib3NlKSB7XG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLnNjaGVtYSwgc2NoZW1hVmFsdWVdLCBbRS5wYXJlbnRTY2hlbWEsICgwLCBjb2RlZ2VuXzEuXykgYCR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH1gXSwgW25hbWVzXzEuZGVmYXVsdC5kYXRhLCBkYXRhXSk7XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eU5hbWUpXG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLnByb3BlcnR5TmFtZSwgcHJvcGVydHlOYW1lXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBleHBvcnRzLnRvcEJvb2xPckVtcHR5U2NoZW1hID0gdm9pZCAwO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgYm9vbEVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwiYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2VcIixcbn07XG5mdW5jdGlvbiB0b3BCb29sT3JFbXB0eVNjaGVtYShpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG51bGwpO1xuICAgICAgICBnZW4ucmV0dXJuKHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB0b3BCb29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGJvb2xPckVtcHR5U2NoZW1hKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIGZhbHNlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICB9XG59XG5leHBvcnRzLmJvb2xPckVtcHR5U2NoZW1hID0gYm9vbE9yRW1wdHlTY2hlbWE7XG5mdW5jdGlvbiBmYWxzZVNjaGVtYUVycm9yKGl0LCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhIH0gPSBpdDtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgb3RoZXIgaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvciBub24ta2V5d29yZCB2YWxpZGF0aW9uIGVycm9ycy4uLlxuICAgIGNvbnN0IGN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcImZhbHNlIHNjaGVtYVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IGZhbHNlLFxuICAgICAgICBzY2hlbWFDb2RlOiBmYWxzZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IGZhbHNlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCBib29sRXJyb3IsIHVuZGVmaW5lZCwgb3ZlcnJpZGVBbGxFcnJvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbFNjaGVtYS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdWxlcyA9IGV4cG9ydHMuaXNKU09OVHlwZSA9IHZvaWQgMDtcbmNvbnN0IF9qc29uVHlwZXMgPSBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIiwgXCJvYmplY3RcIiwgXCJhcnJheVwiXTtcbmNvbnN0IGpzb25UeXBlcyA9IG5ldyBTZXQoX2pzb25UeXBlcyk7XG5mdW5jdGlvbiBpc0pTT05UeXBlKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJzdHJpbmdcIiAmJiBqc29uVHlwZXMuaGFzKHgpO1xufVxuZXhwb3J0cy5pc0pTT05UeXBlID0gaXNKU09OVHlwZTtcbmZ1bmN0aW9uIGdldFJ1bGVzKCkge1xuICAgIGNvbnN0IGdyb3VwcyA9IHtcbiAgICAgICAgbnVtYmVyOiB7IHR5cGU6IFwibnVtYmVyXCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBzdHJpbmc6IHsgdHlwZTogXCJzdHJpbmdcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFycmF5OiB7IHR5cGU6IFwiYXJyYXlcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIG9iamVjdDogeyB0eXBlOiBcIm9iamVjdFwiLCBydWxlczogW10gfSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGVzOiB7IC4uLmdyb3VwcywgaW50ZWdlcjogdHJ1ZSwgYm9vbGVhbjogdHJ1ZSwgbnVsbDogdHJ1ZSB9LFxuICAgICAgICBydWxlczogW3sgcnVsZXM6IFtdIH0sIGdyb3Vwcy5udW1iZXIsIGdyb3Vwcy5zdHJpbmcsIGdyb3Vwcy5hcnJheSwgZ3JvdXBzLm9iamVjdF0sXG4gICAgICAgIHBvc3Q6IHsgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFsbDoge30sXG4gICAgICAgIGtleXdvcmRzOiB7fSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRSdWxlcyA9IGdldFJ1bGVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVsZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2hvdWxkVXNlUnVsZSA9IGV4cG9ydHMuc2hvdWxkVXNlR3JvdXAgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzRm9yVHlwZSh7IHNjaGVtYSwgc2VsZiB9LCB0eXBlKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBzZWxmLlJVTEVTLnR5cGVzW3R5cGVdO1xuICAgIHJldHVybiBncm91cCAmJiBncm91cCAhPT0gdHJ1ZSAmJiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gc2NoZW1hSGFzUnVsZXNGb3JUeXBlO1xuZnVuY3Rpb24gc2hvdWxkVXNlR3JvdXAoc2NoZW1hLCBncm91cCkge1xuICAgIHJldHVybiBncm91cC5ydWxlcy5zb21lKChydWxlKSA9PiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IHNob3VsZFVzZUdyb3VwO1xuZnVuY3Rpb24gc2hvdWxkVXNlUnVsZShzY2hlbWEsIHJ1bGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChzY2hlbWFbcnVsZS5rZXl3b3JkXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICgoX2EgPSBydWxlLmRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNvbWUoKGt3ZCkgPT4gc2NoZW1hW2t3ZF0gIT09IHVuZGVmaW5lZCkpKTtcbn1cbmV4cG9ydHMuc2hvdWxkVXNlUnVsZSA9IHNob3VsZFVzZVJ1bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBsaWNhYmlsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBleHBvcnRzLmNoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmdldEpTT05UeXBlcyA9IGV4cG9ydHMuZ2V0U2NoZW1hVHlwZXMgPSBleHBvcnRzLkRhdGFUeXBlID0gdm9pZCAwO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuLi9ydWxlc1wiKTtcbmNvbnN0IGFwcGxpY2FiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2FiaWxpdHlcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xudmFyIERhdGFUeXBlO1xuKGZ1bmN0aW9uIChEYXRhVHlwZSkge1xuICAgIERhdGFUeXBlW0RhdGFUeXBlW1wiQ29ycmVjdFwiXSA9IDBdID0gXCJDb3JyZWN0XCI7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJXcm9uZ1wiXSA9IDFdID0gXCJXcm9uZ1wiO1xufSkoRGF0YVR5cGUgPSBleHBvcnRzLkRhdGFUeXBlIHx8IChleHBvcnRzLkRhdGFUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldFNjaGVtYVR5cGVzKHNjaGVtYSkge1xuICAgIGNvbnN0IHR5cGVzID0gZ2V0SlNPTlR5cGVzKHNjaGVtYS50eXBlKTtcbiAgICBjb25zdCBoYXNOdWxsID0gdHlwZXMuaW5jbHVkZXMoXCJudWxsXCIpO1xuICAgIGlmIChoYXNOdWxsKSB7XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2VcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXR5cGVzLmxlbmd0aCAmJiBzY2hlbWEubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm51bGxhYmxlXCIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBcInR5cGVcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IHRydWUpXG4gICAgICAgICAgICB0eXBlcy5wdXNoKFwibnVsbFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGdldFNjaGVtYVR5cGVzO1xuZnVuY3Rpb24gZ2V0SlNPTlR5cGVzKHRzKSB7XG4gICAgY29uc3QgdHlwZXMgPSBBcnJheS5pc0FycmF5KHRzKSA/IHRzIDogdHMgPyBbdHNdIDogW107XG4gICAgaWYgKHR5cGVzLmV2ZXJ5KHJ1bGVzXzEuaXNKU09OVHlwZSkpXG4gICAgICAgIHJldHVybiB0eXBlcztcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG11c3QgYmUgSlNPTlR5cGUgb3IgSlNPTlR5cGVbXTogXCIgKyB0eXBlcy5qb2luKFwiLFwiKSk7XG59XG5leHBvcnRzLmdldEpTT05UeXBlcyA9IGdldEpTT05UeXBlcztcbmZ1bmN0aW9uIGNvZXJjZUFuZENoZWNrRGF0YVR5cGUoaXQsIHR5cGVzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IGNvZXJjZVRvID0gY29lcmNlVG9UeXBlcyh0eXBlcywgb3B0cy5jb2VyY2VUeXBlcyk7XG4gICAgY29uc3QgY2hlY2tUeXBlcyA9IHR5cGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgIShjb2VyY2VUby5sZW5ndGggPT09IDAgJiYgdHlwZXMubGVuZ3RoID09PSAxICYmICgwLCBhcHBsaWNhYmlsaXR5XzEuc2NoZW1hSGFzUnVsZXNGb3JUeXBlKShpdCwgdHlwZXNbMF0pKTtcbiAgICBpZiAoY2hlY2tUeXBlcykge1xuICAgICAgICBjb25zdCB3cm9uZ1R5cGUgPSBjaGVja0RhdGFUeXBlcyh0eXBlcywgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzLCBEYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgIGdlbi5pZih3cm9uZ1R5cGUsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2VyY2VUby5sZW5ndGgpXG4gICAgICAgICAgICAgICAgY29lcmNlRGF0YShpdCwgdHlwZXMsIGNvZXJjZVRvKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrVHlwZXM7XG59XG5leHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBjb2VyY2VBbmRDaGVja0RhdGFUeXBlO1xuY29uc3QgQ09FUkNJQkxFID0gbmV3IFNldChbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIl0pO1xuZnVuY3Rpb24gY29lcmNlVG9UeXBlcyh0eXBlcywgY29lcmNlVHlwZXMpIHtcbiAgICByZXR1cm4gY29lcmNlVHlwZXNcbiAgICAgICAgPyB0eXBlcy5maWx0ZXIoKHQpID0+IENPRVJDSUJMRS5oYXModCkgfHwgKGNvZXJjZVR5cGVzID09PSBcImFycmF5XCIgJiYgdCA9PT0gXCJhcnJheVwiKSlcbiAgICAgICAgOiBbXTtcbn1cbmZ1bmN0aW9uIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGdlbi5sZXQoXCJkYXRhVHlwZVwiLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfWApO1xuICAgIGNvbnN0IGNvZXJjZWQgPSBnZW4ubGV0KFwiY29lcmNlZFwiLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICBpZiAob3B0cy5jb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KCR7ZGF0YX0pICYmICR7ZGF0YX0ubGVuZ3RoID09IDFgLCAoKSA9PiBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfVswXWApXG4gICAgICAgICAgICAuYXNzaWduKGRhdGFUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfWApXG4gICAgICAgICAgICAuaWYoY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycyksICgpID0+IGdlbi5hc3NpZ24oY29lcmNlZCwgZGF0YSkpKTtcbiAgICB9XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y29lcmNlZH0gIT09IHVuZGVmaW5lZGApO1xuICAgIGZvciAoY29uc3QgdCBvZiBjb2VyY2VUbykge1xuICAgICAgICBpZiAoQ09FUkNJQkxFLmhhcyh0KSB8fCAodCA9PT0gXCJhcnJheVwiICYmIG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikpIHtcbiAgICAgICAgICAgIGNvZXJjZVNwZWNpZmljVHlwZSh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZW4uZWxzZSgpO1xuICAgIHJlcG9ydFR5cGVFcnJvcihpdCk7XG4gICAgZ2VuLmVuZElmKCk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y29lcmNlZH0gIT09IHVuZGVmaW5lZGAsICgpID0+IHtcbiAgICAgICAgZ2VuLmFzc2lnbihkYXRhLCBjb2VyY2VkKTtcbiAgICAgICAgYXNzaWduUGFyZW50RGF0YShpdCwgY29lcmNlZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY29lcmNlU3BlY2lmaWNUeXBlKHQpIHtcbiAgICAgICAgc3dpdGNoICh0KSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gXCJudW1iZXJcIiB8fCAke2RhdGFUeXBlfSA9PSBcImJvb2xlYW5cImApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcIiArICR7ZGF0YX1gKVxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbFxuICAgICAgICAgICAgICB8fCAoJHtkYXRhVHlwZX0gPT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0pYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09PSBcInN0cmluZ1wiICYmICR7ZGF0YX0gJiYgJHtkYXRhfSA9PSArJHtkYXRhfSAmJiAhKCR7ZGF0YX0gJSAxKSlgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYCske2RhdGF9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcImZhbHNlXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcInRydWVcIiB8fCAke2RhdGF9ID09PSAxYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIGdlbi5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJcIiB8fCAke2RhdGF9ID09PSAwIHx8ICR7ZGF0YX0gPT09IGZhbHNlYCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihjb2VyY2VkLCBudWxsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiB8fCAke2RhdGFUeXBlfSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICB8fCAke2RhdGFUeXBlfSA9PT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZGF0YX1dYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhc3NpZ25QYXJlbnREYXRhKHsgZ2VuLCBwYXJlbnREYXRhLCBwYXJlbnREYXRhUHJvcGVydHkgfSwgZXhwcikge1xuICAgIC8vIFRPRE8gdXNlIGdlbi5wcm9wZXJ0eVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cGFyZW50RGF0YX1bJHtwYXJlbnREYXRhUHJvcGVydHl9XWAsIGV4cHIpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QgPSBEYXRhVHlwZS5Db3JyZWN0KSB7XG4gICAgY29uc3QgRVEgPSBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29kZWdlbl8xLm9wZXJhdG9ycy5FUSA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTkVRO1xuICAgIGxldCBjb25kO1xuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7RVF9IG51bGxgO1xuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAmJiB0eXBlb2YgJHtkYXRhfSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgY29uZCA9IG51bUNvbmQoKDAsIGNvZGVnZW5fMS5fKSBgISgke2RhdGF9ICUgMSkgJiYgIWlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgY29uZCA9IG51bUNvbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ICR7RVF9ICR7ZGF0YVR5cGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGNvcnJlY3QgPT09IERhdGFUeXBlLkNvcnJlY3QgPyBjb25kIDogKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmQpO1xuICAgIGZ1bmN0aW9uIG51bUNvbmQoX2NvbmQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLmFuZCkoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gPT0gXCJudW1iZXJcImAsIF9jb25kLCBzdHJpY3ROdW1zID8gKDAsIGNvZGVnZW5fMS5fKSBgaXNGaW5pdGUoJHtkYXRhfSlgIDogY29kZWdlbl8xLm5pbCk7XG4gICAgfVxufVxuZXhwb3J0cy5jaGVja0RhdGFUeXBlID0gY2hlY2tEYXRhVHlwZTtcbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGVzKGRhdGFUeXBlcywgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCkge1xuICAgIGlmIChkYXRhVHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlc1swXSwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCk7XG4gICAgfVxuICAgIGxldCBjb25kO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIHV0aWxfMS50b0hhc2gpKGRhdGFUeXBlcyk7XG4gICAgaWYgKHR5cGVzLmFycmF5ICYmIHR5cGVzLm9iamVjdCkge1xuICAgICAgICBjb25zdCBub3RPYmogPSAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAhPSBcIm9iamVjdFwiYDtcbiAgICAgICAgY29uZCA9IHR5cGVzLm51bGwgPyBub3RPYmogOiAoMCwgY29kZWdlbl8xLl8pIGAhJHtkYXRhfSB8fCAke25vdE9ian1gO1xuICAgICAgICBkZWxldGUgdHlwZXMubnVsbDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLmFycmF5O1xuICAgICAgICBkZWxldGUgdHlwZXMub2JqZWN0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uZCA9IGNvZGVnZW5fMS5uaWw7XG4gICAgfVxuICAgIGlmICh0eXBlcy5udW1iZXIpXG4gICAgICAgIGRlbGV0ZSB0eXBlcy5pbnRlZ2VyO1xuICAgIGZvciAoY29uc3QgdCBpbiB0eXBlcylcbiAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuYW5kKShjb25kLCBjaGVja0RhdGFUeXBlKHQsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpKTtcbiAgICByZXR1cm4gY29uZDtcbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBjaGVja0RhdGFUeXBlcztcbmNvbnN0IHR5cGVFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWEgfSkgPT4gYG11c3QgYmUgJHtzY2hlbWF9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYSwgc2NoZW1hVmFsdWUgfSkgPT4gdHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiID8gKDAsIGNvZGVnZW5fMS5fKSBge3R5cGU6ICR7c2NoZW1hfX1gIDogKDAsIGNvZGVnZW5fMS5fKSBge3R5cGU6ICR7c2NoZW1hVmFsdWV9fWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0VHlwZUVycm9yKGl0KSB7XG4gICAgY29uc3QgY3h0ID0gZ2V0VHlwZUVycm9yQ29udGV4dChpdCk7XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIHR5cGVFcnJvcik7XG59XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IHJlcG9ydFR5cGVFcnJvcjtcbmZ1bmN0aW9uIGdldFR5cGVFcnJvckNvbnRleHQoaXQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hIH0gPSBpdDtcbiAgICBjb25zdCBzY2hlbWFDb2RlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHNjaGVtYSwgXCJ0eXBlXCIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdlbixcbiAgICAgICAga2V5d29yZDogXCJ0eXBlXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hLnR5cGUsXG4gICAgICAgIHNjaGVtYUNvZGUsXG4gICAgICAgIHNjaGVtYVZhbHVlOiBzY2hlbWFDb2RlLFxuICAgICAgICBwYXJlbnRTY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgcGFyYW1zOiB7fSxcbiAgICAgICAgaXQsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGFUeXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmZ1bmN0aW9uIGFzc2lnbkRlZmF1bHRzKGl0LCB0eSkge1xuICAgIGNvbnN0IHsgcHJvcGVydGllcywgaXRlbXMgfSA9IGl0LnNjaGVtYTtcbiAgICBpZiAodHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBhc3NpZ25EZWZhdWx0KGl0LCBrZXksIHByb3BlcnRpZXNba2V5XS5kZWZhdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eSA9PT0gXCJhcnJheVwiICYmIEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKHNjaCwgaSkgPT4gYXNzaWduRGVmYXVsdChpdCwgaSwgc2NoLmRlZmF1bHQpKTtcbiAgICB9XG59XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gYXNzaWduRGVmYXVsdHM7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0KGl0LCBwcm9wLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgY2hpbGREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcCl9YDtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBkZWZhdWx0IGlzIGlnbm9yZWQgZm9yOiAke2NoaWxkRGF0YX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgO1xuICAgIGlmIChvcHRzLnVzZURlZmF1bHRzID09PSBcImVtcHR5XCIpIHtcbiAgICAgICAgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kaXRpb259IHx8ICR7Y2hpbGREYXRhfSA9PT0gbnVsbCB8fCAke2NoaWxkRGF0YX0gPT09IFwiXCJgO1xuICAgIH1cbiAgICAvLyBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgICtcbiAgICAvLyAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiID8gYCB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYCA6IFwiXCIpXG4gICAgZ2VuLmlmKGNvbmRpdGlvbiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID0gJHsoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoZGVmYXVsdFZhbHVlKX1gKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVW5pb24gPSBleHBvcnRzLnZhbGlkYXRlQXJyYXkgPSBleHBvcnRzLnVzZVBhdHRlcm4gPSBleHBvcnRzLmNhbGxWYWxpZGF0ZUNvZGUgPSBleHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBleHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBleHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBleHBvcnRzLnByb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5pc093blByb3BlcnR5ID0gZXhwb3J0cy5oYXNQcm9wRnVuYyA9IGV4cG9ydHMucmVwb3J0TWlzc2luZ1Byb3AgPSBleHBvcnRzLmNoZWNrTWlzc2luZ1Byb3AgPSBleHBvcnRzLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3AgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5mdW5jdGlvbiBjaGVja1JlcG9ydE1pc3NpbmdQcm9wKGN4dCwgcHJvcCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGdlbi5pZihub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiAoMCwgY29kZWdlbl8xLl8pIGAke3Byb3B9YCB9LCB0cnVlKTtcbiAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3AgPSBjaGVja1JlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gY2hlY2tNaXNzaW5nUHJvcCh7IGdlbiwgZGF0YSwgaXQ6IHsgb3B0cyB9IH0sIHByb3BlcnRpZXMsIG1pc3NpbmcpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikoLi4ucHJvcGVydGllcy5tYXAoKHByb3ApID0+ICgwLCBjb2RlZ2VuXzEuYW5kKShub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHttaXNzaW5nfSA9ICR7cHJvcH1gKSkpO1xufVxuZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gY2hlY2tNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIHJlcG9ydE1pc3NpbmdQcm9wKGN4dCwgbWlzc2luZykge1xuICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IG1pc3NpbmcgfSwgdHJ1ZSk7XG4gICAgY3h0LmVycm9yKCk7XG59XG5leHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gcmVwb3J0TWlzc2luZ1Byb3A7XG5mdW5jdGlvbiBoYXNQcm9wRnVuYyhnZW4pIHtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJmdW5jXCIsIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICByZWY6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlgLFxuICAgIH0pO1xufVxuZXhwb3J0cy5oYXNQcm9wRnVuYyA9IGhhc1Byb3BGdW5jO1xuZnVuY3Rpb24gaXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcEZ1bmMoZ2VuKX0uY2FsbCgke2RhdGF9LCAke3Byb3BlcnR5fSlgO1xufVxuZXhwb3J0cy5pc093blByb3BlcnR5ID0gaXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIHByb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcGVydHksIG93blByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcGVydHkpfSAhPT0gdW5kZWZpbmVkYDtcbiAgICByZXR1cm4gb3duUHJvcGVydGllcyA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZH0gJiYgJHtpc093blByb3BlcnR5KGdlbiwgZGF0YSwgcHJvcGVydHkpfWAgOiBjb25kO1xufVxuZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IHByb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gbm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gPT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLm9yKShjb25kLCAoMCwgY29kZWdlbl8xLm5vdCkoaXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KSkpIDogY29uZDtcbn1cbmV4cG9ydHMubm9Qcm9wZXJ0eUluRGF0YSA9IG5vUHJvcGVydHlJbkRhdGE7XG5mdW5jdGlvbiBhbGxTY2hlbWFQcm9wZXJ0aWVzKHNjaGVtYU1hcCkge1xuICAgIHJldHVybiBzY2hlbWFNYXAgPyBPYmplY3Qua2V5cyhzY2hlbWFNYXApLmZpbHRlcigocCkgPT4gcCAhPT0gXCJfX3Byb3RvX19cIikgOiBbXTtcbn1cbmV4cG9ydHMuYWxsU2NoZW1hUHJvcGVydGllcyA9IGFsbFNjaGVtYVByb3BlcnRpZXM7XG5mdW5jdGlvbiBzY2hlbWFQcm9wZXJ0aWVzKGl0LCBzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApLmZpbHRlcigocCkgPT4gISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFNYXBbcF0pKTtcbn1cbmV4cG9ydHMuc2NoZW1hUHJvcGVydGllcyA9IHNjaGVtYVByb3BlcnRpZXM7XG5mdW5jdGlvbiBjYWxsVmFsaWRhdGVDb2RlKHsgc2NoZW1hQ29kZSwgZGF0YSwgaXQ6IHsgZ2VuLCB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGgsIGVycm9yUGF0aCB9LCBpdCB9LCBmdW5jLCBjb250ZXh0LCBwYXNzU2NoZW1hKSB7XG4gICAgY29uc3QgZGF0YUFuZFNjaGVtYSA9IHBhc3NTY2hlbWEgPyAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9LCAke2RhdGF9LCAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9YCA6IGRhdGE7XG4gICAgY29uc3QgdmFsQ3h0ID0gW1xuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGVycm9yUGF0aCldLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsIGl0LnBhcmVudERhdGFdLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgaXQucGFyZW50RGF0YVByb3BlcnR5XSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhXSxcbiAgICBdO1xuICAgIGlmIChpdC5vcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgIHZhbEN4dC5wdXNoKFtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsIG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc10pO1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFBbmRTY2hlbWF9LCAke2dlbi5vYmplY3QoLi4udmFsQ3h0KX1gO1xuICAgIHJldHVybiBjb250ZXh0ICE9PSBjb2RlZ2VuXzEubmlsID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtmdW5jfS5jYWxsKCR7Y29udGV4dH0sICR7YXJnc30pYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30oJHthcmdzfSlgO1xufVxuZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gY2FsbFZhbGlkYXRlQ29kZTtcbmNvbnN0IG5ld1JlZ0V4cCA9ICgwLCBjb2RlZ2VuXzEuXykgYG5ldyBSZWdFeHBgO1xuZnVuY3Rpb24gdXNlUGF0dGVybih7IGdlbiwgaXQ6IHsgb3B0cyB9IH0sIHBhdHRlcm4pIHtcbiAgICBjb25zdCB1ID0gb3B0cy51bmljb2RlUmVnRXhwID8gXCJ1XCIgOiBcIlwiO1xuICAgIGNvbnN0IHsgcmVnRXhwIH0gPSBvcHRzLmNvZGU7XG4gICAgY29uc3QgcnggPSByZWdFeHAocGF0dGVybiwgdSk7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwicGF0dGVyblwiLCB7XG4gICAgICAgIGtleTogcngudG9TdHJpbmcoKSxcbiAgICAgICAgcmVmOiByeCxcbiAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgJHtyZWdFeHAuY29kZSA9PT0gXCJuZXcgUmVnRXhwXCIgPyBuZXdSZWdFeHAgOiAoMCwgdXRpbF8yLnVzZUZ1bmMpKGdlbiwgcmVnRXhwKX0oJHtwYXR0ZXJufSwgJHt1fSlgLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VQYXR0ZXJuID0gdXNlUGF0dGVybjtcbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRBcnIgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgIHZhbGlkYXRlSXRlbXMoKCkgPT4gZ2VuLmFzc2lnbih2YWxpZEFyciwgZmFsc2UpKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkQXJyO1xuICAgIH1cbiAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTtcbiAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5icmVhaygpKTtcbiAgICByZXR1cm4gdmFsaWQ7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyhub3RWYWxpZCkge1xuICAgICAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCAwLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuTnVtLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksIG5vdFZhbGlkKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gdmFsaWRhdGVBcnJheTtcbmZ1bmN0aW9uIHZhbGlkYXRlVW5pb24oY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIGNvbnN0IGFsd2F5c1ZhbGlkID0gc2NoZW1hLnNvbWUoKHNjaCkgPT4gKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpO1xuICAgIGlmIChhbHdheXNWYWxpZCAmJiAhaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgIGdlbi5ibG9jaygoKSA9PiBzY2hlbWEuZm9yRWFjaCgoX3NjaCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkfSB8fCAke3NjaFZhbGlkfWApO1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHNjaFZhbGlkKTtcbiAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllcy9JdGVtc2Agbm90IHN1cHBvcnRlZCAob3B0cy51bmV2YWx1YXRlZCAhPT0gdHJ1ZSlcbiAgICAgICAgLy8gb3IgaWYgYWxsIHByb3BlcnRpZXMgYW5kIGl0ZW1zIHdlcmUgZXZhbHVhdGVkIChpdC5wcm9wcyA9PT0gdHJ1ZSAmJiBpdC5pdGVtcyA9PT0gdHJ1ZSlcbiAgICAgICAgaWYgKCFtZXJnZWQpXG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSk7XG4gICAgfSkpO1xuICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gdmFsaWRhdGVVbmlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvZGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVLZXl3b3JkVXNhZ2UgPSBleHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IGV4cG9ydHMuZnVuY0tleXdvcmRDb2RlID0gZXhwb3J0cy5tYWNyb0tleXdvcmRDb2RlID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uLy4uL3ZvY2FidWxhcmllcy9jb2RlXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuZnVuY3Rpb24gbWFjcm9LZXl3b3JkQ29kZShjeHQsIGRlZikge1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCBtYWNyb1NjaGVtYSA9IGRlZi5tYWNyby5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIG1hY3JvU2NoZW1hKTtcbiAgICBpZiAoaXQub3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UpXG4gICAgICAgIGl0LnNlbGYudmFsaWRhdGVTY2hlbWEobWFjcm9TY2hlbWEsIHRydWUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgc2NoZW1hOiBtYWNyb1NjaGVtYSxcbiAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgIHRvcFNjaGVtYVJlZjogc2NoZW1hUmVmLFxuICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgIH0sIHZhbGlkKTtcbiAgICBjeHQucGFzcyh2YWxpZCwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IG1hY3JvS2V5d29yZENvZGU7XG5mdW5jdGlvbiBmdW5jS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgeyBnZW4sIGtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCAkZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBjaGVja0FzeW5jS2V5d29yZChpdCwgZGVmKTtcbiAgICBjb25zdCB2YWxpZGF0ZSA9ICEkZGF0YSAmJiBkZWYuY29tcGlsZSA/IGRlZi5jb21waWxlLmNhbGwoaXQuc2VsZiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSA6IGRlZi52YWxpZGF0ZTtcbiAgICBjb25zdCB2YWxpZGF0ZVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCB2YWxpZGF0ZSk7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlS2V5d29yZCk7XG4gICAgY3h0Lm9rKChfYSA9IGRlZi52YWxpZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsaWQpO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZCgpIHtcbiAgICAgICAgaWYgKGRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhc3NpZ25WYWxpZCgpO1xuICAgICAgICAgICAgaWYgKGRlZi5tb2RpZnlpbmcpXG4gICAgICAgICAgICAgICAgbW9kaWZ5RGF0YShjeHQpO1xuICAgICAgICAgICAgcmVwb3J0RXJycygoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBydWxlRXJycyA9IGRlZi5hc3luYyA/IHZhbGlkYXRlQXN5bmMoKSA6IHZhbGlkYXRlU3luYygpO1xuICAgICAgICAgICAgaWYgKGRlZi5tb2RpZnlpbmcpXG4gICAgICAgICAgICAgICAgbW9kaWZ5RGF0YShjeHQpO1xuICAgICAgICAgICAgcmVwb3J0RXJycygoKSA9PiBhZGRFcnJzKGN4dCwgcnVsZUVycnMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUFzeW5jKCkge1xuICAgICAgICBjb25zdCBydWxlRXJycyA9IGdlbi5sZXQoXCJydWxlRXJyc1wiLCBudWxsKTtcbiAgICAgICAgZ2VuLnRyeSgoKSA9PiBhc3NpZ25WYWxpZCgoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCBgKSwgKGUpID0+IGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5pZigoMCwgY29kZWdlbl8xLl8pIGAke2V9IGluc3RhbmNlb2YgJHtpdC5WYWxpZGF0aW9uRXJyb3J9YCwgKCkgPT4gZ2VuLmFzc2lnbihydWxlRXJycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtlfS5lcnJvcnNgKSwgKCkgPT4gZ2VuLnRocm93KGUpKSk7XG4gICAgICAgIHJldHVybiBydWxlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTeW5jKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUVycnMgPSAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlUmVmfS5lcnJvcnNgO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkYXRlRXJycywgbnVsbCk7XG4gICAgICAgIGFzc2lnblZhbGlkKGNvZGVnZW5fMS5uaWwpO1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVFcnJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3NpZ25WYWxpZChfYXdhaXQgPSBkZWYuYXN5bmMgPyAoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCBgIDogY29kZWdlbl8xLm5pbCkge1xuICAgICAgICBjb25zdCBwYXNzQ3h0ID0gaXQub3B0cy5wYXNzQ29udGV4dCA/IG5hbWVzXzEuZGVmYXVsdC50aGlzIDogbmFtZXNfMS5kZWZhdWx0LnNlbGY7XG4gICAgICAgIGNvbnN0IHBhc3NTY2hlbWEgPSAhKChcImNvbXBpbGVcIiBpbiBkZWYgJiYgISRkYXRhKSB8fCBkZWYuc2NoZW1hID09PSBmYWxzZSk7XG4gICAgICAgIGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7X2F3YWl0fSR7KDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHZhbGlkYXRlUmVmLCBwYXNzQ3h0LCBwYXNzU2NoZW1hKX1gLCBkZWYubW9kaWZ5aW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVwb3J0RXJycyhlcnJvcnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKChfYSA9IGRlZi52YWxpZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsaWQpLCBlcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZnVuY0tleXdvcmRDb2RlID0gZnVuY0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gbW9kaWZ5RGF0YShjeHQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYoaXQucGFyZW50RGF0YSwgKCkgPT4gZ2VuLmFzc2lnbihkYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnBhcmVudERhdGF9WyR7aXQucGFyZW50RGF0YVByb3BlcnR5fV1gKSk7XG59XG5mdW5jdGlvbiBhZGRFcnJzKGN4dCwgZXJycykge1xuICAgIGNvbnN0IHsgZ2VuIH0gPSBjeHQ7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYEFycmF5LmlzQXJyYXkoJHtlcnJzfSlgLCAoKSA9PiB7XG4gICAgICAgIGdlblxuICAgICAgICAgICAgLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gPT09IG51bGwgPyAke2VycnN9IDogJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30uY29uY2F0KCR7ZXJyc30pYClcbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5leHRlbmRFcnJvcnMpKGN4dCk7XG4gICAgfSwgKCkgPT4gY3h0LmVycm9yKCkpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY0tleXdvcmQoeyBzY2hlbWFFbnYgfSwgZGVmKSB7XG4gICAgaWYgKGRlZi5hc3luYyAmJiAhc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMga2V5d29yZCBpbiBzeW5jIHNjaGVtYVwiKTtcbn1cbmZ1bmN0aW9uIHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCByZXN1bHQpIHtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5d29yZCBcIiR7a2V5d29yZH1cIiBmYWlsZWQgdG8gY29tcGlsZWApO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImtleXdvcmRcIiwgdHlwZW9mIHJlc3VsdCA9PSBcImZ1bmN0aW9uXCIgPyB7IHJlZjogcmVzdWx0IH0gOiB7IHJlZjogcmVzdWx0LCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkocmVzdWx0KSB9KTtcbn1cbmZ1bmN0aW9uIHZhbGlkU2NoZW1hVHlwZShzY2hlbWEsIHNjaGVtYVR5cGUsIGFsbG93VW5kZWZpbmVkID0gZmFsc2UpIHtcbiAgICAvLyBUT0RPIGFkZCB0ZXN0c1xuICAgIHJldHVybiAoIXNjaGVtYVR5cGUubGVuZ3RoIHx8XG4gICAgICAgIHNjaGVtYVR5cGUuc29tZSgoc3QpID0+IHN0ID09PSBcImFycmF5XCJcbiAgICAgICAgICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICA6IHN0ID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgPyBzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHNjaGVtYSlcbiAgICAgICAgICAgICAgICA6IHR5cGVvZiBzY2hlbWEgPT0gc3QgfHwgKGFsbG93VW5kZWZpbmVkICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJ1bmRlZmluZWRcIikpKTtcbn1cbmV4cG9ydHMudmFsaWRTY2hlbWFUeXBlID0gdmFsaWRTY2hlbWFUeXBlO1xuZnVuY3Rpb24gdmFsaWRhdGVLZXl3b3JkVXNhZ2UoeyBzY2hlbWEsIG9wdHMsIHNlbGYsIGVyclNjaGVtYVBhdGggfSwgZGVmLCBrZXl3b3JkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmLmtleXdvcmQpID8gIWRlZi5rZXl3b3JkLmluY2x1ZGVzKGtleXdvcmQpIDogZGVmLmtleXdvcmQgIT09IGtleXdvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZXBzID0gZGVmLmRlcGVuZGVuY2llcztcbiAgICBpZiAoZGVwcyA9PT0gbnVsbCB8fCBkZXBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXBzLnNvbWUoKGt3ZCkgPT4gIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzY2hlbWEsIGt3ZCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFyZW50IHNjaGVtYSBtdXN0IGhhdmUgZGVwZW5kZW5jaWVzIG9mICR7a2V5d29yZH06ICR7ZGVwcy5qb2luKFwiLFwiKX1gKTtcbiAgICB9XG4gICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGRlZi52YWxpZGF0ZVNjaGVtYShzY2hlbWFba2V5d29yZF0pO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBga2V5d29yZCBcIiR7a2V5d29yZH1cIiB2YWx1ZSBpcyBpbnZhbGlkIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCI6IGAgK1xuICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzVGV4dChkZWYudmFsaWRhdGVTY2hlbWEuZXJyb3JzKTtcbiAgICAgICAgICAgIGlmIChvcHRzLnZhbGlkYXRlU2NoZW1hID09PSBcImxvZ1wiKVxuICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKG1zZyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gdmFsaWRhdGVLZXl3b3JkVXNhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXl3b3JkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYU1vZGUgPSBleHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHBvcnRzLmdldFN1YnNjaGVtYSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBnZXRTdWJzY2hlbWEoaXQsIHsga2V5d29yZCwgc2NoZW1hUHJvcCwgc2NoZW1hLCBzY2hlbWFQYXRoLCBlcnJTY2hlbWFQYXRoLCB0b3BTY2hlbWFSZWYgfSkge1xuICAgIGlmIChrZXl3b3JkICE9PSB1bmRlZmluZWQgJiYgc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdib3RoIFwia2V5d29yZFwiIGFuZCBcInNjaGVtYVwiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO1xuICAgIH1cbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHNjaGVtYVByb3AgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2gsXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5zY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9YCxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoW3NjaGVtYVByb3BdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoc2NoZW1hUHJvcCl9YCxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9LyR7KDAsIHV0aWxfMS5lc2NhcGVGcmFnbWVudCkoc2NoZW1hUHJvcCl9YCxcbiAgICAgICAgICAgIH07XG4gICAgfVxuICAgIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc2NoZW1hUGF0aCA9PT0gdW5kZWZpbmVkIHx8IGVyclNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCB0b3BTY2hlbWFSZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInNjaGVtYVBhdGhcIiwgXCJlcnJTY2hlbWFQYXRoXCIgYW5kIFwidG9wU2NoZW1hUmVmXCIgYXJlIHJlcXVpcmVkIHdpdGggXCJzY2hlbWFcIicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBzY2hlbWFQYXRoLFxuICAgICAgICAgICAgdG9wU2NoZW1hUmVmLFxuICAgICAgICAgICAgZXJyU2NoZW1hUGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlaXRoZXIgXCJrZXl3b3JkXCIgb3IgXCJzY2hlbWFcIiBtdXN0IGJlIHBhc3NlZCcpO1xufVxuZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSBnZXRTdWJzY2hlbWE7XG5mdW5jdGlvbiBleHRlbmRTdWJzY2hlbWFEYXRhKHN1YnNjaGVtYSwgaXQsIHsgZGF0YVByb3AsIGRhdGFQcm9wVHlwZTogZHBUeXBlLCBkYXRhLCBkYXRhVHlwZXMsIHByb3BlcnR5TmFtZSB9KSB7XG4gICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCAmJiBkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImRhdGFcIiBhbmQgXCJkYXRhUHJvcFwiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO1xuICAgIH1cbiAgICBjb25zdCB7IGdlbiB9ID0gaXQ7XG4gICAgaWYgKGRhdGFQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyBlcnJvclBhdGgsIGRhdGFQYXRoQXJyLCBvcHRzIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBnZW4ubGV0KFwiZGF0YVwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0LmRhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCl9YCwgdHJ1ZSk7XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBzdWJzY2hlbWEuZXJyb3JQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke2Vycm9yUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShkYXRhUHJvcCwgZHBUeXBlLCBvcHRzLmpzUHJvcGVydHlTeW50YXgpfWA7XG4gICAgICAgIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHkgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFQcm9wfWA7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhUGF0aEFyciA9IFsuLi5kYXRhUGF0aEFyciwgc3Vic2NoZW1hLnBhcmVudERhdGFQcm9wZXJ0eV07XG4gICAgfVxuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBkYXRhIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyBkYXRhIDogZ2VuLmxldChcImRhdGFcIiwgZGF0YSwgdHJ1ZSk7IC8vIHJlcGxhY2VhYmxlIGlmIHVzZWQgb25jZT9cbiAgICAgICAgZGF0YUNvbnRleHRQcm9wcyhuZXh0RGF0YSk7XG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHN1YnNjaGVtYS5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG4gICAgICAgIC8vIFRPRE8gc29tZXRoaW5nIGlzIHBvc3NpYmx5IHdyb25nIGhlcmUgd2l0aCBub3QgY2hhbmdpbmcgcGFyZW50RGF0YVByb3BlcnR5IGFuZCBub3QgYXBwZW5kaW5nIGRhdGFQYXRoQXJyXG4gICAgfVxuICAgIGlmIChkYXRhVHlwZXMpXG4gICAgICAgIHN1YnNjaGVtYS5kYXRhVHlwZXMgPSBkYXRhVHlwZXM7XG4gICAgZnVuY3Rpb24gZGF0YUNvbnRleHRQcm9wcyhfbmV4dERhdGEpIHtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGEgPSBfbmV4dERhdGE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gW107XG4gICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YSA9IGl0LmRhdGE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhTmFtZXMgPSBbLi4uaXQuZGF0YU5hbWVzLCBfbmV4dERhdGFdO1xuICAgIH1cbn1cbmV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hRGF0YSA9IGV4dGVuZFN1YnNjaGVtYURhdGE7XG5mdW5jdGlvbiBleHRlbmRTdWJzY2hlbWFNb2RlKHN1YnNjaGVtYSwgeyBqdGREaXNjcmltaW5hdG9yLCBqdGRNZXRhZGF0YSwgY29tcG9zaXRlUnVsZSwgY3JlYXRlRXJyb3JzLCBhbGxFcnJvcnMgfSkge1xuICAgIGlmIChjb21wb3NpdGVSdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5jb21wb3NpdGVSdWxlID0gY29tcG9zaXRlUnVsZTtcbiAgICBpZiAoY3JlYXRlRXJyb3JzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5jcmVhdGVFcnJvcnMgPSBjcmVhdGVFcnJvcnM7XG4gICAgaWYgKGFsbEVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuYWxsRXJyb3JzID0gYWxsRXJyb3JzO1xuICAgIHN1YnNjaGVtYS5qdGREaXNjcmltaW5hdG9yID0ganRkRGlzY3JpbWluYXRvcjsgLy8gbm90IGluaGVyaXRlZFxuICAgIHN1YnNjaGVtYS5qdGRNZXRhZGF0YSA9IGp0ZE1ldGFkYXRhOyAvLyBub3QgaW5oZXJpdGVkXG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYU1vZGUgPSBleHRlbmRTdWJzY2hlbWFNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NoZW1hLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBleHBvcnRzLnJlc29sdmVVcmwgPSBleHBvcnRzLm5vcm1hbGl6ZUlkID0gZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBleHBvcnRzLmdldEZ1bGxQYXRoID0gZXhwb3J0cy5pbmxpbmVSZWYgPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuY29uc3QgdHJhdmVyc2UgPSByZXF1aXJlKFwianNvbi1zY2hlbWEtdHJhdmVyc2VcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBrZXl3b3JkIGRlZmluaXRpb25zXG5jb25zdCBTSU1QTEVfSU5MSU5FRCA9IG5ldyBTZXQoW1xuICAgIFwidHlwZVwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1pbkxlbmd0aFwiLFxuICAgIFwibWF4UHJvcGVydGllc1wiLFxuICAgIFwibWluUHJvcGVydGllc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcIm1pbkl0ZW1zXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJ1bmlxdWVJdGVtc1wiLFxuICAgIFwibXVsdGlwbGVPZlwiLFxuICAgIFwicmVxdWlyZWRcIixcbiAgICBcImVudW1cIixcbiAgICBcImNvbnN0XCIsXG5dKTtcbmZ1bmN0aW9uIGlubGluZVJlZihzY2hlbWEsIGxpbWl0ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobGltaXQgPT09IHRydWUpXG4gICAgICAgIHJldHVybiAhaGFzUmVmKHNjaGVtYSk7XG4gICAgaWYgKCFsaW1pdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cbmV4cG9ydHMuaW5saW5lUmVmID0gaW5saW5lUmVmO1xuY29uc3QgUkVGX0tFWVdPUkRTID0gbmV3IFNldChbXG4gICAgXCIkcmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlUmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlQW5jaG9yXCIsXG4gICAgXCIkZHluYW1pY1JlZlwiLFxuICAgIFwiJGR5bmFtaWNBbmNob3JcIixcbl0pO1xuZnVuY3Rpb24gaGFzUmVmKHNjaGVtYSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoUkVGX0tFWVdPUkRTLmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpICYmIHNjaC5zb21lKGhhc1JlZikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIiAmJiBoYXNSZWYoc2NoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChTSU1QTEVfSU5MSU5FRC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYVtrZXldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKHNjaGVtYVtrZXldLCAoc2NoKSA9PiAoY291bnQgKz0gY291bnRLZXlzKHNjaCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IEluZmluaXR5KVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5mdW5jdGlvbiBnZXRGdWxsUGF0aChyZXNvbHZlciwgaWQgPSBcIlwiLCBub3JtYWxpemUpIHtcbiAgICBpZiAobm9ybWFsaXplICE9PSBmYWxzZSlcbiAgICAgICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgY29uc3QgcCA9IHJlc29sdmVyLnBhcnNlKGlkKTtcbiAgICByZXR1cm4gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKTtcbn1cbmV4cG9ydHMuZ2V0RnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSByZXNvbHZlci5zZXJpYWxpemUocCk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQuc3BsaXQoXCIjXCIpWzBdICsgXCIjXCI7XG59XG5leHBvcnRzLl9nZXRGdWxsUGF0aCA9IF9nZXRGdWxsUGF0aDtcbmNvbnN0IFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCBcIlwiKSA6IFwiXCI7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUlkID0gbm9ybWFsaXplSWQ7XG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlc29sdmVyLCBiYXNlSWQsIGlkKSB7XG4gICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5leHBvcnRzLnJlc29sdmVVcmwgPSByZXNvbHZlVXJsO1xuY29uc3QgQU5DSE9SID0gL15bYS16X11bLWEtejAtOS5fXSokL2k7XG5mdW5jdGlvbiBnZXRTY2hlbWFSZWZzKHNjaGVtYSwgYmFzZUlkKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHNjaGVtYUlkLCB1cmlSZXNvbHZlciB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IHNjaElkID0gbm9ybWFsaXplSWQoc2NoZW1hW3NjaGVtYUlkXSB8fCBiYXNlSWQpO1xuICAgIGNvbnN0IGJhc2VJZHMgPSB7IFwiXCI6IHNjaElkIH07XG4gICAgY29uc3QgcGF0aFByZWZpeCA9IGdldEZ1bGxQYXRoKHVyaVJlc29sdmVyLCBzY2hJZCwgZmFsc2UpO1xuICAgIGNvbnN0IGxvY2FsUmVmcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYVJlZnMgPSBuZXcgU2V0KCk7XG4gICAgdHJhdmVyc2Uoc2NoZW1hLCB7IGFsbEtleXM6IHRydWUgfSwgKHNjaCwganNvblB0ciwgXywgcGFyZW50SnNvblB0cikgPT4ge1xuICAgICAgICBpZiAocGFyZW50SnNvblB0ciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhQcmVmaXggKyBqc29uUHRyO1xuICAgICAgICBsZXQgYmFzZUlkID0gYmFzZUlkc1twYXJlbnRKc29uUHRyXTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hbc2NoZW1hSWRdID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBiYXNlSWQgPSBhZGRSZWYuY2FsbCh0aGlzLCBzY2hbc2NoZW1hSWRdKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRhbmNob3IpO1xuICAgICAgICBhZGRBbmNob3IuY2FsbCh0aGlzLCBzY2guJGR5bmFtaWNBbmNob3IpO1xuICAgICAgICBiYXNlSWRzW2pzb25QdHJdID0gYmFzZUlkO1xuICAgICAgICBmdW5jdGlvbiBhZGRSZWYocmVmKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgICAgICBjb25zdCBfcmVzb2x2ZSA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5yZXNvbHZlO1xuICAgICAgICAgICAgcmVmID0gbm9ybWFsaXplSWQoYmFzZUlkID8gX3Jlc29sdmUoYmFzZUlkLCByZWYpIDogcmVmKTtcbiAgICAgICAgICAgIGlmIChzY2hlbWFSZWZzLmhhcyhyZWYpKVxuICAgICAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgICAgICAgICBzY2hlbWFSZWZzLmFkZChyZWYpO1xuICAgICAgICAgICAgbGV0IHNjaE9yUmVmID0gdGhpcy5yZWZzW3JlZl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgc2NoT3JSZWYgPSB0aGlzLnJlZnNbc2NoT3JSZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIHNjaE9yUmVmLnNjaGVtYSwgcmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZiAhPT0gbm9ybWFsaXplSWQoZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZlswXSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIGxvY2FsUmVmc1tyZWZdLCByZWYpO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFJlZnNbcmVmXSA9IHNjaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmc1tyZWZdID0gZnVsbFBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlZjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGRBbmNob3IoYW5jaG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFuY2hvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBTkNIT1IudGVzdChhbmNob3IpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYW5jaG9yIFwiJHthbmNob3J9XCJgKTtcbiAgICAgICAgICAgICAgICBhZGRSZWYuY2FsbCh0aGlzLCBgIyR7YW5jaG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2FsUmVmcztcbiAgICBmdW5jdGlvbiBjaGVja0FtYmlndW9zUmVmKHNjaDEsIHNjaDIsIHJlZikge1xuICAgICAgICBpZiAoc2NoMiAhPT0gdW5kZWZpbmVkICYmICFlcXVhbChzY2gxLCBzY2gyKSlcbiAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFtYmlndW9zKHJlZikge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGByZWZlcmVuY2UgXCIke3JlZn1cIiByZXNvbHZlcyB0byBtb3JlIHRoYW4gb25lIHNjaGVtYWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0U2NoZW1hUmVmcyA9IGdldFNjaGVtYVJlZnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvbHZlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERhdGEgPSBleHBvcnRzLktleXdvcmRDeHQgPSBleHBvcnRzLnZhbGlkYXRlRnVuY3Rpb25Db2RlID0gdm9pZCAwO1xuY29uc3QgYm9vbFNjaGVtYV8xID0gcmVxdWlyZShcIi4vYm9vbFNjaGVtYVwiKTtcbmNvbnN0IGRhdGFUeXBlXzEgPSByZXF1aXJlKFwiLi9kYXRhVHlwZVwiKTtcbmNvbnN0IGFwcGxpY2FiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2FiaWxpdHlcIik7XG5jb25zdCBkYXRhVHlwZV8yID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBkZWZhdWx0c18xID0gcmVxdWlyZShcIi4vZGVmYXVsdHNcIik7XG5jb25zdCBrZXl3b3JkXzEgPSByZXF1aXJlKFwiLi9rZXl3b3JkXCIpO1xuY29uc3Qgc3Vic2NoZW1hXzEgPSByZXF1aXJlKFwiLi9zdWJzY2hlbWFcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi4vcmVzb2x2ZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuLy8gc2NoZW1hIGNvbXBpbGF0aW9uIC0gZ2VuZXJhdGVzIHZhbGlkYXRpb24gZnVuY3Rpb24sIHN1YnNjaGVtYUNvZGUgKGJlbG93KSBpcyB1c2VkIGZvciBzdWJzY2hlbWFzXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29kZShpdCkge1xuICAgIGlmIChpc1NjaGVtYU9iaihpdCkpIHtcbiAgICAgICAgY2hlY2tLZXl3b3JkcyhpdCk7XG4gICAgICAgIGlmIChzY2hlbWFDeHRIYXNSdWxlcyhpdCkpIHtcbiAgICAgICAgICAgIHRvcFNjaGVtYU9iakNvZGUoaXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlRnVuY3Rpb24oaXQsICgpID0+ICgwLCBib29sU2NoZW1hXzEudG9wQm9vbE9yRW1wdHlTY2hlbWEpKGl0KSk7XG59XG5leHBvcnRzLnZhbGlkYXRlRnVuY3Rpb25Db2RlID0gdmFsaWRhdGVGdW5jdGlvbkNvZGU7XG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKHsgZ2VuLCB2YWxpZGF0ZU5hbWUsIHNjaGVtYSwgc2NoZW1hRW52LCBvcHRzIH0sIGJvZHkpIHtcbiAgICBpZiAob3B0cy5jb2RlLmVzNSkge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9YCwgc2NoZW1hRW52LiRhc3luYywgKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgXCJ1c2Ugc3RyaWN0XCI7ICR7ZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpfWApO1xuICAgICAgICAgICAgZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKTtcbiAgICAgICAgICAgIGdlbi5jb2RlKGJvZHkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5mdW5jKHZhbGlkYXRlTmFtZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZGF0YX0sICR7ZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cyl9YCwgc2NoZW1hRW52LiRhc3luYywgKCkgPT4gZ2VuLmNvZGUoZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpKS5jb2RlKGJvZHkpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZXN0cnVjdHVyZVZhbEN4dChvcHRzKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYHske25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGh9PVwiXCIsICR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGF9LCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHl9LCAke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX09JHtuYW1lc18xLmRlZmF1bHQuZGF0YX0ke29wdHMuZHluYW1pY1JlZiA/ICgwLCBjb2RlZ2VuXzEuXykgYCwgJHtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9PXt9YCA6IGNvZGVnZW5fMS5uaWx9fT17fWA7XG59XG5mdW5jdGlvbiBkZXN0cnVjdHVyZVZhbEN4dEVTNShnZW4sIG9wdHMpIHtcbiAgICBnZW4uaWYobmFtZXNfMS5kZWZhdWx0LnZhbEN4dCwgKCkgPT4ge1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGF9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHl9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhfWApO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9YCk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhLCBuYW1lc18xLmRlZmF1bHQuZGF0YSk7XG4gICAgICAgIGlmIChvcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9ycywgKDAsIGNvZGVnZW5fMS5fKSBge31gKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRvcFNjaGVtYU9iakNvZGUoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cywgZ2VuIH0gPSBpdDtcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiB7XG4gICAgICAgIGlmIChvcHRzLiRjb21tZW50ICYmIHNjaGVtYS4kY29tbWVudClcbiAgICAgICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICAgICAgY2hlY2tOb0RlZmF1bHQoaXQpO1xuICAgICAgICBnZW4ubGV0KG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCBudWxsKTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAwKTtcbiAgICAgICAgaWYgKG9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXNldEV2YWx1YXRlZChpdCk7XG4gICAgICAgIHR5cGVBbmRLZXl3b3JkcyhpdCk7XG4gICAgICAgIHJldHVyblJlc3VsdHMoaXQpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbn1cbmZ1bmN0aW9uIHJlc2V0RXZhbHVhdGVkKGl0KSB7XG4gICAgLy8gVE9ETyBtYXliZSBzb21lIGhvb2sgdG8gZXhlY3V0ZSBpdCBpbiB0aGUgZW5kIHRvIGNoZWNrIHdoZXRoZXIgcHJvcHMvaXRlbXMgYXJlIE5hbWUsIGFzIGluIGFzc2lnbkV2YWx1YXRlZFxuICAgIGNvbnN0IHsgZ2VuLCB2YWxpZGF0ZU5hbWUgfSA9IGl0O1xuICAgIGl0LmV2YWx1YXRlZCA9IGdlbi5jb25zdChcImV2YWx1YXRlZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXZhbHVhdGVkYCk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljUHJvcHNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5wcm9wc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LmR5bmFtaWNJdGVtc2AsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9Lml0ZW1zYCwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCkpO1xufVxuZnVuY3Rpb24gZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpIHtcbiAgICBjb25zdCBzY2hJZCA9IHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiBzY2hlbWFbb3B0cy5zY2hlbWFJZF07XG4gICAgcmV0dXJuIHNjaElkICYmIChvcHRzLmNvZGUuc291cmNlIHx8IG9wdHMuY29kZS5wcm9jZXNzKSA/ICgwLCBjb2RlZ2VuXzEuXykgYC8qIyBzb3VyY2VVUkw9JHtzY2hJZH0gKi9gIDogY29kZWdlbl8xLm5pbDtcbn1cbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCByZWN1cnNpdmVseSB0byBnZW5lcmF0ZSBjb2RlIGZvciBzdWItc2NoZW1hc1xuZnVuY3Rpb24gc3Vic2NoZW1hQ29kZShpdCwgdmFsaWQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICBzdWJTY2hlbWFPYmpDb2RlKGl0LCB2YWxpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgKDAsIGJvb2xTY2hlbWFfMS5ib29sT3JFbXB0eVNjaGVtYSkoaXQsIHZhbGlkKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUN4dEhhc1J1bGVzKHsgc2NoZW1hLCBzZWxmIH0pIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAoc2VsZi5SVUxFUy5hbGxba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzU2NoZW1hT2JqKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdC5zY2hlbWEgIT0gXCJib29sZWFuXCI7XG59XG5mdW5jdGlvbiBzdWJTY2hlbWFPYmpDb2RlKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBnZW4sIG9wdHMgfSA9IGl0O1xuICAgIGlmIChvcHRzLiRjb21tZW50ICYmIHNjaGVtYS4kY29tbWVudClcbiAgICAgICAgY29tbWVudEtleXdvcmQoaXQpO1xuICAgIHVwZGF0ZUNvbnRleHQoaXQpO1xuICAgIGNoZWNrQXN5bmNTY2hlbWEoaXQpO1xuICAgIGNvbnN0IGVycnNDb3VudCA9IGdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgIHR5cGVBbmRLZXl3b3JkcyhpdCwgZXJyc0NvdW50KTtcbiAgICAvLyBUT0RPIHZhclxuICAgIGdlbi52YXIodmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xufVxuZnVuY3Rpb24gY2hlY2tLZXl3b3JkcyhpdCkge1xuICAgICgwLCB1dGlsXzEuY2hlY2tVbmtub3duUnVsZXMpKGl0KTtcbiAgICBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCk7XG59XG5mdW5jdGlvbiB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCkge1xuICAgIGlmIChpdC5vcHRzLmp0ZClcbiAgICAgICAgcmV0dXJuIHNjaGVtYUtleXdvcmRzKGl0LCBbXSwgZmFsc2UsIGVycnNDb3VudCk7XG4gICAgY29uc3QgdHlwZXMgPSAoMCwgZGF0YVR5cGVfMS5nZXRTY2hlbWFUeXBlcykoaXQuc2NoZW1hKTtcbiAgICBjb25zdCBjaGVja2VkVHlwZXMgPSAoMCwgZGF0YVR5cGVfMS5jb2VyY2VBbmRDaGVja0RhdGFUeXBlKShpdCwgdHlwZXMpO1xuICAgIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgIWNoZWNrZWRUeXBlcywgZXJyc0NvdW50KTtcbn1cbmZ1bmN0aW9uIGNoZWNrUmVmc0FuZEtleXdvcmRzKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiBvcHRzLmlnbm9yZUtleXdvcmRzV2l0aFJlZiAmJiAoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2hlbWEsIHNlbGYuUlVMRVMpKSB7XG4gICAgICAgIHNlbGYubG9nZ2VyLndhcm4oYCRyZWY6IGtleXdvcmRzIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja05vRGVmYXVsdChpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLmRlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnVzZURlZmF1bHRzICYmIG9wdHMuc3RyaWN0U2NoZW1hKSB7XG4gICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgXCJkZWZhdWx0IGlzIGlnbm9yZWQgaW4gdGhlIHNjaGVtYSByb290XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoaXQpIHtcbiAgICBjb25zdCBzY2hJZCA9IGl0LnNjaGVtYVtpdC5vcHRzLnNjaGVtYUlkXTtcbiAgICBpZiAoc2NoSWQpXG4gICAgICAgIGl0LmJhc2VJZCA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkoaXQub3B0cy51cmlSZXNvbHZlciwgaXQuYmFzZUlkLCBzY2hJZCk7XG59XG5mdW5jdGlvbiBjaGVja0FzeW5jU2NoZW1hKGl0KSB7XG4gICAgaWYgKGl0LnNjaGVtYS4kYXN5bmMgJiYgIWl0LnNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIHNjaGVtYSBpbiBzeW5jIHNjaGVtYVwiKTtcbn1cbmZ1bmN0aW9uIGNvbW1lbnRLZXl3b3JkKHsgZ2VuLCBzY2hlbWFFbnYsIHNjaGVtYSwgZXJyU2NoZW1hUGF0aCwgb3B0cyB9KSB7XG4gICAgY29uc3QgbXNnID0gc2NoZW1hLiRjb21tZW50O1xuICAgIGlmIChvcHRzLiRjb21tZW50ID09PSB0cnVlKSB7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9LmxvZ2dlci5sb2coJHttc2d9KWApO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy4kY29tbWVudCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJTY2hlbWFQYXRofS8kY29tbWVudGA7XG4gICAgICAgIGNvbnN0IHJvb3ROYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJyb290XCIsIHsgcmVmOiBzY2hlbWFFbnYucm9vdCB9KTtcbiAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn0ub3B0cy4kY29tbWVudCgke21zZ30sICR7c2NoZW1hUGF0aH0sICR7cm9vdE5hbWV9LnNjaGVtYSlgKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXR1cm5SZXN1bHRzKGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYUVudiwgdmFsaWRhdGVOYW1lLCBWYWxpZGF0aW9uRXJyb3IsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIC8vIFRPRE8gYXNzaWduIHVuZXZhbHVhdGVkXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCwgKCkgPT4gZ2VuLnJldHVybihuYW1lc18xLmRlZmF1bHQuZGF0YSksICgpID0+IGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtWYWxpZGF0aW9uRXJyb3J9KCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9KWApKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzKTtcbiAgICAgICAgaWYgKG9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICBhc3NpZ25FdmFsdWF0ZWQoaXQpO1xuICAgICAgICBnZW4ucmV0dXJuKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09IDBgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhc3NpZ25FdmFsdWF0ZWQoeyBnZW4sIGV2YWx1YXRlZCwgcHJvcHMsIGl0ZW1zIH0pIHtcbiAgICBpZiAocHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSlcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2V2YWx1YXRlZH0ucHJvcHNgLCBwcm9wcyk7XG4gICAgaWYgKGl0ZW1zIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9Lml0ZW1zYCwgaXRlbXMpO1xufVxuZnVuY3Rpb24gc2NoZW1hS2V5d29yZHMoaXQsIHR5cGVzLCB0eXBlRXJyb3JzLCBlcnJzQ291bnQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBhbGxFcnJvcnMsIG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHNlbGY7XG4gICAgaWYgKHNjaGVtYS4kcmVmICYmIChvcHRzLmlnbm9yZUtleXdvcmRzV2l0aFJlZiB8fCAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBSVUxFUykpKSB7XG4gICAgICAgIGdlbi5ibG9jaygoKSA9PiBrZXl3b3JkQ29kZShpdCwgXCIkcmVmXCIsIFJVTEVTLmFsbC4kcmVmLmRlZmluaXRpb24pKTsgLy8gVE9ETyB0eXBlY2FzdFxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghb3B0cy5qdGQpXG4gICAgICAgIGNoZWNrU3RyaWN0VHlwZXMoaXQsIHR5cGVzKTtcbiAgICBnZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIFJVTEVTLnJ1bGVzKVxuICAgICAgICAgICAgZ3JvdXBLZXl3b3Jkcyhncm91cCk7XG4gICAgICAgIGdyb3VwS2V5d29yZHMoUlVMRVMucG9zdCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gZ3JvdXBLZXl3b3Jkcyhncm91cCkge1xuICAgICAgICBpZiAoISgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlR3JvdXApKHNjaGVtYSwgZ3JvdXApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZ3JvdXAudHlwZSkge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGUpKGdyb3VwLnR5cGUsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycykpO1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgICAgICBpZiAodHlwZXMubGVuZ3RoID09PSAxICYmIHR5cGVzWzBdID09PSBncm91cC50eXBlICYmIHR5cGVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgICAgICgwLCBkYXRhVHlwZV8yLnJlcG9ydFR5cGVFcnJvcikoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIG1ha2UgaXQgXCJva1wiIGNhbGw/XG4gICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09ICR7ZXJyc0NvdW50IHx8IDB9YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIG9wdHM6IHsgdXNlRGVmYXVsdHMgfSwgfSA9IGl0O1xuICAgIGlmICh1c2VEZWZhdWx0cylcbiAgICAgICAgKDAsIGRlZmF1bHRzXzEuYXNzaWduRGVmYXVsdHMpKGl0LCBncm91cC50eXBlKTtcbiAgICBnZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZ3JvdXAucnVsZXMpIHtcbiAgICAgICAgICAgIGlmICgoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZVJ1bGUpKHNjaGVtYSwgcnVsZSkpIHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkQ29kZShpdCwgcnVsZS5rZXl3b3JkLCBydWxlLmRlZmluaXRpb24sIGdyb3VwLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcykge1xuICAgIGlmIChpdC5zY2hlbWFFbnYubWV0YSB8fCAhaXQub3B0cy5zdHJpY3RUeXBlcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNoZWNrQ29udGV4dFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgaWYgKCFpdC5vcHRzLmFsbG93VW5pb25UeXBlcylcbiAgICAgICAgY2hlY2tNdWx0aXBsZVR5cGVzKGl0LCB0eXBlcyk7XG4gICAgY2hlY2tLZXl3b3JkVHlwZXMoaXQsIGl0LmRhdGFUeXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoIXR5cGVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICghaXQuZGF0YVR5cGVzLmxlbmd0aCkge1xuICAgICAgICBpdC5kYXRhVHlwZXMgPSB0eXBlcztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0eXBlcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgIGlmICghaW5jbHVkZXNUeXBlKGl0LmRhdGFUeXBlcywgdCkpIHtcbiAgICAgICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIGB0eXBlIFwiJHt0fVwiIG5vdCBhbGxvd2VkIGJ5IGNvbnRleHQgXCIke2l0LmRhdGFUeXBlcy5qb2luKFwiLFwiKX1cImApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgbmFycm93U2NoZW1hVHlwZXMoaXQsIHR5cGVzKTtcbn1cbmZ1bmN0aW9uIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHMpIHtcbiAgICBpZiAodHMubGVuZ3RoID4gMSAmJiAhKHRzLmxlbmd0aCA9PT0gMiAmJiB0cy5pbmNsdWRlcyhcIm51bGxcIikpKSB7XG4gICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIFwidXNlIGFsbG93VW5pb25UeXBlcyB0byBhbGxvdyB1bmlvbiB0eXBlIGtleXdvcmRcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tLZXl3b3JkVHlwZXMoaXQsIHRzKSB7XG4gICAgY29uc3QgcnVsZXMgPSBpdC5zZWxmLlJVTEVTLmFsbDtcbiAgICBmb3IgKGNvbnN0IGtleXdvcmQgaW4gcnVsZXMpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2tleXdvcmRdO1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGUgPT0gXCJvYmplY3RcIiAmJiAoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZVJ1bGUpKGl0LnNjaGVtYSwgcnVsZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKHR5cGUubGVuZ3RoICYmICF0eXBlLnNvbWUoKHQpID0+IGhhc0FwcGxpY2FibGVUeXBlKHRzLCB0KSkpIHtcbiAgICAgICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgbWlzc2luZyB0eXBlIFwiJHt0eXBlLmpvaW4oXCIsXCIpfVwiIGZvciBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBoYXNBcHBsaWNhYmxlVHlwZShzY2hUcywga3dkVCkge1xuICAgIHJldHVybiBzY2hUcy5pbmNsdWRlcyhrd2RUKSB8fCAoa3dkVCA9PT0gXCJudW1iZXJcIiAmJiBzY2hUcy5pbmNsdWRlcyhcImludGVnZXJcIikpO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNUeXBlKHRzLCB0KSB7XG4gICAgcmV0dXJuIHRzLmluY2x1ZGVzKHQpIHx8ICh0ID09PSBcImludGVnZXJcIiAmJiB0cy5pbmNsdWRlcyhcIm51bWJlclwiKSk7XG59XG5mdW5jdGlvbiBuYXJyb3dTY2hlbWFUeXBlcyhpdCwgd2l0aFR5cGVzKSB7XG4gICAgY29uc3QgdHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgaXQuZGF0YVR5cGVzKSB7XG4gICAgICAgIGlmIChpbmNsdWRlc1R5cGUod2l0aFR5cGVzLCB0KSlcbiAgICAgICAgICAgIHRzLnB1c2godCk7XG4gICAgICAgIGVsc2UgaWYgKHdpdGhUeXBlcy5pbmNsdWRlcyhcImludGVnZXJcIikgJiYgdCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRzLnB1c2goXCJpbnRlZ2VyXCIpO1xuICAgIH1cbiAgICBpdC5kYXRhVHlwZXMgPSB0cztcbn1cbmZ1bmN0aW9uIHN0cmljdFR5cGVzRXJyb3IoaXQsIG1zZykge1xuICAgIGNvbnN0IHNjaGVtYVBhdGggPSBpdC5zY2hlbWFFbnYuYmFzZUlkICsgaXQuZXJyU2NoZW1hUGF0aDtcbiAgICBtc2cgKz0gYCBhdCBcIiR7c2NoZW1hUGF0aH1cIiAoc3RyaWN0VHlwZXMpYDtcbiAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgaXQub3B0cy5zdHJpY3RUeXBlcyk7XG59XG5jbGFzcyBLZXl3b3JkQ3h0IHtcbiAgICBjb25zdHJ1Y3RvcihpdCwgZGVmLCBrZXl3b3JkKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEudmFsaWRhdGVLZXl3b3JkVXNhZ2UpKGl0LCBkZWYsIGtleXdvcmQpO1xuICAgICAgICB0aGlzLmdlbiA9IGl0LmdlbjtcbiAgICAgICAgdGhpcy5hbGxFcnJvcnMgPSBpdC5hbGxFcnJvcnM7XG4gICAgICAgIHRoaXMua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IGl0LmRhdGE7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgICAgICB0aGlzLiRkYXRhID0gZGVmLiRkYXRhICYmIGl0Lm9wdHMuJGRhdGEgJiYgdGhpcy5zY2hlbWEgJiYgdGhpcy5zY2hlbWEuJGRhdGE7XG4gICAgICAgIHRoaXMuc2NoZW1hVmFsdWUgPSAoMCwgdXRpbF8xLnNjaGVtYVJlZk9yVmFsKShpdCwgdGhpcy5zY2hlbWEsIGtleXdvcmQsIHRoaXMuJGRhdGEpO1xuICAgICAgICB0aGlzLnNjaGVtYVR5cGUgPSBkZWYuc2NoZW1hVHlwZTtcbiAgICAgICAgdGhpcy5wYXJlbnRTY2hlbWEgPSBpdC5zY2hlbWE7XG4gICAgICAgIHRoaXMucGFyYW1zID0ge307XG4gICAgICAgIHRoaXMuaXQgPSBpdDtcbiAgICAgICAgdGhpcy5kZWYgPSBkZWY7XG4gICAgICAgIGlmICh0aGlzLiRkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSBpdC5nZW4uY29uc3QoXCJ2U2NoZW1hXCIsIGdldERhdGEodGhpcy4kZGF0YSwgaXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ29kZSA9IHRoaXMuc2NoZW1hVmFsdWU7XG4gICAgICAgICAgICBpZiAoISgwLCBrZXl3b3JkXzEudmFsaWRTY2hlbWFUeXBlKSh0aGlzLnNjaGVtYSwgZGVmLnNjaGVtYVR5cGUsIGRlZi5hbGxvd1VuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5d29yZH0gdmFsdWUgbXVzdCBiZSAke0pTT04uc3RyaW5naWZ5KGRlZi5zY2hlbWFUeXBlKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJjb2RlXCIgaW4gZGVmID8gZGVmLnRyYWNrRXJyb3JzIDogZGVmLmVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyc0NvdW50ID0gaXQuZ2VuLmNvbnN0KFwiX2VycnNcIiwgbmFtZXNfMS5kZWZhdWx0LmVycm9ycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0KGNvbmRpdGlvbiwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmZhaWxSZXN1bHQoKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmRpdGlvbiksIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pO1xuICAgIH1cbiAgICBmYWlsUmVzdWx0KGNvbmRpdGlvbiwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmdlbi5pZihjb25kaXRpb24pO1xuICAgICAgICBpZiAoZmFpbEFjdGlvbilcbiAgICAgICAgICAgIGZhaWxBY3Rpb24oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICBpZiAoc3VjY2Vzc0FjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICAgICAgc3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFzcyhjb25kaXRpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCB1bmRlZmluZWQsIGZhaWxBY3Rpb24pO1xuICAgIH1cbiAgICBmYWlsKGNvbmRpdGlvbikge1xuICAgICAgICBpZiAoY29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uaWYoZmFsc2UpOyAvLyB0aGlzIGJyYW5jaCB3aWxsIGJlIHJlbW92ZWQgYnkgZ2VuLm9wdGltaXplXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgfVxuICAgIGZhaWwkZGF0YShjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbChjb25kaXRpb24pO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUNvZGUgfSA9IHRoaXM7XG4gICAgICAgIHRoaXMuZmFpbCgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICE9PSB1bmRlZmluZWQgJiYgKCR7KDAsIGNvZGVnZW5fMS5vcikodGhpcy5pbnZhbGlkJGRhdGEoKSwgY29uZGl0aW9uKX0pYCk7XG4gICAgfVxuICAgIGVycm9yKGFwcGVuZCwgZXJyb3JQYXJhbXMsIGVycm9yUGF0aHMpIHtcbiAgICAgICAgaWYgKGVycm9yUGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtcyhlcnJvclBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoe30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocyk7XG4gICAgfVxuICAgIF9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpIHtcbiAgICAgICAgO1xuICAgICAgICAoYXBwZW5kID8gZXJyb3JzXzEucmVwb3J0RXh0cmFFcnJvciA6IGVycm9yc18xLnJlcG9ydEVycm9yKSh0aGlzLCB0aGlzLmRlZi5lcnJvciwgZXJyb3JQYXRocyk7XG4gICAgfVxuICAgICRkYXRhRXJyb3IoKSB7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuJGRhdGFFcnJvciB8fCBlcnJvcnNfMS5rZXl3b3JkJERhdGFFcnJvcik7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5lcnJzQ291bnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYWRkIFwidHJhY2tFcnJvcnNcIiB0byBrZXl3b3JkIGRlZmluaXRpb24nKTtcbiAgICAgICAgKDAsIGVycm9yc18xLnJlc2V0RXJyb3JzQ291bnQpKHRoaXMuZ2VuLCB0aGlzLmVycnNDb3VudCk7XG4gICAgfVxuICAgIG9rKGNvbmQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGNvbmQpO1xuICAgIH1cbiAgICBzZXRQYXJhbXMob2JqLCBhc3NpZ24pIHtcbiAgICAgICAgaWYgKGFzc2lnbilcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wYXJhbXMsIG9iaik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucGFyYW1zID0gb2JqO1xuICAgIH1cbiAgICBibG9jayRkYXRhKHZhbGlkLCBjb2RlQmxvY2ssICRkYXRhVmFsaWQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIHRoaXMuZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2skZGF0YSh2YWxpZCwgJGRhdGFWYWxpZCk7XG4gICAgICAgICAgICBjb2RlQmxvY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNoZWNrJGRhdGEodmFsaWQgPSBjb2RlZ2VuXzEubmlsLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICBpZiAoIXRoaXMuJGRhdGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYgfSA9IHRoaXM7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm9yKSgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ID09PSB1bmRlZmluZWRgLCAkZGF0YVZhbGlkKSk7XG4gICAgICAgIGlmICh2YWxpZCAhPT0gY29kZWdlbl8xLm5pbClcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICBpZiAoc2NoZW1hVHlwZS5sZW5ndGggfHwgZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgICAgICBnZW4uZWxzZUlmKHRoaXMuaW52YWxpZCRkYXRhKCkpO1xuICAgICAgICAgICAgdGhpcy4kZGF0YUVycm9yKCk7XG4gICAgICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGdlbi5lbHNlKCk7XG4gICAgfVxuICAgIGludmFsaWQkZGF0YSgpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYUNvZGUsIHNjaGVtYVR5cGUsIGRlZiwgaXQgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm9yKSh3cm9uZyREYXRhVHlwZSgpLCBpbnZhbGlkJERhdGFTY2hlbWEoKSk7XG4gICAgICAgIGZ1bmN0aW9uIHdyb25nJERhdGFUeXBlKCkge1xuICAgICAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKCEoc2NoZW1hQ29kZSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0ID0gQXJyYXkuaXNBcnJheShzY2hlbWFUeXBlKSA/IHNjaGVtYVR5cGUgOiBbc2NoZW1hVHlwZV07XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGRhdGFUeXBlXzIuY2hlY2tEYXRhVHlwZXMpKHN0LCBzY2hlbWFDb2RlLCBpdC5vcHRzLnN0cmljdE51bWJlcnMsIGRhdGFUeXBlXzIuRGF0YVR5cGUuV3JvbmcpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpbnZhbGlkJERhdGFTY2hlbWEoKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVTY2hlbWFSZWYgPSBnZW4uc2NvcGVWYWx1ZShcInZhbGlkYXRlJGRhdGFcIiwgeyByZWY6IGRlZi52YWxpZGF0ZVNjaGVtYSB9KTsgLy8gVE9ETyB2YWx1ZS5jb2RlIGZvciBzdGFuZGFsb25lXG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCEke3ZhbGlkYXRlU2NoZW1hUmVmfSgke3NjaGVtYUNvZGV9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdWJzY2hlbWEoYXBwbCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NoZW1hID0gKDAsIHN1YnNjaGVtYV8xLmdldFN1YnNjaGVtYSkodGhpcy5pdCwgYXBwbCk7XG4gICAgICAgICgwLCBzdWJzY2hlbWFfMS5leHRlbmRTdWJzY2hlbWFEYXRhKShzdWJzY2hlbWEsIHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hTW9kZSkoc3Vic2NoZW1hLCBhcHBsKTtcbiAgICAgICAgY29uc3QgbmV4dENvbnRleHQgPSB7IC4uLnRoaXMuaXQsIC4uLnN1YnNjaGVtYSwgaXRlbXM6IHVuZGVmaW5lZCwgcHJvcHM6IHVuZGVmaW5lZCB9O1xuICAgICAgICBzdWJzY2hlbWFDb2RlKG5leHRDb250ZXh0LCB2YWxpZCk7XG4gICAgICAgIHJldHVybiBuZXh0Q29udGV4dDtcbiAgICB9XG4gICAgbWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCB0b05hbWUpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSAmJiBzY2hlbWFDeHQucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBzY2hlbWFDeHQucHJvcHMsIGl0LnByb3BzLCB0b05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5pdGVtcyAhPT0gdHJ1ZSAmJiBzY2hlbWFDeHQuaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hlbWFDeHQuaXRlbXMsIGl0Lml0ZW1zLCB0b05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoZW1hQ3h0LCB2YWxpZCkge1xuICAgICAgICBjb25zdCB7IGl0LCBnZW4gfSA9IHRoaXM7XG4gICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIChpdC5wcm9wcyAhPT0gdHJ1ZSB8fCBpdC5pdGVtcyAhPT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgIGdlbi5pZih2YWxpZCwgKCkgPT4gdGhpcy5tZXJnZUV2YWx1YXRlZChzY2hlbWFDeHQsIGNvZGVnZW5fMS5OYW1lKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuS2V5d29yZEN4dCA9IEtleXdvcmRDeHQ7XG5mdW5jdGlvbiBrZXl3b3JkQ29kZShpdCwga2V5d29yZCwgZGVmLCBydWxlVHlwZSkge1xuICAgIGNvbnN0IGN4dCA9IG5ldyBLZXl3b3JkQ3h0KGl0LCBkZWYsIGtleXdvcmQpO1xuICAgIGlmIChcImNvZGVcIiBpbiBkZWYpIHtcbiAgICAgICAgZGVmLmNvZGUoY3h0LCBydWxlVHlwZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGN4dC4kZGF0YSAmJiBkZWYudmFsaWRhdGUpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5mdW5jS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoXCJtYWNyb1wiIGluIGRlZikge1xuICAgICAgICAoMCwga2V5d29yZF8xLm1hY3JvS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVmLmNvbXBpbGUgfHwgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxufVxuY29uc3QgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbmNvbnN0IFJFTEFUSVZFX0pTT05fUE9JTlRFUiA9IC9eKFswLTldKykoI3xcXC8oPzpbXn5dfH4wfH4xKSopPyQvO1xuZnVuY3Rpb24gZ2V0RGF0YSgkZGF0YSwgeyBkYXRhTGV2ZWwsIGRhdGFOYW1lcywgZGF0YVBhdGhBcnIgfSkge1xuICAgIGxldCBqc29uUG9pbnRlcjtcbiAgICBsZXQgZGF0YTtcbiAgICBpZiAoJGRhdGEgPT09IFwiXCIpXG4gICAgICAgIHJldHVybiBuYW1lc18xLmRlZmF1bHQucm9vdERhdGE7XG4gICAgaWYgKCRkYXRhWzBdID09PSBcIi9cIikge1xuICAgICAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBKU09OLXBvaW50ZXI6ICR7JGRhdGF9YCk7XG4gICAgICAgIGpzb25Qb2ludGVyID0gJGRhdGE7XG4gICAgICAgIGRhdGEgPSBuYW1lc18xLmRlZmF1bHQucm9vdERhdGE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gUkVMQVRJVkVfSlNPTl9QT0lOVEVSLmV4ZWMoJGRhdGEpO1xuICAgICAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBjb25zdCB1cCA9ICttYXRjaGVzWzFdO1xuICAgICAgICBqc29uUG9pbnRlciA9IG1hdGNoZXNbMl07XG4gICAgICAgIGlmIChqc29uUG9pbnRlciA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIGlmICh1cCA+PSBkYXRhTGV2ZWwpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKFwicHJvcGVydHkvaW5kZXhcIiwgdXApKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhUGF0aEFycltkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwID4gZGF0YUxldmVsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKFwiZGF0YVwiLCB1cCkpO1xuICAgICAgICBkYXRhID0gZGF0YU5hbWVzW2RhdGFMZXZlbCAtIHVwXTtcbiAgICAgICAgaWYgKCFqc29uUG9pbnRlcilcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBsZXQgZXhwciA9IGRhdGE7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIik7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgICBkYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoKDAsIHV0aWxfMS51bmVzY2FwZUpzb25Qb2ludGVyKShzZWdtZW50KSl9YDtcbiAgICAgICAgICAgIGV4cHIgPSAoMCwgY29kZWdlbl8xLl8pIGAke2V4cHJ9ICYmICR7ZGF0YX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHByO1xuICAgIGZ1bmN0aW9uIGVycm9yTXNnKHBvaW50ZXJUeXBlLCB1cCkge1xuICAgICAgICByZXR1cm4gYENhbm5vdCBhY2Nlc3MgJHtwb2ludGVyVHlwZX0gJHt1cH0gbGV2ZWxzIHVwLCBjdXJyZW50IGxldmVsIGlzICR7ZGF0YUxldmVsfWA7XG4gICAgfVxufVxuZXhwb3J0cy5nZXREYXRhID0gZ2V0RGF0YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JzKSB7XG4gICAgICAgIHN1cGVyKFwidmFsaWRhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gVmFsaWRhdGlvbkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdGlvbl9lcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVwiKTtcbmNsYXNzIE1pc3NpbmdSZWZFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNvbHZlciwgYmFzZUlkLCByZWYsIG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgYGNhbid0IHJlc29sdmUgcmVmZXJlbmNlICR7cmVmfSBmcm9tIGlkICR7YmFzZUlkfWApO1xuICAgICAgICB0aGlzLm1pc3NpbmdSZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHJlc29sdmVyLCBiYXNlSWQsIHJlZik7XG4gICAgICAgIHRoaXMubWlzc2luZ1NjaGVtYSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKCgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHJlc29sdmVyLCB0aGlzLm1pc3NpbmdSZWYpKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBNaXNzaW5nUmVmRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWZfZXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVNjaGVtYSA9IGV4cG9ydHMuZ2V0Q29tcGlsaW5nU2NoZW1hID0gZXhwb3J0cy5yZXNvbHZlUmVmID0gZXhwb3J0cy5jb21waWxlU2NoZW1hID0gZXhwb3J0cy5TY2hlbWFFbnYgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4uL3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi9uYW1lc1wiKTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlXCIpO1xuY2xhc3MgU2NoZW1hRW52IHtcbiAgICBjb25zdHJ1Y3RvcihlbnYpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLnJlZnMgPSB7fTtcbiAgICAgICAgdGhpcy5keW5hbWljQW5jaG9ycyA9IHt9O1xuICAgICAgICBsZXQgc2NoZW1hO1xuICAgICAgICBpZiAodHlwZW9mIGVudi5zY2hlbWEgPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gZW52LnNjaGVtYTtcbiAgICAgICAgdGhpcy5zY2hlbWFJZCA9IGVudi5zY2hlbWFJZDtcbiAgICAgICAgdGhpcy5yb290ID0gZW52LnJvb3QgfHwgdGhpcztcbiAgICAgICAgdGhpcy5iYXNlSWQgPSAoX2EgPSBlbnYuYmFzZUlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShzY2hlbWEgPT09IG51bGwgfHwgc2NoZW1hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hlbWFbZW52LnNjaGVtYUlkIHx8IFwiJGlkXCJdKTtcbiAgICAgICAgdGhpcy5zY2hlbWFQYXRoID0gZW52LnNjaGVtYVBhdGg7XG4gICAgICAgIHRoaXMubG9jYWxSZWZzID0gZW52LmxvY2FsUmVmcztcbiAgICAgICAgdGhpcy5tZXRhID0gZW52Lm1ldGE7XG4gICAgICAgIHRoaXMuJGFzeW5jID0gc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hLiRhc3luYztcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgfVxufVxuZXhwb3J0cy5TY2hlbWFFbnYgPSBTY2hlbWFFbnY7XG4vLyBsZXQgY29kZVNpemUgPSAwXG4vLyBsZXQgbm9kZUNvdW50ID0gMFxuLy8gQ29tcGlsZXMgc2NoZW1hIGluIFNjaGVtYUVudlxuZnVuY3Rpb24gY29tcGlsZVNjaGVtYShzY2gpIHtcbiAgICAvLyBUT0RPIHJlZmFjdG9yIC0gcmVtb3ZlIGNvbXBpbGF0aW9uc1xuICAgIGNvbnN0IF9zY2ggPSBnZXRDb21waWxpbmdTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xuICAgIGlmIChfc2NoKVxuICAgICAgICByZXR1cm4gX3NjaDtcbiAgICBjb25zdCByb290SWQgPSAoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIHNjaC5yb290LmJhc2VJZCk7IC8vIFRPRE8gaWYgZ2V0RnVsbFBhdGggcmVtb3ZlZCAxIHRlc3RzIGZhaWxzXG4gICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICBjb25zdCB7IG93blByb3BlcnRpZXMgfSA9IHRoaXMub3B0cztcbiAgICBjb25zdCBnZW4gPSBuZXcgY29kZWdlbl8xLkNvZGVHZW4odGhpcy5zY29wZSwgeyBlczUsIGxpbmVzLCBvd25Qcm9wZXJ0aWVzIH0pO1xuICAgIGxldCBfVmFsaWRhdGlvbkVycm9yO1xuICAgIGlmIChzY2guJGFzeW5jKSB7XG4gICAgICAgIF9WYWxpZGF0aW9uRXJyb3IgPSBnZW4uc2NvcGVWYWx1ZShcIkVycm9yXCIsIHtcbiAgICAgICAgICAgIHJlZjogdmFsaWRhdGlvbl9lcnJvcl8xLmRlZmF1bHQsXG4gICAgICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGByZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpLmRlZmF1bHRgLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRhdGVOYW1lID0gZ2VuLnNjb3BlTmFtZShcInZhbGlkYXRlXCIpO1xuICAgIHNjaC52YWxpZGF0ZU5hbWUgPSB2YWxpZGF0ZU5hbWU7XG4gICAgY29uc3Qgc2NoZW1hQ3h0ID0ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGFsbEVycm9yczogdGhpcy5vcHRzLmFsbEVycm9ycyxcbiAgICAgICAgZGF0YTogbmFtZXNfMS5kZWZhdWx0LmRhdGEsXG4gICAgICAgIHBhcmVudERhdGE6IG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLFxuICAgICAgICBwYXJlbnREYXRhUHJvcGVydHk6IG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksXG4gICAgICAgIGRhdGFOYW1lczogW25hbWVzXzEuZGVmYXVsdC5kYXRhXSxcbiAgICAgICAgZGF0YVBhdGhBcnI6IFtjb2RlZ2VuXzEubmlsXSxcbiAgICAgICAgZGF0YUxldmVsOiAwLFxuICAgICAgICBkYXRhVHlwZXM6IFtdLFxuICAgICAgICBkZWZpbmVkUHJvcGVydGllczogbmV3IFNldCgpLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IGdlbi5zY29wZVZhbHVlKFwic2NoZW1hXCIsIHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyB7IHJlZjogc2NoLnNjaGVtYSwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHNjaC5zY2hlbWEpIH1cbiAgICAgICAgICAgIDogeyByZWY6IHNjaC5zY2hlbWEgfSksXG4gICAgICAgIHZhbGlkYXRlTmFtZSxcbiAgICAgICAgVmFsaWRhdGlvbkVycm9yOiBfVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBzY2hlbWE6IHNjaC5zY2hlbWEsXG4gICAgICAgIHNjaGVtYUVudjogc2NoLFxuICAgICAgICByb290SWQsXG4gICAgICAgIGJhc2VJZDogc2NoLmJhc2VJZCB8fCByb290SWQsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IHNjaC5zY2hlbWFQYXRoIHx8ICh0aGlzLm9wdHMuanRkID8gXCJcIiA6IFwiI1wiKSxcbiAgICAgICAgZXJyb3JQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCxcbiAgICAgICAgb3B0czogdGhpcy5vcHRzLFxuICAgICAgICBzZWxmOiB0aGlzLFxuICAgIH07XG4gICAgbGV0IHNvdXJjZUNvZGU7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zLmFkZChzY2gpO1xuICAgICAgICAoMCwgdmFsaWRhdGVfMS52YWxpZGF0ZUZ1bmN0aW9uQ29kZSkoc2NoZW1hQ3h0KTtcbiAgICAgICAgZ2VuLm9wdGltaXplKHRoaXMub3B0cy5jb2RlLm9wdGltaXplKTtcbiAgICAgICAgLy8gZ2VuLm9wdGltaXplKDEpXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlQ29kZSA9IGdlbi50b1N0cmluZygpO1xuICAgICAgICBzb3VyY2VDb2RlID0gYCR7Z2VuLnNjb3BlUmVmcyhuYW1lc18xLmRlZmF1bHQuc2NvcGUpfXJldHVybiAke3ZhbGlkYXRlQ29kZX1gO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygoY29kZVNpemUgKz0gc291cmNlQ29kZS5sZW5ndGgpLCAobm9kZUNvdW50ICs9IGdlbi5ub2RlQ291bnQpKVxuICAgICAgICBpZiAodGhpcy5vcHRzLmNvZGUucHJvY2VzcylcbiAgICAgICAgICAgIHNvdXJjZUNvZGUgPSB0aGlzLm9wdHMuY29kZS5wcm9jZXNzKHNvdXJjZUNvZGUsIHNjaCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuXFxuXFxuICoqKiBcXG5cIiwgc291cmNlQ29kZSlcbiAgICAgICAgY29uc3QgbWFrZVZhbGlkYXRlID0gbmV3IEZ1bmN0aW9uKGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfWAsIGAke25hbWVzXzEuZGVmYXVsdC5zY29wZX1gLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSBtYWtlVmFsaWRhdGUodGhpcywgdGhpcy5zY29wZS5nZXQoKSk7XG4gICAgICAgIHRoaXMuc2NvcGUudmFsdWUodmFsaWRhdGVOYW1lLCB7IHJlZjogdmFsaWRhdGUgfSk7XG4gICAgICAgIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7XG4gICAgICAgIHZhbGlkYXRlLnNjaGVtYSA9IHNjaC5zY2hlbWE7XG4gICAgICAgIHZhbGlkYXRlLnNjaGVtYUVudiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaC4kYXN5bmMpXG4gICAgICAgICAgICB2YWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmNvZGUuc291cmNlID09PSB0cnVlKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZS5zb3VyY2UgPSB7IHZhbGlkYXRlTmFtZSwgdmFsaWRhdGVDb2RlLCBzY29wZVZhbHVlczogZ2VuLl92YWx1ZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRzLnVuZXZhbHVhdGVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHByb3BzLCBpdGVtcyB9ID0gc2NoZW1hQ3h0O1xuICAgICAgICAgICAgdmFsaWRhdGUuZXZhbHVhdGVkID0ge1xuICAgICAgICAgICAgICAgIHByb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogcHJvcHMsXG4gICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyB1bmRlZmluZWQgOiBpdGVtcyxcbiAgICAgICAgICAgICAgICBkeW5hbWljUHJvcHM6IHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUsXG4gICAgICAgICAgICAgICAgZHluYW1pY0l0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZS5zb3VyY2UpXG4gICAgICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlLmV2YWx1YXRlZCA9ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KSh2YWxpZGF0ZS5ldmFsdWF0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHNjaC52YWxpZGF0ZSA9IHZhbGlkYXRlO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkZWxldGUgc2NoLnZhbGlkYXRlO1xuICAgICAgICBkZWxldGUgc2NoLnZhbGlkYXRlTmFtZTtcbiAgICAgICAgaWYgKHNvdXJjZUNvZGUpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIkVycm9yIGNvbXBpbGluZyBzY2hlbWEsIGZ1bmN0aW9uIGNvZGU6XCIsIHNvdXJjZUNvZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUsIHRoaXMub3B0cylcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5kZWxldGUoc2NoKTtcbiAgICB9XG59XG5leHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBjb21waWxlU2NoZW1hO1xuZnVuY3Rpb24gcmVzb2x2ZVJlZihyb290LCBiYXNlSWQsIHJlZikge1xuICAgIHZhciBfYTtcbiAgICByZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgIGNvbnN0IHNjaE9yRnVuYyA9IHJvb3QucmVmc1tyZWZdO1xuICAgIGlmIChzY2hPckZ1bmMpXG4gICAgICAgIHJldHVybiBzY2hPckZ1bmM7XG4gICAgbGV0IF9zY2ggPSByZXNvbHZlLmNhbGwodGhpcywgcm9vdCwgcmVmKTtcbiAgICBpZiAoX3NjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IChfYSA9IHJvb3QubG9jYWxSZWZzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbcmVmXTsgLy8gVE9ETyBtYXliZSBsb2NhbFJlZnMgc2hvdWxkIGhvbGQgU2NoZW1hRW52XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHNjaGVtYSlcbiAgICAgICAgICAgIF9zY2ggPSBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIH1cbiAgICBpZiAoX3NjaCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgcmV0dXJuIChyb290LnJlZnNbcmVmXSA9IGlubGluZU9yQ29tcGlsZS5jYWxsKHRoaXMsIF9zY2gpKTtcbn1cbmV4cG9ydHMucmVzb2x2ZVJlZiA9IHJlc29sdmVSZWY7XG5mdW5jdGlvbiBpbmxpbmVPckNvbXBpbGUoc2NoKSB7XG4gICAgaWYgKCgwLCByZXNvbHZlXzEuaW5saW5lUmVmKShzY2guc2NoZW1hLCB0aGlzLm9wdHMuaW5saW5lUmVmcykpXG4gICAgICAgIHJldHVybiBzY2guc2NoZW1hO1xuICAgIHJldHVybiBzY2gudmFsaWRhdGUgPyBzY2ggOiBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbn1cbi8vIEluZGV4IG9mIHNjaGVtYSBjb21waWxhdGlvbiBpbiB0aGUgY3VycmVudGx5IGNvbXBpbGVkIGxpc3RcbmZ1bmN0aW9uIGdldENvbXBpbGluZ1NjaGVtYShzY2hFbnYpIHtcbiAgICBmb3IgKGNvbnN0IHNjaCBvZiB0aGlzLl9jb21waWxhdGlvbnMpIHtcbiAgICAgICAgaWYgKHNhbWVTY2hlbWFFbnYoc2NoLCBzY2hFbnYpKVxuICAgICAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGdldENvbXBpbGluZ1NjaGVtYTtcbmZ1bmN0aW9uIHNhbWVTY2hlbWFFbnYoczEsIHMyKSB7XG4gICAgcmV0dXJuIHMxLnNjaGVtYSA9PT0gczIuc2NoZW1hICYmIHMxLnJvb3QgPT09IHMyLnJvb3QgJiYgczEuYmFzZUlkID09PSBzMi5iYXNlSWQ7XG59XG4vLyByZXNvbHZlIGFuZCBjb21waWxlIHRoZSByZWZlcmVuY2VzICgkcmVmKVxuLy8gVE9ETyByZXR1cm5zIEFueVNjaGVtYU9iamVjdCAoaWYgdGhlIHNjaGVtYSBjYW4gYmUgaW5saW5lZCkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvblxuZnVuY3Rpb24gcmVzb2x2ZShyb290LCAvLyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoZSBjdXJyZW50IHNjaGVtYVxucmVmIC8vIHJlZmVyZW5jZSB0byByZXNvbHZlXG4pIHtcbiAgICBsZXQgc2NoO1xuICAgIHdoaWxlICh0eXBlb2YgKHNjaCA9IHRoaXMucmVmc1tyZWZdKSA9PSBcInN0cmluZ1wiKVxuICAgICAgICByZWYgPSBzY2g7XG4gICAgcmV0dXJuIHNjaCB8fCB0aGlzLnNjaGVtYXNbcmVmXSB8fCByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgcmVmKTtcbn1cbi8vIFJlc29sdmUgc2NoZW1hLCBpdHMgcm9vdCBhbmQgYmFzZUlkXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHJvb3QsIC8vIHJvb3Qgb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJlZnMgVE9ETyBiZWxvdyBTY2hlbWFFbnYgaXMgYXNzaWduZWQgdG8gaXRcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgY29uc3QgcCA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5wYXJzZShyZWYpO1xuICAgIGNvbnN0IHJlZlBhdGggPSAoMCwgcmVzb2x2ZV8xLl9nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBwKTtcbiAgICBsZXQgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCByb290LmJhc2VJZCwgdW5kZWZpbmVkKTtcbiAgICAvLyBUT0RPIGBPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID4gMGAgc2hvdWxkIG5vdCBiZSBuZWVkZWQgLSBidXQgcmVtb3ZpbmcgYnJlYWtzIDIgdGVzdHNcbiAgICBpZiAoT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDAgJiYgcmVmUGF0aCA9PT0gYmFzZUlkKSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHJvb3QpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZlBhdGgpO1xuICAgIGNvbnN0IHNjaE9yUmVmID0gdGhpcy5yZWZzW2lkXSB8fCB0aGlzLnNjaGVtYXNbaWRdO1xuICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBzY2ggPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgc2NoT3JSZWYpO1xuICAgICAgICBpZiAodHlwZW9mIChzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2guc2NoZW1hKSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAoc2NoT3JSZWYgPT09IG51bGwgfHwgc2NoT3JSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaE9yUmVmLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIXNjaE9yUmVmLnZhbGlkYXRlKVxuICAgICAgICBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoT3JSZWYpO1xuICAgIGlmIChpZCA9PT0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkocmVmKSkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gc2NoT3JSZWY7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgY29uc3Qgc2NoSWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICBpZiAoc2NoSWQpXG4gICAgICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCBzY2hJZCk7XG4gICAgICAgIHJldHVybiBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBzY2hPclJlZik7XG59XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSByZXNvbHZlU2NoZW1hO1xuY29uc3QgUFJFVkVOVF9TQ09QRV9DSEFOR0UgPSBuZXcgU2V0KFtcbiAgICBcInByb3BlcnRpZXNcIixcbiAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJkZXBlbmRlbmNpZXNcIixcbiAgICBcImRlZmluaXRpb25zXCIsXG5dKTtcbmZ1bmN0aW9uIGdldEpzb25Qb2ludGVyKHBhcnNlZFJlZiwgeyBiYXNlSWQsIHNjaGVtYSwgcm9vdCB9KSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICgoKF9hID0gcGFyc2VkUmVmLmZyYWdtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMF0pICE9PSBcIi9cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJzZWRSZWYuZnJhZ21lbnQuc2xpY2UoMSkuc3BsaXQoXCIvXCIpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcGFydFNjaGVtYSA9IHNjaGVtYVsoMCwgdXRpbF8xLnVuZXNjYXBlRnJhZ21lbnQpKHBhcnQpXTtcbiAgICAgICAgaWYgKHBhcnRTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2NoZW1hID0gcGFydFNjaGVtYTtcbiAgICAgICAgLy8gVE9ETyBQUkVWRU5UX1NDT1BFX0NIQU5HRSBjb3VsZCBiZSBkZWZpbmVkIGluIGtleXdvcmQgZGVmP1xuICAgICAgICBjb25zdCBzY2hJZCA9IHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiYgc2NoZW1hW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgIGlmICghUFJFVkVOVF9TQ09QRV9DSEFOR0UuaGFzKHBhcnQpICYmIHNjaElkKSB7XG4gICAgICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCBzY2hJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVudjtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIiAmJiBzY2hlbWEuJHJlZiAmJiAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCB0aGlzLlJVTEVTKSkge1xuICAgICAgICBjb25zdCAkcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoZW1hLiRyZWYpO1xuICAgICAgICBlbnYgPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgJHJlZik7XG4gICAgfVxuICAgIC8vIGV2ZW4gdGhvdWdoIHJlc29sdXRpb24gZmFpbGVkIHdlIG5lZWQgdG8gcmV0dXJuIFNjaGVtYUVudiB0byB0aHJvdyBleGNlcHRpb25cbiAgICAvLyBzbyB0aGF0IGNvbXBpbGVBc3luYyBsb2FkcyBtaXNzaW5nIHNjaGVtYS5cbiAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgZW52ID0gZW52IHx8IG5ldyBTY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCByb290LCBiYXNlSWQgfSk7XG4gICAgaWYgKGVudi5zY2hlbWEgIT09IGVudi5yb290LnNjaGVtYSlcbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKiogQGxpY2Vuc2UgVVJJLmpzIHY0LjQuMSAoYykgMjAxMSBHYXJ5IENvdXJ0LiBMaWNlbnNlOiBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvdXJpLWpzICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG5cdChmYWN0b3J5KChnbG9iYWwuVVJJID0gZ2xvYmFsLlVSSSB8fCB7fSkpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNldHMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgc2V0c1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoc2V0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHNldHNbMF0gPSBzZXRzWzBdLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgdmFyIHhsID0gc2V0cy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKHZhciB4ID0gMTsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgIHNldHNbeF0gPSBzZXRzW3hdLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRzW3hsXSA9IHNldHNbeGxdLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gc2V0cy5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2V0c1swXTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdWJleHAoc3RyKSB7XG4gICAgcmV0dXJuIFwiKD86XCIgKyBzdHIgKyBcIilcIjtcbn1cbmZ1bmN0aW9uIHR5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8gPT09IHVuZGVmaW5lZCA/IFwidW5kZWZpbmVkXCIgOiBvID09PSBudWxsID8gXCJudWxsXCIgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc3BsaXQoXCIgXCIpLnBvcCgpLnNwbGl0KFwiXVwiKS5zaGlmdCgpLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiB0b1VwcGVyQ2FzZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICAgIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgPyBvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6IHR5cGVvZiBvYmoubGVuZ3RoICE9PSBcIm51bWJlclwiIHx8IG9iai5zcGxpdCB8fCBvYmouc2V0SW50ZXJ2YWwgfHwgb2JqLmNhbGwgPyBbb2JqXSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaikgOiBbXTtcbn1cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkge1xuICAgIHZhciBvYmogPSB0YXJnZXQ7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRXhwcyhpc0lSSSkge1xuICAgIHZhciBBTFBIQSQkID0gXCJbQS1aYS16XVwiLFxuICAgICAgICBDUiQgPSBcIltcXFxceDBEXVwiLFxuICAgICAgICBESUdJVCQkID0gXCJbMC05XVwiLFxuICAgICAgICBEUVVPVEUkJCA9IFwiW1xcXFx4MjJdXCIsXG4gICAgICAgIEhFWERJRyQkID0gbWVyZ2UoRElHSVQkJCwgXCJbQS1GYS1mXVwiKSxcbiAgICAgICAgLy9jYXNlLWluc2Vuc2l0aXZlXG4gICAgTEYkJCA9IFwiW1xcXFx4MEFdXCIsXG4gICAgICAgIFNQJCQgPSBcIltcXFxceDIwXVwiLFxuICAgICAgICBQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSksXG4gICAgICAgIC8vZXhwYW5kZWRcbiAgICBHRU5fREVMSU1TJCQgPSBcIltcXFxcOlxcXFwvXFxcXD9cXFxcI1xcXFxbXFxcXF1cXFxcQF1cIixcbiAgICAgICAgU1VCX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwmXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcPV1cIixcbiAgICAgICAgUkVTRVJWRUQkJCA9IG1lcmdlKEdFTl9ERUxJTVMkJCwgU1VCX0RFTElNUyQkKSxcbiAgICAgICAgVUNTQ0hBUiQkID0gaXNJUkkgPyBcIltcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZdXCIgOiBcIltdXCIsXG4gICAgICAgIC8vc3Vic2V0LCBleGNsdWRlcyBiaWRpIGNvbnRyb2wgY2hhcmFjdGVyc1xuICAgIElQUklWQVRFJCQgPSBpc0lSSSA/IFwiW1xcXFx1RTAwMC1cXFxcdUY4RkZdXCIgOiBcIltdXCIsXG4gICAgICAgIC8vc3Vic2V0XG4gICAgVU5SRVNFUlZFRCQkID0gbWVyZ2UoQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXC1cXFxcLlxcXFxfXFxcXH5dXCIsIFVDU0NIQVIkJCksXG4gICAgICAgIFNDSEVNRSQgPSBzdWJleHAoQUxQSEEkJCArIG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwrXFxcXC1cXFxcLl1cIikgKyBcIipcIiksXG4gICAgICAgIFVTRVJJTkZPJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpdXCIpKSArIFwiKlwiKSxcbiAgICAgICAgREVDX09DVEVUJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIlsxLTldXCIgKyBESUdJVCQkKSArIFwifFwiICsgRElHSVQkJCksXG4gICAgICAgIERFQ19PQ1RFVF9SRUxBWEVEJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjA/WzEtOV1cIiArIERJR0lUJCQpICsgXCJ8MD8wP1wiICsgRElHSVQkJCksXG4gICAgICAgIC8vcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG4gICAgSVBWNEFERFJFU1MkID0gc3ViZXhwKERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCksXG4gICAgICAgIEgxNiQgPSBzdWJleHAoSEVYRElHJCQgKyBcInsxLDR9XCIpLFxuICAgICAgICBMUzMyJCA9IHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIiArIEgxNiQpICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQpLFxuICAgICAgICBJUFY2QUREUkVTUzEkID0gc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezZ9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgNiggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTMiQgPSBzdWJleHAoXCJcXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns1fVwiICsgTFMzMiQpLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBcIjo6XCIgNSggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTMyQgPSBzdWJleHAoc3ViZXhwKEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7NH1cIiArIExTMzIkKSxcbiAgICAgICAgLy9bICAgICAgICAgICAgICAgaDE2IF0gXCI6OlwiIDQoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzQkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDF9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezN9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMSggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDMoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzUkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDJ9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezJ9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMiggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDIoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzYkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDN9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIEgxNiQgKyBcIlxcXFw6XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMyggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgIGgxNiBcIjpcIiAgIGxzMzJcbiAgICBJUFY2QUREUkVTUzckID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDR9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIExTMzIkKSxcbiAgICAgICAgLy9bICo0KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgICAgICAgICAgIGxzMzJcbiAgICBJUFY2QUREUkVTUzgkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDV9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIEgxNiQpLFxuICAgICAgICAvL1sgKjUoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICAgICAgICAgICAgaDE2XG4gICAgSVBWNkFERFJFU1M5JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw2fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIpLFxuICAgICAgICAvL1sgKjYoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIlxuICAgIElQVjZBRERSRVNTJCA9IHN1YmV4cChbSVBWNkFERFJFU1MxJCwgSVBWNkFERFJFU1MyJCwgSVBWNkFERFJFU1MzJCwgSVBWNkFERFJFU1M0JCwgSVBWNkFERFJFU1M1JCwgSVBWNkFERFJFU1M2JCwgSVBWNkFERFJFU1M3JCwgSVBWNkFERFJFU1M4JCwgSVBWNkFERFJFU1M5JF0uam9pbihcInxcIikpLFxuICAgICAgICBaT05FSUQkID0gc3ViZXhwKHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCkgKyBcIitcIiksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBJUFY2QUREUlokID0gc3ViZXhwKElQVjZBRERSRVNTJCArIFwiXFxcXCUyNVwiICsgWk9ORUlEJCksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBJUFY2QUREUlpfUkVMQVhFRCQgPSBzdWJleHAoSVBWNkFERFJFU1MkICsgc3ViZXhwKFwiXFxcXCUyNXxcXFxcJSg/IVwiICsgSEVYRElHJCQgKyBcInsyfSlcIikgKyBaT05FSUQkKSxcbiAgICAgICAgLy9SRkMgNjg3NCwgd2l0aCByZWxheGVkIHBhcnNpbmcgcnVsZXNcbiAgICBJUFZGVVRVUkUkID0gc3ViZXhwKFwiW3ZWXVwiICsgSEVYRElHJCQgKyBcIitcXFxcLlwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSArIFwiK1wiKSxcbiAgICAgICAgSVBfTElURVJBTCQgPSBzdWJleHAoXCJcXFxcW1wiICsgc3ViZXhwKElQVjZBRERSWl9SRUxBWEVEJCArIFwifFwiICsgSVBWNkFERFJFU1MkICsgXCJ8XCIgKyBJUFZGVVRVUkUkKSArIFwiXFxcXF1cIiksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBSRUdfTkFNRSQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpKSArIFwiKlwiKSxcbiAgICAgICAgSE9TVCQgPSBzdWJleHAoSVBfTElURVJBTCQgKyBcInxcIiArIElQVjRBRERSRVNTJCArIFwiKD8hXCIgKyBSRUdfTkFNRSQgKyBcIilcIiArIFwifFwiICsgUkVHX05BTUUkKSxcbiAgICAgICAgUE9SVCQgPSBzdWJleHAoRElHSVQkJCArIFwiKlwiKSxcbiAgICAgICAgQVVUSE9SSVRZJCA9IHN1YmV4cChzdWJleHAoVVNFUklORk8kICsgXCJAXCIpICsgXCI/XCIgKyBIT1NUJCArIHN1YmV4cChcIlxcXFw6XCIgKyBQT1JUJCkgKyBcIj9cIiksXG4gICAgICAgIFBDSEFSJCA9IHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXVwiKSksXG4gICAgICAgIFNFR01FTlQkID0gc3ViZXhwKFBDSEFSJCArIFwiKlwiKSxcbiAgICAgICAgU0VHTUVOVF9OWiQgPSBzdWJleHAoUENIQVIkICsgXCIrXCIpLFxuICAgICAgICBTRUdNRU5UX05aX05DJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXEBdXCIpKSArIFwiK1wiKSxcbiAgICAgICAgUEFUSF9BQkVNUFRZJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1wiICsgU0VHTUVOVCQpICsgXCIqXCIpLFxuICAgICAgICBQQVRIX0FCU09MVVRFJCA9IHN1YmV4cChcIlxcXFwvXCIgKyBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSArIFwiP1wiKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9OT1NDSEVNRSQgPSBzdWJleHAoU0VHTUVOVF9OWl9OQyQgKyBQQVRIX0FCRU1QVFkkKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9ST09UTEVTUyQgPSBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9FTVBUWSQgPSBcIig/IVwiICsgUENIQVIkICsgXCIpXCIsXG4gICAgICAgIFBBVEgkID0gc3ViZXhwKFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgUVVFUlkkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxcIiArIG1lcmdlKFwiW1xcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpKSArIFwiKlwiKSxcbiAgICAgICAgRlJBR01FTlQkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxbXFxcXC9cXFxcP11cIikgKyBcIipcIiksXG4gICAgICAgIEhJRVJfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgVVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSxcbiAgICAgICAgUkVMQVRJVkVfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgUkVMQVRJVkUkID0gc3ViZXhwKFJFTEFUSVZFX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjXCIgKyBGUkFHTUVOVCQpICsgXCI/XCIpLFxuICAgICAgICBVUklfUkVGRVJFTkNFJCA9IHN1YmV4cChVUkkkICsgXCJ8XCIgKyBSRUxBVElWRSQpLFxuICAgICAgICBBQlNPTFVURV9VUkkkID0gc3ViZXhwKFNDSEVNRSQgKyBcIlxcXFw6XCIgKyBISUVSX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiksXG4gICAgICAgIEdFTkVSSUNfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcbiAgICAgICAgUkVMQVRJVkVfUkVGJCA9IFwiXigpezB9XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuICAgICAgICBBQlNPTFVURV9SRUYkID0gXCJeKFwiICsgU0NIRU1FJCArIFwiKVxcXFw6XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj8kXCIsXG4gICAgICAgIFNBTUVET0NfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG4gICAgICAgIEFVVEhPUklUWV9SRUYkID0gXCJeXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8kXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgTk9UX1NDSEVNRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpLCBcImdcIiksXG4gICAgICAgIE5PVF9VU0VSSU5GTzogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9IT1NUOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFxbXFxcXF1cXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9QQVRIOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXDpcXFxcQF1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9QQVRIX05PU0NIRU1FOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBOT1RfUVVFUlk6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9GUkFHTUVOVDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXFxcXC9cXFxcP11cIiksIFwiZ1wiKSxcbiAgICAgICAgRVNDQVBFOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBVTlJFU0VSVkVEOiBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpLFxuICAgICAgICBPVEhFUl9DSEFSUzogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgUkVTRVJWRUQkJCksIFwiZ1wiKSxcbiAgICAgICAgUENUX0VOQ09ERUQ6IG5ldyBSZWdFeHAoUENUX0VOQ09ERUQkLCBcImdcIiksXG4gICAgICAgIElQVjRBRERSRVNTOiBuZXcgUmVnRXhwKFwiXihcIiArIElQVjRBRERSRVNTJCArIFwiKSRcIiksXG4gICAgICAgIElQVjZBRERSRVNTOiBuZXcgUmVnRXhwKFwiXlxcXFxbPyhcIiArIElQVjZBRERSRVNTJCArIFwiKVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwlMjV8XFxcXCUoPyFcIiArIEhFWERJRyQkICsgXCJ7Mn0pXCIpICsgXCIoXCIgKyBaT05FSUQkICsgXCIpXCIpICsgXCI/XFxcXF0/JFwiKSAvL1JGQyA2ODc0LCB3aXRoIHJlbGF4ZWQgcGFyc2luZyBydWxlc1xuICAgIH07XG59XG52YXIgVVJJX1BST1RPQ09MID0gYnVpbGRFeHBzKGZhbHNlKTtcblxudmFyIElSSV9QUk9UT0NPTCA9IGJ1aWxkRXhwcyh0cnVlKTtcblxudmFyIHNsaWNlZFRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7XG4gICAgdmFyIF9hcnIgPSBbXTtcbiAgICB2YXIgX24gPSB0cnVlO1xuICAgIHZhciBfZCA9IGZhbHNlO1xuICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSB0cnVlO1xuICAgICAgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfYXJyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciB0b0NvbnN1bWFibGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnIpO1xuICB9XG59O1xuXG4vKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cbnZhciBtYXhJbnQgPSAyMTQ3NDgzNjQ3OyAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cbi8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cbnZhciBiYXNlID0gMzY7XG52YXIgdE1pbiA9IDE7XG52YXIgdE1heCA9IDI2O1xudmFyIHNrZXcgPSAzODtcbnZhciBkYW1wID0gNzAwO1xudmFyIGluaXRpYWxCaWFzID0gNzI7XG52YXIgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbnZhciBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcblxuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cbnZhciByZWdleFB1bnljb2RlID0gL154bi0tLztcbnZhciByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxceDdFXS87IC8vIG5vbi1BU0NJSSBjaGFyc1xudmFyIHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuLyoqIEVycm9yIG1lc3NhZ2VzICovXG52YXIgZXJyb3JzID0ge1xuXHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xufTtcblxuLyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xudmFyIGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGVycm9yJDEodHlwZSkge1xuXHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcbiAqIGl0ZW0uXG4gKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0dmFyIHJlc3VsdCA9IFtdO1xuXHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRyZXN1bHRbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG4gKiBhZGRyZXNzZXMuXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeVxuICogY2hhcmFjdGVyLlxuICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcbiAqIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHR2YXIgcGFydHMgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0dmFyIHJlc3VsdCA9ICcnO1xuXHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdC8vIEluIGVtYWlsIGFkZHJlc3Nlcywgb25seSB0aGUgZG9tYWluIG5hbWUgc2hvdWxkIGJlIHB1bnljb2RlZC4gTGVhdmVcblx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdHN0cmluZyA9IHBhcnRzWzFdO1xuXHR9XG5cdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx4MkUnKTtcblx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdHJldHVybiByZXN1bHQgKyBlbmNvZGVkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcbiAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG4gKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcbiAqIG1hdGNoaW5nIFVURi0xNi5cbiAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZGVjb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBVbmljb2RlIGlucHV0IHN0cmluZyAoVUNTLTIpLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuICovXG5mdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZykge1xuXHR2YXIgb3V0cHV0ID0gW107XG5cdHZhciBjb3VudGVyID0gMDtcblx0dmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0dmFyIHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBJdCdzIGEgaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyLlxuXHRcdFx0dmFyIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkge1xuXHRcdFx0XHQvLyBMb3cgc3Vycm9nYXRlLlxuXHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcblx0XHRcdFx0Ly8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZW5jb2RlXG4gKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuICovXG52YXIgdWNzMmVuY29kZSA9IGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcblx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBiYXNpYyBjb2RlIHBvaW50IGludG8gYSBkaWdpdC9pbnRlZ2VyLlxuICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVQb2ludCBUaGUgYmFzaWMgbnVtZXJpYyBjb2RlIHBvaW50IHZhbHVlLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG4gKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG4gKiB0aGUgY29kZSBwb2ludCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS5cbiAqL1xudmFyIGJhc2ljVG9EaWdpdCA9IGZ1bmN0aW9uIGJhc2ljVG9EaWdpdChjb2RlUG9pbnQpIHtcblx0aWYgKGNvZGVQb2ludCAtIDB4MzAgPCAweDBBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4MTY7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NDEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NDE7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NjEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NjE7XG5cdH1cblx0cmV0dXJuIGJhc2U7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2VcbiAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcbiAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG4gKi9cbnZhciBkaWdpdFRvQmFzaWMgPSBmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICogQHByaXZhdGVcbiAqL1xudmFyIGFkYXB0ID0gZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdHZhciBrID0gMDtcblx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRmb3IgKDsgLyogbm8gaW5pdGlhbGl6YXRpb24gKi9kZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0fVxuXHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcbiAqIHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqL1xudmFyIGRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHQvLyBEb24ndCB1c2UgVUNTLTIuXG5cdHZhciBvdXRwdXQgPSBbXTtcblx0dmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHR2YXIgaSA9IDA7XG5cdHZhciBuID0gaW5pdGlhbE47XG5cdHZhciBiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdHZhciBiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdGlmIChiYXNpYyA8IDApIHtcblx0XHRiYXNpYyA9IDA7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRlcnJvciQxKCdub3QtYmFzaWMnKTtcblx0XHR9XG5cdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdH1cblxuXHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0Zm9yICh2YXIgaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOykgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqL3tcblxuXHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0dmFyIG9sZGkgPSBpO1xuXHRcdGZvciAodmFyIHcgPSAxLCBrID0gYmFzZTs7IC8qIG5vIGNvbmRpdGlvbiAqL2sgKz0gYmFzZSkge1xuXG5cdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0ZXJyb3IkMSgnaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHR2YXIgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiBrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzO1xuXG5cdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRlcnJvciQxKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cdFx0fVxuXG5cdFx0dmFyIG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRpICU9IG91dDtcblxuXHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXQuXG5cdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXHR9XG5cblx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgb3V0cHV0KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqL1xudmFyIGVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHR2YXIgb3V0cHV0ID0gW107XG5cblx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gYW4gYXJyYXkgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cblx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHQvLyBDYWNoZSB0aGUgbGVuZ3RoLlxuXHR2YXIgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUuXG5cdHZhciBuID0gaW5pdGlhbE47XG5cdHZhciBkZWx0YSA9IDA7XG5cdHZhciBiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50cy5cblx0dmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuXHR2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcblx0dmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG5cdHRyeSB7XG5cdFx0Zm9yICh2YXIgX2l0ZXJhdG9yID0gaW5wdXRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7XG5cdFx0XHR2YXIgX2N1cnJlbnRWYWx1ZTIgPSBfc3RlcC52YWx1ZTtcblxuXHRcdFx0aWYgKF9jdXJyZW50VmFsdWUyIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoX2N1cnJlbnRWYWx1ZTIpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcblx0XHRfaXRlcmF0b3JFcnJvciA9IGVycjtcblx0fSBmaW5hbGx5IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHtcblx0XHRcdFx0X2l0ZXJhdG9yLnJldHVybigpO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoX2RpZEl0ZXJhdG9yRXJyb3IpIHtcblx0XHRcdFx0dGhyb3cgX2l0ZXJhdG9yRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblx0dmFyIGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7XG5cblx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIHVubGVzcyBpdCdzIGVtcHR5LlxuXHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHR9XG5cblx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0dmFyIG0gPSBtYXhJbnQ7XG5cdFx0dmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcblx0XHR2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyID0gZmFsc2U7XG5cdFx0dmFyIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDtcblxuXHRcdHRyeSB7XG5cdFx0XHRmb3IgKHZhciBfaXRlcmF0b3IyID0gaW5wdXRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDI7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSAoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWUpIHtcblx0XHRcdFx0dmFyIGN1cnJlbnRWYWx1ZSA9IF9zdGVwMi52YWx1ZTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cuXG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRfZGlkSXRlcmF0b3JFcnJvcjIgPSB0cnVlO1xuXHRcdFx0X2l0ZXJhdG9yRXJyb3IyID0gZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yICYmIF9pdGVyYXRvcjIucmV0dXJuKSB7XG5cdFx0XHRcdFx0X2l0ZXJhdG9yMi5yZXR1cm4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKF9kaWRJdGVyYXRvckVycm9yMikge1xuXHRcdFx0XHRcdHRocm93IF9pdGVyYXRvckVycm9yMjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRuID0gbTtcblxuXHRcdHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG5cdFx0dmFyIF9kaWRJdGVyYXRvckVycm9yMyA9IGZhbHNlO1xuXHRcdHZhciBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0Zm9yICh2YXIgX2l0ZXJhdG9yMyA9IGlucHV0W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAzOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gKF9zdGVwMyA9IF9pdGVyYXRvcjMubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlKSB7XG5cdFx0XHRcdHZhciBfY3VycmVudFZhbHVlID0gX3N0ZXAzLnZhbHVlO1xuXG5cdFx0XHRcdGlmIChfY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoX2N1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIuXG5cdFx0XHRcdFx0dmFyIHEgPSBkZWx0YTtcblx0XHRcdFx0XHRmb3IgKHZhciBrID0gYmFzZTs7IC8qIG5vIGNvbmRpdGlvbiAqL2sgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dmFyIHQgPSBrIDw9IGJpYXMgPyB0TWluIDogayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcztcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHR2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKSk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRfZGlkSXRlcmF0b3JFcnJvcjMgPSB0cnVlO1xuXHRcdFx0X2l0ZXJhdG9yRXJyb3IzID0gZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zICYmIF9pdGVyYXRvcjMucmV0dXJuKSB7XG5cdFx0XHRcdFx0X2l0ZXJhdG9yMy5yZXR1cm4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuXHRcdFx0XHRcdHRocm93IF9pdGVyYXRvckVycm9yMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCsrZGVsdGE7XG5cdFx0KytuO1xuXHR9XG5cdHJldHVybiBvdXRwdXQuam9pbignJyk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3NcbiAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cbiAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuICogY29udmVydGVkIHRvIFVuaWNvZGUuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cbiAqIGNvbnZlcnQgdG8gVW5pY29kZS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuICogc3RyaW5nLlxuICovXG52YXIgdG9Vbmljb2RlID0gZnVuY3Rpb24gdG9Vbmljb2RlKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uIChzdHJpbmcpIHtcblx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZykgPyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpIDogc3RyaW5nO1xuXHR9KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG4gKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcbiAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuICogQVNDSUkuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG4gKiBVbmljb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3JcbiAqIGVtYWlsIGFkZHJlc3MuXG4gKi9cbnZhciB0b0FTQ0lJID0gZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpID8gJ3huLS0nICsgZW5jb2RlKHN0cmluZykgOiBzdHJpbmc7XG5cdH0pO1xufTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cbnZhciBwdW55Y29kZSA9IHtcblx0LyoqXG4gICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuICAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICAqIEB0eXBlIFN0cmluZ1xuICAqL1xuXHQndmVyc2lvbic6ICcyLjEuMCcsXG5cdC8qKlxuICAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG4gICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cbiAgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAgKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAgKiBAdHlwZSBPYmplY3RcbiAgKi9cblx0J3VjczInOiB7XG5cdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0fSxcblx0J2RlY29kZSc6IGRlY29kZSxcblx0J2VuY29kZSc6IGVuY29kZSxcblx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG59O1xuXG4vKipcbiAqIFVSSS5qc1xuICpcbiAqIEBmaWxlb3ZlcnZpZXcgQW4gUkZDIDM5ODYgY29tcGxpYW50LCBzY2hlbWUgZXh0ZW5kYWJsZSBVUkkgcGFyc2luZy92YWxpZGF0aW5nL3Jlc29sdmluZyBsaWJyYXJ5IGZvciBKYXZhU2NyaXB0LlxuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qc1xuICovXG4vKipcbiAqIENvcHlyaWdodCAyMDExIEdhcnkgQ291cnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlXG4gKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZlxuICogICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0XG4gKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFsc1xuICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR0FSWSBDT1VSVCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRURcbiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHQVJZIENPVVJUIE9SXG4gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUlxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGXG4gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZVxuICogYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWRcbiAqIG9yIGltcGxpZWQsIG9mIEdhcnkgQ291cnQuXG4gKi9cbnZhciBTQ0hFTUVTID0ge307XG5mdW5jdGlvbiBwY3RFbmNDaGFyKGNocikge1xuICAgIHZhciBjID0gY2hyLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIGUgPSB2b2lkIDA7XG4gICAgaWYgKGMgPCAxNikgZSA9IFwiJTBcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7ZWxzZSBpZiAoYyA8IDEyOCkgZSA9IFwiJVwiICsgYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtlbHNlIGlmIChjIDwgMjA0OCkgZSA9IFwiJVwiICsgKGMgPj4gNiB8IDE5MikudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIiVcIiArIChjICYgNjMgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2Vsc2UgZSA9IFwiJVwiICsgKGMgPj4gMTIgfCAyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoYyA+PiA2ICYgNjMgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoYyAmIDYzIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gZTtcbn1cbmZ1bmN0aW9uIHBjdERlY0NoYXJzKHN0cikge1xuICAgIHZhciBuZXdTdHIgPSBcIlwiO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaWwgPSBzdHIubGVuZ3RoO1xuICAgIHdoaWxlIChpIDwgaWwpIHtcbiAgICAgICAgdmFyIGMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyAxLCAyKSwgMTYpO1xuICAgICAgICBpZiAoYyA8IDEyOCkge1xuICAgICAgICAgICAgbmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSAxOTQgJiYgYyA8IDIyNCkge1xuICAgICAgICAgICAgaWYgKGlsIC0gaSA+PSA2KSB7XG4gICAgICAgICAgICAgICAgdmFyIGMyID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcbiAgICAgICAgICAgICAgICBuZXdTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDMxKSA8PCA2IHwgYzIgJiA2Myk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSA2O1xuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gMjI0KSB7XG4gICAgICAgICAgICBpZiAoaWwgLSBpID49IDkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2MgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA0LCAyKSwgMTYpO1xuICAgICAgICAgICAgICAgIHZhciBjMyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDcsIDIpLCAxNik7XG4gICAgICAgICAgICAgICAgbmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAxNSkgPDwgMTIgfCAoX2MgJiA2MykgPDwgNiB8IGMzICYgNjMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gOTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDMpO1xuICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdHI7XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpIHtcbiAgICBmdW5jdGlvbiBkZWNvZGVVbnJlc2VydmVkKHN0cikge1xuICAgICAgICB2YXIgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcbiAgICAgICAgcmV0dXJuICFkZWNTdHIubWF0Y2gocHJvdG9jb2wuVU5SRVNFUlZFRCkgPyBzdHIgOiBkZWNTdHI7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLnNjaGVtZSkgY29tcG9uZW50cy5zY2hlbWUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfU0NIRU1FLCBcIlwiKTtcbiAgICBpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLnVzZXJpbmZvID0gU3RyaW5nKGNvbXBvbmVudHMudXNlcmluZm8pLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX1VTRVJJTkZPLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgaWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmhvc3QgPSBTdHJpbmcoY29tcG9uZW50cy5ob3N0KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0hPU1QsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICBpZiAoY29tcG9uZW50cy5wYXRoICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucGF0aCA9IFN0cmluZyhjb21wb25lbnRzLnBhdGgpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoY29tcG9uZW50cy5zY2hlbWUgPyBwcm90b2NvbC5OT1RfUEFUSCA6IHByb3RvY29sLk5PVF9QQVRIX05PU0NIRU1FLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgaWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5xdWVyeSA9IFN0cmluZyhjb21wb25lbnRzLnF1ZXJ5KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9RVUVSWSwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuICAgIGlmIChjb21wb25lbnRzLmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMuZnJhZ21lbnQgPSBTdHJpbmcoY29tcG9uZW50cy5mcmFnbWVudCkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfRlJBR01FTlQsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gX3N0cmlwTGVhZGluZ1plcm9zKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXjAqKC4qKS8sIFwiJDFcIikgfHwgXCIwXCI7XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplSVB2NChob3N0LCBwcm90b2NvbCkge1xuICAgIHZhciBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY0QUREUkVTUykgfHwgW107XG5cbiAgICB2YXIgX21hdGNoZXMgPSBzbGljZWRUb0FycmF5KG1hdGNoZXMsIDIpLFxuICAgICAgICBhZGRyZXNzID0gX21hdGNoZXNbMV07XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICByZXR1cm4gYWRkcmVzcy5zcGxpdChcIi5cIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykuam9pbihcIi5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhvc3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gX25vcm1hbGl6ZUlQdjYoaG9zdCwgcHJvdG9jb2wpIHtcbiAgICB2YXIgbWF0Y2hlcyA9IGhvc3QubWF0Y2gocHJvdG9jb2wuSVBWNkFERFJFU1MpIHx8IFtdO1xuXG4gICAgdmFyIF9tYXRjaGVzMiA9IHNsaWNlZFRvQXJyYXkobWF0Y2hlcywgMyksXG4gICAgICAgIGFkZHJlc3MgPSBfbWF0Y2hlczJbMV0sXG4gICAgICAgIHpvbmUgPSBfbWF0Y2hlczJbMl07XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICB2YXIgX2FkZHJlc3MkdG9Mb3dlckNhc2UkID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNwbGl0KCc6OicpLnJldmVyc2UoKSxcbiAgICAgICAgICAgIF9hZGRyZXNzJHRvTG93ZXJDYXNlJDIgPSBzbGljZWRUb0FycmF5KF9hZGRyZXNzJHRvTG93ZXJDYXNlJCwgMiksXG4gICAgICAgICAgICBsYXN0ID0gX2FkZHJlc3MkdG9Mb3dlckNhc2UkMlswXSxcbiAgICAgICAgICAgIGZpcnN0ID0gX2FkZHJlc3MkdG9Mb3dlckNhc2UkMlsxXTtcblxuICAgICAgICB2YXIgZmlyc3RGaWVsZHMgPSBmaXJzdCA/IGZpcnN0LnNwbGl0KFwiOlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKSA6IFtdO1xuICAgICAgICB2YXIgbGFzdEZpZWxkcyA9IGxhc3Quc3BsaXQoXCI6XCIpLm1hcChfc3RyaXBMZWFkaW5nWmVyb3MpO1xuICAgICAgICB2YXIgaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA9IHByb3RvY29sLklQVjRBRERSRVNTLnRlc3QobGFzdEZpZWxkc1tsYXN0RmllbGRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgdmFyIGZpZWxkQ291bnQgPSBpc0xhc3RGaWVsZElQdjRBZGRyZXNzID8gNyA6IDg7XG4gICAgICAgIHZhciBsYXN0RmllbGRzU3RhcnQgPSBsYXN0RmllbGRzLmxlbmd0aCAtIGZpZWxkQ291bnQ7XG4gICAgICAgIHZhciBmaWVsZHMgPSBBcnJheShmaWVsZENvdW50KTtcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBmaWVsZENvdW50OyArK3gpIHtcbiAgICAgICAgICAgIGZpZWxkc1t4XSA9IGZpcnN0RmllbGRzW3hdIHx8IGxhc3RGaWVsZHNbbGFzdEZpZWxkc1N0YXJ0ICsgeF0gfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTGFzdEZpZWxkSVB2NEFkZHJlc3MpIHtcbiAgICAgICAgICAgIGZpZWxkc1tmaWVsZENvdW50IC0gMV0gPSBfbm9ybWFsaXplSVB2NChmaWVsZHNbZmllbGRDb3VudCAtIDFdLCBwcm90b2NvbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsbFplcm9GaWVsZHMgPSBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGZpZWxkLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKCFmaWVsZCB8fCBmaWVsZCA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdExvbmdlc3QgPSBhY2NbYWNjLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0TG9uZ2VzdCAmJiBsYXN0TG9uZ2VzdC5pbmRleCArIGxhc3RMb25nZXN0Lmxlbmd0aCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdExvbmdlc3QubGVuZ3RoKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjLnB1c2goeyBpbmRleDogaW5kZXgsIGxlbmd0aDogMSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHZhciBsb25nZXN0WmVyb0ZpZWxkcyA9IGFsbFplcm9GaWVsZHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH0pWzBdO1xuICAgICAgICB2YXIgbmV3SG9zdCA9IHZvaWQgMDtcbiAgICAgICAgaWYgKGxvbmdlc3RaZXJvRmllbGRzICYmIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBuZXdGaXJzdCA9IGZpZWxkcy5zbGljZSgwLCBsb25nZXN0WmVyb0ZpZWxkcy5pbmRleCk7XG4gICAgICAgICAgICB2YXIgbmV3TGFzdCA9IGZpZWxkcy5zbGljZShsb25nZXN0WmVyb0ZpZWxkcy5pbmRleCArIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCk7XG4gICAgICAgICAgICBuZXdIb3N0ID0gbmV3Rmlyc3Quam9pbihcIjpcIikgKyBcIjo6XCIgKyBuZXdMYXN0LmpvaW4oXCI6XCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3SG9zdCA9IGZpZWxkcy5qb2luKFwiOlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoem9uZSkge1xuICAgICAgICAgICAgbmV3SG9zdCArPSBcIiVcIiArIHpvbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0hvc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhvc3Q7XG4gICAgfVxufVxudmFyIFVSSV9QQVJTRSA9IC9eKD86KFteOlxcLz8jXSspOik/KD86XFwvXFwvKCg/OihbXlxcLz8jQF0qKUApPyhcXFtbXlxcLz8jXFxdXStcXF18W15cXC8/IzpdKikoPzpcXDooXFxkKikpPykpPyhbXj8jXSopKD86XFw/KFteI10qKSk/KD86IygoPzoufFxcbnxcXHIpKikpPy9pO1xudmFyIE5PX01BVENIX0lTX1VOREVGSU5FRCA9IFwiXCIubWF0Y2goLygpezB9LylbMV0gPT09IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHBhcnNlKHVyaVN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHZhciBjb21wb25lbnRzID0ge307XG4gICAgdmFyIHByb3RvY29sID0gb3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSA9PT0gXCJzdWZmaXhcIikgdXJpU3RyaW5nID0gKG9wdGlvbnMuc2NoZW1lID8gb3B0aW9ucy5zY2hlbWUgKyBcIjpcIiA6IFwiXCIpICsgXCIvL1wiICsgdXJpU3RyaW5nO1xuICAgIHZhciBtYXRjaGVzID0gdXJpU3RyaW5nLm1hdGNoKFVSSV9QQVJTRSk7XG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgaWYgKE5PX01BVENIX0lTX1VOREVGSU5FRCkge1xuICAgICAgICAgICAgLy9zdG9yZSBlYWNoIGNvbXBvbmVudFxuICAgICAgICAgICAgY29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdO1xuICAgICAgICAgICAgY29tcG9uZW50cy51c2VyaW5mbyA9IG1hdGNoZXNbM107XG4gICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSBtYXRjaGVzWzRdO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuICAgICAgICAgICAgY29tcG9uZW50cy5xdWVyeSA9IG1hdGNoZXNbN107XG4gICAgICAgICAgICBjb21wb25lbnRzLmZyYWdtZW50ID0gbWF0Y2hlc1s4XTtcbiAgICAgICAgICAgIC8vZml4IHBvcnQgbnVtYmVyXG4gICAgICAgICAgICBpZiAoaXNOYU4oY29tcG9uZW50cy5wb3J0KSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IG1hdGNoZXNbNV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL0lFIEZJWCBmb3IgaW1wcm9wZXIgUmVnRXhwIG1hdGNoaW5nXG4gICAgICAgICAgICAvL3N0b3JlIGVhY2ggY29tcG9uZW50XG4gICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IG1hdGNoZXNbMV0gfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy51c2VyaW5mbyA9IHVyaVN0cmluZy5pbmRleE9mKFwiQFwiKSAhPT0gLTEgPyBtYXRjaGVzWzNdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gdXJpU3RyaW5nLmluZGV4T2YoXCIvL1wiKSAhPT0gLTEgPyBtYXRjaGVzWzRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuICAgICAgICAgICAgY29tcG9uZW50cy5xdWVyeSA9IHVyaVN0cmluZy5pbmRleE9mKFwiP1wiKSAhPT0gLTEgPyBtYXRjaGVzWzddIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5mcmFnbWVudCA9IHVyaVN0cmluZy5pbmRleE9mKFwiI1wiKSAhPT0gLTEgPyBtYXRjaGVzWzhdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy9maXggcG9ydCBudW1iZXJcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gdXJpU3RyaW5nLm1hdGNoKC9cXC9cXC8oPzoufFxcbikqXFw6KD86XFwvfFxcP3xcXCN8JCkvKSA/IG1hdGNoZXNbNF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvbmVudHMuaG9zdCkge1xuICAgICAgICAgICAgLy9ub3JtYWxpemUgSVAgaG9zdHNcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IF9ub3JtYWxpemVJUHY2KF9ub3JtYWxpemVJUHY0KGNvbXBvbmVudHMuaG9zdCwgcHJvdG9jb2wpLCBwcm90b2NvbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZXRlcm1pbmUgcmVmZXJlbmNlIHR5cGVcbiAgICAgICAgaWYgKGNvbXBvbmVudHMuc2NoZW1lID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy51c2VyaW5mbyA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMuaG9zdCA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMucG9ydCA9PT0gdW5kZWZpbmVkICYmICFjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5xdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwic2FtZS1kb2N1bWVudFwiO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudHMuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5yZWZlcmVuY2UgPSBcImFic29sdXRlXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwidXJpXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9jaGVjayBmb3IgcmVmZXJlbmNlIGVycm9yc1xuICAgICAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IGNvbXBvbmVudHMucmVmZXJlbmNlKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIlVSSSBpcyBub3QgYSBcIiArIG9wdGlvbnMucmVmZXJlbmNlICsgXCIgcmVmZXJlbmNlLlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vZmluZCBzY2hlbWUgaGFuZGxlclxuICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAvL2NoZWNrIGlmIHNjaGVtZSBjYW4ndCBoYW5kbGUgSVJJc1xuICAgICAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgICAgICAgLy9pZiBob3N0IGNvbXBvbmVudCBpcyBhIGRvbWFpbiBuYW1lXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpKSB7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IHB1bnljb2RlLnRvQVNDSUkoY29tcG9uZW50cy5ob3N0LnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29udmVydCBJUkkgLT4gVVJJXG4gICAgICAgICAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgVVJJX1BST1RPQ09MKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vbm9ybWFsaXplIGVuY29kaW5nc1xuICAgICAgICAgICAgX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKTtcbiAgICAgICAgfVxuICAgICAgICAvL3BlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHBhcnNpbmdcbiAgICAgICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuICAgICAgICAgICAgc2NoZW1lSGFuZGxlci5wYXJzZShjb21wb25lbnRzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gX3JlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgdmFyIHByb3RvY29sID0gb3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIHZhciB1cmlUb2tlbnMgPSBbXTtcbiAgICBpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMudXNlcmluZm8pO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIkBcIik7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvL25vcm1hbGl6ZSBJUCBob3N0cywgYWRkIGJyYWNrZXRzIGFuZCBlc2NhcGUgem9uZSBzZXBhcmF0b3IgZm9yIElQdjZcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoU3RyaW5nKGNvbXBvbmVudHMuaG9zdCksIHByb3RvY29sKSwgcHJvdG9jb2wpLnJlcGxhY2UocHJvdG9jb2wuSVBWNkFERFJFU1MsIGZ1bmN0aW9uIChfLCAkMSwgJDIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIltcIiArICQxICsgKCQyID8gXCIlMjVcIiArICQyIDogXCJcIikgKyBcIl1cIjtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMucG9ydCA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goU3RyaW5nKGNvbXBvbmVudHMucG9ydCkpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpVG9rZW5zLmxlbmd0aCA/IHVyaVRva2Vucy5qb2luKFwiXCIpIDogdW5kZWZpbmVkO1xufVxuXG52YXIgUkRTMSA9IC9eXFwuXFwuP1xcLy87XG52YXIgUkRTMiA9IC9eXFwvXFwuKFxcL3wkKS87XG52YXIgUkRTMyA9IC9eXFwvXFwuXFwuKFxcL3wkKS87XG52YXIgUkRTNSA9IC9eXFwvPyg/Oi58XFxuKSo/KD89XFwvfCQpLztcbmZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzKGlucHV0KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHdoaWxlIChpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKFJEUzEpKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMSwgXCJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMikpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMyLCBcIi9cIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMykpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMzLCBcIi9cIik7XG4gICAgICAgICAgICBvdXRwdXQucG9wKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFwiLlwiIHx8IGlucHV0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgIGlucHV0ID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbSA9IGlucHV0Lm1hdGNoKFJEUzUpO1xuICAgICAgICAgICAgaWYgKGltKSB7XG4gICAgICAgICAgICAgICAgdmFyIHMgPSBpbVswXTtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBkb3Qgc2VnbWVudCBjb25kaXRpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUoY29tcG9uZW50cykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHZhciBwcm90b2NvbCA9IG9wdGlvbnMuaXJpID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIHZhciB1cmlUb2tlbnMgPSBbXTtcbiAgICAvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcbiAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xuICAgIC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICAgIGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKSBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZShjb21wb25lbnRzLCBvcHRpb25zKTtcbiAgICBpZiAoY29tcG9uZW50cy5ob3N0KSB7XG4gICAgICAgIC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYW4gSVB2NiBhZGRyZXNzXG4gICAgICAgIGlmIChwcm90b2NvbC5JUFY2QUREUkVTUy50ZXN0KGNvbXBvbmVudHMuaG9zdCkpIHt9XG4gICAgICAgIC8vVE9ETzogbm9ybWFsaXplIElQdjYgYWRkcmVzcyBhcyBwZXIgUkZDIDU5NTJcblxuICAgICAgICAvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSB7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSAhb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoY29tcG9uZW50cy5ob3N0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy9ub3JtYWxpemUgZW5jb2RpbmdcbiAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIiAmJiBjb21wb25lbnRzLnNjaGVtZSkge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnNjaGVtZSk7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcbiAgICB9XG4gICAgdmFyIGF1dGhvcml0eSA9IF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucyk7XG4gICAgaWYgKGF1dGhvcml0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIikge1xuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goXCIvL1wiKTtcbiAgICAgICAgfVxuICAgICAgICB1cmlUb2tlbnMucHVzaChhdXRob3JpdHkpO1xuICAgICAgICBpZiAoY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucGF0aC5jaGFyQXQoMCkgIT09IFwiL1wiKSB7XG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIi9cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBzID0gY29tcG9uZW50cy5wYXRoO1xuICAgICAgICBpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG4gICAgICAgICAgICBzID0gcmVtb3ZlRG90U2VnbWVudHMocyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dGhvcml0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzID0gcy5yZXBsYWNlKC9eXFwvXFwvLywgXCIvJTJGXCIpOyAvL2Rvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgICAgIH1cbiAgICAgICAgdXJpVG9rZW5zLnB1c2gocyk7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goXCI/XCIpO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnF1ZXJ5KTtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIiNcIik7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuZnJhZ21lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpVG9rZW5zLmpvaW4oXCJcIik7IC8vbWVyZ2UgdG9rZW5zIGludG8gYSBzdHJpbmdcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudHMoYmFzZSwgcmVsYXRpdmUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIHNraXBOb3JtYWxpemF0aW9uID0gYXJndW1lbnRzWzNdO1xuXG4gICAgdmFyIHRhcmdldCA9IHt9O1xuICAgIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICAgICAgYmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucyk7IC8vbm9ybWFsaXplIGJhc2UgY29tcG9uZW50c1xuICAgICAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAvL25vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRzXG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcbiAgICAgICAgdGFyZ2V0LnNjaGVtZSA9IHJlbGF0aXZlLnNjaGVtZTtcbiAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuICAgICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcbiAgICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcbiAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlbGF0aXZlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuICAgICAgICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gcmVsYXRpdmUudXNlcmluZm87XG4gICAgICAgICAgICB0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGggfHwgXCJcIik7XG4gICAgICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcmVsYXRpdmUucGF0aCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoO1xuICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZS5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVsYXRpdmUucGF0aC5jaGFyQXQoMCkgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiYXNlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgYmFzZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgYmFzZS5wb3J0ICE9PSB1bmRlZmluZWQpICYmICFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gXCIvXCIgKyByZWxhdGl2ZS5wYXRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKDAsIGJhc2UucGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIHJlbGF0aXZlLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyh0YXJnZXQucGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICAgICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvO1xuICAgICAgICAgICAgdGFyZ2V0Lmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB0YXJnZXQucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgfVxuICAgIHRhcmdldC5mcmFnbWVudCA9IHJlbGF0aXZlLmZyYWdtZW50O1xuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmUoYmFzZVVSSSwgcmVsYXRpdmVVUkksIG9wdGlvbnMpIHtcbiAgICB2YXIgc2NoZW1lbGVzc09wdGlvbnMgPSBhc3NpZ24oeyBzY2hlbWU6ICdudWxsJyB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gc2VyaWFsaXplKHJlc29sdmVDb21wb25lbnRzKHBhcnNlKGJhc2VVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgcGFyc2UocmVsYXRpdmVVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgc2NoZW1lbGVzc09wdGlvbnMsIHRydWUpLCBzY2hlbWVsZXNzT3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmksIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVyaSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB1cmkgPSBzZXJpYWxpemUocGFyc2UodXJpLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0eXBlT2YodXJpKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB1cmkgPSBwYXJzZShzZXJpYWxpemUodXJpLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB1cmk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVyaUEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdXJpQSA9IHNlcmlhbGl6ZShwYXJzZSh1cmlBLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0eXBlT2YodXJpQSkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdXJpQSA9IHNlcmlhbGl6ZSh1cmlBLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB1cmlCID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHVyaUIgPSBzZXJpYWxpemUocGFyc2UodXJpQiwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZU9mKHVyaUIpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHVyaUIgPSBzZXJpYWxpemUodXJpQiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB1cmlBID09PSB1cmlCO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5FU0NBUEUgOiBJUklfUFJPVE9DT0wuRVNDQVBFLCBwY3RFbmNDaGFyKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCA6IElSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCwgcGN0RGVjQ2hhcnMpO1xufVxuXG52YXIgaGFuZGxlciA9IHtcbiAgICBzY2hlbWU6IFwiaHR0cFwiLFxuICAgIGRvbWFpbkhvc3Q6IHRydWUsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgLy9yZXBvcnQgbWlzc2luZyBob3N0XG4gICAgICAgIGlmICghY29tcG9uZW50cy5ob3N0KSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkhUVFAgVVJJcyBtdXN0IGhhdmUgYSBob3N0LlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VjdXJlID0gU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS50b0xvd2VyQ2FzZSgpID09PSBcImh0dHBzXCI7XG4gICAgICAgIC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucG9ydCA9PT0gKHNlY3VyZSA/IDQ0MyA6IDgwKSB8fCBjb21wb25lbnRzLnBvcnQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZW1wdHkgcGF0aFxuICAgICAgICBpZiAoIWNvbXBvbmVudHMucGF0aCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gXCIvXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9OT1RFOiBXZSBkbyBub3QgcGFyc2UgcXVlcnkgc3RyaW5ncyBmb3IgSFRUUCBVUklzXG4gICAgICAgIC8vYXMgV1dXIEZvcm0gVXJsIEVuY29kZWQgcXVlcnkgc3RyaW5ncyBhcmUgcGFydCBvZiB0aGUgSFRNTDQrIHNwZWMsXG4gICAgICAgIC8vYW5kIG5vdCB0aGUgSFRUUCBzcGVjLlxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59O1xuXG52YXIgaGFuZGxlciQxID0ge1xuICAgIHNjaGVtZTogXCJodHRwc1wiLFxuICAgIGRvbWFpbkhvc3Q6IGhhbmRsZXIuZG9tYWluSG9zdCxcbiAgICBwYXJzZTogaGFuZGxlci5wYXJzZSxcbiAgICBzZXJpYWxpemU6IGhhbmRsZXIuc2VyaWFsaXplXG59O1xuXG5mdW5jdGlvbiBpc1NlY3VyZSh3c0NvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdzQ29tcG9uZW50cy5zZWN1cmUgPT09ICdib29sZWFuJyA/IHdzQ29tcG9uZW50cy5zZWN1cmUgOiBTdHJpbmcod3NDb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ3c3NcIjtcbn1cbi8vUkZDIDY0NTVcbnZhciBoYW5kbGVyJDIgPSB7XG4gICAgc2NoZW1lOiBcIndzXCIsXG4gICAgZG9tYWluSG9zdDogdHJ1ZSxcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgd3NDb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgLy9pbmRpY2F0ZSBpZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0XG4gICAgICAgIHdzQ29tcG9uZW50cy5zZWN1cmUgPSBpc1NlY3VyZSh3c0NvbXBvbmVudHMpO1xuICAgICAgICAvL2NvbnN0cnVjdCByZXNvdWNlIG5hbWVcbiAgICAgICAgd3NDb21wb25lbnRzLnJlc291cmNlTmFtZSA9ICh3c0NvbXBvbmVudHMucGF0aCB8fCAnLycpICsgKHdzQ29tcG9uZW50cy5xdWVyeSA/ICc/JyArIHdzQ29tcG9uZW50cy5xdWVyeSA6ICcnKTtcbiAgICAgICAgd3NDb21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIHdzQ29tcG9uZW50cy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHdzQ29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplKHdzQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gICAgICAgIGlmICh3c0NvbXBvbmVudHMucG9ydCA9PT0gKGlzU2VjdXJlKHdzQ29tcG9uZW50cykgPyA0NDMgOiA4MCkgfHwgd3NDb21wb25lbnRzLnBvcnQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5wb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vZW5zdXJlIHNjaGVtZSBtYXRjaGVzIHNlY3VyZSBmbGFnXG4gICAgICAgIGlmICh0eXBlb2Ygd3NDb21wb25lbnRzLnNlY3VyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMuc2NoZW1lID0gd3NDb21wb25lbnRzLnNlY3VyZSA/ICd3c3MnIDogJ3dzJztcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5zZWN1cmUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuICAgICAgICBpZiAod3NDb21wb25lbnRzLnJlc291cmNlTmFtZSkge1xuICAgICAgICAgICAgdmFyIF93c0NvbXBvbmVudHMkcmVzb3VyYyA9IHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUuc3BsaXQoJz8nKSxcbiAgICAgICAgICAgICAgICBfd3NDb21wb25lbnRzJHJlc291cmMyID0gc2xpY2VkVG9BcnJheShfd3NDb21wb25lbnRzJHJlc291cmMsIDIpLFxuICAgICAgICAgICAgICAgIHBhdGggPSBfd3NDb21wb25lbnRzJHJlc291cmMyWzBdLFxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gX3dzQ29tcG9uZW50cyRyZXNvdXJjMlsxXTtcblxuICAgICAgICAgICAgd3NDb21wb25lbnRzLnBhdGggPSBwYXRoICYmIHBhdGggIT09ICcvJyA/IHBhdGggOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMucXVlcnkgPSBxdWVyeTtcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9mb3JiaWQgZnJhZ21lbnQgY29tcG9uZW50XG4gICAgICAgIHdzQ29tcG9uZW50cy5mcmFnbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHdzQ29tcG9uZW50cztcbiAgICB9XG59O1xuXG52YXIgaGFuZGxlciQzID0ge1xuICAgIHNjaGVtZTogXCJ3c3NcIixcbiAgICBkb21haW5Ib3N0OiBoYW5kbGVyJDIuZG9tYWluSG9zdCxcbiAgICBwYXJzZTogaGFuZGxlciQyLnBhcnNlLFxuICAgIHNlcmlhbGl6ZTogaGFuZGxlciQyLnNlcmlhbGl6ZVxufTtcblxudmFyIE8gPSB7fTtcbnZhciBpc0lSSSA9IHRydWU7XG4vL1JGQyAzOTg2XG52YXIgVU5SRVNFUlZFRCQkID0gXCJbQS1aYS16MC05XFxcXC1cXFxcLlxcXFxfXFxcXH5cIiArIChpc0lSSSA/IFwiXFxcXHhBMC1cXFxcdTIwMERcXFxcdTIwMTAtXFxcXHUyMDI5XFxcXHUyMDJGLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkVGXCIgOiBcIlwiKSArIFwiXVwiO1xudmFyIEhFWERJRyQkID0gXCJbMC05QS1GYS1mXVwiOyAvL2Nhc2UtaW5zZW5zaXRpdmVcbnZhciBQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSk7IC8vZXhwYW5kZWRcbi8vUkZDIDUzMjIsIGV4Y2VwdCB0aGVzZSBzeW1ib2xzIGFzIHBlciBSRkMgNjA2ODogQCA6IC8gPyAjIFsgXSAmIDsgPVxuLy9jb25zdCBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcI1xcXFwkXFxcXCVcXFxcJlxcXFwnXFxcXCpcXFxcK1xcXFwtXFxcXC9cXFxcPVxcXFw/XFxcXF5cXFxcX1xcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RVEVYVCQkID0gXCJbXFxcXHgwMS1cXFxceDA4XFxcXHgwQlxcXFx4MENcXFxceDBFLVxcXFx4MUZcXFxceDdGXVwiOyAgLy8oJWQxLTggLyAlZDExLTEyIC8gJWQxNC0zMSAvICVkMTI3KVxuLy9jb25zdCBRVEVYVCQkID0gbWVyZ2UoXCJbXFxcXHgyMVxcXFx4MjMtXFxcXHg1QlxcXFx4NUQtXFxcXHg3RV1cIiwgT0JTX1FURVhUJCQpOyAgLy8lZDMzIC8gJWQzNS05MSAvICVkOTMtMTI2IC8gb2JzLXF0ZXh0XG4vL2NvbnN0IFZDSEFSJCQgPSBcIltcXFxceDIxLVxcXFx4N0VdXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RUCQgPSBzdWJleHAoXCJcXFxcXFxcXFwiICsgbWVyZ2UoXCJbXFxcXHgwMFxcXFx4MERcXFxceDBBXVwiLCBPQlNfUVRFWFQkJCkpOyAgLy8lZDAgLyBDUiAvIExGIC8gb2JzLXF0ZXh0XG4vL2NvbnN0IEZXUyQgPSBzdWJleHAoc3ViZXhwKFdTUCQkICsgXCIqXCIgKyBcIlxcXFx4MERcXFxceDBBXCIpICsgXCI/XCIgKyBXU1AkJCArIFwiK1wiKTtcbi8vY29uc3QgUVVPVEVEX1BBSVIkID0gc3ViZXhwKHN1YmV4cChcIlxcXFxcXFxcXCIgKyBzdWJleHAoVkNIQVIkJCArIFwifFwiICsgV1NQJCQpKSArIFwifFwiICsgT0JTX1FQJCk7XG4vL2NvbnN0IFFVT1RFRF9TVFJJTkckID0gc3ViZXhwKCdcXFxcXCInICsgc3ViZXhwKEZXUyQgKyBcIj9cIiArIFFDT05URU5UJCkgKyBcIipcIiArIEZXUyQgKyBcIj9cIiArICdcXFxcXCInKTtcbnZhciBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIjtcbnZhciBRVEVYVCQkID0gXCJbXFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXC1cXFxcLjAtOVxcXFw8XFxcXD5BLVpcXFxceDVFLVxcXFx4N0VdXCI7XG52YXIgVkNIQVIkJCA9IG1lcmdlKFFURVhUJCQsIFwiW1xcXFxcXFwiXFxcXFxcXFxdXCIpO1xudmFyIFNPTUVfREVMSU1TJCQgPSBcIltcXFxcIVxcXFwkXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcOlxcXFxAXVwiO1xudmFyIFVOUkVTRVJWRUQgPSBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpO1xudmFyIFBDVF9FTkNPREVEID0gbmV3IFJlZ0V4cChQQ1RfRU5DT0RFRCQsIFwiZ1wiKTtcbnZhciBOT1RfTE9DQUxfUEFSVCA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQVRFWFQkJCwgXCJbXFxcXC5dXCIsICdbXFxcXFwiXScsIFZDSEFSJCQpLCBcImdcIik7XG52YXIgTk9UX0hGTkFNRSA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgVU5SRVNFUlZFRCQkLCBTT01FX0RFTElNUyQkKSwgXCJnXCIpO1xudmFyIE5PVF9IRlZBTFVFID0gTk9UX0hGTkFNRTtcbmZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gICAgdmFyIGRlY1N0ciA9IHBjdERlY0NoYXJzKHN0cik7XG4gICAgcmV0dXJuICFkZWNTdHIubWF0Y2goVU5SRVNFUlZFRCkgPyBzdHIgOiBkZWNTdHI7XG59XG52YXIgaGFuZGxlciQ0ID0ge1xuICAgIHNjaGVtZTogXCJtYWlsdG9cIixcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UkJDEoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgbWFpbHRvQ29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gICAgICAgIHZhciB0byA9IG1haWx0b0NvbXBvbmVudHMudG8gPSBtYWlsdG9Db21wb25lbnRzLnBhdGggPyBtYWlsdG9Db21wb25lbnRzLnBhdGguc3BsaXQoXCIsXCIpIDogW107XG4gICAgICAgIG1haWx0b0NvbXBvbmVudHMucGF0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG1haWx0b0NvbXBvbmVudHMucXVlcnkpIHtcbiAgICAgICAgICAgIHZhciB1bmtub3duSGVhZGVycyA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHZhciBoZmllbGRzID0gbWFpbHRvQ29tcG9uZW50cy5xdWVyeS5zcGxpdChcIiZcIik7XG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMCwgeGwgPSBoZmllbGRzLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgICAgICB2YXIgaGZpZWxkID0gaGZpZWxkc1t4XS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChoZmllbGRbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRvXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9BZGRycyA9IGhmaWVsZFsxXS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfeCA9IDAsIF94bCA9IHRvQWRkcnMubGVuZ3RoOyBfeCA8IF94bDsgKytfeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvLnB1c2godG9BZGRyc1tfeF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdWJqZWN0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYWlsdG9Db21wb25lbnRzLnN1YmplY3QgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib2R5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYWlsdG9Db21wb25lbnRzLmJvZHkgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duSGVhZGVycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3VuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFswXSwgb3B0aW9ucyldID0gdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1bmtub3duSGVhZGVycykgbWFpbHRvQ29tcG9uZW50cy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgfVxuICAgICAgICBtYWlsdG9Db21wb25lbnRzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKHZhciBfeDIgPSAwLCBfeGwyID0gdG8ubGVuZ3RoOyBfeDIgPCBfeGwyOyArK194Mikge1xuICAgICAgICAgICAgdmFyIGFkZHIgPSB0b1tfeDJdLnNwbGl0KFwiQFwiKTtcbiAgICAgICAgICAgIGFkZHJbMF0gPSB1bmVzY2FwZUNvbXBvbmVudChhZGRyWzBdKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIC8vY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhZGRyWzFdID0gcHVueWNvZGUudG9BU0NJSSh1bmVzY2FwZUNvbXBvbmVudChhZGRyWzFdLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1haWx0b0NvbXBvbmVudHMuZXJyb3IgPSBtYWlsdG9Db21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkclsxXSA9IHVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b1tfeDJdID0gYWRkci5qb2luKFwiQFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFpbHRvQ29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplJCQxKG1haWx0b0NvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBtYWlsdG9Db21wb25lbnRzO1xuICAgICAgICB2YXIgdG8gPSB0b0FycmF5KG1haWx0b0NvbXBvbmVudHMudG8pO1xuICAgICAgICBpZiAodG8pIHtcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwLCB4bCA9IHRvLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9BZGRyID0gU3RyaW5nKHRvW3hdKTtcbiAgICAgICAgICAgICAgICB2YXIgYXRJZHggPSB0b0FkZHIubGFzdEluZGV4T2YoXCJAXCIpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhbFBhcnQgPSB0b0FkZHIuc2xpY2UoMCwgYXRJZHgpLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9MT0NBTF9QQVJULCBwY3RFbmNDaGFyKTtcbiAgICAgICAgICAgICAgICB2YXIgZG9tYWluID0gdG9BZGRyLnNsaWNlKGF0SWR4ICsgMSk7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkb21haW4gPSAhb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKHVuZXNjYXBlQ29tcG9uZW50KGRvbWFpbiwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoZG9tYWluKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b1t4XSA9IGxvY2FsUGFydCArIFwiQFwiICsgZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gdG8uam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgfHwge307XG4gICAgICAgIGlmIChtYWlsdG9Db21wb25lbnRzLnN1YmplY3QpIGhlYWRlcnNbXCJzdWJqZWN0XCJdID0gbWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0O1xuICAgICAgICBpZiAobWFpbHRvQ29tcG9uZW50cy5ib2R5KSBoZWFkZXJzW1wiYm9keVwiXSA9IG1haWx0b0NvbXBvbmVudHMuYm9keTtcbiAgICAgICAgdmFyIGZpZWxkcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIGhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChoZWFkZXJzW25hbWVdICE9PSBPW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZmllbGRzLnB1c2gobmFtZS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZOQU1FLCBwY3RFbmNDaGFyKSArIFwiPVwiICsgaGVhZGVyc1tuYW1lXS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZWQUxVRSwgcGN0RW5jQ2hhcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnF1ZXJ5ID0gZmllbGRzLmpvaW4oXCImXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn07XG5cbnZhciBVUk5fUEFSU0UgPSAvXihbXlxcOl0rKVxcOiguKikvO1xuLy9SRkMgMjE0MVxudmFyIGhhbmRsZXIkNSA9IHtcbiAgICBzY2hlbWU6IFwidXJuXCIsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlJCQxKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5wYXRoLm1hdGNoKFVSTl9QQVJTRSk7XG4gICAgICAgIHZhciB1cm5Db21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgIHZhciBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCBcInVyblwiO1xuICAgICAgICAgICAgdmFyIG5pZCA9IG1hdGNoZXNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHZhciBuc3MgPSBtYXRjaGVzWzJdO1xuICAgICAgICAgICAgdmFyIHVyblNjaGVtZSA9IHNjaGVtZSArIFwiOlwiICsgKG9wdGlvbnMubmlkIHx8IG5pZCk7XG4gICAgICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbdXJuU2NoZW1lXTtcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMubmlkID0gbmlkO1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cy5uc3MgPSBuc3M7XG4gICAgICAgICAgICB1cm5Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoc2NoZW1lSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHVybkNvbXBvbmVudHMgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cy5lcnJvciA9IHVybkNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUk4gY2FuIG5vdCBiZSBwYXJzZWQuXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybkNvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSQkMSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCBcInVyblwiO1xuICAgICAgICB2YXIgbmlkID0gdXJuQ29tcG9uZW50cy5uaWQ7XG4gICAgICAgIHZhciB1cm5TY2hlbWUgPSBzY2hlbWUgKyBcIjpcIiArIChvcHRpb25zLm5pZCB8fCBuaWQpO1xuICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbdXJuU2NoZW1lXTtcbiAgICAgICAgaWYgKHNjaGVtZUhhbmRsZXIpIHtcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMgPSBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXJpQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHM7XG4gICAgICAgIHZhciBuc3MgPSB1cm5Db21wb25lbnRzLm5zcztcbiAgICAgICAgdXJpQ29tcG9uZW50cy5wYXRoID0gKG5pZCB8fCBvcHRpb25zLm5pZCkgKyBcIjpcIiArIG5zcztcbiAgICAgICAgcmV0dXJuIHVyaUNvbXBvbmVudHM7XG4gICAgfVxufTtcblxudmFyIFVVSUQgPSAvXlswLTlBLUZhLWZdezh9KD86XFwtWzAtOUEtRmEtZl17NH0pezN9XFwtWzAtOUEtRmEtZl17MTJ9JC87XG4vL1JGQyA0MTIyXG52YXIgaGFuZGxlciQ2ID0ge1xuICAgIHNjaGVtZTogXCJ1cm46dXVpZFwiLFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciB1dWlkQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHM7XG4gICAgICAgIHV1aWRDb21wb25lbnRzLnV1aWQgPSB1dWlkQ29tcG9uZW50cy5uc3M7XG4gICAgICAgIHV1aWRDb21wb25lbnRzLm5zcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghdXVpZENvbXBvbmVudHMudXVpZCB8fCAhdXVpZENvbXBvbmVudHMudXVpZC5tYXRjaChVVUlEKSkpIHtcbiAgICAgICAgICAgIHV1aWRDb21wb25lbnRzLmVycm9yID0gdXVpZENvbXBvbmVudHMuZXJyb3IgfHwgXCJVVUlEIGlzIG5vdCB2YWxpZC5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXVpZENvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSh1dWlkQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgdXJuQ29tcG9uZW50cyA9IHV1aWRDb21wb25lbnRzO1xuICAgICAgICAvL25vcm1hbGl6ZSBVVUlEXG4gICAgICAgIHVybkNvbXBvbmVudHMubnNzID0gKHV1aWRDb21wb25lbnRzLnV1aWQgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHVybkNvbXBvbmVudHM7XG4gICAgfVxufTtcblxuU0NIRU1FU1toYW5kbGVyLnNjaGVtZV0gPSBoYW5kbGVyO1xuU0NIRU1FU1toYW5kbGVyJDEuc2NoZW1lXSA9IGhhbmRsZXIkMTtcblNDSEVNRVNbaGFuZGxlciQyLnNjaGVtZV0gPSBoYW5kbGVyJDI7XG5TQ0hFTUVTW2hhbmRsZXIkMy5zY2hlbWVdID0gaGFuZGxlciQzO1xuU0NIRU1FU1toYW5kbGVyJDQuc2NoZW1lXSA9IGhhbmRsZXIkNDtcblNDSEVNRVNbaGFuZGxlciQ1LnNjaGVtZV0gPSBoYW5kbGVyJDU7XG5TQ0hFTUVTW2hhbmRsZXIkNi5zY2hlbWVdID0gaGFuZGxlciQ2O1xuXG5leHBvcnRzLlNDSEVNRVMgPSBTQ0hFTUVTO1xuZXhwb3J0cy5wY3RFbmNDaGFyID0gcGN0RW5jQ2hhcjtcbmV4cG9ydHMucGN0RGVjQ2hhcnMgPSBwY3REZWNDaGFycztcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmV4cG9ydHMucmVtb3ZlRG90U2VnbWVudHMgPSByZW1vdmVEb3RTZWdtZW50cztcbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuZXhwb3J0cy5yZXNvbHZlQ29tcG9uZW50cyA9IHJlc29sdmVDb21wb25lbnRzO1xuZXhwb3J0cy5yZXNvbHZlID0gcmVzb2x2ZTtcbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuZXhwb3J0cy5lcXVhbCA9IGVxdWFsO1xuZXhwb3J0cy5lc2NhcGVDb21wb25lbnQgPSBlc2NhcGVDb21wb25lbnQ7XG5leHBvcnRzLnVuZXNjYXBlQ29tcG9uZW50ID0gdW5lc2NhcGVDb21wb25lbnQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuYWxsLmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHVyaSA9IHJlcXVpcmUoXCJ1cmktanNcIik7XG51cmkuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91cmlcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSB1cmk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcnVsZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlXCIpO1xuY29uc3QgY29kZWdlbl8yID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZXNvbHZlXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCAkZGF0YVJlZlNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvZGF0YS5qc29uXCIpO1xuY29uc3QgdXJpXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3VyaVwiKTtcbmNvbnN0IGRlZmF1bHRSZWdFeHAgPSAoc3RyLCBmbGFncykgPT4gbmV3IFJlZ0V4cChzdHIsIGZsYWdzKTtcbmRlZmF1bHRSZWdFeHAuY29kZSA9IFwibmV3IFJlZ0V4cFwiO1xuY29uc3QgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFtcInJlbW92ZUFkZGl0aW9uYWxcIiwgXCJ1c2VEZWZhdWx0c1wiLCBcImNvZXJjZVR5cGVzXCJdO1xuY29uc3QgRVhUX1NDT1BFX05BTUVTID0gbmV3IFNldChbXG4gICAgXCJ2YWxpZGF0ZVwiLFxuICAgIFwic2VyaWFsaXplXCIsXG4gICAgXCJwYXJzZVwiLFxuICAgIFwid3JhcHBlclwiLFxuICAgIFwicm9vdFwiLFxuICAgIFwic2NoZW1hXCIsXG4gICAgXCJrZXl3b3JkXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJmb3JtYXRzXCIsXG4gICAgXCJ2YWxpZGF0ZSRkYXRhXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJvYmpcIixcbiAgICBcIkVycm9yXCIsXG5dKTtcbmNvbnN0IHJlbW92ZWRPcHRpb25zID0ge1xuICAgIGVycm9yRGF0YVBhdGg6IFwiXCIsXG4gICAgZm9ybWF0OiBcImB2YWxpZGF0ZUZvcm1hdHM6IGZhbHNlYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG51bGxhYmxlOiAnXCJudWxsYWJsZVwiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxcbiAgICBqc29uUG9pbnRlcnM6IFwiRGVwcmVjYXRlZCBqc1Byb3BlcnR5U3ludGF4IGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgZXh0ZW5kUmVmczogXCJEZXByZWNhdGVkIGlnbm9yZUtleXdvcmRzV2l0aFJlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG1pc3NpbmdSZWZzOiBcIlBhc3MgZW1wdHkgc2NoZW1hIHdpdGggJGlkIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgdG8gYWp2LmFkZFNjaGVtYS5cIixcbiAgICBwcm9jZXNzQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7cHJvY2VzczogKGNvZGUsIHNjaGVtYUVudjogb2JqZWN0KSA9PiBzdHJpbmd9YFwiLFxuICAgIHNvdXJjZUNvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3NvdXJjZTogdHJ1ZX1gXCIsXG4gICAgc3RyaWN0RGVmYXVsdHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgc3RyaWN0S2V5d29yZHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgdW5pcXVlSXRlbXM6ICdcInVuaXF1ZUl0ZW1zXCIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsXG4gICAgdW5rbm93bkZvcm1hdHM6IFwiRGlzYWJsZSBzdHJpY3QgbW9kZSBvciBwYXNzIGB0cnVlYCB0byBgYWp2LmFkZEZvcm1hdGAgKG9yIGBmb3JtYXRzYCBvcHRpb24pLlwiLFxuICAgIGNhY2hlOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBzZXJpYWxpemU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIGFqdkVycm9yczogXCJJdCBpcyBkZWZhdWx0IG5vdy5cIixcbn07XG5jb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVLZXl3b3Jkc1dpdGhSZWY6IFwiXCIsXG4gICAganNQcm9wZXJ0eVN5bnRheDogXCJcIixcbiAgICB1bmljb2RlOiAnXCJtaW5MZW5ndGhcIi9cIm1heExlbmd0aFwiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0LicsXG59O1xuY29uc3QgTUFYX0VYUFJFU1NJT04gPSAyMDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVxdWlyZWRPcHRpb25zKG8pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdCwgX3UsIF92LCBfdywgX3gsIF95LCBfeiwgXzA7XG4gICAgY29uc3QgcyA9IG8uc3RyaWN0O1xuICAgIGNvbnN0IF9vcHR6ID0gKF9hID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemU7XG4gICAgY29uc3Qgb3B0aW1pemUgPSBfb3B0eiA9PT0gdHJ1ZSB8fCBfb3B0eiA9PT0gdW5kZWZpbmVkID8gMSA6IF9vcHR6IHx8IDA7XG4gICAgY29uc3QgcmVnRXhwID0gKF9jID0gKF9iID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVnRXhwKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0UmVnRXhwO1xuICAgIGNvbnN0IHVyaVJlc29sdmVyID0gKF9kID0gby51cmlSZXNvbHZlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdXJpXzEuZGVmYXVsdDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdHJpY3RTY2hlbWE6IChfZiA9IChfZSA9IG8uc3RyaWN0U2NoZW1hKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBzKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB0cnVlLFxuICAgICAgICBzdHJpY3ROdW1iZXJzOiAoX2ggPSAoX2cgPSBvLnN0cmljdE51bWJlcnMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IHMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHRydWUsXG4gICAgICAgIHN0cmljdFR5cGVzOiAoX2sgPSAoX2ogPSBvLnN0cmljdFR5cGVzKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RUdXBsZXM6IChfbSA9IChfbCA9IG8uc3RyaWN0VHVwbGVzKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiBzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RSZXF1aXJlZDogKF9wID0gKF9vID0gby5zdHJpY3RSZXF1aXJlZCkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogcykgIT09IG51bGwgJiYgX3AgIT09IHZvaWQgMCA/IF9wIDogZmFsc2UsXG4gICAgICAgIGNvZGU6IG8uY29kZSA/IHsgLi4uby5jb2RlLCBvcHRpbWl6ZSwgcmVnRXhwIH0gOiB7IG9wdGltaXplLCByZWdFeHAgfSxcbiAgICAgICAgbG9vcFJlcXVpcmVkOiAoX3EgPSBvLmxvb3BSZXF1aXJlZCkgIT09IG51bGwgJiYgX3EgIT09IHZvaWQgMCA/IF9xIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIGxvb3BFbnVtOiAoX3IgPSBvLmxvb3BFbnVtKSAhPT0gbnVsbCAmJiBfciAhPT0gdm9pZCAwID8gX3IgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbWV0YTogKF9zID0gby5tZXRhKSAhPT0gbnVsbCAmJiBfcyAhPT0gdm9pZCAwID8gX3MgOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogKF90ID0gby5tZXNzYWdlcykgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogdHJ1ZSxcbiAgICAgICAgaW5saW5lUmVmczogKF91ID0gby5pbmxpbmVSZWZzKSAhPT0gbnVsbCAmJiBfdSAhPT0gdm9pZCAwID8gX3UgOiB0cnVlLFxuICAgICAgICBzY2hlbWFJZDogKF92ID0gby5zY2hlbWFJZCkgIT09IG51bGwgJiYgX3YgIT09IHZvaWQgMCA/IF92IDogXCIkaWRcIixcbiAgICAgICAgYWRkVXNlZFNjaGVtYTogKF93ID0gby5hZGRVc2VkU2NoZW1hKSAhPT0gbnVsbCAmJiBfdyAhPT0gdm9pZCAwID8gX3cgOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogKF94ID0gby52YWxpZGF0ZVNjaGVtYSkgIT09IG51bGwgJiYgX3ggIT09IHZvaWQgMCA/IF94IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiAoX3kgPSBvLnZhbGlkYXRlRm9ybWF0cykgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogdHJ1ZSxcbiAgICAgICAgdW5pY29kZVJlZ0V4cDogKF96ID0gby51bmljb2RlUmVnRXhwKSAhPT0gbnVsbCAmJiBfeiAhPT0gdm9pZCAwID8gX3ogOiB0cnVlLFxuICAgICAgICBpbnQzMnJhbmdlOiAoXzAgPSBvLmludDMycmFuZ2UpICE9PSBudWxsICYmIF8wICE9PSB2b2lkIDAgPyBfMCA6IHRydWUsXG4gICAgICAgIHVyaVJlc29sdmVyOiB1cmlSZXNvbHZlcixcbiAgICB9O1xufVxuY2xhc3MgQWp2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0ge307XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmZvcm1hdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBvcHRzID0gdGhpcy5vcHRzID0geyAuLi5vcHRzLCAuLi5yZXF1aXJlZE9wdGlvbnMob3B0cykgfTtcbiAgICAgICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IG5ldyBjb2RlZ2VuXzIuVmFsdWVTY29wZSh7IHNjb3BlOiB7fSwgcHJlZml4ZXM6IEVYVF9TQ09QRV9OQU1FUywgZXM1LCBsaW5lcyB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIob3B0cy5sb2dnZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXRPcHQgPSBvcHRzLnZhbGlkYXRlRm9ybWF0cztcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5SVUxFUyA9ICgwLCBydWxlc18xLmdldFJ1bGVzKSgpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCByZW1vdmVkT3B0aW9ucywgb3B0cywgXCJOT1QgU1VQUE9SVEVEXCIpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCBkZXByZWNhdGVkT3B0aW9ucywgb3B0cywgXCJERVBSRUNBVEVEXCIsIFwid2FyblwiKTtcbiAgICAgICAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAob3B0cy5mb3JtYXRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEZvcm1hdHMuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEtleXdvcmRzLmNhbGwodGhpcywgb3B0cy5rZXl3b3Jkcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgICAgICAgYWRkSW5pdGlhbFNjaGVtYXMuY2FsbCh0aGlzKTtcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmb3JtYXRPcHQ7XG4gICAgfVxuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChcIiRhc3luY1wiKTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBjb25zdCB7ICRkYXRhLCBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBsZXQgX2RhdGFSZWZTY2hlbWEgPSAkZGF0YVJlZlNjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYUlkID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hID0geyAuLi4kZGF0YVJlZlNjaGVtYSB9O1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEuaWQgPSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgICAgICBkZWxldGUgX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhICYmICRkYXRhKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKF9kYXRhUmVmU2NoZW1hLCBfZGF0YVJlZlNjaGVtYVtzY2hlbWFJZF0sIGZhbHNlKTtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSBcIm9iamVjdFwiID8gbWV0YVtzY2hlbWFJZF0gfHwgbWV0YSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgLy8ga2V5LCByZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgIGRhdGEgLy8gdG8gYmUgdmFsaWRhdGVkXG4gICAgKSB7XG4gICAgICAgIGxldCB2O1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUtleVJlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5nZXRTY2hlbWEoc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghdilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCIke3NjaGVtYUtleVJlZn1cImApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdiA9IHRoaXMuY29tcGlsZShzY2hlbWFLZXlSZWYpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdihkYXRhKTtcbiAgICAgICAgaWYgKCEoXCIkYXN5bmNcIiBpbiB2KSlcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gdi5lcnJvcnM7XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEsIF9tZXRhKTtcbiAgICAgICAgcmV0dXJuIChzY2gudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpKTtcbiAgICB9XG4gICAgY29tcGlsZUFzeW5jKHNjaGVtYSwgbWV0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5sb2FkU2NoZW1hICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucy5sb2FkU2NoZW1hIHNob3VsZCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgbG9hZFNjaGVtYSB9ID0gdGhpcy5vcHRzO1xuICAgICAgICByZXR1cm4gcnVuQ29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoZW1hLCBtZXRhKTtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gcnVuQ29tcGlsZUFzeW5jKF9zY2hlbWEsIF9tZXRhKSB7XG4gICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSB0aGlzLl9hZGRTY2hlbWEoX3NjaGVtYSwgX21ldGEpO1xuICAgICAgICAgICAgcmV0dXJuIHNjaC52YWxpZGF0ZSB8fCBfY29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBsb2FkTWV0YVNjaGVtYSgkcmVmKSB7XG4gICAgICAgICAgICBpZiAoJHJlZiAmJiAhdGhpcy5nZXRTY2hlbWEoJHJlZikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCB7ICRyZWYgfSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2NvbXBpbGVBc3luYyhzY2gpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIHJlZl9lcnJvcl8xLmRlZmF1bHQpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9hZE1pc3NpbmdTY2hlbWEuY2FsbCh0aGlzLCBlLm1pc3NpbmdTY2hlbWEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfY29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCh7IG1pc3NpbmdTY2hlbWE6IHJlZiwgbWlzc2luZ1JlZiB9KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWZzW3JlZl0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFueVNjaGVtYSAke3JlZn0gaXMgbG9hZGVkIGJ1dCAke21pc3NpbmdSZWZ9IGNhbm5vdCBiZSByZXNvbHZlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNaXNzaW5nU2NoZW1hKHJlZikge1xuICAgICAgICAgICAgY29uc3QgX3NjaGVtYSA9IGF3YWl0IF9sb2FkU2NoZW1hLmNhbGwodGhpcywgcmVmKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZWZzW3JlZl0pXG4gICAgICAgICAgICAgICAgYXdhaXQgbG9hZE1ldGFTY2hlbWEuY2FsbCh0aGlzLCBfc2NoZW1hLiRzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShfc2NoZW1hLCByZWYsIG1ldGEpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIF9sb2FkU2NoZW1hKHJlZikge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuX2xvYWRpbmdbcmVmXTtcbiAgICAgICAgICAgIGlmIChwKVxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgKHRoaXMuX2xvYWRpbmdbcmVmXSA9IGxvYWRTY2hlbWEocmVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFkZHMgc2NoZW1hIHRvIHRoZSBpbnN0YW5jZVxuICAgIGFkZFNjaGVtYShzY2hlbWEsIC8vIElmIGFycmF5IGlzIHBhc3NlZCwgYGtleWAgd2lsbCBiZSBpZ25vcmVkXG4gICAga2V5LCAvLyBPcHRpb25hbCBzY2hlbWEga2V5LiBDYW4gYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgbWV0aG9kIGluc3RlYWQgb2Ygc2NoZW1hIG9iamVjdCBvciBpZC9yZWYuIE9uZSBzY2hlbWEgcGVyIGluc3RhbmNlIGNhbiBoYXZlIGVtcHR5IGBpZGAgYW5kIGBrZXlgLlxuICAgIF9tZXRhLCAvLyB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHksIGFkZE1ldGFTY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICBfdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgLy8gZmFsc2UgdG8gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbi4gVXNlZCBpbnRlcm5hbGx5LCBvcHRpb24gdmFsaWRhdGVTY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICApIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY2ggb2Ygc2NoZW1hKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaCwgdW5kZWZpbmVkLCBfbWV0YSwgX3ZhbGlkYXRlU2NoZW1hKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgICAgIGlkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBpZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgJHtzY2hlbWFJZH0gbXVzdCBiZSBzdHJpbmdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBrZXkgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShrZXkgfHwgaWQpO1xuICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShrZXkpO1xuICAgICAgICB0aGlzLnNjaGVtYXNba2V5XSA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEsIF9tZXRhLCBrZXksIF92YWxpZGF0ZVNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAgICAvLyBvcHRpb25zIGluIE1FVEFfSUdOT1JFX09QVElPTlMgYXJlIGFsd2F5IHNldCB0byBmYWxzZVxuICAgIGFkZE1ldGFTY2hlbWEoc2NoZW1hLCBrZXksIC8vIHNjaGVtYSBrZXlcbiAgICBfdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgLy8gZmFsc2UgdG8gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbiwgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdmFsaWRhdGVTY2hlbWEgb3B0aW9uIGZvciBtZXRhLXNjaGVtYVxuICAgICkge1xuICAgICAgICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgdHJ1ZSwgX3ZhbGlkYXRlU2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vICBWYWxpZGF0ZSBzY2hlbWEgYWdhaW5zdCBpdHMgbWV0YS1zY2hlbWFcbiAgICB2YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRocm93T3JMb2dFcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBsZXQgJHNjaGVtYTtcbiAgICAgICAgJHNjaGVtYSA9IHNjaGVtYS4kc2NoZW1hO1xuICAgICAgICBpZiAoJHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAkc2NoZW1hICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIiRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLm9wdHMuZGVmYXVsdE1ldGEgfHwgdGhpcy5kZWZhdWx0TWV0YSgpO1xuICAgICAgICBpZiAoISRzY2hlbWEpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlXCIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlKCRzY2hlbWEsIHNjaGVtYSk7XG4gICAgICAgIGlmICghdmFsaWQgJiYgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJzY2hlbWEgaXMgaW52YWxpZDogXCIgKyB0aGlzLmVycm9yc1RleHQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgPT09IFwibG9nXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgLy8gR2V0IGNvbXBpbGVkIHNjaGVtYSBieSBga2V5YCBvciBgcmVmYC5cbiAgICAvLyAoYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAtIGBzY2hlbWEuJGlkYCBvciByZXNvbHZlZCBpZClcbiAgICBnZXRTY2hlbWEoa2V5UmVmKSB7XG4gICAgICAgIGxldCBzY2g7XG4gICAgICAgIHdoaWxlICh0eXBlb2YgKHNjaCA9IGdldFNjaEVudi5jYWxsKHRoaXMsIGtleVJlZikpID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBrZXlSZWYgPSBzY2g7XG4gICAgICAgIGlmIChzY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBjb21waWxlXzEuU2NoZW1hRW52KHsgc2NoZW1hOiB7fSwgc2NoZW1hSWQgfSk7XG4gICAgICAgICAgICBzY2ggPSBjb21waWxlXzEucmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIGtleVJlZik7XG4gICAgICAgICAgICBpZiAoIXNjaClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnJlZnNba2V5UmVmXSA9IHNjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgY2FjaGVkIHNjaGVtYShzKS5cbiAgICAvLyBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAgLy8gSWYgUmVnRXhwIGlzIHBhc3NlZCBhbGwgc2NoZW1hcyB3aXRoIGtleS9pZCBtYXRjaGluZyBwYXR0ZXJuIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAgLy8gRXZlbiBpZiBzY2hlbWEgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBzY2hlbWFzIGl0IHN0aWxsIGNhbiBiZSByZW1vdmVkIGFzIG90aGVyIHNjaGVtYXMgaGF2ZSBsb2NhbCByZWZlcmVuY2VzLlxuICAgIHJlbW92ZVNjaGVtYShzY2hlbWFLZXlSZWYpIHtcbiAgICAgICAgaWYgKHNjaGVtYUtleVJlZiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5zY2hlbWFzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaCA9IGdldFNjaEVudi5jYWxsKHRoaXMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHNjaC5zY2hlbWEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNjaGVtYXNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZWZzW3NjaGVtYUtleVJlZl07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IHNjaGVtYUtleVJlZjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IHNjaGVtYUtleVJlZlt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tpZF07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2LnJlbW92ZVNjaGVtYTogaW52YWxpZCBwYXJhbWV0ZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWRkIFwidm9jYWJ1bGFyeVwiIC0gYSBjb2xsZWN0aW9uIG9mIGtleXdvcmRzXG4gICAgYWRkVm9jYWJ1bGFyeShkZWZpbml0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGRlZiBvZiBkZWZpbml0aW9ucylcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5d29yZChkZWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkS2V5d29yZChrd2RPckRlZiwgZGVmIC8vIGRlcHJlY2F0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IGtleXdvcmQ7XG4gICAgICAgIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAga2V5d29yZCA9IGt3ZE9yRGVmO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJ0aGVzZSBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkLCBzZWUgZG9jcyBmb3IgYWRkS2V5d29yZFwiKTtcbiAgICAgICAgICAgICAgICBkZWYua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGt3ZE9yRGVmID09IFwib2JqZWN0XCIgJiYgZGVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlZiA9IGt3ZE9yRGVmO1xuICAgICAgICAgICAga2V5d29yZCA9IGRlZi5rZXl3b3JkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5d29yZCkgJiYgIWtleXdvcmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWRkS2V5d29yZHM6IGtleXdvcmQgbXVzdCBiZSBzdHJpbmcgb3Igbm9uLWVtcHR5IGFycmF5XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBhZGRLZXl3b3JkcyBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrS2V5d29yZC5jYWxsKHRoaXMsIGtleXdvcmQsIGRlZik7XG4gICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCAoa3dkKSA9PiBhZGRSdWxlLmNhbGwodGhpcywga3dkKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBrZXl3b3JkTWV0YXNjaGVtYS5jYWxsKHRoaXMsIGRlZik7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICAuLi5kZWYsXG4gICAgICAgICAgICB0eXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZi50eXBlKSxcbiAgICAgICAgICAgIHNjaGVtYVR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnNjaGVtYVR5cGUpLFxuICAgICAgICB9O1xuICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCBkZWZpbml0aW9uLnR5cGUubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IChrKSA9PiBhZGRSdWxlLmNhbGwodGhpcywgaywgZGVmaW5pdGlvbilcbiAgICAgICAgICAgIDogKGspID0+IGRlZmluaXRpb24udHlwZS5mb3JFYWNoKCh0KSA9PiBhZGRSdWxlLmNhbGwodGhpcywgaywgZGVmaW5pdGlvbiwgdCkpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldEtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5SVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIHJldHVybiB0eXBlb2YgcnVsZSA9PSBcIm9iamVjdFwiID8gcnVsZS5kZWZpbml0aW9uIDogISFydWxlO1xuICAgIH1cbiAgICAvLyBSZW1vdmUga2V5d29yZFxuICAgIHJlbW92ZUtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICAvLyBUT0RPIHJldHVybiB0eXBlIHNob3VsZCBiZSBBanZcbiAgICAgICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICAgICAgZGVsZXRlIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdO1xuICAgICAgICBkZWxldGUgUlVMRVMuYWxsW2tleXdvcmRdO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIFJVTEVTLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ3JvdXAucnVsZXMuZmluZEluZGV4KChydWxlKSA9PiBydWxlLmtleXdvcmQgPT09IGtleXdvcmQpO1xuICAgICAgICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgICAgICAgICBncm91cC5ydWxlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBmb3JtYXRcbiAgICBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0ID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gICAgICAgIHRoaXMuZm9ybWF0c1tuYW1lXSA9IGZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGVycm9yc1RleHQoZXJyb3JzID0gdGhpcy5lcnJvcnMsIC8vIG9wdGlvbmFsIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgeyBzZXBhcmF0b3IgPSBcIiwgXCIsIGRhdGFWYXIgPSBcImRhdGFcIiB9ID0ge30gLy8gb3B0aW9uYWwgb3B0aW9ucyB3aXRoIHByb3BlcnRpZXMgYHNlcGFyYXRvcmAgYW5kIGBkYXRhVmFyYFxuICAgICkge1xuICAgICAgICBpZiAoIWVycm9ycyB8fCBlcnJvcnMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIFwiTm8gZXJyb3JzXCI7XG4gICAgICAgIHJldHVybiBlcnJvcnNcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IGAke2RhdGFWYXJ9JHtlLmluc3RhbmNlUGF0aH0gJHtlLm1lc3NhZ2V9YClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHRleHQsIG1zZykgPT4gdGV4dCArIHNlcGFyYXRvciArIG1zZyk7XG4gICAgfVxuICAgICRkYXRhTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuUlVMRVMuYWxsO1xuICAgICAgICBtZXRhU2NoZW1hID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtZXRhU2NoZW1hKSk7XG4gICAgICAgIGZvciAoY29uc3QganNvblBvaW50ZXIgb2Yga2V5d29yZHNKc29uUG9pbnRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpLnNsaWNlKDEpOyAvLyBmaXJzdCBzZWdtZW50IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgbGV0IGtleXdvcmRzID0gbWV0YVNjaGVtYTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnIG9mIHNlZ21lbnRzKVxuICAgICAgICAgICAgICAgIGtleXdvcmRzID0ga2V5d29yZHNbc2VnXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgJGRhdGEgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBrZXl3b3Jkc1trZXldO1xuICAgICAgICAgICAgICAgIGlmICgkZGF0YSAmJiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzW2tleV0gPSBzY2hlbWFPckRhdGEoc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0YVNjaGVtYTtcbiAgICB9XG4gICAgX3JlbW92ZUFsbFNjaGVtYXMoc2NoZW1hcywgcmVnZXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXlSZWYgaW4gc2NoZW1hcykge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgaWYgKCFyZWdleCB8fCByZWdleC50ZXN0KGtleVJlZikpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaCAmJiAhc2NoLm1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHNjaC5zY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfYWRkU2NoZW1hKHNjaGVtYSwgbWV0YSwgYmFzZUlkLCB2YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSwgYWRkU2NoZW1hID0gdGhpcy5vcHRzLmFkZFVzZWRTY2hlbWEpIHtcbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuanRkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjaGVtYSBtdXN0IGJlIG9iamVjdFwiKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0IG9yIGJvb2xlYW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNjaCA9IHRoaXMuX2NhY2hlLmdldChzY2hlbWEpO1xuICAgICAgICBpZiAoc2NoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gc2NoO1xuICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShpZCB8fCBiYXNlSWQpO1xuICAgICAgICBjb25zdCBsb2NhbFJlZnMgPSByZXNvbHZlXzEuZ2V0U2NoZW1hUmVmcy5jYWxsKHRoaXMsIHNjaGVtYSwgYmFzZUlkKTtcbiAgICAgICAgc2NoID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCBtZXRhLCBiYXNlSWQsIGxvY2FsUmVmcyB9KTtcbiAgICAgICAgdGhpcy5fY2FjaGUuc2V0KHNjaC5zY2hlbWEsIHNjaCk7XG4gICAgICAgIGlmIChhZGRTY2hlbWEgJiYgIWJhc2VJZC5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICAgICAgLy8gVE9ETyBhdG0gaXQgaXMgYWxsb3dlZCB0byBvdmVyd3JpdGUgc2NoZW1hcyB3aXRob3V0IGlkIChpbnN0ZWFkIG9mIG5vdCBhZGRpbmcgdGhlbSlcbiAgICAgICAgICAgIGlmIChiYXNlSWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tVbmlxdWUoYmFzZUlkKTtcbiAgICAgICAgICAgIHRoaXMucmVmc1tiYXNlSWRdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0ZVNjaGVtYSlcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgX2NoZWNrVW5pcXVlKGlkKSB7XG4gICAgICAgIGlmICh0aGlzLnNjaGVtYXNbaWRdIHx8IHRoaXMucmVmc1tpZF0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hIHdpdGgga2V5IG9yIGlkIFwiJHtpZH1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jb21waWxlU2NoZW1hRW52KHNjaCkge1xuICAgICAgICBpZiAoc2NoLm1ldGEpXG4gICAgICAgICAgICB0aGlzLl9jb21waWxlTWV0YVNjaGVtYShzY2gpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb21waWxlXzEuY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXNjaC52YWxpZGF0ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgcmV0dXJuIHNjaC52YWxpZGF0ZTtcbiAgICB9XG4gICAgX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCkge1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0cyA9IHRoaXMub3B0cztcbiAgICAgICAgdGhpcy5vcHRzID0gdGhpcy5fbWV0YU9wdHM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21waWxlXzEuY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLm9wdHMgPSBjdXJyZW50T3B0cztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbkFqdi5WYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDtcbkFqdi5NaXNzaW5nUmVmRXJyb3IgPSByZWZfZXJyb3JfMS5kZWZhdWx0O1xuZnVuY3Rpb24gY2hlY2tPcHRpb25zKGNoZWNrT3B0cywgb3B0aW9ucywgbXNnLCBsb2cgPSBcImVycm9yXCIpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGVja09wdHMpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0ga2V5O1xuICAgICAgICBpZiAob3B0IGluIG9wdGlvbnMpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlcltsb2ddKGAke21zZ306IG9wdGlvbiAke2tleX0uICR7Y2hlY2tPcHRzW29wdF19YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U2NoRW52KGtleVJlZikge1xuICAgIGtleVJlZiA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleVJlZik7IC8vIFRPRE8gdGVzdHMgZmFpbCB3aXRob3V0IHRoaXMgbGluZVxuICAgIHJldHVybiB0aGlzLnNjaGVtYXNba2V5UmVmXSB8fCB0aGlzLnJlZnNba2V5UmVmXTtcbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKCkge1xuICAgIGNvbnN0IG9wdHNTY2hlbWFzID0gdGhpcy5vcHRzLnNjaGVtYXM7XG4gICAgaWYgKCFvcHRzU2NoZW1hcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSlcbiAgICAgICAgdGhpcy5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICAgIGVsc2VcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb3B0c1NjaGVtYXMpXG4gICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hc1trZXldLCBrZXkpO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbEZvcm1hdHMoKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMub3B0cy5mb3JtYXRzKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMub3B0cy5mb3JtYXRzW25hbWVdO1xuICAgICAgICBpZiAoZm9ybWF0KVxuICAgICAgICAgICAgdGhpcy5hZGRGb3JtYXQobmFtZSwgZm9ybWF0KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsS2V5d29yZHMoZGVmcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZnMpKSB7XG4gICAgICAgIHRoaXMuYWRkVm9jYWJ1bGFyeShkZWZzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZ2dlci53YXJuKFwia2V5d29yZHMgb3B0aW9uIGFzIG1hcCBpcyBkZXByZWNhdGVkLCBwYXNzIGFycmF5XCIpO1xuICAgIGZvciAoY29uc3Qga2V5d29yZCBpbiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IGRlZnNba2V5d29yZF07XG4gICAgICAgIGlmICghZGVmLmtleXdvcmQpXG4gICAgICAgICAgICBkZWYua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChkZWYpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKCkge1xuICAgIGNvbnN0IG1ldGFPcHRzID0geyAuLi50aGlzLm9wdHMgfTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBNRVRBX0lHTk9SRV9PUFRJT05TKVxuICAgICAgICBkZWxldGUgbWV0YU9wdHNbb3B0XTtcbiAgICByZXR1cm4gbWV0YU9wdHM7XG59XG5jb25zdCBub0xvZ3MgPSB7IGxvZygpIHsgfSwgd2FybigpIHsgfSwgZXJyb3IoKSB7IH0gfTtcbmZ1bmN0aW9uIGdldExvZ2dlcihsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG5vTG9ncztcbiAgICBpZiAobG9nZ2VyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBjb25zb2xlO1xuICAgIGlmIChsb2dnZXIubG9nICYmIGxvZ2dlci53YXJuICYmIGxvZ2dlci5lcnJvcilcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzXCIpO1xufVxuY29uc3QgS0VZV09SRF9OQU1FID0gL15bYS16XyRdW2EtejAtOV8kOi1dKiQvaTtcbmZ1bmN0aW9uIGNoZWNrS2V5d29yZChrZXl3b3JkLCBkZWYpIHtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IHtcbiAgICAgICAgaWYgKFJVTEVTLmtleXdvcmRzW2t3ZF0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtrd2R9IGlzIGFscmVhZHkgZGVmaW5lZGApO1xuICAgICAgICBpZiAoIUtFWVdPUkRfTkFNRS50ZXN0KGt3ZCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtrd2R9IGhhcyBpbnZhbGlkIG5hbWVgKTtcbiAgICB9KTtcbiAgICBpZiAoIWRlZilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgIShcImNvZGVcIiBpbiBkZWYgfHwgXCJ2YWxpZGF0ZVwiIGluIGRlZikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCckZGF0YSBrZXl3b3JkIG11c3QgaGF2ZSBcImNvZGVcIiBvciBcInZhbGlkYXRlXCIgZnVuY3Rpb24nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRSdWxlKGtleXdvcmQsIGRlZmluaXRpb24sIGRhdGFUeXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBvc3QgPSBkZWZpbml0aW9uID09PSBudWxsIHx8IGRlZmluaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlZmluaXRpb24ucG9zdDtcbiAgICBpZiAoZGF0YVR5cGUgJiYgcG9zdClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXl3b3JkIHdpdGggXCJwb3N0XCIgZmxhZyBjYW5ub3QgaGF2ZSBcInR5cGVcIicpO1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgbGV0IHJ1bGVHcm91cCA9IHBvc3QgPyBSVUxFUy5wb3N0IDogUlVMRVMucnVsZXMuZmluZCgoeyB0eXBlOiB0IH0pID0+IHQgPT09IGRhdGFUeXBlKTtcbiAgICBpZiAoIXJ1bGVHcm91cCkge1xuICAgICAgICBydWxlR3JvdXAgPSB7IHR5cGU6IGRhdGFUeXBlLCBydWxlczogW10gfTtcbiAgICAgICAgUlVMRVMucnVsZXMucHVzaChydWxlR3JvdXApO1xuICAgIH1cbiAgICBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSA9IHRydWU7XG4gICAgaWYgKCFkZWZpbml0aW9uKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAga2V5d29yZCxcbiAgICAgICAgZGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgLi4uZGVmaW5pdGlvbixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmaW5pdGlvbi50eXBlKSxcbiAgICAgICAgICAgIHNjaGVtYVR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmaW5pdGlvbi5zY2hlbWFUeXBlKSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChkZWZpbml0aW9uLmJlZm9yZSlcbiAgICAgICAgYWRkQmVmb3JlUnVsZS5jYWxsKHRoaXMsIHJ1bGVHcm91cCwgcnVsZSwgZGVmaW5pdGlvbi5iZWZvcmUpO1xuICAgIGVsc2VcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgUlVMRVMuYWxsW2tleXdvcmRdID0gcnVsZTtcbiAgICAoX2EgPSBkZWZpbml0aW9uLmltcGxlbWVudHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKChrd2QpID0+IHRoaXMuYWRkS2V5d29yZChrd2QpKTtcbn1cbmZ1bmN0aW9uIGFkZEJlZm9yZVJ1bGUocnVsZUdyb3VwLCBydWxlLCBiZWZvcmUpIHtcbiAgICBjb25zdCBpID0gcnVsZUdyb3VwLnJ1bGVzLmZpbmRJbmRleCgoX3J1bGUpID0+IF9ydWxlLmtleXdvcmQgPT09IGJlZm9yZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMuc3BsaWNlKGksIDAsIHJ1bGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYHJ1bGUgJHtiZWZvcmV9IGlzIG5vdCBkZWZpbmVkYCk7XG4gICAgfVxufVxuZnVuY3Rpb24ga2V5d29yZE1ldGFzY2hlbWEoZGVmKSB7XG4gICAgbGV0IHsgbWV0YVNjaGVtYSB9ID0gZGVmO1xuICAgIGlmIChtZXRhU2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoZGVmLiRkYXRhICYmIHRoaXMub3B0cy4kZGF0YSlcbiAgICAgICAgbWV0YVNjaGVtYSA9IHNjaGVtYU9yRGF0YShtZXRhU2NoZW1hKTtcbiAgICBkZWYudmFsaWRhdGVTY2hlbWEgPSB0aGlzLmNvbXBpbGUobWV0YVNjaGVtYSwgdHJ1ZSk7XG59XG5jb25zdCAkZGF0YVJlZiA9IHtcbiAgICAkcmVmOiBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9tYXN0ZXIvbGliL3JlZnMvZGF0YS5qc29uI1wiLFxufTtcbmZ1bmN0aW9uIHNjaGVtYU9yRGF0YShzY2hlbWEpIHtcbiAgICByZXR1cm4geyBhbnlPZjogW3NjaGVtYSwgJGRhdGFSZWZdIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3JlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZFwiLFxuICAgIGNvZGUoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTk9UIFNVUFBPUlRFRDoga2V5d29yZCBcImlkXCIsIHVzZSBcIiRpZFwiIGZvciBzY2hlbWEgSUQnKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbGxSZWYgPSBleHBvcnRzLmdldFZhbGlkYXRlID0gdm9pZCAwO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCIkcmVmXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hOiAkcmVmLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IGJhc2VJZCwgc2NoZW1hRW52OiBlbnYsIHZhbGlkYXRlTmFtZSwgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHsgcm9vdCB9ID0gZW52O1xuICAgICAgICBpZiAoKCRyZWYgPT09IFwiI1wiIHx8ICRyZWYgPT09IFwiIy9cIikgJiYgYmFzZUlkID09PSByb290LmJhc2VJZClcbiAgICAgICAgICAgIHJldHVybiBjYWxsUm9vdFJlZigpO1xuICAgICAgICBjb25zdCBzY2hPckVudiA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoc2VsZiwgcm9vdCwgYmFzZUlkLCAkcmVmKTtcbiAgICAgICAgaWYgKHNjaE9yRW52ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgcmVmX2Vycm9yXzEuZGVmYXVsdChpdC5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxWYWxpZGF0ZShzY2hPckVudik7XG4gICAgICAgIHJldHVybiBpbmxpbmVSZWZTY2hlbWEoc2NoT3JFbnYpO1xuICAgICAgICBmdW5jdGlvbiBjYWxsUm9vdFJlZigpIHtcbiAgICAgICAgICAgIGlmIChlbnYgPT09IHJvb3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCB2YWxpZGF0ZU5hbWUsIGVudiwgZW52LiRhc3luYyk7XG4gICAgICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogcm9vdCB9KTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsUmVmKGN4dCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtyb290TmFtZX0udmFsaWRhdGVgLCByb290LCByb290LiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FsbFZhbGlkYXRlKHNjaCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IGdldFZhbGlkYXRlKGN4dCwgc2NoKTtcbiAgICAgICAgICAgIGNhbGxSZWYoY3h0LCB2LCBzY2gsIHNjaC4kYXN5bmMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlubGluZVJlZlNjaGVtYShzY2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCBvcHRzLmNvZGUuc291cmNlID09PSB0cnVlID8geyByZWY6IHNjaCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHNjaCkgfSA6IHsgcmVmOiBzY2ggfSk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgICAgICAgICAgdG9wU2NoZW1hUmVmOiBzY2hOYW1lLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6ICRyZWYsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldFZhbGlkYXRlKGN4dCwgc2NoKSB7XG4gICAgY29uc3QgeyBnZW4gfSA9IGN4dDtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlXG4gICAgICAgID8gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZVwiLCB7IHJlZjogc2NoLnZhbGlkYXRlIH0pXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtnZW4uc2NvcGVWYWx1ZShcIndyYXBwZXJcIiwgeyByZWY6IHNjaCB9KX0udmFsaWRhdGVgO1xufVxuZXhwb3J0cy5nZXRWYWxpZGF0ZSA9IGdldFZhbGlkYXRlO1xuZnVuY3Rpb24gY2FsbFJlZihjeHQsIHYsIHNjaCwgJGFzeW5jKSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBhbGxFcnJvcnMsIHNjaGVtYUVudjogZW52LCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBwYXNzQ3h0ID0gb3B0cy5wYXNzQ29udGV4dCA/IG5hbWVzXzEuZGVmYXVsdC50aGlzIDogY29kZWdlbl8xLm5pbDtcbiAgICBpZiAoJGFzeW5jKVxuICAgICAgICBjYWxsQXN5bmNSZWYoKTtcbiAgICBlbHNlXG4gICAgICAgIGNhbGxTeW5jUmVmKCk7XG4gICAgZnVuY3Rpb24gY2FsbEFzeW5jUmVmKCkge1xuICAgICAgICBpZiAoIWVudi4kYXN5bmMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgIGdlbi50cnkoKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHsoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCl9YCk7XG4gICAgICAgICAgICBhZGRFdmFsdWF0ZWRGcm9tKHYpOyAvLyBUT0RPIHdpbGwgbm90IHdvcmsgd2l0aCBhc3luYywgaXQgaGFzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIHJlc3VsdFxuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgISgke2V9IGluc3RhbmNlb2YgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KWAsICgpID0+IGdlbi50aHJvdyhlKSk7XG4gICAgICAgICAgICBhZGRFcnJvcnNGcm9tKGUpO1xuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbFN5bmNSZWYoKSB7XG4gICAgICAgIGN4dC5yZXN1bHQoKDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHYsIHBhc3NDeHQpLCAoKSA9PiBhZGRFdmFsdWF0ZWRGcm9tKHYpLCAoKSA9PiBhZGRFcnJvcnNGcm9tKHYpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXJyb3JzRnJvbShzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgZXJycyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5lcnJvcnNgO1xuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7ZXJyc30gOiAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtlcnJzfSlgKTsgLy8gVE9ETyB0YWdnZWRcbiAgICAgICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXZhbHVhdGVkRnJvbShzb3VyY2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaEV2YWx1YXRlZCA9IChfYSA9IHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC52YWxpZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV2YWx1YXRlZDtcbiAgICAgICAgLy8gVE9ETyByZWZhY3RvclxuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBzY2hFdmFsdWF0ZWQucHJvcHMsIGl0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLnByb3BzYCk7XG4gICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBwcm9wcywgaXQucHJvcHMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hFdmFsdWF0ZWQuaXRlbXMsIGl0Lml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGdlbi52YXIoXCJpdGVtc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLml0ZW1zYCk7XG4gICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBpdGVtcywgaXQuaXRlbXMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2FsbFJlZiA9IGNhbGxSZWY7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGlkXzEgPSByZXF1aXJlKFwiLi9pZFwiKTtcbmNvbnN0IHJlZl8xID0gcmVxdWlyZShcIi4vcmVmXCIpO1xuY29uc3QgY29yZSA9IFtcbiAgICBcIiRzY2hlbWFcIixcbiAgICBcIiRpZFwiLFxuICAgIFwiJGRlZnNcIixcbiAgICBcIiR2b2NhYnVsYXJ5XCIsXG4gICAgeyBrZXl3b3JkOiBcIiRjb21tZW50XCIgfSxcbiAgICBcImRlZmluaXRpb25zXCIsXG4gICAgaWRfMS5kZWZhdWx0LFxuICAgIHJlZl8xLmRlZmF1bHQsXG5dO1xuZXhwb3J0cy5kZWZhdWx0ID0gY29yZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3Qgb3BzID0gY29kZWdlbl8xLm9wZXJhdG9ycztcbmNvbnN0IEtXRHMgPSB7XG4gICAgbWF4aW11bTogeyBva1N0cjogXCI8PVwiLCBvazogb3BzLkxURSwgZmFpbDogb3BzLkdUIH0sXG4gICAgbWluaW11bTogeyBva1N0cjogXCI+PVwiLCBvazogb3BzLkdURSwgZmFpbDogb3BzLkxUIH0sXG4gICAgZXhjbHVzaXZlTWF4aW11bTogeyBva1N0cjogXCI8XCIsIG9rOiBvcHMuTFQsIGZhaWw6IG9wcy5HVEUgfSxcbiAgICBleGNsdXNpdmVNaW5pbXVtOiB7IG9rU3RyOiBcIj5cIiwgb2s6IG9wcy5HVCwgZmFpbDogb3BzLkxURSB9LFxufTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlICR7S1dEc1trZXl3b3JkXS5va1N0cn0gJHtzY2hlbWFDb2RlfWAsXG4gICAgcGFyYW1zOiAoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtjb21wYXJpc29uOiAke0tXRHNba2V5d29yZF0ub2tTdHJ9LCBsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBPYmplY3Qua2V5cyhLV0RzKSxcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0tXRHNba2V5d29yZF0uZmFpbH0gJHtzY2hlbWFDb2RlfSB8fCBpc05hTigke2RhdGF9KWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXROdW1iZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBiZSBtdWx0aXBsZSBvZiAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge211bHRpcGxlT2Y6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBjb25zdCBiZHQgPSBiYWQkRGF0YVR5cGUoc2NoZW1hQ29kZSwgPHN0cmluZz5kZWYuc2NoZW1hVHlwZSwgJGRhdGEpXG4gICAgICAgIGNvbnN0IHByZWMgPSBpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb247XG4gICAgICAgIGNvbnN0IHJlcyA9IGdlbi5sZXQoXCJyZXNcIik7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSBwcmVjXG4gICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYE1hdGguYWJzKE1hdGgucm91bmQoJHtyZXN9KSAtICR7cmVzfSkgPiAxZS0ke3ByZWN9YFxuICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke3Jlc30gIT09IHBhcnNlSW50KCR7cmVzfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCgke3NjaGVtYUNvZGV9ID09PSAwIHx8ICgke3Jlc30gPSAke2RhdGF9LyR7c2NoZW1hQ29kZX0sICR7aW52YWxpZH0pKWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlwbGVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcyAtIHB1bnljb2RlLnVjczIuZGVjb2RlXG5mdW5jdGlvbiB1Y3MybGVuZ3RoKHN0cikge1xuICAgIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGg7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgbGV0IHZhbHVlO1xuICAgIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICAgICAgbGVuZ3RoKys7XG4gICAgICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhkODAwICYmIHZhbHVlIDw9IDB4ZGJmZiAmJiBwb3MgPCBsZW4pIHtcbiAgICAgICAgICAgIC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuICAgICAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIDB4ZmMwMCkgPT09IDB4ZGMwMClcbiAgICAgICAgICAgICAgICBwb3MrKzsgLy8gbG93IHN1cnJvZ2F0ZVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGg7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB1Y3MybGVuZ3RoO1xudWNzMmxlbmd0aC5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGhcIikuZGVmYXVsdCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11Y3MybGVuZ3RoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHVjczJsZW5ndGhfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL3VjczJsZW5ndGhcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heExlbmd0aFwiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gY2hhcmFjdGVyc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heExlbmd0aFwiLCBcIm1pbkxlbmd0aFwiXSxcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY29uc3QgbGVuID0gaXQub3B0cy51bmljb2RlID09PSBmYWxzZSA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIHV0aWxfMS51c2VGdW5jKShjeHQuZ2VuLCB1Y3MybGVuZ3RoXzEuZGVmYXVsdCl9KCR7ZGF0YX0pYDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRMZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIHBhdHRlcm4gXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGF0dGVybjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5cIixcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBUT0RPIHJlZ2V4cCBzaG91bGQgYmUgd3JhcHBlZCBpbiB0cnkvY2F0Y2hzXG4gICAgICAgIGNvbnN0IHUgPSBpdC5vcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9ICRkYXRhID8gKDAsIGNvZGVnZW5fMS5fKSBgKG5ldyBSZWdFeHAoJHtzY2hlbWFDb2RlfSwgJHt1fSkpYCA6ICgwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBzY2hlbWEpO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCEke3JlZ0V4cH0udGVzdCgke2RhdGF9KWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4UHJvcGVydGllc1wiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gcHJvcGVydGllc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heFByb3BlcnRpZXNcIiwgXCJtaW5Qcm9wZXJ0aWVzXCJdLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5rZXlzKCR7ZGF0YX0pLmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJyR7bWlzc2luZ1Byb3BlcnR5fSdgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHttaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInJlcXVpcmVkXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgc2NoZW1hQ29kZSwgZGF0YSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gb3B0cy5sb29wUmVxdWlyZWQ7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICBhbGxFcnJvcnNNb2RlKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGV4aXRPbkVycm9yTW9kZSgpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RSZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBjeHQucGFyZW50U2NoZW1hLnByb3BlcnRpZXM7XG4gICAgICAgICAgICBjb25zdCB7IGRlZmluZWRQcm9wZXJ0aWVzIH0gPSBjeHQuaXQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVpcmVkS2V5IG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmICgocHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzW3JlcXVpcmVkS2V5XSkgPT09IHVuZGVmaW5lZCAmJiAhZGVmaW5lZFByb3BlcnRpZXMuaGFzKHJlcXVpcmVkS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGByZXF1aXJlZCBwcm9wZXJ0eSBcIiR7cmVxdWlyZWRLZXl9XCIgaXMgbm90IGRlZmluZWQgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFJlcXVpcmVkKWA7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWxsRXJyb3JzTW9kZSgpIHtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEoY29kZWdlbl8xLm5pbCwgbG9vcEFsbFJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleGl0T25FcnJvck1vZGUoKSB7XG4gICAgICAgICAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCAoKSA9PiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSk7XG4gICAgICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgc2NoZW1hLCBtaXNzaW5nKSk7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BBbGxSZXF1aXJlZCgpIHtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInByb3BcIiwgc2NoZW1hQ29kZSwgKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBwcm9wIH0pO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLm5vUHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcFVudGlsTWlzc2luZyhtaXNzaW5nLCB2YWxpZCkge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogbWlzc2luZyB9KTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihtaXNzaW5nLCBzY2hlbWFDb2RlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBtaXNzaW5nLCBvcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWlyZWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBpdGVtc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heEl0ZW1zXCIsIFwibWluSXRlbXNcIl0sXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy84ODlcbmNvbnN0IGVxdWFsID0gcmVxdWlyZShcImZhc3QtZGVlcC1lcXVhbFwiKTtcbmVxdWFsLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvZXF1YWxcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSBlcXVhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVxdWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgJHtqfSBhbmQgJHtpfSBhcmUgaWRlbnRpY2FsKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtpOiAke2l9LCBqOiAke2p9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJib29sZWFuXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiAhc2NoZW1hKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGVzID0gcGFyZW50U2NoZW1hLml0ZW1zID8gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKHBhcmVudFNjaGVtYS5pdGVtcykgOiBbXTtcbiAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlVW5pcXVlSXRlbXMsICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IGZhbHNlYCk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlVW5pcXVlSXRlbXMoKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ2VuLmxldChcImlcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnZW4ubGV0KFwialwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpLCBqIH0pO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpfSA+IDFgLCAoKSA9PiAoY2FuT3B0aW1pemUoKSA/IGxvb3BOIDogbG9vcE4yKShpLCBqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVR5cGVzLmxlbmd0aCA+IDAgJiYgIWl0ZW1UeXBlcy5zb21lKCh0KSA9PiB0ID09PSBcIm9iamVjdFwiIHx8IHQgPT09IFwiYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4oaSwgaikge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdlbi5uYW1lKFwiaXRlbVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHdyb25nVHlwZSA9ICgwLCBkYXRhVHlwZV8xLmNoZWNrRGF0YVR5cGVzKShpdGVtVHlwZXMsIGl0ZW0sIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMS5EYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZ2VuLmNvbnN0KFwiaW5kaWNlc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgICAgICAgICAgZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4ubGV0KGl0ZW0sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBjb250aW51ZWApO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2l0ZW19ID09IFwic3RyaW5nXCJgLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0ZW19ICs9IFwiX1wiYCk7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpbmRpY2VzfVske2l0ZW19XSA9PSBcIm51bWJlclwiYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGosICgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV0gPSAke2l9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTjIoaSwgaikge1xuICAgICAgICAgICAgY29uc3QgZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCk7XG4gICAgICAgICAgICBjb25zdCBvdXRlciA9IGdlbi5uYW1lKFwib3V0ZXJcIik7XG4gICAgICAgICAgICBnZW4ubGFiZWwob3V0ZXIpLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgJHtqfSA9ICR7aX07ICR7an0tLTtgLCAoKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcWx9KCR7ZGF0YX1bJHtpfV0sICR7ZGF0YX1bJHtqfV0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhayhvdXRlcik7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gY29uc3RhbnRcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZTogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnN0XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWFDb2RlLCBzY2hlbWEgfSA9IGN4dDtcbiAgICAgICAgaWYgKCRkYXRhIHx8IChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KX0oJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfSAhPT0gJHtkYXRhfWApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1wiLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWxsb3dlZFZhbHVlczogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImVudW1cIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVudW0gbXVzdCBoYXZlIG5vbi1lbXB0eSBhcnJheVwiKTtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gaXQub3B0cy5sb29wRW51bTtcbiAgICAgICAgbGV0IGVxbDtcbiAgICAgICAgY29uc3QgZ2V0RXFsID0gKCkgPT4gKGVxbCAhPT0gbnVsbCAmJiBlcWwgIT09IHZvaWQgMCA/IGVxbCA6IChlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KSkpO1xuICAgICAgICBsZXQgdmFsaWQ7XG4gICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCBsb29wRW51bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IHZTY2hlbWEgPSBnZW4uY29uc3QoXCJ2U2NoZW1hXCIsIHNjaGVtYUNvZGUpO1xuICAgICAgICAgICAgdmFsaWQgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5zY2hlbWEubWFwKChfeCwgaSkgPT4gZXF1YWxDb2RlKHZTY2hlbWEsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiBsb29wRW51bSgpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInZcIiwgc2NoZW1hQ29kZSwgKHYpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3Z9KWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBlcXVhbENvZGUodlNjaGVtYSwgaSkge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2ldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzY2ggPT09IFwib2JqZWN0XCIgJiYgc2NoICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3ZTY2hlbWF9WyR7aX1dKWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09ICR7c2NofWA7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudW0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGxpbWl0TnVtYmVyXzEgPSByZXF1aXJlKFwiLi9saW1pdE51bWJlclwiKTtcbmNvbnN0IG11bHRpcGxlT2ZfMSA9IHJlcXVpcmUoXCIuL211bHRpcGxlT2ZcIik7XG5jb25zdCBsaW1pdExlbmd0aF8xID0gcmVxdWlyZShcIi4vbGltaXRMZW5ndGhcIik7XG5jb25zdCBwYXR0ZXJuXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuXCIpO1xuY29uc3QgbGltaXRQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9saW1pdFByb3BlcnRpZXNcIik7XG5jb25zdCByZXF1aXJlZF8xID0gcmVxdWlyZShcIi4vcmVxdWlyZWRcIik7XG5jb25zdCBsaW1pdEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9saW1pdEl0ZW1zXCIpO1xuY29uc3QgdW5pcXVlSXRlbXNfMSA9IHJlcXVpcmUoXCIuL3VuaXF1ZUl0ZW1zXCIpO1xuY29uc3QgY29uc3RfMSA9IHJlcXVpcmUoXCIuL2NvbnN0XCIpO1xuY29uc3QgZW51bV8xID0gcmVxdWlyZShcIi4vZW51bVwiKTtcbmNvbnN0IHZhbGlkYXRpb24gPSBbXG4gICAgLy8gbnVtYmVyXG4gICAgbGltaXROdW1iZXJfMS5kZWZhdWx0LFxuICAgIG11bHRpcGxlT2ZfMS5kZWZhdWx0LFxuICAgIC8vIHN0cmluZ1xuICAgIGxpbWl0TGVuZ3RoXzEuZGVmYXVsdCxcbiAgICBwYXR0ZXJuXzEuZGVmYXVsdCxcbiAgICAvLyBvYmplY3RcbiAgICBsaW1pdFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIHJlcXVpcmVkXzEuZGVmYXVsdCxcbiAgICAvLyBhcnJheVxuICAgIGxpbWl0SXRlbXNfMS5kZWZhdWx0LFxuICAgIHVuaXF1ZUl0ZW1zXzEuZGVmYXVsdCxcbiAgICAvLyBhbnlcbiAgICB7IGtleXdvcmQ6IFwidHlwZVwiLCBzY2hlbWFUeXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiXSB9LFxuICAgIHsga2V5d29yZDogXCJudWxsYWJsZVwiLCBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIiB9LFxuICAgIGNvbnN0XzEuZGVmYXVsdCxcbiAgICBlbnVtXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSB2YWxpZGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWQgd2hlbiBcIml0ZW1zXCIgaXMgbm90IGFuIGFycmF5IG9mIHNjaGVtYXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbGVuOiBpdGVtcy5sZW5ndGggfSk7XG4gICAgICAgIGN4dC5wYXNzKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi52YXIoXCJ2YWxpZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7IC8vIFRPRE8gdmFyXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXModmFsaWQpIHtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBpdGVtcy5sZW5ndGgsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBkYXRhUHJvcDogaSwgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0gfSwgdmFsaWQpO1xuICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYXJyYXlcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVHVwbGUoY3h0LCBcImFkZGl0aW9uYWxJdGVtc1wiLCBzY2hlbWEpO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZVR1cGxlKGN4dCwgZXh0cmFJdGVtcywgc2NoQXJyID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tTdHJpY3RUdXBsZShwYXJlbnRTY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHNjaEFyci5sZW5ndGggJiYgaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hBcnIubGVuZ3RoLCBpdC5pdGVtcyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA+ICR7aX1gLCAoKSA9PiBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgIH0sIHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY2hlY2tTdHJpY3RUdXBsZShzY2gpIHtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBlcnJTY2hlbWFQYXRoIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbCA9IHNjaEFyci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGxUdXBsZSA9IGwgPT09IHNjaC5taW5JdGVtcyAmJiAobCA9PT0gc2NoLm1heEl0ZW1zIHx8IHNjaFtleHRyYUl0ZW1zXSA9PT0gZmFsc2UpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RUdXBsZXMgJiYgIWZ1bGxUdXBsZSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYFwiJHtrZXl3b3JkfVwiIGlzICR7bH0tdHVwbGUsIGJ1dCBtaW5JdGVtcyBvciBtYXhJdGVtcy8ke2V4dHJhSXRlbXN9IGFyZSBub3Qgc3BlY2lmaWVkIG9yIGRpZmZlcmVudCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBvcHRzLnN0cmljdFR1cGxlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2YWxpZGF0ZVR1cGxlO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByZWZpeEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImFycmF5XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGU6IChjeHQpID0+ICgwLCBpdGVtc18xLnZhbGlkYXRlVHVwbGUpKGN4dCwgXCJpdGVtc1wiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVmaXhJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBwcmVmaXhJdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHByZWZpeEl0ZW1zKVxuICAgICAgICAgICAgKDAsIGFkZGl0aW9uYWxJdGVtc18xLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKShjeHQsIHByZWZpeEl0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtczIwMjAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gdmFsaWQgaXRlbShzKWBcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gYW5kIG5vIG1vcmUgdGhhbiAke21heH0gdmFsaWQgaXRlbShzKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWluLCBtYXggfSB9KSA9PiBtYXggPT09IHVuZGVmaW5lZCA/ICgwLCBjb2RlZ2VuXzEuXykgYHttaW5Db250YWluczogJHttaW59fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufSwgbWF4Q29udGFpbnM6ICR7bWF4fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBsZXQgbWluO1xuICAgICAgICBsZXQgbWF4O1xuICAgICAgICBjb25zdCB7IG1pbkNvbnRhaW5zLCBtYXhDb250YWlucyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoaXQub3B0cy5uZXh0KSB7XG4gICAgICAgICAgICBtaW4gPSBtaW5Db250YWlucyA9PT0gdW5kZWZpbmVkID8gMSA6IG1pbkNvbnRhaW5zO1xuICAgICAgICAgICAgbWF4ID0gbWF4Q29udGFpbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaW4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWluLCBtYXggfSk7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPT09IDApIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA9PSAwIHdpdGhvdXQgXCJtYXhDb250YWluc1wiOiBcImNvbnRhaW5zXCIga2V5d29yZCBpZ25vcmVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIG1pbiA+IG1heCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCJtaW5Db250YWluc1wiID4gXCJtYXhDb250YWluc1wiIGlzIGFsd2F5cyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgbGV0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPj0gJHttaW59YDtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kfSAmJiAke2xlbn0gPD0gJHttYXh9YDtcbiAgICAgICAgICAgIGN4dC5wYXNzKGNvbmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAxKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zKHZhbGlkLCAoKSA9PiBnZW4uaWYodmFsaWQsICgpID0+IGdlbi5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWluID09PSAwKSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggPiAwYCwgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZ2VuLmxldChcImNvdW50XCIsIDApO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyhzY2hWYWxpZCwgKCkgPT4gZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiBjaGVja0xpbWl0cyhjb3VudCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKF92YWxpZCwgYmxvY2spIHtcbiAgICAgICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgICAgIGJsb2NrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xpbWl0cyhjb3VudCkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0rK2ApO1xuICAgICAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID4gJHttYXh9YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGFpbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IGV4cG9ydHMuZXJyb3IgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuZXhwb3J0cy5lcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlfaWVzID0gZGVwc0NvdW50ID09PSAxID8gXCJwcm9wZXJ0eVwiIDogXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSAke3Byb3BlcnR5X2llc30gJHtkZXBzfSB3aGVuIHByb3BlcnR5ICR7cHJvcGVydHl9IGlzIHByZXNlbnRgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcywgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Byb3BlcnR5OiAke3Byb3BlcnR5fSxcbiAgICBtaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fSxcbiAgICBkZXBzQ291bnQ6ICR7ZGVwc0NvdW50fSxcbiAgICBkZXBzOiAke2RlcHN9fWAsIC8vIFRPRE8gY2hhbmdlIHRvIHJlZmVyZW5jZVxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRlcGVuZGVuY2llc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcjogZXhwb3J0cy5lcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCBbcHJvcERlcHMsIHNjaERlcHNdID0gc3BsaXREZXBlbmRlbmNpZXMoY3h0KTtcbiAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wRGVwcyk7XG4gICAgICAgIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaERlcHMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gc3BsaXREZXBlbmRlbmNpZXMoeyBzY2hlbWEgfSkge1xuICAgIGNvbnN0IHByb3BlcnR5RGVwcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYURlcHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBkZXBzID0gQXJyYXkuaXNBcnJheShzY2hlbWFba2V5XSkgPyBwcm9wZXJ0eURlcHMgOiBzY2hlbWFEZXBzO1xuICAgICAgICBkZXBzW2tleV0gPSBzY2hlbWFba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm9wZXJ0eURlcHMsIHNjaGVtYURlcHNdO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wZXJ0eURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BlcnR5RGVwcykubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbWlzc2luZyA9IGdlbi5sZXQoXCJtaXNzaW5nXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wZXJ0eURlcHMpIHtcbiAgICAgICAgY29uc3QgZGVwcyA9IHByb3BlcnR5RGVwc1twcm9wXTtcbiAgICAgICAgaWYgKGRlcHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGhhc1Byb3BlcnR5ID0gKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLFxuICAgICAgICAgICAgZGVwc0NvdW50OiBkZXBzLmxlbmd0aCxcbiAgICAgICAgICAgIGRlcHM6IGRlcHMuam9pbihcIiwgXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgZ2VuLmlmKGhhc1Byb3BlcnR5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBQcm9wIG9mIGRlcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIGRlcFByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcGVydHl9ICYmICgkeygwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBkZXBzLCBtaXNzaW5nKX0pYCk7XG4gICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSB2YWxpZGF0ZVByb3BlcnR5RGVwcztcbmZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaGVtYURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzY2hlbWFEZXBzKSB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hRGVwc1twcm9wXSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIHNjaGVtYVByb3A6IHByb3AgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCB2YWxpZCk7XG4gICAgICAgIH0sICgpID0+IGdlbi52YXIodmFsaWQsIHRydWUpIC8vIFRPRE8gdmFyXG4gICAgICAgICk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSB2YWxpZGF0ZVNjaGVtYURlcHM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBlbmRlbmNpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJwcm9wZXJ0eSBuYW1lIG11c3QgYmUgdmFsaWRcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHlOYW1lOiAke3BhcmFtcy5wcm9wZXJ0eU5hbWV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwcm9wZXJ0eU5hbWU6IGtleSB9KTtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydHlOYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXNcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWRkaXRpb25hbFByb3BlcnR5OiAke3BhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBbXCJvYmplY3RcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBhbGxvd1VuZGVmaW5lZDogdHJ1ZSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGVycnNDb3VudCwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghZXJyc0NvdW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBjb25zdCB7IGFsbEVycm9ycywgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGl0LnByb3BzID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAhPT0gXCJhbGxcIiAmJiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcGF0UHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgIGNoZWNrQWRkaXRpb25hbFByb3BlcnRpZXMoKTtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xuICAgICAgICBmdW5jdGlvbiBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BzLmxlbmd0aCAmJiAhcGF0UHJvcHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoaXNBZGRpdGlvbmFsKGtleSksICgpID0+IGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0FkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBsZXQgZGVmaW5lZFByb3A7XG4gICAgICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gOCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gbWF5YmUgYW4gb3B0aW9uIGluc3RlYWQgb2YgaGFyZC1jb2RlZCA4P1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzU2NoZW1hID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzLCBcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZV8xLmlzT3duUHJvcGVydHkpKGdlbiwgcHJvcHNTY2hlbWEsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl9ID09PSAke3B9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdFByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVnZW5fMS5vcikoZGVmaW5lZFByb3AsIC4uLnBhdFByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcCl9LnRlc3QoJHtrZXl9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm5vdCkoZGVmaW5lZFByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBkZWxldGUgJHtkYXRhfVske2tleX1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgfHwgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAmJiBzY2hlbWEgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBhZGRpdGlvbmFsUHJvcGVydHk6IGtleSB9KTtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJmYWlsaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQWRkaXRpb25hbChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCwgZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5TdHIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN1YnNjaGVtYSwge1xuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYShzdWJzY2hlbWEsIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiICYmIHBhcmVudFNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQuY29kZShuZXcgdmFsaWRhdGVfMS5LZXl3b3JkQ3h0KGl0LCBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsbFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgYWxsUHJvcHMpIHtcbiAgICAgICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBhbGxQcm9wcy5sZW5ndGggJiYgaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgKDAsIHV0aWxfMS50b0hhc2gpKGFsbFByb3BzKSwgaXQucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBhbGxQcm9wcy5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGhhc0RlZmF1bHQocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmVsc2UoKS52YXIodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0Lml0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzRGVmYXVsdChwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZSAmJiBzY2hlbWFbcHJvcF0uZGVmYXVsdCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCkge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogcHJvcCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogcHJvcCxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBjb25zdCBhbHdheXNWYWxpZFBhdHRlcm5zID0gcGF0dGVybnMuZmlsdGVyKChwKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChhbHdheXNWYWxpZFBhdHRlcm5zLmxlbmd0aCA9PT0gcGF0dGVybnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKCFpdC5vcHRzLnVuZXZhbHVhdGVkIHx8IGl0LnByb3BzID09PSB0cnVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1Byb3BlcnRpZXMgPSBvcHRzLnN0cmljdFNjaGVtYSAmJiAhb3B0cy5hbGxvd01hdGNoaW5nUHJvcGVydGllcyAmJiBwYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgIShpdC5wcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSAoMCwgdXRpbF8yLmV2YWx1YXRlZFByb3BzVG9OYW1lKShnZW4sIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBpdDtcbiAgICAgICAgdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXQgb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZih2YWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNoZWNrUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdCkudGVzdChwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBwcm9wZXJ0eSAke3Byb3B9IG1hdGNoZXMgcGF0dGVybiAke3BhdH0gKHVzZSBhbGxvd01hdGNoaW5nUHJvcGVydGllcylgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcGF0KX0udGVzdCgke2tleX0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbHdheXNWYWxpZCA9IGFsd2F5c1ZhbGlkUGF0dGVybnMuaW5jbHVkZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHdheXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8yLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9WyR7a2V5fV1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWx3YXlzVmFsaWQgJiYgIWl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllc2AgaXMgbm90IHN1cHBvcnRlZCAob3B0cy5uZXh0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIHdlcmUgZXZhbHVhdGVkIChwcm9wcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuUHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIGN4dC5mYWlsUmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgIH0sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IE5PVCBiZSB2YWxpZFwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFueU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGU6IGNvZGVfMS52YWxpZGF0ZVVuaW9uLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBtYXRjaCBhIHNjaGVtYSBpbiBhbnlPZlwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW55T2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZlwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXNzaW5nU2NoZW1hczogJHtwYXJhbXMucGFzc2luZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMuZGlzY3JpbWluYXRvciAmJiBwYXJlbnRTY2hlbWEuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoQXJyID0gc2NoZW1hO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBhc3NpbmcgPSBnZW4ubGV0KFwicGFzc2luZ1wiLCBudWxsKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IHBhc3NpbmcgfSk7XG4gICAgICAgIC8vIFRPRE8gcG9zc2libHkgZmFpbCBzdHJhaWdodCBhd2F5ICh3aXRoIHdhcm5pbmcgb3IgZXhjZXB0aW9uKSBpZiB0aGVyZSBhcmUgdHdvIGVtcHR5IGFsd2F5cyB2YWxpZCBzY2hlbWFzXG4gICAgICAgIGdlbi5ibG9jayh2YWxpZGF0ZU9uZU9mKTtcbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlT25lT2YoKSB7XG4gICAgICAgICAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaEN4dDtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcihzY2hWYWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGAke3NjaFZhbGlkfSAmJiAke3ZhbGlkfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHZhbGlkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24ocGFzc2luZywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7cGFzc2luZ30sICR7aX1dYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lbHNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihwYXNzaW5nLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaEN4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbmVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFsbE9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBzY2hlbWEuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwiYWxsT2ZcIiwgc2NoZW1hUHJvcDogaSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBcIiR7cGFyYW1zLmlmQ2xhdXNlfVwiIHNjaGVtYWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2ZhaWxpbmdLZXl3b3JkOiAke3BhcmFtcy5pZkNsYXVzZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZlwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYS50aGVuID09PSB1bmRlZmluZWQgJiYgcGFyZW50U2NoZW1hLmVsc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCAnXCJpZlwiIHdpdGhvdXQgXCJ0aGVuXCIgYW5kIFwiZWxzZVwiIGlzIGlnbm9yZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNUaGVuID0gaGFzU2NoZW1hKGl0LCBcInRoZW5cIik7XG4gICAgICAgIGNvbnN0IGhhc0Vsc2UgPSBoYXNTY2hlbWEoaXQsIFwiZWxzZVwiKTtcbiAgICAgICAgaWYgKCFoYXNUaGVuICYmICFoYXNFbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgdmFsaWRhdGVJZigpO1xuICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgaWYgKGhhc1RoZW4gJiYgaGFzRWxzZSkge1xuICAgICAgICAgICAgY29uc3QgaWZDbGF1c2UgPSBnZW4ubGV0KFwiaWZDbGF1c2VcIik7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaWZDbGF1c2UgfSk7XG4gICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsIHZhbGlkYXRlQ2xhdXNlKFwidGhlblwiLCBpZkNsYXVzZSksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiLCBpZkNsYXVzZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1RoZW4pIHtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoc2NoVmFsaWQpLCB2YWxpZGF0ZUNsYXVzZShcImVsc2VcIikpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUlmKCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJpZlwiLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVDbGF1c2Uoa2V5d29yZCwgaWZDbGF1c2UpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaWZDbGF1c2UpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaWZDbGF1c2UsICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5d29yZH1gKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZToga2V5d29yZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGhhc1NjaGVtYShpdCwga2V5d29yZCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICByZXR1cm4gc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1widGhlblwiLCBcImVsc2VcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuaWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwiJHtrZXl3b3JkfVwiIHdpdGhvdXQgXCJpZlwiIGlzIGlnbm9yZWRgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW5FbHNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBhZGRpdGlvbmFsSXRlbXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxJdGVtc1wiKTtcbmNvbnN0IHByZWZpeEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9wcmVmaXhJdGVtc1wiKTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGl0ZW1zMjAyMF8xID0gcmVxdWlyZShcIi4vaXRlbXMyMDIwXCIpO1xuY29uc3QgY29udGFpbnNfMSA9IHJlcXVpcmUoXCIuL2NvbnRhaW5zXCIpO1xuY29uc3QgZGVwZW5kZW5jaWVzXzEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNcIik7XG5jb25zdCBwcm9wZXJ0eU5hbWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0eU5hbWVzXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgcHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcHJvcGVydGllc1wiKTtcbmNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuUHJvcGVydGllc1wiKTtcbmNvbnN0IG5vdF8xID0gcmVxdWlyZShcIi4vbm90XCIpO1xuY29uc3QgYW55T2ZfMSA9IHJlcXVpcmUoXCIuL2FueU9mXCIpO1xuY29uc3Qgb25lT2ZfMSA9IHJlcXVpcmUoXCIuL29uZU9mXCIpO1xuY29uc3QgYWxsT2ZfMSA9IHJlcXVpcmUoXCIuL2FsbE9mXCIpO1xuY29uc3QgaWZfMSA9IHJlcXVpcmUoXCIuL2lmXCIpO1xuY29uc3QgdGhlbkVsc2VfMSA9IHJlcXVpcmUoXCIuL3RoZW5FbHNlXCIpO1xuZnVuY3Rpb24gZ2V0QXBwbGljYXRvcihkcmFmdDIwMjAgPSBmYWxzZSkge1xuICAgIGNvbnN0IGFwcGxpY2F0b3IgPSBbXG4gICAgICAgIC8vIGFueVxuICAgICAgICBub3RfMS5kZWZhdWx0LFxuICAgICAgICBhbnlPZl8xLmRlZmF1bHQsXG4gICAgICAgIG9uZU9mXzEuZGVmYXVsdCxcbiAgICAgICAgYWxsT2ZfMS5kZWZhdWx0LFxuICAgICAgICBpZl8xLmRlZmF1bHQsXG4gICAgICAgIHRoZW5FbHNlXzEuZGVmYXVsdCxcbiAgICAgICAgLy8gb2JqZWN0XG4gICAgICAgIHByb3BlcnR5TmFtZXNfMS5kZWZhdWx0LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIGRlcGVuZGVuY2llc18xLmRlZmF1bHQsXG4gICAgICAgIHByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwYXR0ZXJuUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgXTtcbiAgICAvLyBhcnJheVxuICAgIGlmIChkcmFmdDIwMjApXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChwcmVmaXhJdGVtc18xLmRlZmF1bHQsIGl0ZW1zMjAyMF8xLmRlZmF1bHQpO1xuICAgIGVsc2VcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKGFkZGl0aW9uYWxJdGVtc18xLmRlZmF1bHQsIGl0ZW1zXzEuZGVmYXVsdCk7XG4gICAgYXBwbGljYXRvci5wdXNoKGNvbnRhaW5zXzEuZGVmYXVsdCk7XG4gICAgcmV0dXJuIGFwcGxpY2F0b3I7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBnZXRBcHBsaWNhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBmb3JtYXQgXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7Zm9ybWF0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZm9ybWF0XCIsXG4gICAgdHlwZTogW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQsIHJ1bGVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMsIGVyclNjaGVtYVBhdGgsIHNjaGVtYUVudiwgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGlmICghb3B0cy52YWxpZGF0ZUZvcm1hdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICgkZGF0YSlcbiAgICAgICAgICAgIHZhbGlkYXRlJERhdGFGb3JtYXQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXQoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGUkRGF0YUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZtdHMgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogc2VsZi5mb3JtYXRzLFxuICAgICAgICAgICAgICAgIGNvZGU6IG9wdHMuY29kZS5mb3JtYXRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmRGVmID0gZ2VuLmNvbnN0KFwiZkRlZlwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdHN9WyR7c2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjb25zdCBmVHlwZSA9IGdlbi5sZXQoXCJmVHlwZVwiKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGdlbi5sZXQoXCJmb3JtYXRcIik7XG4gICAgICAgICAgICAvLyBUT0RPIHNpbXBsaWZ5XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZkRlZn0gPT0gXCJvYmplY3RcIiAmJiAhKCR7ZkRlZn0gaW5zdGFuY2VvZiBSZWdFeHApYCwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmRGVmfS50eXBlIHx8IFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnZhbGlkYXRlYCksICgpID0+IGdlbi5hc3NpZ24oZlR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCBmRGVmKSk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEub3IpKHVua25vd25GbXQoKSwgaW52YWxpZEZtdCgpKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm10KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICYmICEke2Zvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaW52YWxpZEZtdCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsRm9ybWF0ID0gc2NoZW1hRW52LiRhc3luY1xuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCgke2ZEZWZ9LmFzeW5jID8gYXdhaXQgJHtmb3JtYXR9KCR7ZGF0YX0pIDogJHtmb3JtYXR9KCR7ZGF0YX0pKWBcbiAgICAgICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0oJHtkYXRhfSlgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCh0eXBlb2YgJHtmb3JtYXR9ID09IFwiZnVuY3Rpb25cIiA/ICR7Y2FsbEZvcm1hdH0gOiAke2Zvcm1hdH0udGVzdCgke2RhdGF9KSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0gJiYgJHtmb3JtYXR9ICE9PSB0cnVlICYmICR7ZlR5cGV9ID09PSAke3J1bGVUeXBlfSAmJiAhJHt2YWxpZERhdGF9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdERlZiA9IHNlbGYuZm9ybWF0c1tzY2hlbWFdO1xuICAgICAgICAgICAgaWYgKCFmb3JtYXREZWYpIHtcbiAgICAgICAgICAgICAgICB1bmtub3duRm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBbZm10VHlwZSwgZm9ybWF0LCBmbXRSZWZdID0gZ2V0Rm9ybWF0KGZvcm1hdERlZik7XG4gICAgICAgICAgICBpZiAoZm10VHlwZSA9PT0gcnVsZVR5cGUpXG4gICAgICAgICAgICAgICAgY3h0LnBhc3ModmFsaWRDb25kaXRpb24oKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm9ybWF0KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Nc2coKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgdW5rbm93biBmb3JtYXQgXCIke3NjaGVtYX1cIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRGb3JtYXQoZm10RGVmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEucmVnZXhwQ29kZSkoZm10RGVmKVxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMuY29kZS5mb3JtYXRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7b3B0cy5jb2RlLmZvcm1hdHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShzY2hlbWEpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7IGtleTogc2NoZW1hLCByZWY6IGZtdERlZiwgY29kZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2ZtdERlZi50eXBlIHx8IFwic3RyaW5nXCIsIGZtdERlZi52YWxpZGF0ZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXR9LnZhbGlkYXRlYF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXCJzdHJpbmdcIiwgZm10RGVmLCBmbXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRDb25kaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXREZWYgPT0gXCJvYmplY3RcIiAmJiAhKGZvcm1hdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgZm9ybWF0RGVmLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGZvcm1hdCBpbiBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0ICR7Zm10UmVmfSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZm9ybWF0ID09IFwiZnVuY3Rpb25cIiA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfSgke2RhdGF9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdFJlZn0udGVzdCgke2RhdGF9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBmb3JtYXQgPSBbZm9ybWF0XzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IGV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gdm9pZCAwO1xuZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSBbXG4gICAgXCJ0aXRsZVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlcHJlY2F0ZWRcIixcbiAgICBcInJlYWRPbmx5XCIsXG4gICAgXCJ3cml0ZU9ubHlcIixcbiAgICBcImV4YW1wbGVzXCIsXG5dO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IFtcbiAgICBcImNvbnRlbnRNZWRpYVR5cGVcIixcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldGFkYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFwcGxpY2F0b3JfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2F0b3JcIik7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGRyYWZ0N1ZvY2FidWxhcmllcyA9IFtcbiAgICBjb3JlXzEuZGVmYXVsdCxcbiAgICB2YWxpZGF0aW9uXzEuZGVmYXVsdCxcbiAgICAoMCwgYXBwbGljYXRvcl8xLmRlZmF1bHQpKCksXG4gICAgZm9ybWF0XzEuZGVmYXVsdCxcbiAgICBtZXRhZGF0YV8xLm1ldGFkYXRhVm9jYWJ1bGFyeSxcbiAgICBtZXRhZGF0YV8xLmNvbnRlbnRWb2NhYnVsYXJ5LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyYWZ0N1ZvY2FidWxhcmllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRyYWZ0Ny5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaXNjckVycm9yID0gdm9pZCAwO1xudmFyIERpc2NyRXJyb3I7XG4oZnVuY3Rpb24gKERpc2NyRXJyb3IpIHtcbiAgICBEaXNjckVycm9yW1wiVGFnXCJdID0gXCJ0YWdcIjtcbiAgICBEaXNjckVycm9yW1wiTWFwcGluZ1wiXSA9IFwibWFwcGluZ1wiO1xufSkoRGlzY3JFcnJvciA9IGV4cG9ydHMuRGlzY3JFcnJvciB8fCAoZXhwb3J0cy5EaXNjckVycm9yID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi9kaXNjcmltaW5hdG9yL3R5cGVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZ05hbWUgfSB9KSA9PiBkaXNjckVycm9yID09PSB0eXBlc18xLkRpc2NyRXJyb3IuVGFnXG4gICAgICAgID8gYHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHN0cmluZ2BcbiAgICAgICAgOiBgdmFsdWUgb2YgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgaW4gb25lT2ZgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZywgdGFnTmFtZSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtlcnJvcjogJHtkaXNjckVycm9yfSwgdGFnOiAke3RhZ05hbWV9LCB0YWdWYWx1ZTogJHt0YWd9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGlzY3JpbWluYXRvclwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb25lT2YgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKCFpdC5vcHRzLmRpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIGRpc2NyaW1pbmF0b3Igb3B0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBzY2hlbWEucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAodHlwZW9mIHRhZ05hbWUgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIHByb3BlcnR5TmFtZVwiKTtcbiAgICAgICAgaWYgKHNjaGVtYS5tYXBwaW5nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogbWFwcGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICBpZiAoIW9uZU9mKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgb25lT2Yga2V5d29yZFwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgICAgICBjb25zdCB0YWcgPSBnZW4uY29uc3QoXCJ0YWdcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkodGFnTmFtZSl9YCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHt0YWd9ID09IFwic3RyaW5nXCJgLCAoKSA9PiB2YWxpZGF0ZU1hcHBpbmcoKSwgKCkgPT4gY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5UYWcsIHRhZywgdGFnTmFtZSB9KSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlTWFwcGluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBnZXRNYXBwaW5nKCk7XG4gICAgICAgICAgICBnZW4uaWYoZmFsc2UpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBpbiBtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke3RhZ30gPT09ICR7dGFnVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgYXBwbHlUYWdTY2hlbWEobWFwcGluZ1t0YWdWYWx1ZV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLk1hcHBpbmcsIHRhZywgdGFnTmFtZSB9KTtcbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5VGFnU2NoZW1hKHNjaGVtYVByb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZDogXCJvbmVPZlwiLCBzY2hlbWFQcm9wIH0sIF92YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0LCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gX3ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE1hcHBpbmcoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvbmVPZk1hcHBpbmcgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFJlcXVpcmVkID0gaGFzUmVxdWlyZWQocGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIGxldCB0YWdSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZU9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaCA9IG9uZU9mW2ldO1xuICAgICAgICAgICAgICAgIGlmICgoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpICYmICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2gsIGl0LnNlbGYuUlVMRVMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoaXQuc2VsZiwgaXQuc2NoZW1hRW52LnJvb3QsIGl0LmJhc2VJZCwgc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoIGluc3RhbmNlb2YgY29tcGlsZV8xLlNjaGVtYUVudilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaCA9IHNjaC5zY2hlbWE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BTY2ggPSAoX2EgPSBzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2gucHJvcGVydGllcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3RhZ05hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcFNjaCAhPSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogb25lT2Ygc3Vic2NoZW1hcyAob3IgcmVmZXJlbmNlZCBzY2hlbWFzKSBtdXN0IGhhdmUgXCJwcm9wZXJ0aWVzLyR7dGFnTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWdSZXF1aXJlZCA9IHRhZ1JlcXVpcmVkICYmICh0b3BSZXF1aXJlZCB8fCBoYXNSZXF1aXJlZChzY2gpKTtcbiAgICAgICAgICAgICAgICBhZGRNYXBwaW5ncyhwcm9wU2NoLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFnUmVxdWlyZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICByZXR1cm4gb25lT2ZNYXBwaW5nO1xuICAgICAgICAgICAgZnVuY3Rpb24gaGFzUmVxdWlyZWQoeyByZXF1aXJlZCB9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVxdWlyZWQpICYmIHJlcXVpcmVkLmluY2x1ZGVzKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZ3Moc2NoLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5jb25zdCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHNjaC5jb25zdCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFnVmFsdWUgb2Ygc2NoLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCIgbXVzdCBoYXZlIFwiY29uc3RcIiBvciBcImVudW1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhZ1ZhbHVlICE9IFwic3RyaW5nXCIgfHwgdGFnVmFsdWUgaW4gb25lT2ZNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgdmFsdWVzIG11c3QgYmUgdW5pcXVlIHN0cmluZ3NgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25lT2ZNYXBwaW5nW3RhZ1ZhbHVlXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1pc3NpbmdSZWZFcnJvciA9IGV4cG9ydHMuVmFsaWRhdGlvbkVycm9yID0gZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IGRyYWZ0N18xID0gcmVxdWlyZShcIi4vdm9jYWJ1bGFyaWVzL2RyYWZ0N1wiKTtcbmNvbnN0IGRpc2NyaW1pbmF0b3JfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yXCIpO1xuY29uc3QgZHJhZnQ3TWV0YVNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvblwiKTtcbmNvbnN0IE1FVEFfU1VQUE9SVF9EQVRBID0gW1wiL3Byb3BlcnRpZXNcIl07XG5jb25zdCBNRVRBX1NDSEVNQV9JRCA9IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWFcIjtcbmNsYXNzIEFqdiBleHRlbmRzIGNvcmVfMS5kZWZhdWx0IHtcbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICBzdXBlci5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIGRyYWZ0N18xLmRlZmF1bHQuZm9yRWFjaCgodikgPT4gdGhpcy5hZGRWb2NhYnVsYXJ5KHYpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRpc2NyaW1pbmF0b3JfMS5kZWZhdWx0KTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBzdXBlci5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubWV0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbWV0YVNjaGVtYSA9IHRoaXMub3B0cy4kZGF0YVxuICAgICAgICAgICAgPyB0aGlzLiRkYXRhTWV0YVNjaGVtYShkcmFmdDdNZXRhU2NoZW1hLCBNRVRBX1NVUFBPUlRfREFUQSlcbiAgICAgICAgICAgIDogZHJhZnQ3TWV0YVNjaGVtYTtcbiAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCBmYWxzZSk7XG4gICAgICAgIHRoaXMucmVmc1tcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hXCJdID0gTUVUQV9TQ0hFTUFfSUQ7XG4gICAgfVxuICAgIGRlZmF1bHRNZXRhKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5kZWZhdWx0TWV0YSA9XG4gICAgICAgICAgICBzdXBlci5kZWZhdWx0TWV0YSgpIHx8ICh0aGlzLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRCkgPyBNRVRBX1NDSEVNQV9JRCA6IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IEFqdjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG52YXIgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbnZhciByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWlzc2luZ1JlZkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZfZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWp2LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvcm1hdExpbWl0RGVmaW5pdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFqdl8xID0gcmVxdWlyZShcImFqdlwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCJhanYvZGlzdC9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBmb3JtYXRNYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBmb3JtYXRNaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBmb3JtYXRFeGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGZvcm1hdEV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiBjb2RlZ2VuXzEuc3RyIGBzaG91bGQgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gY29kZWdlbl8xLl8gYHtjb21wYXJpc29uOiAke0tXRHNba2V5d29yZF0ub2tTdHJ9LCBsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmV4cG9ydHMuZm9ybWF0TGltaXREZWZpbml0aW9uID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hQ29kZSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICAgICAgaWYgKCFvcHRzLnZhbGlkYXRlRm9ybWF0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZkN4dCA9IG5ldyBhanZfMS5LZXl3b3JkQ3h0KGl0LCBzZWxmLlJVTEVTLmFsbC5mb3JtYXQuZGVmaW5pdGlvbiwgXCJmb3JtYXRcIik7XG4gICAgICAgIGlmIChmQ3h0LiRkYXRhKVxuICAgICAgICAgICAgdmFsaWRhdGUkRGF0YUZvcm1hdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1hdCgpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZSREYXRhRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm10cyA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBzZWxmLmZvcm1hdHMsXG4gICAgICAgICAgICAgICAgY29kZTogb3B0cy5jb2RlLmZvcm1hdHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5jb25zdChcImZtdFwiLCBjb2RlZ2VuXzEuXyBgJHtmbXRzfVske2ZDeHQuc2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKGNvZGVnZW5fMS5vcihjb2RlZ2VuXzEuXyBgdHlwZW9mICR7Zm10fSAhPSBcIm9iamVjdFwiYCwgY29kZWdlbl8xLl8gYCR7Zm10fSBpbnN0YW5jZW9mIFJlZ0V4cGAsIGNvZGVnZW5fMS5fIGB0eXBlb2YgJHtmbXR9LmNvbXBhcmUgIT0gXCJmdW5jdGlvblwiYCwgY29tcGFyZUNvZGUoZm10KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZkN4dC5zY2hlbWE7XG4gICAgICAgICAgICBjb25zdCBmbXREZWYgPSBzZWxmLmZvcm1hdHNbZm9ybWF0XTtcbiAgICAgICAgICAgIGlmICghZm10RGVmIHx8IGZtdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAgICAgICAgICAgZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGZtdERlZi5jb21wYXJlICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke2tleXdvcmR9XCI6IGZvcm1hdCBcIiR7Zm9ybWF0fVwiIGRvZXMgbm90IGRlZmluZSBcImNvbXBhcmVcIiBmdW5jdGlvbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IGZvcm1hdCxcbiAgICAgICAgICAgICAgICByZWY6IGZtdERlZixcbiAgICAgICAgICAgICAgICBjb2RlOiBvcHRzLmNvZGUuZm9ybWF0cyA/IGNvZGVnZW5fMS5fIGAke29wdHMuY29kZS5mb3JtYXRzfSR7Y29kZWdlbl8xLmdldFByb3BlcnR5KGZvcm1hdCl9YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YShjb21wYXJlQ29kZShmbXQpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjb21wYXJlQ29kZShmbXQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEuXyBgJHtmbXR9LmNvbXBhcmUoJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSkgJHtLV0RzW2tleXdvcmRdLmZhaWx9IDBgO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcImZvcm1hdFwiXSxcbn07XG5jb25zdCBmb3JtYXRMaW1pdFBsdWdpbiA9IChhanYpID0+IHtcbiAgICBhanYuYWRkS2V5d29yZChleHBvcnRzLmZvcm1hdExpbWl0RGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIGFqdjtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXRMaW1pdFBsdWdpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmb3JtYXRzXzEgPSByZXF1aXJlKFwiLi9mb3JtYXRzXCIpO1xuY29uc3QgbGltaXRfMSA9IHJlcXVpcmUoXCIuL2xpbWl0XCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcImFqdi9kaXN0L2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGZ1bGxOYW1lID0gbmV3IGNvZGVnZW5fMS5OYW1lKFwiZnVsbEZvcm1hdHNcIik7XG5jb25zdCBmYXN0TmFtZSA9IG5ldyBjb2RlZ2VuXzEuTmFtZShcImZhc3RGb3JtYXRzXCIpO1xuY29uc3QgZm9ybWF0c1BsdWdpbiA9IChhanYsIG9wdHMgPSB7IGtleXdvcmRzOiB0cnVlIH0pID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgICBhZGRGb3JtYXRzKGFqdiwgb3B0cywgZm9ybWF0c18xLmZ1bGxGb3JtYXRzLCBmdWxsTmFtZSk7XG4gICAgICAgIHJldHVybiBhanY7XG4gICAgfVxuICAgIGNvbnN0IFtmb3JtYXRzLCBleHBvcnROYW1lXSA9IG9wdHMubW9kZSA9PT0gXCJmYXN0XCIgPyBbZm9ybWF0c18xLmZhc3RGb3JtYXRzLCBmYXN0TmFtZV0gOiBbZm9ybWF0c18xLmZ1bGxGb3JtYXRzLCBmdWxsTmFtZV07XG4gICAgY29uc3QgbGlzdCA9IG9wdHMuZm9ybWF0cyB8fCBmb3JtYXRzXzEuZm9ybWF0TmFtZXM7XG4gICAgYWRkRm9ybWF0cyhhanYsIGxpc3QsIGZvcm1hdHMsIGV4cG9ydE5hbWUpO1xuICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICBsaW1pdF8xLmRlZmF1bHQoYWp2KTtcbiAgICByZXR1cm4gYWp2O1xufTtcbmZvcm1hdHNQbHVnaW4uZ2V0ID0gKG5hbWUsIG1vZGUgPSBcImZ1bGxcIikgPT4ge1xuICAgIGNvbnN0IGZvcm1hdHMgPSBtb2RlID09PSBcImZhc3RcIiA/IGZvcm1hdHNfMS5mYXN0Rm9ybWF0cyA6IGZvcm1hdHNfMS5mdWxsRm9ybWF0cztcbiAgICBjb25zdCBmID0gZm9ybWF0c1tuYW1lXTtcbiAgICBpZiAoIWYpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmb3JtYXQgXCIke25hbWV9XCJgKTtcbiAgICByZXR1cm4gZjtcbn07XG5mdW5jdGlvbiBhZGRGb3JtYXRzKGFqdiwgbGlzdCwgZnMsIGV4cG9ydE5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIF9iO1xuICAgIChfYSA9IChfYiA9IGFqdi5vcHRzLmNvZGUpLmZvcm1hdHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYi5mb3JtYXRzID0gY29kZWdlbl8xLl8gYHJlcXVpcmUoXCJhanYtZm9ybWF0cy9kaXN0L2Zvcm1hdHNcIikuJHtleHBvcnROYW1lfWApO1xuICAgIGZvciAoY29uc3QgZiBvZiBsaXN0KVxuICAgICAgICBhanYuYWRkRm9ybWF0KGYsIGZzW2ZdKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZvcm1hdHNQbHVnaW47XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXRzUGx1Z2luO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290Lm5lYXJsZXkgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcblxuICAgIGZ1bmN0aW9uIFJ1bGUobmFtZSwgc3ltYm9scywgcG9zdHByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5pZCA9ICsrUnVsZS5oaWdoZXN0SWQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IHN5bWJvbHM7ICAgICAgICAvLyBhIGxpc3Qgb2YgbGl0ZXJhbCB8IHJlZ2V4IGNsYXNzIHwgbm9udGVybWluYWxcbiAgICAgICAgdGhpcy5wb3N0cHJvY2VzcyA9IHBvc3Rwcm9jZXNzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgUnVsZS5oaWdoZXN0SWQgPSAwO1xuXG4gICAgUnVsZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbih3aXRoQ3Vyc29yQXQpIHtcbiAgICAgICAgdmFyIHN5bWJvbFNlcXVlbmNlID0gKHR5cGVvZiB3aXRoQ3Vyc29yQXQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zeW1ib2xzLm1hcChnZXRTeW1ib2xTaG9ydERpc3BsYXkpLmpvaW4oJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggICB0aGlzLnN5bWJvbHMuc2xpY2UoMCwgd2l0aEN1cnNvckF0KS5tYXAoZ2V0U3ltYm9sU2hvcnREaXNwbGF5KS5qb2luKCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgXCIg4pePIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuc3ltYm9scy5zbGljZSh3aXRoQ3Vyc29yQXQpLm1hcChnZXRTeW1ib2xTaG9ydERpc3BsYXkpLmpvaW4oJyAnKSAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArIFwiIOKGkiBcIiArIHN5bWJvbFNlcXVlbmNlO1xuICAgIH1cblxuXG4gICAgLy8gYSBTdGF0ZSBpcyBhIHJ1bGUgYXQgYSBwb3NpdGlvbiBmcm9tIGEgZ2l2ZW4gc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGlucHV0IHN0cmVhbSAocmVmZXJlbmNlKVxuICAgIGZ1bmN0aW9uIFN0YXRlKHJ1bGUsIGRvdCwgcmVmZXJlbmNlLCB3YW50ZWRCeSkge1xuICAgICAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICAgICAgICB0aGlzLmRvdCA9IGRvdDtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLndhbnRlZEJ5ID0gd2FudGVkQnk7XG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZSA9IHRoaXMuZG90ID09PSBydWxlLnN5bWJvbHMubGVuZ3RoO1xuICAgIH1cblxuICAgIFN0YXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGUudG9TdHJpbmcodGhpcy5kb3QpICsgXCJ9LCBmcm9tOiBcIiArICh0aGlzLnJlZmVyZW5jZSB8fCAwKTtcbiAgICB9O1xuXG4gICAgU3RhdGUucHJvdG90eXBlLm5leHRTdGF0ZSA9IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZSh0aGlzLnJ1bGUsIHRoaXMuZG90ICsgMSwgdGhpcy5yZWZlcmVuY2UsIHRoaXMud2FudGVkQnkpO1xuICAgICAgICBzdGF0ZS5sZWZ0ID0gdGhpcztcbiAgICAgICAgc3RhdGUucmlnaHQgPSBjaGlsZDtcbiAgICAgICAgaWYgKHN0YXRlLmlzQ29tcGxldGUpIHtcbiAgICAgICAgICAgIHN0YXRlLmRhdGEgPSBzdGF0ZS5idWlsZCgpO1xuICAgICAgICAgICAgLy8gSGF2aW5nIHJpZ2h0IHNldCBoZXJlIHdpbGwgcHJldmVudCB0aGUgcmlnaHQgc3RhdGUgYW5kIGl0cyBjaGlsZHJlblxuICAgICAgICAgICAgLy8gZm9ybSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuICAgICAgICAgICAgc3RhdGUucmlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH07XG5cbiAgICBTdGF0ZS5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgICAgIHZhciBub2RlID0gdGhpcztcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChub2RlLnJpZ2h0LmRhdGEpO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgfSB3aGlsZSAobm9kZS5sZWZ0KTtcbiAgICAgICAgY2hpbGRyZW4ucmV2ZXJzZSgpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfTtcblxuICAgIFN0YXRlLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucnVsZS5wb3N0cHJvY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5ydWxlLnBvc3Rwcm9jZXNzKHRoaXMuZGF0YSwgdGhpcy5yZWZlcmVuY2UsIFBhcnNlci5mYWlsKTtcbiAgICAgICAgfVxuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIENvbHVtbihncmFtbWFyLCBpbmRleCkge1xuICAgICAgICB0aGlzLmdyYW1tYXIgPSBncmFtbWFyO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgICAgIHRoaXMud2FudHMgPSB7fTsgLy8gc3RhdGVzIGluZGV4ZWQgYnkgdGhlIG5vbi10ZXJtaW5hbCB0aGV5IGV4cGVjdFxuICAgICAgICB0aGlzLnNjYW5uYWJsZSA9IFtdOyAvLyBsaXN0IG9mIHN0YXRlcyB0aGF0IGV4cGVjdCBhIHRva2VuXG4gICAgICAgIHRoaXMuY29tcGxldGVkID0ge307IC8vIHN0YXRlcyB0aGF0IGFyZSBudWxsYWJsZVxuICAgIH1cblxuXG4gICAgQ29sdW1uLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24obmV4dENvbHVtbikge1xuICAgICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICAgIHZhciB3YW50cyA9IHRoaXMud2FudHM7XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSB0aGlzLmNvbXBsZXRlZDtcblxuICAgICAgICBmb3IgKHZhciB3ID0gMDsgdyA8IHN0YXRlcy5sZW5ndGg7IHcrKykgeyAvLyBuYi4gd2UgcHVzaCgpIGR1cmluZyBpdGVyYXRpb25cbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlc1t3XTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlLmlzQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5maW5pc2goKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGF0YSAhPT0gUGFyc2VyLmZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdhbnRlZEJ5ID0gc3RhdGUud2FudGVkQnk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB3YW50ZWRCeS5sZW5ndGg7IGktLTsgKSB7IC8vIHRoaXMgbGluZSBpcyBob3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gd2FudGVkQnlbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGxlZnQsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwtY2FzZSBudWxsYWJsZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlZmVyZW5jZSA9PT0gdGhpcy5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGZ1dHVyZSBwcmVkaWN0b3JzIG9mIHRoaXMgcnVsZSBnZXQgY29tcGxldGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4cCA9IHN0YXRlLnJ1bGUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmNvbXBsZXRlZFtleHBdID0gdGhpcy5jb21wbGV0ZWRbZXhwXSB8fCBbXSkucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcXVldWUgc2Nhbm5hYmxlIHN0YXRlc1xuICAgICAgICAgICAgICAgIHZhciBleHAgPSBzdGF0ZS5ydWxlLnN5bWJvbHNbc3RhdGUuZG90XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV4cCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FubmFibGUucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHByZWRpY3RcbiAgICAgICAgICAgICAgICBpZiAod2FudHNbZXhwXSkge1xuICAgICAgICAgICAgICAgICAgICB3YW50c1tleHBdLnB1c2goc3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQuaGFzT3duUHJvcGVydHkoZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bGxzID0gY29tcGxldGVkW2V4cF07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0ID0gbnVsbHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZShzdGF0ZSwgcmlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd2FudHNbZXhwXSA9IFtzdGF0ZV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZGljdChleHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIENvbHVtbi5wcm90b3R5cGUucHJlZGljdCA9IGZ1bmN0aW9uKGV4cCkge1xuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLmdyYW1tYXIuYnlOYW1lW2V4cF0gfHwgW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHIgPSBydWxlc1tpXTtcbiAgICAgICAgICAgIHZhciB3YW50ZWRCeSA9IHRoaXMud2FudHNbZXhwXTtcbiAgICAgICAgICAgIHZhciBzID0gbmV3IFN0YXRlKHIsIDAsIHRoaXMuaW5kZXgsIHdhbnRlZEJ5KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVzLnB1c2gocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBDb2x1bW4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgICAgdmFyIGNvcHkgPSBsZWZ0Lm5leHRTdGF0ZShyaWdodCk7XG4gICAgICAgIHRoaXMuc3RhdGVzLnB1c2goY29weSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBHcmFtbWFyKHJ1bGVzLCBzdGFydCkge1xuICAgICAgICB0aGlzLnJ1bGVzID0gcnVsZXM7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCB0aGlzLnJ1bGVzWzBdLm5hbWU7XG4gICAgICAgIHZhciBieU5hbWUgPSB0aGlzLmJ5TmFtZSA9IHt9O1xuICAgICAgICB0aGlzLnJ1bGVzLmZvckVhY2goZnVuY3Rpb24ocnVsZSkge1xuICAgICAgICAgICAgaWYgKCFieU5hbWUuaGFzT3duUHJvcGVydHkocnVsZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgIGJ5TmFtZVtydWxlLm5hbWVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBieU5hbWVbcnVsZS5uYW1lXS5wdXNoKHJ1bGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTbyB3ZSBjYW4gYWxsb3cgcGFzc2luZyAocnVsZXMsIHN0YXJ0KSBkaXJlY3RseSB0byBQYXJzZXIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgR3JhbW1hci5mcm9tQ29tcGlsZWQgPSBmdW5jdGlvbihydWxlcywgc3RhcnQpIHtcbiAgICAgICAgdmFyIGxleGVyID0gcnVsZXMuTGV4ZXI7XG4gICAgICAgIGlmIChydWxlcy5QYXJzZXJTdGFydCkge1xuICAgICAgICAgIHN0YXJ0ID0gcnVsZXMuUGFyc2VyU3RhcnQ7XG4gICAgICAgICAgcnVsZXMgPSBydWxlcy5QYXJzZXJSdWxlcztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSBydWxlcy5tYXAoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIChuZXcgUnVsZShyLm5hbWUsIHIuc3ltYm9scywgci5wb3N0cHJvY2VzcykpOyB9KTtcbiAgICAgICAgdmFyIGcgPSBuZXcgR3JhbW1hcihydWxlcywgc3RhcnQpO1xuICAgICAgICBnLmxleGVyID0gbGV4ZXI7IC8vIG5iLiBzdG9yaW5nIGxleGVyIG9uIEdyYW1tYXIgaXMgaWZmeSwgYnV0IHVuYXZvaWRhYmxlXG4gICAgICAgIHJldHVybiBnO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gU3RyZWFtTGV4ZXIoKSB7XG4gICAgICB0aGlzLnJlc2V0KFwiXCIpO1xuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEsIHN0YXRlKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHRoaXMubGluZSA9IHN0YXRlID8gc3RhdGUubGluZSA6IDE7XG4gICAgICAgIHRoaXMubGFzdExpbmVCcmVhayA9IHN0YXRlID8gLXN0YXRlLmNvbCA6IDA7XG4gICAgfVxuXG4gICAgU3RyZWFtTGV4ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPCB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgrK107XG4gICAgICAgICAgICBpZiAoY2ggPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZSArPSAxO1xuICAgICAgICAgICAgICB0aGlzLmxhc3RMaW5lQnJlYWsgPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogY2h9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RyZWFtTGV4ZXIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IHRoaXMubGluZSxcbiAgICAgICAgY29sOiB0aGlzLmluZGV4IC0gdGhpcy5sYXN0TGluZUJyZWFrLFxuICAgICAgfVxuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5mb3JtYXRFcnJvciA9IGZ1bmN0aW9uKHRva2VuLCBtZXNzYWdlKSB7XG4gICAgICAgIC8vIG5iLiB0aGlzIGdldHMgY2FsbGVkIGFmdGVyIGNvbnN1bWluZyB0aGUgb2ZmZW5kaW5nIHRva2VuLFxuICAgICAgICAvLyBzbyB0aGUgY3VscHJpdCBpcyBpbmRleC0xXG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBidWZmZXJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgICAgICAuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KDAsIHRoaXMubGluZSAtIDUpLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdmFyIG5leHRMaW5lQnJlYWsgPSBidWZmZXIuaW5kZXhPZignXFxuJywgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICBpZiAobmV4dExpbmVCcmVhayA9PT0gLTEpIG5leHRMaW5lQnJlYWsgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGNvbCA9IHRoaXMuaW5kZXggLSB0aGlzLmxhc3RMaW5lQnJlYWs7XG4gICAgICAgICAgICB2YXIgbGFzdExpbmVEaWdpdHMgPSBTdHJpbmcodGhpcy5saW5lKS5sZW5ndGg7XG4gICAgICAgICAgICBtZXNzYWdlICs9IFwiIGF0IGxpbmUgXCIgKyB0aGlzLmxpbmUgKyBcIiBjb2wgXCIgKyBjb2wgKyBcIjpcXG5cXG5cIjtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gbGluZXNcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKGxpbmUsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZCh0aGlzLmxpbmUgLSBsaW5lcy5sZW5ndGggKyBpICsgMSwgbGFzdExpbmVEaWdpdHMpICsgXCIgXCIgKyBsaW5lO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICBtZXNzYWdlICs9IFwiXFxuXCIgKyBwYWQoXCJcIiwgbGFzdExpbmVEaWdpdHMgKyBjb2wpICsgXCJeXFxuXCI7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlICsgXCIgYXQgaW5kZXggXCIgKyAodGhpcy5pbmRleCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFkKG4sIGxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIHMgPSBTdHJpbmcobik7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkobGVuZ3RoIC0gcy5sZW5ndGggKyAxKS5qb2luKFwiIFwiKSArIHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBQYXJzZXIocnVsZXMsIHN0YXJ0LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChydWxlcyBpbnN0YW5jZW9mIEdyYW1tYXIpIHtcbiAgICAgICAgICAgIHZhciBncmFtbWFyID0gcnVsZXM7XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHN0YXJ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGdyYW1tYXIgPSBHcmFtbWFyLmZyb21Db21waWxlZChydWxlcywgc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhbW1hciA9IGdyYW1tYXI7XG5cbiAgICAgICAgLy8gUmVhZCBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtlZXBIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgIGxleGVyOiBncmFtbWFyLmxleGVyIHx8IG5ldyBTdHJlYW1MZXhlcixcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIChvcHRpb25zIHx8IHt9KSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXR1cCBsZXhlclxuICAgICAgICB0aGlzLmxleGVyID0gdGhpcy5vcHRpb25zLmxleGVyO1xuICAgICAgICB0aGlzLmxleGVyU3RhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gU2V0dXAgYSB0YWJsZVxuICAgICAgICB2YXIgY29sdW1uID0gbmV3IENvbHVtbihncmFtbWFyLCAwKTtcbiAgICAgICAgdmFyIHRhYmxlID0gdGhpcy50YWJsZSA9IFtjb2x1bW5dO1xuXG4gICAgICAgIC8vIEkgY291bGQgYmUgZXhwZWN0aW5nIGFueXRoaW5nLlxuICAgICAgICBjb2x1bW4ud2FudHNbZ3JhbW1hci5zdGFydF0gPSBbXTtcbiAgICAgICAgY29sdW1uLnByZWRpY3QoZ3JhbW1hci5zdGFydCk7XG4gICAgICAgIC8vIFRPRE8gd2hhdCBpZiBzdGFydCBydWxlIGlzIG51bGxhYmxlP1xuICAgICAgICBjb2x1bW4ucHJvY2VzcygpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSAwOyAvLyB0b2tlbiBpbmRleFxuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBhIHJlc2VydmVkIHRva2VuIGZvciBpbmRpY2F0aW5nIGEgcGFyc2UgZmFpbFxuICAgIFBhcnNlci5mYWlsID0ge307XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLmZlZWQgPSBmdW5jdGlvbihjaHVuaykge1xuICAgICAgICB2YXIgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgICAgICBsZXhlci5yZXNldChjaHVuaywgdGhpcy5sZXhlclN0YXRlKTtcblxuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRva2VuID0gbGV4ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgbmV4dCBjb2x1bW4gc28gdGhhdCB0aGUgZXJyb3IgcmVwb3J0ZXJcbiAgICAgICAgICAgICAgICAvLyBjYW4gZGlzcGxheSB0aGUgY29ycmVjdGx5IHByZWRpY3RlZCBzdGF0ZXMuXG4gICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSBuZXcgQ29sdW1uKHRoaXMuZ3JhbW1hciwgdGhpcy5jdXJyZW50ICsgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5wdXNoKG5leHRDb2x1bW4pO1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IodGhpcy5yZXBvcnRMZXhlckVycm9yKGUpKTtcbiAgICAgICAgICAgICAgICBlcnIub2Zmc2V0ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgIGVyci50b2tlbiA9IGUudG9rZW47XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2UgYWRkIG5ldyBzdGF0ZXMgdG8gdGFibGVbY3VycmVudCsxXVxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMudGFibGVbdGhpcy5jdXJyZW50XTtcblxuICAgICAgICAgICAgLy8gR0MgdW51c2VkIHN0YXRlc1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMua2VlcEhpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50YWJsZVt0aGlzLmN1cnJlbnQgLSAxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG4gPSB0aGlzLmN1cnJlbnQgKyAxO1xuICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSBuZXcgQ29sdW1uKHRoaXMuZ3JhbW1hciwgbik7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnB1c2gobmV4dENvbHVtbik7XG5cbiAgICAgICAgICAgIC8vIEFkdmFuY2UgYWxsIHRva2VucyB0aGF0IGV4cGVjdCB0aGUgc3ltYm9sXG4gICAgICAgICAgICB2YXIgbGl0ZXJhbCA9IHRva2VuLnRleHQgIT09IHVuZGVmaW5lZCA/IHRva2VuLnRleHQgOiB0b2tlbi52YWx1ZTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxleGVyLmNvbnN0cnVjdG9yID09PSBTdHJlYW1MZXhlciA/IHRva2VuLnZhbHVlIDogdG9rZW47XG4gICAgICAgICAgICB2YXIgc2Nhbm5hYmxlID0gY29sdW1uLnNjYW5uYWJsZTtcbiAgICAgICAgICAgIGZvciAodmFyIHcgPSBzY2FubmFibGUubGVuZ3RoOyB3LS07ICkge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHNjYW5uYWJsZVt3XTtcbiAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGNvbnN1bWUgdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgLy8gZWl0aGVyIHJlZ2V4IG9yIGxpdGVyYWxcbiAgICAgICAgICAgICAgICBpZiAoZXhwZWN0LnRlc3QgPyBleHBlY3QudGVzdCh2YWx1ZSkgOlxuICAgICAgICAgICAgICAgICAgICBleHBlY3QudHlwZSA/IGV4cGVjdC50eXBlID09PSB0b2tlbi50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZXhwZWN0LmxpdGVyYWwgPT09IGxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGl0XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gc3RhdGUubmV4dFN0YXRlKHtkYXRhOiB2YWx1ZSwgdG9rZW46IHRva2VuLCBpc1Rva2VuOiB0cnVlLCByZWZlcmVuY2U6IG4gLSAxfSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4uc3RhdGVzLnB1c2gobmV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOZXh0LCBmb3IgZWFjaCBvZiB0aGUgcnVsZXMsIHdlIGVpdGhlclxuICAgICAgICAgICAgLy8gKGEpIGNvbXBsZXRlIGl0LCBhbmQgdHJ5IHRvIHNlZSBpZiB0aGUgcmVmZXJlbmNlIHJvdyBleHBlY3RlZCB0aGF0XG4gICAgICAgICAgICAvLyAgICAgcnVsZVxuICAgICAgICAgICAgLy8gKGIpIHByZWRpY3QgdGhlIG5leHQgbm9udGVybWluYWwgaXQgZXhwZWN0cyBieSBhZGRpbmcgdGhhdFxuICAgICAgICAgICAgLy8gICAgIG5vbnRlcm1pbmFsJ3Mgc3RhcnQgc3RhdGVcbiAgICAgICAgICAgIC8vIFRvIHByZXZlbnQgZHVwbGljYXRpb24sIHdlIGFsc28ga2VlcCB0cmFjayBvZiBydWxlcyB3ZSBoYXZlIGFscmVhZHlcbiAgICAgICAgICAgIC8vIGFkZGVkXG5cbiAgICAgICAgICAgIG5leHRDb2x1bW4ucHJvY2VzcygpO1xuXG4gICAgICAgICAgICAvLyBJZiBuZWVkZWQsIHRocm93IGFuIGVycm9yOlxuICAgICAgICAgICAgaWYgKG5leHRDb2x1bW4uc3RhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIE5vIHN0YXRlcyBhdCBhbGwhIFRoaXMgaXMgbm90IGdvb2QuXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcih0aGlzLnJlcG9ydEVycm9yKHRva2VuKSk7XG4gICAgICAgICAgICAgICAgZXJyLm9mZnNldCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICBlcnIudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1heWJlIHNhdmUgbGV4ZXIgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMua2VlcEhpc3RvcnkpIHtcbiAgICAgICAgICAgICAgY29sdW1uLmxleGVyU3RhdGUgPSBsZXhlci5zYXZlKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIHRoaXMubGV4ZXJTdGF0ZSA9IGxleGVyLnNhdmUoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5jcmVtZW50YWxseSBrZWVwIHRyYWNrIG9mIHJlc3VsdHNcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5maW5pc2goKTtcblxuICAgICAgICAvLyBBbGxvdyBjaGFpbmluZywgZm9yIHdoYXRldmVyIGl0J3Mgd29ydGhcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVwb3J0TGV4ZXJFcnJvciA9IGZ1bmN0aW9uKGxleGVyRXJyb3IpIHtcbiAgICAgICAgdmFyIHRva2VuRGlzcGxheSwgbGV4ZXJNZXNzYWdlO1xuICAgICAgICAvLyBQbGFubmluZyB0byBhZGQgYSB0b2tlbiBwcm9wZXJ0eSB0byBtb28ncyB0aHJvd24gZXJyb3JcbiAgICAgICAgLy8gZXZlbiBvbiBlcnJvcmluZyB0b2tlbnMgdG8gYmUgdXNlZCBpbiBlcnJvciBkaXNwbGF5IGJlbG93XG4gICAgICAgIHZhciB0b2tlbiA9IGxleGVyRXJyb3IudG9rZW47XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgdG9rZW5EaXNwbGF5ID0gXCJpbnB1dCBcIiArIEpTT04uc3RyaW5naWZ5KHRva2VuLnRleHRbMF0pICsgXCIgKGxleGVyIGVycm9yKVwiO1xuICAgICAgICAgICAgbGV4ZXJNZXNzYWdlID0gdGhpcy5sZXhlci5mb3JtYXRFcnJvcih0b2tlbiwgXCJTeW50YXggZXJyb3JcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbkRpc3BsYXkgPSBcImlucHV0IChsZXhlciBlcnJvcilcIjtcbiAgICAgICAgICAgIGxleGVyTWVzc2FnZSA9IGxleGVyRXJyb3IubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvcnRFcnJvckNvbW1vbihsZXhlck1lc3NhZ2UsIHRva2VuRGlzcGxheSk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVwb3J0RXJyb3IgPSBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICB2YXIgdG9rZW5EaXNwbGF5ID0gKHRva2VuLnR5cGUgPyB0b2tlbi50eXBlICsgXCIgdG9rZW46IFwiIDogXCJcIikgKyBKU09OLnN0cmluZ2lmeSh0b2tlbi52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdG9rZW4udmFsdWUgOiB0b2tlbik7XG4gICAgICAgIHZhciBsZXhlck1lc3NhZ2UgPSB0aGlzLmxleGVyLmZvcm1hdEVycm9yKHRva2VuLCBcIlN5bnRheCBlcnJvclwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3J0RXJyb3JDb21tb24obGV4ZXJNZXNzYWdlLCB0b2tlbkRpc3BsYXkpO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlcG9ydEVycm9yQ29tbW9uID0gZnVuY3Rpb24obGV4ZXJNZXNzYWdlLCB0b2tlbkRpc3BsYXkpIHtcbiAgICAgICAgdmFyIGxpbmVzID0gW107XG4gICAgICAgIGxpbmVzLnB1c2gobGV4ZXJNZXNzYWdlKTtcbiAgICAgICAgdmFyIGxhc3RDb2x1bW5JbmRleCA9IHRoaXMudGFibGUubGVuZ3RoIC0gMjtcbiAgICAgICAgdmFyIGxhc3RDb2x1bW4gPSB0aGlzLnRhYmxlW2xhc3RDb2x1bW5JbmRleF07XG4gICAgICAgIHZhciBleHBlY3RhbnRTdGF0ZXMgPSBsYXN0Q29sdW1uLnN0YXRlc1xuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U3ltYm9sID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRTeW1ib2wgJiYgdHlwZW9mIG5leHRTeW1ib2wgIT09IFwic3RyaW5nXCI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXhwZWN0YW50U3RhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnVW5leHBlY3RlZCAnICsgdG9rZW5EaXNwbGF5ICsgJy4gSSBkaWQgbm90IGV4cGVjdCBhbnkgbW9yZSBpbnB1dC4gSGVyZSBpcyB0aGUgc3RhdGUgb2YgbXkgcGFyc2UgdGFibGU6XFxuJyk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlTdGF0ZVN0YWNrKGxhc3RDb2x1bW4uc3RhdGVzLCBsaW5lcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKCdVbmV4cGVjdGVkICcgKyB0b2tlbkRpc3BsYXkgKyAnLiBJbnN0ZWFkLCBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxcbicpO1xuICAgICAgICAgICAgLy8gRGlzcGxheSBhIFwic3RhdGUgc3RhY2tcIiBmb3IgZWFjaCBleHBlY3RhbnQgc3RhdGVcbiAgICAgICAgICAgIC8vIC0gd2hpY2ggc2hvd3MgeW91IGhvdyB0aGlzIHN0YXRlIGNhbWUgdG8gYmUsIHN0ZXAgYnkgc3RlcC5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZGVyaXZhdGlvbiwgd2Ugb25seSBkaXNwbGF5IHRoZSBmaXJzdCBvbmUuXG4gICAgICAgICAgICB2YXIgc3RhdGVTdGFja3MgPSBleHBlY3RhbnRTdGF0ZXNcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkRmlyc3RTdGF0ZVN0YWNrKHN0YXRlLCBbXSkgfHwgW3N0YXRlXTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIC8vIERpc3BsYXkgZWFjaCBzdGF0ZSB0aGF0IGlzIGV4cGVjdGluZyBhIHRlcm1pbmFsIHN5bWJvbCBuZXh0LlxuICAgICAgICAgICAgc3RhdGVTdGFja3MuZm9yRWFjaChmdW5jdGlvbihzdGF0ZVN0YWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVTdGFja1swXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dFN5bWJvbCA9IHN0YXRlLnJ1bGUuc3ltYm9sc1tzdGF0ZS5kb3RdO1xuICAgICAgICAgICAgICAgIHZhciBzeW1ib2xEaXNwbGF5ID0gdGhpcy5nZXRTeW1ib2xEaXNwbGF5KG5leHRTeW1ib2wpO1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJ0EgJyArIHN5bWJvbERpc3BsYXkgKyAnIGJhc2VkIG9uOicpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVN0YXRlU3RhY2soc3RhdGVTdGFjaywgbGluZXMpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMucHVzaChcIlwiKTtcbiAgICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIFxuICAgIFBhcnNlci5wcm90b3R5cGUuZGlzcGxheVN0YXRlU3RhY2sgPSBmdW5jdGlvbihzdGF0ZVN0YWNrLCBsaW5lcykge1xuICAgICAgICB2YXIgbGFzdERpc3BsYXk7XG4gICAgICAgIHZhciBzYW1lRGlzcGxheUNvdW50ID0gMDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdGF0ZVN0YWNrLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZVN0YWNrW2pdO1xuICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBzdGF0ZS5ydWxlLnRvU3RyaW5nKHN0YXRlLmRvdCk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheSA9PT0gbGFzdERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICBzYW1lRGlzcGxheUNvdW50Kys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzYW1lRGlzcGxheUNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcgICAgXiAnICsgc2FtZURpc3BsYXlDb3VudCArICcgbW9yZSBsaW5lcyBpZGVudGljYWwgdG8gdGhpcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzYW1lRGlzcGxheUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcgICAgJyArIGRpc3BsYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdERpc3BsYXkgPSBkaXNwbGF5O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUuZ2V0U3ltYm9sRGlzcGxheSA9IGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgICAgICByZXR1cm4gZ2V0U3ltYm9sTG9uZ0Rpc3BsYXkoc3ltYm9sKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICBCdWlsZHMgYSB0aGUgZmlyc3Qgc3RhdGUgc3RhY2suIFlvdSBjYW4gdGhpbmsgb2YgYSBzdGF0ZSBzdGFjayBhcyB0aGUgY2FsbCBzdGFja1xuICAgIG9mIHRoZSByZWN1cnNpdmUtZGVzY2VudCBwYXJzZXIgd2hpY2ggdGhlIE5lYXJsZXkgcGFyc2UgYWxnb3JpdGhtIHNpbXVsYXRlcy5cbiAgICBBIHN0YXRlIHN0YWNrIGlzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIHN0YXRlIG9iamVjdHMuIFdpdGhpbiBhXG4gICAgc3RhdGUgc3RhY2ssIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBhcnJheSB3aWxsIGJlIHRoZSBzdGFydGluZ1xuICAgIHN0YXRlLCB3aXRoIGVhY2ggc3VjY2Vzc2l2ZSBpdGVtIGluIHRoZSBhcnJheSBnb2luZyBmdXJ0aGVyIGJhY2sgaW50byBoaXN0b3J5LlxuXG4gICAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBnaXZlbiBhIHN0YXJ0aW5nIHN0YXRlIGFuZCBhbiBlbXB0eSBhcnJheSByZXByZXNlbnRpbmdcbiAgICB0aGUgdmlzaXRlZCBzdGF0ZXMsIGFuZCBpdCByZXR1cm5zIGFuIHNpbmdsZSBzdGF0ZSBzdGFjay5cblxuICAgICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5idWlsZEZpcnN0U3RhdGVTdGFjayA9IGZ1bmN0aW9uKHN0YXRlLCB2aXNpdGVkKSB7XG4gICAgICAgIGlmICh2aXNpdGVkLmluZGV4T2Yoc3RhdGUpICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gRm91bmQgY3ljbGUsIHJldHVybiBudWxsXG4gICAgICAgICAgICAvLyB0byBlbGltaW5hdGUgdGhpcyBwYXRoIGZyb20gdGhlIHJlc3VsdHMsIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGtub3cgaG93IHRvIGRpc3BsYXkgaXQgbWVhbmluZ2Z1bGx5XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUud2FudGVkQnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3N0YXRlXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldlN0YXRlID0gc3RhdGUud2FudGVkQnlbMF07XG4gICAgICAgIHZhciBjaGlsZFZpc2l0ZWQgPSBbc3RhdGVdLmNvbmNhdCh2aXNpdGVkKTtcbiAgICAgICAgdmFyIGNoaWxkUmVzdWx0ID0gdGhpcy5idWlsZEZpcnN0U3RhdGVTdGFjayhwcmV2U3RhdGUsIGNoaWxkVmlzaXRlZCk7XG4gICAgICAgIGlmIChjaGlsZFJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtzdGF0ZV0uY29uY2F0KGNoaWxkUmVzdWx0KTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhYmxlW3RoaXMuY3VycmVudF07XG4gICAgICAgIGNvbHVtbi5sZXhlclN0YXRlID0gdGhpcy5sZXhlclN0YXRlO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbihjb2x1bW4pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY29sdW1uLmluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBpbmRleDtcbiAgICAgICAgdGhpcy50YWJsZVtpbmRleF0gPSBjb2x1bW47XG4gICAgICAgIHRoaXMudGFibGUuc3BsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMubGV4ZXJTdGF0ZSA9IGNvbHVtbi5sZXhlclN0YXRlO1xuXG4gICAgICAgIC8vIEluY3JlbWVudGFsbHkga2VlcCB0cmFjayBvZiByZXN1bHRzXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZmluaXNoKCk7XG4gICAgfTtcblxuICAgIC8vIG5iLiBkZXByZWNhdGVkOiB1c2Ugc2F2ZS9yZXN0b3JlIGluc3RlYWQhXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXdpbmQgPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5rZWVwSGlzdG9yeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXQgb3B0aW9uIGBrZWVwSGlzdG9yeWAgdG8gZW5hYmxlIHJld2luZGluZycpXG4gICAgICAgIH1cbiAgICAgICAgLy8gbmIuIHJlY2FsbCBjb2x1bW4gKHRhYmxlKSBpbmRpY2llcyBmYWxsIGJldHdlZW4gdG9rZW4gaW5kaWNpZXMuXG4gICAgICAgIC8vICAgICAgICBjb2wgMCAgIC0tICAgdG9rZW4gMCAgIC0tICAgY29sIDFcbiAgICAgICAgdGhpcy5yZXN0b3JlKHRoaXMudGFibGVbaW5kZXhdKTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwb3NzaWJsZSBwYXJzaW5nc1xuICAgICAgICB2YXIgY29uc2lkZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5ncmFtbWFyLnN0YXJ0O1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy50YWJsZVt0aGlzLnRhYmxlLmxlbmd0aCAtIDFdXG4gICAgICAgIGNvbHVtbi5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgaWYgKHQucnVsZS5uYW1lID09PSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAmJiB0LmRvdCA9PT0gdC5ydWxlLnN5bWJvbHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICYmIHQucmVmZXJlbmNlID09PSAwXG4gICAgICAgICAgICAgICAgICAgICYmIHQuZGF0YSAhPT0gUGFyc2VyLmZhaWwpIHtcbiAgICAgICAgICAgICAgICBjb25zaWRlcmF0aW9ucy5wdXNoKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnNpZGVyYXRpb25zLm1hcChmdW5jdGlvbihjKSB7cmV0dXJuIGMuZGF0YTsgfSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFN5bWJvbExvbmdEaXNwbGF5KHN5bWJvbCkge1xuICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBzeW1ib2w7XG4gICAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChzeW1ib2wubGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzeW1ib2wubGl0ZXJhbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnY2hhcmFjdGVyIG1hdGNoaW5nICcgKyBzeW1ib2w7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbC50eXBlICsgJyB0b2tlbic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2tlbiBtYXRjaGluZyAnICsgU3RyaW5nKHN5bWJvbC50ZXN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHN5bWJvbCB0eXBlOiAnICsgc3ltYm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN5bWJvbFNob3J0RGlzcGxheShzeW1ib2wpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygc3ltYm9sO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sLmxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3ltYm9sLmxpdGVyYWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICclJyArIHN5bWJvbC50eXBlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudGVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnPCcgKyBTdHJpbmcoc3ltYm9sLnRlc3QpICsgJz4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gc3ltYm9sIHR5cGU6ICcgKyBzeW1ib2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgUGFyc2VyOiBQYXJzZXIsXG4gICAgICAgIEdyYW1tYXI6IEdyYW1tYXIsXG4gICAgICAgIFJ1bGU6IFJ1bGUsXG4gICAgfTtcblxufSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG5lYXJsZXksIHZlcnNpb24gMi4yMC4xXG4vLyBodHRwOi8vZ2l0aHViLmNvbS9IYXJkbWF0aDEyMy9uZWFybGV5XG4vLyBCeXBhc3NlcyBUUzYxMzMuIEFsbG93IGRlY2xhcmVkIGJ1dCB1bnVzZWQgZnVuY3Rpb25zLlxuLy8gQHRzLWlnbm9yZVxuZnVuY3Rpb24gaWQoZCkgeyByZXR1cm4gZFswXTsgfVxuY29uc3QgZGVlcEZsYXR0ZW4gPSAoYXJyKSA9PiBbXS5jb25jYXQoLi4uYXJyLm1hcCgodikgPT4gKEFycmF5LmlzQXJyYXkodikgPyBkZWVwRmxhdHRlbih2KSA6IHYpKSk7XG5mdW5jdGlvbiBmbGF0X3N0cmluZyhkKSB7XG4gICAgaWYgKGQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZCkpXG4gICAgICAgICAgICByZXR1cm4gZGVlcEZsYXR0ZW4oZCkuam9pbihcIlwiKTtcbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuO1xuO1xuO1xuO1xuY29uc3QgZ3JhbW1hciA9IHtcbiAgICBMZXhlcjogdW5kZWZpbmVkLFxuICAgIFBhcnNlclJ1bGVzOiBbXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUmV2ZXJzZV9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUmV2ZXJzZV9wYXRoJHN0cmluZyQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgeyBcImxpdGVyYWxcIjogXCI+XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGQuam9pbignJykgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJSZXZlcnNlX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIlJldmVyc2VfcGF0aCRzdHJpbmckMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgL1twUF0vLCAvW29PXS8sIC9bc1NdLywgL1t0VF0vLCAvW21NXS8sIC9bYUFdLywgL1tzU10vLCAvW3RUXS8sIC9bZUVdLywgL1tyUl0vLCB7IFwibGl0ZXJhbFwiOiBcIkBcIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5qb2luKFwiXCIpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMSRzdWJleHByZXNzaW9uJDFcIiwgXCJEb21haW5cIiwgeyBcImxpdGVyYWxcIjogXCI+XCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgL1twUF0vLCAvW29PXS8sIC9bc1NdLywgL1t0VF0vLCAvW21NXS8sIC9bYUFdLywgL1tzU10vLCAvW3RUXS8sIC9bZUVdLywgL1tyUl0vLCB7IFwibGl0ZXJhbFwiOiBcIj5cIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5qb2luKFwiXCIpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUGF0aCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJBX2RfbFwiLCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlBhdGgkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJQYXRoJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlBhdGhcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjxcIiB9LCBcIlBhdGgkZWJuZiQxXCIsIFwiTWFpbGJveFwiLCB7IFwibGl0ZXJhbFwiOiBcIj5cIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFfZF9sJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIsXCIgfSwgXCJBdF9kb21haW5cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkFfZF9sJGVibmYkMVwiLCBcIkFfZF9sJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbFwiLCBcInN5bWJvbHNcIjogW1wiQXRfZG9tYWluXCIsIFwiQV9kX2wkZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRfZG9tYWluXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCJAXCIgfSwgXCJEb21haW5cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb21haW4kZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvbWFpbiRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIuXCIgfSwgXCJzdWJfZG9tYWluXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG9tYWluJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiRG9tYWluJGVibmYkMVwiLCBcIkRvbWFpbiRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG9tYWluXCIsIFwic3ltYm9sc1wiOiBbXCJzdWJfZG9tYWluXCIsIFwiRG9tYWluJGVibmYkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInN1Yl9kb21haW5cIiwgXCJzeW1ib2xzXCI6IFtcIlVfbGFiZWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMZXRfZGlnXCIsIFwic3ltYm9sc1wiOiBbXCJBTFBIQV9ESUdJVFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJMZGhfc3RyJGVibmYkMVwiLCBcIkFMUEhBX0RJR19EQVNIXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTGRoX3N0clwiLCBcInN5bWJvbHNcIjogW1wiTGRoX3N0ciRlYm5mJDFcIiwgXCJMZXRfZGlnXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9MZXRfZGlnXCIsIFwic3ltYm9sc1wiOiBbXCJBTFBIQV9ESUdJVF9VXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9MZGhfc3RyJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX0xkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJVX0xkaF9zdHIkZWJuZiQxXCIsIFwiQUxQSEFfRElHX0RBU0hfVVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfTGRoX3N0clwiLCBcInN5bWJvbHNcIjogW1wiVV9MZGhfc3RyJGVibmYkMVwiLCBcIlVfTGV0X2RpZ1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfbGFiZWwkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiVV9MZGhfc3RyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9sYWJlbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIlVfbGFiZWwkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfbGFiZWwkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9sYWJlbFwiLCBcInN5bWJvbHNcIjogW1wiVV9MZXRfZGlnXCIsIFwiVV9sYWJlbCRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJhZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImFkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiYWRkcmVzc19saXRlcmFsJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJhZGRyZXNzX2xpdGVyYWxcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIltcIiB9LCBcImFkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgeyBcImxpdGVyYWxcIjogXCJdXCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJub25fbG9jYWxfcGFydFwiLCBcInN5bWJvbHNcIjogW1wiRG9tYWluXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgRG9tYWluTmFtZTogZmxhdF9zdHJpbmcoZFswXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJub25fbG9jYWxfcGFydFwiLCBcInN5bWJvbHNcIjogW1wiYWRkcmVzc19saXRlcmFsXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgQWRkcmVzc0xpdGVyYWw6IGZsYXRfc3RyaW5nKGRbMF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTWFpbGJveFwiLCBcInN5bWJvbHNcIjogW1wiTG9jYWxfcGFydFwiLCB7IFwibGl0ZXJhbFwiOiBcIkBcIiB9LCBcIm5vbl9sb2NhbF9wYXJ0XCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbG9jYWxQYXJ0OiBmbGF0X3N0cmluZyhkWzBdKSwgZG9tYWluUGFydDogZmxhdF9zdHJpbmcoZFsyXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMb2NhbF9wYXJ0XCIsIFwic3ltYm9sc1wiOiBbXCJEb3Rfc3RyaW5nXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgRG90U3RyaW5nOiBmbGF0X3N0cmluZyhkWzBdKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxvY2FsX3BhcnRcIiwgXCJzeW1ib2xzXCI6IFtcIlF1b3RlZF9zdHJpbmdcIl0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBRdW90ZWRTdHJpbmc6IGZsYXRfc3RyaW5nKGRbMF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIuXCIgfSwgXCJBdG9tXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkRvdF9zdHJpbmckZWJuZiQxXCIsIFwiRG90X3N0cmluZyRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZ1wiLCBcInN5bWJvbHNcIjogW1wiQXRvbVwiLCBcIkRvdF9zdHJpbmckZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRvbSRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtWmEteiEjJCUmJyorXFwtLz0/Xl9ge3x9flxcdTAwODAtXFx1RkZGRi9dL10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBdG9tJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiQXRvbSRlYm5mJDFcIiwgL1swLTlBLVphLXohIyQlJicqK1xcLS89P15fYHt8fX5cXHUwMDgwLVxcdUZGRkYvXS9dLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRvbVwiLCBcInN5bWJvbHNcIjogW1wiQXRvbSRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiUXVvdGVkX3N0cmluZyRlYm5mJDFcIiwgXCJRY29udGVudFNNVFBcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nXCIsIFwic3ltYm9sc1wiOiBbXCJEUVVPVEVcIiwgXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcIkRRVU9URVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlFjb250ZW50U01UUFwiLCBcInN5bWJvbHNcIjogW1wicXRleHRTTVRQXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUWNvbnRlbnRTTVRQXCIsIFwic3ltYm9sc1wiOiBbXCJxdW90ZWRfcGFpclNNVFBcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJxdW90ZWRfcGFpclNNVFBcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIlxcXFxcIiB9LCAvW1xceDIwLVxceDdlXS9dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwicXRleHRTTVRQXCIsIFwic3ltYm9sc1wiOiBbL1tcXHgyMC1cXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2VcXHUwMDgwLVxcdUZGRkZdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiLlwiIH0sIFwiU251bVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMlwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWwkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbFwiLCBcInN5bWJvbHNcIjogW1wiU251bVwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbL1tpSV0vLCAvW3BQXS8sIC9bdlZdLywgeyBcImxpdGVyYWxcIjogXCI2XCIgfSwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQuam9pbihcIlwiKTsgfSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkcmVzc19saXRlcmFsXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2FkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJJUHY2X2FkZHJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcImRjb250ZW50XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWwkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbCRlYm5mJDFcIiwgXCJkY29udGVudFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkdlbmVyYWxfYWRkcmVzc19saXRlcmFsXCIsIFwic3ltYm9sc1wiOiBbXCJTdGFuZGFyZGl6ZWRfdGFnXCIsIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWwkZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU3RhbmRhcmRpemVkX3RhZ1wiLCBcInN5bWJvbHNcIjogW1wiTGRoX3N0clwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImRjb250ZW50XCIsIFwic3ltYm9sc1wiOiBbL1tcXHgyMS1cXHg1YVxceDVlLVxceDdlXS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogWy9bMS05XS8sIFwiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW0kc3ViZXhwcmVzc2lvbiQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIxXCIgfSwgXCJESUdJVFwiLCBcIkRJR0lUXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiU251bSRzdWJleHByZXNzaW9uJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtJHN1YmV4cHJlc3Npb24kM1wiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiMlwiIH0sIC9bMC00XS8sIFwiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kM1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW0kc3ViZXhwcmVzc2lvbiQ0XCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIyXCIgfSwgeyBcImxpdGVyYWxcIjogXCI1XCIgfSwgL1swLTVdL10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kNFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkclwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9mdWxsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2NvbXBcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2FkZHJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9mdWxsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJIRVhESUdcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDJcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDNcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDNcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2Z1bGxcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRzdHJpbmckMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkLmpvaW4oJycpIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9jb21wJGVibmYkMVwiLCBcIklQdjZfY29tcCRzdHJpbmckMVwiLCBcIklQdjZfY29tcCRlYm5mJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2Nl9oZXhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9mdWxsXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleFwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQxXCIsIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJHN0cmluZyQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGQuam9pbignJykgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiLCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcCRlYm5mJDFcIiwgXCJJUHY2djRfY29tcCRzdHJpbmckMVwiLCBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRElHSVRcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOV0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR0lUX1VcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtWmEtelxcdTAwODAtXFx1RkZGRl0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR0lUXCIsIFwic3ltYm9sc1wiOiBbL1swLTlBLVphLXpdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBTFBIQV9ESUdfREFTSFwiLCBcInN5bWJvbHNcIjogWy9bLTAtOUEtWmEtel0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR19EQVNIX1VcIiwgXCJzeW1ib2xzXCI6IFsvWy0wLTlBLVphLXpcXHUwMDgwLVxcdUZGRkZdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJIRVhESUdcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtRmEtZl0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRRVU9URVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiXFxcIlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH1cbiAgICBdLFxuICAgIFBhcnNlclN0YXJ0OiBcIlJldmVyc2VfcGF0aFwiLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdyYW1tYXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncmFtbWFyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbm9uaWNhbGl6ZSA9IGV4cG9ydHMuY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmcgPSBleHBvcnRzLm5vcm1hbGl6ZSA9IGV4cG9ydHMubm9ybWFsaXplX2RvdF9zdHJpbmcgPSBleHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuLy8gY29uc3QgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuY29uc3QgbmVhcmxleSA9IHJlcXVpcmUoXCJuZWFybGV5XCIpO1xuY29uc3QgZ3JhbW1hcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2dyYW1tYXJcIikpO1xuZ3JhbW1hcl8xLmRlZmF1bHQuUGFyc2VyU3RhcnQgPSBcIk1haWxib3hcIjtcbmNvbnN0IGdyYW1tYXIgPSBuZWFybGV5LkdyYW1tYXIuZnJvbUNvbXBpbGVkKGdyYW1tYXJfMS5kZWZhdWx0KTtcbi8vIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTMyMSNzZWN0aW9uLTQuMS4yPlxuZnVuY3Rpb24gcGFyc2UoYWRkcmVzcykge1xuICAgIC8vIEFuIGluc2FuZSBsZW5ndGgsIHRvIHByb3RlY3QgdGhlIHBhcnNpbmcgY29kZSBmcm9tIGh1Z2UgaW5wdXQuIFNNVFAgbGluZSBsaW1pdCwgbWludXMgY29tbWFuZCBzaXplLlxuICAgIGNvbnN0IGluc2FuZV9sZW5ndGggPSAxMDAwIC0gXCJNQUlMIEZST006PD5cXHJcXG5cIi5sZW5ndGg7XG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoID4gaW5zYW5lX2xlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRyZXNzIHRvbyBsb25nXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgbmVhcmxleS5QYXJzZXIoZ3JhbW1hcik7XG4gICAgcGFyc2VyLmZlZWQoYWRkcmVzcyk7XG4gICAgaWYgKHBhcnNlci5yZXN1bHRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRyZXNzIHBhcnNpbmcgZmFpbGVkOiBhbWJpZ3VvdXMgZ3JhbW1hclwiKTtcbiAgICB9XG4gICAgLy8gRG9tYWluIGNoZWNrc1xuICAgIGNvbnN0IGF0X2lkeCA9IGFkZHJlc3MubGFzdEluZGV4T2YoJ0AnKTsgLy8gbXVzdCBiZSBmb3VuZCwgc2luY2UgcGFyc2Ugd2FzIHN1Y2Nlc3NmdWxcbiAgICBjb25zdCBkb21haW4gPSBhZGRyZXNzLnN1YnN0cmluZyhhdF9pZHggKyAxKTtcbiAgICBpZiAoZG9tYWluWzBdICE9PSAnWycpIHsgLy8gTm90IGFuIGFkZHJlc3MgbGl0ZXJhbFxuICAgICAgICBpZiAoZG9tYWluLmxlbmd0aCA+IDI1Mykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIHRvbyBsb25nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGRvbWFpbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIG5vdCBmdWxseSBxdWFsaWZpZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhYmVsc1tsYWJlbHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9wIGxldmVsIGRvbWFpbiBsYWJlbCB0b28gc2hvcnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWxzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxhYmVsc1swXS5sZW5ndGggPiA2Mykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIGxhYmVsIHRvbyBsb25nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZXIucmVzdWx0c1swXTtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbi8qKiBTdHJpcCArc29tZXRoaW5nLCBzdHJpcCAnLidzLCBhbmQgbWFwIHRvIGxvd2VyIGNhc2UuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZV9kb3Rfc3RyaW5nKGRvdF9zdHJpbmcpIHtcbiAgICBjb25zdCB0YWdsZXNzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGx1c19sb2MgPSBkb3Rfc3RyaW5nLmluZGV4T2YoXCIrXCIpO1xuICAgICAgICBpZiAocGx1c19sb2MgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZG90X3N0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG90X3N0cmluZy5zdWJzdHIoMCwgcGx1c19sb2MpO1xuICAgIH0pKCk7XG4gICAgY29uc3QgZG90bGVzcyA9IHRhZ2xlc3MucmVwbGFjZSgvXFwuL2csIFwiXCIpO1xuICAgIHJldHVybiBkb3RsZXNzLnRvTG93ZXJDYXNlKCk7XG59XG5leHBvcnRzLm5vcm1hbGl6ZV9kb3Rfc3RyaW5nID0gbm9ybWFsaXplX2RvdF9zdHJpbmc7XG4vKiogVGhlIEcgc3R5bGUgYWRkcmVzcyBub3JtYWxpemF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYWRkcmVzcykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgYSA9IHBhcnNlKGFkZHJlc3MpO1xuICAgIGNvbnN0IGRvbWFpbiA9IChfYSA9IGEuZG9tYWluUGFydC5BZGRyZXNzTGl0ZXJhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYS5kb21haW5QYXJ0LkRvbWFpbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBsb2NhbCA9IChfYiA9IGEubG9jYWxQYXJ0LlF1b3RlZFN0cmluZykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbm9ybWFsaXplX2RvdF9zdHJpbmcoYS5sb2NhbFBhcnQuRG90U3RyaW5nKTtcbiAgICByZXR1cm4gYCR7bG9jYWx9QCR7ZG9tYWlufWA7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nKHF1b3RlZF9zdHJpbmcpIHtcbiAgICBjb25zdCB1bnF1b3RlZCA9IHF1b3RlZF9zdHJpbmcuc3Vic3RyKDEpLnN1YnN0cigwLCBxdW90ZWRfc3RyaW5nLmxlbmd0aCAtIDIpO1xuICAgIGNvbnN0IHVuZXNjYXBlZCA9IHVucXVvdGVkLnJlcGxhY2UoLyg/OlxcXFwoLikpL2csIFwiJDFcIik7XG4gICAgY29uc3QgcmVlc2NhcGVkID0gdW5lc2NhcGVkLnJlcGxhY2UoLyg/OihbXCJcXFxcXSkpL2csIFwiXFxcXCQxXCIpO1xuICAgIHJldHVybiBgXCIke3JlZXNjYXBlZH1cImA7IC8vIHJlLXF1b3RlXG59XG5leHBvcnRzLmNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nID0gY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmc7XG4vKipcbiAqIEFwcGx5IGEgY2Fub25pY2FsaXphdGlvbiBjb25zaXN0ZW50IHdpdGggc3RhbmRhcmRzIHRvIHN1cHBvcnRcbiAqIGNvbXBhcmlzb24gYXMgYSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZShhZGRyZXNzKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGEgPSBwYXJzZShhZGRyZXNzKTtcbiAgICBjb25zdCBkb21haW4gPSAoX2EgPSBhLmRvbWFpblBhcnQuQWRkcmVzc0xpdGVyYWwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGEuZG9tYWluUGFydC5Eb21haW5OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbG9jYWwgPSBhLmxvY2FsUGFydC5RdW90ZWRTdHJpbmdcbiAgICAgICAgPyBjYW5vbmljYWxpemVfcXVvdGVkX3N0cmluZyhhLmxvY2FsUGFydC5RdW90ZWRTdHJpbmcpXG4gICAgICAgIDogYS5sb2NhbFBhcnQuRG90U3RyaW5nO1xuICAgIHJldHVybiBgJHtsb2NhbH1AJHtkb21haW59YDtcbn1cbmV4cG9ydHMuY2Fub25pY2FsaXplID0gY2Fub25pY2FsaXplO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycikge1xuXHRpZiAodHlwZW9mIEFycmF5LmlzQXJyYXkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpO1xuXHR9XG5cblx0cmV0dXJuIHRvU3RyLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBpc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcblx0aWYgKCFvYmogfHwgdG9TdHIuY2FsbChvYmopICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHZhciBoYXNPd25Db25zdHJ1Y3RvciA9IGhhc093bi5jYWxsKG9iaiwgJ2NvbnN0cnVjdG9yJyk7XG5cdHZhciBoYXNJc1Byb3RvdHlwZU9mID0gb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2lzUHJvdG90eXBlT2YnKTtcblx0Ly8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdFxuXHRpZiAob2JqLmNvbnN0cnVjdG9yICYmICFoYXNPd25Db25zdHJ1Y3RvciAmJiAhaGFzSXNQcm90b3R5cGVPZikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLFxuXHQvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi5cblx0dmFyIGtleTtcblx0Zm9yIChrZXkgaW4gb2JqKSB7IC8qKi8gfVxuXG5cdHJldHVybiB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJyB8fCBoYXNPd24uY2FsbChvYmosIGtleSk7XG59O1xuXG4vLyBJZiBuYW1lIGlzICdfX3Byb3RvX18nLCBhbmQgT2JqZWN0LmRlZmluZVByb3BlcnR5IGlzIGF2YWlsYWJsZSwgZGVmaW5lIF9fcHJvdG9fXyBhcyBhbiBvd24gcHJvcGVydHkgb24gdGFyZ2V0XG52YXIgc2V0UHJvcGVydHkgPSBmdW5jdGlvbiBzZXRQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMpIHtcblx0aWYgKGRlZmluZVByb3BlcnR5ICYmIG9wdGlvbnMubmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMubmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBvcHRpb25zLm5ld1ZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR0YXJnZXRbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7XG5cdH1cbn07XG5cbi8vIFJldHVybiB1bmRlZmluZWQgaW5zdGVhZCBvZiBfX3Byb3RvX18gaWYgJ19fcHJvdG9fXycgaXMgbm90IGFuIG93biBwcm9wZXJ0eVxudmFyIGdldFByb3BlcnR5ID0gZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqLCBuYW1lKSB7XG5cdGlmIChuYW1lID09PSAnX19wcm90b19fJykge1xuXHRcdGlmICghaGFzT3duLmNhbGwob2JqLCBuYW1lKSkge1xuXHRcdFx0cmV0dXJuIHZvaWQgMDtcblx0XHR9IGVsc2UgaWYgKGdPUEQpIHtcblx0XHRcdC8vIEluIGVhcmx5IHZlcnNpb25zIG9mIG5vZGUsIG9ialsnX19wcm90b19fJ10gaXMgYnVnZ3kgd2hlbiBvYmogaGFzXG5cdFx0XHQvLyBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5LiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgd29ya3MuXG5cdFx0XHRyZXR1cm4gZ09QRChvYmosIG5hbWUpLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvYmpbbmFtZV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dGVuZCgpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lO1xuXHR2YXIgdGFyZ2V0ID0gYXJndW1lbnRzWzBdO1xuXHR2YXIgaSA9IDE7XG5cdHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHR2YXIgZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKHR5cGVvZiB0YXJnZXQgPT09ICdib29sZWFuJykge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuXHRcdC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHRpID0gMjtcblx0fVxuXHRpZiAodGFyZ2V0ID09IG51bGwgfHwgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnICYmIHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHRmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1tpXTtcblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yIChuYW1lIGluIG9wdGlvbnMpIHtcblx0XHRcdFx0c3JjID0gZ2V0UHJvcGVydHkodGFyZ2V0LCBuYW1lKTtcblx0XHRcdFx0Y29weSA9IGdldFByb3BlcnR5KG9wdGlvbnMsIG5hbWUpO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKHRhcmdldCAhPT0gY29weSkge1xuXHRcdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRcdGlmIChkZWVwICYmIGNvcHkgJiYgKGlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0gaXNBcnJheShjb3B5KSkpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29weUlzQXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNBcnJheShzcmMpID8gc3JjIDogW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBpc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGV4dGVuZChkZWVwLCBjbG9uZSwgY29weSkgfSk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY29weSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdHNldFByb3BlcnR5KHRhcmdldCwgeyBuYW1lOiBuYW1lLCBuZXdWYWx1ZTogY29weSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXh0ZW5kID0gcmVxdWlyZSgnZXh0ZW5kJyk7XG5cbnZhciBkYXRhID0ge1xuICBwZXJtYW5lbnQ6IHJlcXVpcmUoJy4vbGliL2lhbmEtcGVybWFuZW50Lmpzb24nKSxcbiAgcHJvdm9zaW9uYWw6IHJlcXVpcmUoJy4vbGliL2lhbmEtcHJvdmlzaW9uYWwuanNvbicpLFxuICBoaXN0b3JpY2FsOiByZXF1aXJlKCcuL2xpYi9pYW5hLWhpc3RvcmljYWwuanNvbicpXG59O1xuXG52YXIgYWxsQnlOYW1lID0ge307XG5cbk9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgZGF0YVt0eXBlXS5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlbWVPYmopIHtcbiAgICBhbGxCeU5hbWVbc2NoZW1lT2JqLnNjaGVtZV0gPSBleHRlbmQoc2NoZW1lT2JqLCB7IHR5cGU6IHR5cGUgfSk7XG4gIH0pO1xufSk7XG5cbmRhdGEudW5vZmZpY2lhbCA9IHJlcXVpcmUoJy4vbGliL3Vub2ZmaWNpYWwuanNvbicpLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICByZXR1cm4gIWFsbEJ5TmFtZVtpdGVtLnNjaGVtZV07XG59KTtcblxuZGF0YS51bm9mZmljaWFsLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZU9iaikge1xuICBhbGxCeU5hbWVbc2NoZW1lT2JqLnNjaGVtZV0gPSBleHRlbmQoc2NoZW1lT2JqLCB7IHR5cGU6ICd1bm9mZmljaWFsJyB9KTtcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kKGRhdGEsIHsgYWxsQnlOYW1lOiBhbGxCeU5hbWUgfSk7XG4iLAogICAgImNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3VyaS1qcycpO1xuY29uc3QgeyBhZGRyZXNzUGFyc2VyIH0gPSByZXF1aXJlKCdzbXRwLWFkZHJlc3MtcGFyc2VyJyk7XG5jb25zdCBzY2hlbWVzID0gcmVxdWlyZSgnc2NoZW1lcycpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShhZGRyZXNzKSB7XG4gIHRyeSB7XG4gICAgYWRkcmVzc1BhcnNlcihhZGRyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGlyaSA9IHBhcnNlKHZhbHVlKTtcbiAgaWYgKGlyaS5zY2hlbWUgPT09ICdtYWlsdG8nICYmIGlyaS50by5ldmVyeSh2YWxpZGF0ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXJpLnJlZmVyZW5jZSA9PT0gJ2Fic29sdXRlJyAmJiBzY2hlbWVzLmFsbEJ5TmFtZVtpcmkuc2NoZW1lXSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLAogICAgIi8vIFJlZ2V4IGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzIwNDQ4NDYvcmVnZXgtZm9yLWlzby04NjAxLWR1cmF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPVxuICAvXlAoPyEkKShcXGQrKD86XFwuXFxkKyk/WSk/KFxcZCsoPzpcXC5cXGQrKT9NKT8oXFxkKyg/OlxcLlxcZCspP1cpPyhcXGQrKD86XFwuXFxkKyk/RCk/KFQoPz1cXGQpKFxcZCsoPzpcXC5cXGQrKT9IKT8oXFxkKyg/OlxcLlxcZCspP00pPyhcXGQrKD86XFwuXFxkKyk/Uyk/KT8kLztcbiIsCiAgICAiY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgnc210cC1hZGRyZXNzLXBhcnNlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh2YWx1ZSkgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlKHZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwKICAgICJ2YXIgX19jcmVhdGU9T2JqZWN0LmNyZWF0ZTt2YXJ7Z2V0UHJvdG90eXBlT2Y6X19nZXRQcm90b09mLGRlZmluZVByb3BlcnR5Ol9fZGVmUHJvcCxnZXRPd25Qcm9wZXJ0eU5hbWVzOl9fZ2V0T3duUHJvcE5hbWVzfT1PYmplY3Q7dmFyIF9faGFzT3duUHJvcD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIF9fYWNjZXNzUHJvcChrZXkpe3JldHVybiB0aGlzW2tleV19dmFyIF9fcmVFeHBvcnQ9KHRhcmdldCxtb2Qsc2Vjb25kVGFyZ2V0KT0+e3ZhciBrZXlzPV9fZ2V0T3duUHJvcE5hbWVzKG1vZCk7Zm9yKGxldCBrZXkgb2Yga2V5cylpZighX19oYXNPd25Qcm9wLmNhbGwodGFyZ2V0LGtleSkmJmtleSE9PVwiZGVmYXVsdFwiKV9fZGVmUHJvcCh0YXJnZXQsa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pO2lmKHNlY29uZFRhcmdldCl7Zm9yKGxldCBrZXkgb2Yga2V5cylpZighX19oYXNPd25Qcm9wLmNhbGwoc2Vjb25kVGFyZ2V0LGtleSkmJmtleSE9PVwiZGVmYXVsdFwiKV9fZGVmUHJvcChzZWNvbmRUYXJnZXQsa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pO3JldHVybiBzZWNvbmRUYXJnZXR9fSxfX3RvRVNNQ2FjaGVfbm9kZSxfX3RvRVNNQ2FjaGVfZXNtLF9fdG9FU009KG1vZCxpc05vZGVNb2RlLHRhcmdldCk9Pnt2YXIgY2FuQ2FjaGU9bW9kIT1udWxsJiZ0eXBlb2YgbW9kPT09XCJvYmplY3RcIjtpZihjYW5DYWNoZSl7dmFyIGNhY2hlPWlzTm9kZU1vZGU/X190b0VTTUNhY2hlX25vZGU/Pz1uZXcgV2Vha01hcDpfX3RvRVNNQ2FjaGVfZXNtPz89bmV3IFdlYWtNYXAsY2FjaGVkPWNhY2hlLmdldChtb2QpO2lmKGNhY2hlZClyZXR1cm4gY2FjaGVkfXRhcmdldD1tb2QhPW51bGw/X19jcmVhdGUoX19nZXRQcm90b09mKG1vZCkpOnt9O2xldCB0bz1pc05vZGVNb2RlfHwhbW9kfHwhbW9kLl9fZXNNb2R1bGU/X19kZWZQcm9wKHRhcmdldCxcImRlZmF1bHRcIix7dmFsdWU6bW9kLGVudW1lcmFibGU6ITB9KTp0YXJnZXQ7Zm9yKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMobW9kKSlpZighX19oYXNPd25Qcm9wLmNhbGwodG8sa2V5KSlfX2RlZlByb3AodG8sa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pO2lmKGNhbkNhY2hlKWNhY2hlLnNldChtb2QsdG8pO3JldHVybiB0b307dmFyIF9fY29tbW9uSlM9KGNiLG1vZCk9PigpPT4obW9kfHxjYigobW9kPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxtb2QpLG1vZC5leHBvcnRzKTt2YXIgX19yZXR1cm5WYWx1ZT0odik9PnY7ZnVuY3Rpb24gX19leHBvcnRTZXR0ZXIobmFtZSxuZXdWYWx1ZSl7dGhpc1tuYW1lXT1fX3JldHVyblZhbHVlLmJpbmQobnVsbCxuZXdWYWx1ZSl9dmFyIF9fZXhwb3J0PSh0YXJnZXQsYWxsKT0+e2Zvcih2YXIgbmFtZSBpbiBhbGwpX19kZWZQcm9wKHRhcmdldCxuYW1lLHtnZXQ6YWxsW25hbWVdLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHNldDpfX2V4cG9ydFNldHRlci5iaW5kKGFsbCxuYW1lKX0pfTt2YXIgcmVxdWlyZV9wdW55Y29kZT1fX2NvbW1vbkpTKChleHBvcnRzLG1vZHVsZSk9Pnt2YXIgcmVnZXhQdW55Y29kZT0vXnhuLS0vLHJlZ2V4Tm9uQVNDSUk9L1teXFwwLVxceDdGXS8scmVnZXhTZXBhcmF0b3JzPS9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csZXJyb3JzPXtvdmVyZmxvdzpcIk92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzXCIsXCJub3QtYmFzaWNcIjpcIklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludClcIixcImludmFsaWQtaW5wdXRcIjpcIkludmFsaWQgaW5wdXRcIn0sZmxvb3I9TWF0aC5mbG9vcixzdHJpbmdGcm9tQ2hhckNvZGU9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlcnJvcih0eXBlKXt0aHJvdyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSl9ZnVuY3Rpb24gbWFwKGFycmF5LGNhbGxiYWNrKXtsZXQgcmVzdWx0PVtdLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pcmVzdWx0W2xlbmd0aF09Y2FsbGJhY2soYXJyYXlbbGVuZ3RoXSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBtYXBEb21haW4oZG9tYWluLGNhbGxiYWNrKXtsZXQgcGFydHM9ZG9tYWluLnNwbGl0KFwiQFwiKSxyZXN1bHQ9XCJcIjtpZihwYXJ0cy5sZW5ndGg+MSlyZXN1bHQ9cGFydHNbMF0rXCJAXCIsZG9tYWluPXBhcnRzWzFdO2RvbWFpbj1kb21haW4ucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsXCIuXCIpO2xldCBsYWJlbHM9ZG9tYWluLnNwbGl0KFwiLlwiKSxlbmNvZGVkPW1hcChsYWJlbHMsY2FsbGJhY2spLmpvaW4oXCIuXCIpO3JldHVybiByZXN1bHQrZW5jb2RlZH1mdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZyl7bGV0IG91dHB1dD1bXSxjb3VudGVyPTAsbGVuZ3RoPXN0cmluZy5sZW5ndGg7d2hpbGUoY291bnRlcjxsZW5ndGgpe2xldCB2YWx1ZT1zdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO2lmKHZhbHVlPj01NTI5NiYmdmFsdWU8PTU2MzE5JiZjb3VudGVyPGxlbmd0aCl7bGV0IGV4dHJhPXN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7aWYoKGV4dHJhJjY0NTEyKT09NTYzMjApb3V0cHV0LnB1c2goKCh2YWx1ZSYxMDIzKTw8MTApKyhleHRyYSYxMDIzKSs2NTUzNik7ZWxzZSBvdXRwdXQucHVzaCh2YWx1ZSksY291bnRlci0tfWVsc2Ugb3V0cHV0LnB1c2godmFsdWUpfXJldHVybiBvdXRwdXR9dmFyIHVjczJlbmNvZGU9KGNvZGVQb2ludHMpPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKSxiYXNpY1RvRGlnaXQ9ZnVuY3Rpb24oY29kZVBvaW50KXtpZihjb2RlUG9pbnQ+PTQ4JiZjb2RlUG9pbnQ8NTgpcmV0dXJuIDI2Kyhjb2RlUG9pbnQtNDgpO2lmKGNvZGVQb2ludD49NjUmJmNvZGVQb2ludDw5MSlyZXR1cm4gY29kZVBvaW50LTY1O2lmKGNvZGVQb2ludD49OTcmJmNvZGVQb2ludDwxMjMpcmV0dXJuIGNvZGVQb2ludC05NztyZXR1cm4gMzZ9LGRpZ2l0VG9CYXNpYz1mdW5jdGlvbihkaWdpdCxmbGFnKXtyZXR1cm4gZGlnaXQrMjIrNzUqKGRpZ2l0PDI2KS0oKGZsYWchPTApPDw1KX0sYWRhcHQ9ZnVuY3Rpb24oZGVsdGEsbnVtUG9pbnRzLGZpcnN0VGltZSl7bGV0IGs9MDtkZWx0YT1maXJzdFRpbWU/Zmxvb3IoZGVsdGEvNzAwKTpkZWx0YT4+MSxkZWx0YSs9Zmxvb3IoZGVsdGEvbnVtUG9pbnRzKTtmb3IoO2RlbHRhPjQ1NTtrKz0zNilkZWx0YT1mbG9vcihkZWx0YS8zNSk7cmV0dXJuIGZsb29yKGsrMzYqZGVsdGEvKGRlbHRhKzM4KSl9LGRlY29kZT1mdW5jdGlvbihpbnB1dCl7bGV0IG91dHB1dD1bXSxpbnB1dExlbmd0aD1pbnB1dC5sZW5ndGgsaT0wLG49MTI4LGJpYXM9NzIsYmFzaWM9aW5wdXQubGFzdEluZGV4T2YoXCItXCIpO2lmKGJhc2ljPDApYmFzaWM9MDtmb3IobGV0IGo9MDtqPGJhc2ljOysrail7aWYoaW5wdXQuY2hhckNvZGVBdChqKT49MTI4KWVycm9yKFwibm90LWJhc2ljXCIpO291dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpfWZvcihsZXQgaW5kZXg9YmFzaWM+MD9iYXNpYysxOjA7aW5kZXg8aW5wdXRMZW5ndGg7KXtsZXQgb2xkaT1pO2ZvcihsZXQgdz0xLGs9MzY7O2srPTM2KXtpZihpbmRleD49aW5wdXRMZW5ndGgpZXJyb3IoXCJpbnZhbGlkLWlucHV0XCIpO2xldCBkaWdpdD1iYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7aWYoZGlnaXQ+PTM2KWVycm9yKFwiaW52YWxpZC1pbnB1dFwiKTtpZihkaWdpdD5mbG9vcigoMjE0NzQ4MzY0Ny1pKS93KSllcnJvcihcIm92ZXJmbG93XCIpO2krPWRpZ2l0Knc7bGV0IHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzO2lmKGRpZ2l0PHQpYnJlYWs7bGV0IGJhc2VNaW51c1Q9MzYtdDtpZih3PmZsb29yKDIxNDc0ODM2NDcvYmFzZU1pbnVzVCkpZXJyb3IoXCJvdmVyZmxvd1wiKTt3Kj1iYXNlTWludXNUfWxldCBvdXQ9b3V0cHV0Lmxlbmd0aCsxO2lmKGJpYXM9YWRhcHQoaS1vbGRpLG91dCxvbGRpPT0wKSxmbG9vcihpL291dCk+MjE0NzQ4MzY0Ny1uKWVycm9yKFwib3ZlcmZsb3dcIik7bis9Zmxvb3IoaS9vdXQpLGklPW91dCxvdXRwdXQuc3BsaWNlKGkrKywwLG4pfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5vdXRwdXQpfSxlbmNvZGU9ZnVuY3Rpb24oaW5wdXQpe2xldCBvdXRwdXQ9W107aW5wdXQ9dWNzMmRlY29kZShpbnB1dCk7bGV0IGlucHV0TGVuZ3RoPWlucHV0Lmxlbmd0aCxuPTEyOCxkZWx0YT0wLGJpYXM9NzI7Zm9yKGxldCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpaWYoY3VycmVudFZhbHVlPDEyOClvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7bGV0IGJhc2ljTGVuZ3RoPW91dHB1dC5sZW5ndGgsaGFuZGxlZENQQ291bnQ9YmFzaWNMZW5ndGg7aWYoYmFzaWNMZW5ndGgpb3V0cHV0LnB1c2goXCItXCIpO3doaWxlKGhhbmRsZWRDUENvdW50PGlucHV0TGVuZ3RoKXtsZXQgbT0yMTQ3NDgzNjQ3O2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KWlmKGN1cnJlbnRWYWx1ZT49biYmY3VycmVudFZhbHVlPG0pbT1jdXJyZW50VmFsdWU7bGV0IGhhbmRsZWRDUENvdW50UGx1c09uZT1oYW5kbGVkQ1BDb3VudCsxO2lmKG0tbj5mbG9vcigoMjE0NzQ4MzY0Ny1kZWx0YSkvaGFuZGxlZENQQ291bnRQbHVzT25lKSllcnJvcihcIm92ZXJmbG93XCIpO2RlbHRhKz0obS1uKSpoYW5kbGVkQ1BDb3VudFBsdXNPbmUsbj1tO2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KXtpZihjdXJyZW50VmFsdWU8biYmKytkZWx0YT4yMTQ3NDgzNjQ3KWVycm9yKFwib3ZlcmZsb3dcIik7aWYoY3VycmVudFZhbHVlPT09bil7bGV0IHE9ZGVsdGE7Zm9yKGxldCBrPTM2OztrKz0zNil7bGV0IHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzO2lmKHE8dClicmVhaztsZXQgcU1pbnVzVD1xLXQsYmFzZU1pbnVzVD0zNi10O291dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCtxTWludXNUJWJhc2VNaW51c1QsMCkpKSxxPWZsb29yKHFNaW51c1QvYmFzZU1pbnVzVCl9b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLDApKSksYmlhcz1hZGFwdChkZWx0YSxoYW5kbGVkQ1BDb3VudFBsdXNPbmUsaGFuZGxlZENQQ291bnQ9PT1iYXNpY0xlbmd0aCksZGVsdGE9MCwrK2hhbmRsZWRDUENvdW50fX0rK2RlbHRhLCsrbn1yZXR1cm4gb3V0cHV0LmpvaW4oXCJcIil9LHRvVW5pY29kZT1mdW5jdGlvbihpbnB1dCl7cmV0dXJuIG1hcERvbWFpbihpbnB1dCxmdW5jdGlvbihzdHJpbmcpe3JldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKT9kZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOnN0cmluZ30pfSx0b0FTQ0lJPWZ1bmN0aW9uKGlucHV0KXtyZXR1cm4gbWFwRG9tYWluKGlucHV0LGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpP1wieG4tLVwiK2VuY29kZShzdHJpbmcpOnN0cmluZ30pfSxwdW55Y29kZT17dmVyc2lvbjpcIjIuMy4xXCIsdWNzMjp7ZGVjb2RlOnVjczJkZWNvZGUsZW5jb2RlOnVjczJlbmNvZGV9LGRlY29kZSxlbmNvZGUsdG9BU0NJSSx0b1VuaWNvZGV9O21vZHVsZS5leHBvcnRzPXB1bnljb2RlfSk7dmFyIGV4cG9ydHNfcHVueWNvZGU9e307X19leHBvcnQoZXhwb3J0c19wdW55Y29kZSx7ZGVmYXVsdDooKT0+aW1wb3J0X3B1bnljb2RlLmRlZmF1bHR9KTtfX3JlRXhwb3J0KGV4cG9ydHNfcHVueWNvZGUsX190b0VTTShyZXF1aXJlX3B1bnljb2RlKCksMSkpO3ZhciBpbXBvcnRfcHVueWNvZGU9X190b0VTTShyZXF1aXJlX3B1bnljb2RlKCksMSk7dmFyIGV4cG9ydF9kZWZhdWx0PWltcG9ydF9wdW55Y29kZS5kZWZhdWx0O2V4cG9ydHtleHBvcnRfZGVmYXVsdCBhcyBkZWZhdWx0fTsiLAogICAgImNvbnN0IHsgdG9BU0NJSSB9ID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuY29uc3QgaG9zdG5hbWVSZWdleCA9XG4gIC9eKD89LnsxLDI1M31cXC4/JClbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlxcLj8kL2k7XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGhvc3RuYW1lID0gdG9BU0NJSSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgaG9zdG5hbWUucmVwbGFjZSgvXFwuJC8sICcnKS5sZW5ndGggPD0gMjUzICYmIGhvc3RuYW1lUmVnZXgudGVzdChob3N0bmFtZSlcbiAgKTtcbn07XG4iLAogICAgImNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3VyaS1qcycpO1xuY29uc3QgeyBhZGRyZXNzUGFyc2VyIH0gPSByZXF1aXJlKCdzbXRwLWFkZHJlc3MtcGFyc2VyJyk7XG5jb25zdCBzY2hlbWVzID0gcmVxdWlyZSgnc2NoZW1lcycpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShhZGRyZXNzKSB7XG4gIHRyeSB7XG4gICAgYWRkcmVzc1BhcnNlcihhZGRyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGlyaSA9IHBhcnNlKHZhbHVlKTtcbiAgLy8gQWxsIHZhbGlkIElSSXMgYXJlIHZhbGlkIElSSS1yZWZlcmVuY2VzXG4gIGlmIChpcmkuc2NoZW1lID09PSAnbWFpbHRvJyAmJiBpcmkudG8uZXZlcnkodmFsaWRhdGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgaXJpLnJlZmVyZW5jZSA9PT0gJ2Fic29sdXRlJyAmJlxuICAgIGlyaS5wYXRoICE9PSB1bmRlZmluZWQgJiZcbiAgICBzY2hlbWVzLmFsbEJ5TmFtZVtpcmkuc2NoZW1lXVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciB2YWxpZCBJUkktcmVmZXJlbmNlXG5cbiAgLy8gSWYgdGhlcmUgaXMgYSBzY2hlbWUsIGl0IG11c3QgYmUgdmFsaWRcbiAgaWYgKGlyaS5zY2hlbWUgJiYgIXNjaGVtZXMuYWxsQnlOYW1lW2lyaS5zY2hlbWVdKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlcmUncyBhIHBhdGggYW5kIGZvciBhIHByb3BlciB0eXBlIG9mIHJlZmVyZW5jZVxuICByZXR1cm4gKFxuICAgIGlyaS5wYXRoICE9PSB1bmRlZmluZWQgJiZcbiAgICAoaXJpLnJlZmVyZW5jZSA9PT0gJ3JlbGF0aXZlJyB8fFxuICAgICAgaXJpLnJlZmVyZW5jZSA9PT0gJ3NhbWUtZG9jdW1lbnQnIHx8XG4gICAgICBpcmkucmVmZXJlbmNlID09PSAndXJpJylcbiAgKTtcbn07XG4iLAogICAgIm1vZHVsZS5leHBvcnRzLmlyaSA9IHJlcXVpcmUoJy4vaXJpJyk7XG5tb2R1bGUuZXhwb3J0cy5kdXJhdGlvbiA9IHJlcXVpcmUoJy4vZHVyYXRpb24nKTtcbm1vZHVsZS5leHBvcnRzWydpZG4tZW1haWwnXSA9IHJlcXVpcmUoJy4vaWRuLWVtYWlsJyk7XG5tb2R1bGUuZXhwb3J0c1snaWRuLWhvc3RuYW1lJ10gPSByZXF1aXJlKCcuL2lkbi1ob3N0bmFtZScpO1xubW9kdWxlLmV4cG9ydHNbJ2lyaS1yZWZlcmVuY2UnXSA9IHJlcXVpcmUoJy4vaXJpLXJlZmVyZW5jZScpO1xuIiwKICAgICJjb25zdCBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKGFqdiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGFsbEZvcm1hdHMgPSBPYmplY3Qua2V5cyhmb3JtYXRzKTtcbiAgbGV0IGZvcm1hdHNUb0luc3RhbGwgPSBhbGxGb3JtYXRzO1xuXG4gIGlmIChvcHRpb25zLmZvcm1hdHMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5mb3JtYXRzKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5mb3JtYXRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICBmb3JtYXRzVG9JbnN0YWxsID0gb3B0aW9ucy5mb3JtYXRzO1xuICB9XG5cbiAgYWxsRm9ybWF0c1xuICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4gZm9ybWF0c1RvSW5zdGFsbC5pbmNsdWRlcyhmb3JtYXQpKVxuICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGFqdi5hZGRGb3JtYXQoa2V5LCBmb3JtYXRzW2tleV0pO1xuICAgIH0pO1xuXG4gIHJldHVybiBhanY7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQWN0aXZpdHlTdHJlYW0sIEpzb25MZENvbnRleHQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vKipcbiAqIENhbm9uaWNhbCBBUzIgYmFzZSB2b2NhYnVsYXJ5IFVSTC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTMl9CQVNFX0NPTlRFWFRfVVJMID0gXCJodHRwczovL3d3dy53My5vcmcvbnMvYWN0aXZpdHlzdHJlYW1zXCI7XG5cbi8qKlxuICogU29ja2V0aHViIGJhc2Ugdm9jYWJ1bGFyeSBVUkwgZm9yIHNoYXJlZCBwbGF0Zm9ybSB0ZXJtcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMID1cbiAgICBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9ucy9jb250ZXh0L3YxLmpzb25sZFwiO1xuXG4vKipcbiAqIFVSTCBwcmVmaXggZm9yIHBlci1wbGF0Zm9ybSBjb250ZXh0IFVSTHMuXG4gKi9cbmV4cG9ydCBjb25zdCBQTEFURk9STV9DT05URVhUX1BSRUZJWCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9cIjtcblxuLyoqXG4gKiBCdWlsdC1pbiBwc2V1ZG8tcGxhdGZvcm0gdXNlZCBmb3Igc2VydmVyLXNpZGUgZXJyb3IgcGF5bG9hZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFUlJPUl9QTEFURk9STV9JRCA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBFUlJPUl9QTEFURk9STV9DT05URVhUX1VSTCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9lcnJvci92MS5qc29ubGRcIjtcblxuLyoqXG4gKiBCdWlsdC1pbiBwc2V1ZG8tcGxhdGZvcm0gdXNlZCBmb3IgaW50ZXJuYWwgY29udHJvbCBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1BMQVRGT1JNX0lEID0gXCJzb2NrZXRodWI6aW50ZXJuYWxcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9QTEFURk9STV9DT05URVhUX1VSTCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9zb2NrZXRodWI6aW50ZXJuYWwvdjEuanNvbmxkXCI7XG5cbmNvbnN0IHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5jb25zdCBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbmNvbnN0IHBsYXRmb3JtQ29udGV4dFRvQ3JlZGVudGlhbHNTY2hlbWFJZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbi8qKlxuICogQnVpbGQgdGhlIGNhbm9uaWNhbCBTb2NrZXRodWIgQGNvbnRleHQgYXJyYXkgZnJvbSBhIHBsYXRmb3JtIGlkIG9yIGZ1bGwgY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENhbm9uaWNhbENvbnRleHQocGxhdGZvcm06IHN0cmluZyk6IEpzb25MZENvbnRleHQge1xuICAgIGNvbnN0IHBsYXRmb3JtVXJsID0gcGxhdGZvcm0uc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpXG4gICAgICAgID8gcGxhdGZvcm1cbiAgICAgICAgOiBgJHtQTEFURk9STV9DT05URVhUX1BSRUZJWH0ke3BsYXRmb3JtfS92MS5qc29ubGRgO1xuICAgIHJldHVybiBbQVMyX0JBU0VfQ09OVEVYVF9VUkwsIFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLCBwbGF0Zm9ybVVybF07XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgcGxhdGZvcm0gSUQgZnJvbSBhIGNhbm9uaWNhbCBAY29udGV4dCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYXRmb3JtSWRGcm9tQ29udGV4dChcbiAgICBjb250ZXh0OiBzdHJpbmdbXSB8IHVua25vd24sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBlbnRyeS5zdGFydHNXaXRoKFBMQVRGT1JNX0NPTlRFWFRfUFJFRklYKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBlbnRyeS5zbGljZShQTEFURk9STV9DT05URVhUX1BSRUZJWC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3Qgc2xhc2hJZHggPSByZXN0LmluZGV4T2YoXCIvXCIpO1xuICAgICAgICAgICAgaWYgKHNsYXNoSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN0LnNsaWNlKDAsIHNsYXNoSWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB1bmtub3duIEBjb250ZXh0IGlucHV0IGludG8gYSBzdHJpbmctb25seSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29udGV4dEFycmF5KHZhbHVlOiB1bmtub3duKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgc3RyaW5nID0+IHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIik7XG59XG5cbi8qKlxuICogR2V0IGEgbm9ybWFsaXplZCBAY29udGV4dCBhcnJheSBmcm9tIGFuIGFjdGl2aXR5IHN0cmVhbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHRBcnJheShtc2c6IEFjdGl2aXR5U3RyZWFtKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvbnRleHRBcnJheShtc2dbXCJAY29udGV4dFwiXSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBwbGF0Zm9ybSBjb250ZXh0IFVSTCBhbmQgaXRzIHNjaGVtYSBJRHMgZm9yIHJ1bnRpbWUgcmVzb2x1dGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbiAgICBzY2hlbWFJZDogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzU2NoZW1hSWQ6IHN0cmluZyxcbikge1xuICAgIHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZC5zZXQocGxhdGZvcm1Db250ZXh0VXJsLCBwbGF0Zm9ybUlkKTtcbiAgICBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkLnNldChwbGF0Zm9ybUNvbnRleHRVcmwsIHNjaGVtYUlkKTtcbiAgICBwbGF0Zm9ybUNvbnRleHRUb0NyZWRlbnRpYWxzU2NoZW1hSWQuc2V0KFxuICAgICAgICBwbGF0Zm9ybUNvbnRleHRVcmwsXG4gICAgICAgIGNyZWRlbnRpYWxzU2NoZW1hSWQsXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBzaW5nbGUgcmVnaXN0ZXJlZCBwbGF0Zm9ybSBjb250ZXh0IFVSTCBmcm9tIGEgbWVzc2FnZS5cbiAqIFJldHVybnMgbnVsbCB3aGVuIHRoZXJlIGFyZSB6ZXJvIG9yIG11bHRpcGxlIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKG1zZzogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IGdldENvbnRleHRBcnJheShtc2cpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZXh0cy5maWx0ZXIoKGNvbnRleHRVcmwpID0+XG4gICAgICAgIHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZC5oYXMoY29udGV4dFVybCksXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzWzBdO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwbGF0Zm9ybSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0VG9QbGF0Zm9ybUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBtZXNzYWdlIHNjaGVtYSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZEJ5Q29udGV4dFVybChcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dFRvU2NoZW1hSWQuZ2V0KHBsYXRmb3JtQ29udGV4dFVybCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNyZWRlbnRpYWxzIHNjaGVtYSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVkZW50aWFsc1NjaGVtYUlkQnlDb250ZXh0VXJsKFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0VG9DcmVkZW50aWFsc1NjaGVtYUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuIiwKICAgICIvLyBUaGUgc2hhcmVkIGFjdG9yL3RhcmdldCBlbnRpdHkgdm9jYWJ1bGFyeS4gQ29udGVudCBvYmplY3QgdHlwZXMgKG1lc3NhZ2UsXG4vLyBwcmVzZW5jZSwgYXR0ZW5kYW5jZSwgcm9vbS1pbmZvLCB0b3BpYywg4oCmKSBhcmUgb3duZWQgYnkgZWFjaCBwbGF0Zm9ybSdzXG4vLyBgbWVzc2FnZXNgIChpbmJvdW5kKSBhbmQgYHJlc3BvbnNlc2AgKG91dGJvdW5kKSBzY2hlbWFzOyB0aGUgYmFzZSBlbnZlbG9wZSBub1xuLy8gbG9uZ2VyIGVudW1lcmF0ZXMgYSBnbG9iYWwgb2JqZWN0IHZvY2FidWxhcnkuXG5leHBvcnQgY29uc3QgT2JqZWN0VHlwZXNTY2hlbWEgPSB7XG4gICAgZmVlZDoge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcImZlZWRcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJpcmlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0aG9yOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYXZpY29uOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHBlcnNvbjoge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJwZXJzb25cIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICByb29tOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInJvb21cIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBzZXJ2aWNlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInNlcnZpY2VcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBwbGF0Zm9ybToge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJwbGF0Zm9ybVwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHdlYnNpdGU6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXJpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcIndlYnNpdGVcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhZGRyZXNzOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJhZGRyZXNzXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuLy8gSW50ZXJuYWwgQVMgb2JqZWN0IHR5cGVzIHJlc2VydmVkIGZvciBTb2NrZXRodWIgSVBDL2hvdXNla2VlcGluZy5cbmV4cG9ydCBjb25zdCBJbnRlcm5hbE9iamVjdFR5cGVzTGlzdCA9IFtcInBsYXRmb3JtXCIsIFwiaGVhcnRiZWF0XCJdO1xuZXhwb3J0IGNvbnN0IE9iamVjdFR5cGVzTGlzdCA9IE9iamVjdC5rZXlzKE9iamVjdFR5cGVzU2NoZW1hKTtcbmV4cG9ydCBjb25zdCBBY3RvclR5cGVzTGlzdCA9IFtcbiAgICBcInBlcnNvblwiLFxuICAgIFwicm9vbVwiLFxuICAgIFwic2VydmljZVwiLFxuICAgIFwiZmVlZFwiLFxuICAgIFwid2Vic2l0ZVwiLFxuICAgIFwicGxhdGZvcm1cIixcbl07XG5leHBvcnQgY29uc3QgVGFyZ2V0VHlwZXNMaXN0ID0gW1xuICAgIFwicGVyc29uXCIsXG4gICAgXCJyb29tXCIsXG4gICAgXCJzZXJ2aWNlXCIsXG4gICAgXCJmZWVkXCIsXG4gICAgXCJ3ZWJzaXRlXCIsXG4gICAgXCJwbGF0Zm9ybVwiLFxuICAgIFwiYWRkcmVzc1wiLFxuXTtcbmV4cG9ydCBjb25zdCB2YWxpZEFjdG9yUmVmcyA9IEFjdG9yVHlwZXNMaXN0Lm1hcCgodHlwZSkgPT4gKHtcbiAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy90eXBlLyR7dHlwZX1gLFxufSkpO1xuZXhwb3J0IGNvbnN0IHZhbGlkVGFyZ2V0UmVmcyA9IFRhcmdldFR5cGVzTGlzdC5tYXAoKHR5cGUpID0+ICh7XG4gICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvdHlwZS8ke3R5cGV9YCxcbn0pKTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgICBBUzJfQkFTRV9DT05URVhUX1VSTCxcbiAgICBTT0NLRVRIVUJfQkFTRV9DT05URVhUX1VSTCxcbn0gZnJvbSBcIi4uL2NvbnRleHQuanNcIjtcbmltcG9ydCB7XG4gICAgT2JqZWN0VHlwZXNTY2hlbWEsXG4gICAgdmFsaWRBY3RvclJlZnMsXG4gICAgdmFsaWRUYXJnZXRSZWZzLFxufSBmcm9tIFwiLi4vaGVscGVycy9vYmplY3RzLmpzXCI7XG5cbmNvbnN0IGNvbnRleHRTY2hlbWEgPSB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1pbkl0ZW1zOiAzLFxuICAgIG1heEl0ZW1zOiAzLFxuICAgIGl0ZW1zOiB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBhbGxPZjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluczoge1xuICAgICAgICAgICAgICAgIGNvbnN0OiBBUzJfQkFTRV9DT05URVhUX1VSTCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5zOiB7XG4gICAgICAgICAgICAgICAgY29uc3Q6IFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdLFxufTtcbmNvbnN0IHR5cGVTY2hlbWEgPSB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbn07XG5cbmV4cG9ydCBjb25zdCBBY3Rpdml0eVN0cmVhbVNjaGVtYSA9IHtcbiAgICAkaWQ6IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdi9hY3Rpdml0eS1zdHJlYW0uanNvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNjaGVtYSBmb3IgU29ja2V0aHViIEFjdGl2aXR5IFN0cmVhbXNcIixcblxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgcmVxdWlyZWQ6IFtcIkBjb250ZXh0XCIsIFwidHlwZVwiLCBcImFjdG9yXCJdLFxuICAgIC8vIFJlamVjdCB1bmtub3duIHRvcC1sZXZlbCBtZXNzYWdlIHByb3BlcnRpZXMuIEluYm91bmQgbWVzc2FnZXMgY2Fycnkgb25seVxuICAgIC8vIHRoZSBwcm9wZXJ0aWVzIGJlbG93OyBgZXJyb3JgL2BzZXNzaW9uU2VjcmV0YCBhcmUgYWRkZWQgc2VydmVyLXNpZGUgYWZ0ZXJcbiAgICAvLyB2YWxpZGF0aW9uLCBzbyB0aGV5IG5ldmVyIHJlYWNoIHRoaXMgc2NoZW1hLlxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFwiQGNvbnRleHRcIjogY29udGV4dFNjaGVtYSxcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHR5cGVTY2hlbWEsXG4gICAgICAgIGFjdG9yOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgb25lT2Y6IHZhbGlkQWN0b3JSZWZzLFxuICAgICAgICB9LFxuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBvbmVPZjogdmFsaWRUYXJnZXRSZWZzLFxuICAgICAgICB9LFxuICAgICAgICAvLyBPYmplY3Qgc2hhcGUgaXMgdmFsaWRhdGVkIHBlci1wbGF0Zm9ybSBieSBlYWNoIHBsYXRmb3JtJ3MgYG1lc3NhZ2VzYFxuICAgICAgICAvLyAoaW5ib3VuZCkgYW5kIGByZXNwb25zZXNgIChvdXRib3VuZCkgc2NoZW1hcywgd2hpY2ggb3duIHRoZWlyIG9iamVjdFxuICAgICAgICAvLyB2b2NhYnVsYXJ5LiBUaGUgYmFzZSBlbnZlbG9wZSBvbmx5IHJlcXVpcmVzIGl0IHRvIGJlIGFuIG9iamVjdC5cbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICB9LFxuICAgICAgICBwdWJsaXNoZWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGF0ZS10aW1lXCIsXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGRlZmluaXRpb25zOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdFR5cGVzU2NoZW1hLFxuICAgIH0sXG59O1xuIiwKICAgICJpbXBvcnQgQWp2LCB7IHR5cGUgU2NoZW1hIH0gZnJvbSBcImFqdlwiO1xuaW1wb3J0IGFkZEZvcm1hdHMgZnJvbSBcImFqdi1mb3JtYXRzXCI7XG5pbXBvcnQgYWRkaXRpb25zRm9ybWF0czIwMTkgZnJvbSBcImFqdi1mb3JtYXRzLWRyYWZ0MjAxOVwiO1xuaW1wb3J0IHtcbiAgICBFUlJPUl9QTEFURk9STV9DT05URVhUX1VSTCxcbiAgICBFUlJPUl9QTEFURk9STV9JRCxcbiAgICBnZXRDcmVkZW50aWFsc1NjaGVtYUlkQnlDb250ZXh0VXJsLFxuICAgIGdldFBsYXRmb3JtSWRCeUNvbnRleHRVcmwsXG4gICAgZ2V0U2NoZW1hSWRCeUNvbnRleHRVcmwsXG4gICAgSU5URVJOQUxfUExBVEZPUk1fQ09OVEVYVF9VUkwsXG4gICAgSU5URVJOQUxfUExBVEZPUk1fSUQsXG4gICAgcmVnaXN0ZXJQbGF0Zm9ybUNvbnRleHQsXG4gICAgcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybCxcbn0gZnJvbSBcIi4vY29udGV4dC5qc1wiO1xuaW1wb3J0IGdldEVycm9yTWVzc2FnZSwge1xuICAgIHR5cGUgVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbn0gZnJvbSBcIi4vaGVscGVycy9lcnJvci1wYXJzZXIuanNcIjtcbmltcG9ydCB7IEFjdGl2aXR5U3RyZWFtU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9hY3Rpdml0eS1zdHJlYW0uanNcIjtcbmltcG9ydCB7IFBsYXRmb3JtU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9wbGF0Zm9ybS5qc1wiO1xuaW1wb3J0IHsgU29ja2V0aHViQ29uZmlnU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9zb2NrZXRodWItY29uZmlnLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5U3RyZWFtIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuY29uc3QgYWp2ID0gbmV3IEFqdih7IHN0cmljdFR5cGVzOiBmYWxzZSwgYWxsRXJyb3JzOiB0cnVlIH0pO1xuYWRkRm9ybWF0cyhhanYgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhZGRGb3JtYXRzPlswXSk7XG5hZGRpdGlvbnNGb3JtYXRzMjAxOShhanYgYXMgdW5rbm93biBhcyBBanYpO1xuXG50eXBlIFNjaGVtYXNEaWN0ID0gUmVjb3JkPHN0cmluZywgU2NoZW1hPjtcblxuY29uc3Qgc2NoZW1hVVJMID0gXCJodHRwczovL3NvY2tldGh1Yi5vcmcvc2NoZW1hcy92MFwiO1xuY29uc3Qgc2NoZW1hczogU2NoZW1hc0RpY3QgPSB7fTtcbmxldCB2YWxpZGF0aW9uRXJyb3JPcHRpb25zOiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zID0ge307XG5sZXQgc3lzdGVtQ29udGV4dHNSZWdpc3RlcmVkID0gZmFsc2U7XG5cbnNjaGVtYXNbYCR7c2NoZW1hVVJMfS9hY3Rpdml0eS1zdHJlYW1gXSA9IEFjdGl2aXR5U3RyZWFtU2NoZW1hO1xuXG5mb3IgKGNvbnN0IHVyaSBpbiBzY2hlbWFzKSB7XG4gICAgYWp2LmFkZFNjaGVtYShzY2hlbWFzW3VyaV0sIHVyaSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyU3lzdGVtQ29udGV4dChwbGF0Zm9ybUlkOiBzdHJpbmcsIGNvbnRleHRVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICBjb250ZXh0VXJsLFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9tZXNzYWdlc2AsXG4gICAgICAgIGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L2NyZWRlbnRpYWxzYCxcbiAgICApO1xuXG4gICAgY29uc3QgbWVzc2FnZVNjaGVtYVJlZiA9IGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L21lc3NhZ2VzYDtcbiAgICBpZiAoIWFqdi5nZXRTY2hlbWEobWVzc2FnZVNjaGVtYVJlZikpIHtcbiAgICAgICAgYWp2LmFkZFNjaGVtYSh7fSwgbWVzc2FnZVNjaGVtYVJlZik7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlZGVudGlhbHNTY2hlbWFSZWYgPSBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9jcmVkZW50aWFsc2A7XG4gICAgaWYgKCFhanYuZ2V0U2NoZW1hKGNyZWRlbnRpYWxzU2NoZW1hUmVmKSkge1xuICAgICAgICBhanYuYWRkU2NoZW1hKHt9LCBjcmVkZW50aWFsc1NjaGVtYVJlZik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTeXN0ZW1QbGF0Zm9ybUNvbnRleHRzKCk6IHZvaWQge1xuICAgIGlmIChzeXN0ZW1Db250ZXh0c1JlZ2lzdGVyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZWdpc3RlclN5c3RlbUNvbnRleHQoRVJST1JfUExBVEZPUk1fSUQsIEVSUk9SX1BMQVRGT1JNX0NPTlRFWFRfVVJMKTtcbiAgICByZWdpc3RlclN5c3RlbUNvbnRleHQoSU5URVJOQUxfUExBVEZPUk1fSUQsIElOVEVSTkFMX1BMQVRGT1JNX0NPTlRFWFRfVVJMKTtcbiAgICBzeXN0ZW1Db250ZXh0c1JlZ2lzdGVyZWQgPSB0cnVlO1xufVxuXG5yZWdpc3RlclN5c3RlbVBsYXRmb3JtQ29udGV4dHMoKTtcblxuZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGlvbihzY2hlbWFSZWY6IHN0cmluZywgbXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gYWp2LmdldFNjaGVtYShzY2hlbWFSZWYpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICAgIHJldHVybiBgc2NoZW1hICR7c2NoZW1hUmVmfSBub3QgZm91bmRgO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IobXNnKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgbXNnLFxuICAgICAgICAgICAgdmFsaWRhdG9yLmVycm9ycyxcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KChtc2cgYXMgQWN0aXZpdHlTdHJlYW0pW1wiQGNvbnRleHRcIl0pKSB7XG4gICAgICAgICAgICBjb25zdCBwbGF0Zm9ybUNvbnRleHRVcmwgPSByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKFxuICAgICAgICAgICAgICAgIG1zZyBhcyBBY3Rpdml0eVN0cmVhbSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhdGZvcm1JZCA9XG4gICAgICAgICAgICAgICAgICAgIGdldFBsYXRmb3JtSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKTtcbiAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm1JZCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgWyR7cGxhdGZvcm1JZH1dICR7ZXJyb3JNZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VmFsaWRhdGlvbkVycm9yT3B0aW9ucyhcbiAgICBvcHRpb25zOiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogdm9pZCB7XG4gICAgdmFsaWRhdGlvbkVycm9yT3B0aW9ucyA9IHsgLi4udmFsaWRhdGlvbkVycm9yT3B0aW9ucywgLi4ub3B0aW9ucyB9O1xufVxuXG5sZXQgc29ja2V0aHViQ29uZmlnVmFsaWRhdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBhanYuY29tcGlsZT4gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogVmFsaWRhdGUgYSAoZnVsbHktbWF0ZXJpYWxpemVkKSBTb2NrZXRodWIgc2VydmVyIGNvbmZpZyBvYmplY3QgYWdhaW5zdCB0aGVcbiAqIGNhbm9uaWNhbCBjb25maWcgc2NoZW1hLiBSZXR1cm5zIFwiXCIgd2hlbiB2YWxpZCwgb3RoZXJ3aXNlIGEgaHVtYW4tcmVhZGFibGVcbiAqIGVycm9yIHN0cmluZy4gVXNlZCBieSB0aGUgc2VydmVyIGF0IHN0YXJ0dXAgc28gYSBtaXMtdHlwZWQgb3IgdW5rbm93biBjb25maWdcbiAqIHZhbHVlIOKAlCBpbmNsdWRpbmcgaW5zaWRlIGEgcGxhdGZvcm0ncyBgcGFja2FnZUNvbmZpZ2AgZW50cnkg4oCUIGZhaWxzIGxvdWRseVxuICogcmF0aGVyIHRoYW4gcmVhY2hpbmcgYSBwbGF0Zm9ybSB3cm9uZy10eXBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU29ja2V0aHViQ29uZmlnKGNvbmZpZzogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKCFzb2NrZXRodWJDb25maWdWYWxpZGF0b3IpIHtcbiAgICAgICAgc29ja2V0aHViQ29uZmlnVmFsaWRhdG9yID0gYWp2LmNvbXBpbGUoU29ja2V0aHViQ29uZmlnU2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKHNvY2tldGh1YkNvbmZpZ1ZhbGlkYXRvcihjb25maWcpKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gYWp2LmVycm9yc1RleHQoc29ja2V0aHViQ29uZmlnVmFsaWRhdG9yLmVycm9ycywge1xuICAgICAgICBkYXRhVmFyOiBcImNvbmZpZ1wiLFxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBY3Rpdml0eVN0cmVhbShtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW1WYWxpZGF0aW9uRXJyb3IgPSBoYW5kbGVWYWxpZGF0aW9uKFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2FjdGl2aXR5LXN0cmVhbWAsXG4gICAgICAgIG1zZyxcbiAgICApO1xuICAgIGlmIChzdHJlYW1WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbVZhbGlkYXRpb25FcnJvcjtcbiAgICB9XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmICghcGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgIHJldHVybiBcImFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dCBVUkwgaW4gQGNvbnRleHRcIjtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1hSWQgPSBnZXRTY2hlbWFJZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpO1xuICAgIGlmICghc2NoZW1hSWQpIHtcbiAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBjb250ZXh0IFVSTCAke3BsYXRmb3JtQ29udGV4dFVybH0gZG9lcyBub3QgaGF2ZSBhIHJlZ2lzdGVyZWQgbWVzc2FnZSBzY2hlbWFgO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlVmFsaWRhdGlvbihzY2hlbWFJZCwgbXNnKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBvdXRib3VuZCBwbGF0Zm9ybSByZXNwb25zZSBhZ2FpbnN0IHRoYXQgcGxhdGZvcm0ncyBgcmVzcG9uc2VzYFxuICogc2NoZW1hLiBSZXR1cm5zIFwiXCIgd2hlbiB0aGUgcGxhdGZvcm0gaGFzIG5vIHJlc3BvbnNlcyBzY2hlbWEgcmVnaXN0ZXJlZCAoeWV0KSxcbiAqIHNvIG91dGJvdW5kIHZhbGlkYXRpb24gY2FuIGJlIGFkb3B0ZWQgcGxhdGZvcm0tYnktcGxhdGZvcm0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFjdGl2aXR5U3RyZWFtUmVzcG9uc2UobXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmICghcGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBwbGF0Zm9ybUlkID0gZ2V0UGxhdGZvcm1JZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpO1xuICAgIGlmICghcGxhdGZvcm1JZCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VzU2NoZW1hSWQgPSBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9yZXNwb25zZXNgO1xuICAgIGlmICghYWp2LmdldFNjaGVtYShyZXNwb25zZXNTY2hlbWFJZCkpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVWYWxpZGF0aW9uKHJlc3BvbnNlc1NjaGVtYUlkLCBtc2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDcmVkZW50aWFscyhtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobXNnW1wiQGNvbnRleHRcIl0pKSB7XG4gICAgICAgIHJldHVybiBcImNyZWRlbnRpYWwgYWN0aXZpdHkgc3RyZWFtcyBtdXN0IGhhdmUgYW4gQGNvbnRleHQgc2V0XCI7XG4gICAgfVxuICAgIGlmIChtc2cudHlwZSAhPT0gXCJjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgIHJldHVybiBcImNyZWRlbnRpYWwgYWN0aXZpdHkgc3RyZWFtcyBtdXN0IGhhdmUgY3JlZGVudGlhbHMgc2V0IGFzIHR5cGVcIjtcbiAgICB9XG4gICAgY29uc3Qgc3RyZWFtVmFsaWRhdGlvbkVycm9yID0gaGFuZGxlVmFsaWRhdGlvbihcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9hY3Rpdml0eS1zdHJlYW1gLFxuICAgICAgICBtc2csXG4gICAgKTtcbiAgICBpZiAoc3RyZWFtVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1WYWxpZGF0aW9uRXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtQ29udGV4dFVybCA9IHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwobXNnKTtcbiAgICBpZiAoIXBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICByZXR1cm4gXCJjcmVkZW50aWFsIGFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dCBVUkwgaW4gQGNvbnRleHRcIjtcbiAgICB9XG4gICAgY29uc3QgY3JlZGVudGlhbHNTY2hlbWFJZCA9XG4gICAgICAgIGdldENyZWRlbnRpYWxzU2NoZW1hSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKTtcbiAgICBpZiAoIWNyZWRlbnRpYWxzU2NoZW1hSWQpIHtcbiAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBjb250ZXh0IFVSTCAke3BsYXRmb3JtQ29udGV4dFVybH0gZG9lcyBub3QgaGF2ZSBhIHJlZ2lzdGVyZWQgY3JlZGVudGlhbHMgc2NoZW1hYDtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZVZhbGlkYXRpb24oY3JlZGVudGlhbHNTY2hlbWFJZCwgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGxhdGZvcm1TY2hlbWEoc2NoZW1hOiBTY2hlbWEpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbGlkYXRlID0gYWp2LmNvbXBpbGUoUGxhdGZvcm1TY2hlbWEpO1xuICAgIC8vIHZhbGlkYXRlIHNjaGVtYSBwcm9wZXJ0eVxuICAgIGNvbnN0IGVyciA9IHZhbGlkYXRlKHNjaGVtYSk7XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGUuZXJyb3JzWzBdO1xuICAgICAgICBsZXQgbWVzc2FnZSA9IGAke3ZhbGlkYXRpb25FcnJvci5pbnN0YW5jZVBhdGh9ICR7dmFsaWRhdGlvbkVycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvci5rZXl3b3JkID09PSBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYDogJHt2YWxpZGF0aW9uRXJyb3IucGFyYW1zLmFkZGl0aW9uYWxQcm9wZXJ0eX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgcGxhdGZvcm0gc2NoZW1hIGZhaWxlZCB0byB2YWxpZGF0ZTogJHttZXNzYWdlfWA7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGxhdGZvcm1TY2hlbWEoc2NoZW1hOiBTY2hlbWEsIHBsYXRmb3JtX3R5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtX3R5cGV9YDtcbiAgICBpZiAoIWFqdi5nZXRTY2hlbWEoc2NoZW1hUmVmKSkge1xuICAgICAgICBhanYuYWRkU2NoZW1hKHNjaGVtYSwgc2NoZW1hUmVmKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybVNjaGVtYShwbGF0Zm9ybV90eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYWp2LmdldFNjaGVtYShgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybV90eXBlfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGxhdGZvcm1Db250ZXh0KFxuICAgIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbikge1xuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICBwbGF0Zm9ybUNvbnRleHRVcmwsXG4gICAgICAgIGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L21lc3NhZ2VzYCxcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vY3JlZGVudGlhbHNgLFxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGxhdGZvcm1JZChtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmICghcGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0UGxhdGZvcm1JZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpID8/IG51bGw7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRXJyb3JPYmplY3QgfSBmcm9tIFwiYWp2XCI7XG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5T2JqZWN0LCBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWN0b3JUeXBlc0xpc3QsIE9iamVjdFR5cGVzTGlzdCwgVGFyZ2V0VHlwZXNMaXN0IH0gZnJvbSBcIi4vb2JqZWN0cy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25FcnJvck9wdGlvbnMge1xuICAgIGV4Y2x1ZGVUeXBlcz86IEFycmF5PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBUeXBlQnJlYWtkb3duIHtcbiAgICBhY3RvcjogQXJyYXk8c3RyaW5nPjtcbiAgICBvYmplY3Q6IEFycmF5PHN0cmluZz47XG4gICAgdGFyZ2V0OiBBcnJheTxzdHJpbmc+O1xufVxuXG5mdW5jdGlvbiBwYXJzZU1zZyhlcnJvcjogRXJyb3JPYmplY3QpOiBzdHJpbmcge1xuICAgIGxldCBlcnIgPSBgJHtcbiAgICAgICAgZXJyb3IuaW5zdGFuY2VQYXRoID8gZXJyb3IuaW5zdGFuY2VQYXRoIDogXCJhY3Rpdml0eSBzdHJlYW1cIlxuICAgIH06ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgIGlmIChlcnJvci5rZXl3b3JkID09PSBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpIHtcbiAgICAgICAgZXJyICs9IGA6ICR7ZXJyb3IucGFyYW1zLmFkZGl0aW9uYWxQcm9wZXJ0eX1gO1xuICAgIH0gZWxzZSBpZiAoZXJyb3Iua2V5d29yZCA9PT0gXCJlbnVtXCIpIHtcbiAgICAgICAgZXJyICs9IGA6ICR7ZXJyb3IucGFyYW1zLmFsbG93ZWRWYWx1ZXMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuICAgIHJldHVybiBlcnI7XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVMaXN0KG1zZzogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IHR5cGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgaWYgKG1zZz8udHlwZSkge1xuICAgICAgICB0eXBlcy5wdXNoKG1zZy50eXBlKTtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkID0gbXNnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiByZWNvcmQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbcHJvcF07XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJ0eXBlXCIgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHR5cGVzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4uZ2V0VHlwZUxpc3QodmFsdWUgYXMgQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1hVHlwZShlcnJvcjogRXJyb3JPYmplY3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNjaGVtYVR5cGVSZXMgPSBlcnJvci5zY2hlbWFQYXRoLm1hdGNoKC8jXFwvXFx3K1xcL1xcdytcXC8oW1xcdy1dKylcXC8vKTtcbiAgICByZXR1cm4gc2NoZW1hVHlwZVJlcyA/IHNjaGVtYVR5cGVSZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEVyclR5cGUoZXJyb3I6IEVycm9yT2JqZWN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlcnJUeXBlUmVzID0gZXJyb3IuaW5zdGFuY2VQYXRoLm1hdGNoKC9cXC8oXFx3KykvKTtcbiAgICByZXR1cm4gZXJyVHlwZVJlcyA/IGVyclR5cGVSZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFBhcnRzQ291bnQoZXJyb3I6IEVycm9yT2JqZWN0LCB0eXBlczogVHlwZUJyZWFrZG93bik6IG51bWJlciB7XG4gICAgY29uc3Qgc2NoZW1hVHlwZSA9IGdldFNjaGVtYVR5cGUoZXJyb3IpO1xuICAgIGNvbnN0IGVyclR5cGUgPSBnZXRFcnJUeXBlKGVycm9yKTtcbiAgICBpZiAoIWVyclR5cGUpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCB0eXBlTGlzdCA9ICh0eXBlcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+KVtcbiAgICAgICAgZXJyVHlwZVxuICAgIF07XG4gICAgaWYgKCF0eXBlTGlzdCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICghc2NoZW1hVHlwZSB8fCAhdHlwZUxpc3QuaW5jbHVkZXMoc2NoZW1hVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IGVycm9yLmluc3RhbmNlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgcmV0dXJuIHBhcnRzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZXMobXNnOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0KTogVHlwZUJyZWFrZG93biB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KChtc2cgYXMgQWN0aXZpdHlTdHJlYW0pW1wiQGNvbnRleHRcIl0pKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3RvcjogW10sXG4gICAgICAgICAgICB0YXJnZXQ6IFtdLFxuICAgICAgICAgICAgb2JqZWN0OiBnZXRUeXBlTGlzdChtc2cpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmVhbSA9IG1zZyBhcyBBY3Rpdml0eVN0cmVhbTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhY3RvcjogZ2V0VHlwZUxpc3Qoc3RyZWFtLmFjdG9yKSxcbiAgICAgICAgdGFyZ2V0OiBnZXRUeXBlTGlzdChzdHJlYW0udGFyZ2V0KSxcbiAgICAgICAgb2JqZWN0OiBzdHJlYW0ub2JqZWN0ID8gZ2V0VHlwZUxpc3Qoc3RyZWFtLm9iamVjdCkgOiBbXSxcbiAgICB9O1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyB0aGUgZXJyb3JzIGFycmF5IGZyb20gYWp2LCBhbmQgbWFrZXMgYSBzZXJpZXMgb2YgZmlsdGVyaW5nIGRlY2lzaW9ucyB0b1xuICogdHJ5IHRvIGFycml2ZSBhdCB0aGUgbW9zdCB1c2VmdWwgZXJyb3IuXG4gKiBAcGFyYW0gbXNnXG4gKiBAcGFyYW0gZXJyb3JzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoXG4gICAgbXNnOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0LFxuICAgIGVycm9yczogQXJyYXk8RXJyb3JPYmplY3Q+LFxuICAgIG9wdGlvbnM/OiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlcyA9IGdldFR5cGVzKG1zZyk7XG4gICAgbGV0IGRlZXBlc3RfZW50cnkgPSAwO1xuICAgIGxldCBoaWdoZXN0X2RlcHRoID0gLTE7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJ0c0NvdW50ID0gZ2V0UGFydHNDb3VudChlcnJvcnNbaV0sIHR5cGVzKTtcbiAgICAgICAgaWYgKHBhcnRzQ291bnQgPiBoaWdoZXN0X2RlcHRoKSB7XG4gICAgICAgICAgICBoaWdoZXN0X2RlcHRoID0gcGFydHNDb3VudDtcbiAgICAgICAgICAgIGRlZXBlc3RfZW50cnkgPSBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpZ2hlc3RfZGVwdGggPj0gMFxuICAgICAgICA/IHBhcnNlTXNnKGVycm9yc1tkZWVwZXN0X2VudHJ5XSlcbiAgICAgICAgOiBjb21wb3NlRmluYWxFcnJvcihlcnJvcnNbZXJyb3JzLmxlbmd0aCAtIDFdLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyVHlwZUxpc3QoXG4gICAgdHlwZXM6IEFycmF5PHN0cmluZz4sXG4gICAgb3B0aW9ucz86IFZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBpZiAoIW9wdGlvbnM/LmV4Y2x1ZGVUeXBlcyB8fCBvcHRpb25zLmV4Y2x1ZGVUeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cbiAgICBjb25zdCBleGNsdWRlID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVUeXBlcyk7XG4gICAgcmV0dXJuIHR5cGVzLmZpbHRlcigodHlwZSkgPT4gIWV4Y2x1ZGUuaGFzKHR5cGUpKTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZUZpbmFsRXJyb3IoXG4gICAgZXJyb3I6IEVycm9yT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgICAvLyBpZiB3ZSBoYXZlIHlldCB0byBidWlsZCBhbiBlcnJvciBtZXNzYWdlLCBhc3N1bWUgdGhpcyBpcyBhbiBpbnZhbGlkIHR5cGUgdmFsdWUgKG9uZU9mKSxcbiAgICAvLyB0cnkgdG8gYnVpbGQgYSBsaXN0IG9mIHZhbGlkIHR5cGVzXG4gICAgbGV0IG1zZzogc3RyaW5nO1xuICAgIGlmIChlcnJvci5rZXl3b3JkID09PSBcIm9uZU9mXCIpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VSb290ID0gZXJyb3IuaW5zdGFuY2VQYXRoLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgY29uc3QgcGF0aFNjb3BlZFR5cGVzID1cbiAgICAgICAgICAgIGluc3RhbmNlUm9vdCA9PT0gXCJhY3RvclwiXG4gICAgICAgICAgICAgICAgPyBBY3RvclR5cGVzTGlzdFxuICAgICAgICAgICAgICAgIDogaW5zdGFuY2VSb290ID09PSBcInRhcmdldFwiXG4gICAgICAgICAgICAgICAgICA/IFRhcmdldFR5cGVzTGlzdFxuICAgICAgICAgICAgICAgICAgOiBPYmplY3RUeXBlc0xpc3Q7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkVHlwZXMgPSBmaWx0ZXJUeXBlTGlzdChwYXRoU2NvcGVkVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0eXBlc0xpc3QgPVxuICAgICAgICAgICAgZmlsdGVyZWRUeXBlcy5sZW5ndGggPiAwID8gZmlsdGVyZWRUeXBlcyA6IHBhdGhTY29wZWRUeXBlcztcbiAgICAgICAgbXNnID1cbiAgICAgICAgICAgIGAke2Vycm9yLmluc3RhbmNlUGF0aH06ICR7ZXJyb3IubWVzc2FnZX06IGAgK1xuICAgICAgICAgICAgYCR7dHlwZXNMaXN0LmpvaW4oXCIsIFwiKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyA9IGAke1xuICAgICAgICAgICAgZXJyb3IuaW5zdGFuY2VQYXRoID8gZXJyb3IuaW5zdGFuY2VQYXRoIDogXCJhY3Rpdml0eSBzdHJlYW1cIlxuICAgICAgICB9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICB9XG4gICAgaWYgKFwiYWRkaXRpb25hbFByb3BlcnR5XCIgaW4gZXJyb3IucGFyYW1zKSB7XG4gICAgICAgIG1zZyArPSBgOiAke2Vycm9yLnBhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9YDtcbiAgICB9XG4gICAgcmV0dXJuIG1zZztcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbmNvbnN0IHN0cmluZ1JlZktleXMgPSB7XG4gICAgYWN0b3I6IFwiaWRcIixcbiAgICB0YXJnZXQ6IFwiaWRcIixcbiAgICBvYmplY3Q6IFwiY29udGVudFwiLFxufSBhcyBjb25zdDtcblxudHlwZSBTdHJlYW1QYXJ0S2V5ID0ga2V5b2YgdHlwZW9mIHN0cmluZ1JlZktleXM7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ1JlZih2YWx1ZTogdW5rbm93biwgcHJpbWFyeUtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4geyBbcHJpbWFyeUtleV06IHZhbHVlIH07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkOiBlbnRyeSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBzdHJpbmcgYWN0b3IvdGFyZ2V0L29iamVjdCByZWZzIGludG8gbWluaW1hbCBBY3Rpdml0eU9iamVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBY3Rpdml0eVN0cmVhbShtZXRhOiBBY3Rpdml0eVN0cmVhbSk6IEFjdGl2aXR5U3RyZWFtIHtcbiAgICBjb25zdCBzdHJlYW06IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAuLi4obWV0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgICB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0cmluZ1JlZktleXMpIGFzIFN0cmVhbVBhcnRLZXlbXSkge1xuICAgICAgICBpZiAoa2V5IGluIHN0cmVhbSkge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBub3JtYWxpemVTdHJpbmdSZWYoc3RyZWFtW2tleV0sIHN0cmluZ1JlZktleXNba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbSBhcyBBY3Rpdml0eVN0cmVhbTtcbn1cbiIsCiAgICAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL2luZGV4LmpzJ1xuXG5leHBvcnQgeyBFdmVudEVtaXR0ZXIgfVxuZXhwb3J0IGRlZmF1bHQgRXZlbnRFbWl0dGVyXG4iLAogICAgImltcG9ydCB0eXBlIHsgQWN0aXZpdHlTdHJlYW0gfSBmcm9tIFwiQHNvY2tldGh1Yi9zY2hlbWFzXCI7XG5pbXBvcnQge1xuICAgIGFkZFBsYXRmb3JtQ29udGV4dCxcbiAgICBhZGRQbGF0Zm9ybVNjaGVtYSxcbiAgICBub3JtYWxpemVBY3Rpdml0eVN0cmVhbSxcbiAgICB2YWxpZGF0ZUFjdGl2aXR5U3RyZWFtLFxuICAgIHZhbGlkYXRlQ3JlZGVudGlhbHMsXG59IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50ZW1pdHRlcjNcIjtcbmltcG9ydCB0eXBlIHsgU29ja2V0IH0gZnJvbSBcInNvY2tldC5pby1jbGllbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudE1hcHBpbmcge1xuICAgIGNyZWRlbnRpYWxzOiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG4gICAgY29ubmVjdDogTWFwPHN0cmluZywgQWN0aXZpdHlTdHJlYW0+O1xuICAgIGpvaW46IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbn1cblxudHlwZSBSZXBsYXlFdmVudE1hcCA9IHtcbiAgICBjcmVkZW50aWFsczogQWN0aXZpdHlTdHJlYW07XG4gICAgbWVzc2FnZTogQWN0aXZpdHlTdHJlYW07XG59O1xuXG50eXBlIEluaXRTdGF0ZSA9IFwiaWRsZVwiIHwgXCJpbml0aWFsaXppbmdcIiB8IFwicmVhZHlcIiB8IFwiaW5pdF9lcnJvclwiIHwgXCJjbG9zZWRcIjtcblxudHlwZSBSZWFkeVJlYXNvbiA9IFwiaW5pdGlhbC1jb25uZWN0XCIgfCBcInJlY29ubmVjdFwiIHwgXCJzY2hlbWFzLXVwZGF0ZVwiO1xuXG50eXBlIEluaXRFcnJvclBoYXNlID0gXCJzY2hlbWFzLXJlcXVlc3RcIiB8IFwic2NoZW1hcy1hcHBseVwiIHwgXCJ0aW1lb3V0XCI7XG5cbmludGVyZmFjZSBQZW5kaW5nUmVhZHlXYWl0ZXIge1xuICAgIHJlc29sdmU6IChpbmZvOiBDbGllbnRSZWFkeUluZm8pID0+IHZvaWQ7XG4gICAgcmVqZWN0OiAoZXJyOiBFcnJvcikgPT4gdm9pZDtcbiAgICB0aW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xufVxuXG5pbnRlcmZhY2UgUXVldWVkT3V0Ym91bmRFdmVudCB7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBjb250ZW50OiB1bmtub3duO1xuICAgIGNhbGxiYWNrPzogdW5rbm93bjtcbiAgICBlbnF1ZXVlZEF0OiBudW1iZXI7XG4gICAgc2VxdWVuY2U6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEluaXRpYWxpemF0aW9uQ3ljbGUge1xuICAgIHRva2VuOiBudW1iZXI7XG4gICAgcmVhc29uOiBSZWFkeVJlYXNvbjtcbiAgICBzdGFydGVkQXQ6IG51bWJlcjtcbiAgICByZXBsYXlPblJlYWR5OiBib29sZWFuO1xuICAgIHRpbWVkT3V0OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvY2tldGh1YkNsaWVudE9wdGlvbnMge1xuICAgIGluaXRUaW1lb3V0TXM/OiBudW1iZXI7XG4gICAgbWF4UXVldWVkT3V0Ym91bmQ/OiBudW1iZXI7XG4gICAgbWF4UXVldWVkQWdlTXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDdXN0b21FbWl0dGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBfZW1pdChzOiBzdHJpbmcsIG86IHVua25vd24sIGM/OiB1bmtub3duKTogdm9pZDtcbiAgICBjb25uZWN0KCk6IHZvaWQ7XG4gICAgZGlzY29ubmVjdCgpOiB2b2lkO1xuICAgIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGxhdGZvcm1SZWdpc3RyeVNjaGVtYXMge1xuICAgIGNyZWRlbnRpYWxzPzogb2JqZWN0O1xuICAgIG1lc3NhZ2VzPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFNlcnZlci1kZWNsYXJlZCBwbGF0Zm9ybSBtZXRhZGF0YSB1c2VkIGJ5IHRoZSBjbGllbnQgZm9yIGNvbnRleHQgZ2VuZXJhdGlvblxuICogYW5kIHJ1bnRpbWUgdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGNvbnRleHRVcmw6IHN0cmluZztcbiAgICBjb250ZXh0VmVyc2lvbjogc3RyaW5nO1xuICAgIHNjaGVtYVZlcnNpb246IHN0cmluZztcbiAgICB0eXBlczogQXJyYXk8c3RyaW5nPjtcbiAgICBzY2hlbWFzOiBQbGF0Zm9ybVJlZ2lzdHJ5U2NoZW1hcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCB7XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICAvLyBTZXJ2ZXItY29tcHV0ZWQgY29udGVudCBmaW5nZXJwcmludCBvZiB0aGUgcmVnaXN0cnkuIFRoZSBjbGllbnQgZWNob2VzXG4gICAgLy8gdGhpcyBvbiByZS1yZXF1ZXN0IHNvIHRoZSBzZXJ2ZXIgY2FuIHJlcGx5IFwidW5jaGFuZ2VkXCIgaW5zdGVhZCBvZlxuICAgIC8vIHJlLXNlbmRpbmcgdGhlIGZ1bGwgc2NoZW1hIHNldCAoIzExMTcpLlxuICAgIGZpbmdlcnByaW50Pzogc3RyaW5nO1xuICAgIC8vIFNldCBieSB0aGUgc2VydmVyIHdoZW4gdGhlIGVjaG9lZCBmaW5nZXJwcmludCBtYXRjaGVzOiB0aGUgcmVnaXN0cnkgaXNcbiAgICAvLyBpZGVudGljYWwgdG8gd2hhdCB0aGUgY2xpZW50IGFscmVhZHkgaG9sZHMsIHNvIG5vIHBsYXRmb3JtcyBhcmUgaW5jbHVkZWQuXG4gICAgdW5jaGFuZ2VkPzogYm9vbGVhbjtcbiAgICBjb250ZXh0cz86IHtcbiAgICAgICAgYXM/OiBzdHJpbmc7XG4gICAgICAgIHNvY2tldGh1Yj86IHN0cmluZztcbiAgICB9O1xuICAgIHBsYXRmb3Jtcz86IEFycmF5PFBsYXRmb3JtUmVnaXN0cnlFbnRyeT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50UmVhZHlJbmZvIHtcbiAgICBzdGF0ZTogXCJyZWFkeVwiO1xuICAgIHJlYXNvbjogUmVhZHlSZWFzb247XG4gICAgc29ja2V0aHViVmVyc2lvbjogc3RyaW5nO1xuICAgIGNvbnRleHRzOiB7XG4gICAgICAgIGFzOiBzdHJpbmc7XG4gICAgICAgIHNvY2tldGh1Yjogc3RyaW5nO1xuICAgIH07XG4gICAgcGxhdGZvcm1zOiBBcnJheTx7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICAgICAgY29udGV4dFVybDogc3RyaW5nO1xuICAgICAgICBjb250ZXh0VmVyc2lvbjogc3RyaW5nO1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBzdHJpbmc7XG4gICAgICAgIHR5cGVzOiBBcnJheTxzdHJpbmc+O1xuICAgIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudEluaXRFcnJvciB7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICBwaGFzZTogSW5pdEVycm9yUGhhc2U7XG4gICAgcmV0cnlpbmc6IGJvb2xlYW47XG59XG5cbi8qKlxuICogU29ja2V0aHViQ2xpZW50IC0gQ2xpZW50IGxpYnJhcnkgZm9yIFNvY2tldGh1YiBwcm90b2NvbCBnYXRld2F5XG4gKlxuICogQSBKYXZhU2NyaXB0IGNsaWVudCBmb3IgY29ubmVjdGluZyB0byBTb2NrZXRodWIgc2VydmVycy4gUHJvdmlkZXMgYSBoaWdoLWxldmVsXG4gKiBBUEkgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBBY3Rpdml0eVN0cmVhbXMgbWVzc2FnZXMgb3ZlciBTb2NrZXQuSU8sIHdpdGhcbiAqIGF1dG9tYXRpYyBzdGF0ZSBtYW5hZ2VtZW50IGFuZCByZWNvbm5lY3Rpb24gaGFuZGxpbmcuXG4gKlxuICogU29ja2V0aHViIGFjdHMgYXMgYSBwcm90b2NvbCBnYXRld2F5LCB0cmFuc2xhdGluZyBBY3Rpdml0eVN0cmVhbXMgbWVzc2FnZXMgaW50b1xuICogdmFyaW91cyBwcm90b2NvbHMgKFhNUFAsIElSQywgUlNTLCBldGMuKS4gVGhpcyBjbGllbnQgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvblxuICogd2l0aCB0aGUgU29ja2V0aHViIHNlcnZlciwgaW5jbHVkaW5nIGNyZWRlbnRpYWwgbWFuYWdlbWVudCwgY29ubmVjdGlvbiBzdGF0ZSxcbiAqIGFuZCBhdXRvbWF0aWMgcmVjb25uZWN0aW9uLlxuICpcbiAqICMjIEF1dG9tYXRpYyBSZWNvbm5lY3Rpb24gJiBTdGF0ZSBSZXBsYXlcbiAqXG4gKiBUaGlzIGNsaWVudCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdHJhbnNpZW50IG5ldHdvcmsgZGlzY29ubmVjdGlvbnMgYnkgc3RvcmluZ1xuICogY29ubmVjdGlvbiBzdGF0ZSBpbiBtZW1vcnkgYW5kIHJlcGxheWluZyBpdCB3aGVuIHRoZSBzb2NrZXQgcmVjb25uZWN0cy5cbiAqXG4gKiAjIyMgU2VjdXJpdHkgTW9kZWxcbiAqXG4gKiAqKlN0b3JhZ2UgTG9jYXRpb246KipcbiAqIC0gQWxsIGNyZWRlbnRpYWxzIGFuZCBzdGF0ZSBhcmUgc3RvcmVkIE9OTFkgaW4gSmF2YVNjcmlwdCBtZW1vcnkgKGhlYXApXG4gKiAtIE5vdGhpbmcgaXMgcGVyc2lzdGVkIHRvIGxvY2FsU3RvcmFnZSwgc2Vzc2lvblN0b3JhZ2UsIGNvb2tpZXMsIG9yIGRpc2tcbiAqIC0gTWVtb3J5IGlzIGNsZWFyZWQgd2hlbiB0aGUgYnJvd3NlciB0YWIgY2xvc2VzIG9yIHBhZ2UgcmVmcmVzaGVzXG4gKlxuICogKipSZXBsYXkgVHJpZ2dlcnM6KipcbiAqIC0gQXV0b21hdGljIHJlcGxheSBvY2N1cnMgb24gU29ja2V0LklPIHJlY29ubmVjdGlvbiBldmVudHNcbiAqIC0gVHlwaWNhbGx5IHRyaWdnZXJlZCBieSBicmllZiBuZXR3b3JrIGludGVycnVwdGlvbnMgKFdpRmkgc3dpdGNoaW5nLCBtb2JpbGUgbmV0d29yayBibGlwcylcbiAqIC0gRG9lcyBOT1Qgb2NjdXIgb24gcGFnZSByZWZyZXNoIChuZXcgU29ja2V0aHViQ2xpZW50IGluc3RhbmNlID0gZW1wdHkgc3RhdGUpXG4gKlxuICogKipTZXJ2ZXIgUmVzdGFydCBCZWhhdmlvcjoqKlxuICogLSBJZiBzZXJ2ZXIgcmVzdGFydHMsIGNsaWVudCBzb2NrZXQgd2lsbCByZWNvbm5lY3QgYW5kIHJlcGxheSBjcmVkZW50aWFsc1xuICogLSBTZXJ2ZXIgbXVzdCBoYW5kbGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgYXBwcm9wcmlhdGVseSAodmFsaWRhdGUsIHJlamVjdCBzdGFsZSBzZXNzaW9ucywgZXRjLilcbiAqIC0gQXBwbGljYXRpb25zIHNob3VsZCBpbXBsZW1lbnQgcHJvcGVyIHNlc3Npb24gdmFsaWRhdGlvbiBzZXJ2ZXItc2lkZVxuICpcbiAqICoqTGlmZXRpbWU6KipcbiAqIC0gQ3JlZGVudGlhbHMgZXhpc3Qgb25seSBkdXJpbmcgdGhlIGJyb3dzZXIgdGFiJ3MgbGlmZXRpbWVcbiAqIC0gQ2xlYXJlZCBvbiBwYWdlIHJlbG9hZCwgdGFiIGNsb3NlLCBvciBtYW51YWwgZGlzY29ubmVjdFxuICogLSBOb3QgYWNjZXNzaWJsZSBhY3Jvc3MgdGFicyBvciBhZnRlciBicm93c2VyIHJlc3RhcnRcbiAqXG4gKiAqKldoYXQgR2V0cyBSZXBsYXllZDoqKlxuICogLSBDcmVkZW50aWFscyAodXNlcm5hbWUvcGFzc3dvcmQvdG9rZW5zIHNlbnQgdmlhIGNyZWRlbnRpYWxzIGV2ZW50KVxuICogLSBBY3Rpdml0eSBPYmplY3RzIChhY3RvciBkZWZpbml0aW9ucylcbiAqIC0gQ29ubmVjdCBjb21tYW5kcyAocGxhdGZvcm0gY29ubmVjdGlvbnMpXG4gKiAtIEpvaW4gY29tbWFuZHMgKHJvb20vY2hhbm5lbCBqb2lucylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGNsaWVudFxuICogY29uc3Qgc29ja2V0ID0gaW8oJ2h0dHA6Ly9sb2NhbGhvc3Q6MTA1NTAnKTtcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBTb2NrZXRodWJDbGllbnQoc29ja2V0KTtcbiAqXG4gKiAvLyBXYWl0IGZvciBzY2hlbWEgcmVnaXN0cnkgYmVmb3JlIHNlbmRpbmcgbWVzc2FnZXNcbiAqIGF3YWl0IGNsaWVudC5yZWFkeSgpO1xuICpcbiAqIC8vIEJ1aWxkIGNhbm9uaWNhbCBAY29udGV4dCBmb3IgYSBwbGF0Zm9ybVxuICogY29uc3QgY3R4ID0gY2xpZW50LmNvbnRleHRGb3IoJ2lyYycpO1xuICpcbiAqIC8vIFNlbmQgY3JlZGVudGlhbHMgLSB0aGVzZSB3aWxsIGJlIHJlcGxheWVkIG9uIHJlY29ubmVjdGlvblxuICogY2xpZW50LnNvY2tldC5lbWl0KCdjcmVkZW50aWFscycsIHtcbiAqICAgJ0Bjb250ZXh0JzogY3R4LFxuICogICB0eXBlOiAnY3JlZGVudGlhbHMnLFxuICogICBhY3RvcjogeyBpZDogJ3VzZXJAZXhhbXBsZS5jb20nLCB0eXBlOiAncGVyc29uJyB9LFxuICogICBvYmplY3Q6IHsgdHlwZTogJ2NyZWRlbnRpYWxzJywgdXNlcm5hbWU6ICd1c2VyJywgcGFzc3dvcmQ6ICdwYXNzJyB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTb2NrZXRodWJDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEluLW1lbW9yeSBzdG9yYWdlIGZvciBjbGllbnQgc3RhdGUgdGhhdCBzaG91bGQgYmUgcmVwbGF5ZWQgb24gcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogU2VjdXJpdHk6IFN0b3JlZCBPTkxZIGluIEphdmFTY3JpcHQgaGVhcCBtZW1vcnkuIE5ldmVyIHBlcnNpc3RlZCB0byBkaXNrLFxuICAgICAqIGxvY2FsU3RvcmFnZSwgb3IgYW55IHBlcm1hbmVudCBzdG9yYWdlLiBDbGVhcmVkIG9uIHBhZ2UgcmVsb2FkLlxuICAgICAqL1xuICAgIHByaXZhdGUgZXZlbnRzOiBFdmVudE1hcHBpbmcgPSB7XG4gICAgICAgIGNyZWRlbnRpYWxzOiBuZXcgTWFwKCksXG4gICAgICAgIGNvbm5lY3Q6IG5ldyBNYXAoKSxcbiAgICAgICAgam9pbjogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgcHJpdmF0ZSBfc29ja2V0OiBTb2NrZXQ7XG4gICAgcHVibGljIHNvY2tldCE6IEN1c3RvbUVtaXR0ZXI7XG4gICAgcHVibGljIGRlYnVnID0gdHJ1ZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPFNvY2tldGh1YkNsaWVudE9wdGlvbnM+O1xuICAgIHByaXZhdGUgcGxhdGZvcm1SZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnk+KCk7XG4gICAgcHJpdmF0ZSBhc0NvbnRleHRVcmw/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzb2NrZXRodWJDb250ZXh0VXJsPzogc3RyaW5nO1xuICAgIHByaXZhdGUgc29ja2V0aHViVmVyc2lvbj86IHN0cmluZztcbiAgICBwcml2YXRlIGluaXRTdGF0ZTogSW5pdFN0YXRlID0gXCJpZGxlXCI7XG4gICAgcHJpdmF0ZSBoYXNSZWFkeU9uY2UgPSBmYWxzZTtcbiAgICBwcml2YXRlIGluaXRDeWNsZT86IEluaXRpYWxpemF0aW9uQ3ljbGU7XG4gICAgcHJpdmF0ZSBpbml0VG9rZW5Db3VudGVyID0gMDtcbiAgICBwcml2YXRlIGluaXRUaW1lb3V0VGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICBwcml2YXRlIHdhaXRpbmdXYXJuaW5nVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gICAgcHJpdmF0ZSB3YWl0aW5nV2FybmluZ0ludGVydmFsTXMgPSAxMDAwMDtcbiAgICBwcml2YXRlIHJlYWR5V2FpdGVyczogQXJyYXk8UGVuZGluZ1JlYWR5V2FpdGVyPiA9IFtdO1xuICAgIHByaXZhdGUgb3V0Ym91bmRRdWV1ZTogQXJyYXk8UXVldWVkT3V0Ym91bmRFdmVudD4gPSBbXTtcbiAgICBwcml2YXRlIG91dGJvdW5kU2VxdWVuY2UgPSAwO1xuICAgIHByaXZhdGUgcmVnaXN0cnlGaW5nZXJwcmludD86IHN0cmluZztcbiAgICBwcml2YXRlIGxhdGVzdFJlYWR5SW5mbz86IENsaWVudFJlYWR5SW5mbztcblxuICAgIGNvbnN0cnVjdG9yKHNvY2tldDogU29ja2V0LCBvcHRpb25zOiBTb2NrZXRodWJDbGllbnRPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvY2tldGh1YkNsaWVudCByZXF1aXJlcyBhIHNvY2tldC5pbyBpbnN0YW5jZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGluaXRUaW1lb3V0TXM6IG9wdGlvbnMuaW5pdFRpbWVvdXRNcyA/PyA1MDAwLFxuICAgICAgICAgICAgbWF4UXVldWVkT3V0Ym91bmQ6IG9wdGlvbnMubWF4UXVldWVkT3V0Ym91bmQgPz8gMTAwMCxcbiAgICAgICAgICAgIG1heFF1ZXVlZEFnZU1zOiBvcHRpb25zLm1heFF1ZXVlZEFnZU1zID8/IDMwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc29ja2V0ID0gdGhpcy5jcmVhdGVQdWJsaWNFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTb2NrZXRJT0hhbmRsZXJzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NvY2tldC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAodGhpcy5zb2NrZXQgYXMgdW5rbm93biBhcyB7IGlkPzogc3RyaW5nIH0pLmlkID0gdGhpcy5fc29ja2V0LmlkO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjb25uZWN0XCIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEluaXRpYWxpemF0aW9uKFwiaW5pdGlhbC1jb25uZWN0XCIsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgc3RvcmVkIGNyZWRlbnRpYWxzIHRvIHByZXZlbnQgYXV0b21hdGljIHJlcGxheSBvbiByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCBzdG9yZWQgY3JlZGVudGlhbHMgZnJvbSBtZW1vcnkuIFVzZWZ1bCBmb3JcbiAgICAgKiBzZWN1cml0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBwcmV2ZW50IGF1dG9tYXRpYyBjcmVkZW50aWFsXG4gICAgICogcmVwbGF5IHdoZW4gdGhlIHNvY2tldCByZWNvbm5lY3RzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gQ2xlYXIgY3JlZGVudGlhbHMgb24gZGlzY29ubmVjdFxuICAgICAqIHNjLnNvY2tldC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgKiAgIHNjLmNsZWFyQ3JlZGVudGlhbHMoKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJDcmVkZW50aWFscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldmVudHMuY3JlZGVudGlhbHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5IGRpc2NvdmVyZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSZWdpc3RlcmVkUGxhdGZvcm1zKCk6IEFycmF5PFBsYXRmb3JtUmVnaXN0cnlFbnRyeT4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBsYXRmb3JtUmVnaXN0cnkudmFsdWVzKCkpLm1hcCgocGxhdGZvcm0pID0+ICh7XG4gICAgICAgICAgICAuLi5wbGF0Zm9ybSxcbiAgICAgICAgICAgIHR5cGVzOiBbLi4ucGxhdGZvcm0udHlwZXNdLFxuICAgICAgICAgICAgc2NoZW1hczogeyAuLi5wbGF0Zm9ybS5zY2hlbWFzIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBzZXJ2ZXItcHJvdmlkZWQgc2NoZW1hL2NvbnRleHQgcmVnaXN0cnkgZGF0YSBpcyBsb2FkZWQuXG4gICAgICovXG4gICAgcHVibGljIGlzU2NoZW1hc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JlYWR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsaWVudCBoYXMgY29tcGxldGVkIHNjaGVtYSBpbml0aWFsaXphdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFN0YXRlID09PSBcInJlYWR5XCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBjbGllbnQgaW5pdGlhbGl6YXRpb24gc3RhdGUuXG4gICAgICovXG4gICAgcHVibGljIGdldEluaXRTdGF0ZSgpOiBJbml0U3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0U3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjYW5vbmljYWwgYmFzZSBjb250ZXh0cyBsZWFybmVkIGZyb20gdGhlIHNlcnZlciByZWdpc3RyeS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UmVnaXN0ZXJlZEJhc2VDb250ZXh0cygpOiB7IGFzOiBzdHJpbmc7IHNvY2tldGh1Yjogc3RyaW5nIH0ge1xuICAgICAgICBpZiAoIXRoaXMuYXNDb250ZXh0VXJsIHx8ICF0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlNjaGVtYSByZWdpc3RyeSBub3QgbG9hZGVkIHlldC4gV2FpdCBmb3IgY2xpZW50IHJlYWR5IHN0YXRlIGFmdGVyIGNvbm5lY3QuXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhczogdGhpcy5hc0NvbnRleHRVcmwsXG4gICAgICAgICAgICBzb2NrZXRodWI6IHRoaXMuc29ja2V0aHViQ29udGV4dFVybCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGxhdGZvcm1TY2hlbWEoXG4gICAgICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgICAgIHNjaGVtYVR5cGU6IFwibWVzc2FnZXNcIiB8IFwiY3JlZGVudGlhbHNcIiA9IFwibWVzc2FnZXNcIixcbiAgICApOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGxhdGZvcm0gPSBwbGF0Zm9ybT8udHJpbSgpO1xuICAgICAgICBpZiAoIW5vcm1hbGl6ZWRQbGF0Zm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LmdldChub3JtYWxpemVkUGxhdGZvcm0pPy5zY2hlbWFzPy5bXG4gICAgICAgICAgICBzY2hlbWFUeXBlXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2FpdCBmb3Igc2NoZW1hIHJlZ2lzdHJ5IGRhdGEgZnJvbSB0aGUgc2VydmVyIGFuZCByZXR1cm4gdGhlIG5vcm1hbGl6ZWQgcGF5bG9hZC5cbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgcmVhZHkodGltZW91dE1zPykgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgd2FpdEZvclNjaGVtYXMoXG4gICAgICAgIHRpbWVvdXRNcyA9IDIwMDAsXG4gICAgKTogUHJvbWlzZTxQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlYWR5KHRpbWVvdXRNcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYWl0IHVudGlsIHRoZSBjbGllbnQgcmVhY2hlcyBhIHJlYWR5IHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkeShcbiAgICAgICAgdGltZW91dE1zID0gdGhpcy5vcHRpb25zLmluaXRUaW1lb3V0TXMsXG4gICAgKTogUHJvbWlzZTxDbGllbnRSZWFkeUluZm8+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpICYmIHRoaXMubGF0ZXN0UmVhZHlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMubGF0ZXN0UmVhZHlJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2FpdGVyOiBQZW5kaW5nUmVhZHlXYWl0ZXIgPSB7IHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgICAgICAgaWYgKHRpbWVvdXRNcyA+IDApIHtcbiAgICAgICAgICAgICAgICB3YWl0ZXIudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeVdhaXRlcnMgPSB0aGlzLnJlYWR5V2FpdGVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZW50cnkpID0+IGVudHJ5ICE9PSB3YWl0ZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHJlYWR5KCkgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVhZHlXYWl0ZXJzLnB1c2god2FpdGVyKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvY2tldC5jb25uZWN0ZWQgJiYgdGhpcy5pbml0U3RhdGUgPT09IFwiaWRsZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEluaXRpYWxpemF0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JlYWR5T25jZSA/IFwicmVjb25uZWN0XCIgOiBcImluaXRpYWwtY29ubmVjdFwiLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGFuIGFjdGl2aXR5IHN0cmVhbSBhZ2FpbnN0IGN1cnJlbnRseSByZWdpc3RlcmVkIHBsYXRmb3JtIHNjaGVtYXMuXG4gICAgICogUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiB2YWxpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcge1xuICAgICAgICBpZiAoYWN0aXZpdHkudHlwZSA9PT0gXCJjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVDcmVkZW50aWFscyhhY3Rpdml0eSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlQWN0aXZpdHlTdHJlYW0oYWN0aXZpdHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkIGNhbm9uaWNhbCBTb2NrZXRodWIgY29udGV4dHMgZm9yIGEgcGxhdGZvcm0gdXNpbmcgc2VydmVyLXByb3ZpZGVkIHNjaGVtYSBtZXRhZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGV4dEZvcihwbGF0Zm9ybTogc3RyaW5nKTogQWN0aXZpdHlTdHJlYW1bXCJAY29udGV4dFwiXSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGxhdGZvcm0gIT09IFwic3RyaW5nXCIgfHwgcGxhdGZvcm0udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiU29ja2V0aHViQ2xpZW50LmNvbnRleHRGb3IocGxhdGZvcm0pIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHBsYXRmb3JtIHN0cmluZ1wiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hc0NvbnRleHRVcmwgfHwgIXRoaXMuc29ja2V0aHViQ29udGV4dFVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiU2NoZW1hIHJlZ2lzdHJ5IG5vdCBsb2FkZWQgeWV0LiBXYWl0IGZvciBjbGllbnQgcmVhZHkgc3RhdGUgYWZ0ZXIgY29ubmVjdC5cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3JtYWxpemVkUGxhdGZvcm0gPSBwbGF0Zm9ybS50cmltKCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LmdldChub3JtYWxpemVkUGxhdGZvcm0pO1xuICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IEFycmF5LmZyb20odGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LmtleXMoKSkuc29ydCgpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGB1bmtub3duIHBsYXRmb3JtICcke25vcm1hbGl6ZWRQbGF0Zm9ybX0nLiBSZWdpc3RlcmVkIHBsYXRmb3JtczogJHtuYW1lcy5qb2luKFwiLCBcIil9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0aGlzLmFzQ29udGV4dFVybCwgdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsLCBlbnRyeS5jb250ZXh0VXJsXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVB1YmxpY0VtaXR0ZXIoKTogQ3VzdG9tRW1pdHRlciB7XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldyBFdmVudEVtaXR0ZXIoKSBhcyBDdXN0b21FbWl0dGVyO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgc29ja2V0Ll9lbWl0ID0gc29ja2V0LmVtaXQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBzb2NrZXQuZW1pdCA9IChldmVudCwgY29udGVudCwgY2FsbGJhY2spOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUHVibGljRW1pdChldmVudCBhcyBzdHJpbmcsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICAgICAgc29ja2V0LmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICBzb2NrZXQuZGlzY29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5kaXNjb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5jb25uZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmNvbm5lY3QoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNvY2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBc2sgc2VydmVyIGZvciB0aGUgbGF0ZXN0IHBsYXRmb3JtL2NvbnRleHQgcmVnaXN0cnkgdmlhIGFjayBjYWxsYmFjay5cbiAgICAgKiBUaGlzIGtlZXBzIGNsaWVudCBjb250ZXh0IGNvbXBvc2l0aW9uIGFsaWduZWQgd2l0aCBzZXJ2ZXIgc2NoZW1hIHN0YXRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVxdWVzdFNjaGVtYVJlZ2lzdHJ5KCkge1xuICAgICAgICBjb25zdCBzb2NrZXRMaWtlID0gdGhpcy5fc29ja2V0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGlmICghKFwiaW9cIiBpbiBzb2NrZXRMaWtlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVjaG8gdGhlIGZpbmdlcnByaW50IHdlIGxhc3QgYXBwbGllZCBzbyB0aGUgc2VydmVyIGNhbiBzaG9ydC1jaXJjdWl0XG4gICAgICAgIC8vIHdpdGggYW4gXCJ1bmNoYW5nZWRcIiByZXBseSBvbiByZWNvbm5lY3QvcmUtcmVxdWVzdCAoIzExMTcpLlxuICAgICAgICB0aGlzLl9zb2NrZXQuZW1pdChcbiAgICAgICAgICAgIFwic2NoZW1hc1wiLFxuICAgICAgICAgICAgdGhpcy5yZWdpc3RyeUZpbmdlcnByaW50LFxuICAgICAgICAgICAgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNjaGVtYXNQYXlsb2FkKHBheWxvYWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBzZXJ2ZXItcHJvdmlkZWQgcmVnaXN0cnkgbWV0YWRhdGEgdG8gbG9jYWwgcnVudGltZSBzdGF0ZS5cbiAgICAgKiBBbHNvIHJlZ2lzdGVycyBwbGF0Zm9ybSBjb250ZXh0cy9zY2hlbWFzIHdpdGggQHNvY2tldGh1Yi9zY2hlbWFzIHZhbGlkYXRvcnNcbiAgICAgKiBzbyBsb2NhbCB2YWxpZGF0aW9uIHVzZXMgdGhlIHNhbWUgY2Fub25pY2FsIHNvdXJjZXMgYXMgdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGx5UGxhdGZvcm1SZWdpc3RyeShcbiAgICAgICAgcGF5bG9hZDogdW5rbm93bixcbiAgICApOiBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghcGF5bG9hZCB8fCB0eXBlb2YgcGF5bG9hZCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IHBheWxvYWQgYXMgUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQ7XG4gICAgICAgIGNvbnN0IGFzQ29udGV4dFVybCA9IHJlZ2lzdHJ5LmNvbnRleHRzPy5hcztcbiAgICAgICAgY29uc3Qgc29ja2V0aHViQ29udGV4dFVybCA9IHJlZ2lzdHJ5LmNvbnRleHRzPy5zb2NrZXRodWI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBhc0NvbnRleHRVcmwgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBzb2NrZXRodWJDb250ZXh0VXJsICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShyZWdpc3RyeS5wbGF0Zm9ybXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNvY2tldGh1YlZlcnNpb24gPVxuICAgICAgICAgICAgdHlwZW9mIHJlZ2lzdHJ5LnZlcnNpb24gPT09IFwic3RyaW5nXCIgPyByZWdpc3RyeS52ZXJzaW9uIDogXCJ1bmtub3duXCI7XG4gICAgICAgIHRoaXMuYXNDb250ZXh0VXJsID0gYXNDb250ZXh0VXJsO1xuICAgICAgICB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwgPSBzb2NrZXRodWJDb250ZXh0VXJsO1xuXG4gICAgICAgIHRoaXMucGxhdGZvcm1SZWdpc3RyeS5jbGVhcigpO1xuICAgICAgICBmb3IgKGNvbnN0IHBsYXRmb3JtIG9mIHJlZ2lzdHJ5LnBsYXRmb3Jtcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFwbGF0Zm9ybSB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybSAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybS5pZCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybS52ZXJzaW9uICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtLmNvbnRleHRVcmwgIT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LnNldChwbGF0Zm9ybS5pZCwge1xuICAgICAgICAgICAgICAgIC4uLnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHBsYXRmb3JtLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgdHlwZXM6IEFycmF5LmlzQXJyYXkocGxhdGZvcm0udHlwZXMpID8gcGxhdGZvcm0udHlwZXMgOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFzOiBwbGF0Zm9ybS5zY2hlbWFzIHx8IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhZGRQbGF0Zm9ybUNvbnRleHQocGxhdGZvcm0uaWQsIHBsYXRmb3JtLmNvbnRleHRVcmwpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcmVkU2NoZW1hID0gcGxhdGZvcm0uc2NoZW1hcz8uY3JlZGVudGlhbHM7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjcmVkU2NoZW1hICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjcmVkU2NoZW1hID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGNyZWRTY2hlbWEpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFBsYXRmb3JtU2NoZW1hKGNyZWRTY2hlbWEsIGAke3BsYXRmb3JtLmlkfS9jcmVkZW50aWFsc2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtc2dTY2hlbWEgPSBwbGF0Zm9ybS5zY2hlbWFzPy5tZXNzYWdlcztcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1zZ1NjaGVtYSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbXNnU2NoZW1hID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KG1zZ1NjaGVtYSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGxhdGZvcm1TY2hlbWEobXNnU2NoZW1hLCBgJHtwbGF0Zm9ybS5pZH0vbWVzc2FnZXNgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdIEZhaWxlZCB0byByZWdpc3RlciBzY2hlbWFzIGZvciBwbGF0Zm9ybSAke3BsYXRmb3JtLmlkfTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3JtYWxpemVkUGF5bG9hZCA9IHRoaXMuYnVpbGRQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCgpO1xuICAgICAgICAvLyBEZWR1cCBvbmx5IG9uIHRoZSBzZXJ2ZXIncyBmaW5nZXJwcmludCwgd2hpY2ggaXMgY29tcHV0ZWQgb3ZlciB0aGVcbiAgICAgICAgLy8gZnVsbCBwYXlsb2FkIChpbmNsdWRpbmcgc2NoZW1hIGJvZGllcyBhbmQgdHlwZXMpLiBXaXRob3V0IG9uZSB3ZSBsZWF2ZVxuICAgICAgICAvLyB0aGUgZmluZ2VycHJpbnQgdW5zZXQgc28gaGFuZGxlU2NoZW1hc1BheWxvYWQgbmV2ZXIgc2hvcnQtY2lyY3VpdHMgYW5kXG4gICAgICAgIC8vIGEgc2NoZW1hIGNoYW5nZSBjYW4ndCBiZSBzaWxlbnRseSBtaXNzZWQgKCMxMTE3IHJldmlldykuXG4gICAgICAgIHRoaXMucmVnaXN0cnlGaW5nZXJwcmludCA9XG4gICAgICAgICAgICB0eXBlb2YgcmVnaXN0cnkuZmluZ2VycHJpbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IHJlZ2lzdHJ5LmZpbmdlcnByaW50XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIEVtaXQgbm9ybWFsaXplZCByZWdpc3RyeSBwYXlsb2FkIHNvIGFwcCBjb2RlIHJlY2VpdmVzIGEgc3RhYmxlIHNoYXBlLlxuICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcInNjaGVtYXNcIiwgbm9ybWFsaXplZFBheWxvYWQpO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBheWxvYWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudENyZWRlbnRpYWxzKGNvbnRlbnQ6IEFjdGl2aXR5U3RyZWFtKSB7XG4gICAgICAgIGlmIChjb250ZW50Lm9iamVjdCAmJiBjb250ZW50Lm9iamVjdC50eXBlID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleTogc3RyaW5nID1cbiAgICAgICAgICAgICAgICBjb250ZW50LmFjdG9yLmlkIHx8IChjb250ZW50LmFjdG9yIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLnNldChrZXksIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudE1lc3NhZ2UoY29udGVudDogQWN0aXZpdHlTdHJlYW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zb2NrZXQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWl0aGVyIHN0b3JlcyBvciBkZWxldGUgdGhlIHNwZWNpZmllZCBjb250ZW50IG9udG8gdGhlIHN0b3JlZEpvaW5zIG1hcCxcbiAgICAgICAgLy8gZm9yIHJlcGx5IG9uY2Ugd2UncmUgYmFjayBvbmxpbmUuXG4gICAgICAgIGNvbnN0IGtleSA9IFNvY2tldGh1YkNsaWVudC5nZXRLZXkoY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09IFwiam9pblwiIHx8IGNvbnRlbnQudHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzW2NvbnRlbnQudHlwZV0uc2V0KGtleSwgY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImxlYXZlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmpvaW4uZGVsZXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImRpc2Nvbm5lY3RcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEtleShjb250ZW50OiBBY3Rpdml0eVN0cmVhbSkge1xuICAgICAgICBjb25zdCBhY3RvciA9IGNvbnRlbnQuYWN0b3I/LmlkIHx8IGNvbnRlbnQuYWN0b3I7XG4gICAgICAgIGlmICghYWN0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgYWN0b3IgcHJvcGVydHkgbm90IHByZXNlbnQgZm9yIG1lc3NhZ2UgdHlwZTogJHtjb250ZW50Py50eXBlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA/IGNvbnRlbnQudGFyZ2V0LmlkIHx8IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHthY3Rvcn0tJHt0YXJnZXR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQoKTogUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5zb2NrZXRodWJWZXJzaW9uLFxuICAgICAgICAgICAgY29udGV4dHM6XG4gICAgICAgICAgICAgICAgdGhpcy5hc0NvbnRleHRVcmwgJiYgdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhczogdGhpcy5hc0NvbnRleHRVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldGh1YjogdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBwbGF0Zm9ybXM6IHRoaXMuZ2V0UmVnaXN0ZXJlZFBsYXRmb3JtcygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRSZWFkeUluZm8ocmVhc29uOiBSZWFkeVJlYXNvbik6IENsaWVudFJlYWR5SW5mbyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnNvY2tldGh1YlZlcnNpb24gfHxcbiAgICAgICAgICAgICF0aGlzLmFzQ29udGV4dFVybCB8fFxuICAgICAgICAgICAgIXRoaXMuc29ja2V0aHViQ29udGV4dFVybFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXRlOiBcInJlYWR5XCIsXG4gICAgICAgICAgICByZWFzb24sXG4gICAgICAgICAgICBzb2NrZXRodWJWZXJzaW9uOiB0aGlzLnNvY2tldGh1YlZlcnNpb24sXG4gICAgICAgICAgICBjb250ZXh0czoge1xuICAgICAgICAgICAgICAgIGFzOiB0aGlzLmFzQ29udGV4dFVybCxcbiAgICAgICAgICAgICAgICBzb2NrZXRodWI6IHRoaXMuc29ja2V0aHViQ29udGV4dFVybCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbGF0Zm9ybXM6IHRoaXMuZ2V0UmVnaXN0ZXJlZFBsYXRmb3JtcygpLm1hcCgocGxhdGZvcm0pID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IHBsYXRmb3JtLmlkLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHBsYXRmb3JtLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgY29udGV4dFVybDogcGxhdGZvcm0uY29udGV4dFVybCxcbiAgICAgICAgICAgICAgICBjb250ZXh0VmVyc2lvbjogcGxhdGZvcm0uY29udGV4dFZlcnNpb24sXG4gICAgICAgICAgICAgICAgc2NoZW1hVmVyc2lvbjogcGxhdGZvcm0uc2NoZW1hVmVyc2lvbixcbiAgICAgICAgICAgICAgICB0eXBlczogWy4uLnBsYXRmb3JtLnR5cGVzXSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVSZWFkeVdhaXRlcnMoaW5mbzogQ2xpZW50UmVhZHlJbmZvKSB7XG4gICAgICAgIGNvbnN0IHdhaXRlcnMgPSB0aGlzLnJlYWR5V2FpdGVycztcbiAgICAgICAgdGhpcy5yZWFkeVdhaXRlcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB3YWl0ZXIgb2Ygd2FpdGVycykge1xuICAgICAgICAgICAgaWYgKHdhaXRlci50aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh3YWl0ZXIudGltZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2FpdGVyLnJlc29sdmUoaW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlamVjdFJlYWR5V2FpdGVycyhlcnI6IEVycm9yKSB7XG4gICAgICAgIGNvbnN0IHdhaXRlcnMgPSB0aGlzLnJlYWR5V2FpdGVycztcbiAgICAgICAgdGhpcy5yZWFkeVdhaXRlcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB3YWl0ZXIgb2Ygd2FpdGVycykge1xuICAgICAgICAgICAgaWYgKHdhaXRlci50aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh3YWl0ZXIudGltZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2FpdGVyLnJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0SW5pdEVycm9yKFxuICAgICAgICBlcnJvcjogc3RyaW5nLFxuICAgICAgICBwaGFzZTogSW5pdEVycm9yUGhhc2UsXG4gICAgICAgIHJldHJ5aW5nOiBib29sZWFuLFxuICAgICkge1xuICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcImluaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBwaGFzZSxcbiAgICAgICAgICAgIHJldHJ5aW5nLFxuICAgICAgICB9IHNhdGlzZmllcyBDbGllbnRJbml0RXJyb3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdENsaWVudEVycm9yKFxuICAgICAgICBldmVudDogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogdW5rbm93bixcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gICAgKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgY2FsbGJhY2soeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiY2xpZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckluaXRUaW1lcnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRUaW1lb3V0VGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluaXRUaW1lb3V0VGltZXIpO1xuICAgICAgICAgICAgdGhpcy5pbml0VGltZW91dFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndhaXRpbmdXYXJuaW5nVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy53YWl0aW5nV2FybmluZ1RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRXYWl0aW5nV2FybmluZ3MoKSB7XG4gICAgICAgIGlmICh0aGlzLndhaXRpbmdXYXJuaW5nVGltZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndhaXRpbmdXYXJuaW5nVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkgfHwgdGhpcy5pbml0U3RhdGUgPT09IFwiY2xvc2VkXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySW5pdFRpbWVycygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHF1ZXVlU2l6ZSA9IHRoaXMub3V0Ym91bmRRdWV1ZS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBvbGRlc3QgPSB0aGlzLm91dGJvdW5kUXVldWVbMF07XG4gICAgICAgICAgICBjb25zdCBvbGRlc3RBZ2VTZWNvbmRzID0gb2xkZXN0XG4gICAgICAgICAgICAgICAgPyAoKERhdGUubm93KCkgLSBvbGRlc3QuZW5xdWV1ZWRBdCkgLyAxMDAwKS50b0ZpeGVkKDEpXG4gICAgICAgICAgICAgICAgOiBcIjAuMFwiO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGBbU29ja2V0aHViQ2xpZW50XSBTdGlsbCB3YWl0aW5nIGZvciBzY2hlbWFzOyBxdWV1ZWQgb3V0Ym91bmQgbWVzc2FnZXM6ICR7cXVldWVTaXplfTsgb2xkZXN0IHF1ZXVlZCBhZ2U6ICR7b2xkZXN0QWdlU2Vjb25kc31zLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9LCB0aGlzLndhaXRpbmdXYXJuaW5nSW50ZXJ2YWxNcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydEluaXRpYWxpemF0aW9uKHJlYXNvbjogUmVhZHlSZWFzb24sIHJlcGxheU9uUmVhZHk6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvY2tldC5jb25uZWN0ZWQgfHwgdGhpcy5pbml0U3RhdGUgPT09IFwiY2xvc2VkXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRva2VuID0gKyt0aGlzLmluaXRUb2tlbkNvdW50ZXI7XG4gICAgICAgIHRoaXMuaW5pdEN5Y2xlID0ge1xuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICByZWFzb24sXG4gICAgICAgICAgICBzdGFydGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICByZXBsYXlPblJlYWR5LFxuICAgICAgICAgICAgdGltZWRPdXQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaW5pdGlhbGl6aW5nXCI7XG4gICAgICAgIHRoaXMuY2xlYXJJbml0VGltZXJzKCk7XG5cbiAgICAgICAgdGhpcy5pbml0VGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5pdEN5Y2xlIHx8IHRoaXMuaW5pdEN5Y2xlLnRva2VuICE9PSB0b2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdEN5Y2xlLnRpbWVkT3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0X2Vycm9yXCI7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0TXNnID0gYEluaXRpYWxpemF0aW9uIHRpbWVkIG91dCBhZnRlciAke3RoaXMub3B0aW9ucy5pbml0VGltZW91dE1zfW1zIHdhaXRpbmcgZm9yIHNjaGVtYXNgO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGBbU29ja2V0aHViQ2xpZW50XSAke3RpbWVvdXRNc2d9OyBxdWV1ZWQgb3V0Ym91bmQgbWVzc2FnZXM6ICR7dGhpcy5vdXRib3VuZFF1ZXVlLmxlbmd0aH0uIFdhaXRpbmcgZm9yIHNjaGVtYXMgZXZlbnQgZnJvbSBzZXJ2ZXIuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbml0RXJyb3IodGltZW91dE1zZywgXCJ0aW1lb3V0XCIsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXYWl0aW5nV2FybmluZ3MoKTtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmluaXRUaW1lb3V0TXMpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBQdWxsIHRoZSBsYXRlc3QgcmVnaXN0cnkgZnJvbSB0aGUgc2VydmVyIGZvciB0aGlzIGluaXQgY3ljbGUuXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RTY2hlbWFSZWdpc3RyeSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0X2Vycm9yXCI7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0SW5pdEVycm9yKG1lc3NhZ2UsIFwic2NoZW1hcy1yZXF1ZXN0XCIsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXYWl0aW5nV2FybmluZ3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFya1JlYWR5KHJlYXNvbjogUmVhZHlSZWFzb24pIHtcbiAgICAgICAgY29uc3QgY3ljbGUgPSB0aGlzLmluaXRDeWNsZTtcbiAgICAgICAgY29uc3QgcmVwbGF5T25SZWFkeSA9IEJvb2xlYW4oY3ljbGU/LnJlcGxheU9uUmVhZHkpO1xuICAgICAgICB0aGlzLmluaXRDeWNsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jbGVhckluaXRUaW1lcnMoKTtcbiAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcInJlYWR5XCI7XG4gICAgICAgIHRoaXMuaGFzUmVhZHlPbmNlID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5idWlsZFJlYWR5SW5mbyhyZWFzb24pO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihcIkZhaWxlZCB0byBidWlsZCByZWFkeSBwYXlsb2FkXCIpO1xuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRfZXJyb3JcIjtcbiAgICAgICAgICAgIHRoaXMuZW1pdEluaXRFcnJvcihlcnIubWVzc2FnZSwgXCJzY2hlbWFzLWFwcGx5XCIsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5yZWplY3RSZWFkeVdhaXRlcnMoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcInJlYWR5XCIsIGluZm8pO1xuICAgICAgICB0aGlzLmxhdGVzdFJlYWR5SW5mbyA9IGluZm87XG4gICAgICAgIHRoaXMucmVzb2x2ZVJlYWR5V2FpdGVycyhpbmZvKTtcblxuICAgICAgICBpZiAocmVwbGF5T25SZWFkeSkge1xuICAgICAgICAgICAgLy8gUmVwbGF5IHByZXZpb3VzbHkgc2VudCBzdGF0ZSBiZWZvcmUgZmx1c2hpbmcgbmV3bHkgcXVldWVkIG91dGJvdW5kIGV2ZW50cy5cbiAgICAgICAgICAgIHRoaXMucmVwbGF5KFwiY3JlZGVudGlhbHNcIiwgdGhpcy5ldmVudHMuY3JlZGVudGlhbHMpO1xuICAgICAgICAgICAgdGhpcy5yZXBsYXkoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRzLmNvbm5lY3QpO1xuICAgICAgICAgICAgdGhpcy5yZXBsYXkoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRzLmpvaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mbHVzaE91dGJvdW5kUXVldWUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNjaGVtYXNQYXlsb2FkKHBheWxvYWQ6IHVua25vd24pIHtcbiAgICAgICAgaWYgKCFwYXlsb2FkIHx8IHR5cGVvZiBwYXlsb2FkICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2VydmVyIHNob3J0LWNpcmN1aXQ6IHRoZSByZWdpc3RyeSBtYXRjaGVzIHRoZSBmaW5nZXJwcmludCB3ZSBlY2hvZWQsXG4gICAgICAgIC8vIHNvIG5vdGhpbmcgd2FzIHJlLXNlbnQgKCMxMTE3KS4gT25seSBob25vciB0aGlzIHdoZW4gd2UgYWN0dWFsbHkgaG9sZFxuICAgICAgICAvLyBhIGNhY2hlZCByZWdpc3RyeSB0byByZXVzZSDigJQgYSBtYWxmb3JtZWQgb3IgZW1wdHkgXCJ1bmNoYW5nZWRcIiByZXBseVxuICAgICAgICAvLyBtdXN0IG5vdCBmYXN0LXBhdGggaW5pdCB0byByZWFkeSB3aXRoIG5vIHZhbGlkYXRvcnMgcmVnaXN0ZXJlZC5cbiAgICAgICAgaWYgKChwYXlsb2FkIGFzIFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkKS51bmNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhdmVDYWNoZWRSZWdpc3RyeSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMucmVnaXN0cnlGaW5nZXJwcmludCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIHRoaXMucGxhdGZvcm1SZWdpc3RyeS5zaXplID4gMDtcbiAgICAgICAgICAgIGlmIChoYXZlQ2FjaGVkUmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0Q3ljbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrUmVhZHkodGhpcy5pbml0Q3ljbGUucmVhc29uKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5pdFN0YXRlICE9PSBcInJlYWR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrUmVhZHkoXCJzY2hlbWFzLXVwZGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTm90aGluZyBjYWNoZWQgdG8gcmV1c2U6IGZhbGwgdGhyb3VnaCBzbyBhcHBseVBsYXRmb3JtUmVnaXN0cnlcbiAgICAgICAgICAgIC8vIHJlamVjdHMgdGhlIGNvbnRlbnRsZXNzIHBheWxvYWQgYW5kIHN1cmZhY2VzIGFuIGluaXQgZXJyb3IuXG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVkdXAgb25seSBhZ2FpbnN0IHRoZSBzZXJ2ZXItc3VwcGxpZWQgZmluZ2VycHJpbnQgKHdoaWNoIGlzIHdoYXQgd2VcbiAgICAgICAgLy8gc3RvcmVkIGluIGFwcGx5UGxhdGZvcm1SZWdpc3RyeSk7IGFic2VudCBvbmUsIGFsd2F5cyByZS1hcHBseS5cbiAgICAgICAgY29uc3QgaW5jb21pbmdGaW5nZXJwcmludCA9IChwYXlsb2FkIGFzIFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkKVxuICAgICAgICAgICAgLmZpbmdlcnByaW50O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9PT0gXCJyZWFkeVwiICYmXG4gICAgICAgICAgICAhdGhpcy5pbml0Q3ljbGUgJiZcbiAgICAgICAgICAgIGluY29taW5nRmluZ2VycHJpbnQgJiZcbiAgICAgICAgICAgIGluY29taW5nRmluZ2VycHJpbnQgPT09IHRoaXMucmVnaXN0cnlGaW5nZXJwcmludFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluaXRTdGF0ZSA9PT0gXCJyZWFkeVwiICYmICF0aGlzLmluaXRDeWNsZSkge1xuICAgICAgICAgICAgLy8gQSBzZXJ2ZXItc2lkZSBzY2hlbWEgdXBkYXRlIGFycml2ZWQgd2hpbGUgYWxyZWFkeSBydW5uaW5nLlxuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRpYWxpemluZ1wiO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBheWxvYWQgPSB0aGlzLmFwcGx5UGxhdGZvcm1SZWdpc3RyeShwYXlsb2FkKTtcbiAgICAgICAgaWYgKCFub3JtYWxpemVkUGF5bG9hZCkge1xuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRfZXJyb3JcIjtcbiAgICAgICAgICAgIHRoaXMuZW1pdEluaXRFcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlY2VpdmVkIGludmFsaWQgc2NoZW1hcyBwYXlsb2FkIGZyb20gc2VydmVyXCIsXG4gICAgICAgICAgICAgICAgXCJzY2hlbWFzLWFwcGx5XCIsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2FpdGluZ1dhcm5pbmdzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbml0Q3ljbGUpIHtcbiAgICAgICAgICAgIHRoaXMubWFya1JlYWR5KHRoaXMuaW5pdEN5Y2xlLnJlYXNvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXJrUmVhZHkoXCJzY2hlbWFzLXVwZGF0ZVwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVB1YmxpY0VtaXQoXG4gICAgICAgIGV2ZW50OiBzdHJpbmcsXG4gICAgICAgIGNvbnRlbnQ6IHVua25vd24sXG4gICAgICAgIGNhbGxiYWNrPzogdW5rbm93bixcbiAgICApIHtcbiAgICAgICAgY29uc3QgcXVldWVkRXZlbnQ6IFF1ZXVlZE91dGJvdW5kRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIGVucXVldWVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICBzZXF1ZW5jZTogdGhpcy5vdXRib3VuZFNlcXVlbmNlKyssXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkge1xuICAgICAgICAgICAgLy8gSG9sZCBvdXRib3VuZCB1bnRpbCBzY2hlbWFzL2NvbnRleHQgbWV0YWRhdGEgaXMgbG9hZGVkLlxuICAgICAgICAgICAgdGhpcy5lbnF1ZXVlT3V0Ym91bmQocXVldWVkRXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VuZE91dGJvdW5kKHF1ZXVlZEV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVucXVldWVPdXRib3VuZChxdWV1ZWRFdmVudDogUXVldWVkT3V0Ym91bmRFdmVudCkge1xuICAgICAgICB0aGlzLm91dGJvdW5kUXVldWUucHVzaChxdWV1ZWRFdmVudCk7XG4gICAgICAgIGlmICh0aGlzLm91dGJvdW5kUXVldWUubGVuZ3RoIDw9IHRoaXMub3B0aW9ucy5tYXhRdWV1ZWRPdXRib3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRyb3BwZWQgPSB0aGlzLm91dGJvdW5kUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKCFkcm9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0Q2xpZW50RXJyb3IoXG4gICAgICAgICAgICBkcm9wcGVkLmV2ZW50LFxuICAgICAgICAgICAgZHJvcHBlZC5jYWxsYmFjayxcbiAgICAgICAgICAgIFwiU29ja2V0aHViQ2xpZW50IHF1ZXVlIG92ZXJmbG93IGJlZm9yZSByZWFkeVwiLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmx1c2hPdXRib3VuZFF1ZXVlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpIHx8IHRoaXMub3V0Ym91bmRRdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBxdWV1ZWQgPSB0aGlzLm91dGJvdW5kUXVldWUuc29ydChcbiAgICAgICAgICAgIChhLCBiKSA9PiBhLnNlcXVlbmNlIC0gYi5zZXF1ZW5jZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vdXRib3VuZFF1ZXVlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcXVldWVkKSB7XG4gICAgICAgICAgICBpZiAobm93IC0gZW50cnkuZW5xdWV1ZWRBdCA+IHRoaXMub3B0aW9ucy5tYXhRdWV1ZWRBZ2VNcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdENsaWVudEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5ldmVudCxcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgIGBTb2NrZXRodWJDbGllbnQgcXVldWVkIG1lc3NhZ2UgZXhwaXJlZCBhZnRlciAke3RoaXMub3B0aW9ucy5tYXhRdWV1ZWRBZ2VNc31tcyBiZWZvcmUgaW5pdGlhbGl6YXRpb25gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbmRPdXRib3VuZChlbnRyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbmRPdXRib3VuZChlbnRyeTogUXVldWVkT3V0Ym91bmRFdmVudCkge1xuICAgICAgICBsZXQgb3V0Z29pbmcgPSBlbnRyeS5jb250ZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmV2ZW50ID09PSBcImNyZWRlbnRpYWxzXCIgfHwgZW50cnkuZXZlbnQgPT09IFwibWVzc2FnZVwiKSB7XG4gICAgICAgICAgICAgICAgLy8gUnVuIGNhbm9uaWNhbCBleHBhbnNpb24vbm9ybWFsaXphdGlvbiBhdCBzZW5kIHRpbWUgc28gcXVldWVkIGFuZFxuICAgICAgICAgICAgICAgIC8vIGltbWVkaWF0ZSBzZW5kcyBmb2xsb3cgdGhlIGV4YWN0IHNhbWUgcGF0aC5cbiAgICAgICAgICAgICAgICBvdXRnb2luZyA9IG5vcm1hbGl6ZUFjdGl2aXR5U3RyZWFtKFxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5jb250ZW50IGFzIEFjdGl2aXR5U3RyZWFtLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG91dGdvaW5nICYmIHR5cGVvZiBvdXRnb2luZyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpdml0eSA9IG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuZXZlbnQgPT09IFwiY3JlZGVudGlhbHNcIiAmJiAhYWN0aXZpdHkudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHkudHlwZSA9IFwiY3JlZGVudGlhbHNcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eS5hY3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGFjdGl2aXR5LmFjdG9yID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhYWN0aXZpdHkuYWN0b3IudHlwZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LmFjdG9yLnR5cGUgPSBcInBlcnNvblwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtUmVnaXN0cnkuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gdGhpcy52YWxpZGF0ZUFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0Z29pbmcgYXMgQWN0aXZpdHlTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdENsaWVudEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBTb2NrZXRodWJDbGllbnQgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvbkVycm9yfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVudHJ5LmV2ZW50ID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50Q3JlZGVudGlhbHMob3V0Z29pbmcgYXMgQWN0aXZpdHlTdHJlYW0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5ldmVudCA9PT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50TWVzc2FnZShvdXRnb2luZyBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuZW1pdChlbnRyeS5ldmVudCwgb3V0Z29pbmcsIGVudHJ5LmNhbGxiYWNrKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2xpZW50RXJyb3IoZW50cnkuZXZlbnQsIGVudHJ5LmNhbGxiYWNrLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9nKG1zZzogc3RyaW5nLCBvYmo/OiB1bmtub3duKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2csIG9iaik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyU29ja2V0SU9IYW5kbGVycygpIHtcbiAgICAgICAgLy8gcmVnaXN0ZXIgZm9yIGV2ZW50cyB0aGF0IGdpdmUgdXMgaW5mb3JtYXRpb24gb24gY29ubmVjdGlvbiBzdGF0dXNcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5pZCA9IHRoaXMuX3NvY2tldC5pZDtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcImNvbm5lY3RcIik7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SW5pdGlhbGl6YXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNSZWFkeU9uY2UgPyBcInJlY29ubmVjdFwiIDogXCJpbml0aWFsLWNvbm5lY3RcIixcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NvY2tldC5vbihcImNvbm5lY3RfZXJyb3JcIiwgKG9iaj86IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiY29ubmVjdF9lcnJvclwiLCBvYmopO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiZGlzY29ubmVjdFwiLCAob2JqPzogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0U3RhdGUgIT09IFwiY2xvc2VkXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaWRsZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGVhckluaXRUaW1lcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiZGlzY29ubmVjdFwiLCBvYmopO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwic2NoZW1hc1wiLCAocGF5bG9hZDogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTY2hlbWFzUGF5bG9hZChwYXlsb2FkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdXNlIGFzIG1pZGRsZXdhcmUgdG8gcmVjZWl2ZSBpbmNvbWluZyBTb2NrZXRodWIgbWVzc2FnZXMgYW5kIHVucGFjayB0aGVtXG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhbmQgbGludCBiZWZvcmUgcGFzc2luZyB0aGVtIGFsb25nIHRvIHRoZSBhcHAuXG4gICAgICAgIHRoaXMuX3NvY2tldC5vbihcIm1lc3NhZ2VcIiwgKG9iaikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJtZXNzYWdlXCIsIG5vcm1hbGl6ZUFjdGl2aXR5U3RyZWFtKG9iaikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBBY3Rpdml0eVN0cmVhbSB3aXRoIGEgdmFsaWQgYWN0b3IuaWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYXNBY3RvcklkKG9iajogQWN0aXZpdHlTdHJlYW0pOiBvYmogaXMgQWN0aXZpdHlTdHJlYW0ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJhY3RvclwiIGluIG9iaiAmJlxuICAgICAgICAgICAgb2JqLmFjdG9yICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBcImlkXCIgaW4gb2JqLmFjdG9yICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yLmlkID09PSBcInN0cmluZ1wiXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGF5cyBwcmV2aW91c2x5IHNlbnQgZXZlbnRzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgU29ja2V0LklPIGNvbm5lY3Rpb24gaXNcbiAgICAgKiByZS1lc3RhYmxpc2hlZCBhZnRlciBhIHRyYW5zaWVudCBuZXR3b3JrIGludGVycnVwdGlvbi4gSXQgcmVzZW5kc1xuICAgICAqIGNyZWRlbnRpYWxzIGFuZCBjb25uZWN0aW9uIHN0YXRlIHNvIHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBtYW51YWxseVxuICAgICAqIHJlLWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gY2hhbm5lbHMuXG4gICAgICpcbiAgICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICAgKiAtIE9ubHkgcmVwbGF5cyBldmVudHMgc3RvcmVkIGluIG1lbW9yeSBkdXJpbmcgdGhpcyBzZXNzaW9uXG4gICAgICogLSBEb2VzIG5vdCByZXBsYXkgYWZ0ZXIgcGFnZSByZWZyZXNoIChtZW1vcnkgY2xlYXJlZClcbiAgICAgKiAtIFNlcnZlciBzaG91bGQgdmFsaWRhdGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgKG1heSBiZSBzdGFsZS9yZXZva2VkKVxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgLSBFdmVudCBuYW1lIHRvIGVtaXQgKFwiY3JlZGVudGlhbHNcIiwgXCJtZXNzYWdlXCIpXG4gICAgICogQHBhcmFtIGFzTWFwIC0gTWFwIG9mIGV2ZW50cyB0byByZXBsYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcGxheTxLIGV4dGVuZHMga2V5b2YgUmVwbGF5RXZlbnRNYXA+KFxuICAgICAgICBuYW1lOiBLLFxuICAgICAgICBhc01hcDogTWFwPHN0cmluZywgUmVwbGF5RXZlbnRNYXBbS10+LFxuICAgICk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRPYmogPSBub3JtYWxpemVBY3Rpdml0eVN0cmVhbShvYmogYXMgQWN0aXZpdHlTdHJlYW0pO1xuICAgICAgICAgICAgbGV0IGlkID0gZXhwYW5kZWRPYmo/LmlkO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQWN0b3JJZChleHBhbmRlZE9iaikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RvciA9IChleHBhbmRlZE9iaiBhcyBBY3Rpdml0eVN0cmVhbSkuYWN0b3I7XG4gICAgICAgICAgICAgICAgLy8gYWN0b3IgY2FuIGJlIGEgc3RyaW5nIChKSUQpIG9yIGFuIG9iamVjdCB3aXRoIGFuIGlkIGZpZWxkXG4gICAgICAgICAgICAgICAgaWQgPSB0eXBlb2YgYWN0b3IgPT09IFwic3RyaW5nXCIgPyBhY3RvciA6IGFjdG9yLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2coYHJlcGxheWluZyAke25hbWV9IGZvciAke2lkfWApO1xuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmVtaXQobmFtZSwgZXhwYW5kZWRPYmopO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4oKGdsb2JhbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICBnbG9iYWwuU29ja2V0aHViQ2xpZW50ID0gU29ja2V0aHViQ2xpZW50O1xufSkoXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgOiB7fSxcbik7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAib2hDQUNBLE9BQU8sZUFBZSxFQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxFQUFRLFdBQWEsRUFBUSxpQkFBbUIsRUFBUSxZQUFjLEVBQVEsY0FBZ0IsRUFBUSxVQUFZLEVBQVEsVUFBWSxFQUFRLFdBQWEsRUFBUSxJQUFNLEVBQVEsRUFBSSxFQUFRLElBQU0sRUFBUSxNQUFRLEVBQVEsS0FBTyxFQUFRLFdBQWEsRUFBUSxZQUFtQixPQUVsUixNQUFNLEVBQVksQ0FDbEIsQ0FDQSxFQUFRLFlBQWMsR0FDdEIsRUFBUSxXQUFh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Q0FBQyxFQUFFLEdBQUcsRUFBYSxDQUFDLFFBQVEsS0FBTyxFQUFLLEdBQUcsQ0FBQyxHQUFhLEtBQUssRUFBYSxDQUFHLEdBQUcsSUFBTSxVQUFVLEdBQVUsRUFBYSxFQUFJLENBQUMsSUFBSSxHQUFhLEtBQUssRUFBSSxDQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxPQUFPLElBQWUsR0FBa0IsR0FBaUIsR0FBUSxDQUFDLEVBQUksRUFBVyxJQUFTLENBQUMsSUFBSSxFQUFTLEdBQUssTUFBTSxPQUFPLElBQU0sU0FBUyxHQUFHLEVBQVMsQ0FBQyxJQUFJLEVBQU0sRUFBVyxLQUFvQixJQUFJLFFBQVEsS0FBbUIsSUFBSSxRQUFRLEVBQU8sRUFBTSxJQUFJLENBQUcsRUFBRSxHQUFHLEVBQU8sT0FBTyxFQUFPLEVBQU8sR0FBSyxLQUFLLEdBQVMsR0FBYSxDQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFHLEdBQVksQ0FBQyxHQUFLLENBQUMsRUFBSSxXQUFXLEdBQVUsRUFBTyxVQUFVLENBQUMsTUFBTSxFQUFJLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBTyxRQUFRLEtBQU8sR0FBa0IsQ0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFhLEtBQUssRUFBRyxDQUFHLEVBQUUsR0FBVSxFQUFHLEVBQUksQ0FBQyxJQUFJLEdBQWEsS0FBSyxFQUFJLENBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBUyxFQUFNLElBQUksRUFBSSxDQUFFLEVBQUUsT0FBTyxHQUFRLEdBQVcsQ0FBQyxFQUFHLElBQU0sS0FBSyxHQUFLLEdBQUksRUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFHLEVBQUUsRUFBSSxTQUFhLEdBQWMsQ0FBQyxJQUFJLEVBQTBGLEdBQVMsQ0FBQyxFQUFPLElBQU0sQ0FBQyxRQUFRLEtBQVEsRUFBSSxHQUFVLEVBQU8sRUFBSyxDQUFDLElBQUksRUFBSSxHQUFNLFdBQVcsR0FBRyxhQUFhLEdBQUcsSUFBSSxHQUFlLEtBQUssRUFBSSxDQUFJLENBQUMsQ0FBQyxHQUFPLEdBQTQ5SCxHQUFvSixHQUFrRCxrQkFBcnJMLEdBQVMsT0FBTyxPQUFVLENBQUMsZUFBZSxHQUFhLGVBQWUsR0FBVSxvQkFBb0IsSUFBbUIsT0FBVyxHQUFhLE9BQU8sVUFBVSxlQUFtM0MsR0FBaUIsR0FBVyxDQUFDLEVBQVEsSUFBUyxDQUFDLElBQUksRUFBYyxRQUFRLEVBQWMsYUFBYSxFQUFnQiw0QkFBNEIsRUFBTyxDQUFDLFNBQVMsa0RBQWtELFlBQVksaURBQWlELGdCQUFnQixlQUFlLEVBQUUsRUFBTSxLQUFLLE1BQU0sRUFBbUIsT0FBTyxhQUFhLFNBQVMsQ0FBSyxDQUFDLEVBQUssQ0FBQyxNQUFNLFdBQVcsRUFBTyxFQUFLLEVBQUUsU0FBUyxDQUFHLENBQUMsRUFBTSxFQUFTLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFPLEVBQU0sT0FBTyxNQUFNLElBQVMsRUFBTyxHQUFRLEVBQVMsRUFBTSxFQUFPLEVBQUUsT0FBTyxFQUFPLFNBQVMsQ0FBUyxDQUFDLEVBQU8sRUFBUyxDQUFDLElBQUksRUFBTSxFQUFPLE1BQU0sR0FBRyxFQUFFLEVBQU8sR0FBRyxHQUFHLEVBQU0sT0FBTyxFQUFFLEVBQU8sRUFBTSxHQUFHLElBQUksRUFBTyxFQUFNLEdBQUcsRUFBTyxFQUFPLFFBQVEsRUFBZ0IsR0FBRyxFQUFFLElBQUksR0FBTyxFQUFPLE1BQU0sR0FBRyxFQUFFLEVBQVEsRUFBSSxHQUFPLENBQVEsRUFBRSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQU8sRUFBUSxTQUFTLENBQVUsQ0FBQyxFQUFPLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFRLEVBQUUsRUFBTyxFQUFPLE9BQU8sTUFBTSxFQUFRLEVBQU8sQ0FBQyxJQUFJLEdBQU0sRUFBTyxXQUFXLEdBQVMsRUFBRSxHQUFHLElBQU8sT0FBTyxJQUFPLE9BQU8sRUFBUSxFQUFPLENBQUMsSUFBSSxFQUFNLEVBQU8sV0FBVyxHQUFTLEVBQUUsSUFBSSxFQUFNLFFBQVEsTUFBTSxFQUFPLE9BQU8sR0FBTSxPQUFPLEtBQUssRUFBTSxNQUFNLEtBQUssRUFBTyxPQUFPLEtBQUssRUFBSyxFQUFFLElBQWUsT0FBTyxLQUFLLEVBQUssRUFBRSxPQUFPLEVBQU8sSUFBSSxFQUFXLENBQUMsSUFBYSxPQUFPLGNBQWMsR0FBRyxDQUFVLEVBQUUsRUFBYSxRQUFRLENBQUMsRUFBVSxDQUFDLEdBQUcsR0FBVyxJQUFJLEVBQVUsR0FBRyxNQUFPLEtBQUksRUFBVSxJQUFJLEdBQUcsR0FBVyxJQUFJLEVBQVUsR0FBRyxPQUFPLEVBQVUsR0FBRyxHQUFHLEdBQVcsSUFBSSxFQUFVLElBQUksT0FBTyxFQUFVLEdBQUcsTUFBTyxLQUFJLEVBQWEsUUFBUSxDQUFDLEVBQU0sRUFBSyxDQUFDLE9BQU8sRUFBTSxHQUFHLElBQUksRUFBTSxNQUFNLEdBQU0sSUFBSSxJQUFJLEVBQU0sUUFBUSxDQUFDLEVBQU0sRUFBVSxFQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBTSxFQUFVLEVBQU0sRUFBTSxHQUFHLEVBQUUsR0FBTyxFQUFFLEdBQU8sRUFBTSxFQUFNLENBQVMsRUFBRSxLQUFLLEVBQU0sSUFBSSxHQUFHLEdBQUcsRUFBTSxFQUFNLEVBQU0sRUFBRSxFQUFFLE9BQU8sRUFBTSxFQUFFLEdBQUcsR0FBTyxFQUFNLEdBQUcsR0FBRyxFQUFPLFFBQVEsQ0FBQyxFQUFNLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFZLEVBQU0sT0FBTyxFQUFFLEVBQUUsR0FBRSxJQUFJLEVBQUssR0FBRyxHQUFNLEVBQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFNLEVBQUUsR0FBTSxFQUFFLFFBQVEsR0FBRSxFQUFFLEdBQUUsR0FBTSxFQUFFLEdBQUUsQ0FBQyxHQUFHLEVBQU0sV0FBVyxFQUFDLEdBQUcsSUFBSSxFQUFNLFdBQVcsRUFBRSxFQUFPLEtBQUssRUFBTSxXQUFXLEVBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBTSxHQUFNLEVBQUUsR0FBTSxFQUFFLEVBQUUsR0FBTSxHQUFhLENBQUMsSUFBSSxHQUFLLEVBQUUsUUFBUSxHQUFFLEVBQUUsR0FBRSxJQUFJLElBQUcsR0FBRyxDQUFDLEdBQUcsSUFBTyxFQUFZLEVBQU0sZUFBZSxFQUFFLElBQUksR0FBTSxFQUFhLEVBQU0sV0FBVyxJQUFPLENBQUMsRUFBRSxHQUFHLElBQU8sR0FBRyxFQUFNLGVBQWUsRUFBRSxHQUFHLEdBQU0sR0FBTyxXQUFXLEdBQUcsRUFBQyxFQUFFLEVBQU0sVUFBVSxFQUFFLEdBQUcsR0FBTSxHQUFFLElBQUksR0FBRSxJQUFHLEVBQUssRUFBRSxJQUFHLEVBQUssR0FBRyxHQUFHLEdBQUUsRUFBSyxHQUFHLEdBQU0sR0FBRSxNQUFNLElBQUksR0FBVyxHQUFHLEdBQUUsR0FBRyxHQUFFLEVBQU0sV0FBVyxFQUFVLEVBQUUsRUFBTSxVQUFVLEVBQUUsSUFBRyxHQUFXLElBQUksR0FBSSxFQUFPLE9BQU8sRUFBRSxHQUFHLEVBQUssRUFBTSxFQUFFLEdBQUssR0FBSSxJQUFNLENBQUMsRUFBRSxFQUFNLEVBQUUsRUFBRyxFQUFFLFdBQVcsR0FBRSxFQUFNLFVBQVUsRUFBRSxJQUFHLEVBQU0sRUFBRSxFQUFHLEVBQUUsR0FBRyxHQUFJLEVBQU8sT0FBTyxJQUFJLEVBQUUsRUFBQyxFQUFFLE9BQU8sT0FBTyxjQUFjLEdBQUcsQ0FBTSxHQUFHLEVBQU8sUUFBUSxDQUFDLEVBQU0sQ0FBQyxJQUFJLEVBQU8sQ0FBQyxFQUFFLEVBQU0sRUFBVyxDQUFLLEVBQUUsSUFBSSxFQUFZLEVBQU0sT0FBTyxFQUFFLElBQUksR0FBTSxFQUFFLEVBQUssR0FBRyxRQUFRLE1BQWdCLEVBQU0sR0FBRyxHQUFhLElBQUksRUFBTyxLQUFLLEVBQW1CLEVBQVksQ0FBQyxFQUFFLElBQUksR0FBWSxFQUFPLE9BQU8sR0FBZSxHQUFZLEdBQUcsR0FBWSxFQUFPLEtBQUssR0FBRyxFQUFFLE1BQU0sR0FBZSxFQUFZLENBQUMsSUFBSSxHQUFFLFdBQVcsUUFBUSxNQUFnQixFQUFNLEdBQUcsSUFBYyxHQUFHLEdBQWEsR0FBRSxHQUFFLEdBQWEsSUFBSSxHQUFzQixHQUFlLEVBQUUsR0FBRyxHQUFFLEVBQUUsR0FBTyxXQUFXLElBQU8sRUFBcUIsRUFBRSxFQUFNLFVBQVUsRUFBRSxLQUFRLEdBQUUsR0FBRyxHQUFzQixFQUFFLEdBQUUsUUFBUSxNQUFnQixFQUFNLENBQUMsR0FBRyxHQUFhLEdBQUcsRUFBRSxHQUFNLFdBQVcsRUFBTSxVQUFVLEVBQUUsR0FBRyxLQUFlLEVBQUUsQ0FBQyxJQUFJLEdBQUUsR0FBTSxRQUFRLEdBQUUsSUFBSSxJQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUUsSUFBRyxFQUFLLEVBQUUsSUFBRyxFQUFLLEdBQUcsR0FBRyxHQUFFLEVBQUssR0FBRyxHQUFFLEdBQUUsTUFBTSxJQUFJLEdBQVEsR0FBRSxHQUFFLEdBQVcsR0FBRyxHQUFFLEVBQU8sS0FBSyxFQUFtQixFQUFhLEdBQUUsR0FBUSxHQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRSxFQUFNLEdBQVEsRUFBVSxFQUFFLEVBQU8sS0FBSyxFQUFtQixFQUFhLEdBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFLLEVBQU0sR0FBTSxHQUFzQixLQUFpQixFQUFXLEVBQUUsR0FBTSxFQUFFLEVBQUUsSUFBZ0IsRUFBRSxHQUFNLEVBQUUsRUFBRSxPQUFPLEVBQU8sS0FBSyxFQUFFLEdBQUcsRUFBVSxRQUFRLENBQUMsRUFBTSxDQUFDLE9BQU8sRUFBVSxFQUFNLFFBQVEsQ0FBQyxFQUFPLENBQUMsT0FBTyxFQUFjLEtBQUssQ0FBTSxFQUFFLEVBQU8sRUFBTyxNQUFNLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFPLEdBQUcsRUFBUSxRQUFRLENBQUMsRUFBTSxDQUFDLE9BQU8sRUFBVSxFQUFNLFFBQVEsQ0FBQyxFQUFPLENBQUMsT0FBTyxFQUFjLEtBQUssQ0FBTSxFQUFFLE9BQU8sRUFBTyxDQUFNLEVBQUUsRUFBTyxHQUFHLEVBQVMsQ0FBQyxRQUFRLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBVyxPQUFPLENBQVUsRUFBRSxTQUFPLFNBQU8sVUFBUSxXQUFTLEVBQUUsRUFB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VyxHQUF3QixDQUFHLENBQUMsRUFDNUQsRUFNRyxVQUFVLENBQUMsRUFBNEMsQ0FDM0QsTUFDSSxVQUFXLEdBQ1gsRUFBSSxRQUFVLE1BQ2QsT0FBTyxFQUFJLFFBQVUsVUFDckIsT0FBUSxFQUFJLE9BQ1osT0FBTyxFQUFJLE1BQU0sS0FBTyxTQW9CeEIsTUFBc0MsQ0FDMUMsRUFDQSxFQUNJLENBQ0osUUFBVyxLQUFPLEVBQU0sT0FBTyxFQUFHLENBQzlCLElBQU0sRUFBYyxHQUF3QixDQUFxQixFQUM3RCxFQUFLLEdBQWEsR0FDdEIsR0FBSSxLQUFLLFdBQVcsQ0FBVyxFQUFHLENBQzlCLElBQU0sRUFBUyxFQUErQixNQUU5QyxFQUFLLE9BQU8sSUFBVSxTQUFXLEVBQVEsRUFBTSxHQUVuRCxLQUFLLElBQUksYUFBYSxTQUFZLEdBQUksRUFDdEMsS0FBSyxRQUFRLEtBQUssRUFBTSxDQUFXLEdBRy9DLEVBRUMsQ0FBQyxJQUFvQyxDQUNsQyxFQUFPLGdCQUFrQixLQUV6QixPQUFPLGFBQWUsU0FDZixXQUNELENBQUMsQ0FDWCIsCiAgImRlYnVnSWQiOiAiQTAyQzA0ODE2OUZCQTVERjY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|