(()=>{"use strict";class t{constructor(){this.states=new Map}get(t,e=null){return this.states.has(t)?this.states.get(t):(this.states.set(t,e),e)}set(t,e){return this.states.set(t,e)}change(t,e=1){let s=this.get(t,0);s+=e,this.set(t,s)}serialize(){const t=this.states.entries(),e=[];for(let s of t)e.push(s);return e}deserialize(t){this.states=new Map(t)}}class e{constructor(){this.inventory=[],this.currentRoom="start",this.context=null}addItem(t){this.inventory.push(t)}removeItem(t){this.inventory=this.inventory.filter((e=>e!=t))}getInventory(){return this.inventory.map((t=>this.context.getItem(t)))}}class s{speak(t){}stop(){}setOptions(t){}}class i extends s{constructor(t={}){super(),this.timeout=100,this.timeout=t.timeout||100,this.init()}init(){this.container=document.createElement("div"),this.container.setAttribute("aria-live","polite"),this.speechDisplay=document.createElement("div"),this.speechDisplay.setAttribute("aria-live","polite"),this.container.append(this.speechDisplay),document.body.appendChild(this.container),document.body.insertBefore(this.container,document.body.firstChild)}speak(t){this.clearDisplay();const e=document.createTextNode(t),s=document.createElement("p");s.appendChild(e),this.speechDisplay.appendChild(s),setTimeout(this.clearDisplay.bind(this),this.timeout)}stop(){this.clearDisplay()}clearDisplay(){this.speechDisplay.innerHTML=""}}class a extends s{constructor(t={}){super(),this.rate=t.rate||1,this.synth=window.speechSynthesis}speak(t){let e=new SpeechSynthesisUtterance(t);e.rate=this.rate,this.synth.speak(e)}stop(){this.synth.cancel()}setOptions(t){this.rate=t.rate||1}}class n{constructor(t=function(t="aria"){return"webtts"===t?new a:new i}()){this.output=t}speak(t){this.output.speak(t)}stop(){this.output.stop()}}var h=function(t,e,s,i){return new(s||(s=Promise))((function(a,n){function h(t){try{u(i.next(t))}catch(t){n(t)}}function r(t){try{u(i.throw(t))}catch(t){n(t)}}function u(t){var e;t.done?a(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class r{constructor(){this.context=new AudioContext}getContext(){return this.context}createGain(){return this.context.createGain()}getOutputDestination(){return this.context.destination}createBufferSource(){return this.context.createBufferSource()}decodeAudioData(t){return h(this,void 0,void 0,(function*(){return yield this.context.decodeAudioData(t)}))}createPanner(){return this.context.createPanner()}createMediaElementSource(t){return this.context.createMediaElementSource(t)}}class u{constructor(){this.events=new Map}emit(t,e={}){let s=this.events.get(t);if(s)s.subscribers.forEach((t=>{t(e)}));else{let e=new o(t);this.events.set(t,e)}}subscribe(t,e){let s=this.events.get(t);s||(s=new o(t),this.events.set(t,s)),s.subscribers.push(e)}unsubscribe(t,e){if(this.events.has(t)){let s=this.events.get(t);s.subscribers=s.subscribers.filter((t=>t!==e)),s.subscribers.length<1&&this.events.delete(t)}}unsubscribeAll(t){this.events.has(t)&&this.events.delete(t)}}class o{constructor(t){this.id=t,this.subscribers=[]}}class l{constructor(t){this.values=new Float32Array(4),void 0!==t&&(this.xyzw=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get w(){return this.values[3]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}get xyzw(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set w(t){this.values[3]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set xyzw(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}get r(){return this.values[0]}get g(){return this.values[1]}get b(){return this.values[2]}get a(){return this.values[3]}get rg(){return[this.values[0],this.values[1]]}get rgb(){return[this.values[0],this.values[1],this.values[2]]}get rgba(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set r(t){this.values[0]=t}set g(t){this.values[1]=t}set b(t){this.values[2]=t}set a(t){this.values[3]=t}set rg(t){this.values[0]=t[0],this.values[1]=t[1]}set rgb(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set rgba(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}at(t){return this.values[t]}reset(){this.x=0,this.y=0,this.z=0,this.w=0}copy(t){return t||(t=new l),t.x=this.x,t.y=this.y,t.z=this.z,t.w=this.w,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t.w=-this.w,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&(!(Math.abs(this.z-t.z)>e)&&!(Math.abs(this.w-t.w)>e)))}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y,s=this.z,i=this.w;return t*t+e*e+s*s+i*i}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}subtract(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e.z*=t,e.w*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x*=0,t.y*=0,t.z*=0,t.w*=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t.w*=e,t)}multiplyMat4(t,e){return e||(e=this),t.multiplyVec4(this,e)}static mix(t,e,s,i){return i||(i=new l),i.x=t.x+s*(e.x-t.x),i.y=t.y+s*(e.y-t.y),i.z=t.z+s*(e.z-t.z),i.w=t.w+s*(e.w-t.w),i}static sum(t,e,s){return s||(s=new l),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s.w=t.w+e.w,s}static difference(t,e,s){return s||(s=new l),s.x=t.x-e.x,s.y=t.y-e.y,s.z=t.z-e.z,s.w=t.w-e.w,s}static product(t,e,s){return s||(s=new l),s.x=t.x*e.x,s.y=t.y*e.y,s.z=t.z*e.z,s.w=t.w*e.w,s}static quotient(t,e,s){return s||(s=new l),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s.w=t.w/e.w,s}}l.zero=new l([0,0,0,1]),l.one=new l([1,1,1,1]);class c{constructor(t){this.values=new Float32Array(16),void 0!==t&&this.init(t)}at(t){return this.values[t]}init(t){for(let e=0;e<16;e++)this.values[e]=t[e];return this}reset(){for(let t=0;t<16;t++)this.values[t]=0}copy(t){t||(t=new c);for(let e=0;e<16;e++)t.values[e]=this.values[e];return t}all(){const t=[];for(let e=0;e<16;e++)t[e]=this.values[e];return t}row(t){return[this.values[4*t+0],this.values[4*t+1],this.values[4*t+2],this.values[4*t+3]]}col(t){return[this.values[t],this.values[t+4],this.values[t+8],this.values[t+12]]}equals(t,e=1e-5){for(let s=0;s<16;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}determinant(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],a=this.values[4],n=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],o=this.values[9],l=this.values[10],c=this.values[11],v=this.values[12],d=this.values[13],m=this.values[14],y=this.values[15];return(t*n-e*a)*(l*y-c*m)-(t*h-s*a)*(o*y-c*d)+(t*r-i*a)*(o*m-l*d)+(e*h-s*n)*(u*y-c*v)-(e*r-i*n)*(u*m-l*v)+(s*r-i*h)*(u*d-o*v)}setIdentity(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=0,this.values[5]=1,this.values[6]=0,this.values[7]=0,this.values[8]=0,this.values[9]=0,this.values[10]=1,this.values[11]=0,this.values[12]=0,this.values[13]=0,this.values[14]=0,this.values[15]=1,this}transpose(){const t=this.values[1],e=this.values[2],s=this.values[3],i=this.values[6],a=this.values[7],n=this.values[11];return this.values[1]=this.values[4],this.values[2]=this.values[8],this.values[3]=this.values[12],this.values[4]=t,this.values[6]=this.values[9],this.values[7]=this.values[13],this.values[8]=e,this.values[9]=i,this.values[11]=this.values[14],this.values[12]=s,this.values[13]=a,this.values[14]=n,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],a=this.values[4],n=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],o=this.values[9],l=this.values[10],c=this.values[11],v=this.values[12],d=this.values[13],m=this.values[14],y=this.values[15],p=t*n-e*a,x=t*h-s*a,w=t*r-i*a,f=e*h-s*n,g=e*r-i*n,b=s*r-i*h,z=u*d-o*v,k=u*m-l*v,I=u*y-c*v,C=o*m-l*d,M=o*y-c*d,E=l*y-c*m;let T=p*E-x*M+w*C+f*I-g*k+b*z;return T?(T=1/T,this.values[0]=(n*E-h*M+r*C)*T,this.values[1]=(-e*E+s*M-i*C)*T,this.values[2]=(d*b-m*g+y*f)*T,this.values[3]=(-o*b+l*g-c*f)*T,this.values[4]=(-a*E+h*I-r*k)*T,this.values[5]=(t*E-s*I+i*k)*T,this.values[6]=(-v*b+m*w-y*x)*T,this.values[7]=(u*b-l*w+c*x)*T,this.values[8]=(a*M-n*I+r*z)*T,this.values[9]=(-t*M+e*I-i*z)*T,this.values[10]=(v*g-d*w+y*p)*T,this.values[11]=(-u*g+o*w-c*p)*T,this.values[12]=(-a*C+n*k-h*z)*T,this.values[13]=(t*C-e*k+s*z)*T,this.values[14]=(-v*f+d*x-m*p)*T,this.values[15]=(u*f-o*x+l*p)*T,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],a=this.values[3],n=this.values[4],h=this.values[5],r=this.values[6],u=this.values[7],o=this.values[8],l=this.values[9],c=this.values[10],v=this.values[11],d=this.values[12],m=this.values[13],y=this.values[14],p=this.values[15];let x=t.at(0),w=t.at(1),f=t.at(2),g=t.at(3);return this.values[0]=x*e+w*n+f*o+g*d,this.values[1]=x*s+w*h+f*l+g*m,this.values[2]=x*i+w*r+f*c+g*y,this.values[3]=x*a+w*u+f*v+g*p,x=t.at(4),w=t.at(5),f=t.at(6),g=t.at(7),this.values[4]=x*e+w*n+f*o+g*d,this.values[5]=x*s+w*h+f*l+g*m,this.values[6]=x*i+w*r+f*c+g*y,this.values[7]=x*a+w*u+f*v+g*p,x=t.at(8),w=t.at(9),f=t.at(10),g=t.at(11),this.values[8]=x*e+w*n+f*o+g*d,this.values[9]=x*s+w*h+f*l+g*m,this.values[10]=x*i+w*r+f*c+g*y,this.values[11]=x*a+w*u+f*v+g*p,x=t.at(12),w=t.at(13),f=t.at(14),g=t.at(15),this.values[12]=x*e+w*n+f*o+g*d,this.values[13]=x*s+w*h+f*l+g*m,this.values[14]=x*i+w*r+f*c+g*y,this.values[15]=x*a+w*u+f*v+g*p,this}multiplyVec3(t){const e=t.x,s=t.y,i=t.z;return new y([this.values[0]*e+this.values[4]*s+this.values[8]*i+this.values[12],this.values[1]*e+this.values[5]*s+this.values[9]*i+this.values[13],this.values[2]*e+this.values[6]*s+this.values[10]*i+this.values[14]])}multiplyVec4(t,e){e||(e=new l);const s=t.x,i=t.y,a=t.z,n=t.w;return e.x=this.values[0]*s+this.values[4]*i+this.values[8]*a+this.values[12]*n,e.y=this.values[1]*s+this.values[5]*i+this.values[9]*a+this.values[13]*n,e.z=this.values[2]*s+this.values[6]*i+this.values[10]*a+this.values[14]*n,e.w=this.values[3]*s+this.values[7]*i+this.values[11]*a+this.values[15]*n,e}toMat3(){return new d([this.values[0],this.values[1],this.values[2],this.values[4],this.values[5],this.values[6],this.values[8],this.values[9],this.values[10]])}toInverseMat3(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[4],a=this.values[5],n=this.values[6],h=this.values[8],r=this.values[9],u=this.values[10],o=u*a-n*r,l=-u*i+n*h,c=r*i-a*h;let v=t*o+e*l+s*c;return v?(v=1/v,new d([o*v,(-u*e+s*r)*v,(n*e-s*a)*v,l*v,(u*t-s*h)*v,(-n*t+s*i)*v,c*v,(-r*t+e*h)*v,(a*t-e*i)*v])):null}translate(t){const e=t.x,s=t.y,i=t.z;return this.values[12]+=this.values[0]*e+this.values[4]*s+this.values[8]*i,this.values[13]+=this.values[1]*e+this.values[5]*s+this.values[9]*i,this.values[14]+=this.values[2]*e+this.values[6]*s+this.values[10]*i,this.values[15]+=this.values[3]*e+this.values[7]*s+this.values[11]*i,this}scale(t){const e=t.x,s=t.y,i=t.z;return this.values[0]*=e,this.values[1]*=e,this.values[2]*=e,this.values[3]*=e,this.values[4]*=s,this.values[5]*=s,this.values[6]*=s,this.values[7]*=s,this.values[8]*=i,this.values[9]*=i,this.values[10]*=i,this.values[11]*=i,this}rotate(t,e){let s=e.x,i=e.y,a=e.z,n=Math.sqrt(s*s+i*i+a*a);if(!n)return null;1!==n&&(n=1/n,s*=n,i*=n,a*=n);const h=Math.sin(t),r=Math.cos(t),u=1-r,o=this.values[0],l=this.values[1],c=this.values[2],v=this.values[3],d=this.values[4],m=this.values[5],y=this.values[6],p=this.values[7],x=this.values[8],w=this.values[9],f=this.values[10],g=this.values[11],b=s*s*u+r,z=i*s*u+a*h,k=a*s*u-i*h,I=s*i*u-a*h,C=i*i*u+r,M=a*i*u+s*h,E=s*a*u+i*h,T=i*a*u-s*h,D=a*a*u+r;return this.values[0]=o*b+d*z+x*k,this.values[1]=l*b+m*z+w*k,this.values[2]=c*b+y*z+f*k,this.values[3]=v*b+p*z+g*k,this.values[4]=o*I+d*C+x*M,this.values[5]=l*I+m*C+w*M,this.values[6]=c*I+y*C+f*M,this.values[7]=v*I+p*C+g*M,this.values[8]=o*E+d*T+x*D,this.values[9]=l*E+m*T+w*D,this.values[10]=c*E+y*T+f*D,this.values[11]=v*E+p*T+g*D,this}static frustum(t,e,s,i,a,n){const h=e-t,r=i-s,u=n-a;return new c([2*a/h,0,0,0,0,2*a/r,0,0,(e+t)/h,(i+s)/r,-(n+a)/u,-1,0,0,-n*a*2/u,0])}static perspective(t,e,s,i){const a=s*Math.tan(t*Math.PI/360),n=a*e;return c.frustum(-n,n,-a,a,s,i)}static orthographic(t,e,s,i,a,n){const h=e-t,r=i-s,u=n-a;return new c([2/h,0,0,0,0,2/r,0,0,0,0,-2/u,0,-(t+e)/h,-(i+s)/r,-(n+a)/u,1])}static lookAt(t,e,s=y.up){if(t.equals(e))return this.identity;const i=y.difference(t,e).normalize(),a=y.cross(s,i).normalize(),n=y.cross(i,a).normalize();return new c([a.x,n.x,i.x,0,a.y,n.y,i.y,0,a.z,n.z,i.z,0,-y.dot(a,t),-y.dot(n,t),-y.dot(i,t),1])}static product(t,e,s){const i=t.at(0),a=t.at(1),n=t.at(2),h=t.at(3),r=t.at(4),u=t.at(5),o=t.at(6),l=t.at(7),v=t.at(8),d=t.at(9),m=t.at(10),y=t.at(11),p=t.at(12),x=t.at(13),w=t.at(14),f=t.at(15),g=e.at(0),b=e.at(1),z=e.at(2),k=e.at(3),I=e.at(4),C=e.at(5),M=e.at(6),E=e.at(7),T=e.at(8),D=e.at(9),S=e.at(10),A=e.at(11),R=e.at(12),V=e.at(13),N=e.at(14),L=e.at(15);return s?(s.init([g*i+b*r+z*v+k*p,g*a+b*u+z*d+k*x,g*n+b*o+z*m+k*w,g*h+b*l+z*y+k*f,I*i+C*r+M*v+E*p,I*a+C*u+M*d+E*x,I*n+C*o+M*m+E*w,I*h+C*l+M*y+E*f,T*i+D*r+S*v+A*p,T*a+D*u+S*d+A*x,T*n+D*o+S*m+A*w,T*h+D*l+S*y+A*f,R*i+V*r+N*v+L*p,R*a+V*u+N*d+L*x,R*n+V*o+N*m+L*w,R*h+V*l+N*y+L*f]),s):new c([g*i+b*r+z*v+k*p,g*a+b*u+z*d+k*x,g*n+b*o+z*m+k*w,g*h+b*l+z*y+k*f,I*i+C*r+M*v+E*p,I*a+C*u+M*d+E*x,I*n+C*o+M*m+E*w,I*h+C*l+M*y+E*f,T*i+D*r+S*v+A*p,T*a+D*u+S*d+A*x,T*n+D*o+S*m+A*w,T*h+D*l+S*y+A*f,R*i+V*r+N*v+L*p,R*a+V*u+N*d+L*x,R*n+V*o+N*m+L*w,R*h+V*l+N*y+L*f])}}c.identity=(new c).setIdentity();class v{constructor(t){this.values=new Float32Array(2),void 0!==t&&(this.xy=t)}get x(){return this.values[0]}get y(){return this.values[1]}get xy(){return[this.values[0],this.values[1]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}at(t){return this.values[t]}reset(){this.x=0,this.y=0}copy(t){return t||(t=new v),t.x=this.x,t.y=this.y,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&!(Math.abs(this.y-t.y)>e)}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y;return t*t+e*e}add(t){return this.x+=t.x,this.y+=t.y,this}subtract(t){return this.x-=t.x,this.y-=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}divide(t){return this.x/=t.x,this.y/=t.y,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t):(e=1/e,t.x*=e,t.y*=e,t)}multiplyMat2(t,e){return e||(e=this),t.multiplyVec2(this,e)}multiplyMat3(t,e){return e||(e=this),t.multiplyVec2(this,e)}static cross(t,e,s){s||(s=new y);const i=t.x,a=t.y,n=e.x,h=i*e.y-a*n;return s.x=0,s.y=0,s.z=h,s}static dot(t,e){return t.x*e.x+t.y*e.y}static distance(t,e){return Math.sqrt(this.squaredDistance(t,e))}static squaredDistance(t,e){const s=e.x-t.x,i=e.y-t.y;return s*s+i*i}static direction(t,e,s){s||(s=new v);const i=t.x-e.x,a=t.y-e.y;let n=Math.sqrt(i*i+a*a);return 0===n?(s.x=0,s.y=0,s):(n=1/n,s.x=i*n,s.y=a*n,s)}static mix(t,e,s,i){i||(i=new v);const a=t.x,n=t.y,h=e.x,r=e.y;return i.x=a+s*(h-a),i.y=n+s*(r-n),i}static sum(t,e,s){return s||(s=new v),s.x=t.x+e.x,s.y=t.y+e.y,s}static difference(t,e,s){return s||(s=new v),s.x=t.x-e.x,s.y=t.y-e.y,s}static product(t,e,s){return s||(s=new v),s.x=t.x*e.x,s.y=t.y*e.y,s}static quotient(t,e,s){return s||(s=new v),s.x=t.x/e.x,s.y=t.y/e.y,s}}v.zero=new v([0,0]),v.one=new v([1,1]);class d{constructor(t){this.values=new Float32Array(9),void 0!==t&&this.init(t)}at(t){return this.values[t]}init(t){for(let e=0;e<9;e++)this.values[e]=t[e];return this}reset(){for(let t=0;t<9;t++)this.values[t]=0}copy(t){t||(t=new d);for(let e=0;e<9;e++)t.values[e]=this.values[e];return t}all(){const t=[];for(let e=0;e<9;e++)t[e]=this.values[e];return t}row(t){return[this.values[3*t+0],this.values[3*t+1],this.values[3*t+2]]}col(t){return[this.values[t],this.values[t+3],this.values[t+6]]}equals(t,e=1e-5){for(let s=0;s<9;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}determinant(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],a=this.values[4],n=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8];return t*(u*a-n*r)+e*(-u*i+n*h)+s*(r*i-a*h)}setIdentity(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=1,this.values[5]=0,this.values[6]=0,this.values[7]=0,this.values[8]=1,this}transpose(){const t=this.values[1],e=this.values[2],s=this.values[5];return this.values[1]=this.values[3],this.values[2]=this.values[6],this.values[3]=t,this.values[5]=this.values[7],this.values[6]=e,this.values[7]=s,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],a=this.values[4],n=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],o=u*a-n*r,l=-u*i+n*h,c=r*i-a*h;let v=t*o+e*l+s*c;return v?(v=1/v,this.values[0]=o*v,this.values[1]=(-u*e+s*r)*v,this.values[2]=(n*e-s*a)*v,this.values[3]=l*v,this.values[4]=(u*t-s*h)*v,this.values[5]=(-n*t+s*i)*v,this.values[6]=c*v,this.values[7]=(-r*t+e*h)*v,this.values[8]=(a*t-e*i)*v,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],a=this.values[3],n=this.values[4],h=this.values[5],r=this.values[6],u=this.values[7],o=this.values[8],l=t.at(0),c=t.at(1),v=t.at(2),d=t.at(3),m=t.at(4),y=t.at(5),p=t.at(6),x=t.at(7),w=t.at(8);return this.values[0]=l*e+c*a+v*r,this.values[1]=l*s+c*n+v*u,this.values[2]=l*i+c*h+v*o,this.values[3]=d*e+m*a+y*r,this.values[4]=d*s+m*n+y*u,this.values[5]=d*i+m*h+y*o,this.values[6]=p*e+x*a+w*r,this.values[7]=p*s+x*n+w*u,this.values[8]=p*i+x*h+w*o,this}multiplyVec2(t,e){const s=t.x,i=t.y;return e?(e.xy=[s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]],e):new v([s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]])}multiplyVec3(t,e){const s=t.x,i=t.y,a=t.z;return e?(e.xyz=[s*this.values[0]+i*this.values[3]+a*this.values[6],s*this.values[1]+i*this.values[4]+a*this.values[7],s*this.values[2]+i*this.values[5]+a*this.values[8]],e):new y([s*this.values[0]+i*this.values[3]+a*this.values[6],s*this.values[1]+i*this.values[4]+a*this.values[7],s*this.values[2]+i*this.values[5]+a*this.values[8]])}toMat4(t){return t?(t.init([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1]),t):new c([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1])}toQuat(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],a=this.values[4],n=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],o=t-a-u,l=a-t-u,c=u-t-a;let v=0,d=t+a+u;o>d&&(d=o,v=1),l>d&&(d=l,v=2),c>d&&(d=c,v=3);const y=.5*Math.sqrt(d+1),p=.25/y,x=new m;switch(v){case 0:x.w=y,x.x=(n-r)*p,x.y=(h-s)*p,x.z=(e-i)*p;break;case 1:x.w=(n-r)*p,x.x=y,x.y=(e+i)*p,x.z=(h+s)*p;break;case 2:x.w=(h-s)*p,x.x=(e+i)*p,x.y=y,x.z=(n+r)*p;break;case 3:x.w=(e-i)*p,x.x=(h+s)*p,x.y=(n+r)*p,x.z=y}return x}rotate(t,e){let s=e.x,i=e.y,a=e.z,n=Math.sqrt(s*s+i*i+a*a);if(!n)return null;1!==n&&(n=1/n,s*=n,i*=n,a*=n);const h=Math.sin(t),r=Math.cos(t),u=1-r,o=this.values[0],l=this.values[1],c=this.values[2],v=this.values[4],d=this.values[5],m=this.values[6],y=this.values[8],p=this.values[9],x=this.values[10],w=s*s*u+r,f=i*s*u+a*h,g=a*s*u-i*h,b=s*i*u-a*h,z=i*i*u+r,k=a*i*u+s*h,I=s*a*u+i*h,C=i*a*u-s*h,M=a*a*u+r;return this.values[0]=o*w+v*f+y*g,this.values[1]=l*w+d*f+p*g,this.values[2]=c*w+m*f+x*g,this.values[3]=o*b+v*z+y*k,this.values[4]=l*b+d*z+p*k,this.values[5]=c*b+m*z+x*k,this.values[6]=o*I+v*C+y*M,this.values[7]=l*I+d*C+p*M,this.values[8]=c*I+m*C+x*M,this}static product(t,e,s){const i=t.at(0),a=t.at(1),n=t.at(2),h=t.at(3),r=t.at(4),u=t.at(5),o=t.at(6),l=t.at(7),c=t.at(8),v=e.at(0),m=e.at(1),y=e.at(2),p=e.at(3),x=e.at(4),w=e.at(5),f=e.at(6),g=e.at(7),b=e.at(8);return s?(s.init([v*i+m*h+y*o,v*a+m*r+y*l,v*n+m*u+y*c,p*i+x*h+w*o,p*a+x*r+w*l,p*n+x*u+w*c,f*i+g*h+b*o,f*a+g*r+b*l,f*n+g*u+b*c]),s):new d([v*i+m*h+y*o,v*a+m*r+y*l,v*n+m*u+y*c,p*i+x*h+w*o,p*a+x*r+w*l,p*n+x*u+w*c,f*i+g*h+b*o,f*a+g*r+b*l,f*n+g*u+b*c])}}d.identity=(new d).setIdentity();class m{constructor(t){this.values=new Float32Array(4),void 0!==t&&(this.xyzw=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get w(){return this.values[3]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}get xyzw(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set w(t){this.values[3]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set xyzw(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}at(t){return this.values[t]}reset(){for(let t=0;t<4;t++)this.values[t]=0}copy(t){t||(t=new m);for(let e=0;e<4;e++)t.values[e]=this.values[e];return t}roll(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(t*e+i*s),i*i+t*t-e*e-s*s)}pitch(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(e*s+i*t),i*i-t*t-e*e+s*s)}yaw(){return Math.asin(2*(this.x*this.z-this.w*this.y))}equals(t,e=1e-5){for(let s=0;s<4;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}setIdentity(){return this.x=0,this.y=0,this.z=0,this.w=1,this}calculateW(){const t=this.x,e=this.y,s=this.z;return this.w=-Math.sqrt(Math.abs(1-t*t-e*e-s*s)),this}inverse(){const t=m.dot(this,this);if(!t)return this.xyzw=[0,0,0,0],this;const e=t?1/t:0;return this.x*=-e,this.y*=-e,this.z*=-e,this.w*=e,this}conjugate(){return this.values[0]*=-1,this.values[1]*=-1,this.values[2]*=-1,this}length(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.sqrt(t*t+e*e+s*s+i*i)}normalize(t){t||(t=this);const e=this.x,s=this.y,i=this.z,a=this.w;let n=Math.sqrt(e*e+s*s+i*i+a*a);return n?(n=1/n,t.x=e*n,t.y=s*n,t.z=i*n,t.w=a*n,t):(t.x=0,t.y=0,t.z=0,t.w=0,t)}add(t){for(let e=0;e<4;e++)this.values[e]+=t.at(e);return this}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],a=this.values[3],n=t.x,h=t.y,r=t.z,u=t.w;return this.x=e*u+a*n+s*r-i*h,this.y=s*u+a*h+i*n-e*r,this.z=i*u+a*r+e*h-s*n,this.w=a*u-e*n-s*h-i*r,this}multiplyVec3(t,e){e||(e=new y);const s=t.x,i=t.y,a=t.z,n=this.x,h=this.y,r=this.z,u=this.w,o=u*s+h*a-r*i,l=u*i+r*s-n*a,c=u*a+n*i-h*s,v=-n*s-h*i-r*a;return e.x=o*u+v*-n+l*-r-c*-h,e.y=l*u+v*-h+c*-n-o*-r,e.z=c*u+v*-r+o*-h-l*-n,e}toMat3(t){t||(t=new d);const e=this.x,s=this.y,i=this.z,a=this.w,n=e+e,h=s+s,r=i+i,u=e*n,o=e*h,l=e*r,c=s*h,v=s*r,m=i*r,y=a*n,p=a*h,x=a*r;return t.init([1-(c+m),o+x,l-p,o-x,1-(u+m),v+y,l+p,v-y,1-(u+c)]),t}toMat4(t){t||(t=new c);const e=this.x,s=this.y,i=this.z,a=this.w,n=e+e,h=s+s,r=i+i,u=e*n,o=e*h,l=e*r,v=s*h,d=s*r,m=i*r,y=a*n,p=a*h,x=a*r;return t.init([1-(v+m),o+x,l-p,0,o-x,1-(u+m),d+y,0,l+p,d-y,1-(u+v),0,0,0,0,1]),t}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w}static sum(t,e,s){return s||(s=new m),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s.w=t.w+e.w,s}static product(t,e,s){s||(s=new m);const i=t.x,a=t.y,n=t.z,h=t.w,r=e.x,u=e.y,o=e.z,l=e.w;return s.x=i*l+h*r+a*o-n*u,s.y=a*l+h*u+n*r-i*o,s.z=n*l+h*o+i*u-a*r,s.w=h*l-i*r-a*u-n*o,s}static cross(t,e,s){s||(s=new m);const i=t.x,a=t.y,n=t.z,h=t.w,r=e.x,u=e.y,o=e.z,l=e.w;return s.x=h*o+n*l+i*u-a*r,s.y=h*l-i*r-a*u-n*o,s.z=h*r+i*l+a*o-n*u,s.w=h*u+a*l+n*r-i*o,s}static shortMix(t,e,s,i){if(i||(i=new m),s<=0)return i.xyzw=t.xyzw,i;if(s>=1)return i.xyzw=e.xyzw,i;let a=m.dot(t,e);const n=e.copy();let h,r;if(a<0&&(n.inverse(),a=-a),a>.9999)h=1-s,r=0+s;else{const t=Math.sqrt(1-a*a),e=Math.atan2(t,a),i=1/t;h=Math.sin((1-s)*e)*i,r=Math.sin((0+s)*e)*i}return i.x=h*t.x+r*n.x,i.y=h*t.y+r*n.y,i.z=h*t.z+r*n.z,i.w=h*t.w+r*n.w,i}static mix(t,e,s,i){i||(i=new m);const a=t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w;if(Math.abs(a)>=1)return i.xyzw=t.xyzw,i;const n=Math.acos(a),h=Math.sqrt(1-a*a);if(Math.abs(h)<.001)return i.x=.5*t.x+.5*e.x,i.y=.5*t.y+.5*e.y,i.z=.5*t.z+.5*e.z,i.w=.5*t.w+.5*e.w,i;const r=Math.sin((1-s)*n)/h,u=Math.sin(s*n)/h;return i.x=t.x*r+e.x*u,i.y=t.y*r+e.y*u,i.z=t.z*r+e.z*u,i.w=t.w*r+e.w*u,i}static fromAxisAngle(t,e,s){s||(s=new m),e*=.5;const i=Math.sin(e);return s.x=t.x*i,s.y=t.y*i,s.z=t.z*i,s.w=Math.cos(e),s}static fromVectors(t,e,s){s||(s=new m([0,0,0,1]));let i=function(t,e,s){if(ts)return s;return t}(y.dot(t,e),-1,1),a=y.cross(t,e),n=Math.sqrt(t.squaredLength()*e.squaredLength())+i;return n<1e-4&&(s=new m([-t.z,t.y,t.x,0]).normalize()),s=new m([n,a.x,a.y,a.z]).normalize()}static fromAxisRadians(t,e,s,i,a){a||(a=new m([0,0,0,1]));let n=new y([t,e,s]).length();if(0==n)return m.identity;n=1/n;let h=0;h=i<0?2*Math.PI- -1*i%(2*Math.PI):i%(2*Math.PI);let r=Math.sin(h/2),u=Math.cos(h/2);return a.x=n*t*r,a.y=n*e*r,a.z=n*s*r,a.w=u,a.normalize(),a}}m.identity=(new m).setIdentity();class y{constructor(t){this.values=new Float32Array(3),void 0!==t&&(this.xyz=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}at(t){return this.values[t]}reset(){this.x=0,this.y=0,this.z=0}copy(t){return t||(t=new y),t.x=this.x,t.y=this.y,t.z=this.z,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&!(Math.abs(this.z-t.z)>e))}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y,s=this.z;return t*t+e*e+s*s}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}subtract(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e.z*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t.z=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t)}multiplyByMat3(t,e){return e||(e=this),t.multiplyVec3(this,e)}multiplyByQuat(t,e){return e||(e=this),t.multiplyVec3(this,e)}toQuat(t){t||(t=new m);const e=new y,s=new y;return e.x=Math.cos(.5*this.x),s.x=Math.sin(.5*this.x),e.y=Math.cos(.5*this.y),s.y=Math.sin(.5*this.y),e.z=Math.cos(.5*this.z),s.z=Math.sin(.5*this.z),t.x=s.x*e.y*e.z-e.x*s.y*s.z,t.y=e.x*s.y*e.z+s.x*e.y*s.z,t.z=e.x*e.y*s.z-s.x*s.y*e.z,t.w=e.x*e.y*e.z+s.x*s.y*s.z,t}static cross(t,e,s){s||(s=new y);const i=t.x,a=t.y,n=t.z,h=e.x,r=e.y,u=e.z;return s.x=a*u-n*r,s.y=n*h-i*u,s.z=i*r-a*h,s}static dot(t,e){const s=t.x,i=t.y,a=t.z;return s*e.x+i*e.y+a*e.z}static distance(t,e){e.x,t.x,e.y,t.y,e.z,t.z;return Math.sqrt(this.squaredDistance(t,e))}static squaredDistance(t,e){const s=e.x-t.x,i=e.y-t.y,a=e.z-t.z;return s*s+i*i+a*a}static direction(t,e,s){s||(s=new y);const i=t.x-e.x,a=t.y-e.y,n=t.z-e.z;let h=Math.sqrt(i*i+a*a+n*n);return 0===h?(s.x=0,s.y=0,s.z=0,s):(h=1/h,s.x=i*h,s.y=a*h,s.z=n*h,s)}static mix(t,e,s,i){return i||(i=new y),i.x=t.x+s*(e.x-t.x),i.y=t.y+s*(e.y-t.y),i.z=t.z+s*(e.z-t.z),i}static sum(t,e,s){return s||(s=new y),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s}static difference(t,e,s){return s||(s=new y),s.x=t.x-e.x,s.y=t.y-e.y,s.z=t.z-e.z,s}static product(t,e,s){return s||(s=new y),s.x=t.x*e.x,s.y=t.y*e.y,s.z=t.z*e.z,s}static quotient(t,e,s){return s||(s=new y),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s}static rotate(t,e,s){s||(s=new y);let i=2*(e.y*t.z-e.z*t.y),a=2*(e.z*t.x-e.x*t.z),n=2*(e.x*t.y-e.y*t.x);return s.x=t.x+i*e.w+(e.y*n-e.z*a),s.y=t.y+a*e.w+(e.z*i-e.x*n),s.z=t.z+n*e.w+(e.x*a-e.y*i),s}}y.zero=new y([0,0,0]),y.one=new y([1,1,1]),y.up=new y([0,1,0]),y.right=new y([1,0,0]),y.forward=new y([0,0,1]);class p extends u{constructor(t){super(),this.context=t,this.scene=this.context.getContext().createGain(),this.listener=this.context.getContext().listener,this.init()}init(){}createSource(){const t=this.context.getContext().createPanner();return t.panningModel="HRTF",t.distanceModel="linear",t.maxDistance=20,t.refDistance=2,t.connect(this.scene),t}getOutput(){return this.scene}getInput(){return this.scene}setListenerPosition(t,e,s){this.listener.setPosition(t,e,s)}setListenerOrientation(t,e){let s=new y([t.x,t.y,t.z]),i=s.copy();y.cross(i,new y([e.x,e.y,e.z]),i),y.cross(i,s,i),s.normalize(),i.normalize(),this.listener.setOrientation(s.x,s.y,s.z,i.x,i.y,i.z)}}class x{constructor(t,e,s,i){this.effects=[],this.context=t,this.graph=e,this.inputNode=s,this.outputNode=i,this.updateConnections()}applyEffect(t){this.effects.push(t),this.updateConnections()}removeEffect(t){this.effects.forEach((e=>{t===e&&e.disconnect()})),this.effects=this.effects.filter((e=>t!==e)),this.updateConnections()}updateConnections(){if(0==this.effects.length)return void this.inputNode.connect(this.outputNode);let t=null,e=null;this.effects.forEach((s=>{t=s,e?t.connectInput(e.getOutput()):t.connectInput(this.inputNode),e=t})),t&&t.connectOutput(this.outputNode)}}class w{constructor(t,e,s=!1){this.scene=t,this.context=e,this.swapChannels=s,this.init()}init(){this.effectsBus=this.context.createGain(),this.worldBus=this.context.createGain(),this.secondaryBus=this.context.createGain(),this.master=this.context.createGain(),this.scene.getOutput().connect(this.worldBus),this.worldBus.connect(this.effectsBus),this.effects=new x(this.context,this,this.effectsBus,this.master),this.secondaryBus.connect(this.master),this.swapChannels?(this.channelSplitter=this.context.getContext().createChannelSplitter(2),this.channelMerger=this.context.getContext().createChannelMerger(2),this.master.connect(this.channelSplitter),this.channelSplitter.connect(this.channelMerger,0,1),this.channelSplitter.connect(this.channelMerger,1,0),this.channelMerger.connect(this.context.getOutputDestination())):this.master.connect(this.context.getOutputDestination())}connectToMaster(t){t.connect(this.master)}connectToUI(t){t.connect(this.secondaryBus)}applyEffect(t){this.effects.applyEffect(t)}removeEffect(t){this.effects.removeEffect(t)}}var f;!function(t){t[t.WorldSource=0]="WorldSource",t[t.UISource=1]="UISource",t[t.MasterSource=2]="MasterSource"}(f||(f={}));class g{constructor(t,e,s,i=null,a=f.WorldSource){this.position={x:0,y:0,z:0},this.buffer=i,this.context=s,this.scene=e,this.graph=t,this.type=a,this.playbackRate=1,this.volume=1,this.init()}init(){this.gain=this.context.createGain(),this.stop=this.stop.bind(this)}getBuffer(){return this.buffer}setBuffer(t){this.buffer=t,this.playOnLoad&&(this.play(),this.playOnLoad=!1)}play(t=0,e=0,s=(this.buffer?this.buffer.duration:0)){this.playing&&this.node&&this.stop(),this.buffer?(this.node||(this.node=this.context.createBufferSource(),this.node.buffer=this.buffer,this.createConnections()),this.node&&(this.node.playbackRate.value=this.playbackRate,this.node.start(t,e,s),this.node.loop=this.looping,this.playing=!0,this.sceneNode&&this.sceneNode.setPosition(this.position.x,this.position.y,this.position.z),this.node.addEventListener("ended",this.stop))):this.playOnLoad=!0}setPosition(t,e,s){this.position={x:t,y:e,z:s},this.sceneNode&&this.sceneNode.setPosition(t,e,s)}setPlaybackRate(t){this.playbackRate=t,this.node&&(this.node.playbackRate.value=t)}getPlaybackRate(){return this.playbackRate}setVolume(t){this.volume=t,this.gain&&(this.gain.gain.value=t)}getVolume(){return this.volume}createConnections(){switch(this.type){case f.WorldSource:this.sceneNode||(this.sceneNode=this.scene.createSource()),this.node.connect(this.gain),this.gain.connect(this.sceneNode);break;case f.UISource:this.node.connect(this.gain),this.graph.connectToUI(this.gain);break;default:this.node.connect(this.gain),this.graph.connectToMaster(this.gain)}}stop(){this.playing=!1,this.node&&(this.node.removeEventListener("ended",this.stop),this.node.stop(),this.node.disconnect(),this.node=null,this.playing=!1,this.sceneNode&&(this.sceneNode.disconnect(),this.sceneNode=null))}destroy(){this.stop(),this.node=null,this.sceneNode=null,this.buffer=null,this.context=null,this.graph=null,this.scene=null}loop(t){this.looping=t,this.node&&(this.node.loop=t)}fadeOut(t){this.gain.gain.setValueAtTime(this.getVolume(),this.context.getContext().currentTime),this.node&&(this.gain.gain.exponentialRampToValueAtTime(1e-4,this.context.getContext().currentTime+t),setTimeout((()=>this.stop()),1e3*t))}fadeIn(t){this.gain.gain.setValueAtTime(1e-4,this.context.getContext().currentTime),this.node||this.play(),this.gain.gain.exponentialRampToValueAtTime(this.volume,this.context.getContext().currentTime+t)}}class b{constructor(t,e=null,s=null){this.name=t,this.data=e,this.decodedData=s}getData(){return this.data}setData(t){this.data=t}getDecodedData(){return this.decodedData}setDecodedData(t){this.decodedData=this.decodedData}getName(){return this.name}setName(t){this.name=t}}var z=function(t,e,s,i){return new(s||(s=Promise))((function(a,n){function h(t){try{u(i.next(t))}catch(t){n(t)}}function r(t){try{u(i.throw(t))}catch(t){n(t)}}function u(t){var e;t.done?a(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class k{get(t){return z(this,void 0,void 0,(function*(){const e=yield fetch(t);return yield e.arrayBuffer()}))}}var I=function(t,e,s,i){return new(s||(s=Promise))((function(a,n){function h(t){try{u(i.next(t))}catch(t){n(t)}}function r(t){try{u(i.throw(t))}catch(t){n(t)}}function u(t){var e;t.done?a(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class C extends u{constructor(t,e=new k,s=512){super(),this.loader=e,this.data={},this.maxData=s,this.context=t}get(t){return I(this,void 0,void 0,(function*(){if(this.data[t])return this.data[t].getDecodedData();{const e=yield this.loader.get(t),s=yield this.context.decodeAudioData(e),i=new b(t,e,s);Object.keys(this.data).length;return this.maxData,this.data[t]=i,i.getDecodedData()}}))}clear(){this.data={}}}class M extends class{constructor(t,e,s){this.graph=e,this.context=t,this.effectParams=s}connectOutput(t){this.effectNode.connect(t)}connectInput(t){this.inputNode=t,this.effectNode&&this.inputNode.connect(this.effectNode)}getOutput(){return this.effectNode}disconnect(){this.inputNode.disconnect(),this.effectNode.disconnect()}}{constructor(t,e,s){super(t,e,s),console.log("Creating convolver"),this.effectNode=this.context.getContext().createConvolver(),this.effectNode.buffer=this.effectParams.buffer}connectInput(t){this.channelSplitter=this.context.getContext().createChannelSplitter(2),this.channelMerger=this.context.getContext().createChannelMerger(2),this.channelSplitter.connect(this.channelMerger,0,0),this.channelSplitter.connect(this.channelMerger,1,0),this.channelSplitter.connect(this.channelMerger,0,1),this.channelSplitter.connect(this.channelMerger,1,1),t.connect(this.channelSplitter),this.channelMerger.connect(this.effectNode),this.inputNode=t}}class E{constructor(t,e,s,i,a=f.MasterSource){this.graph=t,this.scene=e,this.context=s,this.element=i,this.type=a,this.position={x:0,y:0,z:0},this.init()}init(){this.node=this.context.createMediaElementSource(this.element),this.gain=this.context.createGain(),this.createConnections(),this.element.addEventListener("canplay",(t=>{this.canPlay=!0,this.playOnAvailable&&this.play()}))}play(t=0,e=0,s=0){this.canPlay&&this.element.play(),this.playOnAvailable=!0}stop(){this.element.pause()}getVolume(){return this.element.volume}setVolume(t){this.element.volume=t}getPlaybackRate(){return this.element.playbackRate}setPlaybackRate(t){this.element.playbackRate=t}createConnections(){if(this.type===f.WorldSource)this.sceneNode||(this.sceneNode=this.scene.createSource()),this.node.connect(this.gain),this.gain.connect(this.sceneNode);else this.node.connect(this.gain),this.graph.connectToMaster(this.gain)}setPosition(t,e,s){this.position={x:t,y:e,z:s},this.sceneNode&&this.sceneNode.setPosition(t,e,s)}destroy(){this.stop(),this.element=null,this.graph=null,this.context=null,this.node=null,this.sceneNode=null,this.scene=null}loop(t){this.element.loop=!0}fadeIn(t){this.gain.gain.setValueAtTime(1e-4,this.context.getContext().currentTime),this.node||this.play(),this.gain.gain.exponentialRampToValueAtTime(this.getVolume(),this.context.getContext().currentTime+t)}fadeOut(t){this.gain.gain.setValueAtTime(this.getVolume(),this.context.getContext().currentTime),this.node&&(this.gain.gain.exponentialRampToValueAtTime(1e-4,this.context.getContext().currentTime+t),setTimeout((()=>this.stop()),1e3*t))}}var T=function(t,e,s,i){return new(s||(s=Promise))((function(a,n){function h(t){try{u(i.next(t))}catch(t){n(t)}}function r(t){try{u(i.throw(t))}catch(t){n(t)}}function u(t){var e;t.done?a(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class D{constructor(t=new k){this.loader=t,this.environmentImpulse=null,this.context=new r,this.scene=new p(this.context),this.graph=new w(this.scene,this.context,!1),this.dataPool=new C(this.context,this.loader)}load(t,e=f.WorldSource){return T(this,void 0,void 0,(function*(){const s=yield this.dataPool.get(t);return this.createSource(e,s)}))}loadImmediate(t,e=f.WorldSource){const s=new g(this.graph,this.scene,this.context,null,e);return this.dataPool.get(t).then((t=>{s.setBuffer(t)})),s}stream(t,e=f.MasterSource){const s=new Audio(t);s.crossOrigin="anonymous",s.volume=1;return new E(this.graph,this.scene,this.context,s,e)}createSource(t,e){return new g(this.graph,this.scene,this.context,e)}setEnvironmentImpulse(t){return T(this,void 0,void 0,(function*(){if(this.environmentImpulse&&this.graph.removeEffect(this.environmentImpulse),null===t)return;const e=yield this.dataPool.get(t);this.environmentImpulse=new M(this.context,this.graph,{buffer:e}),this.graph.applyEffect(this.environmentImpulse)}))}setListenerPosition(t,e,s){this.scene.setListenerPosition(t,e,s)}setListenerOrientation(t,e){this.scene.setListenerOrientation(t,e)}clearDataPool(){this.dataPool.clear()}}class S{constructor(){this.res=new D,this.ambience=null,this.music=null,this.ambienceVolume=1,this.musicVolume=1,this.sfxVolume=1,this.previousAmbience="",this.previousMusic=""}play(t){const e=this.res.loadImmediate(t);e.setVolume(this.sfxVolume),e.play()}async setAmbience(t){if(t!==this.previousAmbience){if(this.ambience){const t=this.ambience;this.ambience=null,setTimeout((()=>t.fadeOut(6)),1500),setTimeout((()=>t.destroy()),6e3)}t&&(this.previousAmbience=t,this.ambience=this.res.stream(t,0),this.ambience.setVolume(this.ambienceVolume),this.ambience.play(),this.ambience.loop(!0),this.ambience.fadeIn(3))}}setMusic(t){if(t!==this.previousMusic){if(this.music){const t=this.music;setTimeout((()=>t.fadeOut(2)),500),setTimeout((()=>t.destroy()),2e3)}t&&(this.previousMusic=t,this.music=this.res.stream(t,1),this.music.setVolume(this.musicVolume),this.music.play(),this.music.fadeIn(2))}}setImpulse(t){this.res.setEnvironmentImpulse(t)}setMusicVolume(t){this.musicVolume=t,this.music&&this.music.setVolume(t)}setAmbienceVolume(t){this.ambienceVolume=t,this.ambience&&this.ambience.setVolume(t)}setSFXVolume(t){this.sfxVolume=t}}class A{constructor(){this.tts=new n(new i),this.history=document.getElementById("output-area"),this.sound=new S}say(t){if(""===t)return;this.sound.play("assets/scroll.wav");const e=document.createElement("p");t.split("\n").forEach((t=>{e.appendChild(document.createTextNode(t)),e.appendChild(document.createElement("br"))})),this.history.appendChild(e)}play(t){this.sound.play(t)}setAmbience(t){return this.sound.setAmbience(t)}setMusic(t){return this.sound.setMusic(t)}setImpulse(t){this.sound.setImpulse(t)}}class R{constructor(t,e){this.handler=t,this.output=e,this.echoInput=!0,this.inputField=document.getElementById("input-area"),this.history=[],this.historyCursor=0,this.init()}setEcho(t){this.echoInput=t}init(){this.inputField.addEventListener("keydown",(t=>{if("ArrowUp"===t.key)this.historyCursor>0&&(this.historyCursor--,this.inputField.value=this.history[this.historyCursor]);else if("ArrowDown"===t.key)this.historyCursor ${t}`),this.handler.doCommand(t)}}))}addToInputHistory(t){this.history.push(t),this.historyCursor=this.history.length}}const V=[[["look","l"],function(t,e){if(1==t.length)e.examineRoom();else{const s=e.getRoom(e.player.currentRoom).getItems();let i=null;for(let e of s)if(e.name.includes(t[1])){i=e;break}if(!i){const s=e.player.getInventory();for(let e of s)if(e.name.includes(t[1])){i=e;break}}i?(e.output.say(`You look at ${i.name}.`),e.output.say(i.description)):e.output.say(`I could not find a ${t[1]}.`)}}],[["use","interact"],async function(t,e){const s=e.getRoom(e.player.currentRoom).getItems();let i=null;for(let e of s)if(e.name.includes(t[1])){i=e;break}if(!i){const s=e.player.getInventory();for(let e of s)if(e.name.includes(t[1])){i=e;break}}i?await i.onUse():e.output.say(`I could not find a ${t[1]}.`)}],[["take","get"],function(t,e){const s=e.getRoom(e.player.currentRoom),i=s.getItems();let a=null;for(let e of i)if(e.name.includes(t[1])){a=e;break}a?a.takeable?(s.removeItem(a.id),e.player.addItem(a.id),e.print(`You take ${a.name}.`),a.onTake()):e.print(`You can't take ${a.name}.`):e.print(`You can't find any ${t[1]}.`)}],[["drop","put"],function(t,e){const s=e.getRoom(e.player.currentRoom),i=e.player.getInventory();let a=null;for(let e of i)if(e.name.includes(t[1])){a=e;break}a?(e.player.removeItem(a.id),s.addItem(a.id),e.print(`You set ${a.name} down on the floor.`),a.onDrop()):e.print(`You're not carrying a ${t[1]}`)}],["echo",function(t,e){"on"!=t[1]&&"off"!=t[1]?e.print("Usage: echo "):(e.setInputEcho("on"==t[1]),e.print(`Command echo is now ${t[1]}.`))}],["save",function(t,e){e.print("Saving game..."),e.save()}],["load",function(t,e){e.print("Loading game..."),e.load()}],["volume",function(t,e){if(t.length<3)return e.print("Usage: volume <0-100>");const s=parseInt(t[2]);if(s>100||s<1)return e.print("No higher than 100 and no less than 1.");if("sfx"==t[1])e.output.sound.setSFXVolume(s/100);else if("music"==t[1])e.output.sound.setMusicVolume(s/100);else{if("ambience"!=t[1])return e.print("Invalid channel. Either ambience, sfx or music is allowed.");e.output.sound.setAmbienceVolume(s/100)}e.print(`${t[1]} volume set to ${s}%`)}],[["i","inv","inventory"],function(t,e){const s=e.player.getInventory();if(s.length<1)return e.print("You're not carrying anything.");let i="You are carrying ";s.forEach(((t,e)=>{ethis.commands.set(t,e))):this.commands.set(t,e)}addCommands(t){t.forEach((t=>{this.addCommand(t[0],t[1])}))}addDefaultCommands(){this.addCommands(V)}matchDirection(t){for(let e of N)if(e[0]==t)return e[1]}}class q{constructor(t){this.context=t}save(){const t={state:this.context.state.serialize(),itemLocations:this.serializeItemLocations(),itemStates:this.serializeItemStates(),player:{currentRoom:this.context.player.currentRoom,inventory:this.context.player.inventory},volumes:{music:this.context.output.sound.musicVolume,sfx:this.context.output.sound.sfxVolume,ambience:this.context.output.sound.ambienceVolume}};localStorage.setItem("save",JSON.stringify(t))}load(){const t=JSON.parse(localStorage.getItem("save"));this.context.state.deserialize(t.state),this.deserializeItemLocations(t.itemLocations),this.deserializeItemStates(t.itemStates),this.deserializePlayer(t.player),this.context.output.sound.setSFXVolume(t.volumes.sfx),this.context.output.sound.setMusicVolume(t.volumes.music),this.context.output.sound.setAmbienceVolume(t.volumes.ambience)}serializeItemLocations(){return this.context.rooms.map((t=>[t.id,t.objects]))}deserializeItemLocations(t){t.forEach((t=>{this.context.getRoom(t[0]).objects=t[1]}))}deserializeItemStates(t){t.forEach((t=>{this.context.getItem(t[0]).state.deserialize(t[1])}))}deserializePlayer(t){this.context.move(t.currentRoom),this.context.player.inventory=t.inventory}serializeItemStates(){return this.context.items.map((t=>[t.id,t.state.serialize()]))}}class P{constructor(s=!0){this.newGame=s,this.player=new e,this.state=new t,this.rooms=[],this.items=[],this.output=new A,this.commandHandler=new L(this),this.input=new R(this.commandHandler,this.output),this.visitedRooms=new Map,this.interval=null,this.Serialization=new q(this)}print(t){this.output.say(t)}async tell(t,e){for(let s of t)this.print(s),await this.wait(e)}init(s){this.rooms=s.rooms.map((t=>(t.context=this,t))),this.items=s.items.map((t=>(t.context=this,t))),this.state=s.state||new t,this.commandHandler.addCommands(s.commands),this.player=new e,this.player.context=this,this.newGame?this.move(this.player.currentRoom):this.Serialization.load(),this.start()}advanceTick(){this.items.forEach((t=>t.onTick())),this.rooms.forEach((t=>t.onTick()))}start(){this.interval=setInterval((()=>this.advanceTick()),1e3)}stop(){clearInterval(this.interval),this.interval=null}examineRoom(){const t=this.getRoom(this.player.currentRoom);this.output.say(t.title),this.visitedRooms.get(this.player.currentRoom)||""==t.firstDescription?this.output.say(t.description):this.output.say(t.firstDescription),this.examineItems(),this.examineExits()}examineItems(){const t=this.getRoom(this.player.currentRoom).getItems();if(t.length<1)return;let e="You see ";t.forEach(((s,i)=>{i{ie.id==t))}getItem(t){return this.items.find((e=>e.id==t))}wait(t){return new Promise(((e,s)=>{setTimeout(e,t)}))}async move(t){const e=this.getRoom(this.player.currentRoom),s=this.getRoom(t);e.canExit()&&s.canEnter()&&(await e.onExit(),await s.onEnter(),this.player.currentRoom=t,this.examineRoom(),this.visitedRooms.set(t,!0))}enableCommandInput(t){this.commandHandler.enabled=t}setInputEcho(t){this.input.setEcho(t)}save(){this.Serialization.save()}load(){this.Serialization.load()}}class B{constructor(){this.id="room",this.title="A room",this.description="You see nothing special",this.firstDescription="",this.objects=[],this.exits=new Map,this.enterCallback=null,this.exitCallback=null,this.canEnterLogic=null,this.canExitLogic=null,this.tickCallback=null,this.context=null,this.music=null,this.ambience=null,this.impulse=null}async onEnter(){if(this.context.output.setMusic(this.music),this.context.output.setAmbience(this.ambience),this.context.output.setImpulse(this.impulse),this.enterCallback)return this.enterCallback(this.context)}async onExit(){if(this.exitCallback)return this.exitCallback(this.context)}canEnter(){return!this.canEnterLogic||this.canEnterLogic(this.context)}canExit(){return!this.canExitLogic||this.canExitLogic(this.context)}addExit(t,e){return this.exits.set(t,e),this}getExit(t){return this.exits.get(t)}addItem(t){this.objects.push(t)}removeItem(t){this.objects=this.objects.filter((e=>e!=t))}addEnterCallback(t){this.enterCallback=t.bind(this)}addExitCallback(t){this.exitCallback=t.bind(this)}addEnterLogic(t){this.canEnterLogic=t.bind(this)}addExitLogic(t){this.canExitLogic=t.bind(this)}addTickCallback(t){this.tickCallback=t.bind(this)}getItems(){return this.objects.map((t=>this.context.getItem(t)))}async onTick(){if(this.tickCallback)return this.tickCallback(this.context)}}class Y{constructor(){this.room=new B}withID(t){return this.room.id=t,this}withTitle(t){return this.room.title=t,this}withFirstDescription(t){return this.room.firstDescription=t,this}withDescription(t){return this.room.description=t,this}withExit(t,e){return this.room.addExit(t,e),this}withItem(t){return this.room.addItem(t),this}withEnterCallback(t){return this.room.addEnterCallback(t),this}withExitCallback(t){return this.room.addExitCallback(t),this}withEnterLogic(t){return this.room.addEnterLogic(t),this}withExitLogic(t){return this.room.addExitLogic(t),this}withTick(t){return this.room.addTickCallback(t),this}withMusic(t){return this.room.music=t,this}withAmbience(t){return this.room.ambience=t,this}withImpulse(t){return this.room.impulse=t,this}create(){return this.room}}const O=(new Y).withID("start").withTitle("A small spherical alcove").withFirstDescription("You find yourself in a small, spherical alcove. It feels cold and dark, save from a dim glow which seems to be eluminating the area from the north.\nThe surface appears to be unnaturally smooth, as if melted away using acidic means. It's warm to the touch.").withDescription("A spherical alcove. The smooth surface appears to be melted away using acidic means. There's a dim glow shining in from the north.").withExit("north","tunnel1").withEnterCallback((async function(t){if(t.state.get("start.awoken"))return;const{output:e,wait:s}=t;t.enableCommandInput(!1),await t.tell(["You slowly wake up.","you're not sure if you were ever conscious about waking up, but right now, you're clearly aware that you were previously asleep.","In fact, a lot of your thoughts seem foreign to you.","You're not sure how to feel about this.","God the headache...","OK, time to think about this.","Huh, something else you never did before.","Where are you?","You reach up and touch your head.","OK, that seems to be in order. Your antennae are still there, your mouth parts seem in tact...","Hmm. All this is strange.","No use sitting around. You get up and slowly examine your surroundings."],3e3),t.enableCommandInput(!0),t.state.set("start.awoken",!0)})).create(),U=(new Y).withID("tunnel1").withTitle("A long dark tunnel").withFirstDescription("You slowly make your way out of the little alcove, heading north into a smooth, tube-shaped tunnel.\nYou notice razor thin threads coming out of the ceiling, weaving and slithering along the length of the tunnel towards the north. Thery provide a dim glow, which must have been the light you saw before.").withDescription("A tube-shaped tunnel. Thin threads seem to exit the ceiling here, eminating a soft glow.").withExit("south","start").withExit("north","central1").create(),F=(new Y).withID("central1").withTitle("A large spherical chamber").withFirstDescription("You exit the tunnel into a large, spherical chamber.\nThere are many more threads across the walls and ceiling here, the glow enveloping you fully in its unnatural light.\nThe chamber appears to be large, able to fit hundreds of you inside.\nTo the northeast, northwest, southeast and southwest you notice large statues representing ants. Threads seem to lead right into them.").withDescription("A large, spherical chamber. Glowing threads criss-cross the walls and ceiling. Around you, statues of ants.").withExit("northwest","statue1").withExit("northeast","statue2").withExit("southwest","statue3").withExit("southeast","statue4").withExit("south","tunnel1").create(),$=(new Y).withID("statue1").withTitle("The northwestern part of the central chamber").withFirstDescription("You walk over to the northwestern part of the central chamber.\n It is almost entirely taken up by a huge ant statue. One of its six legs are extended outwards, attached to which is a small, round device.").withDescription("").withExit("southeast","central1").withItem("statue1").create(),G=(new Y).withID("statue2").withTitle("The northeastern part of the central chamber").withFirstDescription("You walk over to the northeastern part of the central chamber.\n It is almost entirely taken up by a huge ant statue. Two of its six legs are extended outwards, attached to which is a large, rectangular device.").withDescription("").withExit("southwest","central1").withItem("statue2").create(),j=(new Y).withID("statue3").withTitle("The southwestern part of the central chamber").withFirstDescription("You walk over to the southwestern part of the central chamber.\n It is almost entirely taken up by a huge ant statue. Three of its six legs are extended outwards, attached to which is a round stone tablet.").withDescription("").withExit("northeast","central1").withItem("statue3").create();class H{constructor(){this.id="item",this.name="An item",this.description="You see nothing special about this item",this.type="item",this.state=new t,this.usable=!0,this.takeable=!0,this.useCallback=null,this.takeCallback=null,this.dropCallback=null,this.tickCallback=null,this.context=null}async onUse(){if(this.useCallback)return this.useCallback(this.context)}async onTake(){if(this.takeCallback)return this.takeCallback(this.context)}async onDrop(){if(this.dropCallback)return this.dropCallback(this.context)}async onTick(){if(this.tickCallback)return this.tickCallback(this.context)}addUseCallback(t){this.useCallback=t.bind(this)}addTakeCallback(t){this.takeCallback=t.bind(this)}addDropCallback(t){this.dropCallback=t.bind(this)}addTickCallback(t){this.tickCallback=t.bind(this)}setState(t,e){return this.state.set(t,e)}getState(t){return this.state.get(t)}}class W{constructor(){this.item=new H}withID(t){return this.item.id=t,this}withName(t){return this.item.name=t,this}withDescription(t){return this.item.description=t,this}withType(t){this.item.type=t}withState(t,e){return this.item.setState(t,e),this}isUsable(t){return this.item.usable=t,this}isTakeable(t){return this.item.takeable=t,this}withUseCallback(t){return this.item.addUseCallback(t),this}withTakeCallback(t){return this.item.addTakeCallback(t),this}withDropCallback(t){return this.item.addDropCallback(t),this}withTickCallback(t){return this.item.addTickCallback(t),this}create(){return this.item}}const Q=(new W).withID("statue4").withName("a huge ant statue").withDescription("Before you is a big statue of an ant, in the process of falling over. All of its legs are bent at the joints.").isTakeable(!1).isUsable(!0).withUseCallback((async function(t){t.print("You can't seem to figure out what to do with this yet.")})).create(),X=[...[O,U,F,$,G,j,Q]],J=[(new W).withID("stone").withName("a dull stone").withDescription("There is nothing remarkable about this rough, bland stone.").isTakeable(!0).isUsable(!0).withTakeCallback((async function(t){t.print(`The ${this.id} feels heavy in your hands.`)})).withDropCallback((async function(t){t.print("It bounces back and forth a little.")})).withUseCallback((async function(t){t.print(`You can't really figure out what to do with ${this.name} yet`)})).create(),(new W).withID("torch").withName("a torch").withDescription("A standard torch that provides light.").isUsable(!0).isTakeable(!0).withUseCallback((async function(t){t.print("You try to light the torch but fail.")})).create(),(new W).withID("cup").withName("a cup").withDescription("A standard coffee cup").isTakeable(!0).isUsable(!1).create(),(new W).withID("statue1").withName("a huge ant statue").withDescription("Before you stands a big ant statue. One of its six legs is extended outwards, attached to a round device.").isTakeable(!1).isUsable(!0).withUseCallback((async function(t){t.print("You press the button on the round device attached to the statue's arm.");let e=t.state.get("statue1.pressed",0);e++,t.state.set("statue1.pressed",e),3==e&&(t.print("You hear a sattisfying click."),t.state.set("statues.unlocked",!0)),t.state.get("statue1.pressed")>2&&t.state.get("statue2.pressed")>1&&(t.print("You hear a low rumble somewhere deep within the bowels of the structure."),t.state.set("statues.unlocked",!0))})).create(),(new W).withID("statue2").withName("a huge ant statue").withDescription("Before you stands a big ant statue. Two of its six legs is extended outwards, attached to a rectangular device.").isTakeable(!1).isUsable(!0).withUseCallback((async function(t){t.print("You press the button on the rectangular device attached to the statue's arm.");let e=t.state.get("statue2.pressed",0);e++,t.state.set("statue2.pressed",e),2==e&&t.print("You hear a sattisfying click."),t.state.get("statue1.pressed")>2&&t.state.get("statue2.pressed")>1&&(t.print("You hear a low rumble somewhere deep within the bowels of the structure."),t.state.set("statues.unlocked",!0))})).create(),(new W).withID("statue3").withName("a huge ant statue").withDescription("Before you stands a big ant statue. Three of its six legs are extended outwards, attached to a round stone tablet.").isTakeable(!1).isUsable(!0).withUseCallback((async function(t){t.print("You examine the stone tablet in the statue's hands. There appear to be symbols on it which you can make out.")})).create(),Q];async function K(t,e){e.print("You meow.")}function Z(t){new P(t).init({rooms:X,commands:[[["meow","mew"],K]],items:J})}localStorage.getItem("save")&&(document.getElementById("save-game-found").hidden=!1,document.getElementById("before-play").hidden=!0,document.getElementById("load-save-game").addEventListener("click",(()=>{document.getElementById("save-game-found").hidden=!0,document.getElementById("play-area").hidden=!1,Z(!1)})),document.getElementById("start-new-game").addEventListener("click",(()=>{document.getElementById("save-game-found").hidden=!0,document.getElementById("play-area").hidden=!1,Z(!0)}))),document.getElementById("begin").addEventListener("click",(()=>{document.getElementById("before-play").hidden=!0,document.getElementById("play-area").hidden=!1,Z(!0)}))})(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q3JCYyxJQUFJWSxHQUNsQjVCLE9BQU8sV0FDUDZCLFNBQVMscUJBQ1R6QixnQkFDRyxzSEFFSDZCLFlBQVcsR0FDWEQsVUFBUyxHQUNURSxpQkFBZ0I1SixlQUFnQnZjLEdBQzdCQSxFQUFRNmUsTUFBTSxtSEFFakJvRyxTTkVHMEIsR09mV3BLLGVBQWVxSyxFQUFZMUksRUFBTWxlLEdBQzVDQSxFQUFRNmUsTUFBTSxhQ3lCbEIsU0FBU2dJLEVBQVVyRixHQUNGLElBQUlELEVBQUtDLEdBRWpCdGdCLEtBQUssQ0FDTm1nQixNQUFPLEVBQ1AvQixTQUFVLENBQ04sQ0FBQyxDQUFDLE9BQVEsT0FBUXNILElBRXRCeEksTUFBTyxJQTdCWHdDLGFBQWFwZ0IsUUFBUSxVQUNyQlksU0FBUzRiLGVBQWUsbUJBQW1COEosUUFBUyxFQUNwRDFsQixTQUFTNGIsZUFBZSxlQUFlOEosUUFBUyxFQUNoRDFsQixTQUFTNGIsZUFBZSxrQkFBa0I3RSxpQkFBaUIsU0FBUyxLQUNoRS9XLFNBQVM0YixlQUFlLG1CQUFtQjhKLFFBQVMsRUFDcEQxbEIsU0FBUzRiLGVBQWUsYUFBYThKLFFBQVMsRUFDOUNELEdBQVUsTUFFZHpsQixTQUFTNGIsZUFBZSxrQkFBa0I3RSxpQkFBaUIsU0FBUyxLQUNoRS9XLFNBQVM0YixlQUFlLG1CQUFtQjhKLFFBQVMsRUFDcEQxbEIsU0FBUzRiLGVBQWUsYUFBYThKLFFBQVMsRUFDOUNELEdBQVUsT0FJbEJ6bEIsU0FBUzRiLGVBQWUsU0FBUzdFLGlCQUFpQixTQUFTLEtBQ3ZEL1csU0FBUzRiLGVBQWUsZUFBZThKLFFBQVMsRUFDaEQxbEIsU0FBUzRiLGVBQWUsYUFBYThKLFFBQVMsRUFDOUNELEdBQVUsTyIsInNvdXJjZXMiOlsid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9wbGF5ZXIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvb3V0cHV0cy9iYXNlLW91dHB1dC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3R0cy9vdXRwdXRzL2FyaWEuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvb3V0cHV0cy93ZWJ0dHMuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvb3V0cHV0LWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvYXVkaW8tY29udGV4dC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL2V2ZW50LWJ1cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL21hdGgvdmVjNC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL21hdGgvbWF0NC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL21hdGgvdmVjMi5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL21hdGgvbWF0My5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL21hdGgvcXVhdC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL21hdGgvdmVjMy5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9zY2VuZXMvd2ViYXVkaW8tc2NlbmUuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZWZmZWN0LWNoYWluLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2F1ZGlvLWdyYXBoLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL3NvdXJjZXMvc291cmNlLXR5cGUuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3Ivc291cmNlcy9hdWRpby1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZGF0YS1wb29sLWl0ZW0uanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvbG9hZGVycy9odHRwLWxvYWRlci5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9kYXRhLXBvb2wuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZWZmZWN0cy9jb252b2x2ZXIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZWZmZWN0cy9iYXNlLWVmZmVjdC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9zb3VyY2VzL3N0cmVhbWluZy1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9zb3VuZC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL291dHB1dC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2lucHV0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy9sb29rLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvdXNlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvdGFrZS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzL2Ryb3AuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy9lY2hvLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvc2F2ZS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzL2xvYWQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy92b2x1bWUuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy9pbnZlbnRvcnkuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9zZXJpYWxpemF0aW9uLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9yb29tLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvYnVpbGRlcnMvcm9vbS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9sYWlyL3N0YXJ0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL2xhaXIvdHVubmVsMS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9sYWlyL2NlbnRyYWwxLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL2xhaXIvc3RhdHVlMS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9sYWlyL3N0YXR1ZTIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2dhbWUvcm9vbXMvbGFpci9zdGF0dWUzLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvaXRlbS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2J1aWxkZXJzL2l0ZW0uanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2dhbWUvaXRlbXMvc3RhdHVlNC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9sYWlyL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3N0b25lLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3RvcmNoLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL2N1cC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9pdGVtcy9zdGF0dWUxLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3N0YXR1ZTIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2dhbWUvaXRlbXMvc3RhdHVlMy5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9jb21tYW5kcy9tZW93LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGVzID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChrZXksIGRlZmF1bHRWYWx1ZSA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVzLnNldChrZXksIGRlZmF1bHRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlcy5nZXQoa2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlcy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlKGtleSwgYW1vdW50ID0gMSkge1xyXG4gICAgICAgIGxldCB2YWwgPSB0aGlzLmdldChrZXksIDApO1xyXG4gICAgICAgIHZhbCArPSBhbW91bnQ7XHJcbiAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlcmlhbGl6ZSgpIHtcclxuICAgICAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5zdGF0ZXMuZW50cmllcygpO1xyXG4gICAgICAgIGNvbnN0IGVudHJ5bWFwID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgc3RhdGUgb2YgZW50cmllcykge1xyXG4gICAgICAgICAgICBlbnRyeW1hcC5wdXNoKHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVudHJ5bWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc2VyaWFsaXplKGRhdGEpIHtcclxuICAgICAgICB0aGlzLnN0YXRlcyA9IG5ldyBNYXAoZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBQbGF5ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbnZlbnRvcnkgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSb29tID0gXCJzdGFydFwiO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSXRlbShpZCkge1xyXG4gICAgICAgIHRoaXMuaW52ZW50b3J5LnB1c2goaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oaWQpIHtcclxuICAgICAgICB0aGlzLmludmVudG9yeSA9IHRoaXMuaW52ZW50b3J5LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW52ZW50b3J5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludmVudG9yeS5tYXAoKGl0ZW0pID0+IHRoaXMuY29udGV4dC5nZXRJdGVtKGl0ZW0pKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBjbGFzcyBCYXNlT3V0cHV0IHtcclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlT3V0cHV0IH0gZnJvbSAnLi9iYXNlLW91dHB1dCc7XHJcbmV4cG9ydCBjbGFzcyBBcmlhT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IDEwMDtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgfHwgMTAwO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQodGhpcy5zcGVlY2hEaXNwbGF5KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lciwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLmNsZWFyRGlzcGxheSgpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG4gICAgICAgIHBhcmEuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hEaXNwbGF5LmFwcGVuZENoaWxkKHBhcmEpO1xyXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5jbGVhckRpc3BsYXkuYmluZCh0aGlzKSwgdGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckRpc3BsYXkoKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGlzcGxheSgpIHtcclxuICAgICAgICB0aGlzLnNwZWVjaERpc3BsYXkuaW5uZXJIVE1MID0gJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmFzZU91dHB1dCB9IGZyb20gJy4vYmFzZS1vdXRwdXQnO1xyXG5leHBvcnQgY2xhc3MgV2ViVFRTT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMucmF0ZSA9IG9wdGlvbnMucmF0ZSB8fCAxO1xyXG4gICAgICAgIHRoaXMuc3ludGggPSB3aW5kb3cuc3BlZWNoU3ludGhlc2lzO1xyXG4gICAgfVxyXG4gICAgc3BlYWsodGV4dCkge1xyXG4gICAgICAgIGxldCB1dHRlclRoaXMgPSBuZXcgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKHRleHQpO1xyXG4gICAgICAgIHV0dGVyVGhpcy5yYXRlID0gdGhpcy5yYXRlO1xyXG4gICAgICAgIHRoaXMuc3ludGguc3BlYWsodXR0ZXJUaGlzKTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5zeW50aC5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMucmF0ZSA9IG9wdGlvbnMucmF0ZSB8fCAxO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGNyZWF0ZU91dHB1dCB9IGZyb20gJy4vb3V0cHV0LWZhY3RvcnknO1xyXG5leHBvcnQgY2xhc3MgVFRTIHtcclxuICAgIGNvbnN0cnVjdG9yKG91dHB1dCA9IGNyZWF0ZU91dHB1dCgpKSB7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQgPSBvdXRwdXQ7XHJcbiAgICB9XHJcbiAgICBzcGVhayh0ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc3BlYWsodGV4dCk7XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMub3V0cHV0LnN0b3AoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXRzL2Jhc2Utb3V0cHV0JztcclxuaW1wb3J0IHsgQXJpYU91dHB1dCB9IGZyb20gJy4vb3V0cHV0cy9hcmlhJztcclxuaW1wb3J0IHsgV2ViVFRTT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXRzL3dlYnR0cyc7XHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdXRwdXQoa2V5ID0gJ2FyaWEnKSB7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgIGNhc2UgJ2FyaWEnOlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFyaWFPdXRwdXQoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnd2VidHRzJzpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJUVFNPdXRwdXQoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcmlhT3V0cHV0KCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCB7IFdlYlRUU091dHB1dCwgQXJpYU91dHB1dCwgQmFzZU91dHB1dCB9O1xyXG4iLCIvLyBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIEF1ZGlvQ29udGV4dFxyXG4vLyBldmVudHVhbGx5IHdpbGwgYmUgdXNlZCB0byBkZWFsIHdpdGggY3Jvc3MgYnJvd3NlciBpc3N1ZXNcclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbmF0b3JBdWRpb0NvbnRleHQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgfVxyXG4gICAgZ2V0Q29udGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xyXG4gICAgfVxyXG4gICAgY3JlYXRlR2FpbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgIH1cclxuICAgIGdldE91dHB1dERlc3RpbmF0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuZGVzdGluYXRpb247XHJcbiAgICB9XHJcbiAgICBjcmVhdGVCdWZmZXJTb3VyY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcclxuICAgIH1cclxuICAgIGRlY29kZUF1ZGlvRGF0YShkYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dC5kZWNvZGVBdWRpb0RhdGEoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVQYW5uZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5jcmVhdGVQYW5uZXIoKTtcclxuICAgIH1cclxuICAgIGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoZWxlbWVudCk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEV2ZW50QnVzIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRzID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgZW1pdChpZCwgZGF0YSA9IHt9KSB7XHJcbiAgICAgICAgbGV0IGV2ID0gdGhpcy5ldmVudHMuZ2V0KGlkKTtcclxuICAgICAgICBpZiAoIWV2KSB7XHJcbiAgICAgICAgICAgIGxldCBldiA9IG5ldyBFdmVudEl0ZW0oaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5zZXQoaWQsIGV2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldi5zdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzdWJzY3JpYmUoaWQsIHN1YnNjcmliZXIpIHtcclxuICAgICAgICBsZXQgZXYgPSB0aGlzLmV2ZW50cy5nZXQoaWQpO1xyXG4gICAgICAgIGlmICghZXYpIHtcclxuICAgICAgICAgICAgZXYgPSBuZXcgRXZlbnRJdGVtKGlkKTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHMuc2V0KGlkLCBldik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2LnN1YnNjcmliZXJzLnB1c2goc3Vic2NyaWJlcik7XHJcbiAgICB9XHJcbiAgICB1bnN1YnNjcmliZShpZCwgc3Vic2NyaWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLmV2ZW50cy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIGxldCBldiA9IHRoaXMuZXZlbnRzLmdldChpZCk7XHJcbiAgICAgICAgICAgIGV2LnN1YnNjcmliZXJzID0gZXYuc3Vic2NyaWJlcnMuZmlsdGVyKChmbikgPT4gZm4gIT09IHN1YnNjcmliZXIpO1xyXG4gICAgICAgICAgICBpZiAoZXYuc3Vic2NyaWJlcnMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudHMuZGVsZXRlKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHVuc3Vic2NyaWJlQWxsKGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHMuZGVsZXRlKGlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEV2ZW50SXRlbSB7XHJcbiAgICBjb25zdHJ1Y3RvcihpZCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBpZDtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzID0gW107XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgdmVjNCB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6dyA9IHZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgeCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBnZXQgeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBnZXQgeigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBnZXQgdygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbM107XHJcbiAgICB9XHJcbiAgICBnZXQgeHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV1dO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5eigpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl1dO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5encoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdLCB0aGlzLnZhbHVlc1szXV07XHJcbiAgICB9XHJcbiAgICBzZXQgeCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgdyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeHkodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5encodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZXNbM107XHJcbiAgICB9XHJcbiAgICBnZXQgcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBnZXQgZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBnZXQgYigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBnZXQgYSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbM107XHJcbiAgICB9XHJcbiAgICBnZXQgcmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV1dO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJnYigpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl1dO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJnYmEoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdLCB0aGlzLnZhbHVlc1szXV07XHJcbiAgICB9XHJcbiAgICBzZXQgcih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgZyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgYih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgYSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgcmcodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBzZXQgcmdiKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgc2V0IHJnYmEodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZXNbM107XHJcbiAgICB9XHJcbiAgICBhdChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICB0aGlzLnggPSAwO1xyXG4gICAgICAgIHRoaXMueSA9IDA7XHJcbiAgICAgICAgdGhpcy56ID0gMDtcclxuICAgICAgICB0aGlzLncgPSAwO1xyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB0aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gdGhpcy55O1xyXG4gICAgICAgIGRlc3QueiA9IHRoaXMuejtcclxuICAgICAgICBkZXN0LncgPSB0aGlzLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBuZWdhdGUoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gLXRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSAtdGhpcy55O1xyXG4gICAgICAgIGRlc3QueiA9IC10aGlzLno7XHJcbiAgICAgICAgZGVzdC53ID0gLXRoaXMudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGVxdWFscyh2ZWN0b3IsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy54IC0gdmVjdG9yLngpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueSAtIHZlY3Rvci55KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnogLSB2ZWN0b3IueikgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy53IC0gdmVjdG9yLncpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBsZW5ndGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWRMZW5ndGgoKSk7XHJcbiAgICB9XHJcbiAgICBzcXVhcmVkTGVuZ3RoKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xyXG4gICAgfVxyXG4gICAgYWRkKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCArPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56ICs9IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudyArPSB2ZWN0b3IudztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN1YnRyYWN0KHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAtPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLT0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56IC09IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudyAtPSB2ZWN0b3IudztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5KHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAqPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKj0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56ICo9IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudyAqPSB2ZWN0b3IudztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGRpdmlkZSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLz0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAvPSB2ZWN0b3IuejtcclxuICAgICAgICB0aGlzLncgLz0gdmVjdG9yLnc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzY2FsZSh2YWx1ZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueSAqPSB2YWx1ZTtcclxuICAgICAgICBkZXN0LnogKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC53ICo9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZGVzdC54ICo9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSAqPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnogKj0gMDtcclxuICAgICAgICAgICAgZGVzdC53ICo9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiAqPSBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC53ICo9IGxlbmd0aDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG11bHRpcGx5TWF0NChtYXRyaXgsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXRyaXgubXVsdGlwbHlWZWM0KHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIG1peCh2ZWN0b3IsIHZlY3RvcjIsIHRpbWUsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICsgdGltZSAqICh2ZWN0b3IyLnggLSB2ZWN0b3IueCk7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB0aW1lICogKHZlY3RvcjIueSAtIHZlY3Rvci55KTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiArIHRpbWUgKiAodmVjdG9yMi56IC0gdmVjdG9yLnopO1xyXG4gICAgICAgIGRlc3QudyA9IHZlY3Rvci53ICsgdGltZSAqICh2ZWN0b3IyLncgLSB2ZWN0b3Iudyk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKyB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgKyB2ZWN0b3IyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC0gdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QudyA9IHZlY3Rvci53IC0gdmVjdG9yMi53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAqIHZlY3RvcjIuejtcclxuICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyAqIHZlY3RvcjIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC8gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC8gdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QudyA9IHZlY3Rvci53IC8gdmVjdG9yMi53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG59XHJcbnZlYzQuemVybyA9IG5ldyB2ZWM0KFswLCAwLCAwLCAxXSk7XHJcbnZlYzQub25lID0gbmV3IHZlYzQoWzEsIDEsIDEsIDFdKTtcclxuIiwiaW1wb3J0IG1hdDMgZnJvbSAnLi9tYXQzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi92ZWMzJztcclxuaW1wb3J0IHZlYzQgZnJvbSAnLi92ZWM0JztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgbWF0NCB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpO1xyXG4gICAgICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQodmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhdChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICBpbml0KHZhbHVlcykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IHZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlc3QudmFsdWVzW2ldID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgYWxsKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICAgICAgZGF0YVtpXSA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuICAgIHJvdyhpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogNCArIDBdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDQgKyAxXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgMl0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogNCArIDNdXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIGNvbChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKyA0XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKyA4XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKyAxMl1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKG1hdHJpeCwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52YWx1ZXNbaV0gLSBtYXRyaXguYXQoaSkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBkZXRlcm1pbmFudCgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XHJcbiAgICAgICAgY29uc3QgYTIzID0gdGhpcy52YWx1ZXNbMTFdO1xyXG4gICAgICAgIGNvbnN0IGEzMCA9IHRoaXMudmFsdWVzWzEyXTtcclxuICAgICAgICBjb25zdCBhMzEgPSB0aGlzLnZhbHVlc1sxM107XHJcbiAgICAgICAgY29uc3QgYTMyID0gdGhpcy52YWx1ZXNbMTRdO1xyXG4gICAgICAgIGNvbnN0IGEzMyA9IHRoaXMudmFsdWVzWzE1XTtcclxuICAgICAgICBjb25zdCBkZXQwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcclxuICAgICAgICBjb25zdCBkZXQwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcclxuICAgICAgICBjb25zdCBkZXQwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcclxuICAgICAgICBjb25zdCBkZXQwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcclxuICAgICAgICBjb25zdCBkZXQxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjtcclxuICAgICAgICByZXR1cm4gKGRldDAwICogZGV0MTEgLVxyXG4gICAgICAgICAgICBkZXQwMSAqIGRldDEwICtcclxuICAgICAgICAgICAgZGV0MDIgKiBkZXQwOSArXHJcbiAgICAgICAgICAgIGRldDAzICogZGV0MDggLVxyXG4gICAgICAgICAgICBkZXQwNCAqIGRldDA3ICtcclxuICAgICAgICAgICAgZGV0MDUgKiBkZXQwNik7XHJcbiAgICB9XHJcbiAgICBzZXRJZGVudGl0eSgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s5XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNF0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE1XSA9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0cmFuc3Bvc2UoKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcDAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgdGVtcDAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgdGVtcDAzID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgdGVtcDEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgdGVtcDEzID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgdGVtcDIzID0gdGhpcy52YWx1ZXNbMTFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHRoaXMudmFsdWVzWzEyXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IHRlbXAwMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gdGhpcy52YWx1ZXNbMTNdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gdGVtcDAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gdGVtcDEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9IHRoaXMudmFsdWVzWzE0XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMl0gPSB0ZW1wMDM7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gdGVtcDEzO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE0XSA9IHRlbXAyMztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGludmVyc2UoKSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTAzID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTEzID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IHRoaXMudmFsdWVzWzExXTtcclxuICAgICAgICBjb25zdCBhMzAgPSB0aGlzLnZhbHVlc1sxMl07XHJcbiAgICAgICAgY29uc3QgYTMxID0gdGhpcy52YWx1ZXNbMTNdO1xyXG4gICAgICAgIGNvbnN0IGEzMiA9IHRoaXMudmFsdWVzWzE0XTtcclxuICAgICAgICBjb25zdCBhMzMgPSB0aGlzLnZhbHVlc1sxNV07XHJcbiAgICAgICAgY29uc3QgZGV0MDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XHJcbiAgICAgICAgY29uc3QgZGV0MDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XHJcbiAgICAgICAgY29uc3QgZGV0MDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XHJcbiAgICAgICAgY29uc3QgZGV0MDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XHJcbiAgICAgICAgY29uc3QgZGV0MDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XHJcbiAgICAgICAgY29uc3QgZGV0MDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XHJcbiAgICAgICAgY29uc3QgZGV0MDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XHJcbiAgICAgICAgY29uc3QgZGV0MDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XHJcbiAgICAgICAgY29uc3QgZGV0MDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XHJcbiAgICAgICAgY29uc3QgZGV0MDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XHJcbiAgICAgICAgY29uc3QgZGV0MTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XHJcbiAgICAgICAgY29uc3QgZGV0MTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7XHJcbiAgICAgICAgbGV0IGRldCA9IGRldDAwICogZGV0MTEgLVxyXG4gICAgICAgICAgICBkZXQwMSAqIGRldDEwICtcclxuICAgICAgICAgICAgZGV0MDIgKiBkZXQwOSArXHJcbiAgICAgICAgICAgIGRldDAzICogZGV0MDggLVxyXG4gICAgICAgICAgICBkZXQwNCAqIGRldDA3ICtcclxuICAgICAgICAgICAgZGV0MDUgKiBkZXQwNjtcclxuICAgICAgICBpZiAoIWRldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGV0ID0gMS4wIC8gZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gKGExMSAqIGRldDExIC0gYTEyICogZGV0MTAgKyBhMTMgKiBkZXQwOSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSAoLWEwMSAqIGRldDExICsgYTAyICogZGV0MTAgLSBhMDMgKiBkZXQwOSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAoYTMxICogZGV0MDUgLSBhMzIgKiBkZXQwNCArIGEzMyAqIGRldDAzKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9ICgtYTIxICogZGV0MDUgKyBhMjIgKiBkZXQwNCAtIGEyMyAqIGRldDAzKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9ICgtYTEwICogZGV0MTEgKyBhMTIgKiBkZXQwOCAtIGExMyAqIGRldDA3KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IChhMDAgKiBkZXQxMSAtIGEwMiAqIGRldDA4ICsgYTAzICogZGV0MDcpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gKC1hMzAgKiBkZXQwNSArIGEzMiAqIGRldDAyIC0gYTMzICogZGV0MDEpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gKGEyMCAqIGRldDA1IC0gYTIyICogZGV0MDIgKyBhMjMgKiBkZXQwMSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAoYTEwICogZGV0MTAgLSBhMTEgKiBkZXQwOCArIGExMyAqIGRldDA2KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s5XSA9ICgtYTAwICogZGV0MTAgKyBhMDEgKiBkZXQwOCAtIGEwMyAqIGRldDA2KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSAoYTMwICogZGV0MDQgLSBhMzEgKiBkZXQwMiArIGEzMyAqIGRldDAwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSAoLWEyMCAqIGRldDA0ICsgYTIxICogZGV0MDIgLSBhMjMgKiBkZXQwMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gKC1hMTAgKiBkZXQwOSArIGExMSAqIGRldDA3IC0gYTEyICogZGV0MDYpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEzXSA9IChhMDAgKiBkZXQwOSAtIGEwMSAqIGRldDA3ICsgYTAyICogZGV0MDYpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE0XSA9ICgtYTMwICogZGV0MDMgKyBhMzEgKiBkZXQwMSAtIGEzMiAqIGRldDAwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNV0gPSAoYTIwICogZGV0MDMgLSBhMjEgKiBkZXQwMSArIGEyMiAqIGRldDAwKSAqIGRldDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5KG1hdHJpeCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBhMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgY29uc3QgYTMwID0gdGhpcy52YWx1ZXNbMTJdO1xyXG4gICAgICAgIGNvbnN0IGEzMSA9IHRoaXMudmFsdWVzWzEzXTtcclxuICAgICAgICBjb25zdCBhMzIgPSB0aGlzLnZhbHVlc1sxNF07XHJcbiAgICAgICAgY29uc3QgYTMzID0gdGhpcy52YWx1ZXNbMTVdO1xyXG4gICAgICAgIGxldCBiMCA9IG1hdHJpeC5hdCgwKTtcclxuICAgICAgICBsZXQgYjEgPSBtYXRyaXguYXQoMSk7XHJcbiAgICAgICAgbGV0IGIyID0gbWF0cml4LmF0KDIpO1xyXG4gICAgICAgIGxldCBiMyA9IG1hdHJpeC5hdCgzKTtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xyXG4gICAgICAgIGIwID0gbWF0cml4LmF0KDQpO1xyXG4gICAgICAgIGIxID0gbWF0cml4LmF0KDUpO1xyXG4gICAgICAgIGIyID0gbWF0cml4LmF0KDYpO1xyXG4gICAgICAgIGIzID0gbWF0cml4LmF0KDcpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcbiAgICAgICAgYjAgPSBtYXRyaXguYXQoOCk7XHJcbiAgICAgICAgYjEgPSBtYXRyaXguYXQoOSk7XHJcbiAgICAgICAgYjIgPSBtYXRyaXguYXQoMTApO1xyXG4gICAgICAgIGIzID0gbWF0cml4LmF0KDExKTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcbiAgICAgICAgYjAgPSBtYXRyaXguYXQoMTIpO1xyXG4gICAgICAgIGIxID0gbWF0cml4LmF0KDEzKTtcclxuICAgICAgICBiMiA9IG1hdHJpeC5hdCgxNCk7XHJcbiAgICAgICAgYjMgPSBtYXRyaXguYXQoMTUpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEzXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE0XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE1XSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlWZWMzKHZlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiBuZXcgdmVjMyhbXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s0XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzEyXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s5XSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTNdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzEwXSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTRdXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzQodmVjdG9yLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBjb25zdCB3ID0gdmVjdG9yLnc7XHJcbiAgICAgICAgZGVzdC54ID1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTJdICogdztcclxuICAgICAgICBkZXN0LnkgPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzldICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxM10gKiB3O1xyXG4gICAgICAgIGRlc3QueiA9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTBdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxNF0gKiB3O1xyXG4gICAgICAgIGRlc3QudyA9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzNdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s3XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTFdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxNV0gKiB3O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgdG9NYXQzKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0MyhbXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s5XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTBdXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICB0b0ludmVyc2VNYXQzKCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XHJcbiAgICAgICAgY29uc3QgZGV0MjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XHJcbiAgICAgICAgbGV0IGRldCA9IGEwMCAqIGRldDAxICsgYTAxICogZGV0MTEgKyBhMDIgKiBkZXQyMTtcclxuICAgICAgICBpZiAoIWRldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGV0ID0gMS4wIC8gZGV0O1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0MyhbXHJcbiAgICAgICAgICAgIGRldDAxICogZGV0LFxyXG4gICAgICAgICAgICAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSkgKiBkZXQsXHJcbiAgICAgICAgICAgIChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0LFxyXG4gICAgICAgICAgICBkZXQxMSAqIGRldCxcclxuICAgICAgICAgICAgKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQsXHJcbiAgICAgICAgICAgICgtYTEyICogYTAwICsgYTAyICogYTEwKSAqIGRldCxcclxuICAgICAgICAgICAgZGV0MjEgKiBkZXQsXHJcbiAgICAgICAgICAgICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldCxcclxuICAgICAgICAgICAgKGExMSAqIGEwMCAtIGEwMSAqIGExMCkgKiBkZXRcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHRyYW5zbGF0ZSh2ZWN0b3IpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMl0gKz1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0gKiB4ICsgdGhpcy52YWx1ZXNbNF0gKiB5ICsgdGhpcy52YWx1ZXNbOF0gKiB6O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEzXSArPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSAqIHggKyB0aGlzLnZhbHVlc1s1XSAqIHkgKyB0aGlzLnZhbHVlc1s5XSAqIHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdICs9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdICogeCArIHRoaXMudmFsdWVzWzZdICogeSArIHRoaXMudmFsdWVzWzEwXSAqIHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdICs9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzNdICogeCArIHRoaXMudmFsdWVzWzddICogeSArIHRoaXMudmFsdWVzWzExXSAqIHo7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzY2FsZSh2ZWN0b3IpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSAqPSB4O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdICo9IHg7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gKj0geDtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSAqPSB4O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdICo9IHk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gKj0geTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSAqPSB5O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddICo9IHk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gKj0gejtcclxuICAgICAgICB0aGlzLnZhbHVlc1s5XSAqPSB6O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSAqPSB6O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSAqPSB6O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcm90YXRlKGFuZ2xlLCBheGlzKSB7XHJcbiAgICAgICAgbGV0IHggPSBheGlzLng7XHJcbiAgICAgICAgbGV0IHkgPSBheGlzLnk7XHJcbiAgICAgICAgbGV0IHogPSBheGlzLno7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgICAgIGlmICghbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgICAgIHggKj0gbGVuZ3RoO1xyXG4gICAgICAgICAgICB5ICo9IGxlbmd0aDtcclxuICAgICAgICAgICAgeiAqPSBsZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHMgPSBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAgICAgY29uc3QgYyA9IE1hdGguY29zKGFuZ2xlKTtcclxuICAgICAgICBjb25zdCB0ID0gMS4wIC0gYztcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XHJcbiAgICAgICAgY29uc3QgYTIzID0gdGhpcy52YWx1ZXNbMTFdO1xyXG4gICAgICAgIGNvbnN0IGIwMCA9IHggKiB4ICogdCArIGM7XHJcbiAgICAgICAgY29uc3QgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XHJcbiAgICAgICAgY29uc3QgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XHJcbiAgICAgICAgY29uc3QgYjEwID0geCAqIHkgKiB0IC0geiAqIHM7XHJcbiAgICAgICAgY29uc3QgYjExID0geSAqIHkgKiB0ICsgYztcclxuICAgICAgICBjb25zdCBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcclxuICAgICAgICBjb25zdCBiMjAgPSB4ICogeiAqIHQgKyB5ICogcztcclxuICAgICAgICBjb25zdCBiMjEgPSB5ICogeiAqIHQgLSB4ICogcztcclxuICAgICAgICBjb25zdCBiMjIgPSB6ICogeiAqIHQgKyBjO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYTAzICogYjAwICsgYTEzICogYjAxICsgYTIzICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJ1c3R1bShsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIGNvbnN0IHJsID0gcmlnaHQgLSBsZWZ0O1xyXG4gICAgICAgIGNvbnN0IHRiID0gdG9wIC0gYm90dG9tO1xyXG4gICAgICAgIGNvbnN0IGZuID0gZmFyIC0gbmVhcjtcclxuICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICAobmVhciAqIDIpIC8gcmwsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIChuZWFyICogMikgLyB0YixcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKHJpZ2h0ICsgbGVmdCkgLyBybCxcclxuICAgICAgICAgICAgKHRvcCArIGJvdHRvbSkgLyB0YixcclxuICAgICAgICAgICAgLShmYXIgKyBuZWFyKSAvIGZuLFxyXG4gICAgICAgICAgICAtMSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgLShmYXIgKiBuZWFyICogMikgLyBmbixcclxuICAgICAgICAgICAgMFxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHBlcnNwZWN0aXZlKGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBjb25zdCB0b3AgPSBuZWFyICogTWF0aC50YW4oKGZvdiAqIE1hdGguUEkpIC8gMzYwLjApO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdG9wICogYXNwZWN0O1xyXG4gICAgICAgIHJldHVybiBtYXQ0LmZydXN0dW0oLXJpZ2h0LCByaWdodCwgLXRvcCwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIG9ydGhvZ3JhcGhpYyhsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIGNvbnN0IHJsID0gcmlnaHQgLSBsZWZ0O1xyXG4gICAgICAgIGNvbnN0IHRiID0gdG9wIC0gYm90dG9tO1xyXG4gICAgICAgIGNvbnN0IGZuID0gZmFyIC0gbmVhcjtcclxuICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICAyIC8gcmwsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDIgLyB0YixcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgLTIgLyBmbixcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgLShsZWZ0ICsgcmlnaHQpIC8gcmwsXHJcbiAgICAgICAgICAgIC0odG9wICsgYm90dG9tKSAvIHRiLFxyXG4gICAgICAgICAgICAtKGZhciArIG5lYXIpIC8gZm4sXHJcbiAgICAgICAgICAgIDFcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBsb29rQXQocG9zaXRpb24sIHRhcmdldCwgdXAgPSB2ZWMzLnVwKSB7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uLmVxdWFscyh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlkZW50aXR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB6ID0gdmVjMy5kaWZmZXJlbmNlKHBvc2l0aW9uLCB0YXJnZXQpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWMzLmNyb3NzKHVwLCB6KS5ub3JtYWxpemUoKTtcclxuICAgICAgICBjb25zdCB5ID0gdmVjMy5jcm9zcyh6LCB4KS5ub3JtYWxpemUoKTtcclxuICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICB4LngsXHJcbiAgICAgICAgICAgIHkueCxcclxuICAgICAgICAgICAgei54LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB4LnksXHJcbiAgICAgICAgICAgIHkueSxcclxuICAgICAgICAgICAgei55LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB4LnosXHJcbiAgICAgICAgICAgIHkueixcclxuICAgICAgICAgICAgei56LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtdmVjMy5kb3QoeCwgcG9zaXRpb24pLFxyXG4gICAgICAgICAgICAtdmVjMy5kb3QoeSwgcG9zaXRpb24pLFxyXG4gICAgICAgICAgICAtdmVjMy5kb3QoeiwgcG9zaXRpb24pLFxyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcHJvZHVjdChtMSwgbTIsIHJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IG0xLmF0KDApO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IG0xLmF0KDEpO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IG0xLmF0KDIpO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IG0xLmF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IG0xLmF0KDQpO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IG0xLmF0KDUpO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IG0xLmF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IG0xLmF0KDcpO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IG0xLmF0KDgpO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IG0xLmF0KDkpO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IG0xLmF0KDEwKTtcclxuICAgICAgICBjb25zdCBhMjMgPSBtMS5hdCgxMSk7XHJcbiAgICAgICAgY29uc3QgYTMwID0gbTEuYXQoMTIpO1xyXG4gICAgICAgIGNvbnN0IGEzMSA9IG0xLmF0KDEzKTtcclxuICAgICAgICBjb25zdCBhMzIgPSBtMS5hdCgxNCk7XHJcbiAgICAgICAgY29uc3QgYTMzID0gbTEuYXQoMTUpO1xyXG4gICAgICAgIGNvbnN0IGIwMCA9IG0yLmF0KDApO1xyXG4gICAgICAgIGNvbnN0IGIwMSA9IG0yLmF0KDEpO1xyXG4gICAgICAgIGNvbnN0IGIwMiA9IG0yLmF0KDIpO1xyXG4gICAgICAgIGNvbnN0IGIwMyA9IG0yLmF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGIxMCA9IG0yLmF0KDQpO1xyXG4gICAgICAgIGNvbnN0IGIxMSA9IG0yLmF0KDUpO1xyXG4gICAgICAgIGNvbnN0IGIxMiA9IG0yLmF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGIxMyA9IG0yLmF0KDcpO1xyXG4gICAgICAgIGNvbnN0IGIyMCA9IG0yLmF0KDgpO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IG0yLmF0KDkpO1xyXG4gICAgICAgIGNvbnN0IGIyMiA9IG0yLmF0KDEwKTtcclxuICAgICAgICBjb25zdCBiMjMgPSBtMi5hdCgxMSk7XHJcbiAgICAgICAgY29uc3QgYjMwID0gbTIuYXQoMTIpO1xyXG4gICAgICAgIGNvbnN0IGIzMSA9IG0yLmF0KDEzKTtcclxuICAgICAgICBjb25zdCBiMzIgPSBtMi5hdCgxNCk7XHJcbiAgICAgICAgY29uc3QgYjMzID0gbTIuYXQoMTUpO1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmluaXQoW1xyXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwICsgYjAzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxICsgYjAzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyICsgYjAzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAzICsgYjAxICogYTEzICsgYjAyICogYTIzICsgYjAzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwICsgYjEzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxICsgYjEzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyICsgYjEzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAzICsgYjExICogYTEzICsgYjEyICogYTIzICsgYjEzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwICsgYjIzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxICsgYjIzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyICsgYjIzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAzICsgYjIxICogYTEzICsgYjIyICogYTIzICsgYjIzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAwICsgYjMxICogYTEwICsgYjMyICogYTIwICsgYjMzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAxICsgYjMxICogYTExICsgYjMyICogYTIxICsgYjMzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAyICsgYjMxICogYTEyICsgYjMyICogYTIyICsgYjMzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAzICsgYjMxICogYTEzICsgYjMyICogYTIzICsgYjMzICogYTMzXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBtYXQ0KFtcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMCArIGIwMyAqIGEzMCxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSArIGIwMyAqIGEzMSxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMiArIGIwMyAqIGEzMixcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMyArIGIwMSAqIGExMyArIGIwMiAqIGEyMyArIGIwMyAqIGEzMyxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMCArIGIxMyAqIGEzMCxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMSArIGIxMyAqIGEzMSxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMiArIGIxMyAqIGEzMixcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMyArIGIxMSAqIGExMyArIGIxMiAqIGEyMyArIGIxMyAqIGEzMyxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMCArIGIyMyAqIGEzMCxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMSArIGIyMyAqIGEzMSxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMiArIGIyMyAqIGEzMixcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMyArIGIyMSAqIGExMyArIGIyMiAqIGEyMyArIGIyMyAqIGEzMyxcclxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMCArIGIzMSAqIGExMCArIGIzMiAqIGEyMCArIGIzMyAqIGEzMCxcclxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMSArIGIzMSAqIGExMSArIGIzMiAqIGEyMSArIGIzMyAqIGEzMSxcclxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMiArIGIzMSAqIGExMiArIGIzMiAqIGEyMiArIGIzMyAqIGEzMixcclxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMyArIGIzMSAqIGExMyArIGIzMiAqIGEyMyArIGIzMyAqIGEzM1xyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxubWF0NC5pZGVudGl0eSA9IG5ldyBtYXQ0KCkuc2V0SWRlbnRpdHkoKTtcclxuIiwiaW1wb3J0IHZlYzMgZnJvbSAnLi92ZWMzJztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgdmVjMiB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMueHkgPSB2YWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdXTtcclxuICAgIH1cclxuICAgIHNldCB4KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB5KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB4eSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdGhpcy54O1xyXG4gICAgICAgIGRlc3QueSA9IHRoaXMueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5lZ2F0ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSAtdGhpcy54O1xyXG4gICAgICAgIGRlc3QueSA9IC10aGlzLnk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBlcXVhbHModmVjdG9yLCB0aHJlc2hvbGQgPSBlcHNpbG9uKSB7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueCAtIHZlY3Rvci54KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnkgLSB2ZWN0b3IueSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuc3F1YXJlZExlbmd0aCgpKTtcclxuICAgIH1cclxuICAgIHNxdWFyZWRMZW5ndGgoKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5O1xyXG4gICAgfVxyXG4gICAgYWRkKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCArPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzdWJ0cmFjdCh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLT0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC09IHZlY3Rvci55O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICo9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAqPSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGRpdmlkZSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLz0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2NhbGUodmFsdWUsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCAqPSB2YWx1ZTtcclxuICAgICAgICBkZXN0LnkgKj0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBub3JtYWxpemUoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnkgPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gMS4wIC8gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueCAqPSBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC55ICo9IGxlbmd0aDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG11bHRpcGx5TWF0MihtYXRyaXgsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXRyaXgubXVsdGlwbHlWZWMyKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlNYXQzKG1hdHJpeCwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzIodGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY3Jvc3ModmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHgyID0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkyID0gdmVjdG9yMi55O1xyXG4gICAgICAgIGNvbnN0IHogPSB4ICogeTIgLSB5ICogeDI7XHJcbiAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICBkZXN0LnkgPSAwO1xyXG4gICAgICAgIGRlc3QueiA9IHo7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZG90KHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIHJldHVybiB2ZWN0b3IueCAqIHZlY3RvcjIueCArIHZlY3Rvci55ICogdmVjdG9yMi55O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3F1YXJlZERpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlyZWN0aW9uKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueSAtIHZlY3RvcjIueTtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIG1peCh2ZWN0b3IsIHZlY3RvcjIsIHRpbWUsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeDIgPSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeTIgPSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC54ID0geCArIHRpbWUgKiAoeDIgLSB4KTtcclxuICAgICAgICBkZXN0LnkgPSB5ICsgdGltZSAqICh5MiAtIHkpO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHN1bSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICsgdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICsgdmVjdG9yMi55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRpZmZlcmVuY2UodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAtIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAtIHZlY3RvcjIueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKiB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKiB2ZWN0b3IyLnk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcXVvdGllbnQodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAvIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAvIHZlY3RvcjIueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxufVxyXG52ZWMyLnplcm8gPSBuZXcgdmVjMihbMCwgMF0pO1xyXG52ZWMyLm9uZSA9IG5ldyB2ZWMyKFsxLCAxXSk7XHJcbiIsImltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4vcXVhdCc7XHJcbmltcG9ydCB2ZWMyIGZyb20gJy4vdmVjMic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIG1hdDMge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xyXG4gICAgICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQodmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhdChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICBpbml0KHZhbHVlcykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gdmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBtYXQzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlc3QudmFsdWVzW2ldID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgYWxsKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgICAgICBkYXRhW2ldID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG4gICAgcm93KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiAzICsgMF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogMyArIDFdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDMgKyAyXVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgICBjb2woaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzW2luZGV4XSwgdGhpcy52YWx1ZXNbaW5kZXggKyAzXSwgdGhpcy52YWx1ZXNbaW5kZXggKyA2XV07XHJcbiAgICB9XHJcbiAgICBlcXVhbHMobWF0cml4LCB0aHJlc2hvbGQgPSBlcHNpbG9uKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMudmFsdWVzW2ldIC0gbWF0cml4LmF0KGkpKSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZGV0ZXJtaW5hbnQoKSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgZGV0MDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7XHJcbiAgICAgICAgY29uc3QgZGV0MTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwO1xyXG4gICAgICAgIGNvbnN0IGRldDIxID0gYTIxICogYTEwIC0gYTExICogYTIwO1xyXG4gICAgICAgIHJldHVybiBhMDAgKiBkZXQwMSArIGEwMSAqIGRldDExICsgYTAyICogZGV0MjE7XHJcbiAgICB9XHJcbiAgICBzZXRJZGVudGl0eSgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRyYW5zcG9zZSgpIHtcclxuICAgICAgICBjb25zdCB0ZW1wMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCB0ZW1wMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCB0ZW1wMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB0ZW1wMDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IHRlbXAwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IHRlbXAxMjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGludmVyc2UoKSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgZGV0MDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7XHJcbiAgICAgICAgY29uc3QgZGV0MTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwO1xyXG4gICAgICAgIGNvbnN0IGRldDIxID0gYTIxICogYTEwIC0gYTExICogYTIwO1xyXG4gICAgICAgIGxldCBkZXQgPSBhMDAgKiBkZXQwMSArIGEwMSAqIGRldDExICsgYTAyICogZGV0MjE7XHJcbiAgICAgICAgaWYgKCFkZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRldCA9IDEuMCAvIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGRldDAxICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gKGExMiAqIGEwMSAtIGEwMiAqIGExMSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBkZXQxMSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IChhMjIgKiBhMDAgLSBhMDIgKiBhMjApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gZGV0MjEgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5KG1hdHJpeCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGIwMCA9IG1hdHJpeC5hdCgwKTtcclxuICAgICAgICBjb25zdCBiMDEgPSBtYXRyaXguYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYjAyID0gbWF0cml4LmF0KDIpO1xyXG4gICAgICAgIGNvbnN0IGIxMCA9IG1hdHJpeC5hdCgzKTtcclxuICAgICAgICBjb25zdCBiMTEgPSBtYXRyaXguYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYjEyID0gbWF0cml4LmF0KDUpO1xyXG4gICAgICAgIGNvbnN0IGIyMCA9IG1hdHJpeC5hdCg2KTtcclxuICAgICAgICBjb25zdCBiMjEgPSBtYXRyaXguYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYjIyID0gbWF0cml4LmF0KDgpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlWZWMyKHZlY3RvciwgcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC54eSA9IFtcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1swXSArIHkgKiB0aGlzLnZhbHVlc1szXSArIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgdGhpcy52YWx1ZXNbN11cclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgdmVjMihbXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMF0gKyB5ICogdGhpcy52YWx1ZXNbM10gKyB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1sxXSArIHkgKiB0aGlzLnZhbHVlc1s0XSArIHRoaXMudmFsdWVzWzddXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG11bHRpcGx5VmVjMyh2ZWN0b3IsIHJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lnh5eiA9IFtcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1swXSArIHkgKiB0aGlzLnZhbHVlc1szXSArIHogKiB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1sxXSArIHkgKiB0aGlzLnZhbHVlc1s0XSArIHogKiB0aGlzLnZhbHVlc1s3XSxcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1syXSArIHkgKiB0aGlzLnZhbHVlc1s1XSArIHogKiB0aGlzLnZhbHVlc1s4XVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyB2ZWMzKFtcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1swXSArIHkgKiB0aGlzLnZhbHVlc1szXSArIHogKiB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1sxXSArIHkgKiB0aGlzLnZhbHVlc1s0XSArIHogKiB0aGlzLnZhbHVlc1s3XSxcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1syXSArIHkgKiB0aGlzLnZhbHVlc1s1XSArIHogKiB0aGlzLnZhbHVlc1s4XVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0b01hdDQocmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1swXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbM10sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s0XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbN10sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBtYXQ0KFtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1syXSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1szXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s3XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9RdWF0KCkge1xyXG4gICAgICAgIGNvbnN0IG0wMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IG0wMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IG0wMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IG0xMCA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IG0xMSA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IG0xMiA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IG0yMCA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IG0yMSA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IG0yMiA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGZvdXJYU3F1YXJlZE1pbnVzMSA9IG0wMCAtIG0xMSAtIG0yMjtcclxuICAgICAgICBjb25zdCBmb3VyWVNxdWFyZWRNaW51czEgPSBtMTEgLSBtMDAgLSBtMjI7XHJcbiAgICAgICAgY29uc3QgZm91clpTcXVhcmVkTWludXMxID0gbTIyIC0gbTAwIC0gbTExO1xyXG4gICAgICAgIGNvbnN0IGZvdXJXU3F1YXJlZE1pbnVzMSA9IG0wMCArIG0xMSArIG0yMjtcclxuICAgICAgICBsZXQgYmlnZ2VzdEluZGV4ID0gMDtcclxuICAgICAgICBsZXQgZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxID0gZm91cldTcXVhcmVkTWludXMxO1xyXG4gICAgICAgIGlmIChmb3VyWFNxdWFyZWRNaW51czEgPiBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEpIHtcclxuICAgICAgICAgICAgZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxID0gZm91clhTcXVhcmVkTWludXMxO1xyXG4gICAgICAgICAgICBiaWdnZXN0SW5kZXggPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm91cllTcXVhcmVkTWludXMxID4gZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxKSB7XHJcbiAgICAgICAgICAgIGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSA9IGZvdXJZU3F1YXJlZE1pbnVzMTtcclxuICAgICAgICAgICAgYmlnZ2VzdEluZGV4ID0gMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvdXJaU3F1YXJlZE1pbnVzMSA+IGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSkge1xyXG4gICAgICAgICAgICBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyWlNxdWFyZWRNaW51czE7XHJcbiAgICAgICAgICAgIGJpZ2dlc3RJbmRleCA9IDM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJpZ2dlc3RWYWwgPSBNYXRoLnNxcnQoZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxICsgMSkgKiAwLjU7XHJcbiAgICAgICAgY29uc3QgbXVsdCA9IDAuMjUgLyBiaWdnZXN0VmFsO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgc3dpdGNoIChiaWdnZXN0SW5kZXgpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LncgPSBiaWdnZXN0VmFsO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnggPSAobTEyIC0gbTIxKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IChtMjAgLSBtMDIpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC56ID0gKG0wMSAtIG0xMCkgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHJlc3VsdC53ID0gKG0xMiAtIG0yMSkgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnggPSBiaWdnZXN0VmFsO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnkgPSAobTAxICsgbTEwKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IChtMjAgKyBtMDIpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IChtMjAgLSBtMDIpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC54ID0gKG0wMSArIG0xMCkgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnkgPSBiaWdnZXN0VmFsO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnogPSAobTEyICsgbTIxKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LncgPSAobTAxIC0gbTEwKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IChtMjAgKyBtMDIpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC55ID0gKG0xMiArIG0yMSkgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnogPSBiaWdnZXN0VmFsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByb3RhdGUoYW5nbGUsIGF4aXMpIHtcclxuICAgICAgICBsZXQgeCA9IGF4aXMueDtcclxuICAgICAgICBsZXQgeSA9IGF4aXMueTtcclxuICAgICAgICBsZXQgeiA9IGF4aXMuejtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGggIT09IDEpIHtcclxuICAgICAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICAgICAgeCAqPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIHkgKj0gbGVuZ3RoO1xyXG4gICAgICAgICAgICB6ICo9IGxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgICAgICBjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IHQgPSAxLjAgLSBjO1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBiMDAgPSB4ICogeCAqIHQgKyBjO1xyXG4gICAgICAgIGNvbnN0IGIwMSA9IHkgKiB4ICogdCArIHogKiBzO1xyXG4gICAgICAgIGNvbnN0IGIwMiA9IHogKiB4ICogdCAtIHkgKiBzO1xyXG4gICAgICAgIGNvbnN0IGIxMCA9IHggKiB5ICogdCAtIHogKiBzO1xyXG4gICAgICAgIGNvbnN0IGIxMSA9IHkgKiB5ICogdCArIGM7XHJcbiAgICAgICAgY29uc3QgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XHJcbiAgICAgICAgY29uc3QgYjIwID0geCAqIHogKiB0ICsgeSAqIHM7XHJcbiAgICAgICAgY29uc3QgYjIxID0geSAqIHogKiB0IC0geCAqIHM7XHJcbiAgICAgICAgY29uc3QgYjIyID0geiAqIHogKiB0ICsgYztcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IGEwMiAqIGIxMCArIGExMiAqIGIxMSArIGEyMiAqIGIxMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IGEwMSAqIGIyMCArIGExMSAqIGIyMSArIGEyMSAqIGIyMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KG0xLCBtMiwgcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gbTEuYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYTAxID0gbTEuYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYTAyID0gbTEuYXQoMik7XHJcbiAgICAgICAgY29uc3QgYTEwID0gbTEuYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYTExID0gbTEuYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYTEyID0gbTEuYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYTIwID0gbTEuYXQoNik7XHJcbiAgICAgICAgY29uc3QgYTIxID0gbTEuYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYTIyID0gbTEuYXQoOCk7XHJcbiAgICAgICAgY29uc3QgYjAwID0gbTIuYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYjAxID0gbTIuYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYjAyID0gbTIuYXQoMik7XHJcbiAgICAgICAgY29uc3QgYjEwID0gbTIuYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYjExID0gbTIuYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYjEyID0gbTIuYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYjIwID0gbTIuYXQoNik7XHJcbiAgICAgICAgY29uc3QgYjIxID0gbTIuYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYjIyID0gbTIuYXQoOCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjJcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDMoW1xyXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5tYXQzLmlkZW50aXR5ID0gbmV3IG1hdDMoKS5zZXRJZGVudGl0eSgpO1xyXG4iLCJpbXBvcnQgbWF0MyBmcm9tICcuL21hdDMnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuL21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBxdWF0IHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSg0KTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy54eXp3ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB6KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCB3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6dygpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl0sIHRoaXMudmFsdWVzWzNdXTtcclxuICAgIH1cclxuICAgIHNldCB4KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB5KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB6KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB3KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB4eSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIHNldCB4eXoodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6dyh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlc3QudmFsdWVzW2ldID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgcm9sbCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKDIuMCAqICh4ICogeSArIHcgKiB6KSwgdyAqIHcgKyB4ICogeCAtIHkgKiB5IC0geiAqIHopO1xyXG4gICAgfVxyXG4gICAgcGl0Y2goKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMigyLjAgKiAoeSAqIHogKyB3ICogeCksIHcgKiB3IC0geCAqIHggLSB5ICogeSArIHogKiB6KTtcclxuICAgIH1cclxuICAgIHlhdygpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5hc2luKDIuMCAqICh0aGlzLnggKiB0aGlzLnogLSB0aGlzLncgKiB0aGlzLnkpKTtcclxuICAgIH1cclxuICAgIGVxdWFscyh2ZWN0b3IsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52YWx1ZXNbaV0gLSB2ZWN0b3IuYXQoaSkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBzZXRJZGVudGl0eSgpIHtcclxuICAgICAgICB0aGlzLnggPSAwO1xyXG4gICAgICAgIHRoaXMueSA9IDA7XHJcbiAgICAgICAgdGhpcy56ID0gMDtcclxuICAgICAgICB0aGlzLncgPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgY2FsY3VsYXRlVygpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICB0aGlzLncgPSAtTWF0aC5zcXJ0KE1hdGguYWJzKDEuMCAtIHggKiB4IC0geSAqIHkgLSB6ICogeikpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgaW52ZXJzZSgpIHtcclxuICAgICAgICBjb25zdCBkb3QgPSBxdWF0LmRvdCh0aGlzLCB0aGlzKTtcclxuICAgICAgICBpZiAoIWRvdCkge1xyXG4gICAgICAgICAgICB0aGlzLnh5encgPSBbMCwgMCwgMCwgMF07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnZEb3QgPSBkb3QgPyAxLjAgLyBkb3QgOiAwO1xyXG4gICAgICAgIHRoaXMueCAqPSAtaW52RG90O1xyXG4gICAgICAgIHRoaXMueSAqPSAtaW52RG90O1xyXG4gICAgICAgIHRoaXMueiAqPSAtaW52RG90O1xyXG4gICAgICAgIHRoaXMudyAqPSBpbnZEb3Q7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBjb25qdWdhdGUoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gKj0gLTE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gKj0gLTE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gKj0gLTE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBsZW5ndGgoKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3KTtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xyXG4gICAgICAgIGlmICghbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueiA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QudyA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxIC8gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueCA9IHggKiBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC55ID0geSAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnogPSB6ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QudyA9IHcgKiBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBhZGQob3RoZXIpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSArPSBvdGhlci5hdChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseShvdGhlcikge1xyXG4gICAgICAgIGNvbnN0IHExeCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IHExeSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IHExeiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IHExdyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IHEyeCA9IG90aGVyLng7XHJcbiAgICAgICAgY29uc3QgcTJ5ID0gb3RoZXIueTtcclxuICAgICAgICBjb25zdCBxMnogPSBvdGhlci56O1xyXG4gICAgICAgIGNvbnN0IHEydyA9IG90aGVyLnc7XHJcbiAgICAgICAgdGhpcy54ID0gcTF4ICogcTJ3ICsgcTF3ICogcTJ4ICsgcTF5ICogcTJ6IC0gcTF6ICogcTJ5O1xyXG4gICAgICAgIHRoaXMueSA9IHExeSAqIHEydyArIHExdyAqIHEyeSArIHExeiAqIHEyeCAtIHExeCAqIHEyejtcclxuICAgICAgICB0aGlzLnogPSBxMXogKiBxMncgKyBxMXcgKiBxMnogKyBxMXggKiBxMnkgLSBxMXkgKiBxMng7XHJcbiAgICAgICAgdGhpcy53ID0gcTF3ICogcTJ3IC0gcTF4ICogcTJ4IC0gcTF5ICogcTJ5IC0gcTF6ICogcTJ6O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlWZWMzKHZlY3RvciwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgY29uc3QgcXggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgcXkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgcXogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgcXcgPSB0aGlzLnc7XHJcbiAgICAgICAgY29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XHJcbiAgICAgICAgY29uc3QgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XHJcbiAgICAgICAgY29uc3QgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XHJcbiAgICAgICAgY29uc3QgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xyXG4gICAgICAgIGRlc3QueCA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XHJcbiAgICAgICAgZGVzdC55ID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgICAgICBkZXN0LnogPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgdG9NYXQzKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBtYXQzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgY29uc3QgeDIgPSB4ICsgeDtcclxuICAgICAgICBjb25zdCB5MiA9IHkgKyB5O1xyXG4gICAgICAgIGNvbnN0IHoyID0geiArIHo7XHJcbiAgICAgICAgY29uc3QgeHggPSB4ICogeDI7XHJcbiAgICAgICAgY29uc3QgeHkgPSB4ICogeTI7XHJcbiAgICAgICAgY29uc3QgeHogPSB4ICogejI7XHJcbiAgICAgICAgY29uc3QgeXkgPSB5ICogeTI7XHJcbiAgICAgICAgY29uc3QgeXogPSB5ICogejI7XHJcbiAgICAgICAgY29uc3QgenogPSB6ICogejI7XHJcbiAgICAgICAgY29uc3Qgd3ggPSB3ICogeDI7XHJcbiAgICAgICAgY29uc3Qgd3kgPSB3ICogeTI7XHJcbiAgICAgICAgY29uc3Qgd3ogPSB3ICogejI7XHJcbiAgICAgICAgZGVzdC5pbml0KFtcclxuICAgICAgICAgICAgMSAtICh5eSArIHp6KSxcclxuICAgICAgICAgICAgeHkgKyB3eixcclxuICAgICAgICAgICAgeHogLSB3eSxcclxuICAgICAgICAgICAgeHkgLSB3eixcclxuICAgICAgICAgICAgMSAtICh4eCArIHp6KSxcclxuICAgICAgICAgICAgeXogKyB3eCxcclxuICAgICAgICAgICAgeHogKyB3eSxcclxuICAgICAgICAgICAgeXogLSB3eCxcclxuICAgICAgICAgICAgMSAtICh4eCArIHl5KVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgdG9NYXQ0KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBtYXQ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgY29uc3QgeDIgPSB4ICsgeDtcclxuICAgICAgICBjb25zdCB5MiA9IHkgKyB5O1xyXG4gICAgICAgIGNvbnN0IHoyID0geiArIHo7XHJcbiAgICAgICAgY29uc3QgeHggPSB4ICogeDI7XHJcbiAgICAgICAgY29uc3QgeHkgPSB4ICogeTI7XHJcbiAgICAgICAgY29uc3QgeHogPSB4ICogejI7XHJcbiAgICAgICAgY29uc3QgeXkgPSB5ICogeTI7XHJcbiAgICAgICAgY29uc3QgeXogPSB5ICogejI7XHJcbiAgICAgICAgY29uc3QgenogPSB6ICogejI7XHJcbiAgICAgICAgY29uc3Qgd3ggPSB3ICogeDI7XHJcbiAgICAgICAgY29uc3Qgd3kgPSB3ICogeTI7XHJcbiAgICAgICAgY29uc3Qgd3ogPSB3ICogejI7XHJcbiAgICAgICAgZGVzdC5pbml0KFtcclxuICAgICAgICAgICAgMSAtICh5eSArIHp6KSxcclxuICAgICAgICAgICAgeHkgKyB3eixcclxuICAgICAgICAgICAgeHogLSB3eSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgeHkgLSB3eixcclxuICAgICAgICAgICAgMSAtICh4eCArIHp6KSxcclxuICAgICAgICAgICAgeXogKyB3eCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgeHogKyB3eSxcclxuICAgICAgICAgICAgeXogLSB3eCxcclxuICAgICAgICAgICAgMSAtICh4eCArIHl5KSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRvdChxMSwgcTIpIHtcclxuICAgICAgICByZXR1cm4gcTEueCAqIHEyLnggKyBxMS55ICogcTIueSArIHExLnogKiBxMi56ICsgcTEudyAqIHEyLnc7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHExLCBxMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gcTEueCArIHEyLng7XHJcbiAgICAgICAgZGVzdC55ID0gcTEueSArIHEyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gcTEueiArIHEyLno7XHJcbiAgICAgICAgZGVzdC53ID0gcTEudyArIHEyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcHJvZHVjdChxMSwgcTIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHExeCA9IHExLng7XHJcbiAgICAgICAgY29uc3QgcTF5ID0gcTEueTtcclxuICAgICAgICBjb25zdCBxMXogPSBxMS56O1xyXG4gICAgICAgIGNvbnN0IHExdyA9IHExLnc7XHJcbiAgICAgICAgY29uc3QgcTJ4ID0gcTIueDtcclxuICAgICAgICBjb25zdCBxMnkgPSBxMi55O1xyXG4gICAgICAgIGNvbnN0IHEyeiA9IHEyLno7XHJcbiAgICAgICAgY29uc3QgcTJ3ID0gcTIudztcclxuICAgICAgICBkZXN0LnggPSBxMXggKiBxMncgKyBxMXcgKiBxMnggKyBxMXkgKiBxMnogLSBxMXogKiBxMnk7XHJcbiAgICAgICAgZGVzdC55ID0gcTF5ICogcTJ3ICsgcTF3ICogcTJ5ICsgcTF6ICogcTJ4IC0gcTF4ICogcTJ6O1xyXG4gICAgICAgIGRlc3QueiA9IHExeiAqIHEydyArIHExdyAqIHEyeiArIHExeCAqIHEyeSAtIHExeSAqIHEyeDtcclxuICAgICAgICBkZXN0LncgPSBxMXcgKiBxMncgLSBxMXggKiBxMnggLSBxMXkgKiBxMnkgLSBxMXogKiBxMno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY3Jvc3MocTEsIHEyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBxMXggPSBxMS54O1xyXG4gICAgICAgIGNvbnN0IHExeSA9IHExLnk7XHJcbiAgICAgICAgY29uc3QgcTF6ID0gcTEuejtcclxuICAgICAgICBjb25zdCBxMXcgPSBxMS53O1xyXG4gICAgICAgIGNvbnN0IHEyeCA9IHEyLng7XHJcbiAgICAgICAgY29uc3QgcTJ5ID0gcTIueTtcclxuICAgICAgICBjb25zdCBxMnogPSBxMi56O1xyXG4gICAgICAgIGNvbnN0IHEydyA9IHEyLnc7XHJcbiAgICAgICAgZGVzdC54ID0gcTF3ICogcTJ6ICsgcTF6ICogcTJ3ICsgcTF4ICogcTJ5IC0gcTF5ICogcTJ4O1xyXG4gICAgICAgIGRlc3QueSA9IHExdyAqIHEydyAtIHExeCAqIHEyeCAtIHExeSAqIHEyeSAtIHExeiAqIHEyejtcclxuICAgICAgICBkZXN0LnogPSBxMXcgKiBxMnggKyBxMXggKiBxMncgKyBxMXkgKiBxMnogLSBxMXogKiBxMnk7XHJcbiAgICAgICAgZGVzdC53ID0gcTF3ICogcTJ5ICsgcTF5ICogcTJ3ICsgcTF6ICogcTJ4IC0gcTF4ICogcTJ6O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHNob3J0TWl4KHExLCBxMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRpbWUgPD0gMC4wKSB7XHJcbiAgICAgICAgICAgIGRlc3QueHl6dyA9IHExLnh5enc7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aW1lID49IDEuMCkge1xyXG4gICAgICAgICAgICBkZXN0Lnh5encgPSBxMi54eXp3O1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvcyA9IHF1YXQuZG90KHExLCBxMik7XHJcbiAgICAgICAgY29uc3QgcTJhID0gcTIuY29weSgpO1xyXG4gICAgICAgIGlmIChjb3MgPCAwLjApIHtcclxuICAgICAgICAgICAgcTJhLmludmVyc2UoKTtcclxuICAgICAgICAgICAgY29zID0gLWNvcztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGswO1xyXG4gICAgICAgIGxldCBrMTtcclxuICAgICAgICBpZiAoY29zID4gMC45OTk5KSB7XHJcbiAgICAgICAgICAgIGswID0gMSAtIHRpbWU7XHJcbiAgICAgICAgICAgIGsxID0gMCArIHRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzaW4gPSBNYXRoLnNxcnQoMSAtIGNvcyAqIGNvcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihzaW4sIGNvcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG9uZU92ZXJTaW4gPSAxIC8gc2luO1xyXG4gICAgICAgICAgICBrMCA9IE1hdGguc2luKCgxIC0gdGltZSkgKiBhbmdsZSkgKiBvbmVPdmVyU2luO1xyXG4gICAgICAgICAgICBrMSA9IE1hdGguc2luKCgwICsgdGltZSkgKiBhbmdsZSkgKiBvbmVPdmVyU2luO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSBrMCAqIHExLnggKyBrMSAqIHEyYS54O1xyXG4gICAgICAgIGRlc3QueSA9IGswICogcTEueSArIGsxICogcTJhLnk7XHJcbiAgICAgICAgZGVzdC56ID0gazAgKiBxMS56ICsgazEgKiBxMmEuejtcclxuICAgICAgICBkZXN0LncgPSBrMCAqIHExLncgKyBrMSAqIHEyYS53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIG1peChxMSwgcTIsIHRpbWUsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvc0hhbGZUaGV0YSA9IHExLnggKiBxMi54ICsgcTEueSAqIHEyLnkgKyBxMS56ICogcTIueiArIHExLncgKiBxMi53O1xyXG4gICAgICAgIGlmIChNYXRoLmFicyhjb3NIYWxmVGhldGEpID49IDEuMCkge1xyXG4gICAgICAgICAgICBkZXN0Lnh5encgPSBxMS54eXp3O1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaGFsZlRoZXRhID0gTWF0aC5hY29zKGNvc0hhbGZUaGV0YSk7XHJcbiAgICAgICAgY29uc3Qgc2luSGFsZlRoZXRhID0gTWF0aC5zcXJ0KDEuMCAtIGNvc0hhbGZUaGV0YSAqIGNvc0hhbGZUaGV0YSk7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHNpbkhhbGZUaGV0YSkgPCAwLjAwMSkge1xyXG4gICAgICAgICAgICBkZXN0LnggPSBxMS54ICogMC41ICsgcTIueCAqIDAuNTtcclxuICAgICAgICAgICAgZGVzdC55ID0gcTEueSAqIDAuNSArIHEyLnkgKiAwLjU7XHJcbiAgICAgICAgICAgIGRlc3QueiA9IHExLnogKiAwLjUgKyBxMi56ICogMC41O1xyXG4gICAgICAgICAgICBkZXN0LncgPSBxMS53ICogMC41ICsgcTIudyAqIDAuNTtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJhdGlvQSA9IE1hdGguc2luKCgxIC0gdGltZSkgKiBoYWxmVGhldGEpIC8gc2luSGFsZlRoZXRhO1xyXG4gICAgICAgIGNvbnN0IHJhdGlvQiA9IE1hdGguc2luKHRpbWUgKiBoYWxmVGhldGEpIC8gc2luSGFsZlRoZXRhO1xyXG4gICAgICAgIGRlc3QueCA9IHExLnggKiByYXRpb0EgKyBxMi54ICogcmF0aW9CO1xyXG4gICAgICAgIGRlc3QueSA9IHExLnkgKiByYXRpb0EgKyBxMi55ICogcmF0aW9CO1xyXG4gICAgICAgIGRlc3QueiA9IHExLnogKiByYXRpb0EgKyBxMi56ICogcmF0aW9CO1xyXG4gICAgICAgIGRlc3QudyA9IHExLncgKiByYXRpb0EgKyBxMi53ICogcmF0aW9CO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21BeGlzQW5nbGUoYXhpcywgYW5nbGUsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFuZ2xlICo9IDAuNTtcclxuICAgICAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAgICAgZGVzdC54ID0gYXhpcy54ICogc2luO1xyXG4gICAgICAgIGRlc3QueSA9IGF4aXMueSAqIHNpbjtcclxuICAgICAgICBkZXN0LnogPSBheGlzLnogKiBzaW47XHJcbiAgICAgICAgZGVzdC53ID0gTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21WZWN0b3JzKHUsIHYsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KFswLCAwLCAwLCAxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkID0gY2xhbXAodmVjMy5kb3QodSwgdiksIC0xLCAxKTtcclxuICAgICAgICBsZXQgYXhpcyA9IHZlYzMuY3Jvc3ModSwgdik7XHJcbiAgICAgICAgbGV0IHF3ID0gTWF0aC5zcXJ0KHUuc3F1YXJlZExlbmd0aCgpICogdi5zcXVhcmVkTGVuZ3RoKCkpICsgZDtcclxuICAgICAgICBpZiAocXcgPCAwLjAwMDEpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KFstdS56LCB1LnksIHUueCwgMF0pLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0ID0gbmV3IHF1YXQoW3F3LCBheGlzLngsIGF4aXMueSwgYXhpcy56XSkubm9ybWFsaXplKCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUF4aXNSYWRpYW5zKHgsIHksIHosIHJhZGlhbnMsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KFswLCAwLCAwLCAxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0ZW1wID0gbmV3IHZlYzMoW3gsIHksIHpdKTtcclxuICAgICAgICBsZXQgZCA9IHRlbXAubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGQgPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5pZGVudGl0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZCA9IDEgLyBkO1xyXG4gICAgICAgIGxldCBsX2FuZ2xlID0gMDtcclxuICAgICAgICBpZiAocmFkaWFucyA8IDApIHtcclxuICAgICAgICAgICAgbF9hbmdsZSA9IChNYXRoLlBJICogMikgLSAoLTEgKiByYWRpYW5zICUgKE1hdGguUEkgKiAyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsX2FuZ2xlID0gcmFkaWFucyAlIChNYXRoLlBJICogMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsX3NpbiA9IE1hdGguc2luKGxfYW5nbGUgLyAyKTtcclxuICAgICAgICBsZXQgbF9jb3MgPSBNYXRoLmNvcyhsX2FuZ2xlIC8gMik7XHJcbiAgICAgICAgZGVzdC54ID0gZCAqIHggKiBsX3NpbjtcclxuICAgICAgICBkZXN0LnkgPSBkICogeSAqIGxfc2luO1xyXG4gICAgICAgIGRlc3QueiA9IGQgKiB6ICogbF9zaW47XHJcbiAgICAgICAgZGVzdC53ID0gbF9jb3M7XHJcbiAgICAgICAgZGVzdC5ub3JtYWxpemUoKTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxufVxyXG5xdWF0LmlkZW50aXR5ID0gbmV3IHF1YXQoKS5zZXRJZGVudGl0eSgpO1xyXG5mdW5jdGlvbiBjbGFtcCh4LCBhLCBiKSB7XHJcbiAgICBpZiAoeCA8IGEpIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHggPiBiKSB7XHJcbiAgICAgICAgcmV0dXJuIGI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geDtcclxufVxyXG4iLCJpbXBvcnQgcXVhdCBmcm9tIFwiLi9xdWF0XCI7XHJcbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgdmVjMyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB6KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBzZXQgeCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeHkodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgICAgIHRoaXMueiA9IDA7XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdGhpcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbmVnYXRlKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcclxuICAgICAgICBkZXN0LnogPSAtdGhpcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueiAtIHZlY3Rvci56KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG4gICAgc3F1YXJlZExlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xyXG4gICAgfVxyXG4gICAgYWRkKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCArPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56ICs9IHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3VidHJhY3QodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogLT0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAqPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGRpdmlkZSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLz0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAvPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZhbHVlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueiAqPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueiA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiAqPSBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseUJ5TWF0MyhtYXRyaXgsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXRyaXgubXVsdGlwbHlWZWMzKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlCeVF1YXQocXVhdGVybmlvbiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHF1YXRlcm5pb24ubXVsdGlwbHlWZWMzKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgdG9RdWF0KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGMgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIGNvbnN0IHMgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIGMueCA9IE1hdGguY29zKHRoaXMueCAqIDAuNSk7XHJcbiAgICAgICAgcy54ID0gTWF0aC5zaW4odGhpcy54ICogMC41KTtcclxuICAgICAgICBjLnkgPSBNYXRoLmNvcyh0aGlzLnkgKiAwLjUpO1xyXG4gICAgICAgIHMueSA9IE1hdGguc2luKHRoaXMueSAqIDAuNSk7XHJcbiAgICAgICAgYy56ID0gTWF0aC5jb3ModGhpcy56ICogMC41KTtcclxuICAgICAgICBzLnogPSBNYXRoLnNpbih0aGlzLnogKiAwLjUpO1xyXG4gICAgICAgIGRlc3QueCA9IHMueCAqIGMueSAqIGMueiAtIGMueCAqIHMueSAqIHMuejtcclxuICAgICAgICBkZXN0LnkgPSBjLnggKiBzLnkgKiBjLnogKyBzLnggKiBjLnkgKiBzLno7XHJcbiAgICAgICAgZGVzdC56ID0gYy54ICogYy55ICogcy56IC0gcy54ICogcy55ICogYy56O1xyXG4gICAgICAgIGRlc3QudyA9IGMueCAqIGMueSAqIGMueiArIHMueCAqIHMueSAqIHMuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHgyID0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkyID0gdmVjdG9yMi55O1xyXG4gICAgICAgIGNvbnN0IHoyID0gdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QueCA9IHkgKiB6MiAtIHogKiB5MjtcclxuICAgICAgICBkZXN0LnkgPSB6ICogeDIgLSB4ICogejI7XHJcbiAgICAgICAgZGVzdC56ID0geCAqIHkyIC0geSAqIHgyO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRvdCh2ZWN0b3IsIHZlY3RvcjIpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5MiA9IHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6MiA9IHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4geCAqIHgyICsgeSAqIHkyICsgeiAqIHoyO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3RvcjIueiAtIHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3F1YXJlZERpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3RvcjIueiAtIHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlyZWN0aW9uKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueSAtIHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLnogLSB2ZWN0b3IyLno7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgZGVzdC56ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiA9IHogKiBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB0aW1lICogKHZlY3RvcjIueCAtIHZlY3Rvci54KTtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHRpbWUgKiAodmVjdG9yMi55IC0gdmVjdG9yLnkpO1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdGltZSAqICh2ZWN0b3IyLnogLSB2ZWN0b3Iueik7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKyB2ZWN0b3IyLno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC0gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAqIHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC8gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC8gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHJvdGF0ZSh2YWx1ZSwgcm90YXRpb24sIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB4ID0gMiAqIChyb3RhdGlvbi55ICogdmFsdWUueiAtIHJvdGF0aW9uLnogKiB2YWx1ZS55KTtcclxuICAgICAgICBsZXQgeSA9IDIgKiAocm90YXRpb24ueiAqIHZhbHVlLnggLSByb3RhdGlvbi54ICogdmFsdWUueik7XHJcbiAgICAgICAgbGV0IHogPSAyICogKHJvdGF0aW9uLnggKiB2YWx1ZS55IC0gcm90YXRpb24ueSAqIHZhbHVlLngpO1xyXG4gICAgICAgIGRlc3QueCA9IHZhbHVlLnggKyB4ICogcm90YXRpb24udyArIChyb3RhdGlvbi55ICogeiAtIHJvdGF0aW9uLnogKiB5KTtcclxuICAgICAgICBkZXN0LnkgPSB2YWx1ZS55ICsgeSAqIHJvdGF0aW9uLncgKyAocm90YXRpb24ueiAqIHggLSByb3RhdGlvbi54ICogeik7XHJcbiAgICAgICAgZGVzdC56ID0gdmFsdWUueiArIHogKiByb3RhdGlvbi53ICsgKHJvdGF0aW9uLnggKiB5IC0gcm90YXRpb24ueSAqIHgpO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG59XHJcbnZlYzMuemVybyA9IG5ldyB2ZWMzKFswLCAwLCAwXSk7XHJcbnZlYzMub25lID0gbmV3IHZlYzMoWzEsIDEsIDFdKTtcclxudmVjMy51cCA9IG5ldyB2ZWMzKFswLCAxLCAwXSk7XHJcbnZlYzMucmlnaHQgPSBuZXcgdmVjMyhbMSwgMCwgMF0pO1xyXG52ZWMzLmZvcndhcmQgPSBuZXcgdmVjMyhbMCwgMCwgMV0pO1xyXG4iLCIvLyBUaGUgY29kZSB0aGF0IGRlYWxzIHdpdGggM2QgYXVkaW9cclxuaW1wb3J0IHsgRXZlbnRCdXMgfSBmcm9tICcuLi8uLi9ldmVudC1idXMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi8uLi9tYXRoL3ZlYzMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbmF0b3JTY2VuZSBleHRlbmRzIEV2ZW50QnVzIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlR2FpbigpO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmxpc3RlbmVyO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICAvLyB0aGlzLnNjZW5lLm91dHB1dC5jb25uZWN0KHRoaXMuY29udGV4dC5nZXRPdXRwdXREZXN0aW5hdGlvbigpKTtcclxuICAgIH1cclxuICAgIGNyZWF0ZVNvdXJjZSgpIHtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jcmVhdGVQYW5uZXIoKTtcclxuICAgICAgICBub2RlLnBhbm5pbmdNb2RlbCA9ICdIUlRGJztcclxuICAgICAgICBub2RlLmRpc3RhbmNlTW9kZWwgPSAnbGluZWFyJztcclxuICAgICAgICBub2RlLm1heERpc3RhbmNlID0gMjA7XHJcbiAgICAgICAgbm9kZS5yZWZEaXN0YW5jZSA9IDI7XHJcbiAgICAgICAgbm9kZS5jb25uZWN0KHRoaXMuc2NlbmUpO1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG4gICAgZ2V0T3V0cHV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjZW5lO1xyXG4gICAgfVxyXG4gICAgZ2V0SW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NlbmU7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lclBvc2l0aW9uKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyLnNldFBvc2l0aW9uKHgsIHksIHopO1xyXG4gICAgfVxyXG4gICAgc2V0TGlzdGVuZXJPcmllbnRhdGlvbihmb3J3YXJkLCByYXd1cCkge1xyXG4gICAgICAgIGxldCBmd2QgPSBuZXcgdmVjMyhbZm9yd2FyZC54LCBmb3J3YXJkLnksIGZvcndhcmQuel0pO1xyXG4gICAgICAgIGxldCB1cCA9IGZ3ZC5jb3B5KCk7XHJcbiAgICAgICAgdmVjMy5jcm9zcyh1cCwgbmV3IHZlYzMoW3Jhd3VwLngsIHJhd3VwLnksIHJhd3VwLnpdKSwgdXApO1xyXG4gICAgICAgIHZlYzMuY3Jvc3ModXAsIGZ3ZCwgdXApO1xyXG4gICAgICAgIGZ3ZC5ub3JtYWxpemUoKTtcclxuICAgICAgICB1cC5ub3JtYWxpemUoKTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyLnNldE9yaWVudGF0aW9uKGZ3ZC54LCBmd2QueSwgZndkLnosIHVwLngsIHVwLnksIHVwLnopO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIEEgY2hhaW4gb2YgZWZmZWN0cyB0aGF0IGNvbm5lY3QgdG8gdGhlIGVmZmVjdCBidXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWZmZWN0Q2hhaW4ge1xyXG4gICAgY29uc3RydWN0b3IoY29udGV4dCwgZ3JhcGgsIGlucHV0LCBvdXRwdXQpIHtcclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcclxuICAgICAgICB0aGlzLmlucHV0Tm9kZSA9IGlucHV0O1xyXG4gICAgICAgIHRoaXMub3V0cHV0Tm9kZSA9IG91dHB1dDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25zKCk7XHJcbiAgICB9XHJcbiAgICBhcHBseUVmZmVjdChlZmZlY3QpIHtcclxuICAgICAgICB0aGlzLmVmZmVjdHMucHVzaChlZmZlY3QpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUVmZmVjdChlZmZlY3QpIHtcclxuICAgICAgICB0aGlzLmVmZmVjdHMuZm9yRWFjaCgoY3VyckVmZmVjdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWZmZWN0ID09PSBjdXJyRWZmZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyRWZmZWN0LmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cyA9IHRoaXMuZWZmZWN0cy5maWx0ZXIoKGN1cnJFZmZlY3QpID0+IGVmZmVjdCAhPT0gY3VyckVmZmVjdCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25uZWN0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlQ29ubmVjdGlvbnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWZmZWN0cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0Tm9kZS5jb25uZWN0KHRoaXMub3V0cHV0Tm9kZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgIGxldCBwcmV2aW91cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLmZvckVhY2goKGVmZmVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gZWZmZWN0O1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXMpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQuY29ubmVjdElucHV0KHByZXZpb3VzLmdldE91dHB1dCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQuY29ubmVjdElucHV0KHRoaXMuaW5wdXROb2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY3VycmVudC5jb25uZWN0T3V0cHV0KHRoaXMub3V0cHV0Tm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIHRoaXMgaXMgdGhlIG1peGVyIHRoYXQgdGFrZXMgYWxsIHRoZSBkaWZmZXJlbnQgb3V0cHV0cyBhbmQgbWl4ZXMgdGhlbSBpbnRvIHRoZSAyIGJ1c3NlczpcclxuLy8gV29ybGRCdXM6IFRoZSBkaXJlY3Rpb25hbCBhdWRpb1xyXG4vLyBTZWNvbmRhcnlCdXM6IEFsbCB0aGUgVUkgYW5kIHRoaW5ncyB0aGF0IGFyZSBub24gZGlyZWN0aW9uYWxcclxuaW1wb3J0IEVmZmVjdENoYWluIGZyb20gJy4vZWZmZWN0LWNoYWluJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXVkaW9HcmFwaCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2VuZSwgY29udGV4dCwgc3dhcENoYW5uZWxzID0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLnN3YXBDaGFubmVscyA9IHN3YXBDaGFubmVscztcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzQnVzID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLndvcmxkQnVzID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLnNlY29uZGFyeUJ1cyA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgdGhpcy5tYXN0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG4gICAgICAgIHRoaXMuc2NlbmUuZ2V0T3V0cHV0KCkuY29ubmVjdCh0aGlzLndvcmxkQnVzKTtcclxuICAgICAgICAvLyB0aGlzLndvcmxkQnVzLmNvbm5lY3QodGhpcy5tYXN0ZXIpO1xyXG4gICAgICAgIHRoaXMud29ybGRCdXMuY29ubmVjdCh0aGlzLmVmZmVjdHNCdXMpO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cyA9IG5ldyBFZmZlY3RDaGFpbih0aGlzLmNvbnRleHQsIHRoaXMsIHRoaXMuZWZmZWN0c0J1cywgdGhpcy5tYXN0ZXIpO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5QnVzLmNvbm5lY3QodGhpcy5tYXN0ZXIpO1xyXG4gICAgICAgIGlmICh0aGlzLnN3YXBDaGFubmVscykge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlciA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKDIpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxNZXJnZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUNoYW5uZWxNZXJnZXIoMik7XHJcbiAgICAgICAgICAgIHRoaXMubWFzdGVyLmNvbm5lY3QodGhpcy5jaGFubmVsU3BsaXR0ZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbFNwbGl0dGVyLmNvbm5lY3QodGhpcy5jaGFubmVsTWVyZ2VyLCAxLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsTWVyZ2VyLmNvbm5lY3QodGhpcy5jb250ZXh0LmdldE91dHB1dERlc3RpbmF0aW9uKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tYXN0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZ2V0T3V0cHV0RGVzdGluYXRpb24oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29ubmVjdFRvTWFzdGVyKGlucHV0KSB7XHJcbiAgICAgICAgaW5wdXQuY29ubmVjdCh0aGlzLm1hc3Rlcik7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0VG9VSShpbnB1dCkge1xyXG4gICAgICAgIGlucHV0LmNvbm5lY3QodGhpcy5zZWNvbmRhcnlCdXMpO1xyXG4gICAgfVxyXG4gICAgYXBwbHlFZmZlY3QoZWZmZWN0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLmFwcGx5RWZmZWN0KGVmZmVjdCk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVFZmZlY3QoZWZmZWN0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLnJlbW92ZUVmZmVjdChlZmZlY3QpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCB2YXIgU291cmNlVHlwZTtcclxuKGZ1bmN0aW9uIChTb3VyY2VUeXBlKSB7XHJcbiAgICBTb3VyY2VUeXBlW1NvdXJjZVR5cGVbXCJXb3JsZFNvdXJjZVwiXSA9IDBdID0gXCJXb3JsZFNvdXJjZVwiO1xyXG4gICAgU291cmNlVHlwZVtTb3VyY2VUeXBlW1wiVUlTb3VyY2VcIl0gPSAxXSA9IFwiVUlTb3VyY2VcIjtcclxuICAgIFNvdXJjZVR5cGVbU291cmNlVHlwZVtcIk1hc3RlclNvdXJjZVwiXSA9IDJdID0gXCJNYXN0ZXJTb3VyY2VcIjtcclxufSkoU291cmNlVHlwZSB8fCAoU291cmNlVHlwZSA9IHt9KSk7XHJcbiIsIi8vIGFuIGF1ZGlvIHNvdXJjZVxyXG4vLyBUaGlzIGlzIHRoZSBhY3R1YWwgc291bmRcclxuaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4vc291cmNlLXR5cGUnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdWRpb1NvdXJjZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihncmFwaCwgc2NlbmUsIGNvbnRleHQsIGJ1ZmZlciA9IG51bGwsIHR5cGUgPSBTb3VyY2VUeXBlLldvcmxkU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgejogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IGdyYXBoO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSAxO1xyXG4gICAgICAgIHRoaXMudm9sdW1lID0gMTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICAvLyBiaW5kIG1ldGhvZHMgc28gd2UgY2FuIGFkZCBhbmQgcmVtb3Z2ZSB0aGVtIGZyb20gZXZlbnQgbGlzdGVuZXJzXHJcbiAgICAgICAgdGhpcy5zdG9wID0gdGhpcy5zdG9wLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBnZXRCdWZmZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0QnVmZmVyKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XHJcbiAgICAgICAgaWYgKHRoaXMucGxheU9uTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5wbGF5T25Mb2FkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcGxheSh3aGVuID0gMCwgb2Zmc2V0ID0gMCwgZHVyYXRpb24gPSB0aGlzLmJ1ZmZlciA/IHRoaXMuYnVmZmVyLmR1cmF0aW9uIDogMCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYXlpbmcgJiYgdGhpcy5ub2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuYnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheU9uTG9hZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuYnVmZmVyID0gdGhpcy5idWZmZXI7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUucGxheWJhY2tSYXRlLnZhbHVlID0gdGhpcy5wbGF5YmFja1JhdGU7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5zdGFydCh3aGVuLCBvZmZzZXQsIGR1cmF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmxvb3AgPSB0aGlzLmxvb3Bpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuc2V0UG9zaXRpb24odGhpcy5wb3NpdGlvbi54LCB0aGlzLnBvc2l0aW9uLnksIHRoaXMucG9zaXRpb24ueik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgdGhpcy5zdG9wKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRQb3NpdGlvbih4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgelxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmVOb2RlKVxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lTm9kZS5zZXRQb3NpdGlvbih4LCB5LCB6KTtcclxuICAgIH1cclxuICAgIHNldFBsYXliYWNrUmF0ZShyYXRlKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSByYXRlO1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5wbGF5YmFja1JhdGUudmFsdWUgPSByYXRlO1xyXG4gICAgfVxyXG4gICAgZ2V0UGxheWJhY2tSYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH1cclxuICAgIHNldFZvbHVtZSh2b2x1bWUpIHtcclxuICAgICAgICB0aGlzLnZvbHVtZSA9IHZvbHVtZTtcclxuICAgICAgICBpZiAodGhpcy5nYWluKVxyXG4gICAgICAgICAgICB0aGlzLmdhaW4uZ2Fpbi52YWx1ZSA9IHZvbHVtZTtcclxuICAgIH1cclxuICAgIGdldFZvbHVtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52b2x1bWU7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVDb25uZWN0aW9ucygpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFNvdXJjZVR5cGUuV29ybGRTb3VyY2U6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSB0aGlzLnNjZW5lLmNyZWF0ZVNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3QodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuc2NlbmVOb2RlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNvdXJjZVR5cGUuVUlTb3VyY2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY29ubmVjdCh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5jb25uZWN0VG9VSSh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY29ubmVjdCh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5jb25uZWN0VG9NYXN0ZXIodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kZWQnLCB0aGlzLnN0b3ApO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lTm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIC8vIHNldCBhbGwgcmVmcyB0byBudWxsIHRvIGVuY291cmFnZSBnY1xyXG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgbG9vcCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubG9vcGluZyA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmxvb3AgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmYWRlT3V0KHRpbWUpIHtcclxuICAgICAgICB0aGlzLmdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLmdldFZvbHVtZSgpLCB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmN1cnJlbnRUaW1lKTtcclxuICAgICAgICBpZiAoIXRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmN1cnJlbnRUaW1lICsgdGltZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0b3AoKSwgdGltZSAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgZmFkZUluKHRpbWUpIHtcclxuICAgICAgICB0aGlzLmdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3VycmVudFRpbWUpO1xyXG4gICAgICAgIGlmICghdGhpcy5ub2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMudm9sdW1lLCB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmN1cnJlbnRUaW1lICsgdGltZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQW4gaXRlbSBpbiB0aGUgZGF0YSBwb29sXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb29sSXRlbSB7XHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkYXRhID0gbnVsbCwgZGVjb2RlZERhdGEgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuZGVjb2RlZERhdGEgPSBkZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIGdldERhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICAgIH1cclxuICAgIHNldERhdGEoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICBnZXREZWNvZGVkRGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIHNldERlY29kZWREYXRhKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRlY29kZWREYXRhID0gdGhpcy5kZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIGdldE5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuICAgIHNldE5hbWUobmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcbn1cclxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5leHBvcnQgY2xhc3MgSFRUUExvYWRlciB7XHJcbiAgICBnZXQocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIGZldGNoKHBhdGgpO1xyXG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSB5aWVsZCByZXN1bHQuYXJyYXlCdWZmZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBhIGRhdGEgcG9vbCBob2xkcyBmcmVxdWVudGx5IHBsYXllZCBzb3VuZHMgaW4gbWVtb3J5IHRvZ2V0aGVyIHdpdGggZGVjb2RlZCBhdWRpbyBkYXRhIHRvIG5vIGxvbmdlciBoYXZlIHRvIGRlY29kZSB0aGVtIGZyb20gdGhlIGNhY2hlIHdoZW4gbG9hZGVkIGFnYWluXHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IHsgRXZlbnRCdXMgfSBmcm9tICcuLi9ldmVudC1idXMnO1xyXG5pbXBvcnQgRGF0YVBvb2xJdGVtIGZyb20gJy4vZGF0YS1wb29sLWl0ZW0nO1xyXG5pbXBvcnQgeyBIVFRQTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL2h0dHAtbG9hZGVyJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YVBvb2wgZXh0ZW5kcyBFdmVudEJ1cyB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBsb2FkZXIgPSBuZXcgSFRUUExvYWRlcigpLCBtYXhEYXRhID0gNTEyKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGxvYWRlcjtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLm1heERhdGEgPSBtYXhEYXRhO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBnZXQocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbcGF0aF0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFbcGF0aF0uZ2V0RGVjb2RlZERhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHlpZWxkIHRoaXMubG9hZGVyLmdldChwYXRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSB5aWVsZCB0aGlzLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IERhdGFQb29sSXRlbShwYXRoLCBidWZmZXIsIGRlY29kZWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgdGhpcy5tYXhEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgYSBtb3JlIGNsZXZlciBzb2x1dGlvbiB0aGFuIGp1c3QgcmVtb3ZpbmcgdGhlIGZpcnN0IGxvYWRlZCBkYXRhLiBMaWtlIHRyYWNraW5nIGhvdyBtdWNoIGNlcnRhaW4gZGF0YSBpcyBuZWVkZWQgYW5kIHByaW9yaXRpemUgdGhlbS5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBwYXRoczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGlzLmRhdGFbcGF0aHNbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXREZWNvZGVkRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgQmFzZUVmZmVjdCBmcm9tICcuL2Jhc2UtZWZmZWN0JztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udm9sdmVyIGV4dGVuZHMgQmFzZUVmZmVjdCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBncmFwaCwgcGFyYW1zKSB7XHJcbiAgICAgICAgc3VwZXIoY29udGV4dCwgZ3JhcGgsIHBhcmFtcyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYENyZWF0aW5nIGNvbnZvbHZlcmApO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlQ29udm9sdmVyKCk7XHJcbiAgICAgICAgdGhpcy5lZmZlY3ROb2RlLmJ1ZmZlciA9IHRoaXMuZWZmZWN0UGFyYW1zLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGNvbm5lY3RJbnB1dChub2RlKSB7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxNZXJnZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUNoYW5uZWxNZXJnZXIoMik7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbFNwbGl0dGVyLmNvbm5lY3QodGhpcy5jaGFubmVsTWVyZ2VyLCAxLCAwKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMCwgMSk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDEsIDEpO1xyXG4gICAgICAgIG5vZGUuY29ubmVjdCh0aGlzLmNoYW5uZWxTcGxpdHRlcik7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsTWVyZ2VyLmNvbm5lY3QodGhpcy5lZmZlY3ROb2RlKTtcclxuICAgICAgICB0aGlzLmlucHV0Tm9kZSA9IG5vZGU7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZUVmZmVjdCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBncmFwaCwgcGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IGdyYXBoO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0T3V0cHV0KG5vZGUpIHtcclxuICAgICAgICB0aGlzLmVmZmVjdE5vZGUuY29ubmVjdChub2RlKTtcclxuICAgIH1cclxuICAgIGNvbm5lY3RJbnB1dChub2RlKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dE5vZGUgPSBub2RlO1xyXG4gICAgICAgIGlmICh0aGlzLmVmZmVjdE5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dE5vZGUuY29ubmVjdCh0aGlzLmVmZmVjdE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldE91dHB1dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lZmZlY3ROb2RlO1xyXG4gICAgfVxyXG4gICAgZGlzY29ubmVjdCgpIHtcclxuICAgICAgICB0aGlzLmlucHV0Tm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgdGhpcy5lZmZlY3ROb2RlLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBTb3VyY2VUeXBlIH0gZnJvbSAnLi9zb3VyY2UtdHlwZSc7XHJcbmV4cG9ydCBjbGFzcyBTdHJlYW1pbmdTb3VyY2Uge1xyXG4gICAgY29uc3RydWN0b3IoZ3JhcGgsIHNjZW5lLCBjb250ZXh0LCBlbGVtZW50LCB0eXBlID0gU291cmNlVHlwZS5NYXN0ZXJTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLmdyYXBoID0gZ3JhcGg7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgIHo6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHRoaXMuZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUNvbm5lY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYW5QbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGxheU9uQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcGxheSh3aGVuID0gMCwgb2Zmc2V0ID0gMCwgZHVyYXRpb24gPSAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuUGxheSkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBsYXlPbkF2YWlsYWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5wYXVzZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0Vm9sdW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQudm9sdW1lO1xyXG4gICAgfVxyXG4gICAgc2V0Vm9sdW1lKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnZvbHVtZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZ2V0UGxheWJhY2tSYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQucGxheWJhY2tSYXRlO1xyXG4gICAgfVxyXG4gICAgc2V0UGxheWJhY2tSYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnBsYXliYWNrUmF0ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlQ29ubmVjdGlvbnMoKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTb3VyY2VUeXBlLldvcmxkU291cmNlOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVOb2RlID0gdGhpcy5zY2VuZS5jcmVhdGVTb3VyY2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0KHRoaXMuZ2Fpbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVjdCh0aGlzLnNjZW5lTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0KHRoaXMuZ2Fpbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoLmNvbm5lY3RUb01hc3Rlcih0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0UG9zaXRpb24oeCwgeSwgeikge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIHpcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSlcclxuICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuc2V0UG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmVOb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH1cclxuICAgIGxvb3AodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubG9vcCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmYWRlSW4odGltZSkge1xyXG4gICAgICAgIHRoaXMuZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMDAwMSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5nZXRWb2x1bWUoKSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSArIHRpbWUpO1xyXG4gICAgfVxyXG4gICAgZmFkZU91dCh0aW1lKSB7XHJcbiAgICAgICAgdGhpcy5nYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUodGhpcy5nZXRWb2x1bWUoKSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSArIHRpbWUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCksIHRpbWUgKiAxMDAwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyB0aGUgbWFpbiBtb2R1bGUgZm9yIFJlc29uYXRvclxyXG4vLyBBUEksIGV0Yy5cclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5pbXBvcnQgUmVzb25hdG9yQXVkaW9Db250ZXh0IGZyb20gJy4vYXVkaW8tY29udGV4dCc7XHJcbmltcG9ydCBSZXNvbmF0b3JTY2VuZSBmcm9tICcuL3NjZW5lcy93ZWJhdWRpby1zY2VuZSc7XHJcbmltcG9ydCBBdWRpb0dyYXBoIGZyb20gJy4vYXVkaW8tZ3JhcGgnO1xyXG5pbXBvcnQgQXVkaW9Tb3VyY2UgZnJvbSAnLi9zb3VyY2VzL2F1ZGlvLXNvdXJjZSc7XHJcbmltcG9ydCBEYXRhUG9vbCBmcm9tICcuL2RhdGEtcG9vbCc7XHJcbmltcG9ydCBDb252b2x2ZXIgZnJvbSAnLi9lZmZlY3RzL2NvbnZvbHZlcic7XHJcbmltcG9ydCB7IEhUVFBMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvaHR0cC1sb2FkZXInO1xyXG5pbXBvcnQgeyBTb3VyY2VUeXBlIH0gZnJvbSAnLi9zb3VyY2VzL3NvdXJjZS10eXBlJztcclxuaW1wb3J0IHsgU3RyZWFtaW5nU291cmNlIH0gZnJvbSAnLi9zb3VyY2VzL3N0cmVhbWluZy1zb3VyY2UnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbmF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IobG9hZGVyID0gbmV3IEhUVFBMb2FkZXIoKSkge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbXB1bHNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgUmVzb25hdG9yQXVkaW9Db250ZXh0KCk7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG5ldyBSZXNvbmF0b3JTY2VuZSh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBuZXcgQXVkaW9HcmFwaCh0aGlzLnNjZW5lLCB0aGlzLmNvbnRleHQsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRhdGFQb29sID0gbmV3IERhdGFQb29sKHRoaXMuY29udGV4dCwgdGhpcy5sb2FkZXIpO1xyXG4gICAgfVxyXG4gICAgbG9hZChwYXRoLCB0eXBlID0gU291cmNlVHlwZS5Xb3JsZFNvdXJjZSkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCB0aGlzLmRhdGFQb29sLmdldChwYXRoKTtcclxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5jcmVhdGVTb3VyY2UodHlwZSwgZGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBsb2FkSW1tZWRpYXRlKHBhdGgsIHR5cGUgPSBTb3VyY2VUeXBlLldvcmxkU291cmNlKSB7XHJcbiAgICAgICAgY29uc3Qgc291cmNlID0gbmV3IEF1ZGlvU291cmNlKHRoaXMuZ3JhcGgsIHRoaXMuc2NlbmUsIHRoaXMuY29udGV4dCwgbnVsbCwgdHlwZSk7XHJcbiAgICAgICAgdGhpcy5kYXRhUG9vbC5nZXQocGF0aCkudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBzb3VyY2Uuc2V0QnVmZmVyKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICB9XHJcbiAgICBzdHJlYW0ocGF0aCwgdHlwZSA9IFNvdXJjZVR5cGUuTWFzdGVyU291cmNlKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBBdWRpbyhwYXRoKTtcclxuICAgICAgICBlbGVtZW50LmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgICAgZWxlbWVudC52b2x1bWUgPSAxO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTdHJlYW1pbmdTb3VyY2UodGhpcy5ncmFwaCwgdGhpcy5zY2VuZSwgdGhpcy5jb250ZXh0LCBlbGVtZW50LCB0eXBlKTtcclxuICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlU291cmNlKHR5cGUsIGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvU291cmNlKHRoaXMuZ3JhcGgsIHRoaXMuc2NlbmUsIHRoaXMuY29udGV4dCwgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBzZXRFbnZpcm9ubWVudEltcHVsc2UoZmlsZSkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50SW1wdWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5yZW1vdmVFZmZlY3QodGhpcy5lbnZpcm9ubWVudEltcHVsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaWxlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0geWllbGQgdGhpcy5kYXRhUG9vbC5nZXQoZmlsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbXB1bHNlID0gbmV3IENvbnZvbHZlcih0aGlzLmNvbnRleHQsIHRoaXMuZ3JhcGgsIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5ncmFwaC5hcHBseUVmZmVjdCh0aGlzLmVudmlyb25tZW50SW1wdWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lclBvc2l0aW9uKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnNldExpc3RlbmVyUG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lck9yaWVudGF0aW9uKGZvcndhcmQsIHVwKSB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5zZXRMaXN0ZW5lck9yaWVudGF0aW9uKGZvcndhcmQsIHVwKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGF0YVBvb2woKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhUG9vbC5jbGVhcigpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBSZXNvbmF0b3IgZnJvbSAnLi4vZnJhbWV3b3JrL3Jlc29uYXRvcic7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5yZXMgPSBuZXcgUmVzb25hdG9yKCk7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tdXNpYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZVZvbHVtZSA9IDE7XHJcbiAgICAgICAgdGhpcy5tdXNpY1ZvbHVtZSA9IDE7XHJcbiAgICAgICAgdGhpcy5zZnhWb2x1bWUgPSAxO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNBbWJpZW5jZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c011c2ljID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwbGF5KGZpbGUpIHtcclxuICAgICAgICBjb25zdCBzb3VuZCA9IHRoaXMucmVzLmxvYWRJbW1lZGlhdGUoZmlsZSk7XHJcbiAgICAgICAgc291bmQuc2V0Vm9sdW1lKHRoaXMuc2Z4Vm9sdW1lKTtcclxuICAgICAgICBzb3VuZC5wbGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0QW1iaWVuY2UoZmlsZSkge1xyXG4gICAgICAgIGlmIChmaWxlID09PSB0aGlzLnByZXZpb3VzQW1iaWVuY2UpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5hbWJpZW5jZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0FtYmllbmNlID0gdGhpcy5hbWJpZW5jZTtcclxuICAgICAgICAgICAgdGhpcy5hbWJpZW5jZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcHJldmlvdXNBbWJpZW5jZS5mYWRlT3V0KDYpLCAxNTAwKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwcmV2aW91c0FtYmllbmNlLmRlc3Ryb3koKSwgNjAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNBbWJpZW5jZSA9IGZpbGU7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZSA9IHRoaXMucmVzLnN0cmVhbShmaWxlLCAwKTtcclxuICAgICAgICB0aGlzLmFtYmllbmNlLnNldFZvbHVtZSh0aGlzLmFtYmllbmNlVm9sdW1lKTtcclxuICAgICAgICB0aGlzLmFtYmllbmNlLnBsYXkoKTtcclxuICAgICAgICB0aGlzLmFtYmllbmNlLmxvb3AodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZS5mYWRlSW4oMyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TXVzaWMoZmlsZSkge1xyXG4gICAgICAgIGlmIChmaWxlID09PSB0aGlzLnByZXZpb3VzTXVzaWMpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5tdXNpYykge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c011c2ljID0gdGhpcy5tdXNpYztcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwcmV2aW91c011c2ljLmZhZGVPdXQoMiksIDUwMCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcHJldmlvdXNNdXNpYy5kZXN0cm95KCksIDIwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByZXZpb3VzTXVzaWMgPSBmaWxlO1xyXG4gICAgICAgIHRoaXMubXVzaWMgPSB0aGlzLnJlcy5zdHJlYW0oZmlsZSwgMSk7XHJcbiAgICAgICAgdGhpcy5tdXNpYy5zZXRWb2x1bWUodGhpcy5tdXNpY1ZvbHVtZSk7XHJcbiAgICAgICAgdGhpcy5tdXNpYy5wbGF5KCk7XHJcbiAgICAgICAgdGhpcy5tdXNpYy5mYWRlSW4oMik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW1wdWxzZShmaWxlKSB7XHJcbiAgICAgICAgdGhpcy5yZXMuc2V0RW52aXJvbm1lbnRJbXB1bHNlKGZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE11c2ljVm9sdW1lKHZvbHVtZSkge1xyXG4gICAgICAgIHRoaXMubXVzaWNWb2x1bWUgPSB2b2x1bWU7XHJcbiAgICAgICAgaWYgKHRoaXMubXVzaWMpIHRoaXMubXVzaWMuc2V0Vm9sdW1lKHZvbHVtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QW1iaWVuY2VWb2x1bWUodm9sdW1lKSB7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZVZvbHVtZSA9IHZvbHVtZTtcclxuICAgICAgICBpZiAodGhpcy5hbWJpZW5jZSkgdGhpcy5hbWJpZW5jZS5zZXRWb2x1bWUodm9sdW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTRlhWb2x1bWUodm9sdW1lKSB7XHJcbiAgICAgICAgdGhpcy5zZnhWb2x1bWUgPSB2b2x1bWU7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBUVFMgfSBmcm9tICcuLi9mcmFtZXdvcmsvdHRzJztcclxuaW1wb3J0IHsgQXJpYU91dHB1dCB9IGZyb20gJy4uL2ZyYW1ld29yay90dHMvb3V0cHV0cy9hcmlhJztcclxuaW1wb3J0IFNvdW5kIGZyb20gJy4vc291bmQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3V0cHV0IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudHRzID0gbmV3IFRUUyhuZXcgQXJpYU91dHB1dCgpKTtcclxuICAgICAgICB0aGlzLmhpc3RvcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm91dHB1dC1hcmVhXCIpO1xyXG4gICAgICAgIHRoaXMuc291bmQgPSBuZXcgU291bmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXkoc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHN0cmluZyA9PT0gXCJcIikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc291bmQucGxheShgYXNzZXRzL3Njcm9sbC53YXZgKTtcclxuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICAgICAgc3RyaW5nLnNwbGl0KFwiXFxuXCIpLmZvckVhY2goKGxpbmUpID0+IHtcclxuICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lKSk7XHJcbiAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpKTtcclxuICAgICAgICAgICAgLy8gdGhpcy50dHMuc3BlYWsobGluZSwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5hcHBlbmRDaGlsZChub2RlKTtcclxuICAgICAgICAvLyB0aGlzLnR0cy5zcGVhayhzdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHBsYXkoZmlsZSkge1xyXG4gICAgICAgIHRoaXMuc291bmQucGxheShmaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRBbWJpZW5jZShmaWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc291bmQuc2V0QW1iaWVuY2UoZmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TXVzaWMoZmlsZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNvdW5kLnNldE11c2ljKGZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEltcHVsc2UoZmlsZSkge1xyXG4gICAgICAgIHRoaXMuc291bmQuc2V0SW1wdWxzZShmaWxlKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbW1hbmRIYW5kbGVyLCBvdXRwdXRIYW5kbGVyKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gY29tbWFuZEhhbmRsZXI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQgPSBvdXRwdXRIYW5kbGVyO1xyXG4gICAgICAgIHRoaXMuZWNob0lucHV0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlucHV0RmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlucHV0LWFyZWFcIik7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW107XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5Q3Vyc29yID0gMDtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRFY2hvKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lY2hvSW5wdXQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGaWVsZC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oaXN0b3J5Q3Vyc29yID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeUN1cnNvci0tO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRGaWVsZC52YWx1ZSA9IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlDdXJzb3JdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcIkFycm93RG93blwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oaXN0b3J5Q3Vyc29yIDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeUN1cnNvcisrO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRGaWVsZC52YWx1ZSA9IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlDdXJzb3JdID8/IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb0lucHV0SGlzdG9yeSh0aGlzLmlucHV0RmllbGQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5pbnB1dEZpZWxkLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEZpZWxkLnZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVjaG9JbnB1dCkgdGhpcy5vdXRwdXQuc2F5KGA+ICR7dmFsfWApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLmRvQ29tbWFuZCh2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0lucHV0SGlzdG9yeShzdHIpIHtcclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChzdHIpO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeUN1cnNvciA9IHRoaXMuaGlzdG9yeS5sZW5ndGg7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgTG9va0NvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvbG9va1wiO1xyXG5pbXBvcnQgVXNlQ29tbWFuZCBmcm9tIFwiLi9jb21tYW5kcy91c2VcIjtcclxuaW1wb3J0IFRha2VDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL3Rha2VcIjtcclxuaW1wb3J0IERyb3BDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL2Ryb3BcIjtcclxuaW1wb3J0IEVjaG9Db21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL2VjaG9cIjtcclxuaW1wb3J0IFNhdmVDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL3NhdmVcIjtcclxuaW1wb3J0IExvYWRDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL2xvYWRcIjtcclxuaW1wb3J0IFZvbHVtZUNvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvdm9sdW1lXCI7XHJcbmltcG9ydCBJbnZlbnRvcnlDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL2ludmVudG9yeVwiO1xyXG5cclxuY29uc3QgZGVmYXVsdENvbW1hbmRzID0gW1xyXG4gICAgW1tcImxvb2tcIiwgXCJsXCJdLCBMb29rQ29tbWFuZF0sXHJcbiAgICBbW1widXNlXCIsIFwiaW50ZXJhY3RcIl0sIFVzZUNvbW1hbmRdLFxyXG4gICAgW1tcInRha2VcIiwgXCJnZXRcIl0sIFRha2VDb21tYW5kXSxcclxuICAgIFtbXCJkcm9wXCIsIFwicHV0XCJdLCBEcm9wQ29tbWFuZF0sXHJcbiAgICBbXCJlY2hvXCIsIEVjaG9Db21tYW5kXSxcclxuICAgIFtcInNhdmVcIiwgU2F2ZUNvbW1hbmRdLFxyXG4gICAgW1wibG9hZFwiLCBMb2FkQ29tbWFuZF0sXHJcbiAgICBbXCJ2b2x1bWVcIiwgVm9sdW1lQ29tbWFuZF0sXHJcbiAgICBbW1wiaVwiLCBcImludlwiLCBcImludmVudG9yeVwiXSwgSW52ZW50b3J5Q29tbWFuZF1cclxuXTtcclxuXHJcbmNvbnN0IGRpcmVjdGlvbk1hcCA9IFtcclxuICAgIFtcIm5cIiwgXCJub3J0aFwiXSxcclxuICAgIFtcIm5lXCIsIFwibm9ydGhlYXN0XCJdLFxyXG4gICAgW1wiZVwiLCBcImVhc3RcIl0sXHJcbiAgICBbXCJzZVwiLCBcInNvdXRoZWFzdFwiXSxcclxuICAgIFtcInNcIiwgXCJzb3V0aFwiXSxcclxuICAgIFtcInN3XCIsIFwic291dGh3ZXN0XCJdLFxyXG4gICAgW1wid1wiLCBcIndlc3RcIl0sXHJcbiAgICBbXCJud1wiLCBcIm5vcnRod2VzdFwiXSxcclxuICAgIFtcInVcIiwgXCJ1cFwiXSxcclxuICAgIFtcImRcIiwgXCJkb3duXCJdXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tYW5kcyB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjb21tYW5kcykge1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kcyA9IGNvbW1hbmRzIHx8IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkRGVmYXVsdENvbW1hbmRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZG9Db21tYW5kKHN0cikge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5wcmludChgWW91IGNhbid0IHNlZW0gdG8gZG8gYW55dGhpbmcgYXQgdGhlIG1vbWVudC5gKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5jb250ZXh0LmdldFJvb20odGhpcy5jb250ZXh0LnBsYXllci5jdXJyZW50Um9vbSk7XHJcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBzdHIuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1hbmRzLmdldChzcGxpdFswXSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5nZXQoc3BsaXRbMF0pKHNwbGl0LCB0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLm1hdGNoRGlyZWN0aW9uKHNwbGl0WzBdKTtcclxuXHJcbiAgICAgICAgaWYgKHJvb20uZ2V0RXhpdChkaXJlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5tb3ZlKHJvb20uZ2V0RXhpdChkaXJlY3Rpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ29tbWFuZChuYW1lLCBmdW5jKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcclxuICAgICAgICAgICAgbmFtZS5mb3JFYWNoKChjb21tYW5kKSA9PiB0aGlzLmNvbW1hbmRzLnNldChjb21tYW5kLCBmdW5jKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5zZXQobmFtZSwgZnVuYyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZENvbW1hbmRzKGNvbW1hbmRzKSB7XHJcbiAgICAgICAgY29tbWFuZHMuZm9yRWFjaCgoY29tbWFuZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoY29tbWFuZFswXSwgY29tbWFuZFsxXSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRGVmYXVsdENvbW1hbmRzKCkge1xyXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZHMoZGVmYXVsdENvbW1hbmRzKTtcclxuICAgIH1cclxuXHJcbiAgICBtYXRjaERpcmVjdGlvbihzdHIpIHtcclxuICAgICAgICBmb3IgKGxldCBkaXIgb2YgZGlyZWN0aW9uTWFwKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXJbMF0gPT0gc3RyKSByZXR1cm4gZGlyWzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExvb2tDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgY29udGV4dC5leGFtaW5lUm9vbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCByb29tID0gY29udGV4dC5nZXRSb29tKGNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHJvb20uZ2V0SXRlbXMoKTtcclxuICAgICAgICBsZXQgaXRlbSA9IG51bGw7XHJcbiAgICAgICAgZm9yIChsZXQgaSBvZiBpdGVtcykge1xyXG4gICAgICAgICAgICBpZiAoaS5uYW1lLmluY2x1ZGVzKGFyZ3NbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IGNvbnRleHQucGxheWVyLmdldEludmVudG9yeSgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaS5uYW1lLmluY2x1ZGVzKGFyZ3NbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQub3V0cHV0LnNheShgSSBjb3VsZCBub3QgZmluZCBhICR7YXJnc1sxXX0uYCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5vdXRwdXQuc2F5KGBZb3UgbG9vayBhdCAke2l0ZW0ubmFtZX0uYCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQub3V0cHV0LnNheShpdGVtLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBVc2VDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgY29uc3QgaXRlbXMgPSByb29tLmdldEl0ZW1zKCk7XHJcbiAgICBsZXQgaXRlbSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgaWYgKGkubmFtZS5pbmNsdWRlcyhhcmdzWzFdKSkge1xyXG4gICAgICAgICAgICBpdGVtID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgICAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICBjb250ZXh0Lm91dHB1dC5zYXkoYEkgY291bGQgbm90IGZpbmQgYSAke2FyZ3NbMV19LmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCBpdGVtLm9uVXNlKCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUYWtlQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCByb29tID0gY29udGV4dC5nZXRSb29tKGNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gcm9vbS5nZXRJdGVtcygpO1xyXG4gICAgbGV0IGl0ZW0gPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaSBvZiBpdGVtcykge1xyXG4gICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgaXRlbSA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFlvdSBjYW4ndCBmaW5kIGFueSAke2FyZ3NbMV19LmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIWl0ZW0udGFrZWFibGUpIHtcclxuICAgICAgICAgICAgY29udGV4dC5wcmludChgWW91IGNhbid0IHRha2UgJHtpdGVtLm5hbWV9LmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvb20ucmVtb3ZlSXRlbShpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29udGV4dC5wbGF5ZXIuYWRkSXRlbShpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29udGV4dC5wcmludChgWW91IHRha2UgJHtpdGVtLm5hbWV9LmApO1xyXG4gICAgICAgICAgICBpdGVtLm9uVGFrZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyb3BDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgIGxldCBpdGVtID0gbnVsbDtcclxuICAgIGZvciAobGV0IGkgb2YgaXRlbXMpIHtcclxuICAgICAgICBpZiAoaS5uYW1lLmluY2x1ZGVzKGFyZ3NbMV0pKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3UncmUgbm90IGNhcnJ5aW5nIGEgJHthcmdzWzFdfWApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb250ZXh0LnBsYXllci5yZW1vdmVJdGVtKGl0ZW0uaWQpO1xyXG4gICAgICAgIHJvb20uYWRkSXRlbShpdGVtLmlkKTtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3Ugc2V0ICR7aXRlbS5uYW1lfSBkb3duIG9uIHRoZSBmbG9vci5gKTtcclxuICAgICAgICBpdGVtLm9uRHJvcCgpO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWNob0NvbW1hbmQoYXJncywgY29udGV4dCkge1xyXG4gICAgaWYgKGFyZ3NbMV0gIT0gXCJvblwiICYmIGFyZ3NbMV0gIT0gXCJvZmZcIikge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFVzYWdlOiBlY2hvIDxvbi9vZmY+YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRleHQuc2V0SW5wdXRFY2hvKGFyZ3NbMV0gPT0gXCJvblwiID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBDb21tYW5kIGVjaG8gaXMgbm93ICR7YXJnc1sxXX0uYCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTYXZlQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBTYXZpbmcgZ2FtZS4uLmApO1xyXG4gICAgY29udGV4dC5zYXZlKCk7XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMb2FkQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBMb2FkaW5nIGdhbWUuLi5gKTtcclxuICAgIGNvbnRleHQubG9hZCgpO1xyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVm9sdW1lQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQucHJpbnQoYFVzYWdlOiB2b2x1bWUgPG11c2ljL3NmeC9hbWJpZW5jZT4gPDAtMTAwPmApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChhcmdzWzJdKTtcclxuICAgIGlmICh2YWx1ZSA+IDEwMCB8fCB2YWx1ZSA8IDEpIHtcclxuICAgICAgICByZXR1cm4gY29udGV4dC5wcmludChgTm8gaGlnaGVyIHRoYW4gMTAwIGFuZCBubyBsZXNzIHRoYW4gMS5gKTtcclxuICAgIH1cclxuICAgIGlmIChhcmdzWzFdID09IFwic2Z4XCIpIHtcclxuICAgICAgICBjb250ZXh0Lm91dHB1dC5zb3VuZC5zZXRTRlhWb2x1bWUodmFsdWUvMTAwKTtcclxuICAgIH0gZWxzZSBpZiAoYXJnc1sxXSA9PSBcIm11c2ljXCIpIHtcclxuICAgICAgICBjb250ZXh0Lm91dHB1dC5zb3VuZC5zZXRNdXNpY1ZvbHVtZSh2YWx1ZS8xMDApO1xyXG4gICAgfSBlbHNlIGlmIChhcmdzWzFdID09IFwiYW1iaWVuY2VcIikge1xyXG4gICAgICAgIGNvbnRleHQub3V0cHV0LnNvdW5kLnNldEFtYmllbmNlVm9sdW1lKHZhbHVlLzEwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBjb250ZXh0LnByaW50KGBJbnZhbGlkIGNoYW5uZWwuIEVpdGhlciBhbWJpZW5jZSwgc2Z4IG9yIG11c2ljIGlzIGFsbG93ZWQuYCk7XHJcbiAgICB9XHJcbiAgICBjb250ZXh0LnByaW50KGAke2FyZ3NbMV19IHZvbHVtZSBzZXQgdG8gJHt2YWx1ZX0lYClcclxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEludmVudG9yeUNvbW1hbmQoYXJncywgY29udGV4dCkge1xyXG4gICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgIGlmIChpdGVtcy5sZW5ndGggPCAxKSByZXR1cm4gY29udGV4dC5wcmludChgWW91J3JlIG5vdCBjYXJyeWluZyBhbnl0aGluZy5gKTtcclxuICAgIGxldCBpdGVtRGVzY3JpcHRpb24gPSBgWW91IGFyZSBjYXJyeWluZyBgO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAyKSB7XHJcbiAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBgJHtpdGVtLm5hbWV9LCBgO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBgJHtpdGVtLm5hbWV9IGFuZCBgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBpdGVtLm5hbWVcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnRleHQucHJpbnQoaXRlbURlc2NyaXB0aW9uICsgXCIuXCIpO1xyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VyaWFsaXphdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGNvbnN0IHNhdmVvYmogPSB7XHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmNvbnRleHQuc3RhdGUuc2VyaWFsaXplKCksXHJcbiAgICAgICAgICAgIGl0ZW1Mb2NhdGlvbnM6IHRoaXMuc2VyaWFsaXplSXRlbUxvY2F0aW9ucygpLFxyXG4gICAgICAgICAgICBpdGVtU3RhdGVzOiB0aGlzLnNlcmlhbGl6ZUl0ZW1TdGF0ZXMoKSxcclxuICAgICAgICAgICAgcGxheWVyOiAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Um9vbTogdGhpcy5jb250ZXh0LnBsYXllci5jdXJyZW50Um9vbSxcclxuICAgICAgICAgICAgICAgIGludmVudG9yeTogdGhpcy5jb250ZXh0LnBsYXllci5pbnZlbnRvcnlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdm9sdW1lczoge1xyXG4gICAgICAgICAgICAgICAgbXVzaWM6IHRoaXMuY29udGV4dC5vdXRwdXQuc291bmQubXVzaWNWb2x1bWUsXHJcbiAgICAgICAgICAgICAgICBzZng6IHRoaXMuY29udGV4dC5vdXRwdXQuc291bmQuc2Z4Vm9sdW1lLFxyXG4gICAgICAgICAgICAgICAgYW1iaWVuY2U6IHRoaXMuY29udGV4dC5vdXRwdXQuc291bmQuYW1iaWVuY2VWb2x1bWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJzYXZlXCIsIEpTT04uc3RyaW5naWZ5KHNhdmVvYmopKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKCkge1xyXG4gICAgICAgIGNvbnN0IGxvYWRvYmogPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2F2ZVwiKSk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnN0YXRlLmRlc2VyaWFsaXplKGxvYWRvYmouc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuZGVzZXJpYWxpemVJdGVtTG9jYXRpb25zKGxvYWRvYmouaXRlbUxvY2F0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5kZXNlcmlhbGl6ZUl0ZW1TdGF0ZXMobG9hZG9iai5pdGVtU3RhdGVzKTtcclxuICAgICAgICB0aGlzLmRlc2VyaWFsaXplUGxheWVyKGxvYWRvYmoucGxheWVyKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQub3V0cHV0LnNvdW5kLnNldFNGWFZvbHVtZShsb2Fkb2JqLnZvbHVtZXMuc2Z4KTtcclxuICAgICAgICB0aGlzLmNvbnRleHQub3V0cHV0LnNvdW5kLnNldE11c2ljVm9sdW1lKGxvYWRvYmoudm9sdW1lcy5tdXNpYyk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lm91dHB1dC5zb3VuZC5zZXRBbWJpZW5jZVZvbHVtZShsb2Fkb2JqLnZvbHVtZXMuYW1iaWVuY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlcmlhbGl6ZUl0ZW1Mb2NhdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5yb29tcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtpdGVtLmlkLCBcclxuICAgICAgICAgICAgICAgIGl0ZW0ub2JqZWN0c1xyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzZXJpYWxpemVJdGVtTG9jYXRpb25zKGl0ZW1zKSB7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByb29tID0gdGhpcy5jb250ZXh0LmdldFJvb20oaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHJvb20ub2JqZWN0cyA9IGl0ZW1bMV07XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBkZXNlcmlhbGl6ZUl0ZW1TdGF0ZXMoaXRlbXMpIHtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuY29udGV4dC5nZXRJdGVtKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICBvYmouc3RhdGUuZGVzZXJpYWxpemUoaXRlbVsxXSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBkZXNlcmlhbGl6ZVBsYXllcihwbGF5ZXIpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQubW92ZShwbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5wbGF5ZXIuaW52ZW50b3J5ID0gcGxheWVyLmludmVudG9yeTtcclxuICAgIH1cclxuXHJcbiAgICBzZXJpYWxpemVJdGVtU3RhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuaXRlbXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBbaXRlbS5pZCwgaXRlbS5zdGF0ZS5zZXJpYWxpemUoKV1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBTdGF0ZSBmcm9tICcuL3N0YXRlJztcclxuaW1wb3J0IFJvb20gZnJvbSAnLi9yb29tJztcclxuaW1wb3J0IFBsYXllciBmcm9tICcuL3BsYXllcic7XHJcbmltcG9ydCBPdXRwdXQgZnJvbSAnLi9vdXRwdXQnO1xyXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi9pbnB1dCc7XHJcbmltcG9ydCBDb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcclxuaW1wb3J0IFNlcmlhbGl6YXRpb24gZnJvbSAnLi9zZXJpYWxpemF0aW9uJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWUge1xyXG4gICAgY29uc3RydWN0b3IobmV3R2FtZSA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLm5ld0dhbWUgPSBuZXdHYW1lO1xyXG4gICAgICAgIHRoaXMucGxheWVyID0gbmV3IFBsYXllcigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU3RhdGUoKTtcclxuICAgICAgICB0aGlzLnJvb21zID0gW107XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IE91dHB1dCgpO1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXIgPSBuZXcgQ29tbWFuZHModGhpcyk7XHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBJbnB1dCh0aGlzLmNvbW1hbmRIYW5kbGVyLCB0aGlzLm91dHB1dCk7XHJcbiAgICAgICAgdGhpcy52aXNpdGVkUm9vbXMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5TZXJpYWxpemF0aW9uID0gbmV3IFNlcmlhbGl6YXRpb24odGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpbnQoc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc2F5KHN0cmluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdGVsbChsaW5lcywgdGltZSkge1xyXG4gICAgICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmludChsaW5lKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0KHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0KGRhdGEpIHtcclxuICAgICAgICB0aGlzLnJvb21zID0gZGF0YS5yb29tcy5tYXAoKHJvb20pID0+IHtcclxuICAgICAgICAgICAgcm9vbS5jb250ZXh0ID0gdGhpcztcclxuICAgICAgICAgICAgcmV0dXJuIHJvb207XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBkYXRhLnN0YXRlIHx8IG5ldyBTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXIuYWRkQ29tbWFuZHMoZGF0YS5jb21tYW5kcyk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSBuZXcgUGxheWVyKCk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIuY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3R2FtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmUodGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VyaWFsaXphdGlvbi5sb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZHZhbmNlVGljaygpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0ub25UaWNrKCkpO1xyXG4gICAgICAgIHRoaXMucm9vbXMuZm9yRWFjaCgocm9vbSkgPT4gcm9vbS5vblRpY2soKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuYWR2YW5jZVRpY2soKSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGV4YW1pbmVSb29tKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmdldFJvb20odGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIHRoaXMub3V0cHV0LnNheShyb29tLnRpdGxlKTtcclxuICAgICAgICBpZiAoIXRoaXMudmlzaXRlZFJvb21zLmdldCh0aGlzLnBsYXllci5jdXJyZW50Um9vbSkgJiYgcm9vbS5maXJzdERlc2NyaXB0aW9uICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRwdXQuc2F5KHJvb20uZmlyc3REZXNjcmlwdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRwdXQuc2F5KHJvb20uZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4YW1pbmVJdGVtcygpO1xyXG4gICAgICAgIHRoaXMuZXhhbWluZUV4aXRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhhbWluZUl0ZW1zKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmdldFJvb20odGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcm9vbS5nZXRJdGVtcygpO1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGl0ZW1EZXNjcmlwdGlvbiA9IGBZb3Ugc2VlIGA7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMikge1xyXG4gICAgICAgICAgICAgICAgaXRlbURlc2NyaXB0aW9uICs9IGAke2l0ZW0ubmFtZX0sIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtRGVzY3JpcHRpb24gKz0gYCR7aXRlbS5uYW1lfSBhbmQgYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBpdGVtLm5hbWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub3V0cHV0LnNheShpdGVtRGVzY3JpcHRpb24gKyBcIi5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZXhhbWluZUV4aXRzKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmdldFJvb20odGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIGxldCBleGl0cyA9IFtdO1xyXG4gICAgICAgIGxldCBleGl0RGVzY3JpcHRpb24gPSBcIllvdSBjYW4gZ28gXCI7XHJcbiAgICAgICAgY29uc3QgZXhpdEtleXMgPSByb29tLmV4aXRzLmtleXMoKTtcclxuICAgICAgICBmb3IgKGxldCBleGl0IG9mIGV4aXRLZXlzKSB7XHJcbiAgICAgICAgICAgIGV4aXRzLnB1c2goZXhpdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4aXRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGV4aXRzLmxlbmd0aCAtIDIpIHtcclxuICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdGlvbiArPSBgJHtpdGVtfSwgYDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA8IGV4aXRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdGlvbiArPSBgJHtpdGVtfSBhbmQgYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdGlvbiArPSBpdGVtXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm91dHB1dC5zYXkoZXhpdERlc2NyaXB0aW9uICsgXCIuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJvb20oaWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb29tcy5maW5kKChyb29tKSA9PiByb29tLmlkID09IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2FpdChtcykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vdmUocm9vbUlEKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFJvb20gPSB0aGlzLmdldFJvb20odGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIGNvbnN0IG5ld1Jvb20gPSB0aGlzLmdldFJvb20ocm9vbUlEKTtcclxuICAgICAgICBpZiAoY3VycmVudFJvb20uY2FuRXhpdCgpICYmIG5ld1Jvb20uY2FuRW50ZXIoKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBjdXJyZW50Um9vbS5vbkV4aXQoKTtcclxuICAgICAgICAgICAgYXdhaXQgbmV3Um9vbS5vbkVudGVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyLmN1cnJlbnRSb29tID0gcm9vbUlEO1xyXG4gICAgICAgICAgICB0aGlzLmV4YW1pbmVSb29tKCk7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaXRlZFJvb21zLnNldChyb29tSUQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVDb21tYW5kSW5wdXQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyLmVuYWJsZWQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbnB1dEVjaG8odmFsdWUpIHtcclxuICAgICAgICB0aGlzLmlucHV0LnNldEVjaG8odmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5TZXJpYWxpemF0aW9uLnNhdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuU2VyaWFsaXphdGlvbi5sb2FkKCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBSb29tIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBcInJvb21cIjtcclxuICAgICAgICB0aGlzLnRpdGxlID0gXCJBIHJvb21cIjtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJZb3Ugc2VlIG5vdGhpbmcgc3BlY2lhbFwiO1xyXG4gICAgICAgIHRoaXMuZmlyc3REZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5vYmplY3RzID0gW107XHJcbiAgICAgICAgdGhpcy5leGl0cyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmVudGVyQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZXhpdENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhbkVudGVyTG9naWMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FuRXhpdExvZ2ljID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm11c2ljID0gbnVsbDtcclxuICAgICAgICB0aGlzLmFtYmllbmNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmltcHVsc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRW50ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lm91dHB1dC5zZXRNdXNpYyh0aGlzLm11c2ljKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQub3V0cHV0LnNldEFtYmllbmNlKHRoaXMuYW1iaWVuY2UpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5vdXRwdXQuc2V0SW1wdWxzZSh0aGlzLmltcHVsc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLmVudGVyQ2FsbGJhY2spIHJldHVybiB0aGlzLmVudGVyQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkV4aXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhpdENhbGxiYWNrKSByZXR1cm4gdGhpcy5leGl0Q2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5FbnRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5FbnRlckxvZ2ljKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbkVudGVyTG9naWModGhpcy5jb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuRXhpdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5FeGl0TG9naWMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FuRXhpdExvZ2ljKHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEV4aXQoZGlyZWN0aW9uLCByb29tSUQpIHtcclxuICAgICAgICB0aGlzLmV4aXRzLnNldChkaXJlY3Rpb24sIHJvb21JRCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXhpdChkaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5leGl0cy5nZXQoZGlyZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRJdGVtKGl0ZW0pIHtcclxuICAgICAgICB0aGlzLm9iamVjdHMucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVJdGVtKGlkKSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3RzID0gdGhpcy5vYmplY3RzLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRW50ZXJDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuZW50ZXJDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRXhpdENhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5leGl0Q2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEVudGVyTG9naWMoZnVuYykge1xyXG4gICAgICAgIHRoaXMuY2FuRW50ZXJMb2dpYyA9IGZ1bmMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFeGl0TG9naWMoZnVuYykge1xyXG4gICAgICAgIHRoaXMuY2FuRXhpdExvZ2ljID0gZnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFRpY2tDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMudGlja0NhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzLm1hcCgoaXRlbSkgPT4gdGhpcy5jb250ZXh0LmdldEl0ZW0oaXRlbSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uVGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy50aWNrQ2FsbGJhY2spIHJldHVybiB0aGlzLnRpY2tDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IFJvb20gZnJvbSAnLi4vcm9vbSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb29tQnVpbGRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnJvb20gPSBuZXcgUm9vbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhJRChJRCkge1xyXG4gICAgICAgIHRoaXMucm9vbS5pZCA9IElEO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhUaXRsZSh0aXRsZSkge1xyXG4gICAgICAgIHRoaXMucm9vbS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhGaXJzdERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmZpcnN0RGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLnJvb20uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRXhpdChkaXJlY3Rpb24sIHJvb21JRCkge1xyXG4gICAgICAgIHRoaXMucm9vbS5hZGRFeGl0KGRpcmVjdGlvbiwgcm9vbUlEKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoSXRlbShpdGVtSUQpIHtcclxuICAgICAgICB0aGlzLnJvb20uYWRkSXRlbShpdGVtSUQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhFbnRlckNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEVudGVyQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhFeGl0Q2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnJvb20uYWRkRXhpdENhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRW50ZXJMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEVudGVyTG9naWMoZnVuYyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aEV4aXRMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEV4aXRMb2dpYyhmdW5jKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoVGljayhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZFRpY2tDYWxsYmFjayhmdW5jKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoTXVzaWMoZmlsZSkge1xyXG4gICAgICAgIHRoaXMucm9vbS5tdXNpYyA9IGZpbGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aEFtYmllbmNlKGZpbGUpIHtcclxuICAgICAgICB0aGlzLnJvb20uYW1iaWVuY2UgPSBmaWxlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhJbXB1bHNlKGZpbGUpIHtcclxuICAgICAgICB0aGlzLnJvb20uaW1wdWxzZSA9IGZpbGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb29tO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IFJvb21CdWlsZGVyIGZyb20gJy4uLy4uLy4uL2VuZ2luZS9idWlsZGVycy9yb29tJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBSb29tQnVpbGRlcigpXHJcbi53aXRoSUQoXCJzdGFydFwiKVxyXG4ud2l0aFRpdGxlKFwiQSBzbWFsbCBzcGhlcmljYWwgYWxjb3ZlXCIpXHJcbi53aXRoRmlyc3REZXNjcmlwdGlvbihcclxuYFlvdSBmaW5kIHlvdXJzZWxmIGluIGEgc21hbGwsIHNwaGVyaWNhbCBhbGNvdmUuIEl0IGZlZWxzIGNvbGQgYW5kIGRhcmssIHNhdmUgZnJvbSBhIGRpbSBnbG93IHdoaWNoIHNlZW1zIHRvIGJlIGVsdW1pbmF0aW5nIHRoZSBhcmVhIGZyb20gdGhlIG5vcnRoLlxyXG5UaGUgc3VyZmFjZSBhcHBlYXJzIHRvIGJlIHVubmF0dXJhbGx5IHNtb290aCwgYXMgaWYgbWVsdGVkIGF3YXkgdXNpbmcgYWNpZGljIG1lYW5zLiBJdCdzIHdhcm0gdG8gdGhlIHRvdWNoLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG5gQSBzcGhlcmljYWwgYWxjb3ZlLiBUaGUgc21vb3RoIHN1cmZhY2UgYXBwZWFycyB0byBiZSBtZWx0ZWQgYXdheSB1c2luZyBhY2lkaWMgbWVhbnMuIFRoZXJlJ3MgYSBkaW0gZ2xvdyBzaGluaW5nIGluIGZyb20gdGhlIG5vcnRoLmBcclxuKVxyXG4ud2l0aEV4aXQoXCJub3J0aFwiLCBcInR1bm5lbDFcIilcclxuLndpdGhFbnRlckNhbGxiYWNrKGFzeW5jIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIGlmIChjb250ZXh0LnN0YXRlLmdldChcInN0YXJ0LmF3b2tlblwiKSkgcmV0dXJuO1xyXG4gICAgY29uc3QgeyBvdXRwdXQsIHdhaXQgfSA9IGNvbnRleHQ7XHJcbiAgICBjb250ZXh0LmVuYWJsZUNvbW1hbmRJbnB1dChmYWxzZSk7XHJcbiAgICBhd2FpdCBjb250ZXh0LnRlbGwoW1xyXG4gICAgICAgIFwiWW91IHNsb3dseSB3YWtlIHVwLlwiLFxyXG4gICAgICAgIFwieW91J3JlIG5vdCBzdXJlIGlmIHlvdSB3ZXJlIGV2ZXIgY29uc2Npb3VzIGFib3V0IHdha2luZyB1cCwgYnV0IHJpZ2h0IG5vdywgeW91J3JlIGNsZWFybHkgYXdhcmUgdGhhdCB5b3Ugd2VyZSBwcmV2aW91c2x5IGFzbGVlcC5cIixcclxuICAgICAgICBcIkluIGZhY3QsIGEgbG90IG9mIHlvdXIgdGhvdWdodHMgc2VlbSBmb3JlaWduIHRvIHlvdS5cIixcclxuICAgICAgICBcIllvdSdyZSBub3Qgc3VyZSBob3cgdG8gZmVlbCBhYm91dCB0aGlzLlwiLFxyXG4gICAgICAgIFwiR29kIHRoZSBoZWFkYWNoZS4uLlwiLFxyXG4gICAgICAgIFwiT0ssIHRpbWUgdG8gdGhpbmsgYWJvdXQgdGhpcy5cIixcclxuICAgICAgICBcIkh1aCwgc29tZXRoaW5nIGVsc2UgeW91IG5ldmVyIGRpZCBiZWZvcmUuXCIsXHJcbiAgICAgICAgXCJXaGVyZSBhcmUgeW91P1wiLFxyXG4gICAgICAgIFwiWW91IHJlYWNoIHVwIGFuZCB0b3VjaCB5b3VyIGhlYWQuXCIsXHJcbiAgICAgICAgXCJPSywgdGhhdCBzZWVtcyB0byBiZSBpbiBvcmRlci4gWW91ciBhbnRlbm5hZSBhcmUgc3RpbGwgdGhlcmUsIHlvdXIgbW91dGggcGFydHMgc2VlbSBpbiB0YWN0Li4uXCIsXHJcbiAgICAgICAgXCJIbW0uIEFsbCB0aGlzIGlzIHN0cmFuZ2UuXCIsXHJcbiAgICAgICAgXCJObyB1c2Ugc2l0dGluZyBhcm91bmQuIFlvdSBnZXQgdXAgYW5kIHNsb3dseSBleGFtaW5lIHlvdXIgc3Vycm91bmRpbmdzLlwiXHJcbiAgICBdLCAzMDAwKTtcclxuICAgIGNvbnRleHQuZW5hYmxlQ29tbWFuZElucHV0KHRydWUpO1xyXG4gICAgY29udGV4dC5zdGF0ZS5zZXQoXCJzdGFydC5hd29rZW5cIiwgdHJ1ZSk7XHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgUm9vbUJ1aWxkZXIgZnJvbSAnLi4vLi4vLi4vZW5naW5lL2J1aWxkZXJzL3Jvb20nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFJvb21CdWlsZGVyKClcclxuLndpdGhJRChcInR1bm5lbDFcIilcclxuLndpdGhUaXRsZShcIkEgbG9uZyBkYXJrIHR1bm5lbFwiKVxyXG4ud2l0aEZpcnN0RGVzY3JpcHRpb24oXHJcbmBZb3Ugc2xvd2x5IG1ha2UgeW91ciB3YXkgb3V0IG9mIHRoZSBsaXR0bGUgYWxjb3ZlLCBoZWFkaW5nIG5vcnRoIGludG8gYSBzbW9vdGgsIHR1YmUtc2hhcGVkIHR1bm5lbC5cclxuWW91IG5vdGljZSByYXpvciB0aGluIHRocmVhZHMgY29taW5nIG91dCBvZiB0aGUgY2VpbGluZywgd2VhdmluZyBhbmQgc2xpdGhlcmluZyBhbG9uZyB0aGUgbGVuZ3RoIG9mIHRoZSB0dW5uZWwgdG93YXJkcyB0aGUgbm9ydGguIFRoZXJ5IHByb3ZpZGUgYSBkaW0gZ2xvdywgd2hpY2ggbXVzdCBoYXZlIGJlZW4gdGhlIGxpZ2h0IHlvdSBzYXcgYmVmb3JlLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG5gQSB0dWJlLXNoYXBlZCB0dW5uZWwuIFRoaW4gdGhyZWFkcyBzZWVtIHRvIGV4aXQgdGhlIGNlaWxpbmcgaGVyZSwgZW1pbmF0aW5nIGEgc29mdCBnbG93LmBcclxuKVxyXG4ud2l0aEV4aXQoXCJzb3V0aFwiLCBcInN0YXJ0XCIpXHJcbi53aXRoRXhpdChcIm5vcnRoXCIsIFwiY2VudHJhbDFcIilcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBSb29tQnVpbGRlciBmcm9tIFwiLi4vLi4vLi4vZW5naW5lL2J1aWxkZXJzL3Jvb21cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBSb29tQnVpbGRlcigpXHJcbi53aXRoSUQoXCJjZW50cmFsMVwiKVxyXG4ud2l0aFRpdGxlKFwiQSBsYXJnZSBzcGhlcmljYWwgY2hhbWJlclwiKVxyXG4ud2l0aEZpcnN0RGVzY3JpcHRpb24oXHJcbmBZb3UgZXhpdCB0aGUgdHVubmVsIGludG8gYSBsYXJnZSwgc3BoZXJpY2FsIGNoYW1iZXIuXHJcblRoZXJlIGFyZSBtYW55IG1vcmUgdGhyZWFkcyBhY3Jvc3MgdGhlIHdhbGxzIGFuZCBjZWlsaW5nIGhlcmUsIHRoZSBnbG93IGVudmVsb3BpbmcgeW91IGZ1bGx5IGluIGl0cyB1bm5hdHVyYWwgIGxpZ2h0LlxyXG5UaGUgY2hhbWJlciBhcHBlYXJzIHRvIGJlIGxhcmdlLCBhYmxlIHRvIGZpdCBodW5kcmVkcyBvZiB5b3UgaW5zaWRlLlxyXG5UbyB0aGUgbm9ydGhlYXN0LCBub3J0aHdlc3QsIHNvdXRoZWFzdCBhbmQgc291dGh3ZXN0IHlvdSBub3RpY2UgbGFyZ2Ugc3RhdHVlcyByZXByZXNlbnRpbmcgYW50cy4gVGhyZWFkcyBzZWVtIHRvIGxlYWQgcmlnaHQgaW50byB0aGVtLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG5gQSBsYXJnZSwgc3BoZXJpY2FsIGNoYW1iZXIuIEdsb3dpbmcgdGhyZWFkcyBjcmlzcy1jcm9zcyB0aGUgd2FsbHMgYW5kIGNlaWxpbmcuIEFyb3VuZCB5b3UsIHN0YXR1ZXMgb2YgYW50cy5gXHJcbilcclxuLndpdGhFeGl0KFwibm9ydGh3ZXN0XCIsIFwic3RhdHVlMVwiKVxyXG4ud2l0aEV4aXQoXCJub3J0aGVhc3RcIiwgXCJzdGF0dWUyXCIpXHJcbi53aXRoRXhpdChcInNvdXRod2VzdFwiLCBcInN0YXR1ZTNcIilcclxuLndpdGhFeGl0KFwic291dGhlYXN0XCIsIFwic3RhdHVlNFwiKVxyXG4ud2l0aEV4aXQoXCJzb3V0aFwiLCBcInR1bm5lbDFcIilcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBSb29tQnVpbGRlciBmcm9tIFwiLi4vLi4vLi4vZW5naW5lL2J1aWxkZXJzL3Jvb21cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBSb29tQnVpbGRlcigpXHJcbi53aXRoSUQoXCJzdGF0dWUxXCIpXHJcbi53aXRoVGl0bGUoXCJUaGUgbm9ydGh3ZXN0ZXJuIHBhcnQgb2YgdGhlIGNlbnRyYWwgY2hhbWJlclwiKVxyXG4ud2l0aEZpcnN0RGVzY3JpcHRpb24oXHJcbiAgICBgWW91IHdhbGsgb3ZlciB0byB0aGUgbm9ydGh3ZXN0ZXJuIHBhcnQgb2YgdGhlIGNlbnRyYWwgY2hhbWJlci5cclxuICAgIEl0IGlzIGFsbW9zdCBlbnRpcmVseSB0YWtlbiB1cCBieSBhIGh1Z2UgYW50IHN0YXR1ZS4gT25lIG9mIGl0cyBzaXggbGVncyBhcmUgZXh0ZW5kZWQgb3V0d2FyZHMsIGF0dGFjaGVkIHRvIHdoaWNoIGlzIGEgc21hbGwsIHJvdW5kIGRldmljZS5gXHJcbilcclxuLndpdGhEZXNjcmlwdGlvbihcclxuICAgIGBgXHJcbilcclxuLndpdGhFeGl0KFwic291dGhlYXN0XCIsIFwiY2VudHJhbDFcIilcclxuLndpdGhJdGVtKFwic3RhdHVlMVwiKVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IFJvb21CdWlsZGVyIGZyb20gXCIuLi8uLi8uLi9lbmdpbmUvYnVpbGRlcnMvcm9vbVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFJvb21CdWlsZGVyKClcclxuLndpdGhJRChcInN0YXR1ZTJcIilcclxuLndpdGhUaXRsZShcIlRoZSBub3J0aGVhc3Rlcm4gcGFydCBvZiB0aGUgY2VudHJhbCBjaGFtYmVyXCIpXHJcbi53aXRoRmlyc3REZXNjcmlwdGlvbihcclxuICAgIGBZb3Ugd2FsayBvdmVyIHRvIHRoZSBub3J0aGVhc3Rlcm4gcGFydCBvZiB0aGUgY2VudHJhbCBjaGFtYmVyLlxyXG4gICAgSXQgaXMgYWxtb3N0IGVudGlyZWx5IHRha2VuIHVwIGJ5IGEgaHVnZSBhbnQgc3RhdHVlLiBUd28gb2YgaXRzIHNpeCBsZWdzIGFyZSBleHRlbmRlZCBvdXR3YXJkcywgYXR0YWNoZWQgdG8gd2hpY2ggaXMgYSBsYXJnZSwgcmVjdGFuZ3VsYXIgZGV2aWNlLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG4gICAgYGBcclxuKVxyXG4ud2l0aEV4aXQoXCJzb3V0aHdlc3RcIiwgXCJjZW50cmFsMVwiKVxyXG4ud2l0aEl0ZW0oXCJzdGF0dWUyXCIpXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgUm9vbUJ1aWxkZXIgZnJvbSBcIi4uLy4uLy4uL2VuZ2luZS9idWlsZGVycy9yb29tXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgUm9vbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwic3RhdHVlM1wiKVxyXG4ud2l0aFRpdGxlKFwiVGhlIHNvdXRod2VzdGVybiBwYXJ0IG9mIHRoZSBjZW50cmFsIGNoYW1iZXJcIilcclxuLndpdGhGaXJzdERlc2NyaXB0aW9uKFxyXG4gICAgYFlvdSB3YWxrIG92ZXIgdG8gdGhlIHNvdXRod2VzdGVybiBwYXJ0IG9mIHRoZSBjZW50cmFsIGNoYW1iZXIuXHJcbiAgICBJdCBpcyBhbG1vc3QgZW50aXJlbHkgdGFrZW4gdXAgYnkgYSBodWdlIGFudCBzdGF0dWUuIFRocmVlIG9mIGl0cyBzaXggbGVncyBhcmUgZXh0ZW5kZWQgb3V0d2FyZHMsIGF0dGFjaGVkIHRvIHdoaWNoIGlzIGEgcm91bmQgc3RvbmUgdGFibGV0LmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG4gICAgYGBcclxuKVxyXG4ud2l0aEV4aXQoXCJub3J0aGVhc3RcIiwgXCJjZW50cmFsMVwiKVxyXG4ud2l0aEl0ZW0oXCJzdGF0dWUzXCIpXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgU3RhdGUgZnJvbSBcIi4vc3RhdGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW0ge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pZCA9IFwiaXRlbVwiO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiQW4gaXRlbVwiO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIllvdSBzZWUgbm90aGluZyBzcGVjaWFsIGFib3V0IHRoaXMgaXRlbVwiO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IFwiaXRlbVwiO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU3RhdGUoKTtcclxuICAgICAgICB0aGlzLnVzYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50YWtlYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51c2VDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50YWtlQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZHJvcENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblVzZSgpIHtcclxuICAgICAgICBpZiAodGhpcy51c2VDYWxsYmFjaykgcmV0dXJuIHRoaXMudXNlQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblRha2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFrZUNhbGxiYWNrKSByZXR1cm4gdGhpcy50YWtlQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRyb3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcENhbGxiYWNrKSByZXR1cm4gdGhpcy5kcm9wQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuICAgIGFzeW5jIG9uVGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy50aWNrQ2FsbGJhY2spIHJldHVybiB0aGlzLnRpY2tDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy51c2VDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGFrZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy50YWtlQ2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZERyb3BDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuZHJvcENhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUaWNrQ2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U3RhdGUoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnNldChrZXksIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0ZShrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5nZXQoa2V5KTtcclxuICAgIH1cclxufSIsImltcG9ydCBJdGVtIGZyb20gJy4uL2l0ZW0nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbUJ1aWxkZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtID0gbmV3IEl0ZW0oKTtcclxuICAgIH1cclxuXHJcbiAgICB3aXRoSUQoSUQpIHtcclxuICAgICAgICB0aGlzLml0ZW0uaWQgPSBJRDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoTmFtZShuYW1lKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhEZXNjcmlwdGlvbihkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMuaXRlbS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhUeXBlKHR5cGUpIHtcclxuICAgICAgICB0aGlzLml0ZW0udHlwZSA9IHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aFN0YXRlKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLml0ZW0uc2V0U3RhdGUoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaXNVc2FibGUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLml0ZW0udXNhYmxlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaXNUYWtlYWJsZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbS50YWtlYWJsZSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhVc2VDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaXRlbS5hZGRVc2VDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aFRha2VDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaXRlbS5hZGRUYWtlQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhEcm9wQ2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLml0ZW0uYWRkRHJvcENhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIFxyXG4gICAgd2l0aFRpY2tDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaXRlbS5hZGRUaWNrQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEl0ZW1CdWlsZGVyIGZyb20gJy4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJdGVtQnVpbGRlcigpXHJcbi53aXRoSUQoXCJzdGF0dWU0XCIpXHJcbi53aXRoTmFtZShcImEgaHVnZSBhbnQgc3RhdHVlXCIpXHJcbi53aXRoRGVzY3JpcHRpb24oXHJcbiAgICBgQmVmb3JlIHlvdSBpcyBhIGJpZyBzdGF0dWUgb2YgYW4gYW50LCBpbiB0aGUgcHJvY2VzcyBvZiBmYWxsaW5nIG92ZXIuIEFsbCBvZiBpdHMgbGVncyBhcmUgYmVudCBhdCB0aGUgam9pbnRzLmBcclxuKVxyXG4uaXNUYWtlYWJsZShmYWxzZSlcclxuLmlzVXNhYmxlKHRydWUpXHJcbi53aXRoVXNlQ2FsbGJhY2soYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQucHJpbnQoYFlvdSBjYW4ndCBzZWVtIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoaXMgeWV0LmApXHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgTGFpciBmcm9tICcuL2xhaXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgW1xyXG4gICAgLi4uTGFpclxyXG5dOyIsImltcG9ydCBTdGFydCBmcm9tICcuL3N0YXJ0JztcclxuaW1wb3J0IFR1bm5lbDEgZnJvbSAnLi90dW5uZWwxJztcclxuaW1wb3J0IGNlbnRyYWwxIGZyb20gJy4vY2VudHJhbDEnO1xyXG5pbXBvcnQgc3RhdHVlMSBmcm9tICcuL3N0YXR1ZTEnO1xyXG5pbXBvcnQgc3RhdHVlMiBmcm9tICcuL3N0YXR1ZTInO1xyXG5pbXBvcnQgc3RhdHVlMyBmcm9tICcuL3N0YXR1ZTMnO1xyXG5pbXBvcnQgc3RhdHVlNCBmcm9tICcuLi8uLi9pdGVtcy9zdGF0dWU0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFtcclxuICAgIFN0YXJ0LFxyXG4gICAgVHVubmVsMSxcclxuICAgIGNlbnRyYWwxLFxyXG4gICAgc3RhdHVlMSxcclxuICAgIHN0YXR1ZTIsXHJcbiAgICBzdGF0dWUzLFxyXG4gICAgc3RhdHVlNFxyXG5dOyIsImltcG9ydCBTdG9uZSBmcm9tICcuL3N0b25lJztcclxuaW1wb3J0IFRvcmNoIGZyb20gJy4vdG9yY2gnO1xyXG5pbXBvcnQgQ3VwIGZyb20gJy4vY3VwJztcclxuaW1wb3J0IFN0YXR1ZTEgZnJvbSAnLi9zdGF0dWUxJztcclxuaW1wb3J0IHN0YXR1ZTIgZnJvbSAnLi9zdGF0dWUyJztcclxuaW1wb3J0IHN0YXR1ZTMgZnJvbSAnLi9zdGF0dWUzJztcclxuaW1wb3J0IHN0YXR1ZTQgZnJvbSAnLi9zdGF0dWU0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFtcclxuICAgIFN0b25lLFxyXG4gICAgVG9yY2gsXHJcbiAgICBDdXAsXHJcbiAgICBTdGF0dWUxLFxyXG4gICAgc3RhdHVlMixcclxuICAgIHN0YXR1ZTMsXHJcbiAgICBzdGF0dWU0XHJcbl0iLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSBcIi4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgSXRlbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwic3RvbmVcIilcclxuLndpdGhOYW1lKFwiYSBkdWxsIHN0b25lXCIpXHJcbi53aXRoRGVzY3JpcHRpb24oXCJUaGVyZSBpcyBub3RoaW5nIHJlbWFya2FibGUgYWJvdXQgdGhpcyByb3VnaCwgYmxhbmQgc3RvbmUuXCIpXHJcbi5pc1Rha2VhYmxlKHRydWUpXHJcbi5pc1VzYWJsZSh0cnVlKVxyXG4ud2l0aFRha2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBUaGUgJHt0aGlzLmlkfSBmZWVscyBoZWF2eSBpbiB5b3VyIGhhbmRzLmApO1xyXG59KVxyXG4ud2l0aERyb3BDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBJdCBib3VuY2VzIGJhY2sgYW5kIGZvcnRoIGEgbGl0dGxlLmApXHJcbn0pXHJcbi53aXRoVXNlQ2FsbGJhY2soYXN5bmMgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgY29udGV4dC5wcmludChgWW91IGNhbid0IHJlYWxseSBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCAke3RoaXMubmFtZX0geWV0YCk7XHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSBcIi4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgSXRlbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwidG9yY2hcIilcclxuLndpdGhOYW1lKFwiYSB0b3JjaFwiKVxyXG4ud2l0aERlc2NyaXB0aW9uKFwiQSBzdGFuZGFyZCB0b3JjaCB0aGF0IHByb3ZpZGVzIGxpZ2h0LlwiKVxyXG4uaXNVc2FibGUodHJ1ZSlcclxuLmlzVGFrZWFibGUodHJ1ZSlcclxuLndpdGhVc2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBZb3UgdHJ5IHRvIGxpZ2h0IHRoZSB0b3JjaCBidXQgZmFpbC5gKVxyXG59KVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IEl0ZW1CdWlsZGVyIGZyb20gXCIuLi8uLi9lbmdpbmUvYnVpbGRlcnMvaXRlbVwiO1xyXG5pbXBvcnQgSXRlbSBmcm9tIFwiLi4vLi4vZW5naW5lL2l0ZW1cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJdGVtQnVpbGRlcigpXHJcbi53aXRoSUQoXCJjdXBcIilcclxuLndpdGhOYW1lKFwiYSBjdXBcIilcclxuLndpdGhEZXNjcmlwdGlvbihcIkEgc3RhbmRhcmQgY29mZmVlIGN1cFwiKVxyXG4uaXNUYWtlYWJsZSh0cnVlKVxyXG4uaXNVc2FibGUoZmFsc2UpXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSAnLi4vLi4vZW5naW5lL2J1aWxkZXJzL2l0ZW0nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IEl0ZW1CdWlsZGVyKClcclxuLndpdGhJRChcInN0YXR1ZTFcIilcclxuLndpdGhOYW1lKFwiYSBodWdlIGFudCBzdGF0dWVcIilcclxuLndpdGhEZXNjcmlwdGlvbihcclxuICAgIGBCZWZvcmUgeW91IHN0YW5kcyBhIGJpZyBhbnQgc3RhdHVlLiBPbmUgb2YgaXRzIHNpeCBsZWdzIGlzIGV4dGVuZGVkIG91dHdhcmRzLCBhdHRhY2hlZCB0byBhIHJvdW5kIGRldmljZS5gXHJcbilcclxuLmlzVGFrZWFibGUoZmFsc2UpXHJcbi5pc1VzYWJsZSh0cnVlKVxyXG4ud2l0aFVzZUNhbGxiYWNrKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBZb3UgcHJlc3MgdGhlIGJ1dHRvbiBvbiB0aGUgcm91bmQgZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBzdGF0dWUncyBhcm0uYCk7XHJcbiAgICBsZXQgdmFsdWUgPSBjb250ZXh0LnN0YXRlLmdldChcInN0YXR1ZTEucHJlc3NlZFwiLCAwKTtcclxuICAgIHZhbHVlKys7XHJcbiAgICBjb250ZXh0LnN0YXRlLnNldChcInN0YXR1ZTEucHJlc3NlZFwiLCB2YWx1ZSk7XHJcbiAgICBpZiAodmFsdWUgID09IDMpIHtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3UgaGVhciBhIHNhdHRpc2Z5aW5nIGNsaWNrLmApO1xyXG4gICAgICAgIGNvbnRleHQuc3RhdGUuc2V0KFwic3RhdHVlcy51bmxvY2tlZFwiLCB0cnVlKTtcclxuICAgIH1cclxuICAgIGlmIChjb250ZXh0LnN0YXRlLmdldCgnc3RhdHVlMS5wcmVzc2VkJykgPiAyICYmIGNvbnRleHQuc3RhdGUuZ2V0KCdzdGF0dWUyLnByZXNzZWQnKSA+IDEpIHtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3UgaGVhciBhIGxvdyBydW1ibGUgc29tZXdoZXJlIGRlZXAgd2l0aGluIHRoZSBib3dlbHMgb2YgdGhlIHN0cnVjdHVyZS5gKTtcclxuICAgICAgICBjb250ZXh0LnN0YXRlLnNldChcInN0YXR1ZXMudW5sb2NrZWRcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSAnLi4vLi4vZW5naW5lL2J1aWxkZXJzL2l0ZW0nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IEl0ZW1CdWlsZGVyKClcclxuLndpdGhJRChcInN0YXR1ZTJcIilcclxuLndpdGhOYW1lKFwiYSBodWdlIGFudCBzdGF0dWVcIilcclxuLndpdGhEZXNjcmlwdGlvbihcclxuICAgIGBCZWZvcmUgeW91IHN0YW5kcyBhIGJpZyBhbnQgc3RhdHVlLiBUd28gb2YgaXRzIHNpeCBsZWdzIGlzIGV4dGVuZGVkIG91dHdhcmRzLCBhdHRhY2hlZCB0byBhIHJlY3Rhbmd1bGFyIGRldmljZS5gXHJcbilcclxuLmlzVGFrZWFibGUoZmFsc2UpXHJcbi5pc1VzYWJsZSh0cnVlKVxyXG4ud2l0aFVzZUNhbGxiYWNrKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBZb3UgcHJlc3MgdGhlIGJ1dHRvbiBvbiB0aGUgcmVjdGFuZ3VsYXIgZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBzdGF0dWUncyBhcm0uYCk7XHJcbiAgICBsZXQgdmFsdWUgPSBjb250ZXh0LnN0YXRlLmdldChcInN0YXR1ZTIucHJlc3NlZFwiLCAwKTtcclxuICAgIHZhbHVlKys7XHJcbiAgICBjb250ZXh0LnN0YXRlLnNldChcInN0YXR1ZTIucHJlc3NlZFwiLCB2YWx1ZSk7XHJcbiAgICBpZiAodmFsdWUgPT0gMikge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFlvdSBoZWFyIGEgc2F0dGlzZnlpbmcgY2xpY2suYCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29udGV4dC5zdGF0ZS5nZXQoJ3N0YXR1ZTEucHJlc3NlZCcpID4gMiAmJiBjb250ZXh0LnN0YXRlLmdldCgnc3RhdHVlMi5wcmVzc2VkJykgPiAxKSB7XHJcbiAgICAgICAgY29udGV4dC5wcmludChgWW91IGhlYXIgYSBsb3cgcnVtYmxlIHNvbWV3aGVyZSBkZWVwIHdpdGhpbiB0aGUgYm93ZWxzIG9mIHRoZSBzdHJ1Y3R1cmUuYCk7XHJcbiAgICAgICAgY29udGV4dC5zdGF0ZS5zZXQoXCJzdGF0dWVzLnVubG9ja2VkXCIsIHRydWUpO1xyXG4gICAgfVxyXG59KVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IEl0ZW1CdWlsZGVyIGZyb20gJy4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJdGVtQnVpbGRlcigpXHJcbi53aXRoSUQoXCJzdGF0dWUzXCIpXHJcbi53aXRoTmFtZShcImEgaHVnZSBhbnQgc3RhdHVlXCIpXHJcbi53aXRoRGVzY3JpcHRpb24oXHJcbiAgICBgQmVmb3JlIHlvdSBzdGFuZHMgYSBiaWcgYW50IHN0YXR1ZS4gVGhyZWUgb2YgaXRzIHNpeCBsZWdzIGFyZSBleHRlbmRlZCBvdXR3YXJkcywgYXR0YWNoZWQgdG8gYSByb3VuZCBzdG9uZSB0YWJsZXQuYFxyXG4pXHJcbi5pc1Rha2VhYmxlKGZhbHNlKVxyXG4uaXNVc2FibGUodHJ1ZSlcclxuLndpdGhVc2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbiAoY29udGV4dCkge1xyXG4gICAgY29udGV4dC5wcmludChgWW91IGV4YW1pbmUgdGhlIHN0b25lIHRhYmxldCBpbiB0aGUgc3RhdHVlJ3MgaGFuZHMuIFRoZXJlIGFwcGVhciB0byBiZSBzeW1ib2xzIG9uIGl0IHdoaWNoIHlvdSBjYW4gbWFrZSBvdXQuYCk7XHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBNZW93Q29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBZb3UgbWVvdy5gKTtcclxufSIsImltcG9ydCBHYW1lIGZyb20gJy4uL2VuZ2luZSc7XHJcbmltcG9ydCBSb29tcyBmcm9tICcuL3Jvb21zJztcclxuaW1wb3J0IEl0ZW1zIGZyb20gJy4vaXRlbXMnO1xyXG5pbXBvcnQgTWVvd0NvbW1hbmQgZnJvbSAnLi9jb21tYW5kcy9tZW93JztcclxuXHJcbmlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNhdmVcIikpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2F2ZS1nYW1lLWZvdW5kXCIpLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWZvcmUtcGxheVwiKS5oaWRkZW4gPSB0cnVlO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb2FkLXNhdmUtZ2FtZVwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2F2ZS1nYW1lLWZvdW5kXCIpLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwbGF5LWFyZWFcIikuaGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgc3RhcnRHYW1lKGZhbHNlKTtcclxuICAgIH0pXHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0YXJ0LW5ldy1nYW1lXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWdhbWUtZm91bmRcIikuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBsYXktYXJlYVwiKS5oaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICBzdGFydEdhbWUodHJ1ZSk7XHJcbiAgICB9KVxyXG59XHJcblxyXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZ2luXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZm9yZS1wbGF5XCIpLmhpZGRlbiA9IHRydWU7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBsYXktYXJlYVwiKS5oaWRkZW4gPSBmYWxzZTtcclxuICAgIHN0YXJ0R2FtZSh0cnVlKTtcclxufSlcclxuXHJcbmZ1bmN0aW9uIHN0YXJ0R2FtZShuZXdHYW1lKSB7XHJcbiAgICBjb25zdCBnYW1lID0gbmV3IEdhbWUobmV3R2FtZSk7XHJcblxyXG4gICAgZ2FtZS5pbml0KHtcclxuICAgICAgICByb29tczogUm9vbXMsXHJcbiAgICAgICAgY29tbWFuZHM6IFtcclxuICAgICAgICAgICAgW1tcIm1lb3dcIiwgXCJtZXdcIl0sIE1lb3dDb21tYW5kXVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaXRlbXM6IEl0ZW1zXHJcbiAgICB9KTtcclxufVxyXG4iXSwibmFtZXMiOlsiU3RhdGUiLCJjb25zdHJ1Y3RvciIsInRoaXMiLCJzdGF0ZXMiLCJNYXAiLCJnZXQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJoYXMiLCJzZXQiLCJ2YWx1ZSIsImNoYW5nZSIsImFtb3VudCIsInZhbCIsInNlcmlhbGl6ZSIsImVudHJpZXMiLCJlbnRyeW1hcCIsInN0YXRlIiwicHVzaCIsImRlc2VyaWFsaXplIiwiZGF0YSIsIlBsYXllciIsImludmVudG9yeSIsImN1cnJlbnRSb29tIiwiY29udGV4dCIsImFkZEl0ZW0iLCJpZCIsInJlbW92ZUl0ZW0iLCJmaWx0ZXIiLCJpdGVtIiwiZ2V0SW52ZW50b3J5IiwibWFwIiwiZ2V0SXRlbSIsIkJhc2VPdXRwdXQiLCJzcGVhayIsInRleHQiLCJzdG9wIiwic2V0T3B0aW9ucyIsIm9wdGlvbnMiLCJBcmlhT3V0cHV0Iiwic3VwZXIiLCJ0aW1lb3V0IiwiaW5pdCIsImNvbnRhaW5lciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInNwZWVjaERpc3BsYXkiLCJhcHBlbmQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIiwiY2xlYXJEaXNwbGF5Iiwibm9kZSIsImNyZWF0ZVRleHROb2RlIiwicGFyYSIsInNldFRpbWVvdXQiLCJiaW5kIiwiaW5uZXJIVE1MIiwiV2ViVFRTT3V0cHV0IiwicmF0ZSIsInN5bnRoIiwid2luZG93Iiwic3BlZWNoU3ludGhlc2lzIiwidXR0ZXJUaGlzIiwiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIiwiY2FuY2VsIiwiVFRTIiwib3V0cHV0IiwiY3JlYXRlT3V0cHV0IiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJSZXNvbmF0b3JBdWRpb0NvbnRleHQiLCJBdWRpb0NvbnRleHQiLCJnZXRDb250ZXh0IiwiY3JlYXRlR2FpbiIsImdldE91dHB1dERlc3RpbmF0aW9uIiwiZGVzdGluYXRpb24iLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJkZWNvZGVBdWRpb0RhdGEiLCJjcmVhdGVQYW5uZXIiLCJjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UiLCJlbGVtZW50IiwiRXZlbnRCdXMiLCJldmVudHMiLCJlbWl0IiwiZXYiLCJzdWJzY3JpYmVycyIsImZvckVhY2giLCJzdWJzY3JpYmVyIiwiRXZlbnRJdGVtIiwic3Vic2NyaWJlIiwidW5zdWJzY3JpYmUiLCJmbiIsImxlbmd0aCIsImRlbGV0ZSIsInVuc3Vic2NyaWJlQWxsIiwidmVjNCIsInZhbHVlcyIsIkZsb2F0MzJBcnJheSIsInVuZGVmaW5lZCIsInh5enciLCJ4IiwieSIsInoiLCJ3IiwieHkiLCJ4eXoiLCJyIiwiZyIsImIiLCJhIiwicmciLCJyZ2IiLCJyZ2JhIiwiYXQiLCJpbmRleCIsInJlc2V0IiwiY29weSIsImRlc3QiLCJuZWdhdGUiLCJlcXVhbHMiLCJ2ZWN0b3IiLCJ0aHJlc2hvbGQiLCJlcHNpbG9uIiwiTWF0aCIsImFicyIsInNxcnQiLCJzcXVhcmVkTGVuZ3RoIiwiYWRkIiwic3VidHJhY3QiLCJtdWx0aXBseSIsImRpdmlkZSIsInNjYWxlIiwibm9ybWFsaXplIiwibXVsdGlwbHlNYXQ0IiwibWF0cml4IiwibXVsdGlwbHlWZWM0Iiwic3RhdGljIiwidmVjdG9yMiIsInRpbWUiLCJ6ZXJvIiwib25lIiwibWF0NCIsImkiLCJhbGwiLCJyb3ciLCJjb2wiLCJkZXRlcm1pbmFudCIsImEwMCIsImEwMSIsImEwMiIsImEwMyIsImExMCIsImExMSIsImExMiIsImExMyIsImEyMCIsImEyMSIsImEyMiIsImEyMyIsImEzMCIsImEzMSIsImEzMiIsImEzMyIsInNldElkZW50aXR5IiwidHJhbnNwb3NlIiwidGVtcDAxIiwidGVtcDAyIiwidGVtcDAzIiwidGVtcDEyIiwidGVtcDEzIiwidGVtcDIzIiwiaW52ZXJzZSIsImRldDAwIiwiZGV0MDEiLCJkZXQwMiIsImRldDAzIiwiZGV0MDQiLCJkZXQwNSIsImRldDA2IiwiZGV0MDciLCJkZXQwOCIsImRldDA5IiwiZGV0MTAiLCJkZXQxMSIsImRldCIsImIwIiwiYjEiLCJiMiIsImIzIiwibXVsdGlwbHlWZWMzIiwidmVjMyIsInRvTWF0MyIsIm1hdDMiLCJ0b0ludmVyc2VNYXQzIiwiZGV0MjEiLCJ0cmFuc2xhdGUiLCJyb3RhdGUiLCJhbmdsZSIsImF4aXMiLCJzIiwic2luIiwiYyIsImNvcyIsInQiLCJiMDAiLCJiMDEiLCJiMDIiLCJiMTAiLCJiMTEiLCJiMTIiLCJiMjAiLCJiMjEiLCJiMjIiLCJsZWZ0IiwicmlnaHQiLCJib3R0b20iLCJ0b3AiLCJuZWFyIiwiZmFyIiwicmwiLCJ0YiIsImZvdiIsImFzcGVjdCIsInRhbiIsIlBJIiwiZnJ1c3R1bSIsInBvc2l0aW9uIiwidGFyZ2V0IiwidXAiLCJpZGVudGl0eSIsImRpZmZlcmVuY2UiLCJjcm9zcyIsImRvdCIsIm0xIiwibTIiLCJiMDMiLCJiMTMiLCJiMjMiLCJiMzAiLCJiMzEiLCJiMzIiLCJiMzMiLCJ2ZWMyIiwibXVsdGlwbHlNYXQyIiwibXVsdGlwbHlWZWMyIiwibXVsdGlwbHlNYXQzIiwieDIiLCJzcXVhcmVkRGlzdGFuY2UiLCJ5MiIsInRvTWF0NCIsInRvUXVhdCIsIm0wMCIsIm0wMSIsIm0wMiIsIm0xMCIsIm0xMSIsIm0xMiIsIm0yMCIsIm0yMSIsIm0yMiIsImZvdXJYU3F1YXJlZE1pbnVzMSIsImZvdXJZU3F1YXJlZE1pbnVzMSIsImZvdXJaU3F1YXJlZE1pbnVzMSIsImJpZ2dlc3RJbmRleCIsImZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSIsImJpZ2dlc3RWYWwiLCJtdWx0IiwicXVhdCIsInJvbGwiLCJhdGFuMiIsInBpdGNoIiwieWF3IiwiYXNpbiIsImNhbGN1bGF0ZVciLCJpbnZEb3QiLCJjb25qdWdhdGUiLCJvdGhlciIsInExeCIsInExeSIsInExeiIsInExdyIsInEyeCIsInEyeSIsInEyeiIsInEydyIsInF4IiwicXkiLCJxeiIsInF3IiwiaXgiLCJpeSIsIml6IiwiaXciLCJ6MiIsInh4IiwieHoiLCJ5eSIsInl6IiwienoiLCJ3eCIsInd5Iiwid3oiLCJxMSIsInEyIiwicTJhIiwiazAiLCJrMSIsIm9uZU92ZXJTaW4iLCJjb3NIYWxmVGhldGEiLCJoYWxmVGhldGEiLCJhY29zIiwic2luSGFsZlRoZXRhIiwicmF0aW9BIiwicmF0aW9CIiwidSIsInYiLCJkIiwiY2xhbXAiLCJyYWRpYW5zIiwibF9hbmdsZSIsImxfc2luIiwibF9jb3MiLCJtdWx0aXBseUJ5TWF0MyIsIm11bHRpcGx5QnlRdWF0IiwicXVhdGVybmlvbiIsInJvdGF0aW9uIiwiZm9yd2FyZCIsIlJlc29uYXRvclNjZW5lIiwic2NlbmUiLCJsaXN0ZW5lciIsImNyZWF0ZVNvdXJjZSIsInBhbm5pbmdNb2RlbCIsImRpc3RhbmNlTW9kZWwiLCJtYXhEaXN0YW5jZSIsInJlZkRpc3RhbmNlIiwiY29ubmVjdCIsImdldE91dHB1dCIsImdldElucHV0Iiwic2V0TGlzdGVuZXJQb3NpdGlvbiIsInNldFBvc2l0aW9uIiwic2V0TGlzdGVuZXJPcmllbnRhdGlvbiIsInJhd3VwIiwiZndkIiwic2V0T3JpZW50YXRpb24iLCJFZmZlY3RDaGFpbiIsImdyYXBoIiwiaW5wdXQiLCJlZmZlY3RzIiwiaW5wdXROb2RlIiwib3V0cHV0Tm9kZSIsInVwZGF0ZUNvbm5lY3Rpb25zIiwiYXBwbHlFZmZlY3QiLCJlZmZlY3QiLCJyZW1vdmVFZmZlY3QiLCJjdXJyRWZmZWN0IiwiZGlzY29ubmVjdCIsImN1cnJlbnQiLCJwcmV2aW91cyIsImNvbm5lY3RJbnB1dCIsImNvbm5lY3RPdXRwdXQiLCJBdWRpb0dyYXBoIiwic3dhcENoYW5uZWxzIiwiZWZmZWN0c0J1cyIsIndvcmxkQnVzIiwic2Vjb25kYXJ5QnVzIiwibWFzdGVyIiwiY2hhbm5lbFNwbGl0dGVyIiwiY3JlYXRlQ2hhbm5lbFNwbGl0dGVyIiwiY2hhbm5lbE1lcmdlciIsImNyZWF0ZUNoYW5uZWxNZXJnZXIiLCJjb25uZWN0VG9NYXN0ZXIiLCJjb25uZWN0VG9VSSIsIlNvdXJjZVR5cGUiLCJBdWRpb1NvdXJjZSIsImJ1ZmZlciIsInR5cGUiLCJXb3JsZFNvdXJjZSIsInBsYXliYWNrUmF0ZSIsInZvbHVtZSIsImdhaW4iLCJnZXRCdWZmZXIiLCJzZXRCdWZmZXIiLCJwbGF5T25Mb2FkIiwicGxheSIsIndoZW4iLCJvZmZzZXQiLCJkdXJhdGlvbiIsInBsYXlpbmciLCJjcmVhdGVDb25uZWN0aW9ucyIsInN0YXJ0IiwibG9vcCIsImxvb3BpbmciLCJzY2VuZU5vZGUiLCJhZGRFdmVudExpc3RlbmVyIiwic2V0UGxheWJhY2tSYXRlIiwiZ2V0UGxheWJhY2tSYXRlIiwic2V0Vm9sdW1lIiwiZ2V0Vm9sdW1lIiwiVUlTb3VyY2UiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGVzdHJveSIsImZhZGVPdXQiLCJzZXRWYWx1ZUF0VGltZSIsImN1cnJlbnRUaW1lIiwiZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSIsImZhZGVJbiIsIkRhdGFQb29sSXRlbSIsIm5hbWUiLCJkZWNvZGVkRGF0YSIsImdldERhdGEiLCJzZXREYXRhIiwiZ2V0RGVjb2RlZERhdGEiLCJzZXREZWNvZGVkRGF0YSIsImdldE5hbWUiLCJzZXROYW1lIiwiSFRUUExvYWRlciIsInBhdGgiLCJmZXRjaCIsImFycmF5QnVmZmVyIiwiRGF0YVBvb2wiLCJsb2FkZXIiLCJtYXhEYXRhIiwiZGVjb2RlZCIsIk9iamVjdCIsImtleXMiLCJjbGVhciIsIkNvbnZvbHZlciIsInBhcmFtcyIsImVmZmVjdFBhcmFtcyIsImVmZmVjdE5vZGUiLCJjb25zb2xlIiwibG9nIiwiY3JlYXRlQ29udm9sdmVyIiwiU3RyZWFtaW5nU291cmNlIiwiTWFzdGVyU291cmNlIiwiZXZlbnQiLCJjYW5QbGF5IiwicGxheU9uQXZhaWxhYmxlIiwicGF1c2UiLCJSZXNvbmF0b3IiLCJlbnZpcm9ubWVudEltcHVsc2UiLCJkYXRhUG9vbCIsImxvYWQiLCJsb2FkSW1tZWRpYXRlIiwic291cmNlIiwic3RyZWFtIiwiQXVkaW8iLCJjcm9zc09yaWdpbiIsInNldEVudmlyb25tZW50SW1wdWxzZSIsImZpbGUiLCJjbGVhckRhdGFQb29sIiwiU291bmQiLCJyZXMiLCJhbWJpZW5jZSIsIm11c2ljIiwiYW1iaWVuY2VWb2x1bWUiLCJtdXNpY1ZvbHVtZSIsInNmeFZvbHVtZSIsInByZXZpb3VzQW1iaWVuY2UiLCJwcmV2aW91c011c2ljIiwic291bmQiLCJhc3luYyIsInNldE11c2ljIiwic2V0SW1wdWxzZSIsInNldE11c2ljVm9sdW1lIiwic2V0QW1iaWVuY2VWb2x1bWUiLCJzZXRTRlhWb2x1bWUiLCJPdXRwdXQiLCJ0dHMiLCJoaXN0b3J5IiwiZ2V0RWxlbWVudEJ5SWQiLCJzYXkiLCJzdHJpbmciLCJzcGxpdCIsImxpbmUiLCJzZXRBbWJpZW5jZSIsIklucHV0IiwiY29tbWFuZEhhbmRsZXIiLCJvdXRwdXRIYW5kbGVyIiwiaGFuZGxlciIsImVjaG9JbnB1dCIsImlucHV0RmllbGQiLCJoaXN0b3J5Q3Vyc29yIiwic2V0RWNobyIsImFkZFRvSW5wdXRIaXN0b3J5IiwiZG9Db21tYW5kIiwic3RyIiwiZGVmYXVsdENvbW1hbmRzIiwiYXJncyIsImV4YW1pbmVSb29tIiwiaXRlbXMiLCJnZXRSb29tIiwicGxheWVyIiwiZ2V0SXRlbXMiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwib25Vc2UiLCJyb29tIiwidGFrZWFibGUiLCJwcmludCIsIm9uVGFrZSIsIm9uRHJvcCIsInNldElucHV0RWNobyIsInNhdmUiLCJwYXJzZUludCIsIml0ZW1EZXNjcmlwdGlvbiIsImRpcmVjdGlvbk1hcCIsIkNvbW1hbmRzIiwiY29tbWFuZHMiLCJlbmFibGVkIiwiYWRkRGVmYXVsdENvbW1hbmRzIiwiZGlyZWN0aW9uIiwibWF0Y2hEaXJlY3Rpb24iLCJnZXRFeGl0IiwibW92ZSIsImFkZENvbW1hbmQiLCJmdW5jIiwiQXJyYXkiLCJpc0FycmF5IiwiY29tbWFuZCIsImFkZENvbW1hbmRzIiwiZGlyIiwiU2VyaWFsaXphdGlvbiIsInNhdmVvYmoiLCJpdGVtTG9jYXRpb25zIiwic2VyaWFsaXplSXRlbUxvY2F0aW9ucyIsIml0ZW1TdGF0ZXMiLCJzZXJpYWxpemVJdGVtU3RhdGVzIiwidm9sdW1lcyIsInNmeCIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwibG9hZG9iaiIsInBhcnNlIiwiZGVzZXJpYWxpemVJdGVtTG9jYXRpb25zIiwiZGVzZXJpYWxpemVJdGVtU3RhdGVzIiwiZGVzZXJpYWxpemVQbGF5ZXIiLCJyb29tcyIsIm9iamVjdHMiLCJHYW1lIiwibmV3R2FtZSIsInZpc2l0ZWRSb29tcyIsImludGVydmFsIiwibGluZXMiLCJ3YWl0IiwiYWR2YW5jZVRpY2siLCJvblRpY2siLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJ0aXRsZSIsImZpcnN0RGVzY3JpcHRpb24iLCJleGFtaW5lSXRlbXMiLCJleGFtaW5lRXhpdHMiLCJleGl0cyIsImV4aXREZXNjcmlwdGlvbiIsImV4aXRLZXlzIiwiZXhpdCIsImZpbmQiLCJtcyIsInJvb21JRCIsIm5ld1Jvb20iLCJjYW5FeGl0IiwiY2FuRW50ZXIiLCJvbkV4aXQiLCJvbkVudGVyIiwiZW5hYmxlQ29tbWFuZElucHV0IiwiUm9vbSIsImVudGVyQ2FsbGJhY2siLCJleGl0Q2FsbGJhY2siLCJjYW5FbnRlckxvZ2ljIiwiY2FuRXhpdExvZ2ljIiwidGlja0NhbGxiYWNrIiwiaW1wdWxzZSIsImFkZEV4aXQiLCJhZGRFbnRlckNhbGxiYWNrIiwiY2FsbGJhY2siLCJhZGRFeGl0Q2FsbGJhY2siLCJhZGRFbnRlckxvZ2ljIiwiYWRkRXhpdExvZ2ljIiwiYWRkVGlja0NhbGxiYWNrIiwiUm9vbUJ1aWxkZXIiLCJ3aXRoSUQiLCJJRCIsIndpdGhUaXRsZSIsIndpdGhGaXJzdERlc2NyaXB0aW9uIiwid2l0aERlc2NyaXB0aW9uIiwid2l0aEV4aXQiLCJ3aXRoSXRlbSIsIml0ZW1JRCIsIndpdGhFbnRlckNhbGxiYWNrIiwid2l0aEV4aXRDYWxsYmFjayIsIndpdGhFbnRlckxvZ2ljIiwid2l0aEV4aXRMb2dpYyIsIndpdGhUaWNrIiwid2l0aE11c2ljIiwid2l0aEFtYmllbmNlIiwid2l0aEltcHVsc2UiLCJjcmVhdGUiLCJ0ZWxsIiwiSXRlbSIsInVzYWJsZSIsInVzZUNhbGxiYWNrIiwidGFrZUNhbGxiYWNrIiwiZHJvcENhbGxiYWNrIiwiYWRkVXNlQ2FsbGJhY2siLCJhZGRUYWtlQ2FsbGJhY2siLCJhZGREcm9wQ2FsbGJhY2siLCJzZXRTdGF0ZSIsImdldFN0YXRlIiwiSXRlbUJ1aWxkZXIiLCJ3aXRoTmFtZSIsIndpdGhUeXBlIiwid2l0aFN0YXRlIiwiaXNVc2FibGUiLCJpc1Rha2VhYmxlIiwid2l0aFVzZUNhbGxiYWNrIiwid2l0aFRha2VDYWxsYmFjayIsIndpdGhEcm9wQ2FsbGJhY2siLCJ3aXRoVGlja0NhbGxiYWNrIiwiY2VudHJhbDEiLCJzdGF0dWUxIiwic3RhdHVlMiIsInN0YXR1ZTMiLCJzdGF0dWU0IiwiTWVvd0NvbW1hbmQiLCJzdGFydEdhbWUiLCJoaWRkZW4iXSwic291cmNlUm9vdCI6IiJ9