zlibjs
Version:
zlib, gzip and zip implementation in JavaScript
16 lines • 147 kB
JavaScript
/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var l=void 0,aa=this;function r(c,d){var a=c.split("."),b=aa;!(a[0]in b)&&b.execScript&&b.execScript("var "+a[0]);for(var e;a.length&&(e=a.shift());)!a.length&&d!==l?b[e]=d:b=b[e]?b[e]:b[e]={}};var t="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function v(c){var d=c.length,a=0,b=Number.POSITIVE_INFINITY,e,f,g,h,k,m,n,p,s,x;for(p=0;p<d;++p)c[p]>a&&(a=c[p]),c[p]<b&&(b=c[p]);e=1<<a;f=new (t?Uint32Array:Array)(e);g=1;h=0;for(k=2;g<=a;){for(p=0;p<d;++p)if(c[p]===g){m=0;n=h;for(s=0;s<g;++s)m=m<<1|n&1,n>>=1;x=g<<16|p;for(s=m;s<e;s+=k)f[s]=x;++h}++g;h<<=1;k<<=1}return[f,a,b]};function w(c,d){this.g=[];this.h=32768;this.d=this.f=this.a=this.l=0;this.input=t?new Uint8Array(c):c;this.m=!1;this.i=y;this.r=!1;if(d||!(d={}))d.index&&(this.a=d.index),d.bufferSize&&(this.h=d.bufferSize),d.bufferType&&(this.i=d.bufferType),d.resize&&(this.r=d.resize);switch(this.i){case A:this.b=32768;this.c=new (t?Uint8Array:Array)(32768+this.h+258);break;case y:this.b=0;this.c=new (t?Uint8Array:Array)(this.h);this.e=this.z;this.n=this.v;this.j=this.w;break;default:throw Error("invalid inflate mode");
}}var A=0,y=1,B={t:A,s:y};
w.prototype.k=function(){for(;!this.m;){var c=C(this,3);c&1&&(this.m=!0);c>>>=1;switch(c){case 0:var d=this.input,a=this.a,b=this.c,e=this.b,f=d.length,g=l,h=l,k=b.length,m=l;this.d=this.f=0;if(a+1>=f)throw Error("invalid uncompressed block header: LEN");g=d[a++]|d[a++]<<8;if(a+1>=f)throw Error("invalid uncompressed block header: NLEN");h=d[a++]|d[a++]<<8;if(g===~h)throw Error("invalid uncompressed block header: length verify");if(a+g>d.length)throw Error("input buffer is broken");switch(this.i){case A:for(;e+
g>b.length;){m=k-e;g-=m;if(t)b.set(d.subarray(a,a+m),e),e+=m,a+=m;else for(;m--;)b[e++]=d[a++];this.b=e;b=this.e();e=this.b}break;case y:for(;e+g>b.length;)b=this.e({p:2});break;default:throw Error("invalid inflate mode");}if(t)b.set(d.subarray(a,a+g),e),e+=g,a+=g;else for(;g--;)b[e++]=d[a++];this.a=a;this.b=e;this.c=b;break;case 1:this.j(ba,ca);break;case 2:for(var n=C(this,5)+257,p=C(this,5)+1,s=C(this,4)+4,x=new (t?Uint8Array:Array)(D.length),S=l,T=l,U=l,u=l,M=l,F=l,z=l,q=l,V=l,q=0;q<s;++q)x[D[q]]=
C(this,3);if(!t){q=s;for(s=x.length;q<s;++q)x[D[q]]=0}S=v(x);u=new (t?Uint8Array:Array)(n+p);q=0;for(V=n+p;q<V;)switch(M=E(this,S),M){case 16:for(z=3+C(this,2);z--;)u[q++]=F;break;case 17:for(z=3+C(this,3);z--;)u[q++]=0;F=0;break;case 18:for(z=11+C(this,7);z--;)u[q++]=0;F=0;break;default:F=u[q++]=M}T=t?v(u.subarray(0,n)):v(u.slice(0,n));U=t?v(u.subarray(n)):v(u.slice(n));this.j(T,U);break;default:throw Error("unknown BTYPE: "+c);}}return this.n()};
var G=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=t?new Uint16Array(G):G,H=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],I=t?new Uint16Array(H):H,J=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],K=t?new Uint8Array(J):J,L=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],da=t?new Uint16Array(L):L,ea=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,
13,13],N=t?new Uint8Array(ea):ea,O=new (t?Uint8Array:Array)(288),P,fa;P=0;for(fa=O.length;P<fa;++P)O[P]=143>=P?8:255>=P?9:279>=P?7:8;var ba=v(O),Q=new (t?Uint8Array:Array)(30),R,ga;R=0;for(ga=Q.length;R<ga;++R)Q[R]=5;var ca=v(Q);function C(c,d){for(var a=c.f,b=c.d,e=c.input,f=c.a,g=e.length,h;b<d;){if(f>=g)throw Error("input buffer is broken");a|=e[f++]<<b;b+=8}h=a&(1<<d)-1;c.f=a>>>d;c.d=b-d;c.a=f;return h}
function E(c,d){for(var a=c.f,b=c.d,e=c.input,f=c.a,g=e.length,h=d[0],k=d[1],m,n;b<k&&!(f>=g);)a|=e[f++]<<b,b+=8;m=h[a&(1<<k)-1];n=m>>>16;if(n>b)throw Error("invalid code length: "+n);c.f=a>>n;c.d=b-n;c.a=f;return m&65535}
w.prototype.j=function(c,d){var a=this.c,b=this.b;this.o=c;for(var e=a.length-258,f,g,h,k;256!==(f=E(this,c));)if(256>f)b>=e&&(this.b=b,a=this.e(),b=this.b),a[b++]=f;else{g=f-257;k=I[g];0<K[g]&&(k+=C(this,K[g]));f=E(this,d);h=da[f];0<N[f]&&(h+=C(this,N[f]));b>=e&&(this.b=b,a=this.e(),b=this.b);for(;k--;)a[b]=a[b++-h]}for(;8<=this.d;)this.d-=8,this.a--;this.b=b};
w.prototype.w=function(c,d){var a=this.c,b=this.b;this.o=c;for(var e=a.length,f,g,h,k;256!==(f=E(this,c));)if(256>f)b>=e&&(a=this.e(),e=a.length),a[b++]=f;else{g=f-257;k=I[g];0<K[g]&&(k+=C(this,K[g]));f=E(this,d);h=da[f];0<N[f]&&(h+=C(this,N[f]));b+k>e&&(a=this.e(),e=a.length);for(;k--;)a[b]=a[b++-h]}for(;8<=this.d;)this.d-=8,this.a--;this.b=b};
w.prototype.e=function(){var c=new (t?Uint8Array:Array)(this.b-32768),d=this.b-32768,a,b,e=this.c;if(t)c.set(e.subarray(32768,c.length));else{a=0;for(b=c.length;a<b;++a)c[a]=e[a+32768]}this.g.push(c);this.l+=c.length;if(t)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];this.b=32768;return e};
w.prototype.z=function(c){var d,a=this.input.length/this.a+1|0,b,e,f,g=this.input,h=this.c;c&&("number"===typeof c.p&&(a=c.p),"number"===typeof c.u&&(a+=c.u));2>a?(b=(g.length-this.a)/this.o[2],f=258*(b/2)|0,e=f<h.length?h.length+f:h.length<<1):e=h.length*a;t?(d=new Uint8Array(e),d.set(h)):d=h;return this.c=d};
w.prototype.n=function(){var c=0,d=this.c,a=this.g,b,e=new (t?Uint8Array:Array)(this.l+(this.b-32768)),f,g,h,k;if(0===a.length)return t?this.c.subarray(32768,this.b):this.c.slice(32768,this.b);f=0;for(g=a.length;f<g;++f){b=a[f];h=0;for(k=b.length;h<k;++h)e[c++]=b[h]}f=32768;for(g=this.b;f<g;++f)e[c++]=d[f];this.g=[];return this.buffer=e};
w.prototype.v=function(){var c,d=this.b;t?this.r?(c=new Uint8Array(d),c.set(this.c.subarray(0,d))):c=this.c.subarray(0,d):(this.c.length>d&&(this.c.length=d),c=this.c);return this.buffer=c};function W(c,d){var a,b;this.input=c;this.a=0;if(d||!(d={}))d.index&&(this.a=d.index),d.verify&&(this.A=d.verify);a=c[this.a++];b=c[this.a++];switch(a&15){case ha:this.method=ha;break;default:throw Error("unsupported compression method");}if(0!==((a<<8)+b)%31)throw Error("invalid fcheck flag:"+((a<<8)+b)%31);if(b&32)throw Error("fdict flag is not supported");this.q=new w(c,{index:this.a,bufferSize:d.bufferSize,bufferType:d.bufferType,resize:d.resize})}
W.prototype.k=function(){var c=this.input,d,a;d=this.q.k();this.a=this.q.a;if(this.A){a=(c[this.a++]<<24|c[this.a++]<<16|c[this.a++]<<8|c[this.a++])>>>0;var b=d;if("string"===typeof b){var e=b.split(""),f,g;f=0;for(g=e.length;f<g;f++)e[f]=(e[f].charCodeAt(0)&255)>>>0;b=e}for(var h=1,k=0,m=b.length,n,p=0;0<m;){n=1024<m?1024:m;m-=n;do h+=b[p++],k+=h;while(--n);h%=65521;k%=65521}if(a!==(k<<16|h)>>>0)throw Error("invalid adler-32 checksum");}return d};var ha=8;r("Zlib.Inflate",W);r("Zlib.Inflate.prototype.decompress",W.prototype.k);var X={ADAPTIVE:B.s,BLOCK:B.t},Y,Z,$,ia;if(Object.keys)Y=Object.keys(X);else for(Z in Y=[],$=0,X)Y[$++]=Z;$=0;for(ia=Y.length;$<ia;++$)Z=Y[$],r("Zlib.Inflate.BufferType."+Z,X[Z]);}).call(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUtFLEtBQUtGLENBQUwsR0FGQUQsRUFFWUcsQ0FGTCxFQUVLQSxDQURadEgsQ0FDWXNILENBRFIsQ0FDUUEsQ0FBQUEsQ0FBWixDQUNFSCxDQUFBLENBQUtuSCxDQUFBLEVBQUwsQ0FBQSxDQUFZb0gsQ0FJWHBILEVBQUEsQ0FBSSxDQUFULEtBQVkyRCxFQUFaLENBQWlCd0QsQ0FBQXpJLE9BQWpCLENBQThCc0IsQ0FBOUIsQ0FBa0MyRCxFQUFsQyxDQUFzQyxFQUFFM0QsQ0FBeEMsQ0FDRW9ILENUOHpDRixDUzl6Q1FELENBQUEsQ0FBS25ILENBQUwsQ1Q4ekNSLENBQUE5QixDQUFBLENTN3pDb0IsMEJUNnpDcEIsQ1M3ekN1Q2tKLENUNnpDdkMsQ1M3ekM0Q0UsQ0FBQUMsQ0FBZUgsQ0FBZkcsQ1Q2ekM1QzsiLCJzb3VyY2VzIjpbImNsb3N1cmUtcHJpbWl0aXZlcy9iYXNlLmpzIiwiZGVmaW5lL3R5cGVkYXJyYXkvaHlicmlkLmpzIiwic3JjL2h1ZmZtYW4uanMiLCJzcmMvcmF3aW5mbGF0ZS5qcyIsInNyYy9pbmZsYXRlLmpzIiwic3JjL2FkbGVyMzIuanMiLCJzcmMvdXRpbC5qcyIsInNyYy96bGliLmpzIiwiZXhwb3J0L2luZmxhdGUuanMiLCJzcmMvZXhwb3J0X29iamVjdC5qcyJdLCJuYW1lcyI6WyJnb29nLmdsb2JhbCIsImdvb2cuZXhwb3J0UGF0aF8iLCJuYW1lIiwib3B0X29iamVjdCIsInBhcnRzIiwic3BsaXQiLCJjdXIiLCJleGVjU2NyaXB0IiwicGFydCIsImxlbmd0aCIsInNoaWZ0IiwiSlNDb21waWxlcl9hbGlhc19WT0lEIiwiVVNFX1RZUEVEQVJSQVkiLCJVaW50OEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkRhdGFWaWV3IiwiWmxpYi5IdWZmbWFuLmJ1aWxkSHVmZm1hblRhYmxlIiwibGVuZ3RocyIsImxpc3RTaXplIiwibWF4Q29kZUxlbmd0aCIsIm1pbkNvZGVMZW5ndGgiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsInNpemUiLCJ0YWJsZSIsImJpdExlbmd0aCIsImNvZGUiLCJza2lwIiwicmV2ZXJzZWQiLCJydGVtcCIsImkiLCJqIiwidmFsdWUiLCJBcnJheSIsIlpsaWIuUmF3SW5mbGF0ZSIsImlucHV0Iiwib3B0X3BhcmFtcyIsImJsb2NrcyIsImJ1ZmZlclNpemUiLCJaTElCX1JBV19JTkZMQVRFX0JVRkZFUl9TSVpFIiwiYml0c2J1ZmxlbiIsImJpdHNidWYiLCJpcCIsInRvdGFscG9zIiwiYmZpbmFsIiwiYnVmZmVyVHlwZSIsIlpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlLkFEQVBUSVZFIiwicmVzaXplIiwiWmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGUuQkxPQ0siLCJvcCIsIlpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCIsIm91dHB1dCIsIlpsaWIuUmF3SW5mbGF0ZS5NYXhDb3B5TGVuZ3RoIiwiZXhwYW5kQnVmZmVyIiwiZXhwYW5kQnVmZmVyQWRhcHRpdmUiLCJjb25jYXRCdWZmZXIiLCJjb25jYXRCdWZmZXJEeW5hbWljIiwiZGVjb2RlSHVmZm1hbiIsImRlY29kZUh1ZmZtYW5BZGFwdGl2ZSIsIkVycm9yIiwiQkxPQ0siLCJBREFQVElWRSIsIlpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlIiwicHJvdG90eXBlIiwiZGVjb21wcmVzcyIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZGVjb21wcmVzcyIsImhkciIsInJlYWRCaXRzIiwicGFyc2VCbG9jayIsImlucHV0TGVuZ3RoIiwibGVuIiwibmxlbiIsIm9sZW5ndGgiLCJwcmVDb3B5Iiwic2V0Iiwic3ViYXJyYXkiLCJabGliLlJhd0luZmxhdGUuRml4ZWRMaXRlcmFsTGVuZ3RoVGFibGUiLCJabGliLlJhd0luZmxhdGUuRml4ZWREaXN0YW5jZVRhYmxlIiwiaGxpdCIsImhkaXN0IiwiaGNsZW4iLCJjb2RlTGVuZ3RocyIsIlpsaWIuUmF3SW5mbGF0ZS5PcmRlci5sZW5ndGgiLCJjb2RlTGVuZ3Roc1RhYmxlIiwibGl0bGVuVGFibGUiLCJkaXN0VGFibGUiLCJsZW5ndGhUYWJsZSIsInByZXYiLCJyZXBlYXQiLCJpbCIsIlpsaWIuUmF3SW5mbGF0ZS5PcmRlciIsInJlYWRDb2RlQnlUYWJsZSIsInNsaWNlIiwiWmxpYi5SYXdJbmZsYXRlLkxlbmd0aENvZGVUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhFeHRyYVRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlLkRpc3RDb2RlVGFibGUiLCJabGliLlJhd0luZmxhdGUuRGlzdEV4dHJhVGFibGUiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLnJlYWRCaXRzIiwib2N0ZXQiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLnJlYWRDb2RlQnlUYWJsZSIsImNvZGVUYWJsZSIsImNvZGVXaXRoTGVuZ3RoIiwiY29kZUxlbmd0aCIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZGVjb2RlSHVmZm1hbiIsImxpdGxlbiIsImRpc3QiLCJjdXJyZW50TGl0bGVuVGFibGUiLCJ0aSIsImNvZGVEaXN0IiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5kZWNvZGVIdWZmbWFuQWRhcHRpdmUiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLmV4cGFuZEJ1ZmZlciIsImJ1ZmZlciIsImJhY2t3YXJkIiwicHVzaCIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyQWRhcHRpdmUiLCJvcHRfcGFyYW0iLCJyYXRpbyIsIm1heEh1ZmZDb2RlIiwibmV3U2l6ZSIsIm1heEluZmxhdGVTaXplIiwiZml4UmF0aW8iLCJhZGRSYXRpbyIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuY29uY2F0QnVmZmVyIiwicG9zIiwiYmxvY2siLCJqbCIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuY29uY2F0QnVmZmVyRHluYW1pYyIsIlpsaWIuSW5mbGF0ZSIsImNtZiIsImZsZyIsInZlcmlmeSIsIlpsaWIuQ29tcHJlc3Npb25NZXRob2QuREVGTEFURSIsIm1ldGhvZCIsInJhd2luZmxhdGUiLCJabGliLkluZmxhdGUucHJvdG90eXBlLmRlY29tcHJlc3MiLCJhZGxlcjMyIiwiYXJyYXkiLCJ0bXAiLCJjaGFyQ29kZUF0IiwiczEiLCJzMiIsInRsZW4iLCJabGliLkFkbGVyMzIuT3B0aW1pemF0aW9uUGFyYW1ldGVyIiwiREVGTEFURSIsInB1YmxpY1BhdGgiLCJrZXlzIiwia2V5IiwiT2JqZWN0IiwiZXhwb3J0S2V5VmFsdWUiLCJvYmplY3QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMDYgVGhlIENsb3N1cmUgTGlicmFyeSBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMtSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBCb290c3RyYXAgZm9yIHRoZSBHb29nbGUgSlMgTGlicmFyeSAoQ2xvc3VyZSkuXG4gKlxuICogSW4gdW5jb21waWxlZCBtb2RlIGJhc2UuanMgd2lsbCB3cml0ZSBvdXQgQ2xvc3VyZSdzIGRlcHMgZmlsZSwgdW5sZXNzIHRoZVxuICogZ2xvYmFsIDxjb2RlPkNMT1NVUkVfTk9fREVQUzwvY29kZT4gaXMgc2V0IHRvIHRydWUuICBUaGlzIGFsbG93cyBwcm9qZWN0cyB0b1xuICogaW5jbHVkZSB0aGVpciBvd24gZGVwcyBmaWxlKHMpIGZyb20gZGlmZmVyZW50IGxvY2F0aW9ucy5cbiAqXG4gKi9cblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IE92ZXJyaWRkZW4gdG8gdHJ1ZSBieSB0aGUgY29tcGlsZXIgd2hlbiAtLWNsb3N1cmVfcGFzc1xuICogICAgIG9yIC0tbWFya19hc19jb21waWxlZCBpcyBzcGVjaWZpZWQuXG4gKi9cbnZhciBDT01QSUxFRCA9IGZhbHNlO1xuXG5cbi8qKlxuICogQmFzZSBuYW1lc3BhY2UgZm9yIHRoZSBDbG9zdXJlIGxpYnJhcnkuICBDaGVja3MgdG8gc2VlIGdvb2cgaXNcbiAqIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBzY29wZSBiZWZvcmUgYXNzaWduaW5nIHRvIHByZXZlbnRcbiAqIGNsb2JiZXJpbmcgaWYgYmFzZS5qcyBpcyBsb2FkZWQgbW9yZSB0aGFuIG9uY2UuXG4gKlxuICogQGNvbnN0XG4gKi9cbnZhciBnb29nID0gZ29vZyB8fCB7fTsgLy8gSWRlbnRpZmllcyB0aGlzIGZpbGUgYXMgdGhlIENsb3N1cmUgYmFzZS5cblxuXG4vKipcbiAqIFJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIGNvbnRleHQuICBJbiBtb3N0IGNhc2VzIHRoaXMgd2lsbCBiZSAnd2luZG93Jy5cbiAqL1xuZ29vZy5nbG9iYWwgPSB0aGlzO1xuXG5cbi8qKlxuICogQGRlZmluZSB7Ym9vbGVhbn0gREVCVUcgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGRlYnVnZ2luZyBjb2RlXG4gKiB0aGF0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gYSBwcm9kdWN0aW9uIGpzX2JpbmFyeSBjYW4gYmUgZWFzaWx5IHN0cmlwcGVkXG4gKiBieSBzcGVjaWZ5aW5nIC0tZGVmaW5lIGdvb2cuREVCVUc9ZmFsc2UgdG8gdGhlIEpTQ29tcGlsZXIuIEZvciBleGFtcGxlLCBtb3N0XG4gKiB0b1N0cmluZygpIG1ldGhvZHMgc2hvdWxkIGJlIGRlY2xhcmVkIGluc2lkZSBhbiBcImlmIChnb29nLkRFQlVHKVwiIGNvbmRpdGlvbmFsXG4gKiBiZWNhdXNlIHRoZXkgYXJlIGdlbmVyYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kIGl0IGlzIGRpZmZpY3VsdFxuICogZm9yIHRoZSBKU0NvbXBpbGVyIHRvIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgdXNlZC5cbiAqL1xuZ29vZy5ERUJVRyA9IHRydWU7XG5cblxuLyoqXG4gKiBAZGVmaW5lIHtzdHJpbmd9IExPQ0FMRSBkZWZpbmVzIHRoZSBsb2NhbGUgYmVpbmcgdXNlZCBmb3IgY29tcGlsYXRpb24uIEl0IGlzXG4gKiB1c2VkIHRvIHNlbGVjdCBsb2NhbGUgc3BlY2lmaWMgZGF0YSB0byBiZSBjb21waWxlZCBpbiBqcyBiaW5hcnkuIEJVSUxEIHJ1bGVcbiAqIGNhbiBzcGVjaWZ5IHRoaXMgdmFsdWUgYnkgXCItLWRlZmluZSBnb29nLkxPQ0FMRT08bG9jYWxlX25hbWU+XCIgYXMgSlNDb21waWxlclxuICogb3B0aW9uLlxuICpcbiAqIFRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIGxvY2FsZSBjb2RlIGZvcm1hdCBpcyBpbXBvcnRhbnQuIFlvdSBzaG91bGQgdXNlXG4gKiB0aGUgY2Fub25pY2FsIFVuaWNvZGUgZm9ybWF0IHdpdGggaHlwaGVuIGFzIGEgZGVsaW1pdGVyLiBMYW5ndWFnZSBtdXN0IGJlXG4gKiBsb3dlcmNhc2UsIExhbmd1YWdlIFNjcmlwdCAtIENhcGl0YWxpemVkLCBSZWdpb24gLSBVUFBFUkNBU0UuXG4gKiBUaGVyZSBhcmUgZmV3IGV4YW1wbGVzOiBwdC1CUiwgZW4sIGVuLVVTLCBzci1MYXRpbi1CTywgemgtSGFucy1DTi5cbiAqXG4gKiBTZWUgbW9yZSBpbmZvIGFib3V0IGxvY2FsZSBjb2RlcyBoZXJlOlxuICogaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvI1VuaWNvZGVfTGFuZ3VhZ2VfYW5kX0xvY2FsZV9JZGVudGlmaWVyc1xuICpcbiAqIEZvciBsYW5ndWFnZSBjb2RlcyB5b3Ugc2hvdWxkIHVzZSB2YWx1ZXMgZGVmaW5lZCBieSBJU08gNjkzLTEuIFNlZSBpdCBoZXJlXG4gKiBodHRwOi8vd3d3LnczLm9yZy9XQUkvRVIvSUcvZXJ0L2lzbzYzOS5odG0uIFRoZXJlIGlzIG9ubHkgb25lIGV4Y2VwdGlvbiBmcm9tXG4gKiB0aGlzIHJ1bGU6IHRoZSBIZWJyZXcgbGFuZ3VhZ2UuIEZvciBsZWdhY3kgcmVhc29ucyB0aGUgb2xkIGNvZGUgKGl3KSBzaG91bGRcbiAqIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgbmV3IGNvZGUgKGhlKSwgc2VlIGh0dHA6Ly93aWtpL01haW4vSUlJU3lub255bXMuXG4gKi9cbmdvb2cuTE9DQUxFID0gJ2VuJzsgIC8vIGRlZmF1bHQgdG8gZW5cblxuXG4vKipcbiAqIENyZWF0ZXMgb2JqZWN0IHN0dWJzIGZvciBhIG5hbWVzcGFjZS4gIFRoZSBwcmVzZW5jZSBvZiBvbmUgb3IgbW9yZVxuICogZ29vZy5wcm92aWRlKCkgY2FsbHMgaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBkZWZpbmVzIHRoZSBnaXZlblxuICogb2JqZWN0cy9uYW1lc3BhY2VzLiAgQnVpbGQgdG9vbHMgYWxzbyBzY2FuIGZvciBwcm92aWRlL3JlcXVpcmUgc3RhdGVtZW50c1xuICogdG8gZGlzY2VybiBkZXBlbmRlbmNpZXMsIGJ1aWxkIGRlcGVuZGVuY3kgZmlsZXMgKHNlZSBkZXBzLmpzKSwgZXRjLlxuICogQHNlZSBnb29nLnJlcXVpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWVzcGFjZSBwcm92aWRlZCBieSB0aGlzIGZpbGUgaW4gdGhlIGZvcm1cbiAqICAgICBcImdvb2cucGFja2FnZS5wYXJ0XCIuXG4gKi9cbmdvb2cucHJvdmlkZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBzYW1lIG5hbWVzcGFjZSBpc24ndCBwcm92aWRlZCB0d2ljZS4gVGhpcyBpcyBpbnRlbmRlZFxuICAgIC8vIHRvIHRlYWNoIG5ldyBkZXZlbG9wZXJzIHRoYXQgJ2dvb2cucHJvdmlkZScgaXMgZWZmZWN0aXZlbHkgYSB2YXJpYWJsZVxuICAgIC8vIGRlY2xhcmF0aW9uLiBBbmQgd2hlbiBKU0NvbXBpbGVyIHRyYW5zZm9ybXMgZ29vZy5wcm92aWRlIGludG8gYSByZWFsXG4gICAgLy8gdmFyaWFibGUgZGVjbGFyYXRpb24sIHRoZSBjb21waWxlZCBKUyBzaG91bGQgd29yayB0aGUgc2FtZSBhcyB0aGUgcmF3XG4gICAgLy8gSlMtLWV2ZW4gd2hlbiB0aGUgcmF3IEpTIHVzZXMgZ29vZy5wcm92aWRlIGluY29ycmVjdGx5LlxuICAgIGlmIChnb29nLmlzUHJvdmlkZWRfKG5hbWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignTmFtZXNwYWNlIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBkZWNsYXJlZC4nKTtcbiAgICB9XG4gICAgZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lXTtcblxuICAgIHZhciBuYW1lc3BhY2UgPSBuYW1lO1xuICAgIHdoaWxlICgobmFtZXNwYWNlID0gbmFtZXNwYWNlLnN1YnN0cmluZygwLCBuYW1lc3BhY2UubGFzdEluZGV4T2YoJy4nKSkpKSB7XG4gICAgICBpZiAoZ29vZy5nZXRPYmplY3RCeU5hbWUobmFtZXNwYWNlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lc3BhY2VdID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnb29nLmV4cG9ydFBhdGhfKG5hbWUpO1xufTtcblxuXG4vKipcbiAqIE1hcmtzIHRoYXQgdGhlIGN1cnJlbnQgZmlsZSBzaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLCBhbmQgbmV2ZXIgZm9yXG4gKiBsaXZlIGNvZGUgaW4gcHJvZHVjdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X21lc3NhZ2UgT3B0aW9uYWwgbWVzc2FnZSB0byBhZGQgdG8gdGhlIGVycm9yIHRoYXQnc1xuICogICAgIHJhaXNlZCB3aGVuIHVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLlxuICovXG5nb29nLnNldFRlc3RPbmx5ID0gZnVuY3Rpb24ob3B0X21lc3NhZ2UpIHtcbiAgaWYgKENPTVBJTEVEICYmICFnb29nLkRFQlVHKSB7XG4gICAgb3B0X21lc3NhZ2UgPSBvcHRfbWVzc2FnZSB8fCAnJztcbiAgICB0aHJvdyBFcnJvcignSW1wb3J0aW5nIHRlc3Qtb25seSBjb2RlIGludG8gbm9uLWRlYnVnIGVudmlyb25tZW50JyArXG4gICAgICAgICAgICAgICAgb3B0X21lc3NhZ2UgPyAnOiAnICsgb3B0X21lc3NhZ2UgOiAnLicpO1xuICB9XG59O1xuXG5cbmlmICghQ09NUElMRUQpIHtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIG5hbWUgaGFzIGJlZW4gZ29vZy5wcm92aWRlZC4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSBmb3JcbiAgICogbmFtZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9ubHkgYXMgaW1wbGljaXQgbmFtZXNwYWNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIGxvb2sgZm9yLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBuYW1lIGhhcyBiZWVuIHByb3ZpZGVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pc1Byb3ZpZGVkXyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gIWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lXSAmJiAhIWdvb2cuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBOYW1lc3BhY2VzIGltcGxpY2l0bHkgZGVmaW5lZCBieSBnb29nLnByb3ZpZGUuIEZvciBleGFtcGxlLFxuICAgKiBnb29nLnByb3ZpZGUoJ2dvb2cuZXZlbnRzLkV2ZW50JykgaW1wbGljaXRseSBkZWNsYXJlc1xuICAgKiB0aGF0ICdnb29nJyBhbmQgJ2dvb2cuZXZlbnRzJyBtdXN0IGJlIG5hbWVzcGFjZXMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmltcGxpY2l0TmFtZXNwYWNlc18gPSB7fTtcbn1cblxuXG4vKipcbiAqIEJ1aWxkcyBhbiBvYmplY3Qgc3RydWN0dXJlIGZvciB0aGUgcHJvdmlkZWQgbmFtZXNwYWNlIHBhdGgsXG4gKiBlbnN1cmluZyB0aGF0IG5hbWVzIHRoYXQgYWxyZWFkeSBleGlzdCBhcmUgbm90IG92ZXJ3cml0dGVuLiBGb3JcbiAqIGV4YW1wbGU6XG4gKiBcImEuYi5jXCIgLT4gYSA9IHt9O2EuYj17fTthLmIuYz17fTtcbiAqIFVzZWQgYnkgZ29vZy5wcm92aWRlIGFuZCBnb29nLmV4cG9ydFN5bWJvbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIG9iamVjdCB0aGF0IHRoaXMgZmlsZSBkZWZpbmVzLlxuICogQHBhcmFtIHsqPX0gb3B0X29iamVjdCB0aGUgb2JqZWN0IHRvIGV4cG9zZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqZWN0VG9FeHBvcnRUbyBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcGF0aCB0bzsgZGVmYXVsdFxuICogICAgIGlzIHxnb29nLmdsb2JhbHwuXG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmV4cG9ydFBhdGhfID0gZnVuY3Rpb24obmFtZSwgb3B0X29iamVjdCwgb3B0X29iamVjdFRvRXhwb3J0VG8pIHtcbiAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgY3VyID0gb3B0X29iamVjdFRvRXhwb3J0VG8gfHwgZ29vZy5nbG9iYWw7XG5cbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgZXhoaWJpdHMgc3RyYW5nZSBiZWhhdmlvciB3aGVuIHRocm93aW5nIGVycm9ycyBmcm9tXG4gIC8vIG1ldGhvZHMgZXh0ZXJuZWQgaW4gdGhpcyBtYW5uZXIuICBTZWUgdGhlIHRlc3RFeHBvcnRTeW1ib2xFeGNlcHRpb25zIGluXG4gIC8vIGJhc2VfdGVzdC5odG1sIGZvciBhbiBleGFtcGxlLlxuICBpZiAoIShwYXJ0c1swXSBpbiBjdXIpICYmIGN1ci5leGVjU2NyaXB0KSB7XG4gICAgY3VyLmV4ZWNTY3JpcHQoJ3ZhciAnICsgcGFydHNbMF0pO1xuICB9XG5cbiAgLy8gQ2VydGFpbiBicm93c2VycyBjYW5ub3QgcGFyc2UgY29kZSBpbiB0aGUgZm9ybSBmb3IoKGEgaW4gYik7IGM7KTtcbiAgLy8gVGhpcyBwYXR0ZXJuIGlzIHByb2R1Y2VkIGJ5IHRoZSBKU0NvbXBpbGVyIHdoZW4gaXQgY29sbGFwc2VzIHRoZVxuICAvLyBzdGF0ZW1lbnQgYWJvdmUgaW50byB0aGUgY29uZGl0aW9uYWwgbG9vcCBiZWxvdy4gVG8gcHJldmVudCB0aGlzIGZyb21cbiAgLy8gaGFwcGVuaW5nLCB1c2UgYSBmb3ItbG9vcCBhbmQgcmVzZXJ2ZSB0aGUgaW5pdCBsb2dpYyBhcyBiZWxvdy5cblxuICAvLyBQYXJlbnRoZXNlcyBhZGRlZCB0byBlbGltaW5hdGUgc3RyaWN0IEpTIHdhcm5pbmcgaW4gRmlyZWZveC5cbiAgZm9yICh2YXIgcGFydDsgcGFydHMubGVuZ3RoICYmIChwYXJ0ID0gcGFydHMuc2hpZnQoKSk7KSB7XG4gICAgaWYgKCFwYXJ0cy5sZW5ndGggJiYgZ29vZy5pc0RlZihvcHRfb2JqZWN0KSkge1xuICAgICAgLy8gbGFzdCBwYXJ0IGFuZCB3ZSBoYXZlIGFuIG9iamVjdDsgdXNlIGl0XG4gICAgICBjdXJbcGFydF0gPSBvcHRfb2JqZWN0O1xuICAgIH0gZWxzZSBpZiAoY3VyW3BhcnRdKSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1ciA9IGN1cltwYXJ0XSA9IHt9O1xuICAgIH1cbiAgfVxufTtcblxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBmdWxseSBxdWFsaWZpZWQgZXh0ZXJuYWwgbmFtZS4gIElmIHlvdSBhcmVcbiAqIHVzaW5nIGEgY29tcGlsYXRpb24gcGFzcyB0aGF0IHJlbmFtZXMgcHJvcGVydHkgbmFtZXMgYmV3YXJlIHRoYXQgdXNpbmcgdGhpc1xuICogZnVuY3Rpb24gd2lsbCBub3QgZmluZCByZW5hbWVkIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqIFRoZSBvYmplY3Qgd2l0aGluIHdoaWNoIHRvIGxvb2s7IGRlZmF1bHQgaXNcbiAqICAgICB8Z29vZy5nbG9iYWx8LlxuICogQHJldHVybiB7P30gVGhlIHZhbHVlIChvYmplY3Qgb3IgcHJpbWl0aXZlKSBvciwgaWYgbm90IGZvdW5kLCBudWxsLlxuICovXG5nb29nLmdldE9iamVjdEJ5TmFtZSA9IGZ1bmN0aW9uKG5hbWUsIG9wdF9vYmopIHtcbiAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgY3VyID0gb3B0X29iaiB8fCBnb29nLmdsb2JhbDtcbiAgZm9yICh2YXIgcGFydDsgcGFydCA9IHBhcnRzLnNoaWZ0KCk7ICkge1xuICAgIGlmIChnb29nLmlzRGVmQW5kTm90TnVsbChjdXJbcGFydF0pKSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3VyO1xufTtcblxuXG4vKipcbiAqIEdsb2JhbGl6ZXMgYSB3aG9sZSBuYW1lc3BhY2UsIHN1Y2ggYXMgZ29vZyBvciBnb29nLmxhbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgbmFtZXNwYWNlIHRvIGdsb2JhbGl6ZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X2dsb2JhbCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcHJvcGVydGllcyB0by5cbiAqIEBkZXByZWNhdGVkIFByb3BlcnRpZXMgbWF5IGJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQgdG8gdGhlIGdsb2JhbCBzY29wZSwgYnV0XG4gKiAgICAgdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIGRvbmUgaW4gYnVsay5cbiAqL1xuZ29vZy5nbG9iYWxpemUgPSBmdW5jdGlvbihvYmosIG9wdF9nbG9iYWwpIHtcbiAgdmFyIGdsb2JhbCA9IG9wdF9nbG9iYWwgfHwgZ29vZy5nbG9iYWw7XG4gIGZvciAodmFyIHggaW4gb2JqKSB7XG4gICAgZ2xvYmFsW3hdID0gb2JqW3hdO1xuICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIGRlcGVuZGVuY3kgZnJvbSBhIGZpbGUgdG8gdGhlIGZpbGVzIGl0IHJlcXVpcmVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbFBhdGggVGhlIHBhdGggdG8gdGhlIGpzIGZpbGUuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm92aWRlcyBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgcHJvdmlkZXMuXG4gKiBAcGFyYW0ge0FycmF5fSByZXF1aXJlcyBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgcmVxdWlyZXMuXG4gKi9cbmdvb2cuYWRkRGVwZW5kZW5jeSA9IGZ1bmN0aW9uKHJlbFBhdGgsIHByb3ZpZGVzLCByZXF1aXJlcykge1xuICBpZiAoIUNPTVBJTEVEKSB7XG4gICAgdmFyIHByb3ZpZGUsIHJlcXVpcmU7XG4gICAgdmFyIHBhdGggPSByZWxQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICB2YXIgZGVwcyA9IGdvb2cuZGVwZW5kZW5jaWVzXztcbiAgICBmb3IgKHZhciBpID0gMDsgcHJvdmlkZSA9IHByb3ZpZGVzW2ldOyBpKyspIHtcbiAgICAgIGRlcHMubmFtZVRvUGF0aFtwcm92aWRlXSA9IHBhdGg7XG4gICAgICBpZiAoIShwYXRoIGluIGRlcHMucGF0aFRvTmFtZXMpKSB7XG4gICAgICAgIGRlcHMucGF0aFRvTmFtZXNbcGF0aF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGRlcHMucGF0aFRvTmFtZXNbcGF0aF1bcHJvdmlkZV0gPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgcmVxdWlyZSA9IHJlcXVpcmVzW2pdOyBqKyspIHtcbiAgICAgIGlmICghKHBhdGggaW4gZGVwcy5yZXF1aXJlcykpIHtcbiAgICAgICAgZGVwcy5yZXF1aXJlc1twYXRoXSA9IHt9O1xuICAgICAgfVxuICAgICAgZGVwcy5yZXF1aXJlc1twYXRoXVtyZXF1aXJlXSA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5cblxuXG4vLyBOT1RFKG5uYXplKTogVGhlIGRlYnVnIERPTSBsb2FkZXIgd2FzIGluY2x1ZGVkIGluIGJhc2UuanMgYXMgYW4gb3JpZ25hbFxuLy8gd2F5IHRvIGRvIFwiZGVidWctbW9kZVwiIGRldmVsb3BtZW50LiAgVGhlIGRlcGVuZGVuY3kgc3lzdGVtIGNhbiBzb21ldGltZXNcbi8vIGJlIGNvbmZ1c2luZywgYXMgY2FuIHRoZSBkZWJ1ZyBET00gbG9hZGVyJ3MgYXN5bmNyb25vdXMgbmF0dXJlLlxuLy9cbi8vIFdpdGggdGhlIERPTSBsb2FkZXIsIGEgY2FsbCB0byBnb29nLnJlcXVpcmUoKSBpcyBub3QgYmxvY2tpbmcgLS0gdGhlXG4vLyBzY3JpcHQgd2lsbCBub3QgbG9hZCB1bnRpbCBzb21lIHBvaW50IGFmdGVyIHRoZSBjdXJyZW50IHNjcmlwdC4gIElmIGFcbi8vIG5hbWVzcGFjZSBpcyBuZWVkZWQgYXQgcnVudGltZSwgaXQgbmVlZHMgdG8gYmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzXG4vLyBzY3JpcHQsIG9yIGxvYWRlZCB2aWEgcmVxdWlyZSgpIHdpdGggaXRzIHJlZ2lzdGVyZWQgZGVwZW5kZW5jaWVzLlxuLy8gVXNlci1kZWZpbmVkIG5hbWVzcGFjZXMgbWF5IG5lZWQgdGhlaXIgb3duIGRlcHMgZmlsZS4gIFNlZSBodHRwOi8vZ28vanNfZGVwcyxcbi8vIGh0dHA6Ly9nby9nZW5qc2RlcHMsIG9yLCBleHRlcm5hbGx5LCBEZXBzV3JpdGVyLlxuLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jbG9zdXJlL2xpYnJhcnkvZG9jcy9kZXBzd3JpdGVyLmh0bWxcbi8vXG4vLyBCZWNhdXNlIG9mIGxlZ2FjeSBjbGllbnRzLCB0aGUgRE9NIGxvYWRlciBjYW4ndCBiZSBlYXNpbHkgcmVtb3ZlZCBmcm9tXG4vLyBiYXNlLmpzLiAgV29yayBpcyBiZWluZyBkb25lIHRvIG1ha2UgaXQgZGlzYWJsZWFibGUgb3IgcmVwbGFjZWFibGUgZm9yXG4vLyBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIChET00tbGVzcyBKYXZhU2NyaXB0IGludGVycHJldGVycyBsaWtlIFJoaW5vIG9yIFY4LFxuLy8gZm9yIGV4YW1wbGUpLiBTZWUgYm9vdHN0cmFwLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxu