pup-recorder 0.3.7 → 0.3.8
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/dist/_tsup-dts-rollup.d.ts +91 -5
- package/dist/app.cjs +292 -9
- package/dist/index.js +2 -2
- package/package.json +11 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'source-map-support/register.js';import {a,b as b$1,k}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,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 ie=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 O=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,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(a=>{this._active--,o(a),this.next();}).catch(a=>{this._active--,i(a),this.next();});},reject:i,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 ae(r){return new Promise(e=>setTimeout(e,r))}function mr(r,e,t){return new Promise((o,i)=>{let a=setTimeout(()=>i(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,i).finally(()=>clearTimeout(a));})}function pr(r,e){let t,o=false;async function i(a){await r(a),!o&&(t=setTimeout(()=>i(a+1),e));}return t=setTimeout(()=>i(0),e),()=>{o=true,clearTimeout(t);}}function wr({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let i=new Error(`timeout over ${t}ms`);return async function(...a){let n=0;for(;;){o?.throwIfAborted();try{let c=[r(...a)];return t&&c.push(setTimeout$1(t).then(()=>{throw i})),await Promise.race(c)}catch(c){if(o?.throwIfAborted(),n++,n>=e)throw c;await ae(Math.pow(2,n)*100+Math.random()*100);}}}}var D=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(){this._opened||(FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};async function C(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,i]of Object.entries(r.options??{}))t.setOption(o,i);return FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function A(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 i=await r.receivePacket(e);if(i===AVERROR_EAGAIN||i===AVERROR_EOF)break;FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var b=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=A(e,t,AV_PIX_FMT_BGRA$1),this.dst=A(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(i){var a$1=i,n=true;}finally{b$1(o,a$1,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 Je={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},G=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 i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new FilterGraph;t.alloc();let o=Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let a=Filter.getByName("abuffersink"),n=t.createFilter(a,"sink");if(!n)throw new Error("Failed to create abuffersink");let s=`aformat=sample_fmts=${Je[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=FilterInOut.createList([{name:"in",filterCtx:i,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=i,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 i=o.length>>1;let a$1=a(n,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,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(i);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(a$1),"buffersrcAddFrame");await this.drain(t);}catch(c){var s=c,d=true;}finally{b$1(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 g(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var v=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 i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},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 E=Buffer.from([0,0,0,1]);var Z=16;var j=23,I=32,R=33,W=34,pe=39;function le(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function J(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function F(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 i=t+o;if(i+2>r.length)break;let a=r.length;for(let s=i+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)){a=s;break}let{type:n,layerId:c}=le(r[i],r[i+1]);e.push({type:n,layerId:c,data:r.subarray(i,a)}),t=a;}return e}function ee(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=le(t[0],t[1]),[a,n]=J(o,e,i);return t[0]=a,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 et=48,xe=24,tt=2,rt=10,te=0,ot=1;function he(r,e,t){let o=e>>3,i=1<<7-(e&7),a=r[o]??0;r[o]=t?a|i:a&~i;}function _e(r,e){let t=P(r);return he(t,e+tt,0),he(t,e+rt,1),B(t)}function re(r){let e=F(r);if(e.length===0)return r;let t=[];for(let o of e){let i=o.data;o.type===I?i=_e(o.data,et):o.type===R&&(i=_e(o.data,xe)),t.push(E,i);}return Buffer.concat(t)}function it(r,e,t){let o=P(r),i=new h(o),a=new v;for(let n=0;n<e;n++)a.bits.push(i.read(1));for(i.readUe(),a.ue(t);i.pos<i.bits.length;)a.bits.push(i.read(1));for(;a.bits.length%8!==0;)a.bits.push(0);return B(g(a.bits))}function at(r,e,t,o){let i=P(r),a=new h(i),n=new v;for(let c=0;c<e;c++)n.bits.push(a.read(1));for(a.readUe(),a.readUe(),n.ue(t),n.ue(o);a.pos<a.bits.length;)n.bits.push(a.read(1));for(;n.bits.length%8!==0;)n.bits.push(0);return B(g(n.bits))}function we(r){let e=xe+96;return it(r,e,1)}function Fe(r){return at(r,16,1,1)}function nt(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function st(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 i=0;i<=e;i++)r.read(1)||r.read(1);}else {let o=r.readUe(),i=r.readUe();for(let a=0;a<o;a++)r.readUe(),r.read(1);for(let a=0;a<i;a++)r.readUe(),r.read(1);}}function ct(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 i=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):st(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)),(i===ot||i===te)&&(r.read(1)&&(r.readUe(),i===te&&r.readUe()),i===te&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),nt(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Pe(r,e,t){let o=P(r),i=new h(o),a=new h(o),n=ct(a,e,t),c=n%8===0?8:8-n%8,s=(n+c)/8,d=new v;for(let f=0;f<16;f++)d.bits.push(i.read(1));for(d.bits.push(i.read(1)),e>=Z&&e<=j&&d.bits.push(i.read(1)),i.readUe(),d.ue(1);i.pos<n;)d.bits.push(i.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return B(Buffer.concat([g(d.bits),o.subarray(s)]))}function dt(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 ut(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 ft(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===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 be(r,e,t){let o=dt(r);if(!o)return r;let i=new v;return ut(i,o),ft(i,o,e,t),i.bits.push(1),i.align(0),B(g(i.bits))}function ve(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let i=r.width,a=r.height,n=i*a;if(t.byteOffset%4===0&&o===i*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<a;c++){let s=c*o+3,d=c*i;for(let u=0;u<i;u++)e[d+u]=t[s+u*4];}}function mt(r,e){return r===R?we(e):r===W?Fe(e):e}function ge(r){let{baseExtradata:e,alphaExtradata:t}=r,o=F(e),i=F(t),a=new Map;for(let s of i){if(s.type===I)continue;let d=a.get(s.type)??[];d.push(s),a.set(s.type,d);}let n=[],c=new Set;for(let s of o){let d=s.type===I?be(s.data,r.width,r.height):s.data;if(n.push(E,d),!c.has(s.type)){c.add(s.type);for(let u of a.get(s.type)??[]){let f=mt(s.type,u.data);n.push(E,ee(f,1));}}}return n.push(pt()),Buffer.concat(n)}function pt(){let[t,o]=J(pe,0,1),i=[],a=(n,c)=>{for(let s=c-1;s>=0;s--)i.push(n>>s&1);};for(a(0,1),a(0,3),a(0,3),a(0,9),a(255,9),a(0,1),a(0,1),a(1,1);i.length%8!==0;)a(0,1);return Buffer.concat([E,Buffer.from([t,o]),Buffer.from([165,4]),g(i),Buffer.from([128])])}function Ee(r,e,t){let o=[];for(let i of r)o.push(E,i.data);for(let i of e)if(i.type<I){let a=Pe(i.data,i.type,t);o.push(E,ee(a,1));}return Buffer.concat(o)}function S(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function lt(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let i=0;i<e;i++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let i=e;i<8;i++)r.read(2);for(let i=0;i<e;i++)t[i]&&r.read(88),o[i]&&r.read(8);}function ht(r){let e=new h(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&S("sps_max_sub_layers_minus1",t,"0"),e.read(1),lt(e,t),e.readUe();let o=e.readUe();o===3&&S("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 i=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)&&S("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&S("pcm_enabled_flag",1,"0");let s=e.readUe();s>1&&S("num_short_term_ref_pic_sets",s,"\u22641");let d=0;if(s===1){let _=e.readUe(),w=e.readUe();d=_+w;for(let l=0;l<_;l++)e.readUe(),e.read(1);for(let l=0;l<w;l++)e.readUe(),e.read(1);}let u=e.read(1)===1;u&&S("long_term_ref_pics_present_flag",1,"0");let f=e.read(1)===1;return {log2MaxPocLsb:i,saoEnabled:c,numShortTermRefPicSets:s,numDeltaPocsSet0:d,longTermRefPicsPresent:u,spsTemporalMvpEnabled:f}}function _t(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&&S("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)&&S("tiles_enabled_flag",1,"0"),e.read(1);let i=e.read(1)===1,a=e.read(1),n=false;return a&&(e.read(1),n=e.read(1)===1,n||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:i&&!n}}function Se(r){let e=F(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 i=ht(P(t.data)),a=_t(P(o.data));return {...i,...a}}var $=class r{_s;_pts=0n;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:i,bitrate:a,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:i,bitrate:a,options:{preset:"p4",bf:"0",tier:"main"}},u=await C({...d,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),f=await C({...d,pixelFormat:AV_PIX_FMT_YUV420P},"nvenc.alpha.open2");if(!u.extraData||!f.extraData)throw new Error("nvenc: codec extradata missing");let _=Se(u.extraData),w=n.addStream(u,"hvc1"),l=ge({baseExtradata:u.extraData,alphaExtradata:f.extraData,width:t,height:o});w.codecpar.extradata=re(l);let y=t*o,q=(t>>1)*(o>>1),oe=Buffer.alloc(y+q*2);return oe.fill(128,y),new r({baseCtx:u,alphaCtx:f,basePkt:x(),alphaPkt:x(),stream:w,alphaSwFrame:A(t,o,AV_PIX_FMT_YUV420P),alphaBuf:oe,hevcCfg:_})}async encode(e,t){let{baseCtx:o,alphaCtx:i,alphaSwFrame:a,alphaBuf:n}=this._s,c=this._pts++;e.pts=c,e.duration=1n,FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),ve(e,n),FFmpegError.throwIfError(a.makeWritable(),"alphaSw.makeWritable"),FFmpegError.throwIfError(a.fromBuffer(n),"alphaSw.fromBuffer"),a.pts=c,a.duration=1n,FFmpegError.throwIfError(await i.sendFrame(a),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i,alphaSwFrame:a}=this._s;e.free(),t.free(),a.free(),i.freeContext(),o.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:a,stream:n}=this._s;for(;;){let c=await t.receivePacket(i),s=await o.receivePacket(a),d=c>=0,u=s>=0;if(!d&&!u)break;if(d!==u)throw new Error(`NVENC desync: base=${d}, alpha=${u}`);let f=Ee(F(i.data),F(a.data),this._s.hevcCfg),_=[re(f)],w=i.pts,l=i.dts,y=i.duration,q=i.flags;i.data=Buffer.concat(_),i.pts=w,i.dts=l,i.duration=y===0n?1n:y,i.flags=q,i.streamIndex=n.index,i.rescaleTs(t.timeBase,n.timeBase),await e.writePacket(i),i.unref(),a.unref();}}};var L=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:i,muxer:a,...n}=e,c=Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let s=await C({codec:c,...n,codecTag:o,options:i},"videoCtx.open2"),d=a.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 X=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:i,hw:a,bitrate:n,muxer:c}=e,s=a.getEncoderCodec("hevc");if(!s)throw new Error("hevc_videotoolbox encoder not found");let d=await C({codec:s,width:t,height:o,fps:i,bitrate:n,pixelFormat:AV_PIX_FMT_BGRA,colorRange:AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),u=c.addStream(d,"hvc1");return new r(d,x(),u)}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 Y="[Encoder]";async function Ce(r,e){let{width:t,height:o,fps:i,bitrate:a=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.debug(Y,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await X.create({width:t,height:o,fps:i,hw:s,bitrate:a,muxer:e}),hw:s,ownsHw:d};if(s?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&s.getEncoderCodec("hevc"))return k.debug(Y,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await $.create({width:t,height:o,fps:i,hw:s,bitrate:a,muxer:e}),hw:s,ownsHw:d}}catch(f){k.warn(Y,"Hardware codec session limits reached, use software encoder",f),d&&s?.dispose();}return k.debug(Y,"using software libx265 HEVC alpha encoder"),{video:await L.create({width:t,height:o,fps:i,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:a,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await b.create(t,o),ownsHw:false}}var Lt="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 D(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),i=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:i,opts:e})}static mp4Video(e,t){let{width:o,height:i,fps:a,disableHwCodec:n,sharedHw:c}=e;return Ce({width:o,height:i,fps:a,disableHwCodec:n,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:i,fps:a}=e;return {video:await L.create({width:o,height:i,fps:a,codecName:Lt,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:t}),codec:await b.create(o,i),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 G.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:i}=this._s;await o?.flush(i),e?await e.flush(i):await t.flush(i);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:i,codec:a,hw:n,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),i?.[Symbol.dispose](),a?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&n?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:i}=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,i);}};var Be=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:i,outFile:a,withAudio:n=false,disableHwCodec:c=false}=e,s=a.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,w=[];for(let l=0;l<s.length;l++){let y=await U.create({outFile:s[l],kind:d[l],width:t,height:o,fps:i,withAudio:n,disableHwCodec:c,sharedHw:d[l]==="mp4"&&_?f:void 0});w.push(y);}return new r({sinks:w,sharedHw:f,limiter:new O(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(i){var a$1=i,n=true;}finally{b$1(o,a$1,n);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await b.create(t,o);let i=await this._s.pngCodec.decodePNG(e);for(let a of this._s.sinks)await a.encodeDecodedFrame(i);});}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=A(this._s.opts.width,this._s.opts.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};export{O as ConcurrencyLimiter,Be as EncoderPipeline,D as FormatMuxer,ie as Lazy,pr as periodical,ae as sleep,wr as useRetry,mr as withTimeout};//# sourceMappingURL=index.js.map
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvc2luay50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiXSwibmFtZXMiOlsiTGF6eSIsIm1ha2VWYWx1ZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwiZm4iLCJzaWduYWwiLCJyZXNvbHZlIiwicmVqZWN0IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5Iiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0IiwidGltZW91dEVycm9yIiwiYXJncyIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsIkZGbXBlZ0Vycm9yIiwiY29kZWNDdHgiLCJjb2RlY1RhZyIsInN0cmVhbSIsInBrdCIsIm9wZW5WaWRlb0N0eCIsIm9wdHMiLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJtYWtlRnJhbWUiLCJ3aWR0aCIsImhlaWdodCIsInBpeEZtdCIsImZyYW1lIiwiRnJhbWUiLCJtYWtlUGFja2V0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsIl9zdGFjayIsIl9fdXNpbmciLCJfIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmaWx0ZXJEZXNjIiwib3V0cHV0cyIsIkZpbHRlckluT3V0IiwiaW5wdXRzIiwicGNtIiwic3JjIiwiaSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsImIiLCJCaXRXcml0ZXIiLCJ2YWwiLCJuIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJkYXRhIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJ2YWx1ZSIsIm1hc2siLCJjdXIiLCJwYXRjaFB0bCIsIm5hbERhdGEiLCJwdGxTdGFydEJpdCIsInJic3AiLCJwYXRjaEhldmNBbHBoYVB0bCIsImNodW5rcyIsInJld3JpdGVPbmVVZSIsIm5hbEluIiwibmV3VmFsIiwiYnIiLCJidyIsInJld3JpdGVUd29VZSIsIm5ld1ZhbDEiLCJuZXdWYWwyIiwicmV3cml0ZUFscGhhU3BzIiwic3BzIiwiU1BTX1NFUV9JRF9CSVQiLCJyZXdyaXRlQWxwaGFQcHMiLCJwcHMiLCJyZWFkU2UiLCJ1ZSIsInBhcnNlSW5saW5lU3RSZWZQaWNTZXQiLCJudW1EZWx0YVBvY3NTZXQwIiwiZGVsdGFJZHhNaW51czEiLCJudW1OZWciLCJudW1Qb3MiLCJwYXJzZUhlYWRlclRvQWxpZ25tZW50IiwibmFsVHlwZSIsImNmZyIsImlzSXJhcCIsInNsaWNlVHlwZSIsInJld3JpdGVBbHBoYVNsaWNlSGVhZGVyIiwic2xpY2UiLCJwcm9iZSIsIkIiLCJvbGRBbGlnbkJpdHMiLCJzbGljZURhdGFCeXRlT2Zmc2V0IiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwieSIsInJvd0Jhc2UiLCJkc3RCYXNlIiwieCIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsImZhaWwiLCJmaWVsZCIsImdvdCIsImV4cGVjdGVkIiwic2tpcFB0bCIsIm1heFN1YkxheWVycyIsInN1YlByb2ZpbGVQcmVzZW50Iiwic3ViTGV2ZWxQcmVzZW50IiwicGFyc2VTcHMiLCJzcHNSYnNwIiwiY2hyb21hRm9ybWF0IiwibG9nMk1heFBvY0xzYiIsIm9yZGVyQ291bnQiLCJzYW9FbmFibGVkIiwibnVtU3RScHMiLCJsb25nVGVybVJlZlBpY3NQcmVzZW50Iiwic3BzVGVtcG9yYWxNdnBFbmFibGVkIiwicGFyc2VQcHMiLCJwcHNSYnNwIiwibnVtRXh0cmFTbGljZUhlYWRlckJpdHMiLCJjYWJhY0luaXRQcmVzZW50IiwicHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQiLCJkZWJsb2NraW5nQ29udHJvbFByZXNlbnQiLCJzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlIiwicGFyc2VOdmVuY0hldmNDb25maWciLCJleHRyYWRhdGEiLCJzIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJoZXZjQ2ZnIiwidW5pZmllZCIsInV2U2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiYmFzZVBrdCIsImFscGhhUGt0IiwiYmFzZVIiLCJhbHBoYVIiLCJiYXNlUmVhZHkiLCJhbHBoYVJlYWR5IiwiaW50ZXJsZWF2ZWQiLCJkdHMiLCJkdXJhdGlvbiIsImZsYWdzIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJUQUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsImxvZ2dlciIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZGX0VOQ09ERVJfTElCVlBYX1ZQOSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInZpZGVvIiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsIkZGX0VOQ09ERVJfTElCT1BVUyIsInNhbXBsZVJhdGUiLCJod1ZpZGVvIiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIm91dEZpbGUiLCJ3aXRoQXVkaW8iLCJvdXRGaWxlcyIsImtpbmRzIiwiaXNId0FscGhhQ2FwYWJsZSIsInNpbmtzIiwic2luayIsImlucHV0Il0sIm1hcHBpbmdzIjoiMHBDQUVPLElBQU1BLEVBQUFBLENBQU4sS0FBYyxDQUNuQixXQUFBLENBQXFCQyxFQUFvQixDQUFwQixJQUFBLENBQUEsU0FBQSxDQUFBQSxFQUFxQixDQUFyQixTQUFBLENBRXJCLElBQUksS0FBQSxFQUFXLENBQ2IsT0FBSyxJQUFBLENBQUssWUFBQSxHQUNSLEtBQUssTUFBQSxDQUFTLElBQUEsQ0FBSyxXQUFVLENBQzdCLElBQUEsQ0FBSyxhQUFlLElBQUEsQ0FBQSxDQUVmLElBQUEsQ0FBSyxNQUNkLENBRUEsSUFBSSxhQUF1QixDQUN6QixPQUFPLEtBQUssWUFDZCxDQUVRLGFBQWUsS0FBQSxDQUNmLE1BQ1YsRUNYTyxJQUFNQyxDQUFBQSxDQUFOLEtBQXlCLENBTTlCLFdBQUEsQ0FBcUJDLENBQUFBLENBQXdCLENBQXhCLElBQUEsQ0FBQSxjQUFBLENBQUFBLEVBQXlCLENBQXpCLGNBQUEsQ0FMYixPQUFBLENBQVUsRUFDVixNQUFBLENBQXVCLEdBQ3ZCLFFBQUEsQ0FBVyxJQUFJLFFBQ2YsUUFBQSxDQUlSLElBQUksUUFBaUIsQ0FDbkIsT0FBTyxLQUFLLE9BQ2QsQ0FFQSxJQUFJLE9BQUEsRUFBa0IsQ0FDcEIsT0FBTyxJQUFBLENBQUssTUFBQSxDQUFPLE1BQ3JCLENBRUEsSUFBSSxLQUFBLEVBQWdCLENBQ2xCLE9BQU8sQ0FBQSxRQUFBLEVBQVcsS0FBSyxNQUFNLENBQUEsV0FBQSxFQUFjLEtBQUssT0FBTyxDQUFBLENBQ3pELENBRUEsTUFBTSxRQUFBLENBQVlDLEVBQXNCQyxDQUFBQSxDQUFrQyxDQUN4RSxPQUFBQSxDQUFBQSxFQUFRLGNBQUEsRUFBZSxDQUVuQkEsQ0FBQUEs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QUFJLGtCQUFBLENBQW9CLEVBQUksQ0FBQSxDQUFHLENBQUEsRUFBQSxDQUFLaEMsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNULElBQUEsSUFBUyxDQUFBLENBQUksRUFBRyxDQUFBLENBQUksRUFBQSxDQUFJLENBQUEsRUFBQSxDQUFLQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFBLEdBQU0sR0FBSyxDQUFBLEdBQU0sQ0FBQyxFQUN2REEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUdUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUtnQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksTUFBQSxDQUFTQSxFQUFJLFFBQVEsQ0FBQSxDQUU1RGhDLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFdkgsRUFBTyxFQUFFLENBQUEsQ0FDZHVILEVBQUcsQ0FBQSxDQUFFdEgsQ0FBQUEsQ0FBUSxFQUFFLENBQUEsQ0FDZnNILENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUVUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUVQQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxFQUNYLENBT08sU0FBU2tDLEVBQUFBLENBQWNOLEVBQWlCbkosQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBd0IsQ0FDcEYsSUFBTXNKLENBQUFBLENBQU1MLEVB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QUFNLElBQUEsQ0FBSyxJQUFBLElBQ2IsQ0FFQSxNQUFjLE1BQXNCLENBQ2xDLEdBQUksTUFBSyxTQUFBLENBQ1QsQ0FBQSxJQUFBLENBQUssU0FBQSxDQUFZLElBQUEsQ0FDakIsSUFBQSxJQUFXQSxDQUFBQSxJQUFRLEtBQUssRUFBQSxDQUFHLEtBQUEsQ0FBTyxNQUFNQSxDQUFBQSxDQUFLLE1BQUEsQ0FBTyxZQUFZLENBQUEsRUFBRSxDQUNsRSxLQUFLLEVBQUEsQ0FBRyxRQUFBLEdBQVcsT0FBTyxPQUFPLENBQUEsR0FDakMsSUFBQSxDQUFLLEVBQUEsQ0FBRyxVQUFVLE9BQUEsR0FBUSxDQUM1QixDQUVRLFNBQUEsQ0FBVUMsQ0FBQUEsQ0FBc0IsQ0FDdEMsSUFBTTdRLENBQUFBLENBQVFKLENBQUFBLENBQVUsS0FBSyxFQUFBLENBQUcsSUFBQSxDQUFLLE1BQU8sSUFBQSxDQUFLLEVBQUEsQ0FBRyxLQUFLLE1BQUEsQ0FBUW1CLGVBQWUsRUFDaEYsT0FBQS9CLFdBQUFBLENBQVksYUFBYWdCLENBQUFBLENBQU0sVUFBQSxDQUFXNlEsQ0FBSyxDQUFBLENBQUcsc0JBQXNCLENBQUEsQ0FDakU3USxDQUNULENBQ0YiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgTGF6eTxUPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1ha2VWYWx1ZTogKCkgPT4gVCkge31cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1ha2VWYWx1ZSgpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWUhO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgdW5kZWZpbmVkO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8vIFdoZW4gcHJvdmlkZWQsIHVzZVJldHJ5IGJhaWxzIG91dCBpbW1lZGlhdGVseSBvbiBhYm9ydCBpbnN0ZWFkIG9mIHJldHJ5aW5nLiBUaGUgc2lnbmFsXG4gIC8vIGlzIG5vdCBhdXRvLXRocmVhZGVkIGludG8gZm4g4oCUIGNhbGxlciBtdXN0IHdpcmUgaXQgd2hlcmUgaXQgbWF0dGVycyAoZS5nLiBmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHsgZm4sIG1heEF0dGVtcHRzID0gMywgdGltZW91dCwgc2lnbmFsIH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIFBhY2tldCB9IGZyb20gXCJub2RlLWF2XCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRNdXhlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogRm9ybWF0Q29udGV4dDtcbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3V0UGF0aDogc3RyaW5nLCBmb3JtYXROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3R4ID0gbmV3IEZvcm1hdENvbnRleHQoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fY3R4LmFsbG9jT3V0cHV0Q29udGV4dDIobnVsbCwgZm9ybWF0TmFtZSA/PyBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogUmV0dXJuVHlwZTxGb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIobnVsbCksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgSGFyZHdhcmVGcmFtZXNDb250ZXh0LCBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkgYnJlYWs7XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXdyaXRlIG5hbF91bml0X3R5cGUgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsVHlwZShuYWw6IEJ1ZmZlciwgbmV3VHlwZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyBsYXllcklkLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKG5ld1R5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZW1vdmUgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzIOKGkiAwMCAwMCkgZnJvbSBSQlNQLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSArIDIgPCBkYXRhLmxlbmd0aCAmJiBkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAzKSB7XG4gICAgICBvdXQucHVzaCgwLCAwKTtcbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goZGF0YVtpXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cblxuLyoqIEluc2VydCBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMpIGZvciBBbm5leCBCIGNvbXBsaWFuY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW11bGF0aW9uUHJldmVudGlvbihuYWw6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgb3V0LnB1c2gobmFsWzBdISwgbmFsWzFdISk7XG4gIGxldCB6ZXJvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHplcm9zID09PSAyICYmIG5hbFtpXSEgPD0gMykge1xuICAgICAgb3V0LnB1c2goMyk7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIGlmIChuYWxbaV0gPT09IDApIHplcm9zKys7XG4gICAgZWxzZSB6ZXJvcyA9IDA7XG4gICAgb3V0LnB1c2gobmFsW2ldISk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG4iLCIvLyBQYXRjaCBOVkVOQyBvdXRwdXQgdG8gY29uZm9ybSB0byBBcHBsZSBIRVZDIFZpZGVvIHdpdGggQWxwaGEgSW50ZXJvcGVyYWJpbGl0eSBQcm9maWxlLlxuLy8gU3BlYzogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcbi8vIFNsaWNlIHBhcnNlciBpcyBjb25maWctZHJpdmVuOiBOdmVuY0hldmNDb25maWcgZnJvbSBwYXJzZS50cyBkZXJpdmVzIGZsYWdzIGF0IGVuY29kZXIgaW5pdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSByZXR1cm4gYml0c3RyZWFtO1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IHdoZW4gc2xpY2UgaGFzIHNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWc9MC5cbi8vIHN0UnBzSWR4ID0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIHNvIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICBici5yZWFkKDEpOyAvLyBkZWx0YV9ycHNfc2lnblxuICAgIGJyLnJlYWRVZSgpOyAvLyBhYnNfZGVsdGFfcnBzX21pbnVzMVxuICAgIGZvciAobGV0IGogPSAwOyBqIDw9IG51bURlbHRhUG9jc1NldDA7IGorKykge1xuICAgICAgY29uc3QgdXNlZCA9IGJyLnJlYWQoMSk7XG4gICAgICBpZiAoIXVzZWQpIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICBlbHNlIGlmIChjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cyA+IDEpIGJyLnJlYWQoTWF0aC5jZWlsKE1hdGgubG9nMihjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cykpKTtcbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gIH1cbiAgaWYgKGNmZy5zYW9FbmFibGVkKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2x1bWFfZmxhZ1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19jaHJvbWFfZmxhZ1xuICB9XG4gIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfUCB8fCBzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgIGNvbnN0IG92ZXJyaWRlRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKG92ZXJyaWRlRmxhZykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIGJyLnJlYWRVZSgpO1xuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICBpZiAoY2ZnLmNhYmFjSW5pdFByZXNlbnQpIGJyLnJlYWQoMSk7IC8vIGNhYmFjX2luaXRfZmxhZ1xuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyByZXdyaXRlQWxwaGFQcHMsIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyLCByZXdyaXRlQWxwaGFTcHMgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGVuY29kZU5hbEhlYWRlcixcbiAgTkFMX1NFSV9QUkVGSVgsXG4gIE5BTF9TUFMsXG4gIE5BTF9QUFMsXG4gIE5BTF9WUFMsXG4gIHR5cGUgTmFsVW5pdCxcbiAgcmV3cml0ZU5hbExheWVySWQsXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUC4gQ2FsbGVyIHByZS1maWxscyBVVj0xMjguXG4vLyBVaW50MzIgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSByZXR1cm4gcmV3cml0ZUFscGhhU3BzKGRhdGEpO1xuICBpZiAodHlwZSA9PT0gTkFMX1BQUykgcmV0dXJuIHJld3JpdGVBbHBoYVBwcyhkYXRhKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSBjb250aW51ZTtcbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSBOQUxfVlBTID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGFEYXRhID0gcmV3cml0ZUFscGhhUGFyYW1TZXQobmFsLnR5cGUsIGFscGhhTmFsLmRhdGEpO1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFEYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9TRUlfUFJFRklYLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjICgwID0gdW5zcGVjaWZpZWQvcHJlbXVsdGlwbGllZDsgbWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10sIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IE5BTF9WUFMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihuYWwuZGF0YSwgbmFsLnR5cGUsIGNmZyk7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIFBhcnNlIE5WRU5DIFNQUy9QUFMgZXh0cmFkYXRhIGF0IGVuY29kZXIgaW5pdCB0byBkZXJpdmUgZmxhZ3MgdGhlIHNsaWNlIGhlYWRlciBwYXJzZXIgZGVwZW5kcyBvbi5cbi8vIERlZnVzZXMgZnJhZ2lsZSBoYXJkY29kZWQgYXNzdW1wdGlvbnM6IGlmIE5WRU5DIGRlZmF1bHRzIHNoaWZ0LCB0aHJvd3Mgd2l0aCBhY3Rpb25hYmxlIGVycm9yLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IE5BTF9QUFMsIE5BTF9TUFMsIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOdmVuY0hldmNDb25maWcge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47XG4gIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBmYWlsKGZpZWxkOiBzdHJpbmcsIGdvdDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBoZXZjX2FscGhhOiBOVkVOQyBTUFMvUFBTIHVuc3VwcG9ydGVkOiAke2ZpZWxkfT0ke2dvdH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9YCk7XG59XG5cbmZ1bmN0aW9uIHNraXBQdGwoYnI6IEJpdFJlYWRlciwgbWF4U3ViTGF5ZXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgYnIucmVhZCgyICsgMSArIDUpOyAvLyBwcm9maWxlX3NwYWNlLCB0aWVyLCBwcm9maWxlX2lkY1xuICBici5yZWFkKDMyKTsgLy8gcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdbMC4uMzFdXG4gIGJyLnJlYWQoNDgpOyAvLyA0IHNvdXJjZS9wYWNrZWQgZmxhZ3MgKyA0MyBjb25zdHJhaW50L3Jlc2VydmVkICsgMSBpbmJsZFxuICBici5yZWFkKDgpOyAvLyBsZXZlbF9pZGNcbiAgY29uc3Qgc3ViUHJvZmlsZVByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHN1YkxldmVsUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIHN1YlByb2ZpbGVQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gICAgc3ViTGV2ZWxQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgaWYgKG1heFN1YkxheWVycyA+IDApIGZvciAobGV0IGkgPSBtYXhTdWJMYXllcnM7IGkgPCA4OyBpKyspIGJyLnJlYWQoMik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBpZiAoc3ViUHJvZmlsZVByZXNlbnRbaV0pIGJyLnJlYWQoOCArIDMyICsgNDgpO1xuICAgIGlmIChzdWJMZXZlbFByZXNlbnRbaV0pIGJyLnJlYWQoOCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTcHMoc3BzUmJzcDogQnVmZmVyKToge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG59IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHNwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBtYXhTdWJMYXllcnMgPSBici5yZWFkKDMpO1xuICAvLyBhbHBoYV9kYXJ3aW4ucmV3cml0ZUFscGhhU3BzICsgdnBzLmV4dHJhY3RQVEwgaGFyZGNvZGUgOTYtYml0IFBUTCDigJQgb25seSB2YWxpZCB3aGVuIHN1Yl9sYXllcnM9MC5cbiAgaWYgKG1heFN1YkxheWVycyAhPT0gMCkgZmFpbChcInNwc19tYXhfc3ViX2xheWVyc19taW51czFcIiwgbWF4U3ViTGF5ZXJzLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWdcbiAgc2tpcFB0bChiciwgbWF4U3ViTGF5ZXJzKTtcbiAgYnIucmVhZFVlKCk7IC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBjaHJvbWFGb3JtYXQgPSBici5yZWFkVWUoKTtcbiAgaWYgKGNocm9tYUZvcm1hdCA9PT0gMykgZmFpbChcImNocm9tYV9mb3JtYXRfaWRjXCIsIGNocm9tYUZvcm1hdCwgXCLiiaAzXCIpO1xuICBici5yZWFkVWUoKTsgLy8gcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc1xuICBici5yZWFkVWUoKTsgLy8gcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXNcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBjb25zdCBsb2cyTWF4UG9jTHNiID0gYnIucmVhZFVlKCkgKyA0O1xuICBjb25zdCBzdWJPcmRlckluZm8gPSBici5yZWFkKDEpO1xuICBjb25zdCBvcmRlckNvdW50ID0gc3ViT3JkZXJJbmZvID8gbWF4U3ViTGF5ZXJzICsgMSA6IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJDb3VudDsgaSsrKSB7XG4gICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICBpZiAoYnIucmVhZCgxKSkgZmFpbChcInNjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBhbXBfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHNhb0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAoYnIucmVhZCgxKSkgZmFpbChcInBjbV9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICBjb25zdCBudW1TdFJwcyA9IGJyLnJlYWRVZSgpO1xuICBpZiAobnVtU3RScHMgPiAxKSBmYWlsKFwibnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzXCIsIG51bVN0UnBzLCBcIuKJpDFcIik7XG4gIGxldCBudW1EZWx0YVBvY3NTZXQwID0gMDtcbiAgaWYgKG51bVN0UnBzID09PSAxKSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgbnVtRGVsdGFQb2NzU2V0MCA9IG51bU5lZyArIG51bVBvcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICB9XG4gIGNvbnN0IGxvbmdUZXJtUmVmUGljc1ByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAobG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkgZmFpbChcImxvbmdfdGVybV9yZWZfcGljc19wcmVzZW50X2ZsYWdcIiwgMSwgXCIwXCIpO1xuICBjb25zdCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICByZXR1cm4geyBsb2cyTWF4UG9jTHNiLCBzYW9FbmFibGVkLCBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1TdFJwcywgbnVtRGVsdGFQb2NzU2V0MCwgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCwgc3BzVGVtcG9yYWxNdnBFbmFibGVkIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHBzKHBwc1Jic3A6IEJ1ZmZlcik6IHsgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjsgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihwcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19waWNfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkVWUoKTsgLy8gcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWQoMSk7IC8vIGRlcGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gb3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFnXG4gIGNvbnN0IG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzID0gYnIucmVhZCgzKTtcbiAgaWYgKG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzICE9PSAwKSBmYWlsKFwibnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzXCIsIG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIHNpZ25fZGF0YV9oaWRpbmdfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IGNhYmFjSW5pdFByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIGluaXRfcXBfbWludXMyNiAoc2UsIGJ1dCB1ZSBwYXJzZXIgZmluZSB0byBhZHZhbmNlKVxuICBici5yZWFkKDEpOyAvLyBjb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSBici5yZWFkVWUoKTsgLy8gY3VfcXBfZGVsdGFfZW5hYmxlZCDihpIgZGlmZl9jdV9xcF9kZWx0YV9kZXB0aFxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NiX3FwX29mZnNldFxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NyX3FwX29mZnNldFxuICBici5yZWFkKDEpOyAvLyBwcHNfc2xpY2VfY2hyb21hX3FwX29mZnNldHNfcHJlc2VudF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9iaXByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc3F1YW50X2J5cGFzc19lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIGZhaWwoXCJ0aWxlc19lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBlbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGNvbnN0IGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCA9IGJyLnJlYWQoMSk7XG4gIGxldCBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gZmFsc2U7XG4gIGlmIChkZWJsb2NraW5nQ29udHJvbFByZXNlbnQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWdcbiAgICBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gYnIucmVhZCgxKSA9PT0gMTsgLy8gcHBzX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2FibGVkX2ZsYWdcbiAgICBpZiAoIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUpIHtcbiAgICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgLy8gYmV0YS90YyBvZmZzZXRzIChzZSB2aWEgdWUgYWR2YW5jZSlcbiAgICB9XG4gIH1cbiAgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgaW4gc2xpY2UgaGVhZGVyIGlzIHByZXNlbnQgaWZmXG4gIC8vIHBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAmJiAhc2xpY2VfZGVibG9ja2luZ19kaXNhYmxlZC5cbiAgY29uc3QgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgPSBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCAmJiAhc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZTtcbiAgcmV0dXJuIHsgY2FiYWNJbml0UHJlc2VudCwgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnZlbmNIZXZjQ29uZmlnKGV4dHJhZGF0YTogQnVmZmVyKTogTnZlbmNIZXZjQ29uZmlnIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoZXh0cmFkYXRhKTtcbiAgY29uc3Qgc3BzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9TUFMpO1xuICBjb25zdCBwcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1BQUyk7XG4gIGlmICghc3BzKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBTUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIGlmICghcHBzKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBQUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIGNvbnN0IHMgPSBwYXJzZVNwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNwcy5kYXRhKSk7XG4gIGNvbnN0IHAgPSBwYXJzZVBwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHBwcy5kYXRhKSk7XG4gIHJldHVybiB7IC4uLnMsIC4uLnAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVl9QSVhfRk1UX1lVVjQyMFAsIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciwgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyB0eXBlIE52ZW5jSGV2Y0NvbmZpZywgcGFyc2VOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIE52ZW5jU3RhdGUge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGFscGhhU3dGcmFtZTogRnJhbWU7XG4gIGFscGhhQnVmOiBCdWZmZXI7XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIC8vIHRpZXI9bWFpbiBtYXRjaGVzIEFwcGxlIFZpZGVvVG9vbGJveDsgbWFjT1MgQ2hyb21lIHJlcXVpcmVzIE1haW4gdGllciBmb3IgSEVWQyBhbHBoYSBkZWNvZGUuXG4gICAgY29uc3QgbnZlbmNPcHRzID0geyBwcmVzZXQ6IFwicDRcIiwgYmY6IFwiMFwiLCB0aWVyOiBcIm1haW5cIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3Qg4oCUIE5WRU5DIGNvbnZlcnRzIGludGVybmFsbHksIG5vIENQVSBTV1MsIG5vIGh3RnJhbWVzQ3R4IG5lZWRlZC5cbiAgICBjb25zdCBiYXNlQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKTtcbiAgICBjb25zdCBhbHBoYUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9LCBcIm52ZW5jLmFscGhhLm9wZW4yXCIpO1xuXG4gICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgY29uc3QgaGV2Y0NmZyA9IHBhcnNlTnZlbmNIZXZjQ29uZmlnKGJhc2VDdHguZXh0cmFEYXRhKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICBiYXNlRXh0cmFkYXRhOiBiYXNlQ3R4LmV4dHJhRGF0YSxcbiAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwodW5pZmllZCk7XG5cbiAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIGNvbnN0IHV2U2l6ZSA9ICh3aWR0aCA+PiAxKSAqIChoZWlnaHQgPj4gMSk7XG4gICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyB1dlNpemUgKiAyKTtcbiAgICBhbHBoYUJ1Zi5maWxsKDEyOCwgeVNpemUpO1xuXG4gICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogbWFrZVBhY2tldCgpLFxuICAgICAgYWxwaGFQa3Q6IG1ha2VQYWNrZXQoKSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIGFscGhhU3dGcmFtZTogbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCksXG4gICAgICBhbHBoYUJ1ZixcbiAgICAgIGhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG5cbiAgICAvLyBFbGVjdHJvbjogZnJhbWUuZGF0YVtdIGlzIGEgY29weSwgd3JpdGVzIGRpc2NhcmRlZC4gZnJvbUJ1ZmZlciBnb2VzIG5hdGl2ZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5iYXNlQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zLmFscGhhQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCB3aGVuIE5WRU5DIHNlc3Npb25zIGZyZWVkIGluIGNyZWF0aW9uIG9yZGVyLlxuICAgIC8vIExJRk8gZGVzdHJveSBhdm9pZHMgdGhlIHNlZ2ZhdWx0LiBQZXIgTlZJRElBIGZvcnVtIC90LzI2OTk3NC5cbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5JbnRlcmxlYXZlZChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCwgc3RyZWFtIH0gPSB0aGlzLl9zO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBiYXNlUiA9IGF3YWl0IGJhc2VDdHgucmVjZWl2ZVBhY2tldChiYXNlUGt0KTtcbiAgICAgIGNvbnN0IGFscGhhUiA9IGF3YWl0IGFscGhhQ3R4LnJlY2VpdmVQYWNrZXQoYWxwaGFQa3QpO1xuICAgICAgY29uc3QgYmFzZVJlYWR5ID0gYmFzZVIgPj0gMDtcbiAgICAgIGNvbnN0IGFscGhhUmVhZHkgPSBhbHBoYVIgPj0gMDtcbiAgICAgIGlmICghYmFzZVJlYWR5ICYmICFhbHBoYVJlYWR5KSBicmVhaztcbiAgICAgIC8vIGJmPTAg4oaSIGJvdGggc3RyZWFtcyBlbWl0IGluIGxvY2tzdGVwLlxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6IGJhc2U9JHtiYXNlUmVhZHl9LCBhbHBoYT0ke2FscGhhUmVhZHl9YCk7XG5cbiAgICAgIC8vIEFscGhhIFNFSSBsaXZlcyBvbmx5IGluIGV4dHJhZGF0YSAobWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSk7IGR1cGxpY2F0ZSBpbi1iYW5kIFNFSSBjb25mdXNlcyBWVEIuXG4gICAgICAvLyBQYXRjaCBpbi1iYW5kIFZQUy9TUFMgUFRMIGJpdHMgZm9yIEFwcGxlLVZUQiBjb21wYXQgKGVuY29kZXIgcmVwZWF0cyBoZWFkZXJzIHBlciBJRFIpLlxuICAgICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlUGt0LmRhdGEhKSwgc3BsaXROYWxVbml0cyhhbHBoYVBrdC5kYXRhISksIHRoaXMuX3MuaGV2Y0NmZyk7XG4gICAgICBjb25zdCBjaHVua3MgPSBbcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpXTtcblxuICAgICAgLy8gYmFzZVBrdC5kYXRhIHNldHRlciBjbGVhcnMgcHRzL2R0cy9kdXJhdGlvbi9mbGFncy5cbiAgICAgIC8vIEZsYWdzIGNhcnJ5IEFWX1BLVF9GTEFHX0tFWSDigJQgd2l0aG91dCBpdCBtb3YgbXV4ZXIgb21pdHMgc3RzcywgYnJlYWtzIFF1aWNrTG9vayB0aHVtYm5haWwgKyBzZWVrLlxuICAgICAgY29uc3QgcHRzID0gYmFzZVBrdC5wdHM7XG4gICAgICBjb25zdCBkdHMgPSBiYXNlUGt0LmR0cztcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gYmFzZVBrdC5kdXJhdGlvbjtcbiAgICAgIGNvbnN0IGZsYWdzID0gYmFzZVBrdC5mbGFncztcbiAgICAgIGJhc2VQa3QuZGF0YSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgIGJhc2VQa3QucHRzID0gcHRzO1xuICAgICAgYmFzZVBrdC5kdHMgPSBkdHM7XG4gICAgICBiYXNlUGt0LmR1cmF0aW9uID0gZHVyYXRpb24gPT09IDBuID8gMW4gOiBkdXJhdGlvbjtcbiAgICAgIGJhc2VQa3QuZmxhZ3MgPSBmbGFncztcbiAgICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG5cbiAgICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgICAgIGFscGhhUGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHR5cGUgQVZQaXhlbEZvcm1hdCwgdHlwZSBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBcImh2YzFcIik7XG4gICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJtZWRpdW1cIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgYml0cmF0ZSxcbiAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICBtdXhlcixcbiAgfSk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjQuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLm1wNFwiKSB8fCBsb3dlci5lbmRzV2l0aChcIi5tb3ZcIikpIHJldHVybiBcIm1wNFwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIGNvbnN0IG11eGVyID0gbmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSk7XG4gICAgY29uc3QgdmlkZW8gPSBvcHRzLmtpbmQgPT09IFwibXA0XCIgPyBhd2FpdCB0aGlzLm1wNFZpZGVvKG9wdHMsIG11eGVyKSA6IGF3YWl0IHRoaXMud2VibVZpZGVvKG9wdHMsIG11eGVyKTtcbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgdGhpcy5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi52aWRlbywgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIsIFwicm93LW10XCI6IFwiMVwiLCB0aHJlYWRzOiBcIjJcIiB9LFxuICAgICAgYml0cmF0ZTogNF8wMDBfMDAwLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhdWRpb0ZvcihvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICAvLyBPcHVzIHJlamVjdHMgNDQuMWsuXG4gICAgY29uc3QgY2ZnID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIlxuICAgICAgICA/IHsgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCwgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyB9XG4gICAgICAgIDogeyBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJPUFVTIH07XG4gICAgcmV0dXJuIEF1ZGlvRW5jb2Rlci5jcmVhdGUoeyAuLi5jZmcsIGdsb2JhbEhlYWRlcjogdHJ1ZSwgYml0cmF0ZTogMTI4XzAwMCwgbXV4ZXIgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShzcmMpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmF1ZGlvPy5lbmNvZGUocGNtLCB0aGlzLl9zLm11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGF1ZGlvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgIGlmIChod1ZpZGVvKSBhd2FpdCBod1ZpZGVvLmZsdXNoKG11eGVyKTtcbiAgICBlbHNlIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgb3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBvdXRGaWxlcyA9IG91dEZpbGVcbiAgICAgIC5zcGxpdChcIixcIilcbiAgICAgIC5tYXAoKHApID0+IHAudHJpbSgpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcGF0aFwiKTtcblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fcy5zaW5rcy5tYXAoKHNpbmspID0+IHNpbmsuZW5jb2RlQkdSQShmcmFtZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9zLm9wdHM7XG4gICAgICB0aGlzLl9zLnBuZ0NvZGVjID8/PSBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IHRoaXMuX3MucG5nQ29kZWMuZGVjb2RlUE5HKHBuZ0RhdGEpO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5lbmNvZGVBdWRpbyhwY20pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5mbHVzaCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZXM7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5wbmdDb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3Muc2hhcmVkSHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYmdyYUZyYW1lKGlucHV0OiBCdWZmZXIpOiBGcmFtZSB7XG4gICAgY29uc3QgZnJhbWUgPSBtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
import'source-map-support/register.js';import {a,b as b$1,k}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,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 Fr(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 br(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 Cr({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(){this._opened||(FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}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 S(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 C(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 F=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=C(e,t,AV_PIX_FMT_BGRA$1),this.dst=C(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$1(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 ot={[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=${ot[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$1(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 v(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 b=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 E=Buffer.from([0,0,0,1]);var j=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 A(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 at=48,Pe=24,it=2,nt=10,re=0,st=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+it,0),xe(t,e+nt,1),A(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,at):o.type===R&&(a=we(o.data,Pe)),t.push(E,a);}return Buffer.concat(t)}function ct(r,e,t){let o=P(r),a=new h(o),i=new b;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 A(v(i.bits))}function dt(r,e,t,o){let a=P(r),i=new h(a),n=new b;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 A(v(n.bits))}function ge(r){let e=Pe+96;return ct(r,e,1)}function Fe(r){return dt(r,16,1,1)}function ut(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function ft(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 pt(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>=j&&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))):ft(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===st||a===re)&&(r.read(1)&&(r.readUe(),a===re&&r.readUe()),a===re&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),ut(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=pt(i,e,t),c=n%8===0?8:8-n%8,s=(n+c)/8,d=new b;for(let f=0;f<16;f++)d.bits.push(a.read(1));for(d.bits.push(a.read(1)),e>=j&&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 A(Buffer.concat([v(d.bits),o.subarray(s)]))}function mt(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 lt(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 ht(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=mt(r);if(!o)return r;let a=new b;return lt(a,o),ht(a,o,e,t),a.bits.push(1),a.align(0),A(v(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 _t(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(E,d),!c.has(s.type)){c.add(s.type);for(let u of i.get(s.type)??[]){let f=_t(s.type,u.data);n.push(E,te(f,1));}}}return n.push(xt()),Buffer.concat(n)}function xt(){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([E,Buffer.from([t,o]),Buffer.from([165,4]),v(a),Buffer.from([128])])}function Se(r,e,t){let o=[];for(let a of r)o.push(E,a.data);for(let a of e)if(a.type<T){let i=be(a.data,a.type,t);o.push(E,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 y(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Ft(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 bt(r){let e=new h(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&y("sps_max_sub_layers_minus1",t,"0"),e.read(1),Ft(e,t),e.readUe();let o=e.readUe();o===3&&y("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)&&y("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&y("pcm_enabled_flag",1,"0");let s=e.readUe();s>1&&y("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&&y("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 vt(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&&y("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)&&y("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=bt(P(t.data)),i=vt(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 S({...d,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),f,_,g,l;try{if(f=await S({...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=C(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 S({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 S({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.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.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.warn(q,"Hardware codec session limits reached, use software encoder",f),d&&s?.dispose();}return k.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:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await F.create(t,o),ownsHw:false}}var zt="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:zt,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:t}),codec:await F.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$1(o,i,n);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await F.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=C(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,br as periodical,se as sleep,Cr as useRetry,Fr as withTimeout};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvc2luay50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiXSwibmFtZXMiOlsiTGF6eSIsIm1ha2VWYWx1ZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwiZm4iLCJzaWduYWwiLCJyZXNvbHZlIiwicmVqZWN0IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5Iiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0IiwidGltZW91dEVycm9yIiwiYXJncyIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsIkZGbXBlZ0Vycm9yIiwiY29kZWNDdHgiLCJjb2RlY1RhZyIsInN0cmVhbSIsInBrdCIsIm9wZW5WaWRlb0N0eCIsIm9wdHMiLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJtYWtlRnJhbWUiLCJ3aWR0aCIsImhlaWdodCIsInBpeEZtdCIsImZyYW1lIiwiRnJhbWUiLCJtYWtlUGFja2V0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsIl9zdGFjayIsIl9fdXNpbmciLCJfIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmaWx0ZXJEZXNjIiwib3V0cHV0cyIsIkZpbHRlckluT3V0IiwiaW5wdXRzIiwicGNtIiwic3JjIiwiaSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsImIiLCJCaXRXcml0ZXIiLCJ2YWwiLCJuIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJkYXRhIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJ2YWx1ZSIsIm1hc2siLCJjdXIiLCJwYXRjaFB0bCIsIm5hbERhdGEiLCJwdGxTdGFydEJpdCIsInJic3AiLCJwYXRjaEhldmNBbHBoYVB0bCIsImNodW5rcyIsInJld3JpdGVPbmVVZSIsIm5hbEluIiwibmV3VmFsIiwiYnIiLCJidyIsInJld3JpdGVUd29VZSIsIm5ld1ZhbDEiLCJuZXdWYWwyIiwicmV3cml0ZUFscGhhU3BzIiwic3BzIiwiU1BTX1NFUV9JRF9CSVQiLCJyZXdyaXRlQWxwaGFQcHMiLCJwcHMiLCJyZWFkU2UiLCJ1ZSIsInBhcnNlSW5saW5lU3RSZWZQaWNTZXQiLCJudW1EZWx0YVBvY3NTZXQwIiwiZGVsdGFJZHhNaW51czEiLCJudW1OZWciLCJudW1Qb3MiLCJwYXJzZUhlYWRlclRvQWxpZ25tZW50IiwibmFsVHlwZSIsImNmZyIsImlzSXJhcCIsInNsaWNlVHlwZSIsInJld3JpdGVBbHBoYVNsaWNlSGVhZGVyIiwic2xpY2UiLCJwcm9iZSIsIkIiLCJvbGRBbGlnbkJpdHMiLCJzbGljZURhdGFCeXRlT2Zmc2V0IiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwieSIsInJvd0Jhc2UiLCJkc3RCYXNlIiwieCIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsInMiLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJ0YWciLCJyZXQiLCJiYXNlIiwiYWxwaGEiLCJoZXZjQ2ZnIiwiaW50ZXJsZWF2ZWQiLCJmYWlsIiwiZmllbGQiLCJnb3QiLCJleHBlY3RlZCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJhbHBoYVN3RnJhbWUiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJUQUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsImxvZ2dlciIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZGX0VOQ09ERVJfTElCVlBYX1ZQOSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInZpZGVvIiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsIkZGX0VOQ09ERVJfTElCT1BVUyIsInNhbXBsZVJhdGUiLCJod1ZpZGVvIiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIm91dEZpbGUiLCJ3aXRoQXVkaW8iLCJvdXRGaWxlcyIsImtpbmRzIiwiaXNId0FscGhhQ2FwYWJsZSIsInNpbmtzIiwic2luayIsImlucHV0Il0sIm1hcHBpbmdzIjoiMHBDQUVPLElBQU1BLEVBQUFBLENBQU4sS0FBYyxDQUNuQixXQUFBLENBQXFCQyxFQUFvQixDQUFwQixJQUFBLENBQUEsU0FBQSxDQUFBQSxFQUFxQixDQUFyQixTQUFBLENBRXJCLElBQUksS0FBQSxFQUFXLENBQ2IsT0FBSyxJQUFBLENBQUssWUFBQSxHQUNSLEtBQUssTUFBQSxDQUFTLElBQUEsQ0FBSyxTQUFBLEVBQVUsQ0FDN0IsSUFBQSxDQUFLLFlBQUEsQ0FBZSxNQUVmLElBQUEsQ0FBSyxNQUNkLENBRUEsSUFBSSxXQUFBLEVBQXVCLENBQ3pCLE9BQU8sSUFBQSxDQUFLLFlBQ2QsQ0FFUSxZQUFBLENBQWUsS0FBQSxDQUNmLE1BQ1YsRUNYTyxJQUFNQyxFQUFOLEtBQXlCLENBTTlCLFlBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixjQUFBLENBTGIsUUFBVSxDQUFBLENBQ1YsTUFBQSxDQUF1QixFQUFDLENBQ3hCLFFBQUEsQ0FBVyxJQUFJLE9BQUEsQ0FDZixRQUFBLENBSVIsSUFBSSxNQUFBLEVBQWlCLENBQ25CLE9BQU8sS0FBSyxPQUNkLENBRUEsSUFBSSxPQUFBLEVBQWtCLENBQ3BCLE9BQU8sSUFBQSxDQUFLLE1BQUEsQ0FBTyxNQUNyQixDQUVBLElBQUksS0FBQSxFQUFnQixDQUNsQixPQUFPLENBQUEsUUFBQSxFQUFXLEtBQUssTUFBTSxDQUFBLFdBQUEsRUFBYyxLQUFLLE9BQU8sQ0FBQSxDQUN6RCxDQUVBLE1BQU0sUUFBQSxDQUFZQyxDQUFBQSxD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RSxDQUFBQSxDQUFRLENBQUEsQ0FDWixHQUFJbkMsQ0FBQUEsQ0FBSSxFQUFJaUMsQ0FBQUEsQ0FBVSxNQUFBLEVBQVVBLEVBQVVqQyxDQUFDLENBQUEsR0FBTSxHQUFLaUMsQ0FBQUEsQ0FBVWpDLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUFLaUMsRUFBVWpDLENBQUFBLENBQUksQ0FBQyxJQUFNLENBQUEsQ0FDbkdtQyxDQUFBQSxDQUFRLFVBRVJuQyxDQUFBQSxDQUFJLENBQUEsQ0FBSWlDLENBQUFBLENBQVUsTUFBQSxFQUNsQkEsQ0FBQUEsQ0FBVWpDLENBQUMsSUFBTSxDQUFBLEVBQ2pCaUMsQ0FBQUEsQ0FBVWpDLEVBQUksQ0FBQyxDQUFBLEdBQU0sR0FDckJpQyxDQUFBQSxDQUFVakMsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQ3JCaUMsQ0FBQUEsQ0FBVWpDLEVBQUksQ0FBQyxDQUFBLEdBQU0sRUFFckJtQyxDQUFBQSxDQUFRLENBQUEsQ0FBQSxLQUNILENBQ0xuQyxDQUFBQSxFQUFBQSxDQUNBLFFBQ0YsQ0FFQSxJQUFNb0MsQ0FBQUEsQ0FBV3BDLENBQUFBLENBQUltQyxFQUNyQixHQUFJQyxDQUFBQSxDQUFXLEVBQWtCSCxDQUFBQSxDQUFVLE1BQUEsQ0FBUSxNQUVuRCxJQUFJSSxDQUFBQSxDQUFTSixDQUFBQSxDQUFVLE1BQUEsQ0FDdkIsSUFBQSxJQUFTSyxDQUFBQSxDQUFJRixFQUFXLENBQUEsQ0FBaUJFLENBQUFBLENBQUlMLEVBQVUsTUFBQSxDQUFTLENBQUEsQ0FBR0ssSUFDakUsR0FDRUwsQ0FBQUEsQ0FBVUssQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUNqQkwsQ0FBQUEsQ0FBVUssRUFBSSxDQUFDLENBQUEsR0FBTSxJQUNwQkwsQ0FBQUEsQ0FBVUssQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQU1BLENBQUFBLENBQUksQ0FBQSxDQUFJTCxDQUFBQSxDQUFVLE1BQUEsRUFBVUEsRUFBVUssQ0FBQUEsQ0FBSSxDQUFDLElB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LENBQUFBLEdBQU0sQ0FBQyxDQUFBLENBQ3ZEbUUsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLZ0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxDQUFBQSxDQUFJLE9BQVNBLENBQUFBLENBQUksUUFBUSxFQUU1RGhDLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRXZILEVBQU8sRUFBRSxDQUFBLENBQ2R1SCxFQUFH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LElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBSyxLQUFBLENBQU8sSUFBQSxDQUFLLEVBQUEsQ0FBRyxJQUFBLENBQUssTUFBQSxDQUFRbUIsZUFBZSxFQUNoRixPQUFBL0IsV0FBQUEsQ0FBWSxhQUFhZ0IsQ0FBQUEsQ0FBTSxVQUFBLENBQVc0USxDQUFLLENBQUEsQ0FBRyxzQkFBc0IsQ0FBQSxDQUNqRTVRLENBQ1QsQ0FDRiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBjbGFzcyBMYXp5PFQ+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWFrZVZhbHVlOiAoKSA9PiBUKSB7fVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubWFrZVZhbHVlKCk7XG4gICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl92YWx1ZSE7XG4gIH1cblxuICBnZXQgaW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQgfCB1bmRlZmluZWQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHJldHVybjtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLy8gV2hlbiBwcm92aWRlZCwgdXNlUmV0cnkgYmFpbHMgb3V0IGltbWVkaWF0ZWx5IG9uIGFib3J0IGluc3RlYWQgb2YgcmV0cnlpbmcuIFRoZSBzaWduYWxcbiAgLy8gaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIG11c3Qgd2lyZSBpdCB3aGVyZSBpdCBtYXR0ZXJzIChlLmcuIGZldGNoLCBTMyBzZW5kKS5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0LCBzaWduYWwgfTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBSZXR1cm5UeXBlPEZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+IHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihudWxsKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZEICsgbmF0aXZlIGNvbnRleHQuXG4gICAgICBhd2FpdCB0aGlzLl9jdHguY2xvc2VPdXRwdXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCBIYXJkd2FyZUZyYW1lc0NvbnRleHQsIFBhY2tldCwgUmF0aW9uYWwsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGh3RnJhbWVzQ3R4PzogSGFyZHdhcmVGcmFtZXNDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIGN0eC5jb2RlY0lkID0gb3B0cy5jb2RlYy5pZDtcbiAgY3R4LndpZHRoID0gb3B0cy53aWR0aDtcbiAgY3R4LmhlaWdodCA9IG9wdHMuaGVpZ2h0O1xuICBjdHgucGl4ZWxGb3JtYXQgPSBvcHRzLnBpeGVsRm9ybWF0O1xuICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5mcHMpO1xuICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKG9wdHMuZnBzLCAxKTtcbiAgY3R4LmdvcFNpemUgPSBvcHRzLmZwcyAqIDI7XG4gIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICBpZiAob3B0cy5jb2RlY1RhZykgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgaWYgKG9wdHMuY29sb3JSYW5nZSAhPT0gdW5kZWZpbmVkKSBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgaWYgKG9wdHMuaHdGcmFtZXNDdHgpIGN0eC5od0ZyYW1lc0N0eCA9IG9wdHMuaHdGcmFtZXNDdHg7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMub3B0aW9ucyA/PyB7fSkpIGN0eC5zZXRPcHRpb24oaywgdik7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIob3B0cy5jb2RlYywgbnVsbCksIGxhYmVsKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGcmFtZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KTogRnJhbWUge1xuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICBmcmFtZS5hbGxvYygpO1xuICBmcmFtZS5mb3JtYXQgPSBwaXhGbXQ7XG4gIGZyYW1lLndpZHRoID0gd2lkdGg7XG4gIGZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmdldEJ1ZmZlcigwKSwgXCJmcmFtZS5nZXRCdWZmZXJcIik7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYWNrZXQoKTogUGFja2V0IHtcbiAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICBwa3QuYWxsb2MoKTtcbiAgcmV0dXJuIHBrdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluUGFja2V0cyhjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInJlY2VpdmVQYWNrZXRcIik7XG4gICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgIHBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIEZpbHRlckNvbnRleHQsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5jb25zdCBTQU1QTEVfRk1UX05BTUU6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7IFtBVl9TQU1QTEVfRk1UX0ZMVF06IFwiZmx0XCIsIFtBVl9TQU1QTEVfRk1UX0ZMVFBdOiBcImZsdHBcIiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRW5jb2Rlck9wdGlvbnMge1xuICBvdXRTYW1wbGVSYXRlOiBudW1iZXI7XG4gIG91dFNhbXBsZUZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgY29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGlvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9vdXRSYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgX291dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgcHJpdmF0ZSBfZnJhbWVTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZ3JhcGg/OiBGaWx0ZXJHcmFwaDtcbiAgcHJpdmF0ZSBfYnVmU3JjPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfYnVmU2luaz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2luUmF0ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgc3RyZWFtOiBTdHJlYW0sIG91dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUCkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fb3V0UmF0ZSA9IGN0eC5zYW1wbGVSYXRlO1xuICAgIHRoaXMuX291dEZtdCA9IG91dEZtdDtcbiAgICB0aGlzLl9mcmFtZVNpemUgPSBjdHguZnJhbWVTaXplO1xuICAgIHRoaXMuX3BrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmFsbG9jKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEF1ZGlvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUob3B0cy5jb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7b3B0cy5jb2RlY05hbWV9YCk7XG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvcHRzLm91dFNhbXBsZUZtdDtcbiAgICBjdHguc2FtcGxlUmF0ZSA9IG9wdHMub3V0U2FtcGxlUmF0ZTtcbiAgICBjdHguY2hhbm5lbExheW91dCA9IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5vdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICAgIGlmIChvcHRzLmdsb2JhbEhlYWRlcikgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgdGhpcy5fZ3JhcGggPSBncmFwaDtcbiAgICB0aGlzLl9idWZTcmMgPSBidWZTcmM7XG4gICAgdGhpcy5fYnVmU2luayA9IGJ1ZlNpbms7XG4gIH1cblxuICBhc3luYyBlbmNvZGUocGNtOiBCdWZmZXIsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fYnVmU3JjIHx8ICF0aGlzLl9pblJhdGUpIHJldHVybjtcbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSBpZiAoIWlzRmluaXRlKHNyY1tpXSEpKSBzcmNbaV0gPSAwO1xuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICBidWZbaV0gPSBieXRlO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRXcml0ZXIge1xuICBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICB3KHZhbDogbnVtYmVyLCBuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLmJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH1cbiAgZmxhZyh2YWw6IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICB0aGlzLmJpdHMucHVzaCh2YWwgPyAxIDogMCk7XG4gIH1cbiAgdWUodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCB2ID0gdmFsICsgMTtcbiAgICBjb25zdCBsZW4gPSAzMiAtIE1hdGguY2x6MzIodik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHRoaXMuYml0cy5wdXNoKDApO1xuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgfVxuICBhbGlnbihwYWQ6IG51bWJlcikge1xuICAgIHdoaWxlICh0aGlzLmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgdGhpcy5iaXRzLnB1c2gocGFkKTtcbiAgfVxuICBjb3B5KHNyYzogbnVtYmVyW10sIHN0YXJ0OiBudW1iZXIsIGxlbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgdGhpcy5iaXRzLnB1c2goc3JjW3N0YXJ0ICsgaV0hKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkgdGhpcy5fYml0cy5wdXNoKChkYXRhW2ldISA+PiBiKSAmIDEpO1xuICAgIH1cbiAgfVxuICBnZXQgYml0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYml0cztcbiAgfVxuICByZWFkKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICByZXR1cm4gdmFsIC0gMTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuY29uc3QgTkFMX0hFQURFUl9TSVpFID0gMjtcbmNvbnN0IEFOTkVYX0JfU1RBUlRfQ09ERSA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG5cbmV4cG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgTkFMX0hFQURFUl9TSVpFIH07XG5cbi8vIEhFVkMgTkFMIHVuaXQgdHlwZXMgKFQtUkVDLUguMjY1IFRhYmxlIDctMSlcbmV4cG9ydCBjb25zdCBOQUxfQkxBX1dfTFAgPSAxNjtcbmV4cG9ydCBjb25zdCBOQUxfSURSX1dfUkFETCA9IDE5O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfTl9MUCA9IDIwO1xuZXhwb3J0IGNvbnN0IE5BTF9SU1ZfSVJBUF9WQ0wyMyA9IDIzO1xuZXhwb3J0IGNvbnN0IE5BTF9WUFMgPSAzMjtcbmV4cG9ydCBjb25zdCBOQUxfU1BTID0gMzM7XG5leHBvcnQgY29uc3QgTkFMX1BQUyA9IDM0O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfUFJFRklYID0gMzk7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9TVUZGSVggPSA0MDtcblxuZXhwb3J0IGludGVyZmFjZSBOYWxVbml0IHtcbiAgdHlwZTogbnVtYmVyO1xuICBsYXllcklkOiBudW1iZXI7XG4gIGRhdGE6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYWxUeXBlKGhlYWRlcjA6IG51bWJlciwgaGVhZGVyMTogbnVtYmVyKTogeyB0eXBlOiBudW1iZXI7IGxheWVySWQ6IG51bWJlcjsgdGVtcG9yYWxJZDogbnVtYmVyIH0ge1xuICBjb25zdCB0eXBlID0gKGhlYWRlcjAgPj4gMSkgJiAweDNmO1xuICBjb25zdCBsYXllcklkID0gKChoZWFkZXIwICYgMSkgPDwgNSkgfCAoKGhlYWRlcjEgPj4gMykgJiAweDFmKTtcbiAgY29uc3QgdGVtcG9yYWxJZCA9IGhlYWRlcjEgJiAweDA3O1xuICByZXR1cm4geyB0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOYWxIZWFkZXIodHlwZTogbnVtYmVyLCBsYXllcklkOiBudW1iZXIsIHRlbXBvcmFsSWQ6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBieXRlMCA9ICgodHlwZSAmIDB4M2YpIDw8IDEpIHwgKChsYXllcklkID4+IDUpICYgMSk7XG4gIGNvbnN0IGJ5dGUxID0gKChsYXllcklkICYgMHgxZikgPDwgMykgfCAodGVtcG9yYWxJZCAmIDB4MDcpO1xuICByZXR1cm4gW2J5dGUwLCBieXRlMV07XG59XG5cbi8qKiBTcGxpdCBBbm5leCBCIGJpdHN0cmVhbSBpbnRvIE5BTCB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbTogQnVmZmVyKTogTmFsVW5pdFtdIHtcbiAgY29uc3QgbmFsczogTmFsVW5pdFtdID0gW107XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICBsZXQgc2NMZW4gPSAwO1xuICAgIGlmIChpICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ldID09PSAwICYmIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAyXSA9PT0gMSkge1xuICAgICAgc2NMZW4gPSAzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpICsgNCA8IGJpdHN0cmVhbS5sZW5ndGggJiZcbiAgICAgIGJpdHN0cmVhbVtpXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAyXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAzXSA9PT0gMVxuICAgICkge1xuICAgICAgc2NMZW4gPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYWxTdGFydCA9IGkgKyBzY0xlbjtcbiAgICBpZiAobmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkUgPiBiaXRzdHJlYW0ubGVuZ3RoKSBicmVhaztcblxuICAgIGxldCBuYWxFbmQgPSBiaXRzdHJlYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGogPSBuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRTsgaiA8IGJpdHN0cmVhbS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgYml0c3RyZWFtW2pdID09PSAwICYmXG4gICAgICAgIGJpdHN0cmVhbVtqICsgMV0gPT09IDAgJiZcbiAgICAgICAgKGJpdHN0cmVhbVtqICsgMl0gPT09IDEgfHwgKGogKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baiArIDJdID09PSAwICYmIGJpdHN0cmVhbVtqICsgM10gPT09IDEpKVxuICAgICAgKSB7XG4gICAgICAgIG5hbEVuZCA9IGo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdHlwZSwgbGF5ZXJJZCB9ID0gcGFyc2VOYWxUeXBlKGJpdHN0cmVhbVtuYWxTdGFydF0hLCBiaXRzdHJlYW1bbmFsU3RhcnQgKyAxXSEpO1xuICAgIG5hbHMucHVzaCh7IHR5cGUsIGxheWVySWQsIGRhdGE6IGJpdHN0cmVhbS5zdWJhcnJheShuYWxTdGFydCwgbmFsRW5kKSB9KTtcbiAgICBpID0gbmFsRW5kO1xuICB9XG5cbiAgcmV0dXJuIG5hbHM7XG59XG5cbi8qKiBSZXdyaXRlIG51aF9sYXllcl9pZCBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxMYXllcklkKG5hbDogQnVmZmVyLCBsYXllcklkOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IHR5cGUsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIodHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJld3JpdGUgbmFsX3VuaXRfdHlwZSBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxUeXBlKG5hbDogQnVmZmVyLCBuZXdUeXBlOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IGxheWVySWQsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIobmV3VHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJlbW92ZSBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMg4oaSIDAwIDAwKSBmcm9tIFJCU1AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICsgMiA8IGRhdGEubGVuZ3RoICYmIGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDMpIHtcbiAgICAgIG91dC5wdXNoKDAsIDApO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChkYXRhW2ldISk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKiogSW5zZXJ0IGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMykgZm9yIEFubmV4IEIgY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKG5hbDogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBvdXQucHVzaChuYWxbMF0hLCBuYWxbMV0hKTtcbiAgbGV0IHplcm9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBuYWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoemVyb3MgPT09IDIgJiYgbmFsW2ldISA8PSAzKSB7XG4gICAgICBvdXQucHVzaCgzKTtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgaWYgKG5hbFtpXSA9PT0gMCkgemVyb3MrKztcbiAgICBlbHNlIHplcm9zID0gMDtcbiAgICBvdXQucHVzaChuYWxbaV0hKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cbiIsIi8vIFBhdGNoIE5WRU5DIG91dHB1dCB0byBjb25mb3JtIHRvIEFwcGxlIEhFVkMgVmlkZW8gd2l0aCBBbHBoYSBJbnRlcm9wZXJhYmlsaXR5IFByb2ZpbGUuXG4vLyBTcGVjOiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vYXYtZm91bmRhdGlvbi9IRVZDLVZpZGVvLXdpdGgtQWxwaGEtSW50ZXJvcGVyYWJpbGl0eS1Qcm9maWxlLnBkZlxuLy8gU2xpY2UgcGFyc2VyIGlzIGNvbmZpZy1kcml2ZW46IE52ZW5jSGV2Y0NvbmZpZyBmcm9tIHBhcnNlLnRzIGRlcml2ZXMgZmxhZ3MgYXQgZW5jb2RlciBpbml0LlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgYWRkRW11bGF0aW9uUHJldmVudGlvbixcbiAgTkFMX0JMQV9XX0xQLFxuICBOQUxfUlNWX0lSQVBfVkNMMjMsXG4gIE5BTF9TUFMsXG4gIE5BTF9WUFMsXG4gIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuLy8gUFRMIGJpdCBvZmZzZXRzIHdpdGhpbiBlbXVsYXRpb24tcHJldmVudGlvbi1zdHJpcHBlZCBOQUwgKE5BTCBoZWFkZXIgaW5jbHVkZWQpLlxuY29uc3QgVlBTX1BUTF9CSVQgPSA0ODsgLy8gMTYgKE5BTCBoZHIpICsgMzIgKFZQUyBwcmVmaXgpXG5jb25zdCBTUFNfUFRMX0JJVCA9IDI0OyAvLyAxNiAoTkFMIGhkcikgKyA4IChTUFMgcHJlZml4KVxuY29uc3QgUFRMX1RJRVJfQklUID0gMjtcbmNvbnN0IFBUTF9DT01QQVQyX0JJVCA9IDEwOyAvLyBwcm9maWxlX3NwYWNlKDIpICsgdGllcigxKSArIGlkYyg1KSArIGNvbXBhdFswLDFdKDIpXG5jb25zdCBTTElDRV9UWVBFX0IgPSAwO1xuY29uc3QgU0xJQ0VfVFlQRV9QID0gMTtcblxuZnVuY3Rpb24gc2V0Qml0KGJ1ZjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgdmFsdWU6IDAgfCAxKTogdm9pZCB7XG4gIGNvbnN0IGJ5dGUgPSBiaXRPZmZzZXQgPj4gMztcbiAgY29uc3QgbWFzayA9IDEgPDwgKDcgLSAoYml0T2Zmc2V0ICYgNykpO1xuICBjb25zdCBjdXIgPSBidWZbYnl0ZV0gPz8gMDtcbiAgYnVmW2J5dGVdID0gdmFsdWUgPyBjdXIgfCBtYXNrIDogY3VyICYgfm1hc2s7XG59XG5cbmZ1bmN0aW9uIHBhdGNoUHRsKG5hbERhdGE6IEJ1ZmZlciwgcHRsU3RhcnRCaXQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbERhdGEpO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfVElFUl9CSVQsIDApO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfQ09NUEFUMl9CSVQsIDEpO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihyYnNwKTtcbn1cblxuLyoqIFBhdGNoIGV2ZXJ5IFZQUy9TUFMgTkFMIGluIGFuIEFubmV4IEIgYml0c3RyZWFtIHNvIFBUTCBtYXRjaGVzIEFwcGxlL3gyNjUuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hIZXZjQWxwaGFQdGwoYml0c3RyZWFtOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhiaXRzdHJlYW0pO1xuICBpZiAobmFscy5sZW5ndGggPT09IDApIHJldHVybiBiaXRzdHJlYW07XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgbmFscykge1xuICAgIGxldCBkYXRhID0gbmFsLmRhdGE7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFZQU19QVExfQklUKTtcbiAgICBlbHNlIGlmIChuYWwudHlwZSA9PT0gTkFMX1NQUykgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBTUFNfUFRMX0JJVCk7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG4vLyDilIDilIDilIAgdWUodikgcmV3cml0ZSBoZWxwZXJzIChTUFMvUFBTIOKAlCBSQlNQIGNhbiBncm93IGZyZWVseSwgbm8gQ0FCQUMgdHJhaWxpbmcpIOKUgOKUgFxuXG5mdW5jdGlvbiByZXdyaXRlT25lVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVUd29VZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsMTogbnVtYmVyLCBuZXdWYWwyOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwxKTtcbiAgYncudWUobmV3VmFsMik7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSBidy5iaXRzLnB1c2goMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuLyoqIEFscGhhIFNQUzogc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU3BzKHNwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgU1BTX1NFUV9JRF9CSVQgPSBTUFNfUFRMX0JJVCArIDk2OyAvLyBQVEwgaXMgOTYgYml0cyBmb3Igb3VyIHByb2ZpbGUgY29uZmlnXG4gIHJldHVybiByZXdyaXRlT25lVWUoc3BzLCBTUFNfU0VRX0lEX0JJVCwgMSk7XG59XG5cbi8qKiBBbHBoYSBQUFM6IHBwc19waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLCBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFQcHMocHBzOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gcmV3cml0ZVR3b1VlKHBwcywgMTYgLyogYWZ0ZXIgTkFMIGhlYWRlciAqLywgMSwgMSk7XG59XG5cbi8vIOKUgOKUgOKUgCBTbGljZSBoZWFkZXIgcmV3cml0ZSAobXVzdCBwcmVzZXJ2ZSBDQUJBQyBieXRlIGFsaWdubWVudCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHJlYWRTZShicjogQml0UmVhZGVyKTogbnVtYmVyIHtcbiAgY29uc3QgdWUgPSBici5yZWFkVWUoKTtcbiAgcmV0dXJuIHVlICYgMSA/ICh1ZSArIDEpID4+IDEgOiAtKHVlID4+IDEpO1xufVxuXG4vLyBJbmxpbmUgc3RfcmVmX3BpY19zZXQgd2hlbiBzbGljZSBoYXMgc2hvcnRfdGVybV9yZWZfcGljX3NldF9zcHNfZmxhZz0wLlxuLy8gc3RScHNJZHggPSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMgc28gaW50ZXJfcmVmX3BpY19zZXRfcHJlZGljdGlvbiBtYXkgdXNlIHByZXYgc2V0LlxuZnVuY3Rpb24gcGFyc2VJbmxpbmVTdFJlZlBpY1NldChicjogQml0UmVhZGVyLCBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgaW50ZXJGbGFnID0gYnIucmVhZCgxKTsgLy8gaW50ZXJfcmVmX3BpY19zZXRfcHJlZGljdGlvbl9mbGFnXG4gIGlmIChpbnRlckZsYWcpIHtcbiAgICBjb25zdCBkZWx0YUlkeE1pbnVzMSA9IGJyLnJlYWRVZSgpOyAvLyBzdFJwc0lkeCA9PSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIHByZXNlbnRcbiAgICBpZiAoZGVsdGFJZHhNaW51czEgIT09IDApIHRocm93IG5ldyBFcnJvcihgYXBwbGVfYWxwaGE6IHVuZXhwZWN0ZWQgZGVsdGFfaWR4X21pbnVzMT0ke2RlbHRhSWR4TWludXMxfWApO1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlbHRhX3Jwc19zaWduXG4gICAgYnIucmVhZFVlKCk7IC8vIGFic19kZWx0YV9ycHNfbWludXMxXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPD0gbnVtRGVsdGFQb2NzU2V0MDsgaisrKSB7XG4gICAgICBjb25zdCB1c2VkID0gYnIucmVhZCgxKTtcbiAgICAgIGlmICghdXNlZCkgYnIucmVhZCgxKTsgLy8gdXNlX2RlbHRhX2ZsYWdcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgfVxufVxuXG4vKiogUGFyc2Ugc2xpY2Vfc2VnbWVudF9oZWFkZXIgdXAgdG8gYnl0ZV9hbGlnbm1lbnQuIFJldHVybnMgYml0IHBvc2l0aW9uIEIgKGVuZCBvZiBoZWFkZXIgY29udGVudCkuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclRvQWxpZ25tZW50KGJyOiBCaXRSZWFkZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBudW1iZXIge1xuICBici5yZWFkKDE2KTsgLy8gc2tpcCBOQUwgaGVhZGVyXG4gIGlmIChici5yZWFkKDEpICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogZXhwZWN0ZWQgZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZz0xXCIpO1xuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkgYnIucmVhZCgxKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuICBici5yZWFkVWUoKTsgLy8gc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3Qgc2xpY2VUeXBlID0gYnIucmVhZFVlKCk7XG4gIGlmICghaXNJcmFwKSB7XG4gICAgYnIucmVhZChjZmcubG9nMk1heFBvY0xzYik7IC8vIHNsaWNlX3BpY19vcmRlcl9jbnRfbHNiXG4gICAgY29uc3Qgc3RSZWZQaWNTZXRTcHNGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAoIXN0UmVmUGljU2V0U3BzRmxhZykgcGFyc2VJbmxpbmVTdFJlZlBpY1NldChiciwgY2ZnLm51bURlbHRhUG9jc1NldDApO1xuICAgIGVsc2UgaWYgKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzID4gMSkgYnIucmVhZChNYXRoLmNlaWwoTWF0aC5sb2cyKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzKSkpO1xuICAgIGlmIChjZmcubG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGxvbmdfdGVybV9yZWZfcGljcyBwYXRoIHVuaW1wbGVtZW50ZWRcIik7XG4gICAgaWYgKGNmZy5zcHNUZW1wb3JhbE12cEVuYWJsZWQpIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWdcbiAgfVxuICBpZiAoY2ZnLnNhb0VuYWJsZWQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fbHVtYV9mbGFnXG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2Nocm9tYV9mbGFnXG4gIH1cbiAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9QIHx8IHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAob3ZlcnJpZGVGbGFnKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikgYnIucmVhZFVlKCk7XG4gICAgfVxuICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikgYnIucmVhZCgxKTsgLy8gbXZkX2wxX3plcm9fZmxhZ1xuICAgIGlmIChjZmcuY2FiYWNJbml0UHJlc2VudCkgYnIucmVhZCgxKTsgLy8gY2FiYWNfaW5pdF9mbGFnXG4gICAgYnIucmVhZFVlKCk7IC8vIGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9jYW5kXG4gIH1cbiAgcmVhZFNlKGJyKTsgLy8gc2xpY2VfcXBfZGVsdGFcbiAgaWYgKGNmZy5wcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZykgYnIucmVhZCgxKTsgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWdcbiAgcmV0dXJuIGJyLnBvcztcbn1cblxuLyoqXG4gKiBSZXdyaXRlIGFscGhhIHNsaWNlIGhlYWRlcjogc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS5cbiAqIFRoZSArMi1iaXQgc2hpZnQgaXMgYWJzb3JiZWQgYnkgZW1pdHRpbmcgYSBmcmVzaCBieXRlX2FsaWdubWVudCB0aGVuIGFwcGVuZGluZyB0aGVcbiAqIG9yaWdpbmFsIENBQkFDIHNsaWNlX3NlZ21lbnRfZGF0YSBieXRlcyB2ZXJiYXRpbS4gQ0FCQUMgYnl0ZSBib3VuZGFyeSBpcyBwcmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihzbGljZTogQnVmZmVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc2xpY2UpO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG5cbiAgY29uc3QgcHJvYmUgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBCID0gcGFyc2VIZWFkZXJUb0FsaWdubWVudChwcm9iZSwgbmFsVHlwZSwgY2ZnKTtcbiAgY29uc3Qgb2xkQWxpZ25CaXRzID0gQiAlIDggPT09IDAgPyA4IDogOCAtIChCICUgOCk7XG4gIGNvbnN0IHNsaWNlRGF0YUJ5dGVPZmZzZXQgPSAoQiArIG9sZEFsaWduQml0cykgLyA4O1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gTkFMIGhlYWRlclxuICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWdcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuXG4gIGJyLnJlYWRVZSgpOyAvLyBkaXNjYXJkIG9sZCBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBidy51ZSgxKTsgLy8gbmV3IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG5cbiAgd2hpbGUgKGJyLnBvcyA8IEIpIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gY29weSByZXN0IG9mIGhlYWRlciBiaXRzXG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBieXRlX2FsaWdubWVudDogcmJzcF9hbGlnbm1lbnRfYml0X29uZVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSBidy5iaXRzLnB1c2goMCk7XG5cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24oQnVmZmVyLmNvbmNhdChbcGFja0JpdHMoYncuYml0cyksIHJic3Auc3ViYXJyYXkoc2xpY2VEYXRhQnl0ZU9mZnNldCldKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IGFkZEVtdWxhdGlvblByZXZlbnRpb24sIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24gfSBmcm9tIFwiLi9uYWxcIjtcblxuaW50ZXJmYWNlIFBhcnNlZFBUTCB7XG4gIHB0bFN0YXJ0OiBudW1iZXI7XG4gIHB0bEVuZDogbnVtYmVyO1xuICBwdGxCaXRzOiBudW1iZXJbXTtcbiAgbWF4U3ViTGF5ZXJzTWludXMxOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQVEwodnBzRGF0YTogQnVmZmVyKTogUGFyc2VkUFRMIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24odnBzRGF0YSkpO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyB2cHNfaWRcbiAgYnIucmVhZCgyKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbCArIGF2YWlsYWJsZVxuICBpZiAoYnIucmVhZCg2KSA+IDApIHJldHVybiB1bmRlZmluZWQ7IC8vIGFscmVhZHkgbXVsdGktbGF5ZXJcbiAgY29uc3QgbWF4U3ViTGF5ZXJzTWludXMxID0gYnIucmVhZCgzKTtcbiAgYnIucmVhZCgxICsgMTYpOyAvLyB0ZW1wb3JhbF9uZXN0aW5nICsgcmVzZXJ2ZWRcblxuICBjb25zdCBwdGxTdGFydCA9IGJyLnBvcztcbiAgYnIucmVhZCg5Nik7IC8vIGdlbmVyYWwgUFRMIChwcm9maWxlX3NwYWNlICsgdGllciArIGlkYyArIGNvbXBhdCArIGNvbnN0cmFpbnRzICsgbGV2ZWwpXG4gIGlmIChtYXhTdWJMYXllcnNNaW51czEgPiAwKSBici5yZWFkKG1heFN1YkxheWVyc01pbnVzMSAqIDIgKyAoOCAtIG1heFN1YkxheWVyc01pbnVzMSkgKiAyKTtcbiAgcmV0dXJuIHsgcHRsU3RhcnQsIHB0bEVuZDogYnIucG9zLCBwdGxCaXRzOiBici5iaXRzLCBtYXhTdWJMYXllcnNNaW51czEgfTtcbn1cblxuLyoqIFdyaXRlIGJhc2UgVlBTIGZpZWxkcyBmb3IgMi1sYXllciBhbHBoYS4gKi9cbmZ1bmN0aW9uIHdyaXRlQmFzZVZQUyhidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCkge1xuICBidy53KDB4NDAwMSwgMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LncoMCwgNCk7IC8vIHZwc19pZFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfYXZhaWxhYmxlXG4gIGJ3LncoMSwgNik7IC8vIG1heF9sYXllcnNfbWludXMxID0gMVxuICBidy53KHB0bC5tYXhTdWJMYXllcnNNaW51czEsIDMpO1xuICAvLyB0ZW1wb3JhbF9uZXN0aW5nOiB0cnVlIHdoZW4gc2luZ2xlIHN1Yi1sYXllciAoYWxsIHJlZnMgbGF5ZXIgMClcbiAgYncuZmxhZyhwdGwubWF4U3ViTGF5ZXJzTWludXMxID09PSAwKTtcbiAgYncudygweGZmZmYsIDE2KTsgLy8gcmVzZXJ2ZWRcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy5mbGFnKDEpOyAvLyBzdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhEZWNQaWNCdWZmZXJpbmcgLSAxXG4gICAgYncudWUoMik7IC8vIG51bVJlb3JkZXJQaWNzXG4gICAgYncudWUoNCk7IC8vIG1heExhdGVuY3lJbmNyZWFzZSArIDFcbiAgfVxuXG4gIGJ3LncoMSwgNik7IC8vIG1heF9udWhfbGF5ZXJfaWQgPSAxXG4gIGJ3LnVlKDEpOyAvLyBudW1fbGF5ZXJfc2V0c19taW51czEgPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzBdXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzFdXG4gIGJ3LmZsYWcoMCk7IC8vIHRpbWluZ19pbmZvX3ByZXNlbnRcbiAgYncuZmxhZygxKTsgLy8gdnBzX2V4dGVuc2lvbl9mbGFnXG4gIGJ3LmFsaWduKDEpOyAvLyBleHRlbnNpb24gYWxpZ25tZW50IGJpdHMgPSAxXG59XG5cbi8qKiBXcml0ZSBWUFMgZXh0ZW5zaW9uIG1hdGNoaW5nIHgyNjUgNC4xIEVOQUJMRV9BTFBIQS4gKi9cbmZ1bmN0aW9uIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAvLyBFeHRlbnNpb24gUFRMOiBsZXZlbF9pZGMgb25seSAocHJvZmlsZVByZXNlbnRGbGFnPTApXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxFbmQgLSA4LCA4KTtcbiAgaWYgKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIGJ3LncoMCwgMik7XG4gICAgZm9yIChsZXQgaSA9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkgPCA4OyBpKyspIGJ3LncoMCwgMik7XG4gIH1cblxuICBidy5mbGFnKDApOyAvLyBzcGxpdHRpbmdfZmxhZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIGJ3LmZsYWcoaSA9PT0gMiB8fCBpID09PSAzKTsgLy8gc2NhbGFiaWxpdHk6IHNwYXRpYWwgKyBhdXhcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblswXSA9IDFcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblsxXSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbnVoX2xheWVyX2lkX3ByZXNlbnRcbiAgYncudygxLCA2KTsgLy8gbGF5ZXJfaWRfaW5fbnVoWzFdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVsxXSA9IEFVWF9BTFBIQVxuICBidy53KDAsIDQpOyAvLyB2aWV3X2lkX2xlbiA9IDBcblxuICBidy5mbGFnKDApOyAvLyBkaXJlY3RfZGVwZW5kZW5jeV9mbGFnWzFdWzBdXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX2xheWVyX3NldHNcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyc19tYXhfbWludXMxX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gbWF4X3RpZF9yZWZfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X3JlZl9sYXllcnNfYWN0aXZlXG5cbiAgLy8gRkZtcGVnIGxvb3BzIGZyb20gaW5kZXggMiB0byBuYl9wdGwtMSwgc28gbnB0bF9tMT0yIOKGkiAxIGVudHJ5IGF0IGluZGV4IDJcbiAgYncudWUoMik7IC8vIHZwc19udW1fcHJvZmlsZV90aWVyX2xldmVsX21pbnVzMVxuICBidy5mbGFnKDEpOyAvLyBwcm9maWxlX3ByZXNlbnRfZmxhZ1syXVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX29sc3NcbiAgYncudygwLCAyKTsgLy8gZGVmYXVsdF9vdXRwdXRfbGF5ZXJfaWRjXG4gIGJ3LncoMSwgMik7IC8vIHB0bF9pZHhbMV1bMF0gPSAxIChjZWlsX2xvZzIoMykgPSAyIGJpdHMpXG4gIGJ3LncoMiwgMik7IC8vIHB0bF9pZHhbMV1bMV0gPSAyXG5cbiAgYncudWUoMCk7IC8vIHZwc19udW1fcmVwX2Zvcm1hdHNfbWludXMxXG4gIGJ3Lncod2lkdGgsIDE2KTtcbiAgYncudyhoZWlnaHQsIDE2KTtcbiAgYncuZmxhZygxKTsgLy8gY2hyb21hX2FuZF9iaXRfZGVwdGhfdnBzX3ByZXNlbnRcbiAgYncudygxLCAyKTsgLy8gY2hyb21hX2Zvcm1hdF9pZGMgPSA0OjI6MFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgYncuZmxhZygwKTsgLy8gY29uZm9ybWFuY2Vfd2luZG93X3Zwc19mbGFnXG5cbiAgYncuZmxhZygxKTsgLy8gbWF4X29uZV9hY3RpdmVfcmVmX2xheWVyXG4gIGJ3LmZsYWcoMCk7IC8vIHBvY19sc2JfYWxpZ25lZFxuICBidy5mbGFnKDEpOyAvLyBwb2NfbHNiX25vdF9wcmVzZW50XG5cbiAgLy8gRFBCIGZvciBPTFMgMSAoMiBsYXllcnMsIDEgc3ViLWxheWVyKVxuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJfZmxhZ19pbmZvX3ByZXNlbnRcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMClcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMSlcbiAgYncudWUoMCk7IC8vIG1heF9udW1fcmVvcmRlcl9waWNzXG4gIGJ3LnVlKDApOyAvLyBtYXhfbGF0ZW5jeV9pbmNyZWFzZVxuXG4gIGJ3LnVlKDApOyAvLyBkaXJlY3RfZGVwX3R5cGVfbGVuX21pbnVzMlxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X2RpcmVjdF9kZXBlbmRlbmN5X2ZsYWdcbiAgYncudWUoMCk7IC8vIG5vbl92dWlfZXh0ZW5zaW9uX2xlbmd0aFxuICBidy5mbGFnKDApOyAvLyB2cHNfdnVpX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gdnBzX2V4dGVuc2lvbjJfZmxhZ1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGxldGUgYWxwaGEgVlBTIGZyb20gc2NyYXRjaCwgdXNpbmcgdGhlIG9yaWdpbmFsIE5WRU5DIFZQU1xuICogb25seSBhcyBhIHNvdXJjZSBmb3IgdGhlIFBUTCAocHJvZmlsZS90aWVyL2xldmVsKSBieXRlcy5cbiAqIE1hdGNoZXMgeDI2NSA0LjEgRU5BQkxFX0FMUEhBIFZQUyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhVlBTKHZwc0RhdGE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBwdGwgPSBleHRyYWN0UFRMKHZwc0RhdGEpO1xuICBpZiAoIXB0bCkgcmV0dXJuIHZwc0RhdGE7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIHdyaXRlQmFzZVZQUyhidywgcHRsKTtcbiAgd3JpdGVWUFNFeHRlbnNpb24oYncsIHB0bCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBSQlNQIHN0b3AgYml0XG4gIGJ3LmFsaWduKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHJld3JpdGVBbHBoYVBwcywgcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIsIHJld3JpdGVBbHBoYVNwcyB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgZW5jb2RlTmFsSGVhZGVyLFxuICBOQUxfU0VJX1BSRUZJWCxcbiAgTkFMX1NQUyxcbiAgTkFMX1BQUyxcbiAgTkFMX1ZQUyxcbiAgdHlwZSBOYWxVbml0LFxuICByZXdyaXRlTmFsTGF5ZXJJZCxcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG4vLyBCR1JBIGFscGhhIOKGkiBZIHBsYW5lIG9mIHBhY2tlZCBZVVY0MjBQLiBDYWxsZXIgcHJlLWZpbGxzIFVWPTEyOC5cbi8vIFVpbnQzMiBwYXRoOiBCR1JBIExFIHUzMiA+Pj4gMjQgPSBBIGJ5dGUuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZTogRnJhbWUsIGJ1ZjogQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gIGNvbnN0IHNyY0xzID0gYmdyYUZyYW1lLmxpbmVzaXplPy5bMF07XG4gIGlmICghc3JjIHx8ICFzcmNMcykgdGhyb3cgbmV3IEVycm9yKFwiZXh0cmFjdEFscGhhOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgY29uc3QgaCA9IGJncmFGcmFtZS5oZWlnaHQ7XG4gIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gIGlmIChzcmMuYnl0ZU9mZnNldCAlIDQgPT09IDAgJiYgc3JjTHMgPT09IHcgKiA0KSB7XG4gICAgY29uc3Qgc3JjMzIgPSBuZXcgVWludDMyQXJyYXkoc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHlTaXplKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlTaXplOyBpKyspIGJ1ZltpXSA9IHNyYzMyW2ldISA+Pj4gMjQ7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIGNvbnN0IHJvd0Jhc2UgPSB5ICogc3JjTHMgKyAzO1xuICAgICAgY29uc3QgZHN0QmFzZSA9IHkgKiB3O1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIGJ1Zltkc3RCYXNlICsgeF0gPSBzcmNbcm93QmFzZSArIHggKiA0XSE7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBBcHBsZSBIRVZDIEFscGhhIFByb2ZpbGU6IGFscGhhIFNQUyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ9MSwgYWxwaGEgUFBTIHBpYytzZXEgaWQ9MS5cbmZ1bmN0aW9uIHJld3JpdGVBbHBoYVBhcmFtU2V0KHR5cGU6IG51bWJlciwgZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgaWYgKHR5cGUgPT09IE5BTF9TUFMpIHJldHVybiByZXdyaXRlQWxwaGFTcHMoZGF0YSk7XG4gIGlmICh0eXBlID09PSBOQUxfUFBTKSByZXR1cm4gcmV3cml0ZUFscGhhUHBzKGRhdGEpO1xuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5pZmllZEV4dHJhZGF0YShvcHRzOiBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHsgYmFzZUV4dHJhZGF0YSwgYWxwaGFFeHRyYWRhdGEgfSA9IG9wdHM7XG4gIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlRXh0cmFkYXRhKTtcbiAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYUV4dHJhZGF0YSk7XG5cbiAgY29uc3QgYWxwaGFCeVR5cGUgPSBuZXcgTWFwPG51bWJlciwgTmFsVW5pdFtdPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IE5BTF9WUFMgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY29uc3QgYURhdGEgPSByZXdyaXRlQWxwaGFQYXJhbVNldChuYWwudHlwZSwgYWxwaGFOYWwuZGF0YSk7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYURhdGEsIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaHVua3MucHVzaChidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTogQnVmZmVyIHtcbiAgY29uc3QgcGF5bG9hZFR5cGUgPSAxNjU7XG4gIGNvbnN0IHBheWxvYWRTaXplID0gNDtcbiAgY29uc3QgW2gwLCBoMV0gPSBlbmNvZGVOYWxIZWFkZXIoTkFMX1NFSV9QUkVGSVgsIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGMgKDAgPSB1bnNwZWNpZmllZC9wcmVtdWx0aXBsaWVkOyBtYXRjaGVzIHgyNjUgRU5BQkxFX0FMUEhBKVxuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkgd3JpdGVCaXRzKDAsIDEpO1xuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgTkFMX1ZQUykge1xuICAgICAgY29uc3QgZGF0YSA9IHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKG5hbC5kYXRhLCBuYWwudHlwZSwgY2ZnKTtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiwgdHlwZSBBVlBhY2tldEZsYWcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB7IGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQYWNrZXQge1xuICBkYXRhOiBCdWZmZXI7XG4gIHB0czogYmlnaW50O1xuICBkdHM6IGJpZ2ludDtcbiAgZHVyYXRpb246IGJpZ2ludDtcbiAgZmxhZ3M6IEFWUGFja2V0RmxhZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdWFsTGF5ZXJNdXhPcHRpb25zIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbi8vIERyYWlucyB0aGUgYmFzZSArIGFscGhhIE5WRU5DIHNlc3Npb25zIGFuZCB3cml0ZXMgaW50ZXJsZWF2ZWQgSEVWQy1hbHBoYSBhY2Nlc3MgdW5pdHMuXG5leHBvcnQgY2xhc3MgRHVhbExheWVyTXV4IHtcbiAgcHJpdmF0ZSBfczogRHVhbExheWVyTXV4T3B0aW9ucztcbiAgcHJpdmF0ZSBfYmFzZVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxwaGFRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoczogRHVhbExheWVyTXV4T3B0aW9ucykge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QgfSA9IHRoaXMuX3M7XG4gICAgLy8gRHJhaW4gZWFjaCBzZXNzaW9uIGZ1bGx5IOKAlCBpbmRlcGVuZGVudCBOVkVOQyBzZXNzaW9ucyBydW4gYSBmcmFtZSBhcGFydCB0cmFuc2llbnRseS5cbiAgICB0aGlzLl9iYXNlUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGJhc2VDdHgsIGJhc2VQa3QsIFwiYmFzZVwiKSkpO1xuICAgIHRoaXMuX2FscGhhUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGFscGhhQ3R4LCBhbHBoYVBrdCwgXCJhbHBoYVwiKSkpO1xuICAgIC8vIGJmPTAg4oaSIG5vIHJlb3JkZXI7IHF1ZXVlIGluZGV4IE4gaXMgdGhlIHNhbWUgZnJhbWUgZm9yIGJvdGguIExlZnRvdmVyIHdhaXRzIGZvciBuZXh0IGRyYWluLlxuICAgIHdoaWxlICh0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmIHRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlUGFpcih0aGlzLl9iYXNlUXVldWUuc2hpZnQoKSEsIHRoaXMuX2FscGhhUXVldWUuc2hpZnQoKSEsIG11eGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnBhaXJlZCBsZWZ0b3ZlcnMgYWZ0ZXIgRU9GID0gdHJ1ZSBiYXNlL2FscGhhIGRlc3luYzsgcmV0dXJucyBhIGRlc2NyaXB0aW9uLCBlbHNlIHVuZGVmaW5lZC5cbiAgZGVzeW5jQWZ0ZXJFb2YoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgIXRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikgcmV0dXJuIG91dDtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30ucmVjZWl2ZVBhY2tldGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc25hcHNob3QocGt0OiBQYWNrZXQpOiBQZW5kaW5nUGFja2V0IHtcbiAgICAvLyBwa3QuZGF0YSBpcyBuYXRpdmUgbWVtb3J5IGZyZWVkIG9uIHVucmVmIOKAlCBjb3B5IGJlZm9yZSBxdWV1ZWluZy5cbiAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuZnJvbShwa3QuZGF0YSEpLCBwdHM6IHBrdC5wdHMsIGR0czogcGt0LmR0cywgZHVyYXRpb246IHBrdC5kdXJhdGlvbiwgZmxhZ3M6IHBrdC5mbGFncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZVBhaXIoYmFzZTogUGVuZGluZ1BhY2tldCwgYWxwaGE6IFBlbmRpbmdQYWNrZXQsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYmFzZUN0eCwgc3RyZWFtLCBoZXZjQ2ZnIH0gPSB0aGlzLl9zO1xuICAgIC8vIFBhdGNoIGluLWJhbmQgVlBTL1NQUyBQVEwgYml0cyBmb3IgQXBwbGUtVlRCIGNvbXBhdCAoZW5jb2RlciByZXBlYXRzIGhlYWRlcnMgcGVyIElEUikuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlLmRhdGEpLCBzcGxpdE5hbFVuaXRzKGFscGhhLmRhdGEpLCBoZXZjQ2ZnKTtcbiAgICAvLyBkYXRhIHNldHRlciB3aXBlcyBwdHMvZHRzL2R1cmF0aW9uL2ZsYWdzIOKAlCByZXN0b3JlOyBmbGFncycgS0VZIGJpdCBkcml2ZXMgbW92IHN0c3MuXG4gICAgYmFzZVBrdC5kYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpO1xuICAgIGJhc2VQa3QucHRzID0gYmFzZS5wdHM7XG4gICAgYmFzZVBrdC5kdHMgPSBiYXNlLmR0cztcbiAgICBiYXNlUGt0LmR1cmF0aW9uID0gYmFzZS5kdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGJhc2UuZHVyYXRpb247XG4gICAgYmFzZVBrdC5mbGFncyA9IGJhc2UuZmxhZ3M7XG4gICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gUGFyc2UgTlZFTkMgU1BTL1BQUyBleHRyYWRhdGEgYXQgZW5jb2RlciBpbml0IHRvIGRlcml2ZSBmbGFncyB0aGUgc2xpY2UgaGVhZGVyIHBhcnNlciBkZXBlbmRzIG9uLlxuLy8gRGVmdXNlcyBmcmFnaWxlIGhhcmRjb2RlZCBhc3N1bXB0aW9uczogaWYgTlZFTkMgZGVmYXVsdHMgc2hpZnQsIHRocm93cyB3aXRoIGFjdGlvbmFibGUgZXJyb3IuXG5cbmltcG9ydCB7IEJpdFJlYWRlciB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgTkFMX1BQUywgTkFMX1NQUywgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjtcbiAgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZhaWwoZmllbGQ6IHN0cmluZywgZ290OiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYGhldmNfYWxwaGE6IE5WRU5DIFNQUy9QUFMgdW5zdXBwb3J0ZWQ6ICR7ZmllbGR9PSR7Z290fSwgZXhwZWN0ZWQgJHtleHBlY3RlZH1gKTtcbn1cblxuZnVuY3Rpb24gc2tpcFB0bChicjogQml0UmVhZGVyLCBtYXhTdWJMYXllcnM6IG51bWJlcik6IHZvaWQge1xuICBici5yZWFkKDIgKyAxICsgNSk7IC8vIHByb2ZpbGVfc3BhY2UsIHRpZXIsIHByb2ZpbGVfaWRjXG4gIGJyLnJlYWQoMzIpOyAvLyBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ1swLi4zMV1cbiAgYnIucmVhZCg0OCk7IC8vIDQgc291cmNlL3BhY2tlZCBmbGFncyArIDQzIGNvbnN0cmFpbnQvcmVzZXJ2ZWQgKyAxIGluYmxkXG4gIGJyLnJlYWQoOCk7IC8vIGxldmVsX2lkY1xuICBjb25zdCBzdWJQcm9maWxlUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc3ViTGV2ZWxQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgc3ViUHJvZmlsZVByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgICBzdWJMZXZlbFByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBpZiAobWF4U3ViTGF5ZXJzID4gMCkgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykgYnIucmVhZCgyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgaWYgKHN1YkxldmVsUHJlc2VudFtpXSkgYnIucmVhZCg4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNwcyhzcHNSYnNwOiBCdWZmZXIpOiB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIoc3BzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IG1heFN1YkxheWVycyA9IGJyLnJlYWQoMyk7XG4gIC8vIGFscGhhX2Rhcndpbi5yZXdyaXRlQWxwaGFTcHMgKyB2cHMuZXh0cmFjdFBUTCBoYXJkY29kZSA5Ni1iaXQgUFRMIOKAlCBvbmx5IHZhbGlkIHdoZW4gc3ViX2xheWVycz0wLlxuICBpZiAobWF4U3ViTGF5ZXJzICE9PSAwKSBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZ1xuICBza2lwUHRsKGJyLCBtYXhTdWJMYXllcnMpO1xuICBici5yZWFkVWUoKTsgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IGNocm9tYUZvcm1hdCA9IGJyLnJlYWRVZSgpO1xuICBpZiAoY2hyb21hRm9ybWF0ID09PSAzKSBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzXG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlc1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGNvbnN0IGxvZzJNYXhQb2NMc2IgPSBici5yZWFkVWUoKSArIDQ7XG4gIGNvbnN0IHN1Yk9yZGVySW5mbyA9IGJyLnJlYWQoMSk7XG4gIGNvbnN0IG9yZGVyQ291bnQgPSBzdWJPcmRlckluZm8gPyBtYXhTdWJMYXllcnMgKyAxIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckNvdW50OyBpKyspIHtcbiAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwic2NhbGluZ19saXN0X2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwicGNtX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIGZhaWwoXCJudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNcIiwgbnVtU3RScHMsIFwi4omkMVwiKTtcbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gIH1cbiAgY29uc3QgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChsb25nVGVybVJlZlBpY3NQcmVzZW50KSBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGNvbnN0IHNwc1RlbXBvcmFsTXZwRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIHJldHVybiB7IGxvZzJNYXhQb2NMc2IsIHNhb0VuYWJsZWQsIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bVN0UnBzLCBudW1EZWx0YVBvY3NTZXQwLCBsb25nVGVybVJlZlBpY3NQcmVzZW50LCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIGZhaWwoXCJudW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHNcIiwgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIGJyLnJlYWRVZSgpOyAvLyBjdV9xcF9kZWx0YV9lbmFibGVkIOKGkiBkaWZmX2N1X3FwX2RlbHRhX2RlcHRoXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkgZmFpbChcInRpbGVzX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyAvLyBiZXRhL3RjIG9mZnNldHMgKHNlIHZpYSB1ZSBhZHZhbmNlKVxuICAgIH1cbiAgfVxuICAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyBpbiBzbGljZSBoZWFkZXIgaXMgcHJlc2VudCBpZmZcbiAgLy8gcHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmICFzbGljZV9kZWJsb2NraW5nX2Rpc2FibGVkLlxuICBjb25zdCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyA9IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkICYmICFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlO1xuICByZXR1cm4geyBjYWJhY0luaXRQcmVzZW50LCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdmVuY0hldmNDb25maWcoZXh0cmFkYXRhOiBCdWZmZXIpOiBOdmVuY0hldmNDb25maWcge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhleHRyYWRhdGEpO1xuICBjb25zdCBzcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1NQUyk7XG4gIGNvbnN0IHBwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfUFBTKTtcbiAgaWYgKCFzcHMpIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFNQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgaWYgKCFwcHMpIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFBQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgY29uc3QgcyA9IHBhcnNlU3BzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc3BzLmRhdGEpKTtcbiAgY29uc3QgcCA9IHBhcnNlUHBzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24ocHBzLmRhdGEpKTtcbiAgcmV0dXJuIHsgLi4ucywgLi4ucCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgLy8gdGllcj1tYWluIG1hdGNoZXMgQXBwbGUgVmlkZW9Ub29sYm94OyBtYWNPUyBDaHJvbWUgcmVxdWlyZXMgTWFpbiB0aWVyIGZvciBIRVZDIGFscGhhIGRlY29kZS5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIsIHRpZXI6IFwibWFpblwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCDigJQgTlZFTkMgY29udmVydHMgaW50ZXJuYWxseSwgbm8gQ1BVIFNXUywgbm8gaHdGcmFtZXNDdHggbmVlZGVkLlxuICAgIGNvbnN0IGJhc2VDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpO1xuXG4gICAgbGV0IGFscGhhQ3R4OiBDb2RlY0NvbnRleHQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJhc2VQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFTd0ZyYW1lOiBGcmFtZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgICBjb25zdCBoZXZjQ2ZnID0gcGFyc2VOdmVuY0hldmNDb25maWcoYmFzZUN0eC5leHRyYURhdGEpO1xuXG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bCh1bmlmaWVkKTtcblxuICAgICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgICBjb25zdCBjaHJvbWFTaXplID0gKCh3aWR0aCArIDEpID4+IDEpICogKChoZWlnaHQgKyAxKSA+PiAxKTtcbiAgICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgY2hyb21hU2l6ZSAqIDIpO1xuICAgICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgICAgYmFzZVBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgYWxwaGFTd0ZyYW1lID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCk7XG5cbiAgICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgICAgYmFzZUN0eCxcbiAgICAgICAgYWxwaGFDdHgsXG4gICAgICAgIGJhc2VQa3QsXG4gICAgICAgIGFscGhhUGt0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGFscGhhU3dGcmFtZSxcbiAgICAgICAgYWxwaGFCdWYsXG4gICAgICAgIGhldmNDZmcsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQYXJ0aWFsIGNvbnN0cnVjdGlvbjogZW5jb2RlciBuZXZlciByZXR1cm5lZCwgc28gW1N5bWJvbC5kaXNwb3NlXSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIGJhc2VQa3Q/LmZyZWUoKTtcbiAgICAgIGFscGhhUGt0Py5mcmVlKCk7XG4gICAgICBhbHBoYVN3RnJhbWU/LmZyZWUoKTtcbiAgICAgIGFscGhhQ3R4Py5mcmVlQ29udGV4dCgpO1xuICAgICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIC8vIEV4dHJhY3QgdGhlIGFscGhhIHBsYW5lIGJlZm9yZSBiYXNlLnNlbmRGcmFtZSDigJQgdGhlIGVuY29kZXIgdW5yZWZzIHRoZSBpbnB1dCBmcmFtZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuXG4gICAgYmdyYUZyYW1lLnB0cyA9IHB0cztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhU3dGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmJhc2VDdHgsIFwiYmFzZVwiKTtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5hbHBoYUN0eCwgXCJhbHBoYVwiKTtcbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICAgIGNvbnN0IGRlc3luYyA9IHRoaXMuX211eC5kZXN5bmNBZnRlckVvZigpO1xuICAgIGlmIChkZXN5bmMpIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiAke2Rlc3luY31gKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgd2hlbiBOVkVOQyBzZXNzaW9ucyBmcmVlZCBpbiBjcmVhdGlvbiBvcmRlci5cbiAgICAvLyBMSUZPIGRlc3Ryb3kgYXZvaWRzIHRoZSBzZWdmYXVsdC4gUGVyIE5WSURJQSBmb3J1bSAvdC8yNjk5NzQuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHR5cGUgQVZQaXhlbEZvcm1hdCwgdHlwZSBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICBsZXQgcGt0OiBQYWNrZXQgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICAgIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQYXJ0aWFsIGNvbnN0cnVjdGlvbjogZW5jb2RlciBuZXZlciByZXR1cm5lZCwgc28gW1N5bWJvbC5kaXNwb3NlXSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIHBrdD8uZnJlZSgpO1xuICAgICAgY3R4LmZyZWVDb250ZXh0KCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvd25zSHc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHdWaWRlb0VuY29kZXIob3B0czogSHdWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICBjb25zdCBodyA9IHNoYXJlZEh3ID8/IChkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkpO1xuICBjb25zdCBvd25zSHcgPSAhc2hhcmVkSHcgJiYgISFodztcblxuICB0cnkge1xuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUh3VmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciwgdHlwZSBWaWRlb1NldHVwIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuLy8gbm9kZS1hdiA1LjIuMyBjb25zdGFudCBpcyB3cm9uZzsgZmZtcGVnIHJlZ2lzdGVycyB3aXRoIGRhc2guXG5jb25zdCBGRl9FTkNPREVSX0xJQlZQWF9WUDkgPSBcImxpYnZweC12cDlcIiBhcyBGRlZpZGVvRW5jb2RlcjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkgcmV0dXJuIFwid2VibVwiO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSByZXR1cm4gXCJtcDRcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG91dHB1dCBleHRlbnNpb246ICR7cGF0aH1gKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogU2lua09wdGlvbnMpOiBQcm9taXNlPE91dHB1dFNpbms+IHtcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvcHRzLm91dEZpbGUpO1xuICAgIGNvbnN0IHZpZGVvID0gb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgdGhpcy5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCB0aGlzLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgY29uc3QgYXVkaW8gPSBvcHRzLndpdGhBdWRpbyA/IGF3YWl0IHRoaXMuYXVkaW9Gb3Iob3B0cywgbXV4ZXIpIDogdW5kZWZpbmVkO1xuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICByZXR1cm4gbmV3IE91dHB1dFNpbmsoeyBtdXhlciwgLi4udmlkZW8sIGF1ZGlvLCBvcHRzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbXA0VmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSA9IG9wdHM7XG4gICAgcmV0dXJuIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSwgbXV4ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgd2VibVZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gb3B0cztcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmcHMsXG4gICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSxcbiAgICAgIGNvZGVjT3B0czogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiLCBcInJvdy1tdFwiOiBcIjFcIiwgdGhyZWFkczogXCIyXCIgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSwgb3duc0h3OiBmYWxzZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7IG91dFNhbXBsZVJhdGU6IDQ0XzEwMCwgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMgfVxuICAgICAgICA6IHsgb3V0U2FtcGxlUmF0ZTogNDhfMDAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULCBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHsgLi4uY2ZnLCBnbG9iYWxIZWFkZXI6IHRydWUsIGJpdHJhdGU6IDEyOF8wMDAsIG11eGVyIH0pO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoYmdyYUZyYW1lOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShiZ3JhRnJhbWUsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgZWxzZSBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCB7IG11eGVyLCB2aWRlbywgaHdWaWRlbywgYXVkaW8sIGNvZGVjLCBodywgb3duc0h3IH0gPSB0aGlzLl9zO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgY29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCBtdXhlcltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBGRl9IV0RFVklDRV9UWVBFX0NVREEsIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB7IE91dHB1dFNpbmsgfSBmcm9tIFwiLi9zaW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQaXBlbGluZVN0YXRlIHtcbiAgc2lua3M6IE91dHB1dFNpbmtbXTtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGxpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcjtcbiAgcG5nQ29kZWM/OiBDb2RlY1N0YXRlO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIF9zOiBQaXBlbGluZVN0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogUGlwZWxpbmVTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zKTogUHJvbWlzZTxFbmNvZGVyUGlwZWxpbmU+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3V0RmlsZXMgPSBvdXRGaWxlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChwKSA9PiBwLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG5cbiAgICBjb25zdCBraW5kcyA9IG91dEZpbGVzLm1hcCgocCkgPT4gT3V0cHV0U2luay5raW5kRnJvbVBhdGgocCkpO1xuICAgIGNvbnN0IG5lZWRzTXA0SHcgPSAhZGlzYWJsZUh3Q29kZWMgJiYga2luZHMuaW5jbHVkZXMoXCJtcDRcIik7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc0h3QWxwaGFDYXBhYmxlID1cbiAgICAgIHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfHwgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREE7XG5cbiAgICBjb25zdCBzaW5rczogT3V0cHV0U2lua1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IE91dHB1dFNpbmsuY3JlYXRlKHtcbiAgICAgICAgb3V0RmlsZTogb3V0RmlsZXNbaV0hLFxuICAgICAgICBraW5kOiBraW5kc1tpXSEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgd2l0aEF1ZGlvLFxuICAgICAgICBkaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgc2hhcmVkSHc6IGtpbmRzW2ldID09PSBcIm1wNFwiICYmIGlzSHdBbHBoYUNhcGFibGUgPyBzaGFyZWRIdyA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgc2lua3MucHVzaChzaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZW5jb2RlQXVkaW8ocGNtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5kcmFpbigpO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5kcmFpbigpO1xuICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmcmVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mub3B0cy53aWR0aCwgdGhpcy5fcy5vcHRzLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iXX0=
|