pup-recorder 0.3.10 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build.ts +9 -9
- package/dist/_tsup-dts-rollup.d.ts +231 -73
- package/dist/app.cjs +11 -430
- package/dist/chunk-YJ7QEMFY.js +4 -0
- package/dist/cli.js +2 -2
- package/dist/iframe_preload.cjs +3 -0
- package/dist/index.d.ts +12 -30
- package/dist/index.js +2 -2
- package/package.json +3 -3
- package/dist/chunk-7LUJTKTE.js +0 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'source-map-support/register.js';import {a,b,k as k$1}from'./chunk-7LUJTKTE.js';export{s as DEFAULT_DURATION,r as DEFAULT_FPS,q as DEFAULT_HEIGHT,t as DEFAULT_OUT_FILE,p as DEFAULT_WIDTH,j as Logger,m as PUP_ARGS_KEY,u as RenderSchema,v as defaultRenderOptions,o as exec,k as logger,l as noerr,n as pargs,d as parseNumber,e as parseString,c as penv,w as pup,h as pupApp,i as pupAudioPreload,f as pupLogLevel,g as pupPkgRoot}from'./chunk-7LUJTKTE.js';import {setTimeout as setTimeout$1}from'timers/promises';import {FormatContext,FFmpegError,Dictionary,Codec,FF_DECODER_PNG,CodecContext,SoftwareScaleContext,AV_PIX_FMT_YUVA420P as AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR,Frame,Rational,FilterGraph,Filter,FilterInOut,AV_PIX_FMT_BGRA as AV_PIX_FMT_BGRA$1,Packet}from'node-av';import {HardwareContext}from'node-av/api';import {FF_HWDEVICE_TYPE_VIDEOTOOLBOX,FF_HWDEVICE_TYPE_CUDA,AV_PIX_FMT_YUVA420P,FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,FF_ENCODER_LIBOPUS,AV_SAMPLE_FMT_FLT,AV_PIX_FMT_BGRA,FF_ENCODER_LIBX265,AV_CHANNEL_LAYOUT_STEREO,AV_CODEC_FLAG_GLOBAL_HEADER,AVERROR_EAGAIN,AVERROR_EOF,FF_ENCODER_HEVC_NVENC,AV_PIX_FMT_YUV420P,AVCOL_RANGE_JPEG}from'node-av/constants';import {ok}from'assert';var ne=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};var D=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,a)=>{this._queue.push({run:()=>{if(t?.aborted){a(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,a(i),this.next();});},reject:a,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};function se(r){return new Promise(e=>setTimeout(e,r))}function br(r,e,t){return new Promise((o,a)=>{let i=setTimeout(()=>a(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,a).finally(()=>clearTimeout(i));})}function vr(r,e){let t,o=false;async function a(i){await r(i),!o&&(t=setTimeout(()=>a(i+1),e));}return t=setTimeout(()=>a(0),e),()=>{o=true,clearTimeout(t);}}function Ar({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let a=new Error(`timeout over ${t}ms`);return async function(...i){let n=0;for(;;){o?.throwIfAborted();try{let c=[r(...i)];return t&&c.push(setTimeout$1(t).then(()=>{throw a})),await Promise.race(c)}catch(c){if(o?.throwIfAborted(),n++,n>=e)throw c;await se(Math.pow(2,n)*100+Math.random()*100);}}}}var G=class{_ctx;_opened=false;constructor(e,t){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=a(t,Dictionary.fromObject({movflags:"+faststart"}));FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var a$1=o,i=true;}finally{b(t,a$1,i);}}async writePacket(e){FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(this._opened){this._opened=false;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose]();}}}};async function A(r,e){let t=new CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new Rational(1,r.fps),t.framerate=new Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,a]of Object.entries(r.options??{}))t.setOption(o,a);return FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function k(r,e,t){let o=new Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function x(){let r=new Packet;return r.alloc(),r}async function V(r,e,t,o){for(;;){let a=await r.receivePacket(e);if(a===AVERROR_EAGAIN||a===AVERROR_EOF)break;FFmpegError.throwIfError(a,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var v=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=Codec.findDecoderByName(FF_DECODER_PNG);return ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=k(e,t,AV_PIX_FMT_BGRA$1),this.dst=k(e,t,AV_PIX_FMT_YUVA420P$1),this.pkt=x();}async png(){let e=new CodecContext;return e.allocContext3(this._png),FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=a(o,await this.png());this.pkt.data=e;FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(a){var i=a,n=true;}finally{b(o,i,n);}}get sws(){if(!this._sws){let e=new SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var at={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},$=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=x(),this._filterFrame=new Frame,this._filterFrame.alloc();}static async create(e){let t=Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let a=e.muxer.addStream(o);return new r(o,a,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new FilterGraph;t.alloc();let o=Filter.getByName("abuffer"),a=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!a)throw new Error("Failed to create abuffer");let i=Filter.getByName("abuffersink"),n=t.createFilter(i,"sink");if(!n)throw new Error("Failed to create abuffersink");let s=`aformat=sample_fmts=${at[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=FilterInOut.createList([{name:"in",filterCtx:a,padIdx:0}]),u=FilterInOut.createList([{name:"out",filterCtx:n,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(s,u,d),"graph.parsePtr"),FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=a,this._bufSink=n;}async encode(e,t){var n=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let u=0;u<o.length;u++)isFinite(o[u])||(o[u]=0);let a$1=o.length>>1;let i=a(n,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:a$1,format:AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(a$1);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(c){var s=c,d=true;}finally{b(n,s,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===AVERROR_EAGAIN||t===AVERROR_EOF)break;FFmpegError.throwIfError(t,"buffersinkGetFrame"),FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return V(this._ctx,this._pkt,this._stream,e)}};function y(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let a=0;a<8;a++)o=o<<1|r[t*8+a];e[t]=o;}return e}var E=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let a=0;a<o-1;a++)this.bits.push(0);for(let a=o-1;a>=0;a--)this.bits.push(t>>a&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let a=0;a<o;a++)this.bits.push(e[t+a]);}},h=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var S=Buffer.from([0,0,0,1]);var Z=16;var J=23,T=32,R=33,W=34,he=39;function _e(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,a=e&7;return {type:t,layerId:o,temporalId:a}}function ee(r,e,t){let o=(r&63)<<1|e>>5&1,a=(e&31)<<3|t&7;return [o,a]}function w(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let a=t+o;if(a+2>r.length)break;let i=r.length;for(let s=a+2;s<r.length-2;s++)if(r[s]===0&&r[s+1]===0&&(r[s+2]===1||s+3<r.length&&r[s+2]===0&&r[s+3]===1)){i=s;break}let{type:n,layerId:c}=_e(r[a],r[a+1]);e.push({type:n,layerId:c,data:r.subarray(a,i)}),t=i;}return e}function te(r,e){let t=Buffer.from(r),{type:o,temporalId:a}=_e(t[0],t[1]),[i,n]=ee(o,e,a);return t[0]=i,t[1]=n,t}function P(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function B(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var it=48,Pe=24,nt=2,st=10,re=0,ct=1;function xe(r,e,t){let o=e>>3,a=1<<7-(e&7),i=r[o]??0;r[o]=t?i|a:i&~a;}function we(r,e){let t=P(r);return xe(t,e+nt,0),xe(t,e+st,1),B(t)}function z(r){let e=w(r);if(e.length===0)return r;let t=[];for(let o of e){let a=o.data;o.type===T?a=we(o.data,it):o.type===R&&(a=we(o.data,Pe)),t.push(S,a);}return Buffer.concat(t)}function dt(r,e,t){let o=P(r),a=new h(o),i=new E;for(let n=0;n<e;n++)i.bits.push(a.read(1));for(a.readUe(),i.ue(t);a.pos<a.bits.length;)i.bits.push(a.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return B(y(i.bits))}function ut(r,e,t,o){let a=P(r),i=new h(a),n=new E;for(let c=0;c<e;c++)n.bits.push(i.read(1));for(i.readUe(),i.readUe(),n.ue(t),n.ue(o);i.pos<i.bits.length;)n.bits.push(i.read(1));for(;n.bits.length%8!==0;)n.bits.push(0);return B(y(n.bits))}function ge(r){let e=Pe+96;return dt(r,e,1)}function Fe(r){return ut(r,16,1,1)}function ft(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function pt(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let a=0;a<=e;a++)r.read(1)||r.read(1);}else {let o=r.readUe(),a=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<a;i++)r.readUe(),r.read(1);}}function mt(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=Z&&e<=J;o&&r.read(1),r.readUe();let a=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):pt(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(a===ct||a===re)&&(r.read(1)&&(r.readUe(),a===re&&r.readUe()),a===re&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),ft(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function be(r,e,t){let o=P(r),a=new h(o),i=new h(o),n=mt(i,e,t),c=n%8===0?8:8-n%8,s=(n+c)/8,d=new E;for(let f=0;f<16;f++)d.bits.push(a.read(1));for(d.bits.push(a.read(1)),e>=Z&&e<=J&&d.bits.push(a.read(1)),a.readUe(),d.ue(1);a.pos<n;)d.bits.push(a.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return B(Buffer.concat([y(d.bits),o.subarray(s)]))}function lt(r){let e=new h(P(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function ht(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function _t(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let a=0;a<e.maxSubLayersMinus1;a++)r.w(0,2);for(let a=e.maxSubLayersMinus1;a<8;a++)r.w(0,2);}r.flag(0);for(let a=0;a<16;a++)r.flag(a===2||a===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function ve(r,e,t){let o=lt(r);if(!o)return r;let a=new E;return ht(a,o),_t(a,o,e,t),a.bits.push(1),a.align(0),B(y(a.bits))}function Ee(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let a=r.width,i=r.height,n=a*i;if(t.byteOffset%4===0&&o===a*4){let c=new Uint32Array(t.buffer,t.byteOffset,n);for(let s=0;s<n;s++)e[s]=c[s]>>>24;}else for(let c=0;c<i;c++){let s=c*o+3,d=c*a;for(let u=0;u<a;u++)e[d+u]=t[s+u*4];}}function xt(r,e){return r===R?ge(e):r===W?Fe(e):e}function ye(r){let{baseExtradata:e,alphaExtradata:t}=r,o=w(e),a=w(t),i=new Map;for(let s of a){if(s.type===T)continue;let d=i.get(s.type)??[];d.push(s),i.set(s.type,d);}let n=[],c=new Set;for(let s of o){let d=s.type===T?ve(s.data,r.width,r.height):s.data;if(n.push(S,d),!c.has(s.type)){c.add(s.type);for(let u of i.get(s.type)??[]){let f=xt(s.type,u.data);n.push(S,te(f,1));}}}return n.push(wt()),Buffer.concat(n)}function wt(){let[t,o]=ee(he,0,1),a=[],i=(n,c)=>{for(let s=c-1;s>=0;s--)a.push(n>>s&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);a.length%8!==0;)i(0,1);return Buffer.concat([S,Buffer.from([t,o]),Buffer.from([165,4]),y(a),Buffer.from([128])])}function Se(r,e,t){let o=[];for(let a of r)o.push(S,a.data);for(let a of e)if(a.type<T){let i=be(a.data,a.type,t);o.push(S,te(i,1));}return Buffer.concat(o)}var X=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:a,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,a,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let a=[];for(;;){let i=await e.receivePacket(t);if(i>=0){a.push(this.snapshot(t)),t.unref();continue}if(i===AVERROR_EAGAIN||i===AVERROR_EOF)return a;FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:a,baseCtx:i,stream:n,hevcCfg:c}=this._s,s=Se(w(e.data),w(t.data),c);a.data=z(s),a.pts=e.pts,a.dts=e.dts,a.duration=e.duration===0n?1n:e.duration,a.flags=e.flags,a.streamIndex=n.index,a.rescaleTs(i.timeBase,n.timeBase),await o.writePacket(a),a.unref();}};function C(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function bt(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let a=0;a<e;a++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let a=e;a<8;a++)r.read(2);for(let a=0;a<e;a++)t[a]&&r.read(88),o[a]&&r.read(8);}function vt(r){let e=new h(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&C("sps_max_sub_layers_minus1",t,"0"),e.read(1),bt(e,t),e.readUe();let o=e.readUe();o===3&&C("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let a=e.readUe()+4,n=e.read(1)?t+1:1;for(let _=0;_<n;_++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&C("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&C("pcm_enabled_flag",1,"0");let s=e.readUe();s>1&&C("num_short_term_ref_pic_sets",s,"\u22641");let d=0;if(s===1){let _=e.readUe(),g=e.readUe();d=_+g;for(let l=0;l<_;l++)e.readUe(),e.read(1);for(let l=0;l<g;l++)e.readUe(),e.read(1);}let u=e.read(1)===1;u&&C("long_term_ref_pics_present_flag",1,"0");let f=e.read(1)===1;return {log2MaxPocLsb:a,saoEnabled:c,numShortTermRefPicSets:s,numDeltaPocsSet0:d,longTermRefPicsPresent:u,spsTemporalMvpEnabled:f}}function Et(r){let e=new h(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&C("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&C("tiles_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1,i=e.read(1),n=false;return i&&(e.read(1),n=e.read(1)===1,n||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:a&&!n}}function Ce(r){let e=w(r),t=e.find(n=>n.type===R),o=e.find(n=>n.type===W);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let a=vt(P(t.data)),i=Et(P(o.data));return {...a,...i}}var Q=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new X({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){let{width:t,height:o,fps:a,bitrate:i,muxer:n}=e,c=Codec.findEncoderByName(FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:a,bitrate:i,options:{preset:"p4",bf:"0",tier:"main"}},u=await A({...d,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),f,_,g,l;try{if(f=await A({...d,pixelFormat:AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),!u.extraData||!f.extraData)throw new Error("nvenc: codec extradata missing");let L=Ce(u.extraData),oe=n.addStream(u,"hvc1"),Ne=ye({baseExtradata:u.extraData,alphaExtradata:f.extraData,width:t,height:o});oe.codecpar.extradata=z(Ne);let ae=t*o,Te=(t+1>>1)*(o+1>>1),ie=Buffer.alloc(ae+Te*2);return ie.fill(128,ae),_=x(),g=x(),l=k(t,o,AV_PIX_FMT_YUV420P),new r({baseCtx:u,alphaCtx:f,basePkt:_,alphaPkt:g,stream:oe,alphaSwFrame:l,alphaBuf:ie,hevcCfg:L})}catch(L){throw _?.free(),g?.free(),l?.free(),f?.freeContext(),u.freeContext(),L}}async encode(e,t){let{baseCtx:o,alphaCtx:a,alphaSwFrame:i,alphaBuf:n}=this._s,c=this._pts++;Ee(e,n),FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),FFmpegError.throwIfError(i.fromBuffer(n),"alphaSw.fromBuffer"),i.pts=c,i.duration=1n,e.pts=c,e.duration=1n,FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),FFmpegError.throwIfError(await a.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:a,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),a.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==AVERROR_EAGAIN&&o!==AVERROR_EOF&&FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var I=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:a,muxer:i,...n}=e,c=Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let s=await A({codec:c,...n,codecTag:o,options:a},"videoCtx.open2"),d=i.addStream(s,o);return new r(s,x(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return V(this._ctx,this._pkt,this._stream,e)}};var Y=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:a,hw:i,bitrate:n,muxer:c}=e,s=i.getEncoderCodec("hevc");if(!s)throw new Error("hevc_videotoolbox encoder not found");let d=await A({codec:s,width:t,height:o,fps:a,bitrate:n,pixelFormat:AV_PIX_FMT_BGRA,colorRange:AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),u;try{let f=c.addStream(d,"hvc1");return u=x(),new r(d,u,f)}catch(f){throw u?.free(),d.freeContext(),f}}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return V(this._ctx,this._pkt,this._stream,e)}};var q="[Encoder]";async function ke(r,e){let{width:t,height:o,fps:a,bitrate:i=8e6,disableHwCodec:n=false,sharedHw:c}=r,s=c??(n?void 0:HardwareContext.auto()??void 0),d=!c&&!!s;try{if(s?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&s.getEncoderCodec("hevc"))return k$1.debug(q,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Y.create({width:t,height:o,fps:a,hw:s,bitrate:i,muxer:e}),hw:s,ownsHw:d};if(s?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&s.getEncoderCodec("hevc"))return k$1.debug(q,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Q.create({width:t,height:o,fps:a,hw:s,bitrate:i,muxer:e}),hw:s,ownsHw:d}}catch(f){k$1.warn(q,"Hardware codec session limits reached, use software encoder",f),d&&s?.dispose();}return k$1.debug(q,"using software libx265 HEVC alpha encoder"),{video:await I.create({width:t,height:o,fps:a,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await v.create(t,o),ownsHw:false}}var Xt="libvpx-vp9",U=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new G(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),a=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:a,opts:e})}static mp4Video(e,t){let{width:o,height:a,fps:i,disableHwCodec:n,sharedHw:c}=e;return ke({width:o,height:a,fps:i,disableHwCodec:n,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:a,fps:i}=e;return {video:await I.create({width:o,height:a,fps:i,codecName:Xt,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:t}),codec:await v.create(o,a),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:AV_SAMPLE_FMT_FLT,codecName:FF_ENCODER_LIBOPUS};return $.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:a}=this._s;await o?.flush(a),e?await e.flush(a):await t.flush(a);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:a,codec:i,hw:n,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),a?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&n?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:a}=this._s;ok(o?.sws,"sws not initialized"),FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,a);}};var Ve=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:a,outFile:i,withAudio:n=false,disableHwCodec:c=false}=e,s=i.split(",").map(l=>l.trim()).filter(Boolean);if(s.length===0)throw new Error("outFile must contain at least one path");let d=s.map(l=>U.kindFromPath(l)),f=!c&&d.includes("mp4")?HardwareContext.auto()??void 0:void 0,_=f?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX||f?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA,g=[];for(let l=0;l<s.length;l++){let L=await U.create({outFile:s[l],kind:d[l],width:t,height:o,fps:a,withAudio:n,disableHwCodec:c,sharedHw:d[l]==="mp4"&&_?f:void 0});g.push(L);}return new r({sinks:g,sharedHw:f,limiter:new D(1),outFiles:s,opts:e})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=a(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(a){var i=a,n=true;}finally{b(o,i,n);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await v.create(t,o);let a=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(a);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=k(this._s.opts.width,this._s.opts.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};export{D as ConcurrencyLimiter,Ve as EncoderPipeline,G as FormatMuxer,ne as Lazy,vr as periodical,se as sleep,Ar as useRetry,br as withTimeout};//# sourceMappingURL=index.js.map
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvc2luay50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiXSwibmFtZXMiOlsiTGF6eSIsIm1ha2VWYWx1ZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwiZm4iLCJzaWduYWwiLCJyZXNvbHZlIiwicmVqZWN0IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5Iiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0IiwidGltZW91dEVycm9yIiwiYXJncyIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsIkZGbXBlZ0Vycm9yIiwiY29kZWNDdHgiLCJjb2RlY1RhZyIsInN0cmVhbSIsIl9zdGFjayIsIm9wdHMiLCJfX3VzaW5nIiwiRGljdGlvbmFyeSIsIl8iLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwicGt0Iiwib3BlblZpZGVvQ3R4IiwiY3R4IiwiQ29kZWNDb250ZXh0IiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwibWFrZUZyYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsInNyYyIsImkiLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiZGF0YSIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwiTkFMX0JMQV9XX0xQIiwiTkFMX1JTVl9JUkFQX1ZDTDIzIiwiTkFMX1ZQUyIsIk5BTF9TUFMiLCJOQUxfUFBTIiwiTkFMX1NFSV9QUkVGSVgiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsInR5cGUiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJvdXQiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJWUFNfUFRMX0JJVCIsIlNQU19QVExfQklUIiwiUFRMX1RJRVJfQklUIiwiUFRMX0NPTVBBVDJfQklUIiwiU0xJQ0VfVFlQRV9CIiwiU0xJQ0VfVFlQRV9QIiwic2V0Qml0IiwiYml0T2Zmc2V0IiwidmFsdWUiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsIngiLCJyZXdyaXRlQWxwaGFQYXJhbVNldCIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJhRGF0YSIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJEdWFsTGF5ZXJNdXgiLCJzIiwiYmFzZUN0eCIsImFscGhhQ3R4IiwiYmFzZVBrdCIsImFscGhhUGt0IiwidGFnIiwicmV0IiwiYmFzZSIsImFscGhhIiwiaGV2Y0NmZyIsImludGVybGVhdmVkIiwiZmFpbCIsImZpZWxkIiwiZ290IiwiZXhwZWN0ZWQiLCJza2lwUHRsIiwibWF4U3ViTGF5ZXJzIiwic3ViUHJvZmlsZVByZXNlbnQiLCJzdWJMZXZlbFByZXNlbnQiLCJwYXJzZVNwcyIsInNwc1Jic3AiLCJjaHJvbWFGb3JtYXQiLCJsb2cyTWF4UG9jTHNiIiwib3JkZXJDb3VudCIsInNhb0VuYWJsZWQiLCJudW1TdFJwcyIsImxvbmdUZXJtUmVmUGljc1ByZXNlbnQiLCJzcHNUZW1wb3JhbE12cEVuYWJsZWQiLCJwYXJzZVBwcyIsInBwc1Jic3AiLCJudW1FeHRyYVNsaWNlSGVhZGVyQml0cyIsImNhYmFjSW5pdFByZXNlbnQiLCJwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCIsImRlYmxvY2tpbmdDb250cm9sUHJlc2VudCIsInNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUiLCJwYXJzZU52ZW5jSGV2Y0NvbmZpZyIsImV4dHJhZGF0YSIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYWxwaGFTd0ZyYW1lIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidW5pZmllZCIsImNocm9tYVNpemUiLCJhbHBoYUJ1ZiIsInB0cyIsImRlc3luYyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY09wdHMiLCJyZXN0IiwiVmlkZW9Ub29sYm94RW5jb2RlciIsIl9WaWRlb1Rvb2xib3hFbmNvZGVyIiwiaHciLCJBVkNPTF9SQU5HRV9KUEVHIiwiVEFHIiwiY3JlYXRlSHdWaWRlb0VuY29kZXIiLCJkaXNhYmxlSHdDb2RlYyIsInNoYXJlZEh3IiwiSGFyZHdhcmVDb250ZXh0Iiwib3duc0h3IiwiRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1giLCJsb2dnZXIiLCJGRl9IV0RFVklDRV9UWVBFX0NVREEiLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJPdXRwdXRTaW5rIiwiX091dHB1dFNpbmsiLCJwYXRoIiwibG93ZXIiLCJ2aWRlbyIsImF1ZGlvIiwiRkZfRU5DT0RFUl9BQUMiLCJGRl9FTkNPREVSX0xJQk9QVVMiLCJzYW1wbGVSYXRlIiwiaHdWaWRlbyIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwib3V0RmlsZXMiLCJraW5kcyIsImlzSHdBbHBoYUNhcGFibGUiLCJzaW5rcyIsInNpbmsiLCJpbnB1dCJdLCJtYXBwaW5ncyI6InFxQ0FFTyxJQUFNQSxFQUFBQSxDQUFOLEtBQWMsQ0FDbkIsV0FBQSxDQUFxQkMsRUFBb0IsQ0FBcEIsSUFBQSxDQUFBLFNBQUEsQ0FBQUEsRUFBcUIsQ0FBckIsU0FBQSxDQUVyQixJQUFJLEtBQUEsRUFBVyxDQUNiLE9BQUssSUFBQSxDQUFLLFlBQUEsR0FDUixLQUFLLE1BQUEsQ0FBUyxJQUFBLENBQUssU0FBQSxFQUFVLENBQzdCLElBQUEsQ0FBSyxZQUFBLENBQWUsTUFFZixJQUFBLENBQUssTUFDZCxDQUVBLElBQUksV0FBQSxFQUF1QixDQUN6QixPQUFPLElBQUEsQ0FBSyxZQUNkLENBRVEsWUFBQSxDQUFlLEtBQUEsQ0FDZixNQUNWLEVDWE8sSUFBTUMsRUFBTixLQUF5QixDQU05QixZQUFxQkMsQ0FBQUEsQ0FBd0IsQ0FBeEIsSUFBQSxDQUFBLGNBQUEsQ0FBQUEsRUFBeUIsQ0FBekIsY0FBQSxDQUxiLFFBQVUsQ0FBQSxDQUNWLE1BQUEsQ0FBdUIsRUFBQyxDQUN4QixRQUFBLENBQVcsSUFBSSxPQUFBLENBQ2YsUUFBQSxDQUlSLElBQUksTUFBQSxFQUFpQixDQUNuQixPQUFPLEtBQUssT0FDZCxDQUVBLElBQUksT0FBQSxFQUFrQixDQUNwQixPQUFPLElBQUEsQ0FBSyxNQUFBLENBQU8sTUFDckIsQ0FFQSxJQUFJLEtBQUEsRUFBZ0IsQ0FDbEIsT0FBTyxDQUFBLFFBQUEsRUFBVyxLQUFLLE1BQU0sQ0FBQSxXQUFBLEVBQWMsS0FBSyxPQUFPLENBQUEsQ0FDekQsQ0FFQSxNQUFNLFFBQUEs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QUFBLElBQVNuRSxFQUFJbUcsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQm5HLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxFQUFBQSxDQUFLbUUsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQzVELENBRUFBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVCxJQUFBLElBQVNuRSxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSSxHQUFJQSxDQUFBQSxFQUFBQSxDQUFLbUUsQ0FBQUEsQ0FBRyxLQUFLbkUsQ0FBQUEsR0FBTSxDQUFBLEVBQUtBLElBQU0sQ0FBQyxDQUFBLENBQ3ZEbUUsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLZ0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxFQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURoQyxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBRWpILENBQUFBLENBQU8sRUFBRSxFQUNkaUgsQ0FBQUEsQ0FBRyxDQUFBLENBQUVoSCxDQUFBQSxDQUFRLEVBQUUsQ0FBQSxDQUNmZ0gsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUdUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFUEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FB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LElBQUEsQ0FBSyxTQUFBLEdBQ1QsTUFBTSxJQUFBLENBQUssRUFBQSxDQUFHLE9BQUEsQ0FBUSxLQUFBLEVBQU0sQ0FDNUIsTUFBTSxLQUFLLElBQUEsRUFBSyxFQUNsQixDQUVBLE1BQWMsSUFBQSxFQUFzQixDQUNsQyxHQUFJLENBQUEsSUFBQSxDQUFLLFNBQUEsQ0FDVCxDQUFBLElBQUEsQ0FBSyxTQUFBLENBQVksSUFBQSxDQUNqQixRQUFXQSxDQUFBQSxJQUFRLElBQUEsQ0FBSyxHQUFHLEtBQUEsQ0FBTyxNQUFNQSxFQUFLLE1BQUEsQ0FBTyxZQUFZLENBQUEsRUFBRSxDQUNsRSxJQUFBLENBQUssRUFBQSxDQUFHLFdBQVcsTUFBQSxDQUFPLE9BQU8sR0FBRSxDQUNuQyxJQUFBLENBQUssR0FBRyxRQUFBLEVBQVUsT0FBQSxHQUFRLENBQzVCLENBRVEsU0FBQSxDQUFVQyxDQUFBQSxDQUFzQixDQUN0QyxJQUFNdFEsQ0FBQUEsQ0FBUUosRUFBVSxJQUFBLENBQUssRUFBQSxDQUFHLEtBQUssS0FBQSxDQUFPLElBQUEsQ0FBSyxFQUFBLENBQUcsSUFBQSxDQUFLLE1BQUEsQ0FBUW1CLGVBQWUsRUFDaEYsT0FBQXRDLFdBQUFBLENBQVksYUFBYXVCLENBQUFBLENBQU0sVUFBQSxDQUFXc1EsQ0FBSyxDQUFBLENBQUcsc0JBQXNCLENBQUEsQ0FDakV0USxDQUNULENBQ0YiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgTGF6eTxUPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1ha2VWYWx1ZTogKCkgPT4gVCkge31cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1ha2VWYWx1ZSgpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWUhO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgdW5kZWZpbmVkO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8vIFdoZW4gcHJvdmlkZWQsIHVzZVJldHJ5IGJhaWxzIG91dCBpbW1lZGlhdGVseSBvbiBhYm9ydCBpbnN0ZWFkIG9mIHJldHJ5aW5nLiBUaGUgc2lnbmFsXG4gIC8vIGlzIG5vdCBhdXRvLXRocmVhZGVkIGludG8gZm4g4oCUIGNhbGxlciBtdXN0IHdpcmUgaXQgd2hlcmUgaXQgbWF0dGVycyAoZS5nLiBmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHsgZm4sIG1heEF0dGVtcHRzID0gMywgdGltZW91dCwgc2lnbmFsIH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjQ29udGV4dCwgRGljdGlvbmFyeSwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIFBhY2tldCB9IGZyb20gXCJub2RlLWF2XCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRNdXhlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogRm9ybWF0Q29udGV4dDtcbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3V0UGF0aDogc3RyaW5nLCBmb3JtYXROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3R4ID0gbmV3IEZvcm1hdENvbnRleHQoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fY3R4LmFsbG9jT3V0cHV0Q29udGV4dDIobnVsbCwgZm9ybWF0TmFtZSA/PyBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogUmV0dXJuVHlwZTxGb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIC8vICtmYXN0c3RhcnQgcmVsb2NhdGVzIG1vb3YgdG8gZmlsZSBmcm9udCBvbiB3cml0ZVRyYWlsZXIgc28gcGxheWVycyBjYW4gYmVnaW4gcGxheWJhY2sgYmVmb3JlIGZ1bGwgZG93bmxvYWQuXG4gICAgdXNpbmcgb3B0cyA9IERpY3Rpb25hcnkuZnJvbU9iamVjdCh7IG1vdmZsYWdzOiBcIitmYXN0c3RhcnRcIiB9KTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG9wdHMpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2N0eC53cml0ZVRyYWlsZXIoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQSBmYWlsZWQvdHJ1bmNhdGVkIHRyYWlsZXIgd3JpdGUgbXVzdCBub3QgbGVhayB0aGUgRkQgKyBuYXRpdmUgY29udGV4dC5cbiAgICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIEhhcmR3YXJlRnJhbWVzQ29udGV4dCwgUGFja2V0LCBSYXRpb25hbCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgQVZDb2xvclJhbmdlLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DdHhPcHRpb25zIHtcbiAgY29kZWM6IENvZGVjO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2xvclJhbmdlPzogQVZDb2xvclJhbmdlO1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaHdGcmFtZXNDdHg/OiBIYXJkd2FyZUZyYW1lc0NvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICBpZiAob3B0cy5od0ZyYW1lc0N0eCkgY3R4Lmh3RnJhbWVzQ3R4ID0gb3B0cy5od0ZyYW1lc0N0eDtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgcGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLmJpdHMucHVzaCgodiA+PiBpKSAmIDEpO1xuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB0aGlzLmJpdHMucHVzaChwYWQpO1xuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRSZWFkZXIge1xuICBwcml2YXRlIF9iaXRzOiBudW1iZXJbXTtcbiAgcG9zID0gMDtcbiAgY29uc3RydWN0b3IoZGF0YTogQnVmZmVyKSB7XG4gICAgdGhpcy5fYml0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmVhZFVlKCk6IG51bWJlciB7XG4gICAgbGV0IHplcm9zID0gMDtcbiAgICB3aGlsZSAodGhpcy5fYml0c1t0aGlzLnBvc10gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH1cbiAgICB0aGlzLnBvcysrO1xuICAgIGxldCB2YWwgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemVyb3M7IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuLy8gSEVWQyBOQUwgdW5pdCB0eXBlcyAoVC1SRUMtSC4yNjUgVGFibGUgNy0xKVxuZXhwb3J0IGNvbnN0IE5BTF9CTEFfV19MUCA9IDE2O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfV19SQURMID0gMTk7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9OX0xQID0gMjA7XG5leHBvcnQgY29uc3QgTkFMX1JTVl9JUkFQX1ZDTDIzID0gMjM7XG5leHBvcnQgY29uc3QgTkFMX1ZQUyA9IDMyO1xuZXhwb3J0IGNvbnN0IE5BTF9TUFMgPSAzMztcbmV4cG9ydCBjb25zdCBOQUxfUFBTID0gMzQ7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9QUkVGSVggPSAzOTtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1NVRkZJWCA9IDQwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gUGF0Y2ggTlZFTkMgb3V0cHV0IHRvIGNvbmZvcm0gdG8gQXBwbGUgSEVWQyBWaWRlbyB3aXRoIEFscGhhIEludGVyb3BlcmFiaWxpdHkgUHJvZmlsZS5cbi8vIFNwZWM6IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9hdi1mb3VuZGF0aW9uL0hFVkMtVmlkZW8td2l0aC1BbHBoYS1JbnRlcm9wZXJhYmlsaXR5LVByb2ZpbGUucGRmXG4vLyBTbGljZSBwYXJzZXIgaXMgY29uZmlnLWRyaXZlbjogTnZlbmNIZXZjQ29uZmlnIGZyb20gcGFyc2UudHMgZGVyaXZlcyBmbGFncyBhdCBlbmNvZGVyIGluaXQuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBOQUxfQkxBX1dfTFAsXG4gIE5BTF9SU1ZfSVJBUF9WQ0wyMyxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbixcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG4vLyBQVEwgYml0IG9mZnNldHMgd2l0aGluIGVtdWxhdGlvbi1wcmV2ZW50aW9uLXN0cmlwcGVkIE5BTCAoTkFMIGhlYWRlciBpbmNsdWRlZCkuXG5jb25zdCBWUFNfUFRMX0JJVCA9IDQ4OyAvLyAxNiAoTkFMIGhkcikgKyAzMiAoVlBTIHByZWZpeClcbmNvbnN0IFNQU19QVExfQklUID0gMjQ7IC8vIDE2IChOQUwgaGRyKSArIDggKFNQUyBwcmVmaXgpXG5jb25zdCBQVExfVElFUl9CSVQgPSAyO1xuY29uc3QgUFRMX0NPTVBBVDJfQklUID0gMTA7IC8vIHByb2ZpbGVfc3BhY2UoMikgKyB0aWVyKDEpICsgaWRjKDUpICsgY29tcGF0WzAsMV0oMilcbmNvbnN0IFNMSUNFX1RZUEVfQiA9IDA7XG5jb25zdCBTTElDRV9UWVBFX1AgPSAxO1xuXG5mdW5jdGlvbiBzZXRCaXQoYnVmOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCB2YWx1ZTogMCB8IDEpOiB2b2lkIHtcbiAgY29uc3QgYnl0ZSA9IGJpdE9mZnNldCA+PiAzO1xuICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIChiaXRPZmZzZXQgJiA3KSk7XG4gIGNvbnN0IGN1ciA9IGJ1ZltieXRlXSA/PyAwO1xuICBidWZbYnl0ZV0gPSB2YWx1ZSA/IGN1ciB8IG1hc2sgOiBjdXIgJiB+bWFzaztcbn1cblxuZnVuY3Rpb24gcGF0Y2hQdGwobmFsRGF0YTogQnVmZmVyLCBwdGxTdGFydEJpdDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsRGF0YSk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9USUVSX0JJVCwgMCk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9DT01QQVQyX0JJVCwgMSk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHJic3ApO1xufVxuXG4vKiogUGF0Y2ggZXZlcnkgVlBTL1NQUyBOQUwgaW4gYW4gQW5uZXggQiBiaXRzdHJlYW0gc28gUFRMIG1hdGNoZXMgQXBwbGUveDI2NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEhldmNBbHBoYVB0bChiaXRzdHJlYW06IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbSk7XG4gIGlmIChuYWxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGJpdHN0cmVhbTtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBuYWxzKSB7XG4gICAgbGV0IGRhdGEgPSBuYWwuZGF0YTtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgVlBTX1BUTF9CSVQpO1xuICAgIGVsc2UgaWYgKG5hbC50eXBlID09PSBOQUxfU1BTKSBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFNQU19QVExfQklUKTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8vIOKUgOKUgOKUgCB1ZSh2KSByZXdyaXRlIGhlbHBlcnMgKFNQUy9QUFMg4oCUIFJCU1AgY2FuIGdyb3cgZnJlZWx5LCBubyBDQUJBQyB0cmFpbGluZykg4pSA4pSAXG5cbmZ1bmN0aW9uIHJld3JpdGVPbmVVZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbCk7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSBidy5iaXRzLnB1c2goMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVR3b1VlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWwxOiBudW1iZXIsIG5ld1ZhbDI6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbDEpO1xuICBidy51ZShuZXdWYWwyKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG4vKiogQWxwaGEgU1BTOiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTcHMoc3BzOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBTUFNfU0VRX0lEX0JJVCA9IFNQU19QVExfQklUICsgOTY7IC8vIFBUTCBpcyA5NiBiaXRzIGZvciBvdXIgcHJvZmlsZSBjb25maWdcbiAgcmV0dXJuIHJld3JpdGVPbmVVZShzcHMsIFNQU19TRVFfSURfQklULCAxKTtcbn1cblxuLyoqIEFscGhhIFBQUzogcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEsIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVBwcyhwcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiByZXdyaXRlVHdvVWUocHBzLCAxNiAvKiBhZnRlciBOQUwgaGVhZGVyICovLCAxLCAxKTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWNlIGhlYWRlciByZXdyaXRlIChtdXN0IHByZXNlcnZlIENBQkFDIGJ5dGUgYWxpZ25tZW50KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcmVhZFNlKGJyOiBCaXRSZWFkZXIpOiBudW1iZXIge1xuICBjb25zdCB1ZSA9IGJyLnJlYWRVZSgpO1xuICByZXR1cm4gdWUgJiAxID8gKHVlICsgMSkgPj4gMSA6IC0odWUgPj4gMSk7XG59XG5cbi8vIElubGluZSBzdF9yZWZfcGljX3NldCB3aGVuIHNsaWNlIGhhcyBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X3Nwc19mbGFnPTAuXG4vLyBzdFJwc0lkeCA9IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyBzbyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uIG1heSB1c2UgcHJldiBzZXQuXG5mdW5jdGlvbiBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyOiBCaXRSZWFkZXIsIG51bURlbHRhUG9jc1NldDA6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBpbnRlckZsYWcgPSBici5yZWFkKDEpOyAvLyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWdcbiAgaWYgKGludGVyRmxhZykge1xuICAgIGNvbnN0IGRlbHRhSWR4TWludXMxID0gYnIucmVhZFVlKCk7IC8vIHN0UnBzSWR4ID09IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgcHJlc2VudFxuICAgIGlmIChkZWx0YUlkeE1pbnVzMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBhcHBsZV9hbHBoYTogdW5leHBlY3RlZCBkZWx0YV9pZHhfbWludXMxPSR7ZGVsdGFJZHhNaW51czF9YCk7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVsdGFfcnBzX3NpZ25cbiAgICBici5yZWFkVWUoKTsgLy8gYWJzX2RlbHRhX3Jwc19taW51czFcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBudW1EZWx0YVBvY3NTZXQwOyBqKyspIHtcbiAgICAgIGNvbnN0IHVzZWQgPSBici5yZWFkKDEpO1xuICAgICAgaWYgKCF1c2VkKSBici5yZWFkKDEpOyAvLyB1c2VfZGVsdGFfZmxhZ1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICB9XG59XG5cbi8qKiBQYXJzZSBzbGljZV9zZWdtZW50X2hlYWRlciB1cCB0byBieXRlX2FsaWdubWVudC4gUmV0dXJucyBiaXQgcG9zaXRpb24gQiAoZW5kIG9mIGhlYWRlciBjb250ZW50KS4gKi9cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQoYnI6IEJpdFJlYWRlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IG51bWJlciB7XG4gIGJyLnJlYWQoMTYpOyAvLyBza2lwIE5BTCBoZWFkZXJcbiAgaWYgKGJyLnJlYWQoMSkgIT09IDEpIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBleHBlY3RlZCBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnPTFcIik7XG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSBici5yZWFkKDEpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIGJyLnJlYWRVZSgpOyAvLyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBzbGljZVR5cGUgPSBici5yZWFkVWUoKTtcbiAgaWYgKCFpc0lyYXApIHtcbiAgICBici5yZWFkKGNmZy5sb2cyTWF4UG9jTHNiKTsgLy8gc2xpY2VfcGljX29yZGVyX2NudF9sc2JcbiAgICBjb25zdCBzdFJlZlBpY1NldFNwc0ZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmICghc3RSZWZQaWNTZXRTcHNGbGFnKSBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyLCBjZmcubnVtRGVsdGFQb2NzU2V0MCk7XG4gICAgZWxzZSBpZiAoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMgPiAxKSBici5yZWFkKE1hdGguY2VpbChNYXRoLmxvZzIoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMpKSk7XG4gICAgaWYgKGNmZy5sb25nVGVybVJlZlBpY3NQcmVzZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogbG9uZ190ZXJtX3JlZl9waWNzIHBhdGggdW5pbXBsZW1lbnRlZFwiKTtcbiAgICBpZiAoY2ZnLnNwc1RlbXBvcmFsTXZwRW5hYmxlZCkgYnIucmVhZCgxKTsgLy8gc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZ1xuICB9XG4gIGlmIChjZmcuc2FvRW5hYmxlZCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19sdW1hX2ZsYWdcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fY2hyb21hX2ZsYWdcbiAgfVxuICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX1AgfHwgc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICBjb25zdCBvdmVycmlkZUZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmIChvdmVycmlkZUZsYWcpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSBici5yZWFkVWUoKTtcbiAgICB9XG4gICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSBici5yZWFkKDEpOyAvLyBtdmRfbDFfemVyb19mbGFnXG4gICAgaWYgKGNmZy5jYWJhY0luaXRQcmVzZW50KSBici5yZWFkKDEpOyAvLyBjYWJhY19pbml0X2ZsYWdcbiAgICBici5yZWFkVWUoKTsgLy8gZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmRcbiAgfVxuICByZWFkU2UoYnIpOyAvLyBzbGljZV9xcF9kZWx0YVxuICBpZiAoY2ZnLnBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnKSBici5yZWFkKDEpOyAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZ1xuICByZXR1cm4gYnIucG9zO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYWxwaGEgc2xpY2UgaGVhZGVyOiBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLlxuICogVGhlICsyLWJpdCBzaGlmdCBpcyBhYnNvcmJlZCBieSBlbWl0dGluZyBhIGZyZXNoIGJ5dGVfYWxpZ25tZW50IHRoZW4gYXBwZW5kaW5nIHRoZVxuICogb3JpZ2luYWwgQ0FCQUMgc2xpY2Vfc2VnbWVudF9kYXRhIGJ5dGVzIHZlcmJhdGltLiBDQUJBQyBieXRlIGJvdW5kYXJ5IGlzIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKHNsaWNlOiBCdWZmZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzbGljZSk7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcblxuICBjb25zdCBwcm9iZSA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IEIgPSBwYXJzZUhlYWRlclRvQWxpZ25tZW50KHByb2JlLCBuYWxUeXBlLCBjZmcpO1xuICBjb25zdCBvbGRBbGlnbkJpdHMgPSBCICUgOCA9PT0gMCA/IDggOiA4IC0gKEIgJSA4KTtcbiAgY29uc3Qgc2xpY2VEYXRhQnl0ZU9mZnNldCA9IChCICsgb2xkQWxpZ25CaXRzKSAvIDg7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZ1xuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG5cbiAgYnIucmVhZFVlKCk7IC8vIGRpc2NhcmQgb2xkIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJ3LnVlKDEpOyAvLyBuZXcgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcblxuICB3aGlsZSAoYnIucG9zIDwgQikgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBjb3B5IHJlc3Qgb2YgaGVhZGVyIGJpdHNcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIGJ5dGVfYWxpZ25tZW50OiByYnNwX2FsaWdubWVudF9iaXRfb25lXG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcblxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihCdWZmZXIuY29uY2F0KFtwYWNrQml0cyhidy5iaXRzKSwgcmJzcC5zdWJhcnJheShzbGljZURhdGFCeXRlT2Zmc2V0KV0pKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgYWRkRW11bGF0aW9uUHJldmVudGlvbiwgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiB9IGZyb20gXCIuL25hbFwiO1xuXG5pbnRlcmZhY2UgUGFyc2VkUFRMIHtcbiAgcHRsU3RhcnQ6IG51bWJlcjtcbiAgcHRsRW5kOiBudW1iZXI7XG4gIHB0bEJpdHM6IG51bWJlcltdO1xuICBtYXhTdWJMYXllcnNNaW51czE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBUTCh2cHNEYXRhOiBCdWZmZXIpOiBQYXJzZWRQVEwgfCB1bmRlZmluZWQge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbih2cHNEYXRhKSk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHZwc19pZFxuICBici5yZWFkKDIpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsICsgYXZhaWxhYmxlXG4gIGlmIChici5yZWFkKDYpID4gMCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICBjb25zdCBtYXhTdWJMYXllcnNNaW51czEgPSBici5yZWFkKDMpO1xuICBici5yZWFkKDEgKyAxNik7IC8vIHRlbXBvcmFsX25lc3RpbmcgKyByZXNlcnZlZFxuXG4gIGNvbnN0IHB0bFN0YXJ0ID0gYnIucG9zO1xuICBici5yZWFkKDk2KTsgLy8gZ2VuZXJhbCBQVEwgKHByb2ZpbGVfc3BhY2UgKyB0aWVyICsgaWRjICsgY29tcGF0ICsgY29uc3RyYWludHMgKyBsZXZlbClcbiAgaWYgKG1heFN1YkxheWVyc01pbnVzMSA+IDApIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICByZXR1cm4geyBwdGxTdGFydCwgcHRsRW5kOiBici5wb3MsIHB0bEJpdHM6IGJyLmJpdHMsIG1heFN1YkxheWVyc01pbnVzMSB9O1xufVxuXG4vKiogV3JpdGUgYmFzZSBWUFMgZmllbGRzIGZvciAyLWxheWVyIGFscGhhLiAqL1xuZnVuY3Rpb24gd3JpdGVCYXNlVlBTKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMKSB7XG4gIGJ3LncoMHg0MDAxLCAxNik7IC8vIE5BTCBoZWFkZXJcbiAgYncudygwLCA0KTsgLy8gdnBzX2lkXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWxcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9hdmFpbGFibGVcbiAgYncudygxLCA2KTsgLy8gbWF4X2xheWVyc19taW51czEgPSAxXG4gIGJ3LncocHRsLm1heFN1YkxheWVyc01pbnVzMSwgMyk7XG4gIC8vIHRlbXBvcmFsX25lc3Rpbmc6IHRydWUgd2hlbiBzaW5nbGUgc3ViLWxheWVyIChhbGwgcmVmcyBsYXllciAwKVxuICBidy5mbGFnKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPT09IDApO1xuICBidy53KDB4ZmZmZiwgMTYpOyAvLyByZXNlcnZlZFxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LmZsYWcoMSk7IC8vIHN1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgYncudWUoNCk7IC8vIG1heERlY1BpY0J1ZmZlcmluZyAtIDFcbiAgICBidy51ZSgyKTsgLy8gbnVtUmVvcmRlclBpY3NcbiAgICBidy51ZSg0KTsgLy8gbWF4TGF0ZW5jeUluY3JlYXNlICsgMVxuICB9XG5cbiAgYncudygxLCA2KTsgLy8gbWF4X251aF9sYXllcl9pZCA9IDFcbiAgYncudWUoMSk7IC8vIG51bV9sYXllcl9zZXRzX21pbnVzMSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMF1cbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMV1cbiAgYncuZmxhZygwKTsgLy8gdGltaW5nX2luZm9fcHJlc2VudFxuICBidy5mbGFnKDEpOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWdcbiAgYncuYWxpZ24oMSk7IC8vIGV4dGVuc2lvbiBhbGlnbm1lbnQgYml0cyA9IDFcbn1cblxuLyoqIFdyaXRlIFZQUyBleHRlbnNpb24gbWF0Y2hpbmcgeDI2NSA0LjEgRU5BQkxFX0FMUEhBLiAqL1xuZnVuY3Rpb24gd3JpdGVWUFNFeHRlbnNpb24oYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIC8vIEV4dGVuc2lvbiBQVEw6IGxldmVsX2lkYyBvbmx5IChwcm9maWxlUHJlc2VudEZsYWc9MClcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bEVuZCAtIDgsIDgpO1xuICBpZiAocHRsLm1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykgYncudygwLCAyKTtcbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykgYncudygwLCAyKTtcbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYncuZmxhZyhpID09PSAyIHx8IGkgPT09IDMpOyAvLyBzY2FsYWJpbGl0eTogc3BhdGlhbCArIGF1eFxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSByZXR1cm4gdnBzRGF0YTtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgcmV3cml0ZUFscGhhUHBzLCByZXdyaXRlQWxwaGFTbGljZUhlYWRlciwgcmV3cml0ZUFscGhhU3BzIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9TRUlfUFJFRklYLFxuICBOQUxfU1BTLFxuICBOQUxfUFBTLFxuICBOQUxfVlBTLFxuICB0eXBlIE5hbFVuaXQsXG4gIHJld3JpdGVOYWxMYXllcklkLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbi8vIEJHUkEgYWxwaGEg4oaSIFkgcGxhbmUgb2YgcGFja2VkIFlVVjQyMFAuIENhbGxlciBwcmUtZmlsbHMgVVY9MTI4LlxuLy8gVWludDMyIHBhdGg6IEJHUkEgTEUgdTMyID4+PiAyNCA9IEEgYnl0ZS5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lOiBGcmFtZSwgYnVmOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgaWYgKCFzcmMgfHwgIXNyY0xzKSB0aHJvdyBuZXcgRXJyb3IoXCJleHRyYWN0QWxwaGE6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgaWYgKHNyYy5ieXRlT2Zmc2V0ICUgNCA9PT0gMCAmJiBzcmNMcyA9PT0gdyAqIDQpIHtcbiAgICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgeVNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNpemU7IGkrKykgYnVmW2ldID0gc3JjMzJbaV0hID4+PiAyNDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgY29uc3Qgcm93QmFzZSA9IHkgKiBzcmNMcyArIDM7XG4gICAgICBjb25zdCBkc3RCYXNlID0geSAqIHc7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykgYnVmW2RzdEJhc2UgKyB4XSA9IHNyY1tyb3dCYXNlICsgeCAqIDRdITtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIEFwcGxlIEhFVkMgQWxwaGEgUHJvZmlsZTogYWxwaGEgU1BTIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZD0xLCBhbHBoYSBQUFMgcGljK3NlcSBpZD0xLlxuZnVuY3Rpb24gcmV3cml0ZUFscGhhUGFyYW1TZXQodHlwZTogbnVtYmVyLCBkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAodHlwZSA9PT0gTkFMX1NQUykgcmV0dXJuIHJld3JpdGVBbHBoYVNwcyhkYXRhKTtcbiAgaWYgKHR5cGUgPT09IE5BTF9QUFMpIHJldHVybiByZXdyaXRlQWxwaGFQcHMoZGF0YSk7XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykgY29udGludWU7XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gTkFMX1ZQUyA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjb25zdCBhRGF0YSA9IHJld3JpdGVBbHBoYVBhcmFtU2V0KG5hbC50eXBlLCBhbHBoYU5hbC5kYXRhKTtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhRGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfU0VJX1BSRUZJWCwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9O1xuXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jYW5jZWxfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfdXNlX2lkYyAoMCA9IHVuc3BlY2lmaWVkL3ByZW11bHRpcGxpZWQ7IG1hdGNoZXMgeDI2NSBFTkFCTEVfQUxQSEEpXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB3cml0ZUJpdHMoMCwgMSk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCBOQUxfVlBTKSB7XG4gICAgICBjb25zdCBkYXRhID0gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIobmFsLmRhdGEsIG5hbC50eXBlLCBjZmcpO1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChkYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEx1IEFvIChsdWFvQGJpbGliaWxpLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GLCB0eXBlIEFWUGFja2V0RmxhZyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHsgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgUGVuZGluZ1BhY2tldCB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgcHRzOiBiaWdpbnQ7XG4gIGR0czogYmlnaW50O1xuICBkdXJhdGlvbjogYmlnaW50O1xuICBmbGFnczogQVZQYWNrZXRGbGFnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1YWxMYXllck11eE9wdGlvbnMge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuLy8gRHJhaW5zIHRoZSBiYXNlICsgYWxwaGEgTlZFTkMgc2Vzc2lvbnMgYW5kIHdyaXRlcyBpbnRlcmxlYXZlZCBIRVZDLWFscGhhIGFjY2VzcyB1bml0cy5cbmV4cG9ydCBjbGFzcyBEdWFsTGF5ZXJNdXgge1xuICBwcml2YXRlIF9zOiBEdWFsTGF5ZXJNdXhPcHRpb25zO1xuICBwcml2YXRlIF9iYXNlUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICBwcml2YXRlIF9hbHBoYVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzOiBEdWFsTGF5ZXJNdXhPcHRpb25zKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCB9ID0gdGhpcy5fcztcbiAgICAvLyBEcmFpbiBlYWNoIHNlc3Npb24gZnVsbHkg4oCUIGluZGVwZW5kZW50IE5WRU5DIHNlc3Npb25zIHJ1biBhIGZyYW1lIGFwYXJ0IHRyYW5zaWVudGx5LlxuICAgIHRoaXMuX2Jhc2VRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYmFzZUN0eCwgYmFzZVBrdCwgXCJiYXNlXCIpKSk7XG4gICAgdGhpcy5fYWxwaGFRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYWxwaGFDdHgsIGFscGhhUGt0LCBcImFscGhhXCIpKSk7XG4gICAgLy8gYmY9MCDihpIgbm8gcmVvcmRlcjsgcXVldWUgaW5kZXggTiBpcyB0aGUgc2FtZSBmcmFtZSBmb3IgYm90aC4gTGVmdG92ZXIgd2FpdHMgZm9yIG5leHQgZHJhaW4uXG4gICAgd2hpbGUgKHRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGVQYWlyKHRoaXMuX2Jhc2VRdWV1ZS5zaGlmdCgpISwgdGhpcy5fYWxwaGFRdWV1ZS5zaGlmdCgpISwgbXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVucGFpcmVkIGxlZnRvdmVycyBhZnRlciBFT0YgPSB0cnVlIGJhc2UvYWxwaGEgZGVzeW5jOyByZXR1cm5zIGEgZGVzY3JpcHRpb24sIGVsc2UgdW5kZWZpbmVkLlxuICBkZXN5bmNBZnRlckVvZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiAhdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGBiYXNlPSR7dGhpcy5fYmFzZVF1ZXVlLmxlbmd0aH0sIGFscGhhPSR7dGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGh9IHVucGFpcmVkYDtcbiAgfVxuXG4gIC8vIEVBR0FJTi9FT0YgPSBub3JtYWwgc3RvcDsgYW55IG90aGVyIG5lZ2F0aXZlIGlzIGEgcmVhbCBmYXVsdCwgbm90IFwiZHJhaW5lZFwiLlxuICBwcml2YXRlIGFzeW5jIHJlY2VpdmVBbGwoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ1BhY2tldFtdPiB7XG4gICAgY29uc3Qgb3V0OiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgIGlmIChyZXQgPj0gMCkge1xuICAgICAgICBvdXQucHVzaCh0aGlzLnNuYXBzaG90KHBrdCkpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmV0ID09PSBBVkVSUk9SX0VBR0FJTiB8fCByZXQgPT09IEFWRVJST1JfRU9GKSByZXR1cm4gb3V0O1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5yZWNlaXZlUGFja2V0YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbmFwc2hvdChwa3Q6IFBhY2tldCk6IFBlbmRpbmdQYWNrZXQge1xuICAgIC8vIHBrdC5kYXRhIGlzIG5hdGl2ZSBtZW1vcnkgZnJlZWQgb24gdW5yZWYg4oCUIGNvcHkgYmVmb3JlIHF1ZXVlaW5nLlxuICAgIHJldHVybiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHBrdC5kYXRhISksIHB0czogcGt0LnB0cywgZHRzOiBwa3QuZHRzLCBkdXJhdGlvbjogcGt0LmR1cmF0aW9uLCBmbGFnczogcGt0LmZsYWdzIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlUGFpcihiYXNlOiBQZW5kaW5nUGFja2V0LCBhbHBoYTogUGVuZGluZ1BhY2tldCwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBiYXNlQ3R4LCBzdHJlYW0sIGhldmNDZmcgfSA9IHRoaXMuX3M7XG4gICAgLy8gUGF0Y2ggaW4tYmFuZCBWUFMvU1BTIFBUTCBiaXRzIGZvciBBcHBsZS1WVEIgY29tcGF0IChlbmNvZGVyIHJlcGVhdHMgaGVhZGVycyBwZXIgSURSKS5cbiAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmVBY2Nlc3NVbml0cyhzcGxpdE5hbFVuaXRzKGJhc2UuZGF0YSksIHNwbGl0TmFsVW5pdHMoYWxwaGEuZGF0YSksIGhldmNDZmcpO1xuICAgIC8vIGRhdGEgc2V0dGVyIHdpcGVzIHB0cy9kdHMvZHVyYXRpb24vZmxhZ3Mg4oCUIHJlc3RvcmU7IGZsYWdzJyBLRVkgYml0IGRyaXZlcyBtb3Ygc3Rzcy5cbiAgICBiYXNlUGt0LmRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bChpbnRlcmxlYXZlZCk7XG4gICAgYmFzZVBrdC5wdHMgPSBiYXNlLnB0cztcbiAgICBiYXNlUGt0LmR0cyA9IGJhc2UuZHRzO1xuICAgIGJhc2VQa3QuZHVyYXRpb24gPSBiYXNlLmR1cmF0aW9uID09PSAwbiA/IDFuIDogYmFzZS5kdXJhdGlvbjtcbiAgICBiYXNlUGt0LmZsYWdzID0gYmFzZS5mbGFncztcbiAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG4gICAgYmFzZVBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBQYXJzZSBOVkVOQyBTUFMvUFBTIGV4dHJhZGF0YSBhdCBlbmNvZGVyIGluaXQgdG8gZGVyaXZlIGZsYWdzIHRoZSBzbGljZSBoZWFkZXIgcGFyc2VyIGRlcGVuZHMgb24uXG4vLyBEZWZ1c2VzIGZyYWdpbGUgaGFyZGNvZGVkIGFzc3VtcHRpb25zOiBpZiBOVkVOQyBkZWZhdWx0cyBzaGlmdCwgdGhyb3dzIHdpdGggYWN0aW9uYWJsZSBlcnJvci5cblxuaW1wb3J0IHsgQml0UmVhZGVyIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBOQUxfUFBTLCBOQUxfU1BTLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnZlbmNIZXZjQ29uZmlnIHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuO1xuICBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZmFpbChmaWVsZDogc3RyaW5nLCBnb3Q6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgaGV2Y19hbHBoYTogTlZFTkMgU1BTL1BQUyB1bnN1cHBvcnRlZDogJHtmaWVsZH09JHtnb3R9LCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xufVxuXG5mdW5jdGlvbiBza2lwUHRsKGJyOiBCaXRSZWFkZXIsIG1heFN1YkxheWVyczogbnVtYmVyKTogdm9pZCB7XG4gIGJyLnJlYWQoMiArIDEgKyA1KTsgLy8gcHJvZmlsZV9zcGFjZSwgdGllciwgcHJvZmlsZV9pZGNcbiAgYnIucmVhZCgzMik7IC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnWzAuLjMxXVxuICBici5yZWFkKDQ4KTsgLy8gNCBzb3VyY2UvcGFja2VkIGZsYWdzICsgNDMgY29uc3RyYWludC9yZXNlcnZlZCArIDEgaW5ibGRcbiAgYnIucmVhZCg4KTsgLy8gbGV2ZWxfaWRjXG4gIGNvbnN0IHN1YlByb2ZpbGVQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBzdWJMZXZlbFByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBzdWJQcm9maWxlUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICAgIHN1YkxldmVsUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGlmIChtYXhTdWJMYXllcnMgPiAwKSBmb3IgKGxldCBpID0gbWF4U3ViTGF5ZXJzOyBpIDwgODsgaSsrKSBici5yZWFkKDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgaWYgKHN1YlByb2ZpbGVQcmVzZW50W2ldKSBici5yZWFkKDggKyAzMiArIDQ4KTtcbiAgICBpZiAoc3ViTGV2ZWxQcmVzZW50W2ldKSBici5yZWFkKDgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3BzKHNwc1Jic3A6IEJ1ZmZlcik6IHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xufSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihzcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgbWF4U3ViTGF5ZXJzID0gYnIucmVhZCgzKTtcbiAgLy8gYWxwaGFfZGFyd2luLnJld3JpdGVBbHBoYVNwcyArIHZwcy5leHRyYWN0UFRMIGhhcmRjb2RlIDk2LWJpdCBQVEwg4oCUIG9ubHkgdmFsaWQgd2hlbiBzdWJfbGF5ZXJzPTAuXG4gIGlmIChtYXhTdWJMYXllcnMgIT09IDApIGZhaWwoXCJzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxXCIsIG1heFN1YkxheWVycywgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBzcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnXG4gIHNraXBQdGwoYnIsIG1heFN1YkxheWVycyk7XG4gIGJyLnJlYWRVZSgpOyAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgY2hyb21hRm9ybWF0ID0gYnIucmVhZFVlKCk7XG4gIGlmIChjaHJvbWFGb3JtYXQgPT09IDMpIGZhaWwoXCJjaHJvbWFfZm9ybWF0X2lkY1wiLCBjaHJvbWFGb3JtYXQsIFwi4omgM1wiKTtcbiAgYnIucmVhZFVlKCk7IC8vIHBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXNcbiAgYnIucmVhZFVlKCk7IC8vIHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgY29uc3QgbG9nMk1heFBvY0xzYiA9IGJyLnJlYWRVZSgpICsgNDtcbiAgY29uc3Qgc3ViT3JkZXJJbmZvID0gYnIucmVhZCgxKTtcbiAgY29uc3Qgb3JkZXJDb3VudCA9IHN1Yk9yZGVySW5mbyA/IG1heFN1YkxheWVycyArIDEgOiAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyQ291bnQ7IGkrKykge1xuICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgaWYgKGJyLnJlYWQoMSkpIGZhaWwoXCJzY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gYW1wX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBzYW9FbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGJyLnJlYWQoMSkpIGZhaWwoXCJwY21fZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgY29uc3QgbnVtU3RScHMgPSBici5yZWFkVWUoKTtcbiAgaWYgKG51bVN0UnBzID4gMSkgZmFpbChcIm51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0c1wiLCBudW1TdFJwcywgXCLiiaQxXCIpO1xuICBsZXQgbnVtRGVsdGFQb2NzU2V0MCA9IDA7XG4gIGlmIChudW1TdFJwcyA9PT0gMSkge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIG51bURlbHRhUG9jc1NldDAgPSBudW1OZWcgKyBudW1Qb3M7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgfVxuICBjb25zdCBsb25nVGVybVJlZlBpY3NQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIGZhaWwoXCJsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgY29uc3Qgc3BzVGVtcG9yYWxNdnBFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgcmV0dXJuIHsgbG9nMk1heFBvY0xzYiwgc2FvRW5hYmxlZCwgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtU3RScHMsIG51bURlbHRhUG9jc1NldDAsIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQsIHNwc1RlbXBvcmFsTXZwRW5hYmxlZCB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVBwcyhwcHNSYnNwOiBCdWZmZXIpOiB7IGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuIH0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocHBzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkKDEpOyAvLyBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIG91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZ1xuICBjb25zdCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cyA9IGJyLnJlYWQoMyk7XG4gIGlmIChudW1FeHRyYVNsaWNlSGVhZGVyQml0cyAhPT0gMCkgZmFpbChcIm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0c1wiLCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cywgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBzaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBjYWJhY0luaXRQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBpbml0X3FwX21pbnVzMjYgKHNlLCBidXQgdWUgcGFyc2VyIGZpbmUgdG8gYWR2YW5jZSlcbiAgYnIucmVhZCgxKTsgLy8gY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkgYnIucmVhZFVlKCk7IC8vIGN1X3FwX2RlbHRhX2VuYWJsZWQg4oaSIGRpZmZfY3VfcXBfZGVsdGFfZGVwdGhcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jYl9xcF9vZmZzZXRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jcl9xcF9vZmZzZXRcbiAgYnIucmVhZCgxKTsgLy8gcHBzX3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfYmlwcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwidGlsZXNfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWdcbiAgY29uc3QgcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBjb25zdCBkZWJsb2NraW5nQ29udHJvbFByZXNlbnQgPSBici5yZWFkKDEpO1xuICBsZXQgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGZhbHNlO1xuICBpZiAoZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50KSB7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnXG4gICAgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGJyLnJlYWQoMSkgPT09IDE7IC8vIHBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnXG4gICAgaWYgKCFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlKSB7XG4gICAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IC8vIGJldGEvdGMgb2Zmc2V0cyAoc2UgdmlhIHVlIGFkdmFuY2UpXG4gICAgfVxuICB9XG4gIC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIGluIHNsaWNlIGhlYWRlciBpcyBwcmVzZW50IGlmZlxuICAvLyBwcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgJiYgIXNsaWNlX2RlYmxvY2tpbmdfZGlzYWJsZWQuXG4gIGNvbnN0IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnID0gcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgJiYgIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGU7XG4gIHJldHVybiB7IGNhYmFjSW5pdFByZXNlbnQsIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhleHRyYWRhdGE6IEJ1ZmZlcik6IE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGV4dHJhZGF0YSk7XG4gIGNvbnN0IHNwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfU1BTKTtcbiAgY29uc3QgcHBzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9QUFMpO1xuICBpZiAoIXNwcykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogU1BTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICBpZiAoIXBwcykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogUFBTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICBjb25zdCBzID0gcGFyc2VTcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzcHMuZGF0YSkpO1xuICBjb25zdCBwID0gcGFyc2VQcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihwcHMuZGF0YSkpO1xuICByZXR1cm4geyAuLi5zLCAuLi5wIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuLi92aWRlb3Rvb2xib3hcIjtcbmltcG9ydCB7IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSwgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBEdWFsTGF5ZXJNdXggfSBmcm9tIFwiLi9kdWFsX2xheWVyX211eFwiO1xuaW1wb3J0IHsgdHlwZSBOdmVuY0hldmNDb25maWcsIHBhcnNlTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBhbHBoYVN3RnJhbWU6IEZyYW1lO1xuICBhbHBoYUJ1ZjogQnVmZmVyO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBOdmVuY0R1YWxMYXllckVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogTnZlbmNTdGF0ZTtcbiAgcHJpdmF0ZSBfbXV4OiBEdWFsTGF5ZXJNdXg7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogTnZlbmNTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICAgIHRoaXMuX211eCA9IG5ldyBEdWFsTGF5ZXJNdXgoe1xuICAgICAgYmFzZUN0eDogcy5iYXNlQ3R4LFxuICAgICAgYWxwaGFDdHg6IHMuYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0OiBzLmJhc2VQa3QsXG4gICAgICBhbHBoYVBrdDogcy5hbHBoYVBrdCxcbiAgICAgIHN0cmVhbTogcy5zdHJlYW0sXG4gICAgICBoZXZjQ2ZnOiBzLmhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICAvLyB0aWVyPW1haW4gbWF0Y2hlcyBBcHBsZSBWaWRlb1Rvb2xib3g7IG1hY09TIENocm9tZSByZXF1aXJlcyBNYWluIHRpZXIgZm9yIEhFVkMgYWxwaGEgZGVjb2RlLlxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiwgdGllcjogXCJtYWluXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IOKAlCBOVkVOQyBjb252ZXJ0cyBpbnRlcm5hbGx5LCBubyBDUFUgU1dTLCBubyBod0ZyYW1lc0N0eCBuZWVkZWQuXG4gICAgY29uc3QgYmFzZUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIik7XG5cbiAgICBsZXQgYWxwaGFDdHg6IENvZGVjQ29udGV4dCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYmFzZVBrdDogUGFja2V0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBhbHBoYVBrdDogUGFja2V0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBhbHBoYVN3RnJhbWU6IEZyYW1lIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBhbHBoYUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9LCBcIm52ZW5jLmFscGhhLm9wZW4yXCIpO1xuXG4gICAgICBpZiAoIWJhc2VDdHguZXh0cmFEYXRhIHx8ICFhbHBoYUN0eC5leHRyYURhdGEpIHRocm93IG5ldyBFcnJvcihcIm52ZW5jOiBjb2RlYyBleHRyYWRhdGEgbWlzc2luZ1wiKTtcbiAgICAgIGNvbnN0IGhldmNDZmcgPSBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhiYXNlQ3R4LmV4dHJhRGF0YSk7XG5cbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgICBjb25zdCB1bmlmaWVkID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUN0eC5leHRyYURhdGEsXG4gICAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICB9KTtcbiAgICAgIC8vIEFwcGxlLVZUQiBjb21wYXQ6IHJld3JpdGUgVlBTK1NQUyBQVEwgYml0cyB0byBtYXRjaCB4MjY1L1ZUQiBvdXRwdXQgKHRpZXI9TWFpbiwgY29tcGF0WzJdPTEpLlxuICAgICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKHVuaWZpZWQpO1xuXG4gICAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgICAgLy8gWVVWNDIwUCBjaHJvbWEgcGxhbmVzIGFyZSBjZWlsKHcvMinDl2NlaWwoaC8yKTsgZmxvb3IgdW5kZXJmbG93cyBvbiBvZGQgZGltZW5zaW9ucy5cbiAgICAgIGNvbnN0IGNocm9tYVNpemUgPSAoKHdpZHRoICsgMSkgPj4gMSkgKiAoKGhlaWdodCArIDEpID4+IDEpO1xuICAgICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyBjaHJvbWFTaXplICogMik7XG4gICAgICBhbHBoYUJ1Zi5maWxsKDEyOCwgeVNpemUpO1xuXG4gICAgICBiYXNlUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgYWxwaGFQa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICBhbHBoYVN3RnJhbWUgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKTtcblxuICAgICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgICBiYXNlQ3R4LFxuICAgICAgICBhbHBoYUN0eCxcbiAgICAgICAgYmFzZVBrdCxcbiAgICAgICAgYWxwaGFQa3QsXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgYWxwaGFTd0ZyYW1lLFxuICAgICAgICBhbHBoYUJ1ZixcbiAgICAgICAgaGV2Y0NmZyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFBhcnRpYWwgY29uc3RydWN0aW9uOiBlbmNvZGVyIG5ldmVyIHJldHVybmVkLCBzbyBbU3ltYm9sLmRpc3Bvc2VdIGlzIHVucmVhY2hhYmxlLlxuICAgICAgYmFzZVBrdD8uZnJlZSgpO1xuICAgICAgYWxwaGFQa3Q/LmZyZWUoKTtcbiAgICAgIGFscGhhU3dGcmFtZT8uZnJlZSgpO1xuICAgICAgYWxwaGFDdHg/LmZyZWVDb250ZXh0KCk7XG4gICAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUsIGFscGhhQnVmIH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuX3B0cysrO1xuXG4gICAgLy8gRXh0cmFjdCB0aGUgYWxwaGEgcGxhbmUgYmVmb3JlIGJhc2Uuc2VuZEZyYW1lIOKAlCB0aGUgZW5jb2RlciB1bnJlZnMgdGhlIGlucHV0IGZyYW1lLlxuICAgIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWUsIGFscGhhQnVmKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLm1ha2VXcml0YWJsZSgpLCBcImFscGhhU3cubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUuZnJvbUJ1ZmZlcihhbHBoYUJ1ZiksIFwiYWxwaGFTdy5mcm9tQnVmZmVyXCIpO1xuICAgIGFscGhhU3dGcmFtZS5wdHMgPSBwdHM7XG4gICAgYWxwaGFTd0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYmFzZUN0eCwgXCJiYXNlXCIpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmFscGhhQ3R4LCBcImFscGhhXCIpO1xuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gICAgY29uc3QgZGVzeW5jID0gdGhpcy5fbXV4LmRlc3luY0FmdGVyRW9mKCk7XG4gICAgaWYgKGRlc3luYykgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6ICR7ZGVzeW5jfWApO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCB3aGVuIE5WRU5DIHNlc3Npb25zIGZyZWVkIGluIGNyZWF0aW9uIG9yZGVyLlxuICAgIC8vIExJRk8gZGVzdHJveSBhdm9pZHMgdGhlIHNlZ2ZhdWx0LiBQZXIgTlZJRElBIGZvcnVtIC90LzI2OTk3NC5cbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIC8vIEVPRiBmbHVzaDsgRUFHQUlOL0VPRiByZXR1cm5zIGFyZSBiZW5pZ24gKGFscmVhZHktZHJhaW5pbmcgZW5jb2RlcikuXG4gIHByaXZhdGUgYXN5bmMgc2VuZEVvZihjdHg6IENvZGVjQ29udGV4dCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXQgPSBhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGlmIChyZXQgPCAwICYmIHJldCAhPT0gQVZFUlJPUl9FQUdBSU4gJiYgcmV0ICE9PSBBVkVSUk9SX0VPRikge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5zZW5kRnJhbWUobnVsbClgKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGxldCBwa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgICAgcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFBhcnRpYWwgY29uc3RydWN0aW9uOiBlbmNvZGVyIG5ldmVyIHJldHVybmVkLCBzbyBbU3ltYm9sLmRpc3Bvc2VdIGlzIHVucmVhY2hhYmxlLlxuICAgICAgcGt0Py5mcmVlKCk7XG4gICAgICBjdHguZnJlZUNvbnRleHQoKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUh3VmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciwgdHlwZSBWaWRlb1NldHVwIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuLy8gbm9kZS1hdiA1LjIuMyBjb25zdGFudCBpcyB3cm9uZzsgZmZtcGVnIHJlZ2lzdGVycyB3aXRoIGRhc2guXG5jb25zdCBGRl9FTkNPREVSX0xJQlZQWF9WUDkgPSBcImxpYnZweC12cDlcIiBhcyBGRlZpZGVvRW5jb2RlcjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkgcmV0dXJuIFwid2VibVwiO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSByZXR1cm4gXCJtcDRcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG91dHB1dCBleHRlbnNpb246ICR7cGF0aH1gKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogU2lua09wdGlvbnMpOiBQcm9taXNlPE91dHB1dFNpbms+IHtcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvcHRzLm91dEZpbGUpO1xuICAgIGNvbnN0IHZpZGVvID0gb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgdGhpcy5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCB0aGlzLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgY29uc3QgYXVkaW8gPSBvcHRzLndpdGhBdWRpbyA/IGF3YWl0IHRoaXMuYXVkaW9Gb3Iob3B0cywgbXV4ZXIpIDogdW5kZWZpbmVkO1xuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICByZXR1cm4gbmV3IE91dHB1dFNpbmsoeyBtdXhlciwgLi4udmlkZW8sIGF1ZGlvLCBvcHRzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbXA0VmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSA9IG9wdHM7XG4gICAgcmV0dXJuIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSwgbXV4ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgd2VibVZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gb3B0cztcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmcHMsXG4gICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSxcbiAgICAgIGNvZGVjT3B0czogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiLCBcInJvdy1tdFwiOiBcIjFcIiwgdGhyZWFkczogXCIyXCIgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSwgb3duc0h3OiBmYWxzZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7IG91dFNhbXBsZVJhdGU6IDQ0XzEwMCwgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMgfVxuICAgICAgICA6IHsgb3V0U2FtcGxlUmF0ZTogNDhfMDAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULCBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHsgLi4uY2ZnLCBnbG9iYWxIZWFkZXI6IHRydWUsIGJpdHJhdGU6IDEyOF8wMDAsIG11eGVyIH0pO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoYmdyYUZyYW1lOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShiZ3JhRnJhbWUsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgZWxzZSBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCB7IG11eGVyLCB2aWRlbywgaHdWaWRlbywgYXVkaW8sIGNvZGVjLCBodywgb3duc0h3IH0gPSB0aGlzLl9zO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgY29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCBtdXhlcltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBGRl9IV0RFVklDRV9UWVBFX0NVREEsIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB7IE91dHB1dFNpbmsgfSBmcm9tIFwiLi9zaW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQaXBlbGluZVN0YXRlIHtcbiAgc2lua3M6IE91dHB1dFNpbmtbXTtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGxpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcjtcbiAgcG5nQ29kZWM/OiBDb2RlY1N0YXRlO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIF9zOiBQaXBlbGluZVN0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogUGlwZWxpbmVTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zKTogUHJvbWlzZTxFbmNvZGVyUGlwZWxpbmU+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3V0RmlsZXMgPSBvdXRGaWxlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChwKSA9PiBwLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG5cbiAgICBjb25zdCBraW5kcyA9IG91dEZpbGVzLm1hcCgocCkgPT4gT3V0cHV0U2luay5raW5kRnJvbVBhdGgocCkpO1xuICAgIGNvbnN0IG5lZWRzTXA0SHcgPSAhZGlzYWJsZUh3Q29kZWMgJiYga2luZHMuaW5jbHVkZXMoXCJtcDRcIik7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc0h3QWxwaGFDYXBhYmxlID1cbiAgICAgIHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfHwgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREE7XG5cbiAgICBjb25zdCBzaW5rczogT3V0cHV0U2lua1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IE91dHB1dFNpbmsuY3JlYXRlKHtcbiAgICAgICAgb3V0RmlsZTogb3V0RmlsZXNbaV0hLFxuICAgICAgICBraW5kOiBraW5kc1tpXSEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgd2l0aEF1ZGlvLFxuICAgICAgICBkaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgc2hhcmVkSHc6IGtpbmRzW2ldID09PSBcIm1wNFwiICYmIGlzSHdBbHBoYUNhcGFibGUgPyBzaGFyZWRIdyA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgc2lua3MucHVzaChzaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZW5jb2RlQXVkaW8ocGNtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5kcmFpbigpO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5kcmFpbigpO1xuICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmcmVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mub3B0cy53aWR0aCwgdGhpcy5fcy5vcHRzLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iXX0=
|
|
1
|
+
import'source-map-support/register.js';export{l as DEFAULT_DURATION,k as DEFAULT_FPS,j as DEFAULT_HEIGHT,i as DEFAULT_WIDTH,e as Logger,a as ProgressBar,b as barLogger,f as logger,g as noerr,d as parseNumber,c as penv,o as pup}from'./chunk-YJ7QEMFY.js';import {setTimeout as setTimeout$1}from'timers/promises';var a=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};function l(r){return new Promise(e=>setTimeout(e,r))}function P(r,e){let t,o=false;async function i(n){await r(n),!o&&(t=setTimeout(()=>i(n+1),e));}return t=setTimeout(()=>i(0),e),()=>{o=true,clearTimeout(t);}}function _({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let i=new Error(`timeout over ${t}ms`);return async function(...n){let u=0;for(;;){o?.throwIfAborted();try{let s=[r(...n)];return t&&s.push(setTimeout$1(t).then(()=>{throw i})),await Promise.race(s)}catch(s){if(o?.throwIfAborted(),u++,u>=e)throw s;await l(Math.pow(2,u)*100+Math.random()*100);}}}}export{a as Lazy,P as periodical,l as sleep,_ as useRetry};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9yZXRyeS50cyJdLCJuYW1lcyI6WyJMYXp5IiwibWFrZVZhbHVlIiwic2xlZXAiLCJtcyIsInJlc29sdmUiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsInVzZVJldHJ5IiwiZm4iLCJtYXhBdHRlbXB0cyIsInRpbWVvdXQiLCJzaWduYWwiLCJ0aW1lb3V0RXJyb3IiLCJhcmdzIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsImUiXSwibWFwcGluZ3MiOiJzVEFFTyxJQUFNQSxDQUFBQSxDQUFOLEtBQWMsQ0FDbkIsV0FBQSxDQUFxQkMsRUFBb0IsQ0FBcEIsSUFBQSxDQUFBLFNBQUEsQ0FBQUEsRUFBcUIsQ0FBckIsU0FBQSxDQUVyQixJQUFJLEtBQUEsRUFBVyxDQUNiLE9BQUssSUFBQSxDQUFLLFlBQUEsR0FDUixLQUFLLE1BQUEsQ0FBUyxJQUFBLENBQUssV0FBVSxDQUM3QixJQUFBLENBQUssYUFBZSxJQUFBLENBQUEsQ0FFZixJQUFBLENBQUssTUFDZCxDQUVBLElBQUksYUFBdUIsQ0FDekIsT0FBTyxLQUFLLFlBQ2QsQ0FFUSxhQUFlLEtBQUEsQ0FDZixNQUNWLEVDakJPLFNBQVNDLENBQUFBLENBQU1DLENBQUFBLENBQVksQ0FDaEMsT0FBTyxJQUFJLE9BQUEsQ0FBZUMsQ0FBQUEsRUFBWSxXQUFXQSxDQUFBQSxDQUFTRCxDQUFFLENBQUMsQ0FDL0QsQ0FTTyxTQUFTRSxDQUFBQSxDQUFXQyxDQUFBQSxDQUFtREgsRUFBWSxDQUN4RixJQUFJSSxFQUNBQyxDQUFBQSxDQUFTLEtBQUEsQ0FDYixlQUFlQyxDQUFBQSxDQUFLQyxDQUFBQSxDQUFlLENBQ2pDLE1BQU1KLENBQUFBLENBQVNJLENBQUssRUFDaEIsQ0FBQUYsQ0FBQUEsR0FDSkQsRUFBUSxVQUFBLENBQVcsSUFBTUUsRUFBS0MsQ0FBQUEsQ0FBUSxDQUFDLEVBQUdQLENBQUUsQ0FBQSxFQUM5QyxDQUNBLE9BQUFJLENBQUFBLENBQVEsV0FBVyxJQUFNRSxDQUFBQSxDQUFLLENBQUMsQ0FBQSxDQUFHTixDQUFFLENBQUEsQ0FDN0IsSUFBTSxDQUNYSyxDQUFBQSxDQUFTLEtBQ1QsWUFBQSxDQUFhRCxDQUFLLEVBQ3BCLENBQ0YsQ0NaTyxTQUFTSSxDQUFBQSxDQUFrQyxDQUFFLEdBQUFDLENBQUFBLENBQUksV0FBQSxDQUFBQyxFQUFjLENBQUEsQ0FBRyxPQUFBLENBQUFDLEVBQVMsTUFBQSxDQUFBQyxDQUFPLEVBQTRCLENBQ25ILElBQU1DLEVBQWUsSUFBSSxLQUFBLENBQU0sZ0JBQWdCRixDQUFPLENBQUEsRUFBQSxDQUFJLEVBQzFELE9BQU8sZUFBQSxHQUFtQkcsRUFBWSxDQUNwQyxJQUFJQyxFQUFVLENBQUEsQ0FDZCxPQUFhLENBQ1hILENBQUFBLEVBQVEsY0FBQSxHQUNSLEdBQUksQ0FDRixJQUFNSSxDQUFBQSxDQUFXLENBQUNQLENBQUFBLENBQUcsR0FBR0ssQ0FBSSxDQUFDLEVBQzdCLE9BQUlILENBQUFBLEVBQ0ZLLEVBQVMsSUFBQSxDQUNQQyxZQUFBQSxDQUFXTixDQUFPLENBQUEsQ0FBRSxJQUFBLENBQUssSUFBTSxDQUM3QixNQUFNRSxDQUNSLENBQUMsQ0FDSCxFQUVLLE1BQU0sT0FBQSxDQUFRLEtBQUtHLENBQVEsQ0FDcEMsQ0FBQSxNQUFTRSxDQUFBQSxDQUFHLENBR1YsR0FGQU4sR0FBUSxjQUFBLEVBQWUsQ0FDdkJHLElBQ0lBLENBQUFBLEVBQVdMLENBQUFBLENBQ2IsTUFBTVEsQ0FBQUEsQ0FFUixNQUFNbkIsRUFBTSxJQUFBLENBQUssR0FBQSxDQUFJLEVBQUdnQixDQUFPLENBQUEsQ0FBSSxJQUFNLElBQUEsQ0FBSyxNQUFBLEdBQVcsR0FBRyxFQUM5RCxDQUNGLENBQ0YsQ0FDRiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBjbGFzcyBMYXp5PFQ+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWFrZVZhbHVlOiAoKSA9PiBUKSB7fVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubWFrZVZhbHVlKCk7XG4gICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl92YWx1ZSE7XG4gIH1cblxuICBnZXQgaW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQgfCB1bmRlZmluZWQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLy8gV2hlbiBwcm92aWRlZCwgdXNlUmV0cnkgYmFpbHMgb3V0IGltbWVkaWF0ZWx5IG9uIGFib3J0IGluc3RlYWQgb2YgcmV0cnlpbmcuIFRoZSBzaWduYWxcbiAgLy8gaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIG11c3Qgd2lyZSBpdCB3aGVyZSBpdCBtYXR0ZXJzIChlLmcuIGZldGNoLCBTMyBzZW5kKS5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0LCBzaWduYWwgfTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pup-recorder",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Record web pages as video",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"engines": {
|
|
27
27
|
"bun": ">= 1",
|
|
28
|
-
"node": ">=
|
|
28
|
+
"node": ">= 22"
|
|
29
29
|
},
|
|
30
30
|
"engineStrict": true,
|
|
31
31
|
"trustedDependencies": [
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@microsoft/api-extractor": "latest",
|
|
64
64
|
"@types/bun": "latest",
|
|
65
|
-
"@types/node": "^
|
|
65
|
+
"@types/node": "^22.0.0",
|
|
66
66
|
"@typescript/native-preview": "latest",
|
|
67
67
|
"tsup": "latest"
|
|
68
68
|
},
|