lufi/themes/default/public/js/worker/upload.js

3 lines
353 KiB
JavaScript

var Nr=Object.create;var ht=Object.defineProperty;var Fr=Object.getOwnPropertyDescriptor;var Br=Object.getOwnPropertyNames;var jr=Object.getPrototypeOf,Wr=Object.prototype.hasOwnProperty;var Nt=e=>{throw TypeError(e)};var Jr=(e,t,r)=>t in e?ht(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var zr=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var dt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Hr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Br(t))!Wr.call(e,i)&&i!==r&&ht(e,i,{get:()=>t[i],enumerable:!(n=Fr(t,i))||n.enumerable});return e};var Oe=(e,t,r)=>(r=e!=null?Nr(jr(e)):{},Hr(t||!e||!e.__esModule?ht(r,"default",{value:e,enumerable:!0}):r,e));var g=(e,t,r)=>Jr(e,typeof t!="symbol"?t+"":t,r),pt=(e,t,r)=>t.has(e)||Nt("Cannot "+r);var d=(e,t,r)=>(pt(e,t,"read from private field"),r?r.call(e):t.get(e)),D=(e,t,r)=>t.has(e)?Nt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),w=(e,t,r,n)=>(pt(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),x=(e,t,r)=>(pt(e,t,"access private method"),r);var Ge=(e,t,r,n)=>({set _(i){w(e,t,i,r)},get _(){return d(e,t,n)}});var Ke=dt((ri,vt)=>{"use strict";var se=typeof Reflect=="object"?Reflect:null,zt=se&&typeof se.apply=="function"?se.apply:function(t,r,n){return Function.prototype.apply.call(t,r,n)},Ve;se&&typeof se.ownKeys=="function"?Ve=se.ownKeys:Object.getOwnPropertySymbols?Ve=function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Ve=function(t){return Object.getOwnPropertyNames(t)};function Qr(e){console&&console.warn&&console.warn(e)}var $t=Number.isNaN||function(t){return t!==t};function E(){E.init.call(this)}vt.exports=E;vt.exports.once=tn;E.EventEmitter=E;E.prototype._events=void 0;E.prototype._eventsCount=0;E.prototype._maxListeners=void 0;var Ht=10;function Xe(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(E,"defaultMaxListeners",{enumerable:!0,get:function(){return Ht},set:function(e){if(typeof e!="number"||e<0||$t(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");Ht=e}});E.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};E.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||$t(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this};function qt(e){return e._maxListeners===void 0?E.defaultMaxListeners:e._maxListeners}E.prototype.getMaxListeners=function(){return qt(this)};E.prototype.emit=function(t){for(var r=[],n=1;n<arguments.length;n++)r.push(arguments[n]);var i=t==="error",o=this._events;if(o!==void 0)i=i&&o.error===void 0;else if(!i)return!1;if(i){var s;if(r.length>0&&(s=r[0]),s instanceof Error)throw s;var c=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var u=o[t];if(u===void 0)return!1;if(typeof u=="function")zt(u,this,r);else for(var f=u.length,l=Qt(u,f),n=0;n<f;++n)zt(l[n],this,r);return!0};function Gt(e,t,r,n){var i,o,s;if(Xe(r),o=e._events,o===void 0?(o=e._events=Object.create(null),e._eventsCount=0):(o.newListener!==void 0&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),s=o[t]),s===void 0)s=o[t]=r,++e._eventsCount;else if(typeof s=="function"?s=o[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),i=qt(e),i>0&&s.length>i&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,Qr(c)}return e}E.prototype.addListener=function(t,r){return Gt(this,t,r,!1)};E.prototype.on=E.prototype.addListener;E.prototype.prependListener=function(t,r){return Gt(this,t,r,!0)};function Zr(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Vt(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=Zr.bind(n);return i.listener=r,n.wrapFn=i,i}E.prototype.once=function(t,r){return Xe(r),this.on(t,Vt(this,t,r)),this};E.prototype.prependOnceListener=function(t,r){return Xe(r),this.prependListener(t,Vt(this,t,r)),this};E.prototype.removeListener=function(t,r){var n,i,o,s,c;if(Xe(r),i=this._events,i===void 0)return this;if(n=i[t],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,n.listener||r));else if(typeof n!="function"){for(o=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){c=n[s].listener,o=s;break}if(o<0)return this;o===0?n.shift():Yr(n,o),n.length===1&&(i[t]=n[0]),i.removeListener!==void 0&&this.emit("removeListener",t,c||r)}return this};E.prototype.off=E.prototype.removeListener;E.prototype.removeAllListeners=function(t){var r,n,i;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[t]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[t]),this;if(arguments.length===0){var o=Object.keys(n),s;for(i=0;i<o.length;++i)s=o[i],s!=="removeListener"&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(r=n[t],typeof r=="function")this.removeListener(t,r);else if(r!==void 0)for(i=r.length-1;i>=0;i--)this.removeListener(t,r[i]);return this};function Xt(e,t,r){var n=e._events;if(n===void 0)return[];var i=n[t];return i===void 0?[]:typeof i=="function"?r?[i.listener||i]:[i]:r?en(i):Qt(i,i.length)}E.prototype.listeners=function(t){return Xt(this,t,!0)};E.prototype.rawListeners=function(t){return Xt(this,t,!1)};E.listenerCount=function(e,t){return typeof e.listenerCount=="function"?e.listenerCount(t):Kt.call(e,t)};E.prototype.listenerCount=Kt;function Kt(e){var t=this._events;if(t!==void 0){var r=t[e];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}E.prototype.eventNames=function(){return this._eventsCount>0?Ve(this._events):[]};function Qt(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}function Yr(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}function en(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}function tn(e,t){return new Promise(function(r,n){function i(s){e.removeListener(t,o),n(s)}function o(){typeof e.removeListener=="function"&&e.removeListener("error",i),r([].slice.call(arguments))}Zt(e,t,o,{once:!0}),t!=="error"&&rn(e,i,{once:!0})})}function rn(e,t,r){typeof e.on=="function"&&Zt(e,"error",t,r)}function Zt(e,t,r,n){if(typeof e.on=="function")n.once?e.once(t,r):e.on(t,r);else if(typeof e.addEventListener=="function")e.addEventListener(t,function i(o){n.once&&e.removeEventListener(t,i),r(o)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e)}});var sr=dt((vi,ce)=>{"use strict";var a={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(e){this.toString=function(){return"CORRUPT: "+this.message},this.message=e},invalid:function(e){this.toString=function(){return"INVALID: "+this.message},this.message=e},bug:function(e){this.toString=function(){return"BUG: "+this.message},this.message=e},notReady:function(e){this.toString=function(){return"NOT READY: "+this.message},this.message=e}}};a.cipher.aes=function(e){this.w[0][0][0]||this.C();var t,r,n,i,o=this.w[0][4],s=this.w[1];t=e.length;var c=1;if(t!==4&&t!==6&&t!==8)throw new a.exception.invalid("invalid aes key size");for(this.b=[n=e.slice(0),i=[]],e=t;e<4*t+28;e++)r=n[e-1],(e%t===0||t===8&&e%t===4)&&(r=o[r>>>24]<<24^o[r>>16&255]<<16^o[r>>8&255]<<8^o[r&255],e%t===0&&(r=r<<8^r>>>24^c<<24,c=c<<1^283*(c>>7))),n[e]=n[e-t]^r;for(t=0;e;t++,e--)r=n[t&3?e:e-4],i[t]=4>=e||4>t?r:s[0][o[r>>>24]]^s[1][o[r>>16&255]]^s[2][o[r>>8&255]]^s[3][o[r&255]]};a.cipher.aes.prototype={encrypt:function(e){return nr(this,e,0)},decrypt:function(e){return nr(this,e,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var e=this.w[0],t=this.w[1],r=e[4],n=t[4],i,o,s,c=[],u=[],f,l,h,m;for(i=0;256>i;i++)u[(c[i]=i<<1^283*(i>>7))^i]=i;for(o=s=0;!r[o];o^=f||1,s=u[s]||1)for(h=s^s<<1^s<<2^s<<3^s<<4,h=h>>8^h&255^99,r[o]=h,n[h]=o,l=c[i=c[f=c[o]]],m=16843009*l^65537*i^257*f^16843008*o,l=257*c[h]^16843008*h,i=0;4>i;i++)e[i][o]=l=l<<24^l>>>8,t[i][h]=m=m<<24^m>>>8;for(i=0;5>i;i++)e[i]=e[i].slice(0),t[i]=t[i].slice(0)}};function nr(e,t,r){if(t.length!==4)throw new a.exception.invalid("invalid aes block size");var n=e.b[r],i=t[0]^n[0],o=t[r?3:1]^n[1],s=t[2]^n[2];t=t[r?1:3]^n[3];var c,u,f,l=n.length/4-2,h,m=4,p=[0,0,0,0];c=e.w[r],e=c[0];var b=c[1],N=c[2],J=c[3],Q=c[4];for(h=0;h<l;h++)c=e[i>>>24]^b[o>>16&255]^N[s>>8&255]^J[t&255]^n[m],u=e[o>>>24]^b[s>>16&255]^N[t>>8&255]^J[i&255]^n[m+1],f=e[s>>>24]^b[t>>16&255]^N[i>>8&255]^J[o&255]^n[m+2],t=e[t>>>24]^b[i>>16&255]^N[o>>8&255]^J[s&255]^n[m+3],m+=4,i=c,o=u,s=f;for(h=0;4>h;h++)p[r?3&-h:h]=Q[i>>>24]<<24^Q[o>>16&255]<<16^Q[s>>8&255]<<8^Q[t&255]^n[m++],c=i,i=o,o=s,s=t,t=c;return p}a.bitArray={bitSlice:function(e,t,r){return e=a.bitArray.Y(e.slice(t/32),32-(t&31)).slice(1),r===void 0?e:a.bitArray.clamp(e,r-t)},extract:function(e,t,r){var n=Math.floor(-t-r&31);return((t+r-1^t)&-32?e[t/32|0]<<32-n^e[t/32+1|0]>>>n:e[t/32|0]>>>n)&(1<<r)-1},concat:function(e,t){if(e.length===0||t.length===0)return e.concat(t);var r=e[e.length-1],n=a.bitArray.getPartial(r);return n===32?e.concat(t):a.bitArray.Y(t,n,r|0,e.slice(0,e.length-1))},bitLength:function(e){var t=e.length;return t===0?0:32*(t-1)+a.bitArray.getPartial(e[t-1])},clamp:function(e,t){if(32*e.length<t)return e;e=e.slice(0,Math.ceil(t/32));var r=e.length;return t=t&31,0<r&&t&&(e[r-1]=a.bitArray.partial(t,e[r-1]&2147483648>>t-1,1)),e},partial:function(e,t,r){return e===32?t:(r?t|0:t<<32-e)+1099511627776*e},getPartial:function(e){return Math.round(e/1099511627776)||32},equal:function(e,t){if(a.bitArray.bitLength(e)!==a.bitArray.bitLength(t))return!1;var r=0,n;for(n=0;n<e.length;n++)r|=e[n]^t[n];return r===0},Y:function(e,t,r,n){var i;for(i=0,n===void 0&&(n=[]);32<=t;t-=32)n.push(r),r=0;if(t===0)return n.concat(e);for(i=0;i<e.length;i++)n.push(r|e[i]>>>t),r=e[i]<<32-t;return i=e.length?e[e.length-1]:0,e=a.bitArray.getPartial(i),n.push(a.bitArray.partial(t+e&31,32<t+e?r:n.pop(),1)),n},P:function(e,t){return[e[0]^t[0],e[1]^t[1],e[2]^t[2],e[3]^t[3]]},byteswapM:function(e){var t,r;for(t=0;t<e.length;++t)r=e[t],e[t]=r>>>24|r>>>8&65280|(r&65280)<<8|r<<24;return e}};a.codec.utf8String={fromBits:function(e){var t="",r=a.bitArray.bitLength(e),n,i;for(n=0;n<r/8;n++)!(n&3)&&(i=e[n/4]),t+=String.fromCharCode(i>>>8>>>8>>>8),i<<=8;return decodeURIComponent(escape(t))},toBits:function(e){e=unescape(encodeURIComponent(e));var t=[],r,n=0;for(r=0;r<e.length;r++)n=n<<8|e.charCodeAt(r),(r&3)===3&&(t.push(n),n=0);return r&3&&t.push(a.bitArray.partial(8*(r&3),n)),t}};a.codec.hex={fromBits:function(e){var t="",r;for(r=0;r<e.length;r++)t+=((e[r]|0)+0xf00000000000).toString(16).substr(4);return t.substr(0,a.bitArray.bitLength(e)/4)},toBits:function(e){var t,r=[],n;for(e=e.replace(/\s|0x/g,""),n=e.length,e=e+"00000000",t=0;t<e.length;t+=8)r.push(parseInt(e.substr(t,8),16)^0);return a.bitArray.clamp(r,4*n)}};a.codec.base64={S:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",fromBits:function(e,t,r){var n="",i=0,o=a.codec.base64.S,s=0,c=a.bitArray.bitLength(e);for(r&&(o=o.substr(0,62)+"-_"),r=0;6*n.length<c;)n+=o.charAt((s^e[r]>>>i)>>>26),6>i?(s=e[r]<<6-i,i+=26,r++):(s<<=6,i-=6);for(;n.length&3&&!t;)n+="=";return n},toBits:function(e,t){e=e.replace(/\s|=/g,"");var r=[],n,i=0,o=a.codec.base64.S,s=0,c;for(t&&(o=o.substr(0,62)+"-_"),n=0;n<e.length;n++){if(c=o.indexOf(e.charAt(n)),0>c)throw new a.exception.invalid("this isn't base64!");26<i?(i-=26,r.push(s^c>>>i),s=c<<32-i):(i+=6,s^=c<<32-i)}return i&56&&r.push(a.bitArray.partial(i&56,s,1)),r}};a.codec.base64url={fromBits:function(e){return a.codec.base64.fromBits(e,1,1)},toBits:function(e){return a.codec.base64.toBits(e,1)}};a.hash.sha256=function(e){this.b[0]||this.C(),e?(this.g=e.g.slice(0),this.f=e.f.slice(0),this.c=e.c):this.reset()};a.hash.sha256.hash=function(e){return new a.hash.sha256().update(e).finalize()};a.hash.sha256.prototype={blockSize:512,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(e){typeof e=="string"&&(e=a.codec.utf8String.toBits(e));var t,r=this.f=a.bitArray.concat(this.f,e);if(t=this.c,e=this.c=t+a.bitArray.bitLength(e),9007199254740991<e)throw new a.exception.invalid("Cannot hash more than 2^53 - 1 bits");if(typeof Uint32Array<"u"){var n=new Uint32Array(r),i=0;for(t=512+t-(512+t&511);t<=e;t+=512)this.l(n.subarray(16*i,16*(i+1))),i+=1;r.splice(0,16*i)}else for(t=512+t-(512+t&511);t<=e;t+=512)this.l(r.splice(0,16));return this},finalize:function(){var e,r=this.f,t=this.g,r=a.bitArray.concat(r,[a.bitArray.partial(1,1)]);for(e=r.length+2;e&15;e++)r.push(0);for(r.push(Math.floor(this.c/4294967296)),r.push(this.c|0);r.length;)this.l(r.splice(0,16));return this.reset(),t},o:[],b:[],C:function(){function e(o){return 4294967296*(o-Math.floor(o))|0}for(var t=0,r=2,n,i;64>t;r++){for(i=!0,n=2;n*n<=r;n++)if(r%n===0){i=!1;break}i&&(8>t&&(this.o[t]=e(Math.pow(r,.5))),this.b[t]=e(Math.pow(r,1/3)),t++)}},l:function(e){var t,r,n,i=this.g,o=this.b,s=i[0],c=i[1],u=i[2],f=i[3],l=i[4],h=i[5],m=i[6],p=i[7];for(t=0;64>t;t++)16>t?r=e[t]:(r=e[t+1&15],n=e[t+14&15],r=e[t&15]=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+e[t&15]+e[t+9&15]|0),r=r+p+(l>>>6^l>>>11^l>>>25^l<<26^l<<21^l<<7)+(m^l&(h^m))+o[t],p=m,m=h,h=l,l=f+r|0,f=u,u=c,c=s,s=r+(c&u^f&(c^u))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;i[0]=i[0]+s|0,i[1]=i[1]+c|0,i[2]=i[2]+u|0,i[3]=i[3]+f|0,i[4]=i[4]+l|0,i[5]=i[5]+h|0,i[6]=i[6]+m|0,i[7]=i[7]+p|0}};a.hash.sha512=function(e){this.b[0]||this.C(),e?(this.g=e.g.slice(0),this.f=e.f.slice(0),this.c=e.c):this.reset()};a.hash.sha512.hash=function(e){return new a.hash.sha512().update(e).finalize()};a.hash.sha512.prototype={blockSize:1024,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(e){typeof e=="string"&&(e=a.codec.utf8String.toBits(e));var t,r=this.f=a.bitArray.concat(this.f,e);if(t=this.c,e=this.c=t+a.bitArray.bitLength(e),9007199254740991<e)throw new a.exception.invalid("Cannot hash more than 2^53 - 1 bits");if(typeof Uint32Array<"u"){var n=new Uint32Array(r),i=0;for(t=1024+t-(1024+t&1023);t<=e;t+=1024)this.l(n.subarray(32*i,32*(i+1))),i+=1;r.splice(0,32*i)}else for(t=1024+t-(1024+t&1023);t<=e;t+=1024)this.l(r.splice(0,32));return this},finalize:function(){var e,r=this.f,t=this.g,r=a.bitArray.concat(r,[a.bitArray.partial(1,1)]);for(e=r.length+4;e&31;e++)r.push(0);for(r.push(0),r.push(0),r.push(Math.floor(this.c/4294967296)),r.push(this.c|0);r.length;)this.l(r.splice(0,32));return this.reset(),t},o:[],ia:[12372232,13281083,9762859,1914609,15106769,4090911,4308331,8266105],b:[],ka:[2666018,15689165,5061423,9034684,4764984,380953,1658779,7176472,197186,7368638,14987916,16757986,8096111,1480369,13046325,6891156,15813330,5187043,9229749,11312229,2818677,10937475,4324308,1135541,6741931,11809296,16458047,15666916,11046850,698149,229999,945776,13774844,2541862,12856045,9810911,11494366,7844520,15576806,8533307,15795044,4337665,16291729,5553712,15684120,6662416,7413802,12308920,13816008,4303699,9366425,10176680,13195875,4295371,6546291,11712675,15708924,1519456,15772530,6568428,6495784,8568297,13007125,7492395,2515356,12632583,14740254,7262584,1535930,13146278,16321966,1853211,294276,13051027,13221564,1051980,4080310,6651434,14088940,4675607],C:function(){function e(s){return 4294967296*(s-Math.floor(s))|0}function t(s){return 1099511627776*(s-Math.floor(s))&255}for(var r=0,n=2,i,o;80>r;n++){for(o=!0,i=2;i*i<=n;i++)if(n%i===0){o=!1;break}o&&(8>r&&(this.o[2*r]=e(Math.pow(n,.5)),this.o[2*r+1]=t(Math.pow(n,.5))<<24|this.ia[r]),this.b[2*r]=e(Math.pow(n,1/3)),this.b[2*r+1]=t(Math.pow(n,1/3))<<24|this.ka[r],r++)}},l:function(e){var t,r,n=this.g,i=this.b,o=n[0],s=n[1],c=n[2],u=n[3],f=n[4],l=n[5],h=n[6],m=n[7],p=n[8],b=n[9],N=n[10],J=n[11],Q=n[12],ze=n[13],It=n[14],He=n[15],S;if(typeof Uint32Array<"u"){S=Array(160);for(var _=0;32>_;_++)S[_]=e[_]}else S=e;var _=o,I=s,ye=c,ne=u,ve=f,ie=l,ct=h,Ee=m,z=p,U=b,$e=N,ge=J,qe=Q,we=ze,ut=It,Ae=He;for(e=0;80>e;e++){if(16>e)t=S[2*e],r=S[2*e+1];else{r=S[2*(e-15)];var A=S[2*(e-15)+1];t=(A<<31|r>>>1)^(A<<24|r>>>8)^r>>>7;var H=(r<<31|A>>>1)^(r<<24|A>>>8)^(r<<25|A>>>7);r=S[2*(e-2)];var q=S[2*(e-2)+1],A=(q<<13|r>>>19)^(r<<3|q>>>29)^r>>>6,q=(r<<13|q>>>19)^(q<<3|r>>>29)^(r<<26|q>>>6),ft=S[2*(e-7)],lt=S[2*(e-16)],Le=S[2*(e-16)+1];r=H+S[2*(e-7)+1],t=t+ft+(r>>>0<H>>>0?1:0),r+=q,t+=A+(r>>>0<q>>>0?1:0),r+=Le,t+=lt+(r>>>0<Le>>>0?1:0)}S[2*e]=t|=0,S[2*e+1]=r|=0;var ft=z&$e^~z&qe,Ut=U&ge^~U&we,q=_&ye^_&ve^ye&ve,Ur=I&ne^I&ie^ne&ie,lt=(I<<4|_>>>28)^(_<<30|I>>>2)^(_<<25|I>>>7),Le=(_<<4|I>>>28)^(I<<30|_>>>2)^(I<<25|_>>>7),Mr=i[2*e],Mt=i[2*e+1],A=Ae+((z<<18|U>>>14)^(z<<14|U>>>18)^(U<<23|z>>>9)),H=ut+((U<<18|z>>>14)^(U<<14|z>>>18)^(z<<23|U>>>9))+(A>>>0<Ae>>>0?1:0),A=A+Ut,H=H+(ft+(A>>>0<Ut>>>0?1:0)),A=A+Mt,H=H+(Mr+(A>>>0<Mt>>>0?1:0)),A=A+r|0,H=H+(t+(A>>>0<r>>>0?1:0));r=Le+Ur,t=lt+q+(r>>>0<Le>>>0?1:0),ut=qe,Ae=we,qe=$e,we=ge,$e=z,ge=U,U=Ee+A|0,z=ct+H+(U>>>0<Ee>>>0?1:0)|0,ct=ve,Ee=ie,ve=ye,ie=ne,ye=_,ne=I,I=A+r|0,_=H+t+(I>>>0<A>>>0?1:0)|0}s=n[1]=s+I|0,n[0]=o+_+(s>>>0<I>>>0?1:0)|0,u=n[3]=u+ne|0,n[2]=c+ye+(u>>>0<ne>>>0?1:0)|0,l=n[5]=l+ie|0,n[4]=f+ve+(l>>>0<ie>>>0?1:0)|0,m=n[7]=m+Ee|0,n[6]=h+ct+(m>>>0<Ee>>>0?1:0)|0,b=n[9]=b+U|0,n[8]=p+z+(b>>>0<U>>>0?1:0)|0,J=n[11]=J+ge|0,n[10]=N+$e+(J>>>0<ge>>>0?1:0)|0,ze=n[13]=ze+we|0,n[12]=Q+qe+(ze>>>0<we>>>0?1:0)|0,He=n[15]=He+Ae|0,n[14]=It+ut+(He>>>0<Ae>>>0?1:0)|0}};a.mode.ccm={name:"ccm",F:[],listenProgress:function(e){a.mode.ccm.F.push(e)},unListenProgress:function(e){e=a.mode.ccm.F.indexOf(e),-1<e&&a.mode.ccm.F.splice(e,1)},da:function(e){var t=a.mode.ccm.F.slice(),r;for(r=0;r<t.length;r+=1)t[r](e)},encrypt:function(e,t,r,n,i){var o,s=t.slice(0),c=a.bitArray,u=c.bitLength(r)/8,f=c.bitLength(s)/8;if(i=i||64,n=n||[],7>u)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(o=2;4>o&&f>>>8*o;o++);return o<15-u&&(o=15-u),r=c.clamp(r,8*(15-o)),t=a.mode.ccm.U(e,t,r,n,i,o),s=a.mode.ccm.V(e,s,r,t,i,o),c.concat(s.data,s.tag)},decrypt:function(e,t,r,n,i){i=i||64,n=n||[];var o=a.bitArray,s=o.bitLength(r)/8,f=o.bitLength(t),c=o.clamp(t,f-i),u=o.bitSlice(t,f-i),f=(f-i)/8;if(7>s)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(t=2;4>t&&f>>>8*t;t++);if(t<15-s&&(t=15-s),r=o.clamp(r,8*(15-t)),c=a.mode.ccm.V(e,c,r,u,i,t),e=a.mode.ccm.U(e,c.data,r,n,i,t),!o.equal(c.tag,e))throw new a.exception.corrupt("ccm: tag doesn't match");return c.data},ma:function(e,t,r,n,i,o){var s=[],c=a.bitArray,u=c.P;if(n=[c.partial(8,(t.length?64:0)|n-2<<2|o-1)],n=c.concat(n,r),n[3]|=i,n=e.encrypt(n),t.length)for(r=c.bitLength(t)/8,65279>=r?s=[c.partial(16,r)]:4294967295>=r&&(s=c.concat([c.partial(16,65534)],[r])),s=c.concat(s,t),t=0;t<s.length;t+=4)n=e.encrypt(u(n,s.slice(t,t+4).concat([0,0,0])));return n},U:function(e,t,r,n,i,o){var s=a.bitArray,c=s.P;if(i/=8,i%2||4>i||16<i)throw new a.exception.invalid("ccm: invalid tag length");if(4294967295<n.length||4294967295<t.length)throw new a.exception.bug("ccm: can't deal with 4GiB or more data");for(r=a.mode.ccm.ma(e,n,r,i,s.bitLength(t)/8,o),n=0;n<t.length;n+=4)r=e.encrypt(c(r,t.slice(n,n+4).concat([0,0,0])));return s.clamp(r,8*i)},V:function(e,t,r,n,i,o){var s,c=a.bitArray;s=c.P;var u=t.length,f=c.bitLength(t),l=u/50,h=l;if(r=c.concat([c.partial(8,o-1)],r).concat([0,0,0]).slice(0,4),n=c.bitSlice(s(n,e.encrypt(r)),0,i),!u)return{tag:n,data:[]};for(s=0;s<u;s+=4)s>l&&(a.mode.ccm.da(s/u),l+=h),r[3]++,i=e.encrypt(r),t[s]^=i[0],t[s+1]^=i[1],t[s+2]^=i[2],t[s+3]^=i[3];return{tag:n,data:c.clamp(t,f)}}};a.misc.hmac=function(e,t){this.W=t=t||a.hash.sha256;var r=[[],[]],n,i=t.prototype.blockSize/32;for(this.B=[new t,new t],e.length>i&&(e=t.hash(e)),n=0;n<i;n++)r[0][n]=e[n]^909522486,r[1][n]=e[n]^1549556828;this.B[0].update(r[0]),this.B[1].update(r[1]),this.O=new t(this.B[0])};a.misc.hmac.prototype.encrypt=a.misc.hmac.prototype.mac=function(e){if(this.Z)throw new a.exception.invalid("encrypt on already updated hmac called!");return this.update(e),this.digest(e)};a.misc.hmac.prototype.reset=function(){this.O=new this.W(this.B[0]),this.Z=!1};a.misc.hmac.prototype.update=function(e){this.Z=!0,this.O.update(e)};a.misc.hmac.prototype.digest=function(){var e=this.O.finalize(),e=new this.W(this.B[1]).update(e).finalize();return this.reset(),e};a.misc.pbkdf2=function(e,t,r,n,i){if(r=r||1e4,0>n||0>r)throw new a.exception.invalid("invalid params to pbkdf2");typeof e=="string"&&(e=a.codec.utf8String.toBits(e)),typeof t=="string"&&(t=a.codec.utf8String.toBits(t)),i=i||a.misc.hmac,e=new i(e);var o,s,c,u,f=[],l=a.bitArray;for(u=1;32*f.length<(n||1);u++){for(i=o=e.encrypt(l.concat(t,[u])),s=1;s<r;s++)for(o=e.encrypt(o),c=0;c<o.length;c++)i[c]^=o[c];f=f.concat(i)}return n&&(f=l.clamp(f,n)),f};a.prng=function(e){this.h=[new a.hash.sha256],this.s=[0],this.N=0,this.G={},this.M=0,this.T={},this.X=this.i=this.u=this.fa=0,this.b=[0,0,0,0,0,0,0,0],this.m=[0,0,0,0],this.K=void 0,this.L=e,this.D=!1,this.J={progress:{},seeded:{}},this.A=this.ea=0,this.H=1,this.I=2,this.aa=65536,this.R=[0,48,64,96,128,192,256,384,512,768,1024],this.ba=3e4,this.$=80};a.prng.prototype={randomWords:function(e,t){var r=[],n;n=this.isReady(t);var i;if(n===this.A)throw new a.exception.notReady("generator isn't seeded");if(n&this.I){n=!(n&this.H),i=[];var o=0,s;for(this.X=i[0]=new Date().valueOf()+this.ba,s=0;16>s;s++)i.push(4294967296*Math.random()|0);for(s=0;s<this.h.length&&(i=i.concat(this.h[s].finalize()),o+=this.s[s],this.s[s]=0,n||!(this.N&1<<s));s++);for(this.N>=1<<this.h.length&&(this.h.push(new a.hash.sha256),this.s.push(0)),this.i-=o,o>this.u&&(this.u=o),this.N++,this.b=a.hash.sha256.hash(this.b.concat(i)),this.K=new a.cipher.aes(this.b),n=0;4>n&&(this.m[n]=this.m[n]+1|0,!this.m[n]);n++);}for(n=0;n<e;n+=4)(n+1)%this.aa===0&&or(this),i=wt(this),r.push(i[0],i[1],i[2],i[3]);return or(this),r.slice(0,e)},setDefaultParanoia:function(e,t){if(e===0&&t!=="Setting paranoia=0 will ruin your security; use it only for testing")throw new a.exception.invalid("Setting paranoia=0 will ruin your security; use it only for testing");this.L=e},addEntropy:function(e,t,r){r=r||"user";var n,i,o=new Date().valueOf(),s=this.G[r],c=this.isReady(),u=0;switch(n=this.T[r],n===void 0&&(n=this.T[r]=this.fa++),s===void 0&&(s=this.G[r]=0),this.G[r]=(this.G[r]+1)%this.h.length,typeof e){case"number":t===void 0&&(t=1),this.h[s].update([n,this.M++,1,t,o,1,e|0]);break;case"object":if(r=Object.prototype.toString.call(e),r==="[object Uint32Array]"){for(i=[],r=0;r<e.length;r++)i.push(e[r]);e=i}else for(r!=="[object Array]"&&(u=1),r=0;r<e.length&&!u;r++)typeof e[r]!="number"&&(u=1);if(!u){if(t===void 0)for(r=t=0;r<e.length;r++)for(i=e[r];0<i;)t++,i=i>>>1;this.h[s].update([n,this.M++,2,t,o,e.length].concat(e))}break;case"string":t===void 0&&(t=e.length),this.h[s].update([n,this.M++,3,t,o,e.length]),this.h[s].update(e);break;default:u=1}if(u)throw new a.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=t,this.i+=t,c===this.A&&(this.isReady()!==this.A&&ir("seeded",Math.max(this.u,this.i)),ir("progress",this.getProgress()))},isReady:function(e){return e=this.R[e!==void 0?e:this.L],this.u&&this.u>=e?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=e?this.I|this.A:this.A},getProgress:function(e){return e=this.R[e||this.L],this.u>=e||this.i>e?1:this.i/e},startCollectors:function(){if(!this.D){if(this.a={loadTimeCollector:Ce(this,this.la),mouseCollector:Ce(this,this.na),keyboardCollector:Ce(this,this.ja),accelerometerCollector:Ce(this,this.ca),touchCollector:Ce(this,this.pa)},window.addEventListener)window.addEventListener("load",this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new a.exception.bug("can't attach event");this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(e,t){this.J[e][this.ea++]=t},removeEventListener:function(e,t){var r,n,i=this.J[e],o=[];for(n in i)i.hasOwnProperty(n)&&i[n]===t&&o.push(n);for(r=0;r<o.length;r++)n=o[r],delete i[n]},ja:function(){_e(this,1)},na:function(e){var t,r;try{t=e.x||e.clientX||e.offsetX||0,r=e.y||e.clientY||e.offsetY||0}catch{r=t=0}t!=0&&r!=0&&this.addEntropy([t,r],2,"mouse"),_e(this,0)},pa:function(e){e=e.touches[0]||e.changedTouches[0],this.addEntropy([e.pageX||e.clientX,e.pageY||e.clientY],1,"touch"),_e(this,0)},la:function(){_e(this,2)},ca:function(e){if(e=e.accelerationIncludingGravity.x||e.accelerationIncludingGravity.y||e.accelerationIncludingGravity.z,window.orientation){var t=window.orientation;typeof t=="number"&&this.addEntropy(t,1,"accelerometer")}e&&this.addEntropy(e,2,"accelerometer"),_e(this,0)}};function ir(e,t){var r,n=a.random.J[e],i=[];for(r in n)n.hasOwnProperty(r)&&i.push(n[r]);for(r=0;r<i.length;r++)i[r](t)}function _e(e,t){typeof window<"u"&&window.performance&&typeof window.performance.now=="function"?e.addEntropy(window.performance.now(),t,"loadtime"):e.addEntropy(new Date().valueOf(),t,"loadtime")}function or(e){e.b=wt(e).concat(wt(e)),e.K=new a.cipher.aes(e.b)}function wt(e){for(var t=0;4>t&&(e.m[t]=e.m[t]+1|0,!e.m[t]);t++);return e.K.encrypt(e.m)}function Ce(e,t){return function(){t.apply(e,arguments)}}a.random=new a.prng(6);e:try{if(et=typeof ce<"u"&&ce.exports){try{tt=zr("crypto")}catch{tt=null}et=Ye=tt}if(et&&Ye.randomBytes)Re=Ye.randomBytes(128),Re=new Uint32Array(new Uint8Array(Re).buffer),a.random.addEntropy(Re,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(Se=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(Se);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(Se);else break e;a.random.addEntropy(Se,1024,"crypto['getRandomValues']")}}catch(e){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(e))}var Re,Ye,Se,et,tt;a.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(e,t,r,n){r=r||{},n=n||{};var i=a.json,o=i.j({iv:a.random.randomWords(4,0)},i.defaults),s;if(i.j(o,r),r=o.adata,typeof o.salt=="string"&&(o.salt=a.codec.base64.toBits(o.salt)),typeof o.iv=="string"&&(o.iv=a.codec.base64.toBits(o.iv)),!a.mode[o.mode]||!a.cipher[o.cipher]||typeof e=="string"&&100>=o.iter||o.ts!==64&&o.ts!==96&&o.ts!==128||o.ks!==128&&o.ks!==192&&o.ks!==256||2>o.iv.length||4<o.iv.length)throw new a.exception.invalid("json encrypt: invalid parameters");return typeof e=="string"?(s=a.misc.cachedPbkdf2(e,o),e=s.key.slice(0,o.ks/32),o.salt=s.salt):a.ecc&&e instanceof a.ecc.elGamal.publicKey&&(s=e.kem(),o.kemtag=s.tag,e=s.key.slice(0,o.ks/32)),typeof t=="string"&&(t=a.codec.utf8String.toBits(t)),typeof r=="string"&&(o.adata=r=a.codec.utf8String.toBits(r)),s=new a.cipher[o.cipher](e),i.j(n,o),n.key=e,o.ct=o.mode==="ccm"&&a.arrayBuffer&&a.arrayBuffer.ccm&&t instanceof ArrayBuffer?a.arrayBuffer.ccm.encrypt(s,t,o.iv,r,o.ts):a.mode[o.mode].encrypt(s,t,o.iv,r,o.ts),o},encrypt:function(e,t,r,n){var i=a.json,o=i.ha.apply(i,arguments);return i.encode(o)},ga:function(e,t,r,n){r=r||{},n=n||{};var i=a.json;t=i.j(i.j(i.j({},i.defaults),t),r,!0);var o,s;if(o=t.adata,typeof t.salt=="string"&&(t.salt=a.codec.base64.toBits(t.salt)),typeof t.iv=="string"&&(t.iv=a.codec.base64.toBits(t.iv)),!a.mode[t.mode]||!a.cipher[t.cipher]||typeof e=="string"&&100>=t.iter||t.ts!==64&&t.ts!==96&&t.ts!==128||t.ks!==128&&t.ks!==192&&t.ks!==256||!t.iv||2>t.iv.length||4<t.iv.length)throw new a.exception.invalid("json decrypt: invalid parameters");return typeof e=="string"?(s=a.misc.cachedPbkdf2(e,t),e=s.key.slice(0,t.ks/32),t.salt=s.salt):a.ecc&&e instanceof a.ecc.elGamal.secretKey&&(e=e.unkem(a.codec.base64.toBits(t.kemtag)).slice(0,t.ks/32)),typeof o=="string"&&(o=a.codec.utf8String.toBits(o)),s=new a.cipher[t.cipher](e),o=t.mode==="ccm"&&a.arrayBuffer&&a.arrayBuffer.ccm&&t.ct instanceof ArrayBuffer?a.arrayBuffer.ccm.decrypt(s,t.ct,t.iv,t.tag,o,t.ts):a.mode[t.mode].decrypt(s,t.ct,t.iv,o,t.ts),i.j(n,t),n.key=e,r.raw===1?o:a.codec.utf8String.fromBits(o)},decrypt:function(e,t,r,n){var i=a.json;return i.ga(e,i.decode(t),r,n)},encode:function(e){var t,r="{",n="";for(t in e)if(e.hasOwnProperty(t)){if(!t.match(/^[a-z0-9]+$/i))throw new a.exception.invalid("json encode: invalid property name");switch(r+=n+'"'+t+'":',n=",",typeof e[t]){case"number":case"boolean":r+=e[t];break;case"string":r+='"'+escape(e[t])+'"';break;case"object":r+='"'+a.codec.base64.fromBits(e[t],0)+'"';break;default:throw new a.exception.bug("json encode: unsupported type")}}return r+"}"},decode:function(e){if(e=e.replace(/\s/g,""),!e.match(/^\{.*\}$/))throw new a.exception.invalid("json decode: this isn't json!");e=e.replace(/^\{|\}$/g,"").split(/,/);var t={},r,n;for(r=0;r<e.length;r++){if(!(n=e[r].match(/^\s*(?:(["']?)([a-z][a-z0-9]*)\1)\s*:\s*(?:(-?\d+)|"([a-z0-9+\/%*_.@=\-]*)"|(true|false))$/i)))throw new a.exception.invalid("json decode: this isn't json!");n[3]!=null?t[n[2]]=parseInt(n[3],10):n[4]!=null?t[n[2]]=n[2].match(/^(ct|adata|salt|iv)$/)?a.codec.base64.toBits(n[4]):unescape(n[4]):n[5]!=null&&(t[n[2]]=n[5]==="true")}return t},j:function(e,t,r){if(e===void 0&&(e={}),t===void 0)return e;for(var n in t)if(t.hasOwnProperty(n)){if(r&&e[n]!==void 0&&e[n]!==t[n])throw new a.exception.invalid("required parameter overridden");e[n]=t[n]}return e},ra:function(e,t){var r={},n;for(n in e)e.hasOwnProperty(n)&&e[n]!==t[n]&&(r[n]=e[n]);return r},qa:function(e,t){var r={},n;for(n=0;n<t.length;n++)e[t[n]]!==void 0&&(r[t[n]]=e[t[n]]);return r}};a.encrypt=a.json.encrypt;a.decrypt=a.json.decrypt;a.misc.oa={};a.misc.cachedPbkdf2=function(e,t){var r=a.misc.oa,n;return t=t||{},n=t.iter||1e3,r=r[e]=r[e]||{},n=r[n]=r[n]||{firstSalt:t.salt&&t.salt.length?t.salt.slice(0):a.random.randomWords(2,0)},r=t.salt===void 0?n.firstSalt:t.salt,n[r]=n[r]||a.misc.pbkdf2(e,r,t.iter),{key:n[r].slice(0),salt:r.slice(0)}};typeof ce<"u"&&ce.exports&&(ce.exports=a);typeof define=="function"&&define([],function(){return a})});var Lr=dt((ms,xt)=>{"use strict";var Dn=Object.prototype.hasOwnProperty,k="~";function ke(){}Object.create&&(ke.prototype=Object.create(null),new ke().__proto__||(k=!1));function xn(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function Ar(e,t,r,n,i){if(typeof r!="function")throw new TypeError("The listener must be a function");var o=new xn(r,n||e,i),s=k?k+t:t;return e._events[s]?e._events[s].fn?e._events[s]=[e._events[s],o]:e._events[s].push(o):(e._events[s]=o,e._eventsCount++),e}function rt(e,t){--e._eventsCount===0?e._events=new ke:delete e._events[t]}function R(){this._events=new ke,this._eventsCount=0}R.prototype.eventNames=function(){var t=[],r,n;if(this._eventsCount===0)return t;for(n in r=this._events)Dn.call(r,n)&&t.push(k?n.slice(1):n);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(r)):t};R.prototype.listeners=function(t){var r=k?k+t:t,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i<o;i++)s[i]=n[i].fn;return s};R.prototype.listenerCount=function(t){var r=k?k+t:t,n=this._events[r];return n?n.fn?1:n.length:0};R.prototype.emit=function(t,r,n,i,o,s){var c=k?k+t:t;if(!this._events[c])return!1;var u=this._events[c],f=arguments.length,l,h;if(u.fn){switch(u.once&&this.removeListener(t,u.fn,void 0,!0),f){case 1:return u.fn.call(u.context),!0;case 2:return u.fn.call(u.context,r),!0;case 3:return u.fn.call(u.context,r,n),!0;case 4:return u.fn.call(u.context,r,n,i),!0;case 5:return u.fn.call(u.context,r,n,i,o),!0;case 6:return u.fn.call(u.context,r,n,i,o,s),!0}for(h=1,l=new Array(f-1);h<f;h++)l[h-1]=arguments[h];u.fn.apply(u.context,l)}else{var m=u.length,p;for(h=0;h<m;h++)switch(u[h].once&&this.removeListener(t,u[h].fn,void 0,!0),f){case 1:u[h].fn.call(u[h].context);break;case 2:u[h].fn.call(u[h].context,r);break;case 3:u[h].fn.call(u[h].context,r,n);break;case 4:u[h].fn.call(u[h].context,r,n,i);break;default:if(!l)for(p=1,l=new Array(f-1);p<f;p++)l[p-1]=arguments[p];u[h].fn.apply(u[h].context,l)}}return!0};R.prototype.on=function(t,r,n){return Ar(this,t,r,n,!1)};R.prototype.once=function(t,r,n){return Ar(this,t,r,n,!0)};R.prototype.removeListener=function(t,r,n,i){var o=k?k+t:t;if(!this._events[o])return this;if(!r)return rt(this,o),this;var s=this._events[o];if(s.fn)s.fn===r&&(!i||s.once)&&(!n||s.context===n)&&rt(this,o);else{for(var c=0,u=[],f=s.length;c<f;c++)(s[c].fn!==r||i&&!s[c].once||n&&s[c].context!==n)&&u.push(s[c]);u.length?this._events[o]=u.length===1?u[0]:u:rt(this,o)}return this};R.prototype.removeAllListeners=function(t){var r;return t?(r=k?k+t:t,this._events[r]&&rt(this,r)):(this._events=new ke,this._eventsCount=0),this};R.prototype.off=R.prototype.removeListener;R.prototype.addListener=R.prototype.on;R.prefixed=k;R.EventEmitter=R;typeof xt<"u"&&(xt.exports=R)});var $r={withStackTrace:!1},jt=(e,t,r=$r)=>{let n=t.isOk()?{type:"Ok",value:t.value}:{type:"Err",value:t.error},i=r.withStackTrace?new Error().stack:void 0;return{data:n,message:e,stack:i}};function oe(e,t,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function c(l){try{f(n.next(l))}catch(h){s(h)}}function u(l){try{f(n.throw(l))}catch(h){s(h)}}function f(l){l.done?o(l.value):i(l.value).then(c,u)}f((n=n.apply(e,t||[])).next())})}function Ft(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function G(e){return this instanceof G?(this.v=e,this):new G(e)}function Bt(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(e,t||[]),i,o=[];return i=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",s),i[Symbol.asyncIterator]=function(){return this},i;function s(p){return function(b){return Promise.resolve(b).then(p,h)}}function c(p,b){n[p]&&(i[p]=function(N){return new Promise(function(J,Q){o.push([p,N,J,Q])>1||u(p,N)})},b&&(i[p]=b(i[p])))}function u(p,b){try{f(n[p](b))}catch(N){m(o[0][3],N)}}function f(p){p.value instanceof G?Promise.resolve(p.value.v).then(l,h):m(o[0][2],p)}function l(p){u("next",p)}function h(p){u("throw",p)}function m(p,b){p(b),o.shift(),o.length&&u(o[0][0],o[0][1])}}function qr(e){var t,r;return t={},n("next"),n("throw",function(i){throw i}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(i,o){t[i]=e[i]?function(s){return(r=!r)?{value:G(e[i](s)),done:!1}:o?o(s):s}:o}}function Gr(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ft=="function"?Ft(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(o){r[o]=e[o]&&function(s){return new Promise(function(c,u){s=e[o](s),i(c,u,s.done,s.value)})}}function i(o,s,c,u){Promise.resolve(u).then(function(f){o({value:f,done:c})},s)}}var O=class e{constructor(t){this._promise=t}static fromSafePromise(t){let r=t.then(n=>new F(n));return new e(r)}static fromPromise(t,r){let n=t.then(i=>new F(i)).catch(i=>new B(r(i)));return new e(n)}static fromThrowable(t,r){return(...n)=>new e(oe(this,void 0,void 0,function*(){try{return new F(yield t(...n))}catch(i){return new B(r?r(i):i)}}))}static combine(t){return Vr(t)}static combineWithAllErrors(t){return Xr(t)}map(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isErr()?new B(r.error):new F(yield t(r.value))})))}andThrough(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){if(r.isErr())return new B(r.error);let n=yield t(r.value);return n.isErr()?new B(n.error):new F(r.value)})))}andTee(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){if(r.isErr())return new B(r.error);try{yield t(r.value)}catch{}return new F(r.value)})))}mapErr(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isOk()?new F(r.value):new B(yield t(r.error))})))}andThen(t){return new e(this._promise.then(r=>{if(r.isErr())return new B(r.error);let n=t(r.value);return n instanceof e?n._promise:n}))}orElse(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isErr()?t(r.error):new F(r.value)})))}match(t,r){return this._promise.then(n=>n.match(t,r))}unwrapOr(t){return this._promise.then(r=>r.unwrapOr(t))}safeUnwrap(){return Bt(this,arguments,function*(){return yield G(yield G(yield*qr(Gr(yield G(this._promise.then(r=>r.safeUnwrap()))))))})}then(t,r){return this._promise.then(t,r)}[Symbol.asyncIterator](){return Bt(this,arguments,function*(){let r=yield G(this._promise);return r.isErr()&&(yield yield G(L(r.error))),yield G(r.value)})}},C=e=>new O(Promise.resolve(new F(e))),L=e=>new O(Promise.resolve(new B(e))),Rn=O.fromPromise,Sn=O.fromSafePromise,kn=O.fromThrowable,Wt=e=>{let t=re([]);for(let r of e)if(r.isErr()){t=Z(r.error);break}else t.map(n=>n.push(r.value));return t},Vr=e=>O.fromSafePromise(Promise.all(e)).andThen(Wt),Jt=e=>{let t=re([]);for(let r of e)r.isErr()&&t.isErr()?t.error.push(r.error):r.isErr()&&t.isOk()?t=Z([r.error]):r.isOk()&&t.isOk()&&t.value.push(r.value);return t},Xr=e=>O.fromSafePromise(Promise.all(e)).andThen(Jt),mt;(function(e){function t(i,o){return(...s)=>{try{let c=i(...s);return re(c)}catch(c){return Z(o?o(c):c)}}}e.fromThrowable=t;function r(i){return Wt(i)}e.combine=r;function n(i){return Jt(i)}e.combineWithAllErrors=n})(mt||(mt={}));var re=e=>new F(e);function Z(e){return new B(e)}var F=class{constructor(t){this.value=t}isOk(){return!0}isErr(){return!this.isOk()}map(t){return re(t(this.value))}mapErr(t){return re(this.value)}andThen(t){return t(this.value)}andThrough(t){return t(this.value).map(r=>this.value)}andTee(t){try{t(this.value)}catch{}return re(this.value)}orElse(t){return re(this.value)}asyncAndThen(t){return t(this.value)}asyncAndThrough(t){return t(this.value).map(()=>this.value)}asyncMap(t){return O.fromSafePromise(t(this.value))}unwrapOr(t){return this.value}match(t,r){return t(this.value)}safeUnwrap(){let t=this.value;return function*(){return t}()}_unsafeUnwrap(t){return this.value}_unsafeUnwrapErr(t){throw jt("Called `_unsafeUnwrapErr` on an Ok",this,t)}*[Symbol.iterator](){return this.value}},B=class{constructor(t){this.error=t}isOk(){return!1}isErr(){return!this.isOk()}map(t){return Z(this.error)}mapErr(t){return Z(t(this.error))}andThrough(t){return Z(this.error)}andTee(t){return Z(this.error)}andThen(t){return Z(this.error)}orElse(t){return t(this.error)}asyncAndThen(t){return L(this.error)}asyncAndThrough(t){return L(this.error)}asyncMap(t){return L(this.error)}unwrapOr(t){return t}match(t,r){return r(this.error)}safeUnwrap(){let t=this.error;return function*(){throw yield Z(t),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(t){throw jt("Called `_unsafeUnwrap` on an Err",this,t)}_unsafeUnwrapErr(t){return this.error}*[Symbol.iterator](){let t=this;return yield t,t}},Pn=mt.fromThrowable;var P=class extends Error{constructor(r,n={}){let{cause:i,context:o}=n;super(r,{cause:i});g(this,"context");this.name=this.constructor.name,this.context=o}};var V=class extends P{};var be=class extends V{constructor(){super(...arguments);g(this,"message","An error occured while trying to connect to WebSocket")}};var $=e=>{if(e instanceof Error)return e;let t="[Unable to stringify the thrown value]";try{t=JSON.stringify(e)}catch{}return new Error(t)};var Kr=()=>typeof Deno<"u";var yt=e=>Kr()?new URL(`./worker/${e}.ts`,new URL(".",import.meta.url).href):new URL(import.meta.resolve(`./${e!=="encrypt"?`worker/${e}`:e}.js`));var er=Oe(Ke());var v=new er.default,Y=(e,t)=>(Object.assign(e,t),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:e}),e),Et=(e,t)=>{Y(e,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:t})},tr=()=>{v.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),v.once("OPERATION_FAILED",e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var ae=class{constructor(t,r){if(!t||t.length!=64)throw Error("Charset must contain 64 characters");this._charset=t,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(t){let r=t.byteLength;if(!r)return"";let n=new Uint8Array(t),i="";for(let o=0;o<r;o+=3)i+=this._charset[n[o]>>2]+this._charset[(n[o]&3)<<4|n[o+1]>>4]+this._charset[(n[o+1]&15)<<2|n[o+2]>>6]+this._charset[n[o+2]&63];return r%3==2?(i=i.substring(0,i.length-1),this._noPadding||(i+="=")):r%3==1&&(i=i.substring(0,i.length-2),this._noPadding||(i+="==")),i}Decode(t){if(t=(t||"").replace(/[\s]/g,""),!t)return new ArrayBuffer(0);if(!this._valid.test(t))throw Error("Invalid base64 input sequence");let r=Math.floor(t.length*.75);t[t.length-2]=="="?r-=2:t[t.length-1]=="="&&r--;let n=new Uint8Array(r),i,o,s,c,u=0,f=0;for(;u<t.length*.75;)i=this._charset.indexOf(t.charAt(f++)),o=this._charset.indexOf(t.charAt(f++)),s=this._charset.indexOf(t.charAt(f++)),c=this._charset.indexOf(t.charAt(f++)),n[u++]=i<<2|o>>4,n[u++]=(o&15)<<4|s>>2,n[u++]=(s&3)<<6|c;return n.buffer}};var rr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function De(e){return rr.Encode(e)}function xe(e){return rr.Decode(e)}var nn=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function gt(e){return nn.Decode(e)}var Lt=Oe(sr());var X=class extends P{};var ue=class extends X{constructor(){super(...arguments);g(this,"message","Unable to decrypt the provided data")}};var fe=class extends X{constructor(){super(...arguments);g(this,"message","Unable to encrypt the provided data")}};var ar=(e,t)=>{try{let r=typeof t=="string"?t:t.data;return C(xe(Lt.default.decrypt(e,r)))}catch(r){return L(new ue(void 0,{cause:$(r)}))}},cr=(e,t)=>{try{let r=Lt.default.encrypt(e,De(t));return C({algo:0,data:r,iv:JSON.parse(r).iv})}catch(r){return L(new fe(void 0,{cause:$(r)}))}};var ur=(e,t)=>lr(e).andThen(r=>O.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:t.iv},r,t.data),n=>new ue(void 0,{cause:$(n)}))),fr=(e,t)=>lr(e).andThen(r=>{let n=crypto.getRandomValues(new Uint8Array(12));return O.fromPromise(crypto.subtle.encrypt({name:"AES-GCM",iv:n},r,t),i=>new fe(void 0,{cause:$(i)})).andThen(i=>C({algo:1,data:i,iv:n}))}),lr=e=>O.fromPromise(crypto.subtle.importKey("raw",gt(e),{name:"AES-GCM"},!1,["encrypt","decrypt"]),t=>new X("Unable to import cryptography key",{cause:$(t)}));var hr=(e,t)=>t.algo===void 0||t.algo===0?ar(e,t):ur(e,t),dr=(e,t,r)=>r===0?cr(e,t):fr(e,t);var M={},mr=5,un=e=>(v.emit("UPLOAD_CANCELLED",e.success),C(void 0)),fn=(e,t)=>{let r=e.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let i=JSON.parse(n);if(gn(i)){let o=r.shift();if(o){let s=JSON.parse(o);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=xe(s.data)),hr(t.keys.client,s).andThen(c=>{let u=typeof c=="string"?new TextEncoder().encode(c).buffer:c;return i.part===0?(Y(t,{chunksReady:t.chunksReady+1,delAtFirstView:i.del_at_first_view,delay:i.delay,name:i.name,size:i.size,totalChunks:i.total,type:i.type,zipped:i.zipped}),v.emit("DOWNLOAD_STARTED")):Y(t,{chunksReady:t.chunksReady+1}),v.emit("CHUNK_DOWNLOADED",u,i.part),t.chunksReady===i.total?pn(t).andThen(()=>(v.emit("DOWNLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED"),C(void 0))):C(void 0)})}else{let s=new V("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",s),L(s)}}else{let o=new V(i.msg);return v.emit("OPERATION_FAILED",o),L(o)}}else{let i=new V("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",i),L(i)}},ln=(e,t)=>{if(e.success)return e.j===0&&(Y(t,{keys:{client:t.keys.client,server:e.short},actionToken:e.token,queueIndex:e.i}),v.emit("UPLOAD_STARTED")),Y(t,{chunksReady:t.chunksReady+1,createdAt:e.created_at}),v.emit("CHUNK_UPLOADED"),t.chunksReady===t.totalChunks&&(Y(t,{uploadStatus:1}),v.emit("UPLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED")),C(void 0);{let r=new V(e.msg);return v.emit("OPERATION_FAILED",r),L(r)}},hn=(e,t)=>{let r=En(e.data),n;if(r)if(!r.action&&r.msg){let i=new V(r.msg);return v.emit("OPERATION_FAILED",i),L(i)}else"delay"in r?n=ln(r,t):n=un(r);else n=fn(e.data,t);return n},dn=e=>M!==void 0&&M[e]!==void 0&&M[e].readyState===WebSocket.CONNECTING,Ot=e=>M!==void 0&&M[e]!==void 0&&M[e].readyState===WebSocket.OPEN;var pn=e=>{let t;return e.password?t={ended:!0,file_pwd:e.password}:t={ended:!0},Dt(yn(e),e,JSON.stringify(t))},bt=(e,t,r)=>(r.data=De(r.data),Dt(vn(e),e,`${JSON.stringify(t)}XXMOJOXX${JSON.stringify(r)}`)),Dt=(e,t,r)=>Ot(e)?(M[e].send(r),C(void 0)):yr(e).andThen(()=>(M[e].onmessage=n=>hn(n,t),Dt(e,t,r))),yr=(e,t=0)=>(!Ot(e)&&!dn(e)&&(M[e]=new WebSocket(e),v.once("SOCKET_OPERATION_TERMINATED",()=>{M[e].close()}),v.once("OPERATION_FAILED",()=>{v.emit("SOCKET_OPERATION_TERMINATED")}),M[e].onopen=()=>{v.emit("SOCKET_OPENED")},M[e].onclose=()=>{},M[e].onerror=()=>++t<=mr?(console.error(`An error happened while trying to connect to WebSocket ${e}. Trying again. ${t} / ${mr}`),yr(e,t)):(v.emit("SOCKET_ONERROR"),L(new be(`Unable to connect to WebSocket ${e}.`)))),mn(e).andThen(()=>C(e)).orElse(r=>L(r))),mn=e=>O.fromPromise(new Promise((t,r)=>{Ot(e)?t(void 0):(v.once("SOCKET_OPENED",()=>{t(void 0)}),v.on("SOCKET_ONERROR",()=>{r(new be)}))}),t=>$(t));var vr=(e,t)=>{let r=new URL(e);return["ws:","wss:"].includes(r.protocol)||(r.protocol=r.protocol==="http:"?"ws:":"wss:"),r.pathname+=t,new URL(r.origin+r.pathname)},yn=e=>vr(new URL(e.serverUrl),"download"+`/${e.keys.server}`).toString(),vn=e=>vr(new URL(e.serverUrl),"upload").toString(),En=e=>{try{let t=JSON.parse(e);if(t&&typeof t=="object")return t}catch{}return!1},gn=e=>typeof e=="object"&&e!==null&&!("msg"in e);var gr=Oe(Ke());var Ln=Oe(Ke());var On={},ds=new gr.default;var bn=()=>Object.values(On).filter(e=>e.uploadStatus===4),wr=e=>Object.keys(bn()).indexOf(e);var _t=Oe(Lr(),1);var Pe=class extends Error{constructor(t){super(t),this.name="TimeoutError"}},Ct=class extends Error{constructor(t){super(),this.name="AbortError",this.message=t}},Or=e=>globalThis.DOMException===void 0?new Ct(e):new DOMException(e),br=e=>{let t=e.reason===void 0?Or("This operation was aborted."):e.reason;return t instanceof Error?t:Or(t)};function Rt(e,t){let{milliseconds:r,fallback:n,message:i,customTimers:o={setTimeout,clearTimeout}}=t,s,u=new Promise((f,l)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(t.signal){let{signal:m}=t;m.aborted&&l(br(m));let p=()=>{l(br(m))};m.addEventListener("abort",p,{once:!0}),e.finally(()=>{m.removeEventListener("abort",p)})}if(r===Number.POSITIVE_INFINITY){e.then(f,l);return}let h=new Pe;s=o.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(m){l(m)}return}typeof e.cancel=="function"&&e.cancel(),i===!1?f():i instanceof Error?l(i):(h.message=i!=null?i:`Promise timed out after ${r} milliseconds`,l(h))},r),(async()=>{try{f(await e)}catch(m){l(m)}})()}).finally(()=>{u.clear()});return u.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},u}function St(e,t,r){let n=0,i=e.length;for(;i>0;){let o=Math.trunc(i/2),s=n+o;r(e[s],t)<=0?(n=++s,i-=o+1):i=o}return n}var K,Te=class{constructor(){D(this,K,[])}enqueue(t,r){r={priority:0,...r};let n={priority:r.priority,run:t};if(this.size&&d(this,K)[this.size-1].priority>=r.priority){d(this,K).push(n);return}let i=St(d(this,K),n,(o,s)=>s.priority-o.priority);d(this,K).splice(i,0,n)}dequeue(){let t=d(this,K).shift();return t==null?void 0:t.run}filter(t){return d(this,K).filter(r=>r.priority===t.priority).map(r=>r.run)}get size(){return d(this,K).length}};K=new WeakMap;var le,he,te,Ue,de,Me,j,pe,T,Ne,W,me,ee,Fe,y,Dr,xr,_r,Cr,Rr,nt,kt,Pt,it,Sr,ot,Ie=class extends _t.default{constructor(r){var n,i,o,s;super();D(this,y);D(this,le);D(this,he);D(this,te,0);D(this,Ue);D(this,de);D(this,Me,0);D(this,j);D(this,pe);D(this,T);D(this,Ne);D(this,W,0);D(this,me);D(this,ee);D(this,Fe);g(this,"timeout");if(r={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Te,...r},!(typeof r.intervalCap=="number"&&r.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(i=(n=r.intervalCap)==null?void 0:n.toString())!=null?i:""}\` (${typeof r.intervalCap})`);if(r.interval===void 0||!(Number.isFinite(r.interval)&&r.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(o=r.interval)==null?void 0:o.toString())!=null?s:""}\` (${typeof r.interval})`);w(this,le,r.carryoverConcurrencyCount),w(this,he,r.intervalCap===Number.POSITIVE_INFINITY||r.interval===0),w(this,Ue,r.intervalCap),w(this,de,r.interval),w(this,T,new r.queueClass),w(this,Ne,r.queueClass),this.concurrency=r.concurrency,this.timeout=r.timeout,w(this,Fe,r.throwOnTimeout===!0),w(this,ee,r.autoStart===!1)}get concurrency(){return d(this,me)}set concurrency(r){if(!(typeof r=="number"&&r>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${r}\` (${typeof r})`);w(this,me,r),x(this,y,it).call(this)}async add(r,n={}){return n={timeout:this.timeout,throwOnTimeout:d(this,Fe),...n},new Promise((i,o)=>{d(this,T).enqueue(async()=>{var s;Ge(this,W)._++,Ge(this,te)._++;try{(s=n.signal)==null||s.throwIfAborted();let c=r({signal:n.signal});n.timeout&&(c=Rt(Promise.resolve(c),{milliseconds:n.timeout})),n.signal&&(c=Promise.race([c,x(this,y,Sr).call(this,n.signal)]));let u=await c;i(u),this.emit("completed",u)}catch(c){if(c instanceof Pe&&!n.throwOnTimeout){i();return}o(c),this.emit("error",c)}finally{x(this,y,_r).call(this)}},n),this.emit("add"),x(this,y,nt).call(this)})}async addAll(r,n){return Promise.all(r.map(async i=>this.add(i,n)))}start(){return d(this,ee)?(w(this,ee,!1),x(this,y,it).call(this),this):this}pause(){w(this,ee,!0)}clear(){w(this,T,new(d(this,Ne)))}async onEmpty(){d(this,T).size!==0&&await x(this,y,ot).call(this,"empty")}async onSizeLessThan(r){d(this,T).size<r||await x(this,y,ot).call(this,"next",()=>d(this,T).size<r)}async onIdle(){d(this,W)===0&&d(this,T).size===0||await x(this,y,ot).call(this,"idle")}get size(){return d(this,T).size}sizeBy(r){return d(this,T).filter(r).length}get pending(){return d(this,W)}get isPaused(){return d(this,ee)}};le=new WeakMap,he=new WeakMap,te=new WeakMap,Ue=new WeakMap,de=new WeakMap,Me=new WeakMap,j=new WeakMap,pe=new WeakMap,T=new WeakMap,Ne=new WeakMap,W=new WeakMap,me=new WeakMap,ee=new WeakMap,Fe=new WeakMap,y=new WeakSet,Dr=function(){return d(this,he)||d(this,te)<d(this,Ue)},xr=function(){return d(this,W)<d(this,me)},_r=function(){Ge(this,W)._--,x(this,y,nt).call(this),this.emit("next")},Cr=function(){x(this,y,Pt).call(this),x(this,y,kt).call(this),w(this,pe,void 0)},Rr=function(){let r=Date.now();if(d(this,j)===void 0){let n=d(this,Me)-r;if(n<0)w(this,te,d(this,le)?d(this,W):0);else return d(this,pe)===void 0&&w(this,pe,setTimeout(()=>{x(this,y,Cr).call(this)},n)),!0}return!1},nt=function(){if(d(this,T).size===0)return d(this,j)&&clearInterval(d(this,j)),w(this,j,void 0),this.emit("empty"),d(this,W)===0&&this.emit("idle"),!1;if(!d(this,ee)){let r=!d(this,y,Rr);if(d(this,y,Dr)&&d(this,y,xr)){let n=d(this,T).dequeue();return n?(this.emit("active"),n(),r&&x(this,y,kt).call(this),!0):!1}}return!1},kt=function(){d(this,he)||d(this,j)!==void 0||(w(this,j,setInterval(()=>{x(this,y,Pt).call(this)},d(this,de))),w(this,Me,Date.now()+d(this,de)))},Pt=function(){d(this,te)===0&&d(this,W)===0&&d(this,j)&&(clearInterval(d(this,j)),w(this,j,void 0)),w(this,te,d(this,le)?d(this,W):0),x(this,y,it).call(this)},it=function(){for(;x(this,y,nt).call(this););},Sr=async function(r){return new Promise((n,i)=>{r.addEventListener("abort",()=>{i(r.reason)},{once:!0})})},ot=async function(r,n){return new Promise(i=>{let o=()=>{n&&!n()||(this.off(r,o),i())};this.on(r,o)})};var st=class extends P{};var Be=class extends st{constructor(){super(...arguments);g(this,"message","Parameter must be defined")}};var kr=!1,Tt=navigator.hardwareConcurrency||1,Je=new Ie({concurrency:Tt,autoStart:!1}),We=0,at=!1,je,Pr=new Worker(yt("encrypt"),{type:"module"});self.onmessage=e=>{if(kr||(tr(),kr=!0,je=e.data.args.lufiFile,v.once("UPLOAD_STARTED",()=>{self.postMessage({event:"UPLOAD_STARTED"})}),v.on("CHUNK_UPLOADED",()=>{self.postMessage({event:"CHUNK_UPLOADED"}),We--,Je.isPaused&&!at&&We<Tt&&Tr()}),v.once("UPLOAD_COMPLETE",()=>{self.postMessage({event:"UPLOAD_COMPLETE"})}),v.on("FILE_UPDATED",Y)),e.data.args.chunk)return e.data.args.lufiFile=je,_n(e.data,wr(je.keys.client)).mapErr(t=>{Et(je,t)});e.data.action===0?(at=!0,Ir()):e.data.action===2?(at=!1,Tr()):Et(je,new Be)};var _n=(e,t)=>{let{lufiFile:r,algo:n}=e.args;if(e.args.chunk&&n)e.args.chunk.index===0?dr(r.keys.client,e.args.chunk.buffer,n).map(i=>{bt(r,{total:r.totalChunks,part:0,size:r.size,name:r.name,type:r.type,delay:r.delay,del_at_first_view:r.delAtFirstView,zipped:r.zipped,id:null,i:t,file_pwd:r.password},i),We++}):Je.add(()=>{if(e.args.chunk){let i=()=>(We++,new Promise(o=>{Pr.onmessage=s=>{o(bt(r,{total:r.totalChunks,part:s.data.chunkIndex,size:r.size,name:r.name,type:r.type,delay:r.delay,del_at_first_view:r.delAtFirstView,zipped:r.zipped,id:r.keys.server,i:t,file_pwd:r.password},s.data.encryptedData))}}));Pr.postMessage(e,[e.args.chunk.buffer]),!Je.isPaused&&(at||We===Tt)&&Ir(),i()}});else return L(new Be("algo must be defined"));return C(void 0)},Ir=()=>{Je.pause(),self.postMessage({event:"JOB_PAUSED"})},Tr=()=>{Je.start(),self.postMessage({event:"JOB_RESUMED"})};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vZXZlbnRlbWl0dGVyM0A1LjAuMS9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvc2hhcmVkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8vd2ViLnRzIiwgIi4uLy4uL3NyYy9hcGkvY3J5cHRvLnRzIiwgIi4uLy4uL3NyYy9hcGkvd2Vic29ja2V0LnRzIiwgIi4uLy4uL3NyYy9hcGkvbHVmaS50cyIsICIuLi8uLi9zcmMvZW50aXRpZXMvbHVmaS1qb2IudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50ZW1pdHRlcjNANS4wLjEvbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXRpbWVvdXRANi4xLjMvbm9kZV9tb2R1bGVzL3AtdGltZW91dC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vcC1xdWV1ZUA4LjAuMS9ub2RlX21vZHVsZXMvcC1xdWV1ZS9kaXN0L2xvd2VyLWJvdW5kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXF1ZXVlQDguMC4xL25vZGVfbW9kdWxlcy9wLXF1ZXVlL2Rpc3QvcHJpb3JpdHktcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL3AtcXVldWVAOC4wLjEvbm9kZV9tb2R1bGVzL3AtcXVldWUvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50cyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci11bmRlZmluZWQtcGFyYW1ldGVyLWVycm9yLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvdXBsb2FkLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO3ZhciBzamNsPXtjaXBoZXI6e30saGFzaDp7fSxrZXlleGNoYW5nZTp7fSxtb2RlOnt9LG1pc2M6e30sY29kZWM6e30sZXhjZXB0aW9uOntjb3JydXB0OmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkNPUlJVUFQ6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LGludmFsaWQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiSU5WQUxJRDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sYnVnOmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkJVRzogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sbm90UmVhZHk6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiTk9UIFJFQURZOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfX19O1xuc2pjbC5jaXBoZXIuYWVzPWZ1bmN0aW9uKGEpe3RoaXMud1swXVswXVswXXx8dGhpcy5DKCk7dmFyIGIsYyxkLGUsZj10aGlzLndbMF1bNF0sZz10aGlzLndbMV07Yj1hLmxlbmd0aDt2YXIgaD0xO2lmKDQhPT1iJiY2IT09YiYmOCE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIGFlcyBrZXkgc2l6ZVwiKTt0aGlzLmI9W2Q9YS5zbGljZSgwKSxlPVtdXTtmb3IoYT1iO2E8NCpiKzI4O2ErKyl7Yz1kW2EtMV07aWYoMD09PWElYnx8OD09PWImJjQ9PT1hJWIpYz1mW2M+Pj4yNF08PDI0XmZbYz4+MTYmMjU1XTw8MTZeZltjPj44JjI1NV08PDheZltjJjI1NV0sMD09PWElYiYmKGM9Yzw8OF5jPj4+MjReaDw8MjQsaD1oPDwxXjI4MyooaD4+NykpO2RbYV09ZFthLWJdXmN9Zm9yKGI9MDthO2IrKyxhLS0pYz1kW2ImMz9hOmEtNF0sZVtiXT00Pj1hfHw0PmI/YzpnWzBdW2ZbYz4+PjI0XV1eZ1sxXVtmW2M+PjE2JjI1NV1dXmdbMl1bZltjPj44JjI1NV1dXmdbM11bZltjJlxuMjU1XV19O1xuc2pjbC5jaXBoZXIuYWVzLnByb3RvdHlwZT17ZW5jcnlwdDpmdW5jdGlvbihhKXtyZXR1cm4gYWEodGhpcyxhLDApfSxkZWNyeXB0OmZ1bmN0aW9uKGEpe3JldHVybiBhYSh0aGlzLGEsMSl9LHc6W1tbXSxbXSxbXSxbXSxbXV0sW1tdLFtdLFtdLFtdLFtdXV0sQzpmdW5jdGlvbigpe3ZhciBhPXRoaXMud1swXSxiPXRoaXMud1sxXSxjPWFbNF0sZD1iWzRdLGUsZixnLGg9W10saz1bXSxuLGwsbSxwO2ZvcihlPTA7MHgxMDA+ZTtlKyspa1soaFtlXT1lPDwxXjI4MyooZT4+NykpXmVdPWU7Zm9yKGY9Zz0wOyFjW2ZdO2ZePW58fDEsZz1rW2ddfHwxKWZvcihtPWdeZzw8MV5nPDwyXmc8PDNeZzw8NCxtPW0+PjhebSYyNTVeOTksY1tmXT1tLGRbbV09ZixsPWhbZT1oW249aFtmXV1dLHA9MHgxMDEwMTAxKmxeMHgxMDAwMSplXjB4MTAxKm5eMHgxMDEwMTAwKmYsbD0weDEwMSpoW21dXjB4MTAxMDEwMCptLGU9MDs0PmU7ZSsrKWFbZV1bZl09bD1sPDwyNF5sPj4+OCxiW2VdW21dPXA9cDw8MjRecD4+Pjg7Zm9yKGU9XG4wOzU+ZTtlKyspYVtlXT1hW2VdLnNsaWNlKDApLGJbZV09YltlXS5zbGljZSgwKX19O1xuZnVuY3Rpb24gYWEoYSxiLGMpe2lmKDQhPT1iLmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGJsb2NrIHNpemVcIik7dmFyIGQ9YS5iW2NdLGU9YlswXV5kWzBdLGY9YltjPzM6MV1eZFsxXSxnPWJbMl1eZFsyXTtiPWJbYz8xOjNdXmRbM107dmFyIGgsayxuLGw9ZC5sZW5ndGgvNC0yLG0scD00LHo9WzAsMCwwLDBdO2g9YS53W2NdO2E9aFswXTt2YXIgQT1oWzFdLEM9aFsyXSxCPWhbM10sRD1oWzRdO2ZvcihtPTA7bTxsO20rKyloPWFbZT4+PjI0XV5BW2Y+PjE2JjI1NV1eQ1tnPj44JjI1NV1eQltiJjI1NV1eZFtwXSxrPWFbZj4+PjI0XV5BW2c+PjE2JjI1NV1eQ1tiPj44JjI1NV1eQltlJjI1NV1eZFtwKzFdLG49YVtnPj4+MjRdXkFbYj4+MTYmMjU1XV5DW2U+PjgmMjU1XV5CW2YmMjU1XV5kW3ArMl0sYj1hW2I+Pj4yNF1eQVtlPj4xNiYyNTVdXkNbZj4+OCYyNTVdXkJbZyYyNTVdXmRbcCszXSxwKz00LGU9aCxmPWssZz1uO2ZvcihtPVxuMDs0Pm07bSsrKXpbYz8zJi1tOm1dPURbZT4+PjI0XTw8MjReRFtmPj4xNiYyNTVdPDwxNl5EW2c+PjgmMjU1XTw8OF5EW2ImMjU1XV5kW3ArK10saD1lLGU9ZixmPWcsZz1iLGI9aDtyZXR1cm4gen1cbnNqY2wuYml0QXJyYXk9e2JpdFNsaWNlOmZ1bmN0aW9uKGEsYixjKXthPXNqY2wuYml0QXJyYXkuWShhLnNsaWNlKGIvMzIpLDMyLShiJjMxKSkuc2xpY2UoMSk7cmV0dXJuIHZvaWQgMD09PWM/YTpzamNsLmJpdEFycmF5LmNsYW1wKGEsYy1iKX0sZXh0cmFjdDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5mbG9vcigtYi1jJjMxKTtyZXR1cm4oKGIrYy0xXmIpJi0zMj9hW2IvMzJ8MF08PDMyLWReYVtiLzMyKzF8MF0+Pj5kOmFbYi8zMnwwXT4+PmQpJigxPDxjKS0xfSxjb25jYXQ6ZnVuY3Rpb24oYSxiKXtpZigwPT09YS5sZW5ndGh8fDA9PT1iLmxlbmd0aClyZXR1cm4gYS5jb25jYXQoYik7dmFyIGM9YVthLmxlbmd0aC0xXSxkPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChjKTtyZXR1cm4gMzI9PT1kP2EuY29uY2F0KGIpOnNqY2wuYml0QXJyYXkuWShiLGQsY3wwLGEuc2xpY2UoMCxhLmxlbmd0aC0xKSl9LGJpdExlbmd0aDpmdW5jdGlvbihhKXt2YXIgYj1hLmxlbmd0aDtyZXR1cm4gMD09PVxuYj8wOjMyKihiLTEpK3NqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChhW2ItMV0pfSxjbGFtcDpmdW5jdGlvbihhLGIpe2lmKDMyKmEubGVuZ3RoPGIpcmV0dXJuIGE7YT1hLnNsaWNlKDAsTWF0aC5jZWlsKGIvMzIpKTt2YXIgYz1hLmxlbmd0aDtiPWImMzE7MDxjJiZiJiYoYVtjLTFdPXNqY2wuYml0QXJyYXkucGFydGlhbChiLGFbYy0xXSYyMTQ3NDgzNjQ4Pj5iLTEsMSkpO3JldHVybiBhfSxwYXJ0aWFsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMzI9PT1hP2I6KGM/YnwwOmI8PDMyLWEpKzB4MTAwMDAwMDAwMDAqYX0sZ2V0UGFydGlhbDpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChhLzB4MTAwMDAwMDAwMDApfHwzMn0sZXF1YWw6ZnVuY3Rpb24oYSxiKXtpZihzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKSE9PXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGIpKXJldHVybiExO3ZhciBjPTAsZDtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWN8PWFbZF1eYltkXTtyZXR1cm4gMD09PVxuY30sWTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtlPTA7Zm9yKHZvaWQgMD09PWQmJihkPVtdKTszMjw9YjtiLT0zMilkLnB1c2goYyksYz0wO2lmKDA9PT1iKXJldHVybiBkLmNvbmNhdChhKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjfGFbZV0+Pj5iKSxjPWFbZV08PDMyLWI7ZT1hLmxlbmd0aD9hW2EubGVuZ3RoLTFdOjA7YT1zamNsLmJpdEFycmF5LmdldFBhcnRpYWwoZSk7ZC5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbChiK2EmMzEsMzI8YithP2M6ZC5wb3AoKSwxKSk7cmV0dXJuIGR9LFA6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bYVswXV5iWzBdLGFbMV1eYlsxXSxhWzJdXmJbMl0sYVszXV5iWzNdXX0sYnl0ZXN3YXBNOmZ1bmN0aW9uKGEpe3ZhciBiLGM7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljPWFbYl0sYVtiXT1jPj4+MjR8Yz4+PjgmMHhmZjAwfChjJjB4ZmYwMCk8PDh8Yzw8MjQ7cmV0dXJuIGF9fTtcbnNqY2wuY29kZWMudXRmOFN0cmluZz17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjPXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpLGQsZTtmb3IoZD0wO2Q8Yy84O2QrKykwPT09KGQmMykmJihlPWFbZC80XSksYis9U3RyaW5nLmZyb21DaGFyQ29kZShlPj4+OD4+Pjg+Pj44KSxlPDw9ODtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShiKSl9LHRvQml0czpmdW5jdGlvbihhKXthPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhKSk7dmFyIGI9W10sYyxkPTA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylkPWQ8PDh8YS5jaGFyQ29kZUF0KGMpLDM9PT0oYyYzKSYmKGIucHVzaChkKSxkPTApO2MmMyYmYi5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbCg4KihjJjMpLGQpKTtyZXR1cm4gYn19O1xuc2pjbC5jb2RlYy5oZXg9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiPVwiXCIsYztmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWIrPSgoYVtjXXwwKSsweGYwMDAwMDAwMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cig0KTtyZXR1cm4gYi5zdWJzdHIoMCxzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKS80KX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZDthPWEucmVwbGFjZSgvXFxzfDB4L2csXCJcIik7ZD1hLmxlbmd0aDthPWErXCIwMDAwMDAwMFwiO2ZvcihiPTA7YjxhLmxlbmd0aDtiKz04KWMucHVzaChwYXJzZUludChhLnN1YnN0cihiLDgpLDE2KV4wKTtyZXR1cm4gc2pjbC5iaXRBcnJheS5jbGFtcChjLDQqZCl9fTtcbnNqY2wuY29kZWMuYmFzZTY0PXtTOlwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLGZyb21CaXRzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cIlwiLGU9MCxmPXNqY2wuY29kZWMuYmFzZTY0LlMsZz0wLGg9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7YyYmKGY9Zi5zdWJzdHIoMCw2MikrXCItX1wiKTtmb3IoYz0wOzYqZC5sZW5ndGg8aDspZCs9Zi5jaGFyQXQoKGdeYVtjXT4+PmUpPj4+MjYpLDY+ZT8oZz1hW2NdPDw2LWUsZSs9MjYsYysrKTooZzw8PTYsZS09Nik7Zm9yKDtkLmxlbmd0aCYzJiYhYjspZCs9XCI9XCI7cmV0dXJuIGR9LHRvQml0czpmdW5jdGlvbihhLGIpe2E9YS5yZXBsYWNlKC9cXHN8PS9nLFwiXCIpO3ZhciBjPVtdLGQsZT0wLGY9c2pjbC5jb2RlYy5iYXNlNjQuUyxnPTAsaDtiJiYoZj1mLnN1YnN0cigwLDYyKStcIi1fXCIpO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspe2g9Zi5pbmRleE9mKGEuY2hhckF0KGQpKTtcbmlmKDA+aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcInRoaXMgaXNuJ3QgYmFzZTY0IVwiKTsyNjxlPyhlLT0yNixjLnB1c2goZ15oPj4+ZSksZz1oPDwzMi1lKTooZSs9NixnXj1oPDwzMi1lKX1lJjU2JiZjLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKGUmNTYsZywxKSk7cmV0dXJuIGN9fTtzamNsLmNvZGVjLmJhc2U2NHVybD17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGEsMSwxKX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3JldHVybiBzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYSwxKX19O3NqY2wuaGFzaC5zaGEyNTY9ZnVuY3Rpb24oYSl7dGhpcy5iWzBdfHx0aGlzLkMoKTthPyh0aGlzLmc9YS5nLnNsaWNlKDApLHRoaXMuZj1hLmYuc2xpY2UoMCksdGhpcy5jPWEuYyk6dGhpcy5yZXNldCgpfTtzamNsLmhhc2guc2hhMjU2Lmhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuKG5ldyBzamNsLmhhc2guc2hhMjU2KS51cGRhdGUoYSkuZmluYWxpemUoKX07XG5zamNsLmhhc2guc2hhMjU2LnByb3RvdHlwZT17YmxvY2tTaXplOjUxMixyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTUxMitiLSg1MTIrYiYweDFmZik7Yjw9YTtiKz01MTIpdGhpcy5sKGQuc3ViYXJyYXkoMTYqZSxcbjE2KihlKzEpKSksZSs9MTtjLnNwbGljZSgwLDE2KmUpfWVsc2UgZm9yKGI9NTEyK2ItKDUxMitiJjB4MWZmKTtiPD1hO2IrPTUxMil0aGlzLmwoYy5zcGxpY2UoMCwxNikpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5mLGM9dGhpcy5nLGI9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoYT1iLmxlbmd0aCsyO2EmMTU7YSsrKWIucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMTYpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10sYjpbXSxDOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gMHgxMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSl8MH1mb3IodmFyIGI9MCxjPTIsZCxlOzY0PmI7YysrKXtlPSEwO2ZvcihkPTI7ZCpkPD1jO2QrKylpZigwPT09YyVkKXtlPVxuITE7YnJlYWt9ZSYmKDg+YiYmKHRoaXMub1tiXT1hKE1hdGgucG93KGMsLjUpKSksdGhpcy5iW2JdPWEoTWF0aC5wb3coYywxLzMpKSxiKyspfX0sbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzLmcsZj10aGlzLmIsZz1lWzBdLGg9ZVsxXSxrPWVbMl0sbj1lWzNdLGw9ZVs0XSxtPWVbNV0scD1lWzZdLHo9ZVs3XTtmb3IoYj0wOzY0PmI7YisrKTE2PmI/Yz1hW2JdOihjPWFbYisxJjE1XSxkPWFbYisxNCYxNV0sYz1hW2ImMTVdPShjPj4+N15jPj4+MTheYz4+PjNeYzw8MjVeYzw8MTQpKyhkPj4+MTdeZD4+PjE5XmQ+Pj4xMF5kPDwxNV5kPDwxMykrYVtiJjE1XSthW2IrOSYxNV18MCksYz1jK3orKGw+Pj42Xmw+Pj4xMV5sPj4+MjVebDw8MjZebDw8MjFebDw8NykrKHBebCYobV5wKSkrZltiXSx6PXAscD1tLG09bCxsPW4rY3wwLG49ayxrPWgsaD1nLGc9YysoaCZrXm4mKGheaykpKyhoPj4+Ml5oPj4+MTNeaD4+PjIyXmg8PDMwXmg8PDE5Xmg8PDEwKXwwO2VbMF09ZVswXStnfFxuMDtlWzFdPWVbMV0raHwwO2VbMl09ZVsyXStrfDA7ZVszXT1lWzNdK258MDtlWzRdPWVbNF0rbHwwO2VbNV09ZVs1XSttfDA7ZVs2XT1lWzZdK3B8MDtlWzddPWVbN10renwwfX07c2pjbC5oYXNoLnNoYTUxMj1mdW5jdGlvbihhKXt0aGlzLmJbMF18fHRoaXMuQygpO2E/KHRoaXMuZz1hLmcuc2xpY2UoMCksdGhpcy5mPWEuZi5zbGljZSgwKSx0aGlzLmM9YS5jKTp0aGlzLnJlc2V0KCl9O3NqY2wuaGFzaC5zaGE1MTIuaGFzaD1mdW5jdGlvbihhKXtyZXR1cm4obmV3IHNqY2wuaGFzaC5zaGE1MTIpLnVwZGF0ZShhKS5maW5hbGl6ZSgpfTtcbnNqY2wuaGFzaC5zaGE1MTIucHJvdG90eXBlPXtibG9ja1NpemU6MTAyNCxyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTEwMjQrYi0oMTAyNCtiJjEwMjMpO2I8PWE7Yis9MTAyNCl0aGlzLmwoZC5zdWJhcnJheSgzMipcbmUsMzIqKGUrMSkpKSxlKz0xO2Muc3BsaWNlKDAsMzIqZSl9ZWxzZSBmb3IoYj0xMDI0K2ItKDEwMjQrYiYxMDIzKTtiPD1hO2IrPTEwMjQpdGhpcy5sKGMuc3BsaWNlKDAsMzIpKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuZixjPXRoaXMuZyxiPXNqY2wuYml0QXJyYXkuY29uY2F0KGIsW3NqY2wuYml0QXJyYXkucGFydGlhbCgxLDEpXSk7Zm9yKGE9Yi5sZW5ndGgrNDthJjMxO2ErKyliLnB1c2goMCk7Yi5wdXNoKDApO2IucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMzIpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10saWE6WzEyMzcyMjMyLDEzMjgxMDgzLDk3NjI4NTksMTkxNDYwOSwxNTEwNjc2OSw0MDkwOTExLDQzMDgzMzEsODI2NjEwNV0sYjpbXSxrYTpbMjY2NjAxOCwxNTY4OTE2NSw1MDYxNDIzLDkwMzQ2ODQsXG40NzY0OTg0LDM4MDk1MywxNjU4Nzc5LDcxNzY0NzIsMTk3MTg2LDczNjg2MzgsMTQ5ODc5MTYsMTY3NTc5ODYsODA5NjExMSwxNDgwMzY5LDEzMDQ2MzI1LDY4OTExNTYsMTU4MTMzMzAsNTE4NzA0Myw5MjI5NzQ5LDExMzEyMjI5LDI4MTg2NzcsMTA5Mzc0NzUsNDMyNDMwOCwxMTM1NTQxLDY3NDE5MzEsMTE4MDkyOTYsMTY0NTgwNDcsMTU2NjY5MTYsMTEwNDY4NTAsNjk4MTQ5LDIyOTk5OSw5NDU3NzYsMTM3NzQ4NDQsMjU0MTg2MiwxMjg1NjA0NSw5ODEwOTExLDExNDk0MzY2LDc4NDQ1MjAsMTU1NzY4MDYsODUzMzMwNywxNTc5NTA0NCw0MzM3NjY1LDE2MjkxNzI5LDU1NTM3MTIsMTU2ODQxMjAsNjY2MjQxNiw3NDEzODAyLDEyMzA4OTIwLDEzODE2MDA4LDQzMDM2OTksOTM2NjQyNSwxMDE3NjY4MCwxMzE5NTg3NSw0Mjk1MzcxLDY1NDYyOTEsMTE3MTI2NzUsMTU3MDg5MjQsMTUxOTQ1NiwxNTc3MjUzMCw2NTY4NDI4LDY0OTU3ODQsODU2ODI5NywxMzAwNzEyNSw3NDkyMzk1LDI1MTUzNTYsXG4xMjYzMjU4MywxNDc0MDI1NCw3MjYyNTg0LDE1MzU5MzAsMTMxNDYyNzgsMTYzMjE5NjYsMTg1MzIxMSwyOTQyNzYsMTMwNTEwMjcsMTMyMjE1NjQsMTA1MTk4MCw0MDgwMzEwLDY2NTE0MzQsMTQwODg5NDAsNDY3NTYwN10sQzpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIDB4MTAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpfDB9ZnVuY3Rpb24gYihhKXtyZXR1cm4gMHgxMDAwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKSYyNTV9Zm9yKHZhciBjPTAsZD0yLGUsZjs4MD5jO2QrKyl7Zj0hMDtmb3IoZT0yO2UqZTw9ZDtlKyspaWYoMD09PWQlZSl7Zj0hMTticmVha31mJiYoOD5jJiYodGhpcy5vWzIqY109YShNYXRoLnBvdyhkLC41KSksdGhpcy5vWzIqYysxXT1iKE1hdGgucG93KGQsLjUpKTw8MjR8dGhpcy5pYVtjXSksdGhpcy5iWzIqY109YShNYXRoLnBvdyhkLDEvMykpLHRoaXMuYlsyKmMrMV09YihNYXRoLnBvdyhkLDEvMykpPDwyNHx0aGlzLmthW2NdLGMrKyl9fSxsOmZ1bmN0aW9uKGEpe3ZhciBiLFxuYyxkPXRoaXMuZyxlPXRoaXMuYixmPWRbMF0sZz1kWzFdLGg9ZFsyXSxrPWRbM10sbj1kWzRdLGw9ZFs1XSxtPWRbNl0scD1kWzddLHo9ZFs4XSxBPWRbOV0sQz1kWzEwXSxCPWRbMTFdLEQ9ZFsxMl0sUD1kWzEzXSxlYT1kWzE0XSxRPWRbMTVdLHQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dD1BcnJheSgxNjApO2Zvcih2YXIgcj0wOzMyPnI7cisrKXRbcl09YVtyXX1lbHNlIHQ9YTt2YXIgcj1mLHU9ZyxHPWgsRT1rLEg9bixGPWwsVj1tLEk9cCx3PXosdj1BLFI9QyxKPUIsUz1ELEs9UCxXPWVhLEw9UTtmb3IoYT0wOzgwPmE7YSsrKXtpZigxNj5hKWI9dFsyKmFdLGM9dFsyKmErMV07ZWxzZXtjPXRbMiooYS0xNSldO3ZhciBxPXRbMiooYS0xNSkrMV07Yj0ocTw8MzF8Yz4+PjEpXihxPDwyNHxjPj4+OCleYz4+Pjc7dmFyIHg9KGM8PDMxfHE+Pj4xKV4oYzw8MjR8cT4+PjgpXihjPDwyNXxxPj4+Nyk7Yz10WzIqKGEtMildO3ZhciB5PXRbMiooYS0yKSsxXSxcbnE9KHk8PDEzfGM+Pj4xOSleKGM8PDN8eT4+PjI5KV5jPj4+Nix5PShjPDwxM3x5Pj4+MTkpXih5PDwzfGM+Pj4yOSleKGM8PDI2fHk+Pj42KSxYPXRbMiooYS03KV0sWT10WzIqKGEtMTYpXSxNPXRbMiooYS0xNikrMV07Yz14K3RbMiooYS03KSsxXTtiPWIrWCsoYz4+PjA8eD4+PjA/MTowKTtjKz15O2IrPXErKGM+Pj4wPHk+Pj4wPzE6MCk7Yys9TTtiKz1ZKyhjPj4+MDxNPj4+MD8xOjApfXRbMiphXT1ifD0wO3RbMiphKzFdPWN8PTA7dmFyIFg9dyZSXn53JlMsZmE9diZKXn52JksseT1yJkdeciZIXkcmSCxqYT11JkVedSZGXkUmRixZPSh1PDw0fHI+Pj4yOCleKHI8PDMwfHU+Pj4yKV4ocjw8MjV8dT4+PjcpLE09KHI8PDR8dT4+PjI4KV4odTw8MzB8cj4+PjIpXih1PDwyNXxyPj4+Nyksa2E9ZVsyKmFdLGdhPWVbMiphKzFdLHE9TCsoKHc8PDE4fHY+Pj4xNCleKHc8PDE0fHY+Pj4xOCleKHY8PDIzfHc+Pj45KSkseD1XKygodjw8MTh8dz4+PjE0KV4odjw8MTR8dz4+PjE4KV4odzw8XG4yM3x2Pj4+OSkpKyhxPj4+MDxMPj4+MD8xOjApLHE9cStmYSx4PXgrKFgrKHE+Pj4wPGZhPj4+MD8xOjApKSxxPXErZ2EseD14KyhrYSsocT4+PjA8Z2E+Pj4wPzE6MCkpLHE9cStjfDAseD14KyhiKyhxPj4+MDxjPj4+MD8xOjApKTtjPU0ramE7Yj1ZK3krKGM+Pj4wPE0+Pj4wPzE6MCk7Vz1TO0w9SztTPVI7Sz1KO1I9dztKPXY7dj1JK3F8MDt3PVYreCsodj4+PjA8ST4+PjA/MTowKXwwO1Y9SDtJPUY7SD1HO0Y9RTtHPXI7RT11O3U9cStjfDA7cj14K2IrKHU+Pj4wPHE+Pj4wPzE6MCl8MH1nPWRbMV09Zyt1fDA7ZFswXT1mK3IrKGc+Pj4wPHU+Pj4wPzE6MCl8MDtrPWRbM109aytFfDA7ZFsyXT1oK0crKGs+Pj4wPEU+Pj4wPzE6MCl8MDtsPWRbNV09bCtGfDA7ZFs0XT1uK0grKGw+Pj4wPEY+Pj4wPzE6MCl8MDtwPWRbN109cCtJfDA7ZFs2XT1tK1YrKHA+Pj4wPEk+Pj4wPzE6MCl8MDtBPWRbOV09QSt2fDA7ZFs4XT16K3crKEE+Pj4wPHY+Pj4wPzE6MCl8MDtCPWRbMTFdPUIrSnxcbjA7ZFsxMF09QytSKyhCPj4+MDxKPj4+MD8xOjApfDA7UD1kWzEzXT1QK0t8MDtkWzEyXT1EK1MrKFA+Pj4wPEs+Pj4wPzE6MCl8MDtRPWRbMTVdPVErTHwwO2RbMTRdPWVhK1crKFE+Pj4wPEw+Pj4wPzE6MCl8MH19O1xuc2pjbC5tb2RlLmNjbT17bmFtZTpcImNjbVwiLEY6W10sbGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7c2pjbC5tb2RlLmNjbS5GLnB1c2goYSl9LHVuTGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT1zamNsLm1vZGUuY2NtLkYuaW5kZXhPZihhKTstMTxhJiZzamNsLm1vZGUuY2NtLkYuc3BsaWNlKGEsMSl9LGRhOmZ1bmN0aW9uKGEpe3ZhciBiPXNqY2wubW9kZS5jY20uRi5zbGljZSgpLGM7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrPTEpYltjXShhKX0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc9Yi5zbGljZSgwKSxoPXNqY2wuYml0QXJyYXksaz1oLmJpdExlbmd0aChjKS84LG49aC5iaXRMZW5ndGgoZykvODtlPWV8fDY0O2Q9ZHx8W107aWYoNz5rKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXNcIik7Zm9yKGY9Mjs0PmYmJm4+Pj44KmY7ZisrKTtmPDE1LWsmJihmPTE1LWspO2M9aC5jbGFtcChjLFxuOCooMTUtZikpO2I9c2pjbC5tb2RlLmNjbS5VKGEsYixjLGQsZSxmKTtnPXNqY2wubW9kZS5jY20uVihhLGcsYyxiLGUsZik7cmV0dXJuIGguY29uY2F0KGcuZGF0YSxnLnRhZyl9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtlPWV8fDY0O2Q9ZHx8W107dmFyIGY9c2pjbC5iaXRBcnJheSxnPWYuYml0TGVuZ3RoKGMpLzgsaD1mLmJpdExlbmd0aChiKSxrPWYuY2xhbXAoYixoLWUpLG49Zi5iaXRTbGljZShiLGgtZSksaD0oaC1lKS84O2lmKDc+Zyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaXYgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzXCIpO2ZvcihiPTI7ND5iJiZoPj4+OCpiO2IrKyk7YjwxNS1nJiYoYj0xNS1nKTtjPWYuY2xhbXAoYyw4KigxNS1iKSk7az1zamNsLm1vZGUuY2NtLlYoYSxrLGMsbixlLGIpO2E9c2pjbC5tb2RlLmNjbS5VKGEsay5kYXRhLGMsZCxlLGIpO2lmKCFmLmVxdWFsKGsudGFnLGEpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5jb3JydXB0KFwiY2NtOiB0YWcgZG9lc24ndCBtYXRjaFwiKTtcbnJldHVybiBrLmRhdGF9LG1hOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1bXSxoPXNqY2wuYml0QXJyYXksaz1oLlA7ZD1baC5wYXJ0aWFsKDgsKGIubGVuZ3RoPzY0OjApfGQtMjw8MnxmLTEpXTtkPWguY29uY2F0KGQsYyk7ZFszXXw9ZTtkPWEuZW5jcnlwdChkKTtpZihiLmxlbmd0aClmb3IoYz1oLmJpdExlbmd0aChiKS84LDY1Mjc5Pj1jP2c9W2gucGFydGlhbCgxNixjKV06MHhmZmZmZmZmZj49YyYmKGc9aC5jb25jYXQoW2gucGFydGlhbCgxNiw2NTUzNCldLFtjXSkpLGc9aC5jb25jYXQoZyxiKSxiPTA7YjxnLmxlbmd0aDtiKz00KWQ9YS5lbmNyeXB0KGsoZCxnLnNsaWNlKGIsYis0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZH0sVTpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9c2pjbC5iaXRBcnJheSxoPWcuUDtlLz04O2lmKGUlMnx8ND5lfHwxNjxlKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpbnZhbGlkIHRhZyBsZW5ndGhcIik7XG5pZigweGZmZmZmZmZmPGQubGVuZ3RofHwweGZmZmZmZmZmPGIubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJjY206IGNhbid0IGRlYWwgd2l0aCA0R2lCIG9yIG1vcmUgZGF0YVwiKTtjPXNqY2wubW9kZS5jY20ubWEoYSxkLGMsZSxnLmJpdExlbmd0aChiKS84LGYpO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKz00KWM9YS5lbmNyeXB0KGgoYyxiLnNsaWNlKGQsZCs0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZy5jbGFtcChjLDgqZSl9LFY6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGg9c2pjbC5iaXRBcnJheTtnPWguUDt2YXIgaz1iLmxlbmd0aCxuPWguYml0TGVuZ3RoKGIpLGw9ay81MCxtPWw7Yz1oLmNvbmNhdChbaC5wYXJ0aWFsKDgsZi0xKV0sYykuY29uY2F0KFswLDAsMF0pLnNsaWNlKDAsNCk7ZD1oLmJpdFNsaWNlKGcoZCxhLmVuY3J5cHQoYykpLDAsZSk7aWYoIWspcmV0dXJue3RhZzpkLGRhdGE6W119O2ZvcihnPTA7ZzxrO2crPTQpZz5sJiYoc2pjbC5tb2RlLmNjbS5kYShnL1xuayksbCs9bSksY1szXSsrLGU9YS5lbmNyeXB0KGMpLGJbZ11ePWVbMF0sYltnKzFdXj1lWzFdLGJbZysyXV49ZVsyXSxiW2crM11ePWVbM107cmV0dXJue3RhZzpkLGRhdGE6aC5jbGFtcChiLG4pfX19O3NqY2wubWlzYy5obWFjPWZ1bmN0aW9uKGEsYil7dGhpcy5XPWI9Ynx8c2pjbC5oYXNoLnNoYTI1Njt2YXIgYz1bW10sW11dLGQsZT1iLnByb3RvdHlwZS5ibG9ja1NpemUvMzI7dGhpcy5CPVtuZXcgYixuZXcgYl07YS5sZW5ndGg+ZSYmKGE9Yi5oYXNoKGEpKTtmb3IoZD0wO2Q8ZTtkKyspY1swXVtkXT1hW2RdXjkwOTUyMjQ4NixjWzFdW2RdPWFbZF1eMTU0OTU1NjgyODt0aGlzLkJbMF0udXBkYXRlKGNbMF0pO3RoaXMuQlsxXS51cGRhdGUoY1sxXSk7dGhpcy5PPW5ldyBiKHRoaXMuQlswXSl9O1xuc2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmVuY3J5cHQ9c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLm1hYz1mdW5jdGlvbihhKXtpZih0aGlzLlopdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJlbmNyeXB0IG9uIGFscmVhZHkgdXBkYXRlZCBobWFjIGNhbGxlZCFcIik7dGhpcy51cGRhdGUoYSk7cmV0dXJuIHRoaXMuZGlnZXN0KGEpfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLk89bmV3IHRoaXMuVyh0aGlzLkJbMF0pO3RoaXMuWj0hMX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLlo9ITA7dGhpcy5PLnVwZGF0ZShhKX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuTy5maW5hbGl6ZSgpLGE9KG5ldyB0aGlzLlcodGhpcy5CWzFdKSkudXBkYXRlKGEpLmZpbmFsaXplKCk7dGhpcy5yZXNldCgpO3JldHVybiBhfTtcbnNqY2wubWlzYy5wYmtkZjI9ZnVuY3Rpb24oYSxiLGMsZCxlKXtjPWN8fDFFNDtpZigwPmR8fDA+Yyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgcGFyYW1zIHRvIHBia2RmMlwiKTtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO1wic3RyaW5nXCI9PT10eXBlb2YgYiYmKGI9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhiKSk7ZT1lfHxzamNsLm1pc2MuaG1hYzthPW5ldyBlKGEpO3ZhciBmLGcsaCxrLG49W10sbD1zamNsLmJpdEFycmF5O2ZvcihrPTE7MzIqbi5sZW5ndGg8KGR8fDEpO2srKyl7ZT1mPWEuZW5jcnlwdChsLmNvbmNhdChiLFtrXSkpO2ZvcihnPTE7ZzxjO2crKylmb3IoZj1hLmVuY3J5cHQoZiksaD0wO2g8Zi5sZW5ndGg7aCsrKWVbaF1ePWZbaF07bj1uLmNvbmNhdChlKX1kJiYobj1sLmNsYW1wKG4sZCkpO3JldHVybiBufTtcbnNqY2wucHJuZz1mdW5jdGlvbihhKXt0aGlzLmg9W25ldyBzamNsLmhhc2guc2hhMjU2XTt0aGlzLnM9WzBdO3RoaXMuTj0wO3RoaXMuRz17fTt0aGlzLk09MDt0aGlzLlQ9e307dGhpcy5YPXRoaXMuaT10aGlzLnU9dGhpcy5mYT0wO3RoaXMuYj1bMCwwLDAsMCwwLDAsMCwwXTt0aGlzLm09WzAsMCwwLDBdO3RoaXMuSz12b2lkIDA7dGhpcy5MPWE7dGhpcy5EPSExO3RoaXMuSj17cHJvZ3Jlc3M6e30sc2VlZGVkOnt9fTt0aGlzLkE9dGhpcy5lYT0wO3RoaXMuSD0xO3RoaXMuST0yO3RoaXMuYWE9MHgxMDAwMDt0aGlzLlI9WzAsNDgsNjQsOTYsMTI4LDE5MiwweDEwMCwzODQsNTEyLDc2OCwxMDI0XTt0aGlzLmJhPTNFNDt0aGlzLiQ9ODB9O1xuc2pjbC5wcm5nLnByb3RvdHlwZT17cmFuZG9tV29yZHM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkO2Q9dGhpcy5pc1JlYWR5KGIpO3ZhciBlO2lmKGQ9PT10aGlzLkEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLm5vdFJlYWR5KFwiZ2VuZXJhdG9yIGlzbid0IHNlZWRlZFwiKTtpZihkJnRoaXMuSSl7ZD0hKGQmdGhpcy5IKTtlPVtdO3ZhciBmPTAsZzt0aGlzLlg9ZVswXT0obmV3IERhdGUpLnZhbHVlT2YoKSt0aGlzLmJhO2ZvcihnPTA7MTY+ZztnKyspZS5wdXNoKDB4MTAwMDAwMDAwKk1hdGgucmFuZG9tKCl8MCk7Zm9yKGc9MDtnPHRoaXMuaC5sZW5ndGgmJihlPWUuY29uY2F0KHRoaXMuaFtnXS5maW5hbGl6ZSgpKSxmKz10aGlzLnNbZ10sdGhpcy5zW2ddPTAsZHx8ISh0aGlzLk4mMTw8ZykpO2crKyk7dGhpcy5OPj0xPDx0aGlzLmgubGVuZ3RoJiYodGhpcy5oLnB1c2gobmV3IHNqY2wuaGFzaC5zaGEyNTYpLHRoaXMucy5wdXNoKDApKTt0aGlzLmktPWY7Zj50aGlzLnUmJih0aGlzLnU9XG5mKTt0aGlzLk4rKzt0aGlzLmI9c2pjbC5oYXNoLnNoYTI1Ni5oYXNoKHRoaXMuYi5jb25jYXQoZSkpO3RoaXMuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKHRoaXMuYik7Zm9yKGQ9MDs0PmQmJih0aGlzLm1bZF09dGhpcy5tW2RdKzF8MCwhdGhpcy5tW2RdKTtkKyspO31mb3IoZD0wO2Q8YTtkKz00KTA9PT0oZCsxKSV0aGlzLmFhJiZiYSh0aGlzKSxlPU4odGhpcyksYy5wdXNoKGVbMF0sZVsxXSxlWzJdLGVbM10pO2JhKHRoaXMpO3JldHVybiBjLnNsaWNlKDAsYSl9LHNldERlZmF1bHRQYXJhbm9pYTpmdW5jdGlvbihhLGIpe2lmKDA9PT1hJiZcIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmdcIiE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJTZXR0aW5nIHBhcmFub2lhPTAgd2lsbCBydWluIHlvdXIgc2VjdXJpdHk7IHVzZSBpdCBvbmx5IGZvciB0ZXN0aW5nXCIpO3RoaXMuTD1hfSxhZGRFbnRyb3B5OmZ1bmN0aW9uKGEsXG5iLGMpe2M9Y3x8XCJ1c2VyXCI7dmFyIGQsZSxmPShuZXcgRGF0ZSkudmFsdWVPZigpLGc9dGhpcy5HW2NdLGg9dGhpcy5pc1JlYWR5KCksaz0wO2Q9dGhpcy5UW2NdO3ZvaWQgMD09PWQmJihkPXRoaXMuVFtjXT10aGlzLmZhKyspO3ZvaWQgMD09PWcmJihnPXRoaXMuR1tjXT0wKTt0aGlzLkdbY109KHRoaXMuR1tjXSsxKSV0aGlzLmgubGVuZ3RoO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcIm51bWJlclwiOnZvaWQgMD09PWImJihiPTEpO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMSxiLGYsMSxhfDBdKTticmVhaztjYXNlIFwib2JqZWN0XCI6Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk7aWYoXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiPT09Yyl7ZT1bXTtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWUucHVzaChhW2NdKTthPWV9ZWxzZSBmb3IoXCJbb2JqZWN0IEFycmF5XVwiIT09YyYmKGs9MSksYz0wO2M8YS5sZW5ndGgmJiFrO2MrKylcIm51bWJlclwiIT09dHlwZW9mIGFbY10mJlxuKGs9MSk7aWYoIWspe2lmKHZvaWQgMD09PWIpZm9yKGM9Yj0wO2M8YS5sZW5ndGg7YysrKWZvcihlPWFbY107MDxlOyliKyssZT1lPj4+MTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDIsYixmLGEubGVuZ3RoXS5jb25jYXQoYSkpfWJyZWFrO2Nhc2UgXCJzdHJpbmdcIjp2b2lkIDA9PT1iJiYoYj1hLmxlbmd0aCk7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywzLGIsZixhLmxlbmd0aF0pO3RoaXMuaFtnXS51cGRhdGUoYSk7YnJlYWs7ZGVmYXVsdDprPTF9aWYoayl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwicmFuZG9tOiBhZGRFbnRyb3B5IG9ubHkgc3VwcG9ydHMgbnVtYmVyLCBhcnJheSBvZiBudW1iZXJzIG9yIHN0cmluZ1wiKTt0aGlzLnNbZ10rPWI7dGhpcy5pKz1iO2g9PT10aGlzLkEmJih0aGlzLmlzUmVhZHkoKSE9PXRoaXMuQSYmY2EoXCJzZWVkZWRcIixNYXRoLm1heCh0aGlzLnUsdGhpcy5pKSksY2EoXCJwcm9ncmVzc1wiLHRoaXMuZ2V0UHJvZ3Jlc3MoKSkpfSxcbmlzUmVhZHk6ZnVuY3Rpb24oYSl7YT10aGlzLlJbdm9pZCAwIT09YT9hOnRoaXMuTF07cmV0dXJuIHRoaXMudSYmdGhpcy51Pj1hP3RoaXMuc1swXT50aGlzLiQmJihuZXcgRGF0ZSkudmFsdWVPZigpPnRoaXMuWD90aGlzLkl8dGhpcy5IOnRoaXMuSDp0aGlzLmk+PWE/dGhpcy5JfHRoaXMuQTp0aGlzLkF9LGdldFByb2dyZXNzOmZ1bmN0aW9uKGEpe2E9dGhpcy5SW2E/YTp0aGlzLkxdO3JldHVybiB0aGlzLnU+PWE/MTp0aGlzLmk+YT8xOnRoaXMuaS9hfSxzdGFydENvbGxlY3RvcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5EKXt0aGlzLmE9e2xvYWRUaW1lQ29sbGVjdG9yOk8odGhpcyx0aGlzLmxhKSxtb3VzZUNvbGxlY3RvcjpPKHRoaXMsdGhpcy5uYSksa2V5Ym9hcmRDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuamEpLGFjY2VsZXJvbWV0ZXJDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuY2EpLHRvdWNoQ29sbGVjdG9yOk8odGhpcyx0aGlzLnBhKX07aWYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsXG50aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRldmljZW1vdGlvblwiLHRoaXMuYS5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMuYS50b3VjaENvbGxlY3RvciwhMSk7ZWxzZSBpZihkb2N1bWVudC5hdHRhY2hFdmVudClkb2N1bWVudC5hdHRhY2hFdmVudChcIm9ubG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJvbm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3Rvcik7ZWxzZSB0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwiY2FuJ3QgYXR0YWNoIGV2ZW50XCIpO1xudGhpcy5EPSEwfX0sc3RvcENvbGxlY3RvcnM6ZnVuY3Rpb24oKXt0aGlzLkQmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcj8od2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJkZXZpY2Vtb3Rpb25cIix0aGlzLmEuYWNjZWxlcm9tZXRlckNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLmEudG91Y2hDb2xsZWN0b3IsITEpKTpkb2N1bWVudC5kZXRhY2hFdmVudCYmKGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25sb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yKSxkb2N1bWVudC5kZXRhY2hFdmVudChcIm9ubW91c2Vtb3ZlXCIsXG50aGlzLmEubW91c2VDb2xsZWN0b3IpLGRvY3VtZW50LmRldGFjaEV2ZW50KFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IpKSx0aGlzLkQ9ITEpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dGhpcy5KW2FdW3RoaXMuZWErK109Yn0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT10aGlzLkpbYV0sZj1bXTtmb3IoZCBpbiBlKWUuaGFzT3duUHJvcGVydHkoZCkmJmVbZF09PT1iJiZmLnB1c2goZCk7Zm9yKGM9MDtjPGYubGVuZ3RoO2MrKylkPWZbY10sZGVsZXRlIGVbZF19LGphOmZ1bmN0aW9uKCl7VCh0aGlzLDEpfSxuYTpmdW5jdGlvbihhKXt2YXIgYixjO3RyeXtiPWEueHx8YS5jbGllbnRYfHxhLm9mZnNldFh8fDAsYz1hLnl8fGEuY2xpZW50WXx8YS5vZmZzZXRZfHwwfWNhdGNoKGQpe2M9Yj0wfTAhPWImJjAhPWMmJnRoaXMuYWRkRW50cm9weShbYixjXSwyLFwibW91c2VcIik7VCh0aGlzLDApfSxwYTpmdW5jdGlvbihhKXthPVxuYS50b3VjaGVzWzBdfHxhLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuYWRkRW50cm9weShbYS5wYWdlWHx8YS5jbGllbnRYLGEucGFnZVl8fGEuY2xpZW50WV0sMSxcInRvdWNoXCIpO1QodGhpcywwKX0sbGE6ZnVuY3Rpb24oKXtUKHRoaXMsMil9LGNhOmZ1bmN0aW9uKGEpe2E9YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lnh8fGEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS55fHxhLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkuejtpZih3aW5kb3cub3JpZW50YXRpb24pe3ZhciBiPXdpbmRvdy5vcmllbnRhdGlvbjtcIm51bWJlclwiPT09dHlwZW9mIGImJnRoaXMuYWRkRW50cm9weShiLDEsXCJhY2NlbGVyb21ldGVyXCIpfWEmJnRoaXMuYWRkRW50cm9weShhLDIsXCJhY2NlbGVyb21ldGVyXCIpO1QodGhpcywwKX19O1xuZnVuY3Rpb24gY2EoYSxiKXt2YXIgYyxkPXNqY2wucmFuZG9tLkpbYV0sZT1bXTtmb3IoYyBpbiBkKWQuaGFzT3duUHJvcGVydHkoYykmJmUucHVzaChkW2NdKTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKWVbY10oYil9ZnVuY3Rpb24gVChhLGIpe1widW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2Uubm93P2EuYWRkRW50cm9weSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCksYixcImxvYWR0aW1lXCIpOmEuYWRkRW50cm9weSgobmV3IERhdGUpLnZhbHVlT2YoKSxiLFwibG9hZHRpbWVcIil9ZnVuY3Rpb24gYmEoYSl7YS5iPU4oYSkuY29uY2F0KE4oYSkpO2EuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKGEuYil9ZnVuY3Rpb24gTihhKXtmb3IodmFyIGI9MDs0PmImJihhLm1bYl09YS5tW2JdKzF8MCwhYS5tW2JdKTtiKyspO3JldHVybiBhLksuZW5jcnlwdChhLm0pfVxuZnVuY3Rpb24gTyhhLGIpe3JldHVybiBmdW5jdGlvbigpe2IuYXBwbHkoYSxhcmd1bWVudHMpfX1zamNsLnJhbmRvbT1uZXcgc2pjbC5wcm5nKDYpO1xuYTp0cnl7dmFyIFUsZGEsWixoYTtpZihoYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMpe3ZhciBpYTt0cnl7aWE9cmVxdWlyZShcImNyeXB0b1wiKX1jYXRjaChhKXtpYT1udWxsfWhhPWRhPWlhfWlmKGhhJiZkYS5yYW5kb21CeXRlcylVPWRhLnJhbmRvbUJ5dGVzKDEyOCksVT1uZXcgVWludDMyQXJyYXkoKG5ldyBVaW50OEFycmF5KFUpKS5idWZmZXIpLHNqY2wucmFuZG9tLmFkZEVudHJvcHkoVSwxMDI0LFwiY3J5cHRvWydyYW5kb21CeXRlcyddXCIpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe1o9bmV3IFVpbnQzMkFycmF5KDMyKTtpZih3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaKTtlbHNlIGlmKHdpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFopO1xuZWxzZSBicmVhayBhO3NqY2wucmFuZG9tLmFkZEVudHJvcHkoWiwxMDI0LFwiY3J5cHRvWydnZXRSYW5kb21WYWx1ZXMnXVwiKX19Y2F0Y2goYSl7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5jb25zb2xlJiYoY29uc29sZS5sb2coXCJUaGVyZSB3YXMgYW4gZXJyb3IgY29sbGVjdGluZyBlbnRyb3B5IGZyb20gdGhlIGJyb3dzZXI6XCIpLGNvbnNvbGUubG9nKGEpKX1cbnNqY2wuanNvbj17ZGVmYXVsdHM6e3Y6MSxpdGVyOjFFNCxrczoxMjgsdHM6NjQsbW9kZTpcImNjbVwiLGFkYXRhOlwiXCIsY2lwaGVyOlwiYWVzXCJ9LGhhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb24sZj1lLmooe2l2OnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDQsMCl9LGUuZGVmYXVsdHMpLGc7ZS5qKGYsYyk7Yz1mLmFkYXRhO1wic3RyaW5nXCI9PT10eXBlb2YgZi5zYWx0JiYoZi5zYWx0PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLnNhbHQpKTtcInN0cmluZ1wiPT09dHlwZW9mIGYuaXYmJihmLml2PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLml2KSk7aWYoIXNqY2wubW9kZVtmLm1vZGVdfHwhc2pjbC5jaXBoZXJbZi5jaXBoZXJdfHxcInN0cmluZ1wiPT09dHlwZW9mIGEmJjEwMD49Zi5pdGVyfHw2NCE9PWYudHMmJjk2IT09Zi50cyYmMTI4IT09Zi50c3x8MTI4IT09Zi5rcyYmMTkyIT09Zi5rcyYmMHgxMDAhPT1mLmtzfHwyPmYuaXYubGVuZ3RofHxcbjQ8Zi5pdi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGVuY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVyc1wiKTtcInN0cmluZ1wiPT09dHlwZW9mIGE/KGc9c2pjbC5taXNjLmNhY2hlZFBia2RmMihhLGYpLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSxmLnNhbHQ9Zy5zYWx0KTpzamNsLmVjYyYmYSBpbnN0YW5jZW9mIHNqY2wuZWNjLmVsR2FtYWwucHVibGljS2V5JiYoZz1hLmtlbSgpLGYua2VtdGFnPWcudGFnLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiJiYoYj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGMmJihmLmFkYXRhPWM9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhjKSk7Zz1uZXcgc2pjbC5jaXBoZXJbZi5jaXBoZXJdKGEpO2UuaihkLGYpO2Qua2V5PWE7Zi5jdD1cImNjbVwiPT09Zi5tb2RlJiZzamNsLmFycmF5QnVmZmVyJiZzamNsLmFycmF5QnVmZmVyLmNjbSYmXG5iIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZW5jcnlwdChnLGIsZi5pdixjLGYudHMpOnNqY2wubW9kZVtmLm1vZGVdLmVuY3J5cHQoZyxiLGYuaXYsYyxmLnRzKTtyZXR1cm4gZn0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1zamNsLmpzb24sZj1lLmhhLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gZS5lbmNvZGUoZil9LGdhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb247Yj1lLmooZS5qKGUuaih7fSxlLmRlZmF1bHRzKSxiKSxjLCEwKTt2YXIgZixnO2Y9Yi5hZGF0YTtcInN0cmluZ1wiPT09dHlwZW9mIGIuc2FsdCYmKGIuc2FsdD1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5zYWx0KSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiLml2JiYoYi5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5pdikpO2lmKCFzamNsLm1vZGVbYi5tb2RlXXx8IXNqY2wuY2lwaGVyW2IuY2lwaGVyXXx8XCJzdHJpbmdcIj09PVxudHlwZW9mIGEmJjEwMD49Yi5pdGVyfHw2NCE9PWIudHMmJjk2IT09Yi50cyYmMTI4IT09Yi50c3x8MTI4IT09Yi5rcyYmMTkyIT09Yi5rcyYmMHgxMDAhPT1iLmtzfHwhYi5pdnx8Mj5iLml2Lmxlbmd0aHx8NDxiLml2Lmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjcnlwdDogaW52YWxpZCBwYXJhbWV0ZXJzXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYT8oZz1zamNsLm1pc2MuY2FjaGVkUGJrZGYyKGEsYiksYT1nLmtleS5zbGljZSgwLGIua3MvMzIpLGIuc2FsdD1nLnNhbHQpOnNqY2wuZWNjJiZhIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5zZWNyZXRLZXkmJihhPWEudW5rZW0oc2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIua2VtdGFnKSkuc2xpY2UoMCxiLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBmJiYoZj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGYpKTtnPW5ldyBzamNsLmNpcGhlcltiLmNpcGhlcl0oYSk7Zj1cImNjbVwiPT09XG5iLm1vZGUmJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZiLmN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZGVjcnlwdChnLGIuY3QsYi5pdixiLnRhZyxmLGIudHMpOnNqY2wubW9kZVtiLm1vZGVdLmRlY3J5cHQoZyxiLmN0LGIuaXYsZixiLnRzKTtlLmooZCxiKTtkLmtleT1hO3JldHVybiAxPT09Yy5yYXc/ZjpzamNsLmNvZGVjLnV0ZjhTdHJpbmcuZnJvbUJpdHMoZil9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9c2pjbC5qc29uO3JldHVybiBlLmdhKGEsZS5kZWNvZGUoYiksYyxkKX0sZW5jb2RlOmZ1bmN0aW9uKGEpe3ZhciBiLGM9XCJ7XCIsZD1cIlwiO2ZvcihiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSl7aWYoIWIubWF0Y2goL15bYS16MC05XSskL2kpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBlbmNvZGU6IGludmFsaWQgcHJvcGVydHkgbmFtZVwiKTtjKz1kKydcIicrXG5iKydcIjonO2Q9XCIsXCI7c3dpdGNoKHR5cGVvZiBhW2JdKXtjYXNlIFwibnVtYmVyXCI6Y2FzZSBcImJvb2xlYW5cIjpjKz1hW2JdO2JyZWFrO2Nhc2UgXCJzdHJpbmdcIjpjKz0nXCInK2VzY2FwZShhW2JdKSsnXCInO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpjKz0nXCInK3NqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGFbYl0sMCkrJ1wiJzticmVhaztkZWZhdWx0OnRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJqc29uIGVuY29kZTogdW5zdXBwb3J0ZWQgdHlwZVwiKTt9fXJldHVybiBjK1wifVwifSxkZWNvZGU6ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccy9nLFwiXCIpO2lmKCFhLm1hdGNoKC9eXFx7LipcXH0kLykpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uIVwiKTthPWEucmVwbGFjZSgvXlxce3xcXH0kL2csXCJcIikuc3BsaXQoLywvKTt2YXIgYj17fSxjLGQ7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoIShkPWFbY10ubWF0Y2goL15cXHMqKD86KFtcIiddPykoW2Etel1bYS16MC05XSopXFwxKVxccyo6XFxzKig/OigtP1xcZCspfFwiKFthLXowLTkrXFwvJSpfLkA9XFwtXSopXCJ8KHRydWV8ZmFsc2UpKSQvaSkpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNvZGU6IHRoaXMgaXNuJ3QganNvbiFcIik7XG5udWxsIT1kWzNdP2JbZFsyXV09cGFyc2VJbnQoZFszXSwxMCk6bnVsbCE9ZFs0XT9iW2RbMl1dPWRbMl0ubWF0Y2goL14oY3R8YWRhdGF8c2FsdHxpdikkLyk/c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGRbNF0pOnVuZXNjYXBlKGRbNF0pOm51bGwhPWRbNV0mJihiW2RbMl1dPVwidHJ1ZVwiPT09ZFs1XSl9cmV0dXJuIGJ9LGo6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWEmJihhPXt9KTtpZih2b2lkIDA9PT1iKXJldHVybiBhO2Zvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkpe2lmKGMmJnZvaWQgMCE9PWFbZF0mJmFbZF0hPT1iW2RdKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwicmVxdWlyZWQgcGFyYW1ldGVyIG92ZXJyaWRkZW5cIik7YVtkXT1iW2RdfXJldHVybiBhfSxyYTpmdW5jdGlvbihhLGIpe3ZhciBjPXt9LGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZhW2RdIT09YltkXSYmKGNbZF09YVtkXSk7cmV0dXJuIGN9LHFhOmZ1bmN0aW9uKGEsXG5iKXt2YXIgYz17fSxkO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspdm9pZCAwIT09YVtiW2RdXSYmKGNbYltkXV09YVtiW2RdXSk7cmV0dXJuIGN9fTtzamNsLmVuY3J5cHQ9c2pjbC5qc29uLmVuY3J5cHQ7c2pjbC5kZWNyeXB0PXNqY2wuanNvbi5kZWNyeXB0O3NqY2wubWlzYy5vYT17fTtzamNsLm1pc2MuY2FjaGVkUGJrZGYyPWZ1bmN0aW9uKGEsYil7dmFyIGM9c2pjbC5taXNjLm9hLGQ7Yj1ifHx7fTtkPWIuaXRlcnx8MUUzO2M9Y1thXT1jW2FdfHx7fTtkPWNbZF09Y1tkXXx8e2ZpcnN0U2FsdDpiLnNhbHQmJmIuc2FsdC5sZW5ndGg/Yi5zYWx0LnNsaWNlKDApOnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDIsMCl9O2M9dm9pZCAwPT09Yi5zYWx0P2QuZmlyc3RTYWx0OmIuc2FsdDtkW2NdPWRbY118fHNqY2wubWlzYy5wYmtkZjIoYSxjLGIuaXRlcik7cmV0dXJue2tleTpkW2NdLnNsaWNlKDApLHNhbHQ6Yy5zbGljZSgwKX19O1xuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYobW9kdWxlLmV4cG9ydHM9c2pjbCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHNqY2x9KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBXZWJTb2NrZXRFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0XCI7XG59XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Nvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivc2VydmVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNvbmZpZyB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY29uZmlnLnRzXCI7XG5cbi8qKlxuICogRW5zdXJlIGFuIGVycm9yIG1lc3NhZ2UgaXMgdHJhbnNmb3JtZWQgaW4gYW4gRXJyb3Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5zdXJlRXJyb3IgPSAodmFsdWU6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsdWU7XG5cbiAgbGV0IHN0cmluZ2lmaWVkID0gXCJbVW5hYmxlIHRvIHN0cmluZ2lmeSB0aGUgdGhyb3duIHZhbHVlXVwiO1xuICB0cnkge1xuICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgcmV0dXJuIG5ldyBFcnJvcihzdHJpbmdpZmllZCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIEx1ZmkncyBjb25maWcgZnJvbSBpdHMgQVBJXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZmV0Y2hTZXJ2ZXJDb25maWcgPSAoXG4gIGluc3RhbmNlVXJsOiBVUkwsXG4pOiBSZXN1bHRBc3luYzxTZXJ2ZXJDb25maWcsIEVycm9yPiA9PiB7XG4gIGNvbnN0IG9yaWdpbk1hdGNoZXMgPSBpbnN0YW5jZVVybC5ocmVmLm1hdGNoKFxuICAgIC8oLio/KVxcLz8oPzpcXC9bZHJdezF9XFwvfGxvZ2luXFwvP3xmaWxlc1xcLz8pLyxcbiAgKTtcblxuICBjb25zdCB1cmxPcmlnaW4gPSBvcmlnaW5NYXRjaGVzICYmIG9yaWdpbk1hdGNoZXNbMV1cbiAgICA/IG9yaWdpbk1hdGNoZXNbMV1cbiAgICA6IGluc3RhbmNlVXJsLm9yaWdpbjtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgZmV0Y2godXJsT3JpZ2luICsgXCIvYWJvdXQvY29uZmlnXCIpLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDb25uZWN0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKS5hbmRUaGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICByZXNwb25zZS5qc29uKCksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICBuZXcgU2VydmVyRXJyb3IodW5kZWZpbmVkLCB7IGNvbnRleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZW5vUnVudGltZSA9ICgpOiBib29sZWFuID0+IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgY29uc3QgaXNTZWN1cmVDb250ZXh0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpIHx8IGdsb2JhbFRoaXMuaXNTZWN1cmVDb250ZXh0IHx8XG4gICAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbn07XG5cbmV4cG9ydCBjb25zdCB3b3JrZXJVcmwgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBVUkwgPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpXG4gICAgPyBuZXcgVVJMKGAuL3dvcmtlci8ke3JlbGF0aXZlUGF0aH0udHNgLCBuZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLmhyZWYpXG4gICAgOiBuZXcgVVJMKFxuICAgICAgaW1wb3J0Lm1ldGEucmVzb2x2ZShcbiAgICAgICAgYC4vJHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggIT09IFwiZW5jcnlwdFwiID8gYHdvcmtlci8ke3JlbGF0aXZlUGF0aH1gIDogcmVsYXRpdmVQYXRoXG4gICAgICAgIH0uanNgLFxuICAgICAgKSxcbiAgICApO1xufTtcbiIsICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IFdPUktFUl9BQ1RJT04gfSBmcm9tIFwifi9lbnVtL3dvcmtlci1hY3Rpb24udHNcIjtcbmltcG9ydCB0eXBlIHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgVVBMT0FEX1NUQVRVUyB9IGZyb20gXCJ+L2VudW0vZmlsZS1zdGF0dXMudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyRXZlbnQgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWV2ZW50LnRzXCI7XG5cbmRlY2xhcmUgbGV0IHNlbGY6IFdvcmtlcjtcblxuZXhwb3J0IGNvbnN0IGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsZSBpbiB3b3JrZXJzIGFuZCBwcm92aWRlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1haW4gdGhyZWFkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gYXJnc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbGUgPSAobHVmaUZpbGU6IEx1ZmlGaWxlLCBhcmdzOiBQYXJ0aWFsPEx1ZmlGaWxlPikgPT4ge1xuICBPYmplY3QuYXNzaWduKGx1ZmlGaWxlLCBhcmdzKTtcblxuICBpZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuRklMRV9VUERBVEVELFxuICAgICAgbHVmaUZpbGUsXG4gICAgfSBhcyBXb3JrZXJFdmVudCk7XG4gIH1cblxuICByZXR1cm4gbHVmaUZpbGU7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZEZpbGVFcnJvciA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGVycm9yOiBFcnJvcikgPT4ge1xuICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5GQUlMRUQgfSk7XG5cbiAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvciB9IGFzIFdvcmtlckV2ZW50KTtcbn07XG5cbi8qKlxuICogSW5pdCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGNoaWxkIHdvcmtlcidzIG9ubWVzc2FnZSBldmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVORUQsICgpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5TT0NLRVRfT1BFTkVELFxuICAgIH0pO1xuICB9KTtcblxuICBldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvciB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNXb3JrZXJBY3Rpb25NZXNzYWdlID0gKFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBtZXNzYWdlOiBhbnksXG4pOiBtZXNzYWdlIGlzIFdvcmtlckFjdGlvbk1lc3NhZ2UgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmXG4gICAgbWVzc2FnZSAhPT0gbnVsbCAmJlxuICAgIFwiYWN0aW9uXCIgaW4gbWVzc2FnZSAmJlxuICAgIE9iamVjdC52YWx1ZXMoV09SS0VSX0FDVElPTikuaW5jbHVkZXMobWVzc2FnZS5hY3Rpb24pXG4gICk7XG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgc2pjbCBmcm9tIFwibHVmaS1zamNsXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9yIGEgc3RyaW5nIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhIHwgc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZW5jcnlwdGVkRGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBlbmNyeXB0ZWREYXRhXG4gICAgICA6IChlbmNyeXB0ZWREYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoYjY0ZGVjb2RlKHNqY2wuZGVjcnlwdChrZXksIGRhdGEpKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KGtleSwgYjY0ZW5jb2RlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uU2pjbCxcbiAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgIGl2OiBKU09OLnBhcnNlKGVuY3J5cHRlZCBhcyB1bmtub3duIGFzIHN0cmluZykuaXYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBTamNsIEFQSVxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoc2pjbC5yYW5kb20ucmFuZG9tV29yZHMoOCwgMTApKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBTamNsIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoc2pjbC5oYXNoLnNoYTUxMi5oYXNoKHBhc3N3b3JkKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgdGhlIGtleSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgU2pjbC4gU2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgYW4gZXF1YWwgc3ltYm9sIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBXZWJDcnlwdG8gQVBJIChieSB1c2luZyBiYXNlNjR1cmwpLCBpdCdzIGVhc3kgdG8gZGV0ZWN0XG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2pjbEtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga2V5W2tleS5sZW5ndGggLSAxXSA9PT0gXCI9XCI7XG59O1xuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWNyeXB0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2U6IHN0cmluZyA9IFwiVW5hYmxlIHRvIGRlY3J5cHQgdGhlIHByb3ZpZGVkIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIEVuY3J5cHRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZTogc3RyaW5nID0gXCJVbmFibGUgdG8gZW5jcnlwdCB0aGUgcHJvdmlkZWQgZGF0YVwiO1xufVxuIiwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjR1cmxkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjR1cmxlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjQvdXJsXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IENyeXB0b0FsZ29yaXRobSB9IGZyb20gXCJ+L2VudW0vY3J5cHRvLWFsZ29yaXRobS50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBlbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBlbmNyeXB0ZWRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgZW5jcnlwdGVkOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+XG4gICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdjogZW5jcnlwdGVkLml2IGFzIFVpbnQ4QXJyYXksXG4gICAgICAgIH0sXG4gICAgICAgIGltcG9ydGVkS2V5LFxuICAgICAgICBlbmNyeXB0ZWQuZGF0YSBhcyBBcnJheUJ1ZmZlcixcbiAgICAgICksXG4gICAgICAoZXJyb3IpID0+IG5ldyBEZWNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKVxuICApO1xufTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIGludG8gYW4gRW5jcnlwdGVkRGF0YSB1c2luZyB0aGUgcHJvdmlkZWQga2V5XG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHJldHVybiBpbXBvcnRLZXkoa2V5KS5hbmRUaGVuKChpbXBvcnRlZEtleSkgPT4ge1xuICAgIGNvbnN0IGl2ID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxMikpO1xuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIGNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgIGl2LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PlxuICAgICAgICBuZXcgRW5jcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICAgIH0pLFxuICAgICkuYW5kVGhlbigoZW5jcnlwdGVkKSA9PiB7XG4gICAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICAgIGFsZ286IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4gICAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgICAgaXYsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHN0cmluZyBpbnRvIGEgQ3J5cHRvS2V5LCB1c2FibGUgaW4gV2ViIENyeXB0byBBUElcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaW1wb3J0S2V5ID0gKGtleTogc3RyaW5nKTogUmVzdWx0QXN5bmM8Q3J5cHRvS2V5LCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgICBcInJhd1wiLFxuICAgICAgYjY0dXJsZGVjb2RlKGtleSksXG4gICAgICB7IG5hbWU6IFwiQUVTLUdDTVwiIH0sXG4gICAgICBmYWxzZSxcbiAgICAgIFtcbiAgICAgICAgXCJlbmNyeXB0XCIsXG4gICAgICAgIFwiZGVjcnlwdFwiLFxuICAgICAgXSxcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBpbXBvcnQgY3J5cHRvZ3JhcGh5IGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gc3RyaW5nIHVzaW5nIFdlYiBDcnlwdG8gQVBJLlxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAuZ2VuZXJhdGVLZXkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgICBsZW5ndGg6IDI1NixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIl0sXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKGdlbmVyYXRlZEtleSkgPT5cbiAgICAgICAgICBjcnlwdG8uc3VidGxlXG4gICAgICAgICAgICAuZXhwb3J0S2V5KFwicmF3XCIsIGdlbmVyYXRlZEtleSlcbiAgICAgICAgICAgIC50aGVuKChrZXkpID0+IHJlc29sdmUoYjY0dXJsZW5jb2RlKGtleSkpKVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGJhc2U2NCBlbmNvZGUgdGhlIHVybFwiLCB7XG4gICAgICAgICAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiByZWplY3QoZXJyb3IpKVxuICAgICksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBXZWJDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaGFzaFBhc3N3b3JkID0gKFxuICBwYXNzd29yZDogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+IHtcbiAgY29uc3QgcHJvbWlzZSA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBVaW50OEFycmF5KFxuICAgICAgICBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChcbiAgICAgICAgICBcIlNIQS01MTJcIixcbiAgICAgICAgICBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocGFzc3dvcmQpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBwcm9taXNlKCksXG4gICAgKGVycm9yKSA9PiBuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcbiIsICJpbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB0eXBlIHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSBcIn4vYXBpL2NyeXB0by9zamNsLnRzXCI7XG5pbXBvcnQgKiBhcyB3ZWIgZnJvbSBcIn4vYXBpL2NyeXB0by93ZWIudHNcIjtcbmltcG9ydCB0eXBlIHsgSGFzaGluZ0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2hhc2hpbmctZXJyb3IudHNcIjtcblxuLyoqXG4gKiBEZWNyeXB0IGFuIEVuY3J5cHRlZERhdGEgb2JqZWN0IHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+XG4gIHZhbHVlLmFsZ28gPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5hbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbFxuICAgID8gc2pjbC5kZWNyeXB0KGtleSwgdmFsdWUpXG4gICAgOiB3ZWIuZGVjcnlwdChrZXksIHZhbHVlKTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIHVzaW5nIHRoZSBwcm92aWRlZCBrZXkgYW5kIGFsZ29yaXRobVxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0sXG4pOiBSZXN1bHRBc3luYzxFbmNyeXB0ZWREYXRhLCBFbmNyeXB0aW9uRXJyb3I+ID0+XG4gIChhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbClcbiAgICA/IHNqY2wuZW5jcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmVuY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBuZXcga2V5IGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlS2V5ID0gKFxuICBhbGdvID0gQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0byxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgQ3J5cHRvRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsID8gc2pjbC5nZW5lcmF0ZUtleSgpIDogd2ViLmdlbmVyYXRlS2V5KCk7XG5cbi8qKlxuICogSGFzaCBhIHBhc3N3b3JkIHVzaW5nIHRoZSBwcm92aWRlZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaGFzaFBhc3N3b3JkID0gKFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT5cbiAgYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuaGFzaFBhc3N3b3JkKHBhc3N3b3JkKVxuICAgIDogd2ViLmhhc2hQYXNzd29yZChwYXNzd29yZCk7XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBTb2NrZXRQYXRoIH0gZnJvbSBcIn4vZW51bS9zb2NrZXQtcGF0aC50c1wiO1xuaW1wb3J0IHsgVXBsb2FkRXJyb3IgfSBmcm9tIFwifi9lcnJvci91cGxvYWQvdXBsb2FkLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFdlYlNvY2tldEVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRVcGxvYWRDaHVua01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2NsaWVudC11cGxvYWQtY2h1bmstbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJDYW5jZWxNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY2FuY2VsLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLWRvd25sb2FkLWNodW5rLXN1Y2Nlc3MtbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyVXBsb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItdXBsb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L3R5cGUvc2VydmVyLWRvd25sb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBldmVudHMsIHVwZGF0ZUZpbGUgfSBmcm9tIFwifi93b3JrZXIvc2hhcmVkLnRzXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIn4vYXBpL2NyeXB0by50c1wiO1xuaW1wb3J0IHtcbiAgRGVjb2RlIGFzIGI2NGRlY29kZSxcbiAgRW5jb2RlIGFzIGI2NGVuY29kZSxcbn0gZnJvbSBcImFycmF5YnVmZmVyLWVuY29kaW5nL2Jhc2U2NFwiO1xuXG5leHBvcnQgY29uc3Qgc29ja2V0czoge1xuICBba2V5OiBzdHJpbmddOiBXZWJTb2NrZXQ7XG59ID0ge307XG5cbmNvbnN0IE1BWF9FUlJPUlMgPSA1O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIGNhbmNlbCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uQ2FuY2VsTWVzc2FnZSA9IChcbiAgZGF0YTogU2VydmVyQ2FuY2VsTWV0YWRhdGEsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBFcnJvcj4gPT4ge1xuICBldmVudHMuZW1pdChFVkVOVC5VUExPQURfQ0FOQ0VMTEVELCBkYXRhLnN1Y2Nlc3MpO1xuXG4gIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIGRvd25sb2FkIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2VcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25Eb3dubG9hZE1lc3NhZ2UgPSAoXG4gIHJlc3BvbnNlOiBzdHJpbmcsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnNwbGl0KFwiWFhNT0pPWFhcIik7XG4gIGNvbnN0IG1ldGFkYXRhU3RyaW5nID0gcmVzdWx0LnNoaWZ0KCk7XG5cbiAgaWYgKG1ldGFkYXRhU3RyaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IEpTT04ucGFyc2UobWV0YWRhdGFTdHJpbmcpIGFzIFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YTtcblxuICAgIGlmIChpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEobWV0YWRhdGEpKSB7XG4gICAgICBjb25zdCBkYXRhU3RyaW5nID0gcmVzdWx0LnNoaWZ0KCk7XG5cbiAgICAgIGlmIChkYXRhU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVuY3J5cHRlZERhdGE6IEVuY3J5cHRlZERhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHJpbmcpO1xuXG4gICAgICAgIC8vIElmIGZpbGUgd2FzIHVwbG9hZGVkIHVzaW5nIEx1ZmkgQVBJXG4gICAgICAgIGlmIChlbmNyeXB0ZWREYXRhLml2KSB7XG4gICAgICAgICAgZW5jcnlwdGVkRGF0YS5pdiA9IG5ldyBVaW50OEFycmF5KE9iamVjdC52YWx1ZXMoZW5jcnlwdGVkRGF0YS5pdikpO1xuICAgICAgICAgIGVuY3J5cHRlZERhdGEuZGF0YSA9IGI2NGRlY29kZShlbmNyeXB0ZWREYXRhLmRhdGEgYXMgc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcnlwdG8uZGVjcnlwdChsdWZpRmlsZS5rZXlzLmNsaWVudCwgZW5jcnlwdGVkRGF0YSkuYW5kVGhlbihcbiAgICAgICAgICAoZGVjcnlwdGVkUGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gdHlwZW9mIGRlY3J5cHRlZFBhcnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyAobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGRlY3J5cHRlZFBhcnQpLmJ1ZmZlciBhcyBBcnJheUJ1ZmZlcilcbiAgICAgICAgICAgICAgOiBkZWNyeXB0ZWRQYXJ0O1xuXG4gICAgICAgICAgICAvLyBJZiBmaXJzdCBjaHVua1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLnBhcnQgPT09IDApIHtcbiAgICAgICAgICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwge1xuICAgICAgICAgICAgICAgIGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEsXG4gICAgICAgICAgICAgICAgZGVsQXRGaXJzdFZpZXc6IG1ldGFkYXRhLmRlbF9hdF9maXJzdF92aWV3LFxuICAgICAgICAgICAgICAgIGRlbGF5OiBtZXRhZGF0YS5kZWxheSxcbiAgICAgICAgICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgIHNpemU6IG1ldGFkYXRhLnNpemUsXG4gICAgICAgICAgICAgICAgdG90YWxDaHVua3M6IG1ldGFkYXRhLnRvdGFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG1ldGFkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgemlwcGVkOiBtZXRhZGF0YS56aXBwZWQsXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkRPV05MT0FEX1NUQVJURUQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5DSFVOS19ET1dOTE9BREVELCBidWZmZXIsIG1ldGFkYXRhLnBhcnQpO1xuXG4gICAgICAgICAgICBpZiAobHVmaUZpbGUuY2h1bmtzUmVhZHkgPT09IG1ldGFkYXRhLnRvdGFsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlbmREb3dubG9hZChsdWZpRmlsZSkuYW5kVGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuRE9XTkxPQURfQ09NUExFVEUpO1xuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgcmV0cmlldmUgbWV0YWRhdGEgZnJvbSBkYXRhIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXJcIixcbiAgICAgICAgKTtcblxuICAgICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKG1ldGFkYXRhLm1zZyk7XG5cbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKFxuICAgICAgXCJDYW5ub3QgcmV0cmlldmUgbWV0YWRhdGEgZnJvbSBkYXRhIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXJcIixcbiAgICApO1xuXG4gICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogSGFuZGxlIFdlYlNvY2tldCByZXNwb25zZSBmb3IgdXBsb2FkIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2VcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25VcGxvYWRNZXNzYWdlID0gKFxuICByZXNwb25zZTogU2VydmVyVXBsb2FkQ2h1bmtNZXRhZGF0YSxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgVXBsb2FkRXJyb3I+ID0+IHtcbiAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAvLyBJZiBmaXJzdCBjaHVua1xuICAgIGlmIChyZXNwb25zZS5qID09PSAwKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oYFVwbG9hZCBvZiAke2x1ZmlGaWxlLmtleXMuY2xpZW50fSBzdGFydGVkYCk7XG5cbiAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgICAga2V5czogeyBjbGllbnQ6IGx1ZmlGaWxlLmtleXMuY2xpZW50LCBzZXJ2ZXI6IHJlc3BvbnNlLnNob3J0IH0sXG4gICAgICAgIGFjdGlvblRva2VuOiByZXNwb25zZS50b2tlbixcbiAgICAgICAgcXVldWVJbmRleDogcmVzcG9uc2UuaSxcbiAgICAgIH0pO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5VUExPQURfU1RBUlRFRCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRmlsZShsdWZpRmlsZSwge1xuICAgICAgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZF9hdCxcbiAgICB9KTtcblxuICAgIGV2ZW50cy5lbWl0KEVWRU5ULkNIVU5LX1VQTE9BREVEKTtcblxuICAgIGlmIChsdWZpRmlsZS5jaHVua3NSZWFkeSA9PT0gbHVmaUZpbGUudG90YWxDaHVua3MpIHtcbiAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkNPTVBMRVRFIH0pO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5VUExPQURfQ09NUExFVEUpO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVEKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKHJlc3BvbnNlLm1zZyk7XG4gICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuXG4gICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgb24gc29ja2V0cyBcIm9ubWVzc2FnZVwiIGV2ZW50XG4gKlxuICogQHBhcmFtIGVcbiAqIEBwYXJhbSBzb2NrZXRVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uTWVzc2FnZSA9IChcbiAgZTogTWVzc2FnZUV2ZW50LFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBVcGxvYWRFcnJvcj4gPT4ge1xuICBjb25zdCBkYXRhID0gdHJ5UGFyc2VKc29uKGUuZGF0YSk7XG4gIGxldCBjYWxsYmFjaztcblxuICBpZiAoZGF0YSkge1xuICAgIGlmICghZGF0YS5hY3Rpb24gJiYgZGF0YS5tc2cpIHtcbiAgICAgIC8vIElmIGVycm9yXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihkYXRhLm1zZyk7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG5cbiAgICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcImRlbGF5XCIgaW4gZGF0YSkge1xuICAgICAgICBjYWxsYmFjayA9IG9uVXBsb2FkTWVzc2FnZShkYXRhLCBsdWZpRmlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayA9IG9uQ2FuY2VsTWVzc2FnZShkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2sgPSBvbkRvd25sb2FkTWVzc2FnZShlLmRhdGEsIGx1ZmlGaWxlKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsYmFjaztcbn07XG5cbi8qKlxuICogSXMgc29ja2V0IGNvbm5lY3Rpbmc/XG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ29ubmVjdGluZyA9IChzb2NrZXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgc29ja2V0cyAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XS5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuQ09OTkVDVElORztcblxuLyoqXG4gKiBJcyBzb2NrZXQgc3Bhd25lZD9cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNTcGF3bmVkID0gKHNvY2tldEtleTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBzb2NrZXRzICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOO1xuXG4vKipcbiAqIEFzayBXZWJTb2NrZXQgdG8gY2FuY2VsIGFuIHVwbG9hZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbmNlbFVwbG9hZCA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIHVwbG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgYCR7XG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlkOiBsdWZpRmlsZS5rZXlzLnNlcnZlcixcbiAgICAgICAgbW9kX3Rva2VuOiBsdWZpRmlsZS5hY3Rpb25Ub2tlbixcbiAgICAgICAgY2FuY2VsOiB0cnVlLFxuICAgICAgICBpOiBsdWZpRmlsZS5xdWV1ZUluZGV4LFxuICAgICAgfSlcbiAgICB9WFhNT0pPWFh1c2VsZXNzYCxcbiAgKTtcbn07XG5cbi8qKlxuICogRG93bmxvYWQgYSBwYXJ0IG9mIHRoZSBmaWxlIHRocm91Z2ggdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIGNodW5rTnVtYmVyXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZG93bmxvYWRDaHVuayA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuICBjaHVua051bWJlcjogbnVtYmVyLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgbGV0IG1lc3NhZ2U7XG5cbiAgaWYgKGx1ZmlGaWxlLnBhc3N3b3JkKSB7XG4gICAgbWVzc2FnZSA9IHsgcGFydDogY2h1bmtOdW1iZXIsIGZpbGVfcHdkOiBsdWZpRmlsZS5wYXNzd29yZCB9O1xuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSB7IHBhcnQ6IGNodW5rTnVtYmVyIH07XG4gIH1cblxuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgZG93bmxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLFxuICApO1xufTtcblxuLyoqXG4gKiBUZWxsIHRoZSBXZWJTb2NrZXQgdGhlIGRvd25sb2FkIGVuZGVkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5kRG93bmxvYWQgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGxldCBtZXNzYWdlOiB7IGVuZGVkOiB0cnVlOyBmaWxlX3B3ZD86IHN0cmluZyB9O1xuXG4gIGlmIChsdWZpRmlsZS5wYXNzd29yZCkge1xuICAgIG1lc3NhZ2UgPSB7IGVuZGVkOiB0cnVlLCBmaWxlX3B3ZDogbHVmaUZpbGUucGFzc3dvcmQgfTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0geyBlbmRlZDogdHJ1ZSB9O1xuICB9XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIGRvd25sb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcbiAgKTtcbn07XG5cbi8qKlxuICogVXBsb2FkIGEgY2h1bmsgb2YgdGhlIGZpbGUgdGhyb3VnaCB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gbWV0YWRhdGFcbiAqIEBwYXJhbSBlbmNyeXB0ZWREYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBsb2FkQ2h1bmsgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgbWV0YWRhdGE6IENsaWVudFVwbG9hZENodW5rTWV0YWRhdGEsXG4gIGVuY3J5cHRlZERhdGE6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBlbmNyeXB0ZWREYXRhLmRhdGEgPSBiNjRlbmNvZGUoZW5jcnlwdGVkRGF0YS5kYXRhIGFzIEFycmF5QnVmZmVyKTtcblxuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgdXBsb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBgJHtKU09OLnN0cmluZ2lmeShtZXRhZGF0YSl9WFhNT0pPWFgke0pTT04uc3RyaW5naWZ5KGVuY3J5cHRlZERhdGEpfWAsXG4gICk7XG59O1xuXG4vKipcbiAqIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gc29ja2V0VXJsXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIGhhc1ByaW9yaXR5XG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBzZW5kTWVzc2FnZSA9IChcbiAgc29ja2V0VXJsOiBzdHJpbmcsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgbWVzc2FnZTogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgaWYgKCFpc1NwYXduZWQoc29ja2V0VXJsKSkge1xuICAgIHJldHVybiBzcGF3bihzb2NrZXRVcmwpLmFuZFRoZW4oKCkgPT4ge1xuICAgICAgc29ja2V0c1tzb2NrZXRVcmxdLm9ubWVzc2FnZSA9IChlKSA9PiBvbk1lc3NhZ2UoZSwgbHVmaUZpbGUpO1xuICAgICAgcmV0dXJuIHNlbmRNZXNzYWdlKHNvY2tldFVybCwgbHVmaUZpbGUsIG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNvY2tldHNbc29ja2V0VXJsXS5zZW5kKG1lc3NhZ2UpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTcGF3biBhIG5ldyBXZWJTb2NrZXQgb3IgcmV1c2UgYW4gZXhpc3Rpbmcgb25lLlxuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEBwYXJhbSBlcnJvckNvdW50XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgc3Bhd24gPSAoXG4gIHNvY2tldEtleTogc3RyaW5nLFxuICBlcnJvckNvdW50ID0gMCxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgaWYgKCFpc1NwYXduZWQoc29ja2V0S2V5KSAmJiAhaXNDb25uZWN0aW5nKHNvY2tldEtleSkpIHtcbiAgICAvLyBjb25zb2xlLmluZm8oYFNwYXduaW5nIFdlYlNvY2tldCAke3NvY2tldFVybH1gKTtcbiAgICBzb2NrZXRzW3NvY2tldEtleV0gPSBuZXcgV2ViU29ja2V0KHNvY2tldEtleSk7XG5cbiAgICBldmVudHMub25jZShFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQsICgpID0+IHtcbiAgICAgIHNvY2tldHNbc29ja2V0S2V5XS5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKCkgPT4ge1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVEKTtcbiAgICB9KTtcblxuICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oYFdlYnNvY2tldCAke3NvY2tldEtleX0gaGFzIGJlZW4gb3BlbmApO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRU5FRCk7XG4gICAgfTtcblxuICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBXZWJzb2NrZXQgJHtzb2NrZXRLZXl9IGhhcyBiZWVuIGNsb3NlZGApO1xuICAgIH07XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25lcnJvciA9ICgpID0+IHtcbiAgICAgIGlmICgrK2Vycm9yQ291bnQgPD0gTUFYX0VSUk9SUykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB0cnlpbmcgdG8gY29ubmVjdCB0byBXZWJTb2NrZXQgJHtzb2NrZXRLZXl9LiBUcnlpbmcgYWdhaW4uICR7ZXJyb3JDb3VudH0gLyAke01BWF9FUlJPUlN9YCxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gc3Bhd24oc29ja2V0S2V5LCBlcnJvckNvdW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PTkVSUk9SKTtcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICAgIG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IoXG4gICAgICAgICAgICBgVW5hYmxlIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0ICR7c29ja2V0S2V5fS5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB3YWl0Rm9yQ29ubmVjdGlvbihzb2NrZXRLZXkpXG4gICAgLmFuZFRoZW4oKCkgPT4gb2tBc3luYyhzb2NrZXRLZXkpKVxuICAgIC5vckVsc2UoKGVycm9yKSA9PiBlcnJBc3luYyhlcnJvcikpO1xufTtcblxuLyoqXG4gKiBXYWl0IGZvciBXZWJTb2NrZXQgdG8gb3Blbi4gUmV0dXJucyBhbiBlcnJvciBpZiB0b28gbWFueSBjb25uZWN0aW9uIGF0dGVtcHRzIGFyZSBtYWRlLlxuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB3YWl0Rm9yQ29ubmVjdGlvbiA9IChcbiAgc29ja2V0S2V5OiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFpc1NwYXduZWQoc29ja2V0S2V5KSkge1xuICAgICAgICBldmVudHMub25jZShFVkVOVC5TT0NLRVRfT1BFTkVELCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBldmVudHMub24oRVZFTlQuU09DS0VUX09ORVJST1IsICgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IFdlYlNvY2tldENvbm5lY3Rpb25FcnJvcigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICByZXR1cm4gZW5zdXJlRXJyb3IoZXJyb3IpO1xuICAgIH0sXG4gICk7XG5cbi8qKlxuICogQ2xvc2UgdGhlIFdlYlNvY2tldFxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsb3NlID0gKHNvY2tldEtleTogc3RyaW5nKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBXZWJTb2NrZXRFcnJvcj4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGlzU3Bhd25lZChzb2NrZXRLZXkpKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlamVjdChuZXcgV2ViU29ja2V0RXJyb3IoXCJVbmFibGUgdG8gY2xvc2UgdGhlIFdlYlNvY2tldFwiKSk7XG4gICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpO1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0S2V5KTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb2NrZXRzW3NvY2tldEtleV0uY2xvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoc29ja2V0S2V5KTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFuIGluc3RhbmNlIFVSTCBpbiBhIFdlYlNvY2tldCBVUkxcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEBwYXJhbSBwYXRobmFtZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkU29ja2V0VXJsID0gKGluc3RhbmNlVXJsOiBVUkwsIHBhdGhuYW1lOiBzdHJpbmcpOiBVUkwgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGluc3RhbmNlVXJsKTtcblxuICBpZiAoIVtcIndzOlwiLCBcIndzczpcIl0uaW5jbHVkZXModXJsLnByb3RvY29sKSkge1xuICAgIHVybC5wcm90b2NvbCA9IHVybC5wcm90b2NvbCA9PT0gXCJodHRwOlwiID8gXCJ3czpcIiA6IFwid3NzOlwiO1xuICB9XG4gIHVybC5wYXRobmFtZSArPSBwYXRobmFtZTtcblxuICByZXR1cm4gbmV3IFVSTCh1cmwub3JpZ2luICsgdXJsLnBhdGhuYW1lKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGRvd25sb2FkIFVSTCBmb3IgdGhlIHNvY2tldC4gUmV0dXJucyBhIHN0cmluZyBzaW5jZSBpdCdzIG1vc3RseSB1c2VkIGFzIHNvY2tldHMga2V5XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZG93bmxvYWRTb2NrZXRVcmwgPSAobHVmaUZpbGU6IEx1ZmlGaWxlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGJ1aWxkU29ja2V0VXJsKFxuICAgIG5ldyBVUkwobHVmaUZpbGUuc2VydmVyVXJsKSxcbiAgICBTb2NrZXRQYXRoLkRPV05MT0FEICsgYC8ke2x1ZmlGaWxlLmtleXMuc2VydmVyfWAsXG4gICkudG9TdHJpbmcoKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIHVwbG9hZCBVUkwgZm9yIHRoZSBzb2NrZXQuIFJldHVybnMgYSBzdHJpbmcgc2luY2UgaXQncyBtb3N0bHkgdXNlZCBhcyBzb2NrZXRzIGtleVxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZFNvY2tldFVybCA9IChsdWZpRmlsZTogTHVmaUZpbGUpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYnVpbGRTb2NrZXRVcmwobmV3IFVSTChsdWZpRmlsZS5zZXJ2ZXJVcmwpLCBTb2NrZXRQYXRoLlVQTE9BRClcbiAgICAudG9TdHJpbmcoKTtcbn07XG5cbi8qKlxuICogVHJ5IHRvIHBhcnNlIGEgc3RyaW5nIGludG8gYSBKU09OLiBSZXR1cm5zIGZhbHNlIGlmIG5vdCBwb3NzaWJsZS5cbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuY29uc3QgdHJ5UGFyc2VKc29uID0gKGRhdGE6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZE9iamVjdCA9IEpTT04ucGFyc2UoZGF0YSk7XG5cbiAgICBpZiAocGFyc2VkT2JqZWN0ICYmIHR5cGVvZiBwYXJzZWRPYmplY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBwYXJzZWRPYmplY3Q7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoX2UpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGlzIFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YVxuICpcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhID0gKFxuICBtZXNzYWdlOiBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGEsXG4pOiBtZXNzYWdlIGlzIFNlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEgPT5cbiAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiYgbWVzc2FnZSAhPT0gbnVsbCAmJiAhKFwibXNnXCIgaW4gbWVzc2FnZSk7XG4iLCAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB7IEx1ZmlKb2IgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWpvYi50c1wiO1xuaW1wb3J0IHsgSm9iU3RhdHVzIH0gZnJvbSBcIn4vZW51bS9qb2Itc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfQUNUSU9OIH0gZnJvbSBcIn4vZW51bS93b3JrZXItYWN0aW9uLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciwgZmV0Y2hTZXJ2ZXJDb25maWcsIGlzU2VjdXJlQ29udGV4dCB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIn4vYXBpL2NyeXB0by50c1wiO1xuaW1wb3J0IHsgRmlsZVNsaWNpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2ZpbGUvZmlsZS1zbGljaW5nLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRG93bmxvYWRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Rvd25sb2FkL2Rvd25sb2FkLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBJbmZvc0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvaW5mb3MtZXJyb3IudHNcIjtcbmltcG9ydCB7IEpvYlBhdXNlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3Ivam9iL2pvYi1wYXVzZS1lcnJvci50c1wiO1xuaW1wb3J0IHsgSm9iUmVzdW1lRXJyb3IgfSBmcm9tIFwifi9lcnJvci9qb2Ivam9iLXJlc3VtZS1lcnJvci50c1wiO1xuaW1wb3J0IHsgSm9iRXJyb3IgfSBmcm9tIFwifi9lcnJvci9qb2Ivam9iLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBVcGxvYWRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3VwbG9hZC91cGxvYWQtZXJyb3IudHNcIjtcbmltcG9ydCB7IGhhc2hQYXNzd29yZCB9IGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7IFdPUktFUl9UWVBFIH0gZnJvbSBcIn4vZW51bS93b3JrZXItdHlwZS50c1wiO1xuaW1wb3J0IHsgdHlwZSBBc3luY1ppcHBhYmxlIH0gZnJvbSBcImZmbGF0ZVwiO1xuXG5jb25zdCBDSFVOS19MRU5HVEggPSAxXzUwMF8wMDA7IC8vIDEuNSBNQlxuXG5jb25zdCBmaWxlczogeyBbY2xpZW50S2V5OiBzdHJpbmddOiBMdWZpRmlsZSB9ID0ge307XG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIENhbmNlbCBhbiB1cGxvYWRcbiAqXG4gKiBAcGFyYW0gdXBsb2FkSm9iXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY2FuY2VsID0gKHVwbG9hZEpvYjogTHVmaUpvYik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIHVwbG9hZEpvYi50ZXJtaW5hdGUoKTtcblxuICBjb25zdCBqb2IgPSBuZXcgTHVmaUpvYih1cGxvYWRKb2IubHVmaUZpbGUsIFdPUktFUl9UWVBFLkNBTkNFTCk7XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGpvYlxuICAgICAgICAub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5VUExPQURfQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICBmaWxlc1tqb2IubHVmaUZpbGUua2V5cy5jbGllbnRdLnVwbG9hZFN0YXR1cyA9XG4gICAgICAgICAgICAgIFVQTE9BRF9TVEFUVVMuQ0FOQ0VMRUQ7XG5cbiAgICAgICAgICAgIHJlc29sdmUoam9iKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCkge1xuICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICBuZXcgSm9iRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBjYW5jZWwgYW4gdXBsb2FkXCIsXG4gICAgICAgICAgICAgICAgeyBjYXVzZTogZXZlbnQuZGF0YS5lcnJvciB9LFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbHVmaUZpbGU6IGpvYi5sdWZpRmlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBmaWxlcyB0byBiZSBwYXNzZWQgdG8gY29tcHJlc3MoKVxuICpcbiAqIEBwYXJhbSBmaWxlc1xuICogQHBhcmFtIGFyY2hpdmVFbnRyaWVzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsZXNUb0FyY2hpdmUgPSAoXG4gIGZpbGVzOiBGaWxlW10sXG4gIGFyY2hpdmVFbnRyaWVzOiBBc3luY1ppcHBhYmxlID0ge30sXG4pOiBSZXN1bHRBc3luYzxBc3luY1ppcHBhYmxlLCBFcnJvcj4gPT4ge1xuICBjb25zdCBhc3luY0xvb3AgPSBhc3luYyAoXG4gICAgZmlsZXM6IEZpbGVbXSxcbiAgKSA9PiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBuYW1lV2l0aEV4dGVuc2lvbiA9IGZpbGUubmFtZS5zcGxpdChcIi9cIik/LnBvcCgpIHx8IGZpbGUubmFtZTtcblxuICAgICAgY29uc3QgbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBuYW1lV2l0aEV4dGVuc2lvbi5zcGxpdChcIi5cIikuc2hpZnQoKTtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IG5hbWVXaXRoRXh0ZW5zaW9uLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAxXG4gICAgICAgID8gYC4ke25hbWVXaXRoRXh0ZW5zaW9uLnNwbGl0KFwiLlwiKS5wb3AoKX1gXG4gICAgICAgIDogXCJcIjtcblxuICAgICAgbGV0IG5hbWUgPSBuYW1lV2l0aEV4dGVuc2lvbjtcblxuICAgICAgaWYgKGFyY2hpdmVFbnRyaWVzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgbmFtZSA9IGAke25hbWVXaXRob3V0RXh0ZW5zaW9ufSgke2l9KSR7ZXh0ZW5zaW9ufWA7XG5cbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gd2hpbGUgKGFyY2hpdmVFbnRyaWVzW25hbWVdICE9PSB1bmRlZmluZWQpO1xuICAgICAgfVxuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5BUkNISVZFX0FEREVEX0ZJTEUsIHsgbmFtZSwgc2l6ZTogZmlsZS5zaXplIH0pO1xuXG4gICAgICBhcmNoaXZlRW50cmllc1tuYW1lXSA9IGF3YWl0IGZpbGUuYnl0ZXMoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIGFzeW5jTG9vcChmaWxlcyksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICkuYW5kVGhlbigoKSA9PiBva0FzeW5jKGFyY2hpdmVFbnRyaWVzKSk7XG59O1xuXG4vKipcbiAqIENvbXByZXNzIGZpbGVzIGludG8gYSB6aXBcbiAqXG4gKiBAcGFyYW0gYXJjaGl2ZUVudHJpZXNcbiAqIEBwYXJhbSBhcmNoaXZlTmFtZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXByZXNzID0gKFxuICBhcmNoaXZlRW50cmllczogQXN5bmNaaXBwYWJsZSxcbiAgYXJjaGl2ZU5hbWU6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIGNvbnN0IGx1ZmlGaWxlID0gbmV3IEx1ZmlGaWxlKFwiXCIpOyAvLyBEdW1teSBMdWZpIEZpbGUgdG8gYXZvaWQgdG8gY2hlY2sgZm9yIEx1ZmlGaWxlIGV4aXN0YW5jZSBpbiBvdGhlciBqb2JzXG4gIGNvbnN0IGpvYiA9IG5ldyBMdWZpSm9iKGx1ZmlGaWxlLCBXT1JLRVJfVFlQRS5DT01QUkVTUyk7XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGpvYlxuICAgICAgICAub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5BUkNISVZFX0NSRUFURUQpIHtcbiAgICAgICAgICAgIGpvYi5hcmNoaXZlRmlsZSA9IG5ldyBGaWxlKFtldmVudC5kYXRhLmJ1ZmZlcl0sIGFyY2hpdmVOYW1lLCB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYXBwbGljYXRpb24vemlwXCIsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgam9iLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXNvbHZlKGpvYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgbmV3IEpvYkVycm9yKFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gY29tcHJlc3MgYSBmaWxlXCIsIHtcbiAgICAgICAgICAgICAgICBjYXVzZTogZXZlbnQuZGF0YS5lcnJvcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlcXVlc3RNZXNzYWdlKHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBsdWZpRmlsZSxcbiAgICAgICAgICAgIGFyY2hpdmU6IHsgZW50cmllczogYXJjaGl2ZUVudHJpZXMgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcbn07XG5cbi8qKlxuICogRGVjb21wcmVzcyBhIHppcCBmaWxlXG4gKlxuICogQHBhcmFtIHppcEZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNvbXByZXNzID0gKFxuICB6aXBGaWxlOiBGaWxlLFxuKTogUmVzdWx0QXN5bmM8THVmaUpvYiwgRXJyb3I+ID0+IHtcbiAgY29uc3QgbHVmaUZpbGUgPSBuZXcgTHVmaUZpbGUoXCJcIik7IC8vIER1bW15IEx1ZmkgRmlsZSB0byBhdm9pZCB0byBjaGVjayBmb3IgTHVmaUZpbGUgZXhpc3RhbmNlIGluIG90aGVyIGpvYnNcbiAgY29uc3Qgam9iID0gbmV3IEx1ZmlKb2IobHVmaUZpbGUsIFdPUktFUl9UWVBFLkRFQ09NUFJFU1MpO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBqb2JcbiAgICAgICAgLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuQVJDSElWRV9ERUNPTVBSRVNTRUQpIHtcbiAgICAgICAgICAgIGpvYi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShqb2IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5BUkNISVZFX1JFVFJJRVZFRF9GSUxFKSB7XG4gICAgICAgICAgICBqb2IuYXJjaGl2ZUZpbGVzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBGaWxlKFtldmVudC5kYXRhLmZpbGUuYnVmZmVyXSwgZXZlbnQuZGF0YS5maWxlLnBhdGgpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCkge1xuICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICBuZXcgSm9iRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBkZWNvbXByZXNzIGEgZmlsZVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNhdXNlOiBldmVudC5kYXRhLmVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlcXVlc3RNZXNzYWdlKHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBsdWZpRmlsZSxcbiAgICAgICAgICAgIGFyY2hpdmU6IHsgZmlsZTogemlwRmlsZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pLFxuICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICApO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgbG9naWNzIG9mIHBhc3N3b3JkIGhhc2hpbmdcbiAqXG4gKiBAcGFyYW0gZG93bmxvYWRVcmxcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuY29uc3QgaGFuZGxlUGFzc3dvcmRIYXNoaW5nID0gKFxuICBkb3dubG9hZFVybDogVVJMLFxuICBwYXNzd29yZD86IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEx1ZmlGaWxlLCBFcnJvcj4gPT4ge1xuICBpZiAocGFzc3dvcmQpIHtcbiAgICByZXR1cm4gZmV0Y2hTZXJ2ZXJDb25maWcoZG93bmxvYWRVcmwpLmFuZFRoZW4oKGNvbmZpZykgPT4ge1xuICAgICAgLy8gUGFzc3dvcmQgaGFzaGluZyBvbiBjbGllbnQgc2lkZSBpcyBvbmx5IHN1cHBvcnRlZCBieSByZWNlbnQgdmVyc2lvbnMgb2YgTHVmaSBTZXJ2ZXJcbiAgICAgIGlmIChcbiAgICAgICAgY29uZmlnLnZlcnNpb24udGFnID4gXCIwLjA3LjBcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGFsZ28gPSBpc1NlY3VyZUNvbnRleHQoKVxuICAgICAgICAgID8gQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0b1xuICAgICAgICAgIDogQ3J5cHRvQWxnb3JpdGhtLlNqY2w7XG5cbiAgICAgICAgcmV0dXJuIGhhc2hQYXNzd29yZChwYXNzd29yZCwgYWxnbykuYW5kVGhlbigoaGFzaGVkUGFzc3dvcmQpID0+XG4gICAgICAgICAgb2tBc3luYyhMdWZpRmlsZS5mcm9tRG93bmxvYWRVcmwoZG93bmxvYWRVcmwsIGhhc2hlZFBhc3N3b3JkKSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBva0FzeW5jKEx1ZmlGaWxlLmZyb21Eb3dubG9hZFVybChkb3dubG9hZFVybCwgcGFzc3dvcmQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2tBc3luYyhMdWZpRmlsZS5mcm9tRG93bmxvYWRVcmwoZG93bmxvYWRVcmwpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEb3dubG9hZCBhIGZpbGUgZnJvbSB0aGUgc2VydmVyXG4gKlxuICogQHBhcmFtIGRvd25sb2FkVXJsXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZCA9IChcbiAgZG93bmxvYWRVcmw6IFVSTCxcbiAgcGFzc3dvcmQ/OiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT5cbiAgaGFuZGxlUGFzc3dvcmRIYXNoaW5nKGRvd25sb2FkVXJsLCBwYXNzd29yZCkuYW5kVGhlbihcbiAgICAobHVmaUZpbGU6IEx1ZmlGaWxlKSA9PiB7XG4gICAgICBjb25zdCBqb2IgPSBuZXcgTHVmaUpvYihsdWZpRmlsZSwgV09SS0VSX1RZUEUuRE9XTkxPQUQpO1xuXG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBjaHVua3M6IEJsb2JbXSA9IFtdO1xuXG4gICAgICAgICAgcmV0dXJuIGpvYlxuICAgICAgICAgICAgLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlU29ja2V0UmVzdWx0cyhyZXNvbHZlLCByZWplY3QsIGpvYiwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5DSFVOS19ET1dOTE9BREVEKSB7XG4gICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goZXZlbnQuZGF0YS5jaHVuay5idWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rcy5sZW5ndGggPj0gNTApIHtcbiAgICAgICAgICAgICAgICAgIGpvYi5kb3dubG9hZGVkRmlsZSA9IG5ldyBGaWxlKFxuICAgICAgICAgICAgICAgICAgICBqb2IuZG93bmxvYWRlZEZpbGVcbiAgICAgICAgICAgICAgICAgICAgICA/IFtqb2IuZG93bmxvYWRlZEZpbGUuc2xpY2UoKV0uY29uY2F0KGNodW5rcylcbiAgICAgICAgICAgICAgICAgICAgICA6IGNodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgbHVmaUZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGx1ZmlGaWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBjaHVua3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuRE9XTkxPQURfQ09NUExFVEUpIHtcbiAgICAgICAgICAgICAgICBqb2IuZG93bmxvYWRlZEZpbGUgPSBuZXcgRmlsZShcbiAgICAgICAgICAgICAgICAgIGpvYi5kb3dubG9hZGVkRmlsZVxuICAgICAgICAgICAgICAgICAgICA/IFtqb2IuZG93bmxvYWRlZEZpbGUuc2xpY2UoKV0uY29uY2F0KGNodW5rcylcbiAgICAgICAgICAgICAgICAgICAgOiBjaHVua3MsXG4gICAgICAgICAgICAgICAgICBsdWZpRmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBsdWZpRmlsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY2h1bmtzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICBqb2IuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBsdWZpRmlsZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSBhcyBQcm9taXNlPEx1ZmlKb2I+LFxuICAgICAgICAoZXJyb3IpID0+IG5ldyBEb3dubG9hZEVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4vKipcbiAqIFJldHJpZXZlIGluZm9ybWF0aW9ucyBhYm91dCBhIGZpbGVcbiAqXG4gKiBAcGFyYW0gZG93bmxvYWRVcmxcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGluZm9zID0gKFxuICBkb3dubG9hZFVybDogVVJMLFxuICBwYXNzd29yZD86IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEluZm9zRXJyb3IgfCBDcnlwdG9FcnJvcj4gPT5cbiAgaGFuZGxlUGFzc3dvcmRIYXNoaW5nKGRvd25sb2FkVXJsLCBwYXNzd29yZCkuYW5kVGhlbigobHVmaUZpbGUpID0+XG4gICAgb2tBc3luYyhuZXcgTHVmaUpvYihsdWZpRmlsZSwgV09SS0VSX1RZUEUuSU5GT1MpKVxuICApXG4gICAgLmFuZFRoZW4oKGpvYjogTHVmaUpvYikgPT5cbiAgICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgam9iXG4gICAgICAgICAgICAub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuSU5GT1NfUkVUUklFVkVEKSB7XG4gICAgICAgICAgICAgICAgam9iLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShqb2IpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgICBuZXcgSm9iRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gcmV0cmlldmUgaW5mb3JtYXRpb25zIG9mIHRoZSBmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgY2F1c2U6IGV2ZW50LmRhdGEuZXJyb3IgfSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGFyZ3M6IHsgbHVmaUZpbGU6IGpvYi5sdWZpRmlsZSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pIGFzIFByb21pc2U8THVmaUpvYj4sXG4gICAgICAgIChlcnJvcikgPT4gbmV3IEluZm9zRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgICApXG4gICAgKTtcblxuLyoqXG4gKiBQYXVzZSBhbiB1cGxvYWQvZG93bmxvYWQgam9iXG4gKiBAcGFyYW0gam9iXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgcGF1c2UgPSAoam9iOiBMdWZpSm9iKTogUmVzdWx0QXN5bmM8THVmaUpvYiwgRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICBqb2Iuc3RhdHVzID0gSm9iU3RhdHVzLlBBVVNFRDtcbiAgICByZXR1cm4gb2tBc3luYyhcbiAgICAgIGpvYi5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgIGFjdGlvbjogV09SS0VSX0FDVElPTi5QQVVTRSxcbiAgICAgICAgYXJnczogeyBsdWZpRmlsZTogam9iLmx1ZmlGaWxlIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBKb2JQYXVzZUVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgICk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsZSB1cGxvYWRlZCBvbiB0aGUgc2VydmVyXG4gKiBAcGFyYW0gcmVtb3ZlVXJsXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmUgPSAoXG4gIHJlbW92ZVVybDogVVJMLFxuICBwYXNzd29yZD86IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIGNvbnN0IGx1ZmlGaWxlID0gTHVmaUZpbGUuZnJvbVJlbW92ZVVybChyZW1vdmVVcmwsIHBhc3N3b3JkKTtcbiAgY29uc3Qgam9iID0gbmV3IEx1ZmlKb2IobHVmaUZpbGUsIFdPUktFUl9UWVBFLlJFTU9WRSk7XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGpvYlxuICAgICAgICAub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5GSUxFX1JFTU9WRUQpIHtcbiAgICAgICAgICAgIGpvYi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShqb2IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5PUEVSQVRJT05fRkFJTEVEKSB7XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIG5ldyBKb2JFcnJvcihcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlbW92ZSBhIGZpbGVcIiwge1xuICAgICAgICAgICAgICAgIGNhdXNlOiBldmVudC5kYXRhLmVycm9yLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVxdWVzdE1lc3NhZ2UoeyBhcmdzOiB7IGx1ZmlGaWxlIH0gfSk7XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG59O1xuXG4vKipcbiAqIFJlc3VtZSBhbiB1cGxvYWQvZG93bmxvYWQgam9iXG4gKiBAcGFyYW0gam9iXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgcmVzdW1lID0gKGpvYjogTHVmaUpvYik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgam9iLnN0YXR1cyA9IEpvYlN0YXR1cy5PTkdPSU5HO1xuICAgIHJldHVybiBva0FzeW5jKFxuICAgICAgam9iLnJlcXVlc3RNZXNzYWdlKHtcbiAgICAgICAgYWN0aW9uOiBXT1JLRVJfQUNUSU9OLlJFU1VNRSxcbiAgICAgICAgYXJnczogeyBsdWZpRmlsZTogam9iLmx1ZmlGaWxlIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBKb2JSZXN1bWVFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIFNsaWNlIGEgZmlsZSBpbiBtdWx0aXBsZSBjaHVua3NcbiAqXG4gKiBAcGFyYW0gY2h1bmtMZW5ndGhcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHNsaWNlQW5kVXBsb2FkID0gKFxuICBqb2I6IEx1ZmlKb2IsXG4gIGZpbGU6IEZpbGUsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbiAgY2h1bmtMZW5ndGg6IG51bWJlciA9IENIVU5LX0xFTkdUSCxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIEZpbGVTbGljaW5nRXJyb3I+ID0+IHtcbiAgZXZlbnRzLmVtaXQoRVZFTlQuU0xJQ0VfU1RBUlRFRCwgZmlsZXNbam9iLmx1ZmlGaWxlLmtleXMuY2xpZW50XSk7XG4gIGNvbnN0IHRvdGFsQ2h1bmtzID0gTWF0aC5jZWlsKGZpbGUuc2l6ZSAvIGNodW5rTGVuZ3RoKSB8fCAxO1xuICBjb25zdCBjb25jdXJyZW5jeSA9IG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IHx8IDE7XG5cbiAgZmlsZXNbam9iLmx1ZmlGaWxlLmtleXMuY2xpZW50XS50b3RhbENodW5rcyA9IHRvdGFsQ2h1bmtzO1xuXG4gIGNvbnN0IHNlcXVlbnRpYWxMb29wID0gYXN5bmMgKCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxDaHVua3M7IGkrKykge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpICogY2h1bmtMZW5ndGg7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihzdGFydCArIGNodW5rTGVuZ3RoLCBmaWxlLnNpemUpO1xuICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZmlsZS5zbGljZShzdGFydCwgZW5kLCBmaWxlLnR5cGUpLmFycmF5QnVmZmVyKCk7XG5cbiAgICAgIGpvYi5yZXF1ZXN0TWVzc2FnZShcbiAgICAgICAge1xuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIGNodW5rOiB7XG4gICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbHVmaUZpbGU6IGZpbGVzW2pvYi5sdWZpRmlsZS5rZXlzLmNsaWVudF0sXG4gICAgICAgICAgICBhbGdvLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtidWZmZXJdLFxuICAgICAgKTtcblxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgY29uc3Qgd2FpdFVudGlsVXBsb2FkU3RhcnRlZCA9ICgpID0+XG4gICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGpvYi5ldmVudHMub25jZShFVkVOVC5VUExPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB3YWl0VW50aWxVcGxvYWRTdGFydGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGkgJSBjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICBjb25zdCB3YWl0Rm9yUXVldWVBdmFpbGFiaWxpdHkgPSAoKSA9PlxuICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBqb2IuZXZlbnRzLm9uY2UoRVZFTlQuQ0hVTktfVVBMT0FERUQsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgd2FpdEZvclF1ZXVlQXZhaWxhYmlsaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHNlcXVlbnRpYWxMb29wKCk7XG5cbiAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogU3RhcnQgdGhlIHVwbG9hZCBvbiB0aGUgc2VydmVyXG4gKiBAcGFyYW0gc2VydmVyVXJsXG4gKiBAcGFyYW0gZmlsZVxuICogQHBhcmFtIGRlbGF5XG4gKiBAcGFyYW0gZGVsQXRGaXJzdFZpZXdcbiAqIEBwYXJhbSB6aXBwZWRcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHN0YXJ0VXBsb2FkID0gKFxuICBzZXJ2ZXJVcmw6IFVSTCxcbiAgZmlsZTogRmlsZSxcbiAgZGVsYXk6IG51bWJlcixcbiAgZGVsQXRGaXJzdFZpZXc6IGJvb2xlYW4sXG4gIHppcHBlZDogYm9vbGVhbixcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKSA9PlxuICBjcnlwdG8uZ2VuZXJhdGVLZXkoXG4gICAgYWxnbyxcbiAgKS5hbmRUaGVuKFxuICAgIChjbGllbnRLZXk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHBhc3N3b3JkKSB7XG4gICAgICAgIHJldHVybiBoYXNoUGFzc3dvcmQocGFzc3dvcmQsIGFsZ28pLmFuZFRoZW4oKGhhc2hlZFBhc3N3b3JkKSA9PlxuICAgICAgICAgIG9rQXN5bmMoeyBwYXNzd29yZDogaGFzaGVkUGFzc3dvcmQsIGNsaWVudEtleSB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9rQXN5bmMoeyBwYXNzd29yZCwgY2xpZW50S2V5IH0pO1xuICAgICAgfVxuICAgIH0sXG4gICkuYW5kVGhlbigoeyBwYXNzd29yZCwgY2xpZW50S2V5IH0pID0+IHtcbiAgICBmaWxlc1tjbGllbnRLZXldID0gbmV3IEx1ZmlGaWxlKHNlcnZlclVybC50b1N0cmluZygpLCB7XG4gICAgICBkZWxheSxcbiAgICAgIGRlbEF0Rmlyc3RWaWV3LFxuICAgICAgemlwcGVkLFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBuYW1lOiBmaWxlLm5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpLCAvLyBSZW1vdmUgcGF0aCBmcm9tIGZpbGVuYW1lXG4gICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICBrZXlzOiB7IGNsaWVudDogY2xpZW50S2V5LCBzZXJ2ZXI6IFwiXCIgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGpvYiA9IG5ldyBMdWZpSm9iKGZpbGVzW2NsaWVudEtleV0sIFdPUktFUl9UWVBFLlVQTE9BRCk7XG5cbiAgICBmaWxlc1tjbGllbnRLZXldLnVwbG9hZFN0YXR1cyA9IFVQTE9BRF9TVEFUVVMuUVVFVUVEO1xuXG4gICAgcmV0dXJuIHNsaWNlQW5kVXBsb2FkKGpvYiwgZmlsZSwgYWxnbykuYW5kVGhlbigoKSA9PlxuICAgICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBqb2Iub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU29ja2V0UmVzdWx0cyhyZXNvbHZlLCByZWplY3QsIGpvYiwgZXZlbnQpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmRhdGEuZXZlbnQpIHtcbiAgICAgICAgICAgICAgY2FzZSBFVkVOVC5VUExPQURfQ09NUExFVEU6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgam9iLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICBqb2IubHVmaUZpbGUudXBsb2FkU3RhdHVzID0gVVBMT0FEX1NUQVRVUy5DT01QTEVURTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pIGFzIFByb21pc2U8THVmaUpvYj4sXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKVxuICAgICk7XG4gIH0pO1xuXG4vKipcbiAqIFVwbG9hZCBhIGZpbGUgdG8gdGhlIHNlcnZlclxuICpcbiAqIEBwYXJhbSBzZXJ2ZXJVcmxcbiAqIEBwYXJhbSBmaWxlc1RvVXBsb2FkXG4gKiBAcGFyYW0gZGVsYXlcbiAqIEBwYXJhbSBkZWxBdEZpcnN0Vmlld1xuICogQHBhcmFtIHppcHBlZFxuICogQHBhcmFtIHppcE5hbWVcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWQgPSAoXG4gIHNlcnZlclVybDogVVJMLFxuICBmaWxlc1RvVXBsb2FkOiBGaWxlW10sXG4gIGRlbGF5OiBudW1iZXIgPSAwLFxuICBkZWxBdEZpcnN0VmlldzogYm9vbGVhbiA9IGZhbHNlLFxuICB6aXBwZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgemlwTmFtZTogc3RyaW5nID0gXCJkb2N1bWVudHMuemlwXCIsXG4gIHBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuKTogUmVzdWx0QXN5bmM8THVmaUpvYltdLCBFcnJvcj4gPT4ge1xuICBjb25zdCBvcGVyYXRpb25zOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj5bXSA9IFtdO1xuXG4gIGlmICghemlwcGVkKSB7XG4gICAgZmlsZXNUb1VwbG9hZC5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBvcGVyYXRpb25zLnB1c2goc3RhcnRVcGxvYWQoXG4gICAgICAgIHNlcnZlclVybCxcbiAgICAgICAgZmlsZSxcbiAgICAgICAgZGVsYXksXG4gICAgICAgIGRlbEF0Rmlyc3RWaWV3LFxuICAgICAgICB6aXBwZWQsXG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBhbGdvLFxuICAgICAgKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UganVzdCB3YW50IHRvIHVwbG9hZCBhIHNpbmdsZSB6aXAgZmlsZSAocHJvYmFibHkgY3JlYXRlZCBieSBtYW51YWxseSB1c2luZyBjb21wcmVzcygpKVxuICAgIGlmIChcbiAgICAgIGZpbGVzVG9VcGxvYWQubGVuZ3RoID09PSAxICYmIGZpbGVzVG9VcGxvYWRbMF0udHlwZSA9PT0gXCJhcHBsaWNhdGlvbi96aXBcIlxuICAgICkge1xuICAgICAgb3BlcmF0aW9ucy5wdXNoKFxuICAgICAgICBzdGFydFVwbG9hZChcbiAgICAgICAgICBzZXJ2ZXJVcmwsXG4gICAgICAgICAgZmlsZXNUb1VwbG9hZFswXSxcbiAgICAgICAgICBkZWxheSxcbiAgICAgICAgICBkZWxBdEZpcnN0VmlldyxcbiAgICAgICAgICB6aXBwZWQsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgYWxnbyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZXJhdGlvbnMucHVzaChcbiAgICAgICAgYWRkRmlsZXNUb0FyY2hpdmUoZmlsZXNUb1VwbG9hZClcbiAgICAgICAgICAuYW5kVGhlbigoYXJjaGl2ZUVudHJpZXMpID0+XG4gICAgICAgICAgICBjb21wcmVzcyhcbiAgICAgICAgICAgICAgYXJjaGl2ZUVudHJpZXMsXG4gICAgICAgICAgICAgIHppcE5hbWUsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5hbmRUaGVuKChqb2IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoam9iLmFyY2hpdmVGaWxlKSB7XG4gICAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5BUkNISVZFX0NSRUFURUQsIGpvYi5hcmNoaXZlRmlsZSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydFVwbG9hZChcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyVXJsLFxuICAgICAgICAgICAgICAgICAgICBqb2IuYXJjaGl2ZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5LFxuICAgICAgICAgICAgICAgICAgICBkZWxBdEZpcnN0VmlldyxcbiAgICAgICAgICAgICAgICAgICAgemlwcGVkLFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgYWxnbyxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJBc3luYyhuZXcgSm9iRXJyb3IoXCJhcmNoaXZlRmlsZSBtdXN0IGJlIGRlZmluZWRcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVzdWx0QXN5bmMuY29tYmluZShvcGVyYXRpb25zKS5vckVsc2UoKGVycm9yKSA9PlxuICAgIGVyckFzeW5jKG5ldyBVcGxvYWRFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVycm9yIH0pKVxuICApO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgc29ja2V0IG9wZW5pbmcgb3BlcmF0aW9uIGluIGEgcHJvbWlzZVxuICpcbiAqIEBwYXJhbSByZXNvbHZlXG4gKiBAcGFyYW0gcmVqZWN0XG4gKiBAcGFyYW0gam9iXG4gKiBAcGFyYW0gZXZlbnRcbiAqL1xuY29uc3QgaGFuZGxlU29ja2V0UmVzdWx0cyA9IChcbiAgcmVzb2x2ZToge1xuICAgICh2YWx1ZTogTHVmaUpvYiB8IFByb21pc2VMaWtlPEx1ZmlKb2I+KTogdm9pZDtcbiAgICAoYXJnMDogTHVmaUpvYik6IHZvaWQ7XG4gIH0sXG4gIHJlamVjdDogeyAocmVhc29uPzogdW5rbm93bik6IHZvaWQ7IChhcmcwOiB1bmtub3duKTogdm9pZCB9LFxuICBqb2I6IEx1ZmlKb2IsXG4gIGV2ZW50OiBNZXNzYWdlRXZlbnQsXG4pID0+IHtcbiAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULlNPQ0tFVF9PUEVORUQpIHtcbiAgICByZXNvbHZlKGpvYik7XG4gIH1cblxuICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCkge1xuICAgIHJlamVjdChcbiAgICAgIG5ldyBKb2JFcnJvcihcIlRoZSBqb2IgcmV0dXJuZWQgYW4gZXJyb3JcIiwgeyBjYXVzZTogZXZlbnQuZGF0YS5lcnJvciB9KSxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBnZXRGaWxlc1F1ZXVlZCA9ICgpOiBMdWZpRmlsZVtdID0+XG4gIE9iamVjdC52YWx1ZXMoZmlsZXMpLmZpbHRlcigoZmlsZSkgPT5cbiAgICBmaWxlLnVwbG9hZFN0YXR1cyA9PT0gVVBMT0FEX1NUQVRVUy5RVUVVRURcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVJbmRleEluUXVldWUgPSAoY2xpZW50S2V5OiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgT2JqZWN0LmtleXMoZ2V0RmlsZXNRdWV1ZWQoKSkuaW5kZXhPZihjbGllbnRLZXkpO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB0eXBlIHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgSm9iU3RhdHVzIH0gZnJvbSBcIn4vZW51bS9qb2Itc3RhdHVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlclJlcXVlc3RNZXNzYWdlIH0gZnJvbSBcIn4vdHlwZS93b3JrZXItcmVxdWVzdC1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciwgd29ya2VyVXJsIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfVFlQRSB9IGZyb20gXCJ+L2VudW0vd29ya2VyLXR5cGUudHNcIjtcblxuZXhwb3J0IGNsYXNzIEx1ZmlKb2Ige1xuICBwdWJsaWMgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgbHVmaUZpbGU6IEx1ZmlGaWxlO1xuICBwdWJsaWMgc3RhdHVzID0gSm9iU3RhdHVzLk9OR09JTkc7XG4gIHB1YmxpYyBhcmNoaXZlRmlsZTogRmlsZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGFyY2hpdmVGaWxlczogRmlsZVtdID0gW107XG4gIHB1YmxpYyBkb3dubG9hZGVkRmlsZTogRmlsZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHdvcmtlcjogV29ya2VyO1xuXG4gIHByaXZhdGUgaXNUZXJtaW5hdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IobHVmaUZpbGU6IEx1ZmlGaWxlLCB3b3JrZXJUeXBlOiBXT1JLRVJfVFlQRSkge1xuICAgIHN3aXRjaCAod29ya2VyVHlwZSkge1xuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5DQU5DRUw6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKFwiY2FuY2VsXCIpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgV09SS0VSX1RZUEUuQ09NUFJFU1M6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKFwiY29tcHJlc3NcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5ERUNPTVBSRVNTOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcImRlY29tcHJlc3NcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5ET1dOTE9BRDpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwoXCJkb3dubG9hZFwiKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFdPUktFUl9UWVBFLklORk9TOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcImluZm9zXCIpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgV09SS0VSX1RZUEUuUkVNT1ZFOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcInJlbW92ZVwiKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFdPUktFUl9UWVBFLlVQTE9BRDpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwoXCJ1cGxvYWRcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmx1ZmlGaWxlID0gbHVmaUZpbGU7XG4gICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5KT0JfVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgdGhpcy5pc1Rlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy50ZXJtaW5hdGUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhpcy5zdGF0dXMgPSBKb2JTdGF0dXMuRkFJTEVEO1xuICAgICAgdGhpcy5sdWZpRmlsZS51cGxvYWRTdGF0dXMgPSBVUExPQURfU1RBVFVTLkZBSUxFRDtcblxuICAgICAgdGhpcy5ldmVudHMuZW1pdChFVkVOVC5KT0JfVEVSTUlOQVRFRCwgZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbkVycm9yKChldmVudCkgPT4gY29uc29sZS5lcnJvcihldmVudC5lcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlbGxzIHRoZSB3b3JrZXIgdGhlIGpvYiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlID0gKCkgPT4ge1xuICAgIHRoaXMuc3RhdHVzID0gSm9iU3RhdHVzLkNPTVBMRVRFO1xuICAgIHRoaXMuZXZlbnRzLmVtaXQoRVZFTlQuSk9CX1RFUk1JTkFURUQpO1xuICB9O1xuXG4gIHB1YmxpYyBoYXNGYWlsZWQgPSAoKSA9PiB0aGlzLnN0YXR1cyA9PT0gSm9iU3RhdHVzLkZBSUxFRDtcblxuICBwdWJsaWMgb25FcnJvciA9IChjYWxsYmFjazogKGFyZzogRXJyb3JFdmVudCkgPT4gdm9pZCkgPT4ge1xuICAgIHRoaXMud29ya2VyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIG9uTWVzc2FnZSA9IChjYWxsYmFjaz86IChhcmc6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZCkgPT4ge1xuICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChlKSA9PiB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV2ZW50ID0gZS5kYXRhLmV2ZW50O1xuXG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50ID09PSBFVkVOVC5GSUxFX1VQREFURUQpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubHVmaUZpbGUsIGUuZGF0YS5sdWZpRmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlLmRhdGEuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHB1YmxpYyBvbk1lc3NhZ2VFcnJvciA9IChjYWxsYmFjazogKGFyZzogTWVzc2FnZUV2ZW50KSA9PiB2b2lkKSA9PiB7XG4gICAgdGhpcy53b3JrZXIub25tZXNzYWdlZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIG9uUHJvZ3Jlc3MgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcbiAgICB0aGlzLmV2ZW50cy5vbihFVkVOVC5DSFVOS19VUExPQURFRCwgKCkgPT4ge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50cy5vbihFVkVOVC5DSFVOS19ET1dOTE9BREVELCAoKSA9PiB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIHJlcXVlc3RNZXNzYWdlID0gKFxuICAgIG1zZzogV29ya2VyUmVxdWVzdE1lc3NhZ2UsXG4gICAgdHJhbnNmZXJhYmxlOiBUcmFuc2ZlcmFibGVbXSA9IFtdLFxuICApID0+IHtcbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZShtc2csIHRyYW5zZmVyYWJsZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBwdWJsaWMgdGVybWluYXRlID0gKCkgPT4ge1xuICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIHdhaXRGb3JDb21wbGV0aW9uID0gKCk6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gICAgaWYgKHRoaXMuaXNUZXJtaW5hdGVkKSB7XG4gICAgICBpZiAodGhpcy5zdGF0dXMgPT09IEpvYlN0YXR1cy5DT01QTEVURSkge1xuICAgICAgICByZXR1cm4gb2tBc3luYyh0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhlbnN1cmVFcnJvcihcIkpvYiBoYXMgZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5KT0JfVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBKb2JTdGF0dXMuQ09NUExFVEUpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIHdhaXRGb3JTdGFydCA9ICgpOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT4ge1xuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5VUExPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICApO1xuICB9O1xuXG4gIHByaXZhdGUgZGlzcGF0Y2hFdmVudCA9IChldmVudDogRVZFTlQsIGVycm9yOiB1bmRlZmluZWQgfCBFcnJvcikgPT4ge1xuICAgIHRoaXMuZXZlbnRzLmVtaXQoZXZlbnQsIGVycm9yKTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlciB9XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiIsICJleHBvcnQgY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cdH1cbn1cblxuLyoqXG5BbiBlcnJvciB0byBiZSB0aHJvd24gd2hlbiB0aGUgcmVxdWVzdCBpcyBhYm9ydGVkIGJ5IEFib3J0Q29udHJvbGxlci5cbkRPTUV4Y2VwdGlvbiBpcyB0aHJvd24gaW5zdGVhZCBvZiB0aGlzIEVycm9yIHdoZW4gRE9NRXhjZXB0aW9uIGlzIGF2YWlsYWJsZS5cbiovXG5leHBvcnQgY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IobWVzc2FnZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InO1xuXHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdH1cbn1cblxuLyoqXG5UT0RPOiBSZW1vdmUgQWJvcnRFcnJvciBhbmQganVzdCB0aHJvdyBET01FeGNlcHRpb24gd2hlbiB0YXJnZXRpbmcgTm9kZSAxOC5cbiovXG5jb25zdCBnZXRET01FeGNlcHRpb24gPSBlcnJvck1lc3NhZ2UgPT4gZ2xvYmFsVGhpcy5ET01FeGNlcHRpb24gPT09IHVuZGVmaW5lZFxuXHQ/IG5ldyBBYm9ydEVycm9yKGVycm9yTWVzc2FnZSlcblx0OiBuZXcgRE9NRXhjZXB0aW9uKGVycm9yTWVzc2FnZSk7XG5cbi8qKlxuVE9ETzogUmVtb3ZlIGJlbG93IGZ1bmN0aW9uIGFuZCBqdXN0ICdyZWplY3Qoc2lnbmFsLnJlYXNvbiknIHdoZW4gdGFyZ2V0aW5nIE5vZGUgMTguXG4qL1xuY29uc3QgZ2V0QWJvcnRlZFJlYXNvbiA9IHNpZ25hbCA9PiB7XG5cdGNvbnN0IHJlYXNvbiA9IHNpZ25hbC5yZWFzb24gPT09IHVuZGVmaW5lZFxuXHRcdD8gZ2V0RE9NRXhjZXB0aW9uKCdUaGlzIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nKVxuXHRcdDogc2lnbmFsLnJlYXNvbjtcblxuXHRyZXR1cm4gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiBnZXRET01FeGNlcHRpb24ocmVhc29uKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBUaW1lb3V0KHByb21pc2UsIG9wdGlvbnMpIHtcblx0Y29uc3Qge1xuXHRcdG1pbGxpc2Vjb25kcyxcblx0XHRmYWxsYmFjayxcblx0XHRtZXNzYWdlLFxuXHRcdGN1c3RvbVRpbWVycyA9IHtzZXRUaW1lb3V0LCBjbGVhclRpbWVvdXR9LFxuXHR9ID0gb3B0aW9ucztcblxuXHRsZXQgdGltZXI7XG5cblx0Y29uc3Qgd3JhcHBlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBtaWxsaXNlY29uZHMgIT09ICdudW1iZXInIHx8IE1hdGguc2lnbihtaWxsaXNlY29uZHMpICE9PSAxKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBtaWxsaXNlY29uZHNcXGAgdG8gYmUgYSBwb3NpdGl2ZSBudW1iZXIsIGdvdCBcXGAke21pbGxpc2Vjb25kc31cXGBgKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucy5zaWduYWwpIHtcblx0XHRcdGNvbnN0IHtzaWduYWx9ID0gb3B0aW9ucztcblx0XHRcdGlmIChzaWduYWwuYWJvcnRlZCkge1xuXHRcdFx0XHRyZWplY3QoZ2V0QWJvcnRlZFJlYXNvbihzaWduYWwpKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuXHRcdFx0XHRyZWplY3QoZ2V0QWJvcnRlZFJlYXNvbihzaWduYWwpKTtcblx0XHRcdH07XG5cblx0XHRcdHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0SGFuZGxlciwge29uY2U6IHRydWV9KTtcblxuXHRcdFx0cHJvbWlzZS5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0c2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChtaWxsaXNlY29uZHMgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuXHRcdFx0cHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY3JlYXRlIHRoZSBlcnJvciBvdXRzaWRlIG9mIGBzZXRUaW1lb3V0YCB0byBwcmVzZXJ2ZSB0aGUgc3RhY2sgdHJhY2UuXG5cdFx0Y29uc3QgdGltZW91dEVycm9yID0gbmV3IFRpbWVvdXRFcnJvcigpO1xuXG5cdFx0dGltZXIgPSBjdXN0b21UaW1lcnMuc2V0VGltZW91dC5jYWxsKHVuZGVmaW5lZCwgKCkgPT4ge1xuXHRcdFx0aWYgKGZhbGxiYWNrKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxsYmFjaygpKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIHByb21pc2UuY2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHByb21pc2UuY2FuY2VsKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtZXNzYWdlID09PSBmYWxzZSkge1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0XHRyZWplY3QobWVzc2FnZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aW1lb3V0RXJyb3IubWVzc2FnZSA9IG1lc3NhZ2UgPz8gYFByb21pc2UgdGltZWQgb3V0IGFmdGVyICR7bWlsbGlzZWNvbmRzfSBtaWxsaXNlY29uZHNgO1xuXHRcdFx0XHRyZWplY3QodGltZW91dEVycm9yKTtcblx0XHRcdH1cblx0XHR9LCBtaWxsaXNlY29uZHMpO1xuXG5cdFx0KGFzeW5jICgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc29sdmUoYXdhaXQgcHJvbWlzZSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0pKCk7XG5cdH0pO1xuXG5cdGNvbnN0IGNhbmNlbGFibGVQcm9taXNlID0gd3JhcHBlZFByb21pc2UuZmluYWxseSgoKSA9PiB7XG5cdFx0Y2FuY2VsYWJsZVByb21pc2UuY2xlYXIoKTtcblx0fSk7XG5cblx0Y2FuY2VsYWJsZVByb21pc2UuY2xlYXIgPSAoKSA9PiB7XG5cdFx0Y3VzdG9tVGltZXJzLmNsZWFyVGltZW91dC5jYWxsKHVuZGVmaW5lZCwgdGltZXIpO1xuXHRcdHRpbWVyID0gdW5kZWZpbmVkO1xuXHR9O1xuXG5cdHJldHVybiBjYW5jZWxhYmxlUHJvbWlzZTtcbn1cbiIsICIvLyBQb3J0IG9mIGxvd2VyX2JvdW5kIGZyb20gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2FsZ29yaXRobS9sb3dlcl9ib3VuZFxuLy8gVXNlZCB0byBjb21wdXRlIGluc2VydGlvbiBpbmRleCB0byBrZWVwIHF1ZXVlIHNvcnRlZCBhZnRlciBpbnNlcnRpb25cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gICAgbGV0IGZpcnN0ID0gMDtcbiAgICBsZXQgY291bnQgPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBzdGVwID0gTWF0aC50cnVuYyhjb3VudCAvIDIpO1xuICAgICAgICBsZXQgaXQgPSBmaXJzdCArIHN0ZXA7XG4gICAgICAgIGlmIChjb21wYXJhdG9yKGFycmF5W2l0XSwgdmFsdWUpIDw9IDApIHtcbiAgICAgICAgICAgIGZpcnN0ID0gKytpdDtcbiAgICAgICAgICAgIGNvdW50IC09IHN0ZXAgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY291bnQgPSBzdGVwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaXJzdDtcbn1cbiIsICJpbXBvcnQgbG93ZXJCb3VuZCBmcm9tICcuL2xvd2VyLWJvdW5kLmpzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaW9yaXR5UXVldWUge1xuICAgICNxdWV1ZSA9IFtdO1xuICAgIGVucXVldWUocnVuLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBwcmlvcml0eTogMCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgICAgICBwcmlvcml0eTogb3B0aW9ucy5wcmlvcml0eSxcbiAgICAgICAgICAgIHJ1bixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSAmJiB0aGlzLiNxdWV1ZVt0aGlzLnNpemUgLSAxXS5wcmlvcml0eSA+PSBvcHRpb25zLnByaW9yaXR5KSB7XG4gICAgICAgICAgICB0aGlzLiNxdWV1ZS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbG93ZXJCb3VuZCh0aGlzLiNxdWV1ZSwgZWxlbWVudCwgKGEsIGIpID0+IGIucHJpb3JpdHkgLSBhLnByaW9yaXR5KTtcbiAgICAgICAgdGhpcy4jcXVldWUuc3BsaWNlKGluZGV4LCAwLCBlbGVtZW50KTtcbiAgICB9XG4gICAgZGVxdWV1ZSgpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuI3F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiBpdGVtPy5ydW47XG4gICAgfVxuICAgIGZpbHRlcihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNxdWV1ZS5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQucHJpb3JpdHkgPT09IG9wdGlvbnMucHJpb3JpdHkpLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC5ydW4pO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLmxlbmd0aDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5pbXBvcnQgcFRpbWVvdXQsIHsgVGltZW91dEVycm9yIH0gZnJvbSAncC10aW1lb3V0JztcbmltcG9ydCBQcmlvcml0eVF1ZXVlIGZyb20gJy4vcHJpb3JpdHktcXVldWUuanMnO1xuLyoqXG5Qcm9taXNlIHF1ZXVlIHdpdGggY29uY3VycmVuY3kgY29udHJvbC5cbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQUXVldWUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgICNjYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50O1xuICAgICNpc0ludGVydmFsSWdub3JlZDtcbiAgICAjaW50ZXJ2YWxDb3VudCA9IDA7XG4gICAgI2ludGVydmFsQ2FwO1xuICAgICNpbnRlcnZhbDtcbiAgICAjaW50ZXJ2YWxFbmQgPSAwO1xuICAgICNpbnRlcnZhbElkO1xuICAgICN0aW1lb3V0SWQ7XG4gICAgI3F1ZXVlO1xuICAgICNxdWV1ZUNsYXNzO1xuICAgICNwZW5kaW5nID0gMDtcbiAgICAvLyBUaGUgYCFgIGlzIG5lZWRlZCBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzIxOTRcbiAgICAjY29uY3VycmVuY3k7XG4gICAgI2lzUGF1c2VkO1xuICAgICN0aHJvd09uVGltZW91dDtcbiAgICAvKipcbiAgICBQZXItb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBPcGVyYXRpb25zIGZ1bGZpbGwgb25jZSBgdGltZW91dGAgZWxhcHNlcyBpZiB0aGV5IGhhdmVuJ3QgYWxyZWFkeS5cblxuICAgIEFwcGxpZXMgdG8gZWFjaCBmdXR1cmUgb3BlcmF0aW9uLlxuICAgICovXG4gICAgdGltZW91dDtcbiAgICAvLyBUT0RPOiBUaGUgYHRocm93T25UaW1lb3V0YCBvcHRpb24gc2hvdWxkIGFmZmVjdCB0aGUgcmV0dXJuIHR5cGVzIG9mIGBhZGQoKWAgYW5kIGBhZGRBbGwoKWBcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ6IGZhbHNlLFxuICAgICAgICAgICAgaW50ZXJ2YWxDYXA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgICAgICAgIGludGVydmFsOiAwLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgICAgICAgIGF1dG9TdGFydDogdHJ1ZSxcbiAgICAgICAgICAgIHF1ZXVlQ2xhc3M6IFByaW9yaXR5UXVldWUsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoISh0eXBlb2Ygb3B0aW9ucy5pbnRlcnZhbENhcCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5pbnRlcnZhbENhcCA+PSAxKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgaW50ZXJ2YWxDYXBcXGAgdG8gYmUgYSBudW1iZXIgZnJvbSAxIGFuZCB1cCwgZ290IFxcYCR7b3B0aW9ucy5pbnRlcnZhbENhcD8udG9TdHJpbmcoKSA/PyAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWxDYXB9KWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmludGVydmFsID09PSB1bmRlZmluZWQgfHwgIShOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5pbnRlcnZhbCkgJiYgb3B0aW9ucy5pbnRlcnZhbCA+PSAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgaW50ZXJ2YWxcXGAgdG8gYmUgYSBmaW5pdGUgbnVtYmVyID49IDAsIGdvdCBcXGAke29wdGlvbnMuaW50ZXJ2YWw/LnRvU3RyaW5nKCkgPz8gJyd9XFxgICgke3R5cGVvZiBvcHRpb25zLmludGVydmFsfSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNjYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50ID0gb3B0aW9ucy5jYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50O1xuICAgICAgICB0aGlzLiNpc0ludGVydmFsSWdub3JlZCA9IG9wdGlvbnMuaW50ZXJ2YWxDYXAgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fCBvcHRpb25zLmludGVydmFsID09PSAwO1xuICAgICAgICB0aGlzLiNpbnRlcnZhbENhcCA9IG9wdGlvbnMuaW50ZXJ2YWxDYXA7XG4gICAgICAgIHRoaXMuI2ludGVydmFsID0gb3B0aW9ucy5pbnRlcnZhbDtcbiAgICAgICAgdGhpcy4jcXVldWUgPSBuZXcgb3B0aW9ucy5xdWV1ZUNsYXNzKCk7XG4gICAgICAgIHRoaXMuI3F1ZXVlQ2xhc3MgPSBvcHRpb25zLnF1ZXVlQ2xhc3M7XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSBvcHRpb25zLmNvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XG4gICAgICAgIHRoaXMuI3Rocm93T25UaW1lb3V0ID0gb3B0aW9ucy50aHJvd09uVGltZW91dCA9PT0gdHJ1ZTtcbiAgICAgICAgdGhpcy4jaXNQYXVzZWQgPSBvcHRpb25zLmF1dG9TdGFydCA9PT0gZmFsc2U7XG4gICAgfVxuICAgIGdldCAjZG9lc0ludGVydmFsQWxsb3dBbm90aGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNJbnRlcnZhbElnbm9yZWQgfHwgdGhpcy4jaW50ZXJ2YWxDb3VudCA8IHRoaXMuI2ludGVydmFsQ2FwO1xuICAgIH1cbiAgICBnZXQgI2RvZXNDb25jdXJyZW50QWxsb3dBbm90aGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGVuZGluZyA8IHRoaXMuI2NvbmN1cnJlbmN5O1xuICAgIH1cbiAgICAjbmV4dCgpIHtcbiAgICAgICAgdGhpcy4jcGVuZGluZy0tO1xuICAgICAgICB0aGlzLiN0cnlUb1N0YXJ0QW5vdGhlcigpO1xuICAgICAgICB0aGlzLmVtaXQoJ25leHQnKTtcbiAgICB9XG4gICAgI29uUmVzdW1lSW50ZXJ2YWwoKSB7XG4gICAgICAgIHRoaXMuI29uSW50ZXJ2YWwoKTtcbiAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKTtcbiAgICAgICAgdGhpcy4jdGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgI2lzSW50ZXJ2YWxQYXVzZWQoKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmICh0aGlzLiNpbnRlcnZhbElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy4jaW50ZXJ2YWxFbmQgLSBub3c7XG4gICAgICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQWN0IGFzIHRoZSBpbnRlcnZhbCB3YXMgZG9uZVxuICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVzdW1lIGl0IGhlcmUgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc3VtZWQgb24gbGluZSAxNjBcbiAgICAgICAgICAgICAgICB0aGlzLiNpbnRlcnZhbENvdW50ID0gKHRoaXMuI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQpID8gdGhpcy4jcGVuZGluZyA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBY3QgYXMgdGhlIGludGVydmFsIGlzIHBlbmRpbmdcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jdGltZW91dElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNvblJlc3VtZUludGVydmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAjdHJ5VG9TdGFydEFub3RoZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiNxdWV1ZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAvLyBXZSBjYW4gY2xlYXIgdGhlIGludGVydmFsIChcInBhdXNlXCIpXG4gICAgICAgICAgICAvLyBCZWNhdXNlIHdlIGNhbiByZWRvIGl0IGxhdGVyIChcInJlc3VtZVwiKVxuICAgICAgICAgICAgaWYgKHRoaXMuI2ludGVydmFsSWQpIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuI2ludGVydmFsSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW50ZXJ2YWxJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZW1wdHknKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiNwZW5kaW5nID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdpZGxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLiNpc1BhdXNlZCkge1xuICAgICAgICAgICAgY29uc3QgY2FuSW5pdGlhbGl6ZUludGVydmFsID0gIXRoaXMuI2lzSW50ZXJ2YWxQYXVzZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy4jZG9lc0ludGVydmFsQWxsb3dBbm90aGVyICYmIHRoaXMuI2RvZXNDb25jdXJyZW50QWxsb3dBbm90aGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9iID0gdGhpcy4jcXVldWUuZGVxdWV1ZSgpO1xuICAgICAgICAgICAgICAgIGlmICgham9iKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBqb2IoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuSW5pdGlhbGl6ZUludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgI2luaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkKCkge1xuICAgICAgICBpZiAodGhpcy4jaXNJbnRlcnZhbElnbm9yZWQgfHwgdGhpcy4jaW50ZXJ2YWxJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI29uSW50ZXJ2YWwoKTtcbiAgICAgICAgfSwgdGhpcy4jaW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLiNpbnRlcnZhbEVuZCA9IERhdGUubm93KCkgKyB0aGlzLiNpbnRlcnZhbDtcbiAgICB9XG4gICAgI29uSW50ZXJ2YWwoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpbnRlcnZhbENvdW50ID09PSAwICYmIHRoaXMuI3BlbmRpbmcgPT09IDAgJiYgdGhpcy4jaW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiNpbnRlcnZhbElkKTtcbiAgICAgICAgICAgIHRoaXMuI2ludGVydmFsSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaW50ZXJ2YWxDb3VudCA9IHRoaXMuI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQgPyB0aGlzLiNwZW5kaW5nIDogMDtcbiAgICAgICAgdGhpcy4jcHJvY2Vzc1F1ZXVlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgIEV4ZWN1dGVzIGFsbCBxdWV1ZWQgZnVuY3Rpb25zIHVudGlsIGl0IHJlYWNoZXMgdGhlIGxpbWl0LlxuICAgICovXG4gICAgI3Byb2Nlc3NRdWV1ZSgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgICAgIHdoaWxlICh0aGlzLiN0cnlUb1N0YXJ0QW5vdGhlcigpKSB7IH1cbiAgICB9XG4gICAgZ2V0IGNvbmN1cnJlbmN5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY29uY3VycmVuY3k7XG4gICAgfVxuICAgIHNldCBjb25jdXJyZW5jeShuZXdDb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbmV3Q29uY3VycmVuY3kgPT09ICdudW1iZXInICYmIG5ld0NvbmN1cnJlbmN5ID49IDEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBjb25jdXJyZW5jeVxcYCB0byBiZSBhIG51bWJlciBmcm9tIDEgYW5kIHVwLCBnb3QgXFxgJHtuZXdDb25jdXJyZW5jeX1cXGAgKCR7dHlwZW9mIG5ld0NvbmN1cnJlbmN5fSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNjb25jdXJyZW5jeSA9IG5ld0NvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLiNwcm9jZXNzUXVldWUoKTtcbiAgICB9XG4gICAgYXN5bmMgI3Rocm93T25BYm9ydChzaWduYWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgYWRkKGZ1bmN0aW9uXywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICB0aHJvd09uVGltZW91dDogdGhpcy4jdGhyb3dPblRpbWVvdXQsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jcXVldWUuZW5xdWV1ZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGVuZGluZysrO1xuICAgICAgICAgICAgICAgIHRoaXMuI2ludGVydmFsQ291bnQrKztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wZXJhdGlvbiA9IGZ1bmN0aW9uXyh7IHNpZ25hbDogb3B0aW9ucy5zaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IHBUaW1lb3V0KFByb21pc2UucmVzb2x2ZShvcGVyYXRpb24pLCB7IG1pbGxpc2Vjb25kczogb3B0aW9ucy50aW1lb3V0IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gUHJvbWlzZS5yYWNlKFtvcGVyYXRpb24sIHRoaXMuI3Rocm93T25BYm9ydChvcHRpb25zLnNpZ25hbCldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcGVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdjb21wbGV0ZWQnLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yICYmICFvcHRpb25zLnRocm93T25UaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI25leHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYWRkJyk7XG4gICAgICAgICAgICB0aGlzLiN0cnlUb1N0YXJ0QW5vdGhlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgYWRkQWxsKGZ1bmN0aW9ucywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZnVuY3Rpb25zLm1hcChhc3luYyAoZnVuY3Rpb25fKSA9PiB0aGlzLmFkZChmdW5jdGlvbl8sIG9wdGlvbnMpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFN0YXJ0IChvciByZXN1bWUpIGV4ZWN1dGluZyBlbnF1ZXVlZCB0YXNrcyB3aXRoaW4gY29uY3VycmVuY3kgbGltaXQuIE5vIG5lZWQgdG8gY2FsbCB0aGlzIGlmIHF1ZXVlIGlzIG5vdCBwYXVzZWQgKHZpYSBgb3B0aW9ucy5hdXRvU3RhcnQgPSBmYWxzZWAgb3IgYnkgYC5wYXVzZSgpYCBtZXRob2QuKVxuICAgICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNQYXVzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2lzUGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuI3Byb2Nlc3NRdWV1ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgUHV0IHF1ZXVlIGV4ZWN1dGlvbiBvbiBob2xkLlxuICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMuI2lzUGF1c2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ2xlYXIgdGhlIHF1ZXVlLlxuICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuI3F1ZXVlID0gbmV3IHRoaXMuI3F1ZXVlQ2xhc3MoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gVXNlZnVsIGlmIHlvdSBmb3IgZXhhbXBsZSBhZGQgYWRkaXRpb25hbCBpdGVtcyBhdCBhIGxhdGVyIHRpbWUuXG5cbiAgICBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBzZXR0bGVzIHdoZW4gdGhlIHF1ZXVlIGJlY29tZXMgZW1wdHkuXG4gICAgKi9cbiAgICBhc3luYyBvbkVtcHR5KCkge1xuICAgICAgICAvLyBJbnN0YW50bHkgcmVzb2x2ZSBpZiB0aGUgcXVldWUgaXMgZW1wdHlcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLiNvbkV2ZW50KCdlbXB0eScpO1xuICAgIH1cbiAgICAvKipcbiAgICBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBzZXR0bGVzIHdoZW4gdGhlIHF1ZXVlIHNpemUgaXMgbGVzcyB0aGFuIHRoZSBnaXZlbiBsaW1pdDogYHF1ZXVlLnNpemUgPCBsaW1pdGAuXG5cbiAgICBJZiB5b3Ugd2FudCB0byBhdm9pZCBoYXZpbmcgdGhlIHF1ZXVlIGdyb3cgYmV5b25kIGEgY2VydGFpbiBzaXplIHlvdSBjYW4gYGF3YWl0IHF1ZXVlLm9uU2l6ZUxlc3NUaGFuKClgIGJlZm9yZSBhZGRpbmcgYSBuZXcgaXRlbS5cblxuICAgIE5vdGUgdGhhdCB0aGlzIG9ubHkgbGltaXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgd2FpdGluZyB0byBzdGFydC4gVGhlcmUgY291bGQgc3RpbGwgYmUgdXAgdG8gYGNvbmN1cnJlbmN5YCBqb2JzIGFscmVhZHkgcnVubmluZyB0aGF0IHRoaXMgY2FsbCBkb2VzIG5vdCBpbmNsdWRlIGluIGl0cyBjYWxjdWxhdGlvbi5cbiAgICAqL1xuICAgIGFzeW5jIG9uU2l6ZUxlc3NUaGFuKGxpbWl0KSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAgICAgaWYgKHRoaXMuI3F1ZXVlLnNpemUgPCBsaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI29uRXZlbnQoJ25leHQnLCAoKSA9PiB0aGlzLiNxdWV1ZS5zaXplIDwgbGltaXQpO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgZGlmZmVyZW5jZSB3aXRoIGAub25FbXB0eWAgaXMgdGhhdCBgLm9uSWRsZWAgZ3VhcmFudGVlcyB0aGF0IGFsbCB3b3JrIGZyb20gdGhlIHF1ZXVlIGhhcyBmaW5pc2hlZC4gYC5vbkVtcHR5YCBtZXJlbHkgc2lnbmFscyB0aGF0IHRoZSBxdWV1ZSBpcyBlbXB0eSwgYnV0IGl0IGNvdWxkIG1lYW4gdGhhdCBzb21lIHByb21pc2VzIGhhdmVuJ3QgY29tcGxldGVkIHlldC5cblxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgYmVjb21lcyBlbXB0eSwgYW5kIGFsbCBwcm9taXNlcyBoYXZlIGNvbXBsZXRlZDsgYHF1ZXVlLnNpemUgPT09IDAgJiYgcXVldWUucGVuZGluZyA9PT0gMGAuXG4gICAgKi9cbiAgICBhc3luYyBvbklkbGUoKSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIG5vbmUgcGVuZGluZyBhbmQgaWYgbm90aGluZyBlbHNlIGlzIHF1ZXVlZFxuICAgICAgICBpZiAodGhpcy4jcGVuZGluZyA9PT0gMCAmJiB0aGlzLiNxdWV1ZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jb25FdmVudCgnaWRsZScpO1xuICAgIH1cbiAgICBhc3luYyAjb25FdmVudChldmVudCwgZmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgU2l6ZSBvZiB0aGUgcXVldWUsIHRoZSBudW1iZXIgb2YgcXVldWVkIGl0ZW1zIHdhaXRpbmcgdG8gcnVuLlxuICAgICovXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNxdWV1ZS5zaXplO1xuICAgIH1cbiAgICAvKipcbiAgICBTaXplIG9mIHRoZSBxdWV1ZSwgZmlsdGVyZWQgYnkgdGhlIGdpdmVuIG9wdGlvbnMuXG5cbiAgICBGb3IgZXhhbXBsZSwgdGhpcyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBudW1iZXIgb2YgaXRlbXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZSB3aXRoIGEgc3BlY2lmaWMgcHJpb3JpdHkgbGV2ZWwuXG4gICAgKi9cbiAgICBzaXplQnkob3B0aW9ucykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1jYWxsYmFjay1yZWZlcmVuY2VcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLmZpbHRlcihvcHRpb25zKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgIE51bWJlciBvZiBydW5uaW5nIGl0ZW1zIChubyBsb25nZXIgaW4gdGhlIHF1ZXVlKS5cbiAgICAqL1xuICAgIGdldCBwZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGVuZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgV2hldGhlciB0aGUgcXVldWUgaXMgY3VycmVudGx5IHBhdXNlZC5cbiAgICAqL1xuICAgIGdldCBpc1BhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzUGF1c2VkO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXb3JrZXJFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IFdvcmtlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IgZXh0ZW5kcyBXb3JrZXJFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIlBhcmFtZXRlciBtdXN0IGJlIGRlZmluZWRcIjtcbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyB1cGxvYWRDaHVuayB9IGZyb20gXCJ+L2FwaS93ZWJzb2NrZXQudHNcIjtcbmltcG9ydCB7IGdldEZpbGVJbmRleEluUXVldWUgfSBmcm9tIFwifi9hcGkvbHVmaS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgZXZlbnRzLCBpbml0LCBzZW5kRmlsZUVycm9yLCB1cGRhdGVGaWxlIH0gZnJvbSBcIn4vd29ya2VyL3NoYXJlZC50c1wiO1xuaW1wb3J0IFBRdWV1ZSBmcm9tIFwicC1xdWV1ZVwiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHsgZW5jcnlwdCB9IGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7IFdvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci11bmRlZmluZWQtcGFyYW1ldGVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgeyB3b3JrZXJVcmwgfSBmcm9tIFwifi91dGlscy50c1wiO1xuXG5kZWNsYXJlIGNvbnN0IHNlbGY6IFdvcmtlcjtcblxubGV0IGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmNvbnN0IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUID0gbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgfHwgMTtcbmNvbnN0IHF1ZXVlID0gbmV3IFBRdWV1ZSh7XG4gIGNvbmN1cnJlbmN5OiBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCxcbiAgYXV0b1N0YXJ0OiBmYWxzZSxcbn0pO1xubGV0IGl0ZW1zSW5RdWV1ZSA9IDA7XG5sZXQgaXNQYXVzZWQgPSBmYWxzZTtcbmxldCBsdWZpRmlsZTogTHVmaUZpbGU7XG5jb25zdCBlbmNyeXB0Sm9iID0gbmV3IFdvcmtlcih3b3JrZXJVcmwoXCJlbmNyeXB0XCIpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgaWYgKCFpc0luaXRpYWxpemVkKSB7XG4gICAgaW5pdCgpO1xuICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgbHVmaUZpbGUgPSBldmVudC5kYXRhLmFyZ3MubHVmaUZpbGU7XG5cbiAgICBldmVudHMub25jZShFVkVOVC5VUExPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5VUExPQURfU1RBUlRFRCB9KTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbihFVkVOVC5DSFVOS19VUExPQURFRCwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5DSFVOS19VUExPQURFRCB9KTtcblxuICAgICAgaXRlbXNJblF1ZXVlLS07XG5cbiAgICAgIGlmIChcbiAgICAgICAgcXVldWUuaXNQYXVzZWQgJiYgIWlzUGF1c2VkICYmIGl0ZW1zSW5RdWV1ZSA8IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUXG4gICAgICApIHtcbiAgICAgICAgcmVzdW1lUXVldWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULlVQTE9BRF9DT01QTEVURSwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGV2ZW50OiBFVkVOVC5VUExPQURfQ09NUExFVEUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbihFVkVOVC5GSUxFX1VQREFURUQsIHVwZGF0ZUZpbGUpO1xuICB9XG5cbiAgaWYgKGV2ZW50LmRhdGEuYXJncy5jaHVuaykge1xuICAgIGV2ZW50LmRhdGEuYXJncy5sdWZpRmlsZSA9IGx1ZmlGaWxlO1xuICAgIHJldHVybiBzdGFydFVwbG9hZChcbiAgICAgIGV2ZW50LmRhdGEsXG4gICAgICBnZXRGaWxlSW5kZXhJblF1ZXVlKGx1ZmlGaWxlLmtleXMuY2xpZW50KSxcbiAgICApLm1hcEVycigoZXJyb3IpID0+IHtcbiAgICAgIHNlbmRGaWxlRXJyb3IobHVmaUZpbGUsIGVycm9yKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZXZlbnQuZGF0YS5hY3Rpb24gPT09IFdPUktFUl9BQ1RJT04uUEFVU0UpIHtcbiAgICAgIGlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgIHBhdXNlUXVldWUoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEuYWN0aW9uID09PSBXT1JLRVJfQUNUSU9OLlJFU1VNRSkge1xuICAgICAgaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIHJlc3VtZVF1ZXVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbmRGaWxlRXJyb3IobHVmaUZpbGUsIG5ldyBXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvcigpKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHN0YXJ0VXBsb2FkID0gKFxuICB3b3JrZXJNZXNzYWdlOiBXb3JrZXJBY3Rpb25NZXNzYWdlLFxuICBzZXJ2ZXJRdWV1ZUluZGV4OiBudW1iZXIsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBFcnJvcj4gPT4ge1xuICBjb25zdCB7IGx1ZmlGaWxlLCBhbGdvIH0gPSB3b3JrZXJNZXNzYWdlLmFyZ3M7XG5cbiAgaWYgKHdvcmtlck1lc3NhZ2UuYXJncy5jaHVuayAmJiBhbGdvKSB7XG4gICAgLy8gVXBsb2FkIGZpcnN0IGNodW5rIGJlZm9yZSB0byBnZXQgc2VydmVyS2V5IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXBsb2FkIG90aGVyIGNodW5rc1xuICAgIGlmICh3b3JrZXJNZXNzYWdlLmFyZ3MuY2h1bmsuaW5kZXggPT09IDApIHtcbiAgICAgIGVuY3J5cHQobHVmaUZpbGUua2V5cy5jbGllbnQsIHdvcmtlck1lc3NhZ2UuYXJncy5jaHVuay5idWZmZXIsIGFsZ28pLm1hcChcbiAgICAgICAgKGVuY3J5cHRlZERhdGEpID0+IHtcbiAgICAgICAgICB1cGxvYWRDaHVuayhcbiAgICAgICAgICAgIGx1ZmlGaWxlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b3RhbDogbHVmaUZpbGUudG90YWxDaHVua3MsXG4gICAgICAgICAgICAgIHBhcnQ6IDAsXG4gICAgICAgICAgICAgIHNpemU6IGx1ZmlGaWxlLnNpemUsXG4gICAgICAgICAgICAgIG5hbWU6IGx1ZmlGaWxlLm5hbWUsXG4gICAgICAgICAgICAgIHR5cGU6IGx1ZmlGaWxlLnR5cGUsXG4gICAgICAgICAgICAgIGRlbGF5OiBsdWZpRmlsZS5kZWxheSxcbiAgICAgICAgICAgICAgZGVsX2F0X2ZpcnN0X3ZpZXc6IGx1ZmlGaWxlLmRlbEF0Rmlyc3RWaWV3LFxuICAgICAgICAgICAgICB6aXBwZWQ6IGx1ZmlGaWxlLnppcHBlZCxcbiAgICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICAgIGk6IHNlcnZlclF1ZXVlSW5kZXgsXG4gICAgICAgICAgICAgIGZpbGVfcHdkOiBsdWZpRmlsZS5wYXNzd29yZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0ZWREYXRhLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpdGVtc0luUXVldWUrKztcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlLmFkZCgoKSA9PiB7XG4gICAgICAgIGlmICh3b3JrZXJNZXNzYWdlLmFyZ3MuY2h1bmspIHtcbiAgICAgICAgICBjb25zdCB3YWl0Rm9yRW5jcnlwdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgIGl0ZW1zSW5RdWV1ZSsrO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgZW5jcnlwdEpvYi5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHVwbG9hZENodW5rKFxuICAgICAgICAgICAgICAgICAgbHVmaUZpbGUsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBsdWZpRmlsZS50b3RhbENodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgcGFydDogZXZlbnQuZGF0YS5jaHVua0luZGV4LFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBsdWZpRmlsZS5zaXplLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBsdWZpRmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBsdWZpRmlsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBkZWxheTogbHVmaUZpbGUuZGVsYXksXG4gICAgICAgICAgICAgICAgICAgIGRlbF9hdF9maXJzdF92aWV3OiBsdWZpRmlsZS5kZWxBdEZpcnN0VmlldyxcbiAgICAgICAgICAgICAgICAgICAgemlwcGVkOiBsdWZpRmlsZS56aXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBsdWZpRmlsZS5rZXlzLnNlcnZlcixcbiAgICAgICAgICAgICAgICAgICAgaTogc2VydmVyUXVldWVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuZW5jcnlwdGVkRGF0YSxcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbmNyeXB0Sm9iLnBvc3RNZXNzYWdlKHdvcmtlck1lc3NhZ2UsIFtcbiAgICAgICAgICAgIHdvcmtlck1lc3NhZ2UuYXJncy5jaHVuay5idWZmZXIsXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcXVldWUuaXNQYXVzZWQgJiYgKGlzUGF1c2VkIHx8XG4gICAgICAgICAgICAgIGl0ZW1zSW5RdWV1ZSA9PT0gUVVFVUVfQ09OQ1VSUkVOQ1lfTElNSVQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwYXVzZVF1ZXVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2FpdEZvckVuY3J5cHRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvcihcImFsZ28gbXVzdCBiZSBkZWZpbmVkXCIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbn07XG5cbmNvbnN0IHBhdXNlUXVldWUgPSAoKSA9PiB7XG4gIHF1ZXVlLnBhdXNlKCk7XG4gIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuSk9CX1BBVVNFRCB9KTtcbn07XG5cbmNvbnN0IHJlc3VtZVF1ZXVlID0gKCkgPT4ge1xuICBxdWV1ZS5zdGFydCgpO1xuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULkpPQl9SRVNVTUVEIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICIrMUNBQUEsSUFBQUEsR0FBQUMsR0FBQSxDQUFBQyxHQUFBQyxLQUFBLGNBdUJBLElBQUlDLEdBQUksT0FBTyxTQUFZLFNBQVcsUUFBVSxLQUM1Q0MsR0FBZUQsSUFBSyxPQUFPQSxHQUFFLE9BQVUsV0FDdkNBLEdBQUUsTUFDRixTQUFzQkUsRUFBUUMsRUFBVUMsRUFBTSxDQUM5QyxPQUFPLFNBQVMsVUFBVSxNQUFNLEtBQUtGLEVBQVFDLEVBQVVDLENBQUksQ0FDN0QsRUFFRUMsR0FDQUwsSUFBSyxPQUFPQSxHQUFFLFNBQVksV0FDNUJLLEdBQWlCTCxHQUFFLFFBQ1YsT0FBTyxzQkFDaEJLLEdBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sRUFDckMsT0FBTyxPQUFPLHNCQUFzQkEsQ0FBTSxDQUFDLENBQ2hELEVBRUFHLEdBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sQ0FDMUMsRUFHRixTQUFTSSxHQUFtQkMsRUFBUyxDQUMv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QUUsR0FBRyxHQUFHLEVBQUVHLEVBQUVILEVBQUUsR0FBRyxFQUFNRixFQUFFQyxJQUFOLElBQVVDLEVBQUVBLEdBQUcsRUFBRUEsSUFBSSxHQUFHSyxHQUFHLEdBQUdBLEVBQUVBLEdBQUcsRUFBRSxLQUFLQSxHQUFHLEtBQUlKLEVBQUVILENBQUMsRUFBRUcsRUFBRUgsRUFBRUMsQ0FBQyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUQsRUFBRUMsSUFBSUQsSUFBSUUsRUFBRUMsRUFBRUYsRUFBRSxFQUFFRCxFQUFFQSxFQUFFLENBQUMsRUFBRUksRUFBRUgsQ0FBQyxFQUFFLEdBQUdELEdBQUcsRUFBRUMsRUFBRUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILElBQUksRUFBRSxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxFQUMzZixHQUFHLENBQUMsQ0FBQyxFQUNMSCxFQUFLLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxTQUFTQyxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0EsRUFBRSxDQUFDLE9BQU9RLEdBQUcsS0FBS1IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJQSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVGLEVBQUUsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsRUFBRUUsRUFBRSxDQUFDLEVBQUVDLEVBQUUsRUFBRUMsRUFBRUMsRUFBRSxJQUFJUixFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJSyxFQUFFTCxFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVLLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdULEVBQUVHLENBQUMsRUFBRU0sRUFBRVIsRUFBRVEsQ0FBQyxFQUFFTixFQUFFLEVBQUVFLEVBQUVILEVBQUVHLEVBQUVHLEVBQUVILEVBQUVGLENBQUMsQ0FBQyxDQUFDLEVBQUVPLEVBQUUsU0FBVSxFQUFFLE1BQVFSLEVBQUUsSUFBTU0sRUFBRSxTQUFVTCxFQUFFLEVBQUUsSUFBTUUsRUFBRUksQ0FBQyxFQUFFLFNBQVVBLEVBQUVQLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUVKLEVBQUVHLENBQUMsRUFBRU8sQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJUixFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFLEVBQUVQLEVBQUUsT0FBTyxFQUFFLEVBQUVRLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRU4sRUFBRVAsRUFBRSxFQUFFRSxDQUFDLEVBQUVGLEVBQUVPLEVBQUUsQ0FBQyxFQUFFLElBQUlPLEVBQUVQLEVBQUUsQ0FBQyxFQUFFUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFLElBQUlJLEVBQUUsRUFBRUEsRUFBRSxFQUFFQSxJQUFJSixFQUFFUCxFQUFFSSxJQUFJLEVBQUUsRUFBRVUsRUFBRVQsR0FBRyxHQUFHLEdBQUcsRUFBRVUsRUFBRVQsR0FBRyxFQUFFLEdBQUcsRUFBRVUsRUFBRWYsRUFBRSxHQUFHLEVBQUVFLEVBQUVTLENBQUMsRUFBRUgsRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVTLEVBQUVSLEdBQUcsR0FBRyxHQUFHLEVBQUVTLEVBQUVkLEdBQUcsRUFBRSxHQUFHLEVBQUVlLEVBQUVaLEVBQUUsR0FBRyxFQUFFRCxFQUFFUyxFQUFFLENBQUMsRUFBRUYsRUFBRVYsRUFBRU0sSUFBSSxFQUFFLEVBQUVRLEVBQUViLEdBQUcsR0FBRyxHQUFHLEVBQUVjLEVBQUVYLEdBQUcsRUFBRSxHQUFHLEVBQUVZLEVBQUVYLEVBQUUsR0FBRyxFQUFFRixFQUFFUyxFQUFFLENBQUMsRUFBRVgsRUFBRUQsRUFBRUMsSUFBSSxFQUFFLEVBQUVhLEVBQUVWLEdBQUcsR0FB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QUMsRUFBeUMsSUFBdkNBLEVBQUUsS0FBSyxLQUFLLE1BQU0sS0FBSyxFQUFFLFVBQVcsQ0FBQyxFQUFNQSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUMsRUFBRUEsRUFBRSxRQUFRLEtBQUssRUFBRUEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBSyxNQUFNLEVBQVNDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRUMsRUFBRSxHQUFHSCxFQUFFQyxJQUFJLENBQU0sSUFBTEUsRUFBRSxHQUFPRCxFQUFFLEVBQUVBLEVBQUVBLEdBQUdELEVBQUVDLElBQUksR0FBT0QsRUFBRUMsSUFBTixFQUFRLENBQUNDLEVBQ3pmLEdBQUcsS0FBSyxDQUFDQSxJQUFJLEVBQUVILElBQUksS0FBSyxFQUFFQSxDQUFDLEVBQUVELEVBQUUsS0FBSyxJQUFJRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRUQsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFRCxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVNELEVBQUUsQ0FBQyxJQUFJQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUUsQ0FBQyxFQUFFRyxFQUFFSCxFQUFFLENBQUMsRUFBRUssRUFBRUwsRUFBRSxDQUFDLEVBQUVNLEVBQUVOLEVBQUUsQ0FBQyxFQUFFLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTyxFQUFFUCxFQUFFLENBQUMsRUFBRVEsRUFBRVIsRUFBRSxDQUFDLEVBQUVTLEVBQUVULEVBQUUsQ0FBQyxFQUFFLElBQUlILEVBQUUsRUFBRSxHQUFHQSxFQUFFQSxJQUFJLEdBQUdBLEVBQUVDLEVBQUVGLEVBQUVDLENBQUMsR0FBR0MsRUFBRUYsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRUUsRUFBRUgsRUFBRUMsRUFBRSxHQUFHLEVBQUUsRUFBRUMsRUFBRUYsRUFBRUMsRUFBRSxFQUFFLEdBQUdDLElBQUksRUFBRUEsSUFBSSxHQUFHQSxJQUFJLEVBQUVBLEdBQUcsR0FBR0EsR0FBRyxLQUFLQyxJQUFJLEdBQUdBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSUgsRUFBRUMsRUFBRSxFQUFFLEVBQUVELEVBQUVDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBR0MsRUFBRUEsRUFBRVcsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSUQsRUFBRSxHQUFHRCxFQUFFQyxJQUFJUCxFQUFFSixDQUFDLEVBQUVZLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUUsRUFBRSxFQUFFRCxFQUFFUixFQUFFLEVBQUVRLEVBQUVELEVBQUVBLEVBQUVGLEVBQUVBLEVBQUVELEVBQUVBLEVBQUVKLEdBQUdLLEVBQUVFLEVBQUVDLEdBQUdILEVBQUVFLEtBQUtGLElBQUksRUFBRUEsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxHQUFHQSxHQUFHLElBQUksRUFBRUgsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFRSxFQUNwZixFQUFFRixFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVHLEVBQUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFSyxFQUFFLEVBQUVMLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU0sRUFBRSxFQUFFTixFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFQSxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVPLEVBQUUsRUFBRVAsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUSxFQUFFLEVBQUVSLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVMsRUFBRSxDQUFDLENBQUMsRUFBRWQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUFFLEdBQUcsS0FBSyxDQUFDQSxJQUFJLEVBQUVILElBQUksS0FBSyxFQUFFLEVBQUVBLENBQUMsRUFBRUYsRUFBRSxLQUFLLElBQUlHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBR0QsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxDQUFDLEVBQUVGLEVBQUUsS0FBSyxJQUFJRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHRCxDQUFDLEVBQUVBLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBU0YsRUFBRSxDQUFDLElBQUlDLEVBQ3ZnQkMsRUFBRUMs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QUUsR0FBR0ksSUFBSUosRUFBRSxHQUFHSSxHQUFHUCxFQUFFSyxFQUFFLE1BQU1MLEVBQ3RmLEdBQUcsR0FBR0csRUFBRSxFQUFFSixFQUFFRixFQUFLLEtBQUssSUFBSSxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxDQUFDLEVBQUVDLEVBQUVQLEVBQUssS0FBSyxJQUFJLEVBQUVDLEVBQUVNLEVBQUVKLEVBQUVELEVBQUVHLEVBQUVDLENBQUMsRUFBU0UsRUFBRSxPQUFPRCxFQUFFLEtBQUtBLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxTQUFTTixFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUNBLEVBQUVBLEdBQUcsR0FBR0QsRUFBRUEsR0FBRyxDQUFDLEVBQUUsSUFBSUUsRUFBRU4sRUFBSyxTQUFTTyxFQUFFRCxFQUFFLFVBQVVILENBQUMsRUFBRSxFQUFFSyxFQUFFRixFQUFFLFVBQVVKLENBQUMsRUFBRVEsRUFBRUosRUFBRSxNQUFNSixFQUFFTSxFQUFFSCxDQUFDLEVBQUVNLEVBQUVMLEVBQUUsU0FBU0osRUFBRU0sRUFBRUgsQ0FBQyxFQUFFRyxHQUFHQSxFQUFFSCxHQUFHLEVBQUUsR0FBRyxFQUFFRSxFQUFFLE1BQU0sSUFBSVAsRUFBSyxVQUFVLFFBQVEsa0NBQWtDLEVBQUUsSUFBSUUsRUFBRSxFQUFFLEVBQUVBLEdBQUdNLElBQUksRUFBRU4sRUFBRUEsSUFBSSxDQUEyRyxHQUExR0EsRUFBRSxHQUFHSyxJQUFJTCxFQUFFLEdBQUdLLEdBQUdKLEVBQUVHLEVBQUUsTUFBTUgsRUFBRSxHQUFHLEdBQUdELEVBQUUsRUFBRVEsRUFBRVYsRUFBSyxLQUFLLElBQUksRUFBRUMsRUFBRVMsRUFBRVAsRUFBRVEsRUFBRU4sRUFBRUgsQ0FBQyxFQUFFRCxFQUFFRCxFQUFLLEtBQUssSUFBSSxFQUFFQyxFQUFFUyxFQUFFLEtBQUtQLEVBQUVDLEVBQUVDLEVBQUVILENBQUMsRUFBSyxDQUFDSSxFQUFFLE1BQU1JLEVBQUUsSUFBSVQsQ0FBQyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEsd0JBQXdCLEVBQ3hoQixPQUFPVSxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVNULEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFLENBQUMsRUFBRUMsRUFBRVIsRUFBSyxTQUFTVSxFQUFFRixFQUFFLEVBQXFGLEdBQW5GSixFQUFFLENBQUNJLEVBQUUsUUFBUSxHQUFHTixFQUFFLE9BQU8sR0FBRyxHQUFHRSxFQUFFLEdBQUcsRUFBRUUsRUFBRSxDQUFDLENBQUMsRUFBRUYsRUFBRUksRUFBRSxPQUFPSixFQUFFRCxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxFQUFFSCxFQUFFLFFBQVFHLENBQUMsRUFBS0YsRUFBRSxPQUFPLElBQUlDLEVBQUVLLEVBQUUsVUFBVU4sQ0FBQyxFQUFFLEVBQUUsT0FBT0MsRUFBRUksRUFBRSxDQUFDQyxFQUFFLFFBQVEsR0FBR0wsQ0FBQyxDQUFDLEVBQUUsWUFBWUEsSUFBSUksRUFBRUMsRUFBRSxPQUFPLENBQUNBLEVBQUUsUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUNMLENBQUMsQ0FBQyxHQUFHSSxFQUFFQyxFQUFFLE9BQU9ELEVBQUVMLENBQUMsRUFBRUEsRUFBRSxFQUFFQSxFQUFFSyxFQUFFLE9BQU9MLEdBQUcsRUFBRUUsRUFBRUgsRUFBRSxRQUFRUyxFQUFFTixFQUFFRyxFQUFFLE1BQU1MLEVBQUVBLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU9FLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFUCxFQUFLLFNBQVNRLEVBQUVELEVBQUUsRUFBTyxHQUFMRixHQUFHLEVBQUtBLEVBQUUsR0FBRyxFQUFFQSxHQUFHLEdBQUdBLEVBQUUsTUFBTSxJQUFJTCxFQUFLLFVBQVUsUUFBUSx5QkFBeUIsRUFDbmYsR0FBRyxXQUFXSSxFQUFFLFFBQVEsV0FBV0YsRUFBRSxPQUFPLE1BQU0sSUFBSUYsRUFBSyxVQUFVLElBQUksd0NBQXdDLEVBQWlELElBQS9DRyxFQUFFSCxFQUFLLEtBQUssSUFBSSxHQUFHQyxFQUFFRyxFQUFFRCxFQUFFRSxFQUFFRSxFQUFFLFVBQVVMLENBQUMsRUFBRSxFQUFFSSxDQUFDLEVBQU1GLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxHQUFHLEVBQUVELEVBQUVGLEVBQUUsUUFBUU8sRUFBRUwsRUFBRUQsRUFBRSxNQUFNRSxFQUFFQSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPRyxFQUFFLE1BQU1KLEVBQUUsRUFBRUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTSixFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRVIsRUFBSyxTQUFTTyxFQUFFQyxFQUFFLEVBQUUsSUFBSUUsRUFBRVIsRUFBRSxPQUFPUyxFQUFFSCxFQUFFLFVBQVVOLENBQUMsRUFBRSxFQUFFUSxFQUFFLEdBQUdFLEVBQUUsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUUsSUFBSVAsRUFBSyxLQUFLLElBQUksR0FBR08sRUFDcmdCRyxDQUFDLEVBQUUsR0FBR0UsR0FBR1QsRUFBRSxDQUFDLElBQUlFLEVBQUVKLEVBQUUsUUFBUUUsQ0FBQyxFQUFFRCxFQUFFSyxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJRCxFQUFFLEtBQUtJLEVBQUUsTUFBTU4sRUFBRVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFWCxFQUFLLEtBQUssS0FBSyxTQUFTQyxFQUFFQyxFQUFFLENBQUMsS0FBSyxFQUFFQSxFQUFFQSxHQUFHRixFQUFLLEtBQUssT0FBTyxJQUFJRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFQyxFQUFFQyxFQUFFSCxFQUFFLFVBQVUsVUFBVSxHQUFrRCxJQUEvQyxLQUFLLEVBQUUsQ0FBQyxJQUFJQSxFQUFFLElBQUlBLENBQUMsRUFBRUQsRUFBRSxPQUFPSSxJQUFJSixFQUFFQyxFQUFFLEtBQUtELENBQUMsR0FBT0csRUFBRSxFQUFFQSxFQUFFQyxFQUFFRCxJQUFJRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsVUFBVUQsRUFBRSxDQUFDLEVBQUVDLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFLFdBQVcsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPRCxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBT0EsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSUQsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDM1lGLEVBQUssS0FBSyxLQUFLLFVBQVUsUUFBUUEsRUFBSyxLQUFLLEtBQUssVUFBVSxJQUFJLFNBQVNDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxNQUFNLElBQUlELEVBQUssVUFBVSxRQUFRLHlDQUF5QyxFQUFFLFlBQUssT0FBT0Ms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M0IsQ0FBQyxFQUdDLENBQUNsQixHQUFNLFdBQWFHLElBQ2xCRCxLQUFpQkgsS0FFbkJpQixHQUFXLEVBR2JRLEVBQWtCLENBQ3BCLENBQ0YsQ0FBQyxNQUdILFFBQU9FLEVBQ0wsSUFBSVQsR0FBOEIsc0JBQXNCLENBQzFELEVBRUYsT0FBT1UsRUFBUSxNQUFTLENBQzFCLEVBRU1YLEdBQWEsSUFBTSxDQUN2QmhCLEdBQU0sTUFBTSxFQUNaLEtBQUssWUFBWSxDQUFFLGtCQUF3QixDQUFDLENBQzlDLEVBRU1VLEdBQWMsSUFBTSxDQUN4QlYsR0FBTSxNQUFNLEVBQ1osS0FBSyxZQUFZLENBQUUsbUJBQXlCLENBQUMsQ0FDL0MiLAogICJuYW1lcyI6IFsicmVxdWlyZV9ldmVudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSIiwgIlJlZmxlY3RBcHBseSIsICJ0YXJnZXQiLCAicmVjZWl2ZXIiLCAiYXJncyIsICJSZWZsZWN0T3duS2V5cyIsICJQcm9jZXNzRW1pdFdhcm5pbmciLCAid2FybmluZyIsICJOdW1iZXJJc05hTiIsICJ2YWx1ZSIsICJFdmVudEVtaXR0ZXIiLCAib25jZSIsICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwgImNoZWNrTGlzdGVuZXIiLCAibGlzdGVuZXIiLCAiYXJnIiwgIm4iLCAiX2dldE1heExpc3RlbmVycyIsICJ0aGF0IiwgInR5cGUiLCAiaSIsICJkb0Vycm9yIiwgImV2ZW50cyIsICJlciIsICJlcnIiLCAiaGFuZGxlciIsICJsZW4iLCAibGlzdGVuZXJzIiwgImFycmF5Q2xvbmUiLCAiX2FkZExpc3RlbmVyIiwgInByZXBlbmQiLCAibSIsICJleGlzdGluZyIsICJ3IiwgIm9uY2VXcmFwcGVyIiwgIl9vbmNlV3JhcCIsICJzdGF0ZSIsICJ3cmFwcGVkIiwgImxpc3QiLCAicG9zaXRpb24iLCAib3JpZ2luYWxMaXN0ZW5lciIsICJzcGxpY2VPbmUiLCAia2V5cyIsICJrZXkiLCAiX2xpc3RlbmVycyIsICJ1bndyYXAiLCAiZXZsaXN0ZW5lciIsICJ1bndyYXBMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJsaXN0ZW5lckNvdW50IiwgImFyciIsICJjb3B5IiwgImluZGV4IiwgInJldCIsICJuYW1lIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yTGlzdGVuZXIiLCAicmVzb2x2ZXIiLCAiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwgImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwgImZsYWdzIiwgIndyYXBMaXN0ZW5lciIsICJyZXF1aXJlX3NqY2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzamNsIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsICJhYSIsICJrIiwgIm4iLCAibSIsICJwIiwgInoiLCAiQSIsICJDIiwgIkIiLCAiRCIsICJQIiwgImVhIiwgIlEiLCAidCIsICJyIiwgInUiLCAiRyIsICJFIiwgIkgiLCAiRiIsICJWIiwgIkkiLCAidyIsICJ2IiwgIlIiLCAiSiIsICJTIiwgIksiLCAiVyIsICJMIiwgInEiLCAieCIsICJ5IiwgIlgiLCAiWSIsICJNIiwgImZhIiwgImphIiwgImthIiwgImdhIiwgImJhIiwgIk4iLCAiY2EiLCAiTyIsICJUIiwgImhhIiwgImlhIiwgImRhIiwgIlUiLCAiWiIsICJyZXF1aXJlX2V2ZW50ZW1pdHRlcjMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYXMiLCAicHJlZml4IiwgIkV2ZW50cyIsICJFRSIsICJmbiIsICJjb250ZXh0IiwgIm9uY2UiLCAiYWRkTGlzdGVuZXIiLCAiZW1pdHRlciIsICJldmVudCIsICJsaXN0ZW5lciIsICJldnQiLCAiY2xlYXJFdmVudCIsICJFdmVudEVtaXR0ZXIiLCAibmFtZXMiLCAiZXZlbnRzIiwgIm5hbWUiLCAiaGFuZGxlcnMiLCAibCIsICJlZSIsICJsaXN0ZW5lcnMiLCAiYTEiLCAiYTIiLCAiYTMiLCAiYTQiLCAiYTUiLCAibGVuIiwgImFyZ3MiLCAiaSIsICJsZW5ndGgiLCAiaiIsICJkZWZhdWx0RXJyb3JDb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIm1lc3NhZ2UiLCAicmVzdWx0IiwgImNvbmZpZyIsICJkYXRhIiwgIm1heWJlU3RhY2siLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19hd2FpdCIsICJ2IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiZyIsICJxIiwgInZlcmIiLCAiYXdhaXRSZXR1cm4iLCAiZiIsICJuIiwgImEiLCAiYiIsICJyZXN1bWUiLCAic2V0dGxlIiwgInIiLCAiZnVsZmlsbCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgInAiLCAiX19hc3luY1ZhbHVlcyIsICJkIiwgIlJlc3VsdEFzeW5jIiwgIl9SZXN1bHRBc3luYyIsICJyZXMiLCAicHJvbWlzZSIsICJuZXdQcm9taXNlIiwgInZhbHVlIiwgIk9rIiwgImVycm9yRm4iLCAiZSIsICJFcnIiLCAiZm4iLCAiYXJncyIsICJfX2F3YWl0ZXIiLCAiZXJyb3IiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMiLCAiZiIsICJuZXdSZXMiLCAibmV3VmFsdWUiLCAib2siLCAiX2VyciIsICJfX2FzeW5jR2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiX19hc3luY0RlbGVnYXRvciIsICJfX2FzeW5jVmFsdWVzIiwgInN1Y2Nlc3NDYWxsYmFjayIsICJmYWlsdXJlQ2FsbGJhY2siLCAicmVzdWx0IiwgImVyckFzeW5jIiwgIm9rQXN5bmMiLCAiZXJyIiwgImZyb21Qcm9taXNlIiwgImZyb21TYWZlUHJvbWlzZSIsICJmcm9tQXN5bmNUaHJvd2FibGUiLCAiY29tYmluZVJlc3VsdExpc3QiLCAicmVzdWx0TGlzdCIsICJhY2MiLCAibGlzdCIsICJjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMiLCAiUmVzdWx0IiwgImZyb21UaHJvd2FibGUiLCAiY29tYmluZSIsICJjb21iaW5lV2l0aEFsbEVycm9ycyIsICJPayIsICJ2YWx1ZSIsICJmIiwgIm9rIiwgIl9mIiwgIl92YWx1ZSIsICJSZXN1bHRBc3luYyIsICJfdiIsICJfZXJyIiwgIl8iLCAiY29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJFcnIiLCAiZXJyb3IiLCAiZXJyIiwgImVyckFzeW5jIiwgInYiLCAiX29rIiwgInNlbGYiLCAiZnJvbVRocm93YWJsZSIsICJSZXN1bHQiLCAiQmFzZUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJjYXVzZSIsICJjb250ZXh0IiwgIl9fcHVibGljRmllbGQiLCAiV2ViU29ja2V0RXJyb3IiLCAiQmFzZUVycm9yIiwgIldlYlNvY2tldENvbm5lY3Rpb25FcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImVuc3VyZUVycm9yIiwgInZhbHVlIiwgInN0cmluZ2lmaWVkIiwgImlzRGVub1J1bnRpbWUiLCAid29ya2VyVXJsIiwgInJlbGF0aXZlUGF0aCIsICJpc0Rlbm9SdW50aW1lIiwgImltcG9ydF9ldmVudHMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJ1cGRhdGVGaWxlIiwgImx1ZmlGaWxlIiwgImFyZ3MiLCAic2VuZEZpbGVFcnJvciIsICJlcnJvciIsICJpbml0IiwgIkVuY29kaW5nIiwgImNoYXJzZXQiLCAibm9QYWRkaW5nIiwgImFiIiwgImxlbiIsICJ2aWV3IiwgInJlcyIsICJpIiwgInN0ciIsICJ2aWV3TGVuIiwgImVuYzEiLCAiZW5jMiIsICJlbmMzIiwgImVuYzQiLCAiaiIsICJvYmoiLCAiRW5jb2RpbmciLCAiRW5jb2RlIiwgImFiIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgImltcG9ydF9sdWZpX3NqY2wiLCAiQ3J5cHRvRXJyb3IiLCAiQmFzZUVycm9yIiwgIkRlY3J5cHRpb25FcnJvciIsICJDcnlwdG9FcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgIkVuY3J5cHRpb25FcnJvciIsICJDcnlwdG9FcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImRlY3J5cHQiLCAia2V5IiwgImVuY3J5cHRlZERhdGEiLCAiZGF0YSIsICJva0FzeW5jIiwgIkRlY29kZSIsICJzamNsIiwgImVycm9yIiwgImVyckFzeW5jIiwgIkRlY3J5cHRpb25FcnJvciIsICJlbnN1cmVFcnJvciIsICJlbmNyeXB0IiwgInZhbHVlIiwgImVuY3J5cHRlZCIsICJFbmNvZGUiLCAiRW5jcnlwdGlvbkVycm9yIiwgImRlY3J5cHQiLCAia2V5IiwgImVuY3J5cHRlZCIsICJpbXBvcnRLZXkiLCAiaW1wb3J0ZWRLZXkiLCAiUmVzdWx0QXN5bmMiLCAiZXJyb3IiLCAiRGVjcnlwdGlvbkVycm9yIiwgImVuc3VyZUVycm9yIiwgImVuY3J5cHQiLCAidmFsdWUiLCAiaXYiLCAiRW5jcnlwdGlvbkVycm9yIiwgIm9rQXN5bmMiLCAiRGVjb2RlIiwgIkNyeXB0b0Vycm9yIiwgImRlY3J5cHQiLCAia2V5IiwgInZhbHVlIiwgImVuY3J5cHQiLCAiYWxnbyIsICJzb2NrZXRzIiwgIk1BWF9FUlJPUlMiLCAib25DYW5jZWxNZXNzYWdlIiwgImRhdGEiLCAiZXZlbnRzIiwgIm9rQXN5bmMiLCAib25Eb3dubG9hZE1lc3NhZ2UiLCAicmVzcG9uc2UiLCAibHVmaUZpbGUiLCAicmVzdWx0IiwgIm1ldGFkYXRhU3RyaW5nIiwgIm1ldGFkYXRhIiwgImlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSIsICJkYXRhU3RyaW5nIiwgImVuY3J5cHRlZERhdGEiLCAiRGVjb2RlIiwgImRlY3J5cHQiLCAiZGVjcnlwdGVkUGFydCIsICJidWZmZXIiLCAidXBkYXRlRmlsZSIsICJlbmREb3dubG9hZCIsICJlcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJlcnJBc3luYyIsICJvblVwbG9hZE1lc3NhZ2UiLCAib25NZXNzYWdlIiwgInRyeVBhcnNlSnNvbiIsICJjYWxsYmFjayIsICJpc0Nvbm5lY3RpbmciLCAic29ja2V0S2V5IiwgImlzU3Bhd25lZCIsICJlbmREb3dubG9hZCIsICJsdWZpRmlsZSIsICJtZXNzYWdlIiwgInNlbmRNZXNzYWdlIiwgImRvd25sb2FkU29ja2V0VXJsIiwgInVwbG9hZENodW5rIiwgIm1ldGFkYXRhIiwgImVuY3J5cHRlZERhdGEiLCAiRW5jb2RlIiwgInVwbG9hZFNvY2tldFVybCIsICJzb2NrZXRVcmwiLCAiaXNTcGF3bmVkIiwgInNvY2tldHMiLCAib2tBc3luYyIsICJzcGF3biIsICJlIiwgIm9uTWVzc2FnZSIsICJzb2NrZXRLZXkiLCAiZXJyb3JDb3VudCIsICJpc0Nvbm5lY3RpbmciLCAiZXZlbnRzIiwgIk1BWF9FUlJPUlMiLCAiZXJyQXN5bmMiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIndhaXRGb3JDb25uZWN0aW9uIiwgImVycm9yIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVuc3VyZUVycm9yIiwgImJ1aWxkU29ja2V0VXJsIiwgImluc3RhbmNlVXJsIiwgInBhdGhuYW1lIiwgInVybCIsICJkb3dubG9hZFNvY2tldFVybCIsICJsdWZpRmlsZSIsICJ1cGxvYWRTb2NrZXRVcmwiLCAidHJ5UGFyc2VKc29uIiwgImRhdGEiLCAicGFyc2VkT2JqZWN0IiwgImlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSIsICJtZXNzYWdlIiwgImltcG9ydF9ldmVudHMiLCAiaW1wb3J0X2V2ZW50cyIsICJmaWxlcyIsICJldmVudHMiLCAiRXZlbnRFbWl0dGVyIiwgImdldEZpbGVzUXVldWVkIiwgImZpbGVzIiwgImZpbGUiLCAiZ2V0RmlsZUluZGV4SW5RdWV1ZSIsICJjbGllbnRLZXkiLCAiaW1wb3J0X2luZGV4IiwgIlRpbWVvdXRFcnJvciIsICJtZXNzYWdlIiwgIkFib3J0RXJyb3IiLCAiZ2V0RE9NRXhjZXB0aW9uIiwgImVycm9yTWVzc2FnZSIsICJnZXRBYm9ydGVkUmVhc29uIiwgInNpZ25hbCIsICJyZWFzb24iLCAicFRpbWVvdXQiLCAicHJvbWlzZSIsICJvcHRpb25zIiwgIm1pbGxpc2Vjb25kcyIsICJmYWxsYmFjayIsICJjdXN0b21UaW1lcnMiLCAidGltZXIiLCAiY2FuY2VsYWJsZVByb21pc2UiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYWJvcnRIYW5kbGVyIiwgInRpbWVvdXRFcnJvciIsICJlcnJvciIsICJsb3dlckJvdW5kIiwgImFycmF5IiwgInZhbHVlIiwgImNvbXBhcmF0b3IiLCAiZmlyc3QiLCAiY291bnQiLCAic3RlcCIsICJpdCIsICJfcXVldWUiLCAiUHJpb3JpdHlRdWV1ZSIsICJfX3ByaXZhdGVBZGQiLCAicnVuIiwgIm9wdGlvbnMiLCAiZWxlbWVudCIsICJfX3ByaXZhdGVHZXQiLCAiaW5kZXgiLCAibG93ZXJCb3VuZCIsICJhIiwgImIiLCAiaXRlbSIsICJfY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCIsICJfaXNJbnRlcnZhbElnbm9yZWQiLCAiX2ludGVydmFsQ291bnQiLCAiX2ludGVydmFsQ2FwIiwgIl9pbnRlcnZhbCIsICJfaW50ZXJ2YWxFbmQiLCAiX2ludGVydmFsSWQiLCAiX3RpbWVvdXRJZCIsICJfcXVldWUiLCAiX3F1ZXVlQ2xhc3MiLCAiX3BlbmRpbmciLCAiX2NvbmN1cnJlbmN5IiwgIl9pc1BhdXNlZCIsICJfdGhyb3dPblRpbWVvdXQiLCAiX1BRdWV1ZV9pbnN0YW5jZXMiLCAiZG9lc0ludGVydmFsQWxsb3dBbm90aGVyX2dldCIsICJkb2VzQ29uY3VycmVudEFsbG93QW5vdGhlcl9nZXQiLCAibmV4dF9mbiIsICJvblJlc3VtZUludGVydmFsX2ZuIiwgImlzSW50ZXJ2YWxQYXVzZWRfZ2V0IiwgInRyeVRvU3RhcnRBbm90aGVyX2ZuIiwgImluaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkX2ZuIiwgIm9uSW50ZXJ2YWxfZm4iLCAicHJvY2Vzc1F1ZXVlX2ZuIiwgInRocm93T25BYm9ydF9mbiIsICJvbkV2ZW50X2ZuIiwgIlBRdWV1ZSIsICJFdmVudEVtaXR0ZXIiLCAib3B0aW9ucyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJfX3ByaXZhdGVBZGQiLCAiX19wdWJsaWNGaWVsZCIsICJQcmlvcml0eVF1ZXVlIiwgIl9fcHJpdmF0ZVNldCIsICJfX3ByaXZhdGVHZXQiLCAibmV3Q29uY3VycmVuY3kiLCAiX19wcml2YXRlTWV0aG9kIiwgImZ1bmN0aW9uXyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJfX3ByaXZhdGVXcmFwcGVyIiwgIm9wZXJhdGlvbiIsICJwVGltZW91dCIsICJyZXN1bHQiLCAiZXJyb3IiLCAiVGltZW91dEVycm9yIiwgImZ1bmN0aW9ucyIsICJsaW1pdCIsICJub3ciLCAiZGVsYXkiLCAiY2FuSW5pdGlhbGl6ZUludGVydmFsIiwgImpvYiIsICJzaWduYWwiLCAiX3Jlc29sdmUiLCAiZXZlbnQiLCAiZmlsdGVyIiwgImxpc3RlbmVyIiwgIldvcmtlckVycm9yIiwgIkJhc2VFcnJvciIsICJXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvciIsICJXb3JrZXJFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImlzSW5pdGlhbGl6ZWQiLCAiUVVFVUVfQ09OQ1VSUkVOQ1lfTElNSVQiLCAicXVldWUiLCAiUFF1ZXVlIiwgIml0ZW1zSW5RdWV1ZSIsICJpc1BhdXNlZCIsICJsdWZpRmlsZSIsICJlbmNyeXB0Sm9iIiwgIndvcmtlclVybCIsICJldmVudCIsICJpbml0IiwgImV2ZW50cyIsICJyZXN1bWVRdWV1ZSIsICJ1cGRhdGVGaWxlIiwgInN0YXJ0VXBsb2FkIiwgImdldEZpbGVJbmRleEluUXVldWUiLCAiZXJyb3IiLCAic2VuZEZpbGVFcnJvciIsICJwYXVzZVF1ZXVlIiwgIldvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAic2VydmVyUXVldWVJbmRleCIsICJhbGdvIiwgImVuY3J5cHQiLCAiZW5jcnlwdGVkRGF0YSIsICJ1cGxvYWRDaHVuayIsICJ3YWl0Rm9yRW5jcnlwdGlvbiIsICJyZXNvbHZlIiwgImVyckFzeW5jIiwgIm9rQXN5bmMiXQp9Cg==