pup-recorder 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,96 +0,0 @@
1
- import'source-map-support/register.js';import {createRequire}from'module';import {dirname,join}from'path';import {Log,FormatContext,FFmpegError,Frame,Codec,CodecContext,Rational,FilterGraph,Filter,FilterInOut,FF_DECODER_PNG,SoftwareScaleContext,AV_PIX_FMT_YUVA420P as AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR,HardwareFramesContext,Packet,AV_PIX_FMT_BGRA as AV_PIX_FMT_BGRA$1}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING,FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,FF_HWDEVICE_TYPE_VIDEOTOOLBOX,FF_HWDEVICE_TYPE_CUDA,AV_PIX_FMT_YUVA420P,FF_ENCODER_LIBX265,AV_CHANNEL_LAYOUT_STEREO,AV_CODEC_FLAG_GLOBAL_HEADER,AV_SAMPLE_FMT_FLT,AVERROR_EAGAIN,AVERROR_EOF,AV_PIX_FMT_BGRA,AVCOL_RANGE_JPEG,FF_ENCODER_HEVC_NVENC,AV_PIX_FMT_CUDA,AV_PIX_FMT_YUV420P}from'node-av/constants';import {spawn}from'child_process';import S from'zod';import {ok}from'assert';import {HardwareContext}from'node-av/api';import {randomUUID}from'crypto';import {rmSync}from'fs';import {mkdir}from'fs/promises';import {tmpdir,platform}from'os';import no from'tree-kill';import Wr from'electron';import {EventEmitter}from'events';import {createServer}from'net';import Zr from'puppeteer';var At=Object.create;var ue=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var Q=(o,e)=>(e=Symbol[o])?e:Symbol.for("Symbol."+o),T=o=>{throw TypeError(o)};var Oe=(o,e,t)=>e in o?ue(o,e,{enumerable:true,configurable:true,writable:true,value:t}):o[e]=t;var De=o=>[,,,At(null)],Ne=["class","method","getter","setter","accessor","field","value","get","set"],W=o=>o!==void 0&&typeof o!="function"?T("Function expected"):o,It=(o,e,t,r,i)=>({kind:Ne[o],name:e,metadata:r,addInitializer:n=>t._?T("Already initialized"):i.push(W(n||null))}),pe=(o,e)=>Oe(e,Q("metadata"),o[3]),Le=(o,e,t,r)=>{for(var i=0,n=o[e>>1],s=n&&n.length;i<s;i++)n[i].call(t);return r},L=(o,e,t,r,i,n)=>{var a,c,u,d,p=e&7,m=false,f=false,_=2,x=Ne[p+5],E=o[_]||(o[_]=[]),h=((i=i.prototype),Ct(i,t));for(var y=r.length-1;y>=0;y--)u=It(p,t,c={},o[3],E),(u.static=m,u.private=f,d=u.access={has:l=>t in l},(d.get=l=>l[t]),p>2),a=(0, r[y])(h[x],u),c._=1,W(a)&&(h[x]=a);return h&&ue(i,t,h),i},Ve=(o,e,t)=>Oe(o,e+"",t);var F=(o,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&T("Object expected");var r,i;t&&(r=e[Q("asyncDispose")]),r===void 0&&(r=e[Q("dispose")],t&&(i=r)),typeof r!="function"&&T("Object not disposable"),i&&(r=function(){try{i.call(this);}catch(n){return Promise.reject(n)}}),o.push([t,r,e]);}else t&&o.push([t]);return e},k=(o,e,t)=>{var r=typeof SuppressedError=="function"?SuppressedError:function(s,a,c,u){return u=Error(c),u.name="SuppressedError",u.error=s,u.suppressed=a,u},i=s=>e=t?new r(s,e,"An error was suppressed during disposal"):(t=true,s),n=s=>{for(;s=o.pop();)try{var a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(n,c=>(i(c),n()))}catch(c){i(c);}if(t)throw e};return n()};function Me(o,e,t){try{return e(process.env[o])}catch{return t}}function Ge(o){if(typeof o=="number")return o;let e=Number(o);if(Number.isNaN(e))throw new Error(`Value ${o} is not a valid number`);return e}function po(o){return typeof o=="string"?o:String(o)}var Nt=createRequire(import.meta.url),z=process.env,K=Me("PUP_LOG_LEVEL",Ge,2),Ue=z.PUP_USE_INNER_PROXY==="1",He=z.PUP_DISABLE_GPU==="1",$e=z.PUP_DETERMINISTIC==="1",Lt=dirname(Nt.resolve("pup-recorder/package.json")),je=join(Lt,"dist","app.cjs"),go=z.PUP_IPC_SOCKET,We=z.PUP_EXPERIMENTAL_PUPPETEER==="1";var me="<pup@debug>",le="<pup@info>",fe="<pup@warn>",he="<pup@error>",we="<pup@fatal>";function q(o,e){return function(...t){let r=t.map(i=>i instanceof Error?i.stack??String(i):i);return o.call(this,...r)}}var ze,qe,Xe,Ye,Qe,B;Qe=[q],Ye=[q],Xe=[q],qe=[q],ze=[q];var I=class{constructor(e=K){this._level=e;Le(B,5,this);Ve(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,r=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?r:void 0,warn:s>=1?i:void 0,error:s>=0?n:void 0};}debug(...e){this.impl?.debug?.(me,...e);}info(...e){this.impl?.info?.(le,...e);}warn(...e){this.impl?.warn?.(fe,...e);}error(...e){this.impl?.error?.(he,...e);}fatal(...e){this.impl?.error?.(we,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(me)?this.debug(t.slice(me.length+1)):t.startsWith(le)?this.info(t.slice(le.length+1)):t.startsWith(fe)?this.warn(t.slice(fe.length+1)):t.startsWith(he)?this.error(t.slice(he.length+1)):this.info(t);}attach(e,t){return new Promise((r,i)=>{this.debug(`${t}.attach`);let n="",s=a=>{let c=a.toString();c.startsWith(we)?n+=c.slice(we.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("message",s).on("error",a=>{n+=a.message,e.kill();}).once("close",(a,c)=>{a||c||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),r());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}};B=De(),L(B,1,"debug",Qe,I),L(B,1,"info",Ye,I),L(B,1,"warn",Xe,I),L(B,1,"error",qe,I),L(B,1,"fatal",ze,I),pe(B,I);var g=new I;Log.setCallback((o,e)=>{let t=e.trimEnd();t&&(o<=AV_LOG_ERROR?g.error(t):o<=AV_LOG_WARNING&&g.warn(t));});function So(o,e){return (...t)=>{try{let r=o(...t);return r instanceof Promise?r.catch(()=>e):r}catch{return e}}}var be="--pup-priv-args";function To(){let o=process.argv,e=o.find(r=>r.startsWith(be));if(!e)return g.debug("procargv",o),process.argv;let t=["exec",...o.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),g.debug("pupargs",t),t}function Ke(o,e){let t=o.split(" ").filter(s=>s.length),[r,...i]=t;if(!r)throw new Error("empty command");let n=spawn(r,i,{stdio:"inherit",...e});return {process:n,wait:g.attach(n,r)}}var Ht=1920,$t=1080,jt=30,Wt=5,zt="output.mp4",Lo=S.object({duration:S.number().describe("Duration in seconds"),width:S.number().describe("Video width"),height:S.number().describe("Video height"),fps:S.number().describe("Frames per second"),withAudio:S.boolean().describe("Capture and encode audio"),outFile:S.string().describe("Output mp4 file path"),useInnerProxy:S.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:S.boolean().describe("Render by frame rather than recording"),disableGpu:S.boolean().describe("Disable GPU rendering, may reduce performance but increase stability")}),Je={width:Ht,height:$t,fps:jt,duration:Wt,outFile:zt,withAudio:false,useInnerProxy:Ue,deterministic:$e,disableGpu:He};var J=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((r,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(n=>{this._active--,r(n),this.next();}).catch(n=>{this._active--,i(n),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 r of this._queue)r.signal===e?r.reject(e.reason):t.push(r);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();}};var Z=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 r=this._ctx.newStream(null);return r.timeBase=e.timeBase,FFmpegError.throwIfError(r.codecpar.fromContext(e),"codecpar.fromContext"),t&&(r.codecpar.codecTag=t),r}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);}};function O(o,e,t){let r=new Frame;return r.alloc(),r.format=t,r.width=o,r.height=e,FFmpegError.throwIfError(r.getBuffer(0),"frame.getBuffer"),r}function P(){let o=new Packet;return o.alloc(),o}async function V(o,e,t,r){for(;;){let i=await o.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(o.timeBase,t.timeBase),await r.writePacket(e),e.unref();}}var ar={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},ee=class o{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,r){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=r,this._frameSize=e.frameSize,this._pkt=P(),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 r=new CodecContext;r.allocContext3(t),r.codecId=t.id,r.sampleFormat=e.outSampleFmt,r.sampleRate=e.outSampleRate,r.channelLayout=AV_CHANNEL_LAYOUT_STEREO,r.timeBase=new Rational(1,e.outSampleRate),r.bitRate=BigInt(e.bitrate),e.globalHeader&&r.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),FFmpegError.throwIfError(await r.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(r);return new o(r,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new FilterGraph;t.alloc();let r=Filter.getByName("abuffer"),i=t.createFilter(r,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=Filter.getByName("abuffersink"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let c=`aformat=sample_fmts=${ar[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),d=FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(c,d,u),"graph.parsePtr"),FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let r=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let d=0;d<r.length;d++)isFinite(r[d])||(r[d]=0);let i=r.length>>1;let n=F(s,Frame.fromAudioBuffer(Buffer.from(r.buffer,r.byteOffset,r.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(n),"buffersrcAddFrame");await this.drain(t);}catch(a){var c=a,u=true;}finally{k(s,c,u);}}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)}};var G=class o{src;dst;pkt;_sws;_png;static async create(e,t){let r=Codec.findDecoderByName(FF_DECODER_PNG);return ok(r,"png decoder unavailable"),new o(e,t,r)}constructor(e,t,r){this._png=r,this.src=O(e,t,AV_PIX_FMT_BGRA$1),this.dst=O(e,t,AV_PIX_FMT_YUVA420P$1),this.pkt=P();}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 r=[];try{let t=F(r,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 n=i,s=true;}finally{k(r,n,s);}}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 U=Buffer.from([0,0,0,1]);function at(o,e){let t=o>>1&63,r=(o&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:r,temporalId:i}}function _e(o,e,t){let r=(o&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [r,i]}function xe(o){let e=Buffer.alloc(o.length>>3);for(let t=0;t<e.length;t++){let r=0;for(let i=0;i<8;i++)r=r<<1|o[t*8+i];e[t]=r;}return e}function H(o){let e=[],t=0;for(;t<o.length;){let r=0;if(t+3<o.length&&o[t]===0&&o[t+1]===0&&o[t+2]===1)r=3;else if(t+4<o.length&&o[t]===0&&o[t+1]===0&&o[t+2]===0&&o[t+3]===1)r=4;else {t++;continue}let i=t+r;if(i+2>o.length)break;let n=o.length;for(let c=i+2;c<o.length-2;c++)if(o[c]===0&&o[c+1]===0&&(o[c+2]===1||c+3<o.length&&o[c+2]===0&&o[c+3]===1)){n=c;break}let{type:s,layerId:a}=at(o[i],o[i+1]);e.push({type:s,layerId:a,data:o.subarray(i,n)}),t=n;}return e}function ye(o,e){let t=Buffer.from(o),{type:r,temporalId:i}=at(t[0],t[1]),[n,s]=_e(r,e,i);return t[0]=n,t[1]=s,t}var fr=39;function ct(o,e){let t=H(o),r=H(e),i=new Map;for(let a of r){if(a.type===32)continue;let c=i.get(a.type)??[];c.push(a),i.set(a.type,c);}let n=[],s=new Set;for(let a of t){let c=a.type===32?hr(a.data):a.data;if(n.push(U,c),!s.has(a.type)){s.add(a.type);for(let u of i.get(a.type)??[])n.push(U,ye(u.data,1));}}return n.push(ve()),Buffer.concat(n)}function hr(o){let e=o.subarray(2),t=0,r=d=>{let p=0;for(let m=0;m<d;m++){let f=t+m>>3,_=7-(t+m&7);p=p<<1|e[f]>>_&1;}return t+=d,p};r(4);let i=r(1);r(1);let n=t;if(r(6)>0)return o;let a=[];for(let d=0;d<o.length;d++)for(let p=7;p>=0;p--)a.push(o[d]>>p&1);let c=n+16;for(let d=0;d<6;d++)a[c+d]=0;a[c+5]=1;let u=a.length-1;for(;u>0&&a[u]===0;)u--;if(u<=1)throw new Error("Invalid VPS: no RBSP stop bit");for(a[u-1]=1,a.length=u;a.length%8!==0;)a.push(1);if(i)for(let d=0;d<8;d++)a.push(0);a.push(0);for(let d=0;d<16;d++)a.push(d===3?1:0);for(a.push(0,0,0),a.push(0),a.push(1),a.push(1);a.length%8!==0;)a.push(0);return xe(a)}function ve(){let[t,r]=_e(fr,0,1),i=[],n=(s,a)=>{for(let c=a-1;c>=0;c--)i.push(s>>c&1);};for(n(0,1),n(0,3),n(0,3),n(0,9),n(255,9),n(0,1),n(0,1),n(1,1);i.length%8!==0;)n(0,1);return Buffer.concat([U,Buffer.from([t,r]),Buffer.from([165,4]),xe(i),Buffer.from([128])])}function ut(o,e){let t=[];for(let r of o)t.push(U,r.data);for(let r of e)r.type<32&&t.push(U,ye(r.data,1));return Buffer.concat(t)}var re=class o{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=ve();}static async create(e){let{width:t,height:r,fps:i,bitrate:n,hw:s,muxer:a}=e,c=Codec.findEncoderByName(FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let u=new HardwareFramesContext;u.alloc(s.deviceContext),u.format=AV_PIX_FMT_CUDA,u.swFormat=AV_PIX_FMT_YUV420P,u.width=t,u.height=r,u.initialPoolSize=20,FFmpegError.throwIfError(u.init(),"hwFramesCtx.init");let d=async y=>{let l=new CodecContext;return l.allocContext3(c),l.codecId=c.id,l.width=t,l.height=r,l.pixelFormat=AV_PIX_FMT_CUDA,y.fullRange&&(l.colorRange=AVCOL_RANGE_JPEG),l.timeBase=new Rational(1,i),l.framerate=new Rational(i,1),l.gopSize=i*2,l.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),l.setOption("preset","p4"),l.setOption("bf","0"),y.cqp!==void 0?(l.setOption("rc","constqp"),l.setOption("qp",String(y.cqp))):l.bitRate=BigInt(y.br),l.hwFramesCtx=u,FFmpegError.throwIfError(await l.open2(c,null),"nvenc.open2"),l},p=await d({br:n}),m=await d({br:n,fullRange:true,cqp:1}),f=P(),_=P(),x=a.addStream(p,"hvc1"),v=p.extraData,E=m.extraData;v&&E&&(x.codecpar.extradata=ct(v,E));let h=new SoftwareScaleContext;return h.getContext(t,r,AV_PIX_FMT_BGRA,t,r,AV_PIX_FMT_YUV420P,SWS_BILINEAR),new o({baseCtx:p,alphaCtx:m,basePkt:f,alphaPkt:_,stream:x,baseSws:h,yuvFrame:O(t,r,AV_PIX_FMT_YUV420P),hwFramesCtx:u})}async encode(e,t){let{baseCtx:r,alphaCtx:i,baseSws:n,yuvFrame:s,hwFramesCtx:a}=this._s,c=this._pts++;FFmpegError.throwIfError(s.makeWritable(),"yuv.makeWritable"),FFmpegError.throwIfError(await n.scaleFrame(s,e),"sws.base");let u=e.data?.[0],d=e.linesize?.[0];if(!u||!d)throw new Error("encode: missing BGRA data");let p=e.width,m=e.height,f=p*m,_=(p>>1)*(m>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(f+_*2));let x=this._alphaBuf;for(let h=0;h<m;h++)for(let y=0;y<p;y++)x[h*p+y]=u[h*d+y*4+3];x.fill(128,f,f+_*2),this._alphaFrame?.free(),this._alphaFrame=Frame.fromVideoBuffer(x,{format:AV_PIX_FMT_YUV420P,width:p,height:m});let v=new Frame;v.alloc(),FFmpegError.throwIfError(a.getBuffer(v,0),"base.getBuffer"),FFmpegError.throwIfError(await a.transferData(v,s,0),"base.transfer"),v.pts=c,v.duration=1n;let E=new Frame;E.alloc(),FFmpegError.throwIfError(a.getBuffer(E,0),"alpha.getBuffer"),FFmpegError.throwIfError(await a.transferData(E,this._alphaFrame,0),"alpha.transfer"),E.pts=c,E.duration=1n,FFmpegError.throwIfError(await r.sendFrame(v),"base.sendFrame"),FFmpegError.throwIfError(await i.sendFrame(E),"alpha.sendFrame"),await this.drainInterleaved(t),v.free(),E.free();}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,yuvFrame:r,baseSws:i,hwFramesCtx:n,baseCtx:s,alphaCtx:a}=this._s;e.free(),t.free(),r[Symbol.dispose](),this._alphaFrame?.free(),i[Symbol.dispose](),n.free(),s.freeContext(),a.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:r,basePkt:i,alphaPkt:n,stream:s}=this._s;for(;;){let a=await t.receivePacket(i),c=await r.receivePacket(n),u=a>=0,d=c>=0;if(!u&&!d)break;if(u!==d)throw new Error(`NVENC desync: base=${u}, alpha=${d}`);let p=H(i.data),m=H(n.data),f=[];this._seiInjected||(f.push(this._seiBuffer),this._seiInjected=true),f.push(ut(p,m));let _=i.pts,x=i.dts,v=i.duration;i.data=Buffer.concat(f),i.pts=_,i.dts=x,i.duration=v===0n?1n:v,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.timeBase),await e.writePacket(i),i.unref(),n.unref();}}};var oe=class o{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,r){this._ctx=e,this._pkt=t,this._stream=r;}static async create(e){let{width:t,height:r,fps:i,codecName:n,codecTag:s,globalHeader:a,codecOpts:c,bitrate:u,muxer:d}=e,p=Codec.findEncoderByName(n);if(!p)throw new Error(`Video encoder not found: ${n}`);let m=new CodecContext;m.allocContext3(p),m.codecId=p.id,m.width=t,m.height=r,m.pixelFormat=e.pixelFormat,m.timeBase=new Rational(1,i),m.framerate=new Rational(i,1),m.gopSize=i*2,m.bitRate=BigInt(u),a&&m.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER);for(let[_,x]of Object.entries(c))m.setOption(_,x);s&&(m.codecTag=s),FFmpegError.throwIfError(await m.open2(p,null),"videoCtx.open2");let f=d.addStream(m,s);return new o(m,P(),f)}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 ie=class o{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,r){this._ctx=e,this._pkt=t,this._stream=r;}static async create(e){let{width:t,height:r,fps:i,hw:n,bitrate:s,muxer:a}=e,c=n.getEncoderCodec("hevc");if(!c)throw new Error("hevc_videotoolbox encoder not found");let u=new CodecContext;u.allocContext3(c),u.codecId=c.id,u.width=t,u.height=r,u.pixelFormat=AV_PIX_FMT_BGRA,u.colorRange=AVCOL_RANGE_JPEG,u.timeBase=new Rational(1,i),u.framerate=new Rational(i,1),u.gopSize=i*2,u.bitRate=BigInt(s),u.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),u.setOption("alpha_quality","1"),u.codecTag="hvc1",FFmpegError.throwIfError(await u.open2(c,null),"vtEnc.open2");let d=a.addStream(u,"hvc1");return new o(u,P(),d)}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 Fe="[Encoder]";async function wt(o,e){let{width:t,height:r,fps:i,bitrate:n=8e6,disableGpu:s=false}=o,a=s?void 0:HardwareContext.auto()??void 0;return a?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc")?(g.debug(Fe,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await ie.create({width:t,height:r,fps:i,hw:a,bitrate:n,muxer:e}),hw:a}):a?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc")?(g.debug(Fe,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await re.create({width:t,height:r,fps:i,hw:a,bitrate:n,muxer:e}),hw:a}):(g.debug(Fe,"using software libx265 HEVC alpha encoder"),a?.dispose(),{video:await oe.create({width:t,height:r,fps:i,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",globalHeader:true,codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:n,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await G.create(t,r)})}var ne=class o{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:r,outFile:i,withAudio:n=false}=e,s=new Z(i),{video:a,hwVideo:c,codec:u,hw:d}=await wt(e,s),p;return n&&(p=await ee.create({outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:s})),await s.open(),new o({video:a,hwVideo:c,audio:p,muxer:s,limiter:new J(1),outFile:i,codec:u,hw:d,width:t,height:r})}setupAudio(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:r,codec:i,muxer:n}=this._s;if(t){var u=[];try{let f=F(u,this.bgraFrame(e));await t.encode(f,n);return}catch(d){var p=d,m=true;}finally{k(u,p,m);}}let{src:s,dst:a,sws:c}=i;return ok(c,"sws not initialized"),FFmpegError.throwIfError(s.makeWritable(),"bgraSrc.makeWritable"),FFmpegError.throwIfError(s.fromBuffer(e),"bgraSrc.fromBuffer"),FFmpegError.throwIfError(a.makeWritable(),"bgraDst.makeWritable"),FFmpegError.throwIfError(await c.scaleFrame(a,s),"bgraSws.scaleFrame"),r.encode(a,n)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:r,codec:i,muxer:n,width:s,height:a}=this._s,c=i??await G.create(s,a);try{let u=await c.decodePNG(e);t?await t.encode(u,n):(FFmpegError.throwIfError(c.dst.makeWritable(),"pngDst.makeWritable"),FFmpegError.throwIfError(await c.sws.scaleFrame(c.dst,u),"pngSws.scaleFrame"),await r.encode(c.dst,n));}finally{i||c[Symbol.dispose]();}});}async encodeAudio(e){let{audio:t,limiter:r,muxer:i}=this._s;t&&await r.schedule(()=>t.encode(e,i));}async finish(){let{video:e,hwVideo:t,audio:r,muxer:i,limiter:n}=this._s;try{var s=[];try{let p=F(s,i,!0);let m=F(s,e);let f=F(s,t);let _=F(s,r);await n.drain();await r?.flush(i);t?await t.flush(i):await e.flush(i);}catch(a){var c=a,u=!0;}finally{var d=k(s,c,u);d&&await d;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:r,muxer:i,limiter:n}=this._s;await n.drain(),e?.[Symbol.dispose](),t?.[Symbol.dispose](),r?.[Symbol.dispose](),await i[Symbol.asyncDispose](),this.free();}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=F(t,this._s.codec);this._s.hw?.dispose();}catch(r){var i=r,n=true;}finally{k(t,i,n);}}bgraFrame(e){let t=O(this._s.width,this._s.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var Hr="[HWAccel]";async function $r(){let o=HardwareContext.auto(),e=o!==null;return o?.dispose(),e}var bt=$r().then(o=>(g.debug(Hr,"gpu:",o),o));async function ae(o){let e=["no-sandbox","disable-dev-shm-usage","disable-web-security","disable-site-isolation-trials","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","autoplay-policy=no-user-gesture-required","disable-extensions","force-device-scale-factor=1","force-color-profile=srgb","ignore-gpu-blocklist","use-gl=angle","deterministic-mode","enable-begin-frame-control","disable-new-content-rendering-timeout","run-all-compositor-stages-before-draw","disable-threaded-animation","disable-threaded-scrolling","disable-checker-imaging","disable-image-animation-resync","enable-surface-synchronization","font-render-hinting=none","disable-background-networking"];K<3&&e.push("log-level=3");let t=["FontationBackend"];if(!(await bt&&!o))e.push("use-angle=swiftshader","enable-unsafe-swiftshader");else {e.push("disable-gpu-sandbox","enable-unsafe-webgpu");let i=platform();i==="darwin"?e.push("use-angle=metal"):i==="win32"?e.push("use-angle=d3d11"):(e.push("use-angle=vulkan","disable-vulkan-surface"),t.push("Vulkan"));}return e.push(`enable-features=${t.join(",")}`),e}async function qr(o){return [...await ae(o),"headless=new"]}var Xr="[Electron]";async function gt(o,e,t){let r=[],i=platform();i==="linux"&&r.push("xvfb-run","--auto-servernum",`--server-args="-screen 0 ${o.width}x${o.height}x24"`);let s=(await qr(e.includes("--disable-gpu"))).map(u=>`--${u}`),a=Buffer.from(JSON.stringify(e)).toString("base64");s.push(`${be}=${a}`),r.push(Wr,...s,je);let c=r.join(" ");return g.debug(Xr,c),Ke(c,{stdio:["ignore","pipe","pipe"],shell:i==="linux",env:{...process.env,RUST_BACKTRACE:"full",PUP_IPC_SOCKET:t}})}var se=8;var Pe=class extends EventEmitter{constructor(t){super();this._socket=t;this._socket.on("data",r=>this.onData(r)),this._socket.on("error",r=>this.emit("error",r)),this._socket.on("close",()=>this.emit("close"));}_socket;_chunks=[];_buffered=0;onData(t){this._chunks.push(t),this._buffered+=t.byteLength,this.flush();}flush(){for(;;){if(this._buffered<se)return;let t=this.peek(se),r=t.readUInt32LE(0),i=t.readUInt32LE(4);if(this._buffered<se+i)return;this.consume(se);let n=this.consume(i);switch(this.emit("message",r,n),r){case 1:{this.emit("progress",Number(n.toString()));break}case 2:{this.emit("done",JSON.parse(n.toString()));break}case 3:{this.emit("error",new Error(n.toString()));break}}}}peek(t){return this._chunks[0]&&this._chunks[0].byteLength>=t?this._chunks[0]:Buffer.concat(this._chunks).subarray(0,t)}consume(t){let r=Buffer.allocUnsafe(t),i=0;for(;i<t;){let n=this._chunks[0],s=Math.min(n.byteLength,t-i);n.copy(r,i,0,s),s===n.byteLength?this._chunks.shift():this._chunks[0]=n.subarray(s),i+=s;}return this._buffered-=t,r}};function _t(o){return new Promise((e,t)=>{let r=createServer();r.once("error",t),r.listen(o,()=>{e({waitForConnection(){return new Promise((i,n)=>{r.once("connection",s=>i(new Pe(s))),r.once("error",n);})},close(){r.close();}});});})}var $="__pup_tick__";function xt(o){return `(function() {
2
- ${""}
3
- if (typeof ${$} !== 'undefined') return;
4
-
5
- const orig = {
6
- Date: Date,
7
- dateNow: Date.now.bind(Date),
8
- performanceNow: performance.now.bind(performance),
9
- raf: requestAnimationFrame.bind(window),
10
- caf: cancelAnimationFrame.bind(window),
11
- setTimeout: setTimeout.bind(window),
12
- clearTimeout: clearTimeout.bind(window),
13
- setInterval: setInterval.bind(window),
14
- clearInterval: clearInterval.bind(window),
15
- };
16
-
17
- let currMs = 0;
18
- let rafQueue = [];
19
- const timers = {};
20
- let nextId = 1;
21
- const dateOrigin = new orig.Date();
22
- const perfOrigin = orig.performanceNow();
23
-
24
- performance.now = function() { return perfOrigin + currMs; };
25
- Date.now = function() { return dateOrigin.getTime() + currMs; };
26
- Date = function() {
27
- var O = orig.Date;
28
- if (arguments.length === 0) return new O(dateOrigin.getTime() + currMs);
29
- return new (Function.prototype.bind.apply(O, [null].concat(Array.prototype.slice.call(arguments))))();
30
- };
31
- Date.now = function() { return dateOrigin.getTime() + currMs; };
32
- Date.parse = orig.Date.parse;
33
- Date.UTC = orig.Date.UTC;
34
- Date.prototype = orig.Date.prototype;
35
-
36
- window.requestAnimationFrame = function(cb) {
37
- const id = nextId++;
38
- rafQueue.push({ id, cb });
39
- return id;
40
- };
41
- window.cancelAnimationFrame = function(id) {
42
- rafQueue = rafQueue.filter((r) => r.id !== id);
43
- };
44
-
45
- window.setTimeout = function(cb, delay, ...args) {
46
- const id = nextId++;
47
- timers[id] = { type: 'timeout', cb, delay: delay || 0, next: currMs + (delay || 0), args };
48
- return id;
49
- };
50
- window.clearTimeout = function(id) { delete timers[id]; };
51
-
52
- window.setInterval = function(cb, delay, ...args) {
53
- const id = nextId++;
54
- const d = Math.max(delay || 0, 1);
55
- timers[id] = { type: 'interval', cb, delay: d, next: currMs + d, args };
56
- return id;
57
- };
58
- window.clearInterval = function(id) { delete timers[id]; };
59
-
60
- function process(timestampMs) {
61
- currMs = timestampMs;
62
- document.getAnimations().forEach(a => {
63
- a.pause();
64
- a.currentTime = currMs;
65
- });
66
- const ids = Object.keys(timers);
67
- for (let i = 0; i < ids.length; i++) {
68
- const t = timers[ids[i]];
69
- if (!t) continue;
70
- while (t.next <= currMs) {
71
- if (typeof t.cb === 'string') eval(t.cb); else t.cb.apply(undefined, t.args);
72
- if (t.type === 'timeout') { delete timers[ids[i]]; break; }
73
- t.next += t.delay;
74
- }
75
- }
76
- const rafs = rafQueue.splice(0);
77
- for (let j = 0; j < rafs.length; j++) {
78
- rafs[j].cb(currMs);
79
- }
80
- }
81
-
82
- function eject() {
83
- Date = orig.Date;
84
- performance.now = orig.performanceNow;
85
- window.requestAnimationFrame = orig.raf;
86
- window.cancelAnimationFrame = orig.caf;
87
- window.setTimeout = orig.setTimeout;
88
- window.clearTimeout = orig.clearTimeout;
89
- window.setInterval = orig.setInterval;
90
- window.clearInterval = orig.clearInterval;
91
- delete window.${$};
92
- }
93
-
94
- window.${$} = { process: process, eject: eject };
95
- })();`}function ke(o){return `${$}.process(${o})`}function yt(){return `if (typeof ${$} !== 'undefined') ${$}.eject()`}var vt="[Puppeteer]";async function Et(o,e,t){var f=[];try{let{fps:r,width:i,height:n,duration:s,outFile:a,disableGpu:c}=e;e.withAudio&&g.warn(vt,"audio capture is not supported in Puppeteer mode");let u=Math.ceil(r*s);let d=1e3/r;await mkdir(dirname(a),{recursive:!0});let p=F(f,await ne.create({width:i,height:n,fps:r,outFile:a,disableGpu:c}),!0);let m=await Zr.launch({headless:"shell",defaultViewport:{width:i,height:n},args:(await ae(c)).map(h=>`--${h}`)});try{let h=(await m.pages())[0],y=await h.createCDPSession(),l=h._client(),N=xt({skipFrameGuard:!0}),{identifier:kt}=await l.send("Page.addScriptToEvaluateOnNewDocument",{source:N});try{await h.goto(o,{waitUntil:"networkidle0",timeout:3e4});for(let C of h.frames())await C.evaluate(N),await C.evaluate(ke(0));await y.send("HeadlessExperimental.enable"),await y.send("HeadlessExperimental.beginFrame",{frameTimeTicks:0,interval:d,noDisplayUpdates:!1});let Y=0,ce=0,Se=0,Ae=d;for(let C=0;C<u;C++){Se+=d,await Promise.all(h.frames().map(St=>St.evaluate(ke(Se))));let Ce=await y.send("HeadlessExperimental.beginFrame",{frameTimeTicks:Ae,interval:d,noDisplayUpdates:!1,screenshot:{format:"png"}});if(Ae+=d,!Ce.screenshotData){g.warn(vt,`frame ${C} produced no screenshot`);continue}await p.encodePNG(Buffer.from(Ce.screenshotData,"base64")),Y++;let Ie=Math.floor(Y/u*100);Math.abs(Ie-ce)>10&&(ce=Ie,t?.(ce));}for(let C of h.frames())C.detached||await C.evaluate(yt());if(Y===0)throw new Error("no frames captured");return {written:Y,jank:0,outFile:a}}finally{await y.send("HeadlessExperimental.disable"),await l.send("Page.removeScriptToEvaluateOnNewDocument",{identifier:kt}),await y.detach();}}finally{await m.close();}}catch(_){var x=_,v=true;}finally{var E=k(f,x,v);E&&await E;}}var j="[pup]";async function ao(o,e,t){g.debug(j,"runPupApp",o,e);let r=[o,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--out-file",`${e.outFile}`];return e.withAudio&&r.push("--with-audio"),e.useInnerProxy&&r.push("--use-inner-proxy"),e.deterministic&&r.push("--deterministic"),e.disableGpu&&r.push("--disable-gpu"),gt(e,r,t)}var R=Je;async function ta(o,e){g.debug(j,"pup",o,e);let{signal:t}=e;if(t?.aborted)throw t.reason;let r=e.outFile??R.outFile,i={width:e.width??R.width,height:e.height??R.height,fps:e.fps??R.fps,duration:e.duration??R.duration,withAudio:e.withAudio??R.withAudio,useInnerProxy:e.useInnerProxy??R.useInnerProxy,deterministic:e.deterministic??R.deterministic,disableGpu:e.disableGpu??R.disableGpu,outFile:r},n=join(tmpdir(),"pup",randomUUID());await mkdir(n,{recursive:true});let s=join(n,"pup.sock"),a=performance.now(),c=m=>(g.info(j,`${o} progress: ${m}%`),e.onProgress?.(m));if(platform()==="linux"&&i.deterministic&&We){c(0);let m=await Et(o,i,c);return c(100),g.info(j,`done ${r} in ${Math.round(performance.now()-a)}ms`),{...m,options:i}}let u=await _t(s),d=await ao(o,{...i,signal:t},s),p=()=>{g.debug(j,"aborted");let m=d.process.pid;m?no(m):d.process.kill(),rmSync(n,{recursive:true,force:true});};t?.addEventListener("abort",p,{once:true});try{let m=new Promise(async(_,x)=>{(await u.waitForConnection()).on("close",()=>x(new Error("IPC closed without result"))).on("message",()=>t?.aborted&&x(t.reason)).on("progress",c).on("done",_).on("error",x);}).finally(()=>u.close());c(0);let f=await Promise.race([m,d.wait]);return ok(f,"no summary received"),c(100),g.info(j,`done ${r} in ${Math.round(performance.now()-a)}ms`),{...f,options:i}}catch(m){throw t?.aborted?t.reason:m}finally{rmSync(n,{recursive:true,force:true});}}export{ne as A,ta as B,Me as a,Ge as b,po as c,K as d,Ue as e,He as f,$e as g,Lt as h,je as i,go as j,We as k,I as l,g as m,So as n,be as o,To as p,Ke as q,Ht as r,$t as s,jt as t,Wt as u,zt as v,Lo as w,Je as x,J as y,Z as z};//# sourceMappingURL=chunk-G3FZJBQC.js.map
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9iYXNlL3Byb2Nlc3MudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2NoZW1hLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NoYXJlZC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2NvZGVjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiLCIuLi9zcmMvYmFzZS9od2FjY2VsLnRzIiwiLi4vc3JjL2Jhc2UvY2hyb21pdW0udHMiLCIuLi9zcmMvcmVuZGVyZXIvZWxlY3Ryb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvcHVwcGV0ZWVyLnRzIiwiLi4vc3JjL3B1cC50cyJdLCJuYW1lcyI6WyJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInBhcnNlU3RyaW5nIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJlbnYiLCJwdXBMb2dMZXZlbCIsInB1cFVzZUlubmVyUHJveHkiLCJwdXBEaXNhYmxlR1BVIiwicHVwRGV0ZXJtaW5pc3RpYyIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwicHVwQXBwIiwiam9pbiIsInB1cElwY1NvY2tldCIsInB1cEV4cGVyaW1lbnRhbFB1cHBldGVlciIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiZXhlYyIsImNtZCIsIm9wdGlvbnMiLCJwYXJ0cyIsImNvbW1hbmQiLCJzcGF3biIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJSZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJlIiwiciIsImtlZXAiLCJlbnRyeSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiRkZtcGVnRXJyb3IiLCJjb2RlY0N0eCIsImNvZGVjVGFnIiwic3RyZWFtIiwicGt0IiwibWFrZUZyYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsImN0eCIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIm9wdHMiLCJjb2RlYyIsIkNvZGVjIiwiQ29kZWNDb250ZXh0IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJfc3RhY2siLCJzcmMiLCJpIiwiblNhbXBsZXMiLCJfX3VzaW5nIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIkFOTkVYX0JfU1RBUlRfQ09ERSIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsIk5BTF9VTklUX1BSRUZJWF9TRUkiLCJidWlsZFVuaWZpZWRFeHRyYWRhdGEiLCJiYXNlRXh0cmFkYXRhIiwiYWxwaGFFeHRyYWRhdGEiLCJiYXNlTmFscyIsImFscGhhTmFscyIsImFscGhhQnlUeXBlIiwiYXJyIiwiY2h1bmtzIiwiZW1pdHRlZCIsInBhdGNoVlBTRm9yQWxwaGEiLCJhbHBoYU5hbCIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsInZwc0RhdGEiLCJyYnNwIiwiYml0UG9zIiwicmVhZEJpdHMiLCJuIiwidmFsIiwiYnl0ZUlkeCIsImJpdElkeCIsInZwc0Jhc2VMYXllckludGVybmFsRmxhZyIsIm1heExheWVyc1BvcyIsIm1sT2Zmc2V0IiwibGFzdEJpdCIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwicyIsImZwcyIsImJpdHJhdGUiLCJodyIsIkZGX0VOQ09ERVJfSEVWQ19OVkVOQyIsImh3RnJhbWVzQ3R4IiwiSGFyZHdhcmVGcmFtZXNDb250ZXh0IiwiQVZfUElYX0ZNVF9DVURBIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwibWFrZUN0eCIsImN0eE9wdHMiLCJBVkNPTF9SQU5HRV9KUEVHIiwiYmFzZUN0eCIsImFscGhhQ3R4IiwiYmFzZVBrdCIsImFscGhhUGt0IiwiYmFzZUV4dHJhIiwiYWxwaGFFeHRyYSIsImJhc2VTd3MiLCJiZ3JhRnJhbWUiLCJ5dXZGcmFtZSIsInB0cyIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInV2U2l6ZSIsInkiLCJiYXNlSHdGcmFtZSIsImFscGhhSHdGcmFtZSIsImJhc2VSIiwiYWxwaGFSIiwiYmFzZVJlYWR5IiwiYWxwaGFSZWFkeSIsImR0cyIsImR1cmF0aW9uIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImdsb2JhbEhlYWRlciIsImNvZGVjT3B0cyIsImsiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJUQUciLCJjcmVhdGVWaWRlb0VuY29kZXIiLCJkaXNhYmxlR3B1IiwiSGFyZHdhcmVDb250ZXh0IiwiRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1giLCJGRl9IV0RFVklDRV9UWVBFX0NVREEiLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsInZpZGVvIiwiaHdWaWRlbyIsImF1ZGlvIiwiRkZfRU5DT0RFUl9BQUMiLCJzYW1wbGVSYXRlIiwiaW5wdXQiLCJkc3QiLCJjcyIsImxpbWl0ZXIiLCJfbSIsIl92IiwiX2h2IiwiX2EiLCJfcHJvbWlzZSIsIl9jb2RlYyIsImRldGVjdEdQVURyaXZlciIsInJlc3VsdCIsImNhbklVc2VHUFUiLCJjaHJvbWl1bU9wdGlvbnMiLCJmZWF0dXJlcyIsInBsYXQiLCJwbGF0Zm9ybSIsImVsZWN0cm9uT3B0cyIsInJ1bkVsZWN0cm9uQXBwIiwic2l6ZSIsImlwY1NvY2tldFBhdGgiLCJjbWRQYXJ0cyIsImVsZWN0cm9uQXJncyIsImEiLCJiYXNlNjRBcmdzIiwiZWxlY3Ryb24iLCJIRUFERVJfU0laRSIsIklwY1JlYWRlciIsIkV2ZW50RW1pdHRlciIsIl9zb2NrZXQiLCJoZWFkZXIiLCJsZW4iLCJwYXlsb2FkIiwib2Zmc2V0IiwiY2h1bmsiLCJ0YWtlIiwiY3JlYXRlSXBjU2VydmVyIiwic29ja2V0UGF0aCIsInNlcnZlciIsImNyZWF0ZVNlcnZlciIsIm5vIiwic29ja2V0IiwiVElDS19TWU1CT0wiLCJidWlsZFRpY2tJbmplY3RvciIsImRvUHJvY2VzcyIsInRpbWVzdGFtcE1zIiwiZG9FamVjdCIsImRvUHVwcGV0ZWVyIiwic291cmNlIiwib25Qcm9ncmVzcyIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsIm1rZGlyIiwicGlwZWxpbmUiLCJicm93c2VyIiwicHVwcGV0ZWVyIiwicGFnZSIsInNlc3Npb24iLCJwYWdlQ2xpZW50IiwidGlja1NjcmlwdCIsImlkZW50aWZpZXIiLCJ3cml0dGVuIiwicHJvZ3Jlc3MiLCJjYXB0dXJlVGltZXN0YW1wIiwiZnJhbWVUaW1lVGlja3MiLCJuZXdQcm9ncmVzcyIsInJ1blB1cEFwcCIsImQiLCJwdXAiLCJyZW5kZXJPcHRzIiwidG1wRGlyIiwidG1wZGlyIiwicmFuZG9tVVVJRCIsInQwIiwidGljayIsInAiLCJzdW1tYXJ5IiwiaGFuZGxlIiwib25BYm9ydCIsInBpZCIsInRyZWVLaWxsIiwicm1TeW5jIl0sIm1hcHBpbmdzIjoia25DQU1PLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsd0JBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsSUFBQSxDQUFBLFlBQUEsQ0FBQSxJQUFBLENBQUEsUUFBQSxDQUFBLElBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxVQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsQ0FBQSxLQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsTUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLFFBQUEsQ0FBQSxDQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxxQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsR0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsUUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsRUFBQSxDQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxNQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSx1QkFBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxlQUFBLEVBQUEsVUFBQSxDQUFBLGVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLGlCQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEseUNBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsT0FBQSxDQUFB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QUFBLENBQy9Cb0MsQ0FBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDTixJQUFNRSxFQUFVLE1BQU0sT0FBQSxDQUFRLEtBQUssQ0FBQ2pFLENBQUFBLENBQVFrRSxDQUFBQSxDQUFPLElBQUksQ0FBQyxDQUFBLENBQ3hELE9BQUE1TSxFQUFBQSxDQUFHMk0sQ0FBQUEsQ0FBUyxxQkFBcUIsQ0FBQSxDQUNqQ0YsQ0FBQUEsQ0FBSyxHQUFHLENBQUEsQ0FDUnhTLENBQUFBLENBQU8sS0FBSzhNLENBQUFBLENBQUssQ0FBQSxLQUFBLEVBQVFTLENBQU8sQ0FBQSxJQUFBLEVBQU8sSUFBQSxDQUFLLE1BQU0sV0FBQSxDQUFZLEdBQUEsR0FBUWdGLENBQUUsQ0FBQyxDQUFBLEVBQUEsQ0FBSSxDQUFBLENBQ3RFLENBQUUsR0FBR0csRUFBUyxPQUFBLENBQVNQLENBQVcsQ0FDM0MsQ0FBQSxNQUFTcFEsQ0FBQUEsQ0FBRyxDQUNWLE1BQUlwQyxDQUFBQSxFQUFRLE9BQUEsQ0FBZUEsQ0FBQUEsQ0FBTyxNQUFBLENBQzVCb0MsQ0FDUixRQUFFLENBQ0FnUixNQUFBQSxDQUFPWCxFQUFRLENBQUUsU0FBQSxDQUFXLEtBQU0sS0FBQSxDQUFPLElBQUssQ0FBQyxFQUNqRCxDQUNGIiwiZmlsZSI6ImNodW5rLUczRlpKQlFDLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHJldHVybiB4O1xuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJtb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5leHBvcnQgY29uc3QgcHVwVXNlSW5uZXJQcm94eSA9IGVudltcIlBVUF9VU0VfSU5ORVJfUFJPWFlcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVHUFUgPSBlbnZbXCJQVVBfRElTQUJMRV9HUFVcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERldGVybWluaXN0aWMgPSBlbnZbXCJQVVBfREVURVJNSU5JU1RJQ1wiXSA9PT0gXCIxXCI7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwSXBjU29ja2V0ID0gZW52W1wiUFVQX0lQQ19TT0NLRVRcIl07XG5cbmV4cG9ydCBjb25zdCBwdXBFeHBlcmltZW50YWxQdXBwZXRlZXIgPSBlbnZbXCJQVVBfRVhQRVJJTUVOVEFMX1BVUFBFVEVFUlwiXSA9PT0gXCIxXCI7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIHR5cGUgU2VyaWFsaXphYmxlIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyIHwgU2VyaWFsaXphYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCBkaXNwYXRjaClcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8Rm4gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSwgRD4oXG4gIGZuOiBGbixcbiAgZGVmYXVsdFZhbHVlOiBELFxuKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rm4+KSA9PiBSZXR1cm5UeXBlPEZuPiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIHJldHVybiB7IHByb2Nlc3M6IHByb2MsIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCkgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHB1cERldGVybWluaXN0aWMsIHB1cERpc2FibGVHUFUsIHB1cFVzZUlubmVyUHJveHkgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEUgPSBcIm91dHB1dC5tcDRcIjtcblxuZXhwb3J0IGNvbnN0IFJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiT3V0cHV0IG1wNCBmaWxlIHBhdGhcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgUmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogcHVwVXNlSW5uZXJQcm94eSxcbiAgZGV0ZXJtaW5pc3RpYzogcHVwRGV0ZXJtaW5pc3RpYyxcbiAgZGlzYWJsZUdwdTogcHVwRGlzYWJsZUdQVSxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHJldHVybjtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YsIHR5cGUgQVZQaXhlbEZvcm1hdCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9zaGFyZWRcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vc2hhcmVkXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOYWxVbml0IHtcbiAgdHlwZTogbnVtYmVyO1xuICBsYXllcklkOiBudW1iZXI7XG4gIGRhdGE6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYWxUeXBlKGhlYWRlcjA6IG51bWJlciwgaGVhZGVyMTogbnVtYmVyKTogeyB0eXBlOiBudW1iZXI7IGxheWVySWQ6IG51bWJlcjsgdGVtcG9yYWxJZDogbnVtYmVyIH0ge1xuICBjb25zdCB0eXBlID0gKGhlYWRlcjAgPj4gMSkgJiAweDNmO1xuICBjb25zdCBsYXllcklkID0gKChoZWFkZXIwICYgMSkgPDwgNSkgfCAoKGhlYWRlcjEgPj4gMykgJiAweDFmKTtcbiAgY29uc3QgdGVtcG9yYWxJZCA9IGhlYWRlcjEgJiAweDA3O1xuICByZXR1cm4geyB0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOYWxIZWFkZXIodHlwZTogbnVtYmVyLCBsYXllcklkOiBudW1iZXIsIHRlbXBvcmFsSWQ6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBieXRlMCA9ICgodHlwZSAmIDB4M2YpIDw8IDEpIHwgKChsYXllcklkID4+IDUpICYgMSk7XG4gIGNvbnN0IGJ5dGUxID0gKChsYXllcklkICYgMHgxZikgPDwgMykgfCAodGVtcG9yYWxJZCAmIDB4MDcpO1xuICByZXR1cm4gW2J5dGUwLCBieXRlMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkgYnJlYWs7XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGVuY29kZU5hbEhlYWRlcixcbiAgTkFMX0hFQURFUl9TSVpFLFxuICB0eXBlIE5hbFVuaXQsXG4gIHBhY2tCaXRzLFxuICByZXdyaXRlTmFsTGF5ZXJJZCxcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5cbmNvbnN0IE5BTF9VTklUX1BSRUZJWF9TRUkgPSAzOTtcblxuLyoqXG4gKiBCdWlsZCB1bmlmaWVkIGV4dHJhZGF0YTogYmFzZSBWUFMgKHBhdGNoZWQgZm9yIGFscGhhKSArIGludGVybGVhdmVkIFNQUy9QUFMuXG4gKiBBbHBoYSBTUFMvUFBTIGZvbGxvdyB0aGVpciBiYXNlIGNvdW50ZXJwYXJ0cyBzbyB0aGUgSFZDQyBzZXJpYWxpemVyXG4gKiBncm91cHMgdGhlbSBpbnRvIHRoZSBzYW1lIE5BTCBhcnJheSAocmVxdWlyZWQgZm9yIG11bHRpLWxheWVyKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5pZmllZEV4dHJhZGF0YShiYXNlRXh0cmFkYXRhOiBCdWZmZXIsIGFscGhhRXh0cmFkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSAzMikgY29udGludWU7IC8vIFZQUyBpcyBwZXItYml0c3RyZWFtLCBub3QgcGVyLWxheWVyXG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIC8vIFZQUyBuZWVkcyBhbHBoYSBsYXllciBkZWNsYXJhdGlvbiBmb3IgRkZtcGVnJ3MgSFZDQyBzZXJpYWxpemVyXG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSAzMiA/IHBhdGNoVlBTRm9yQWxwaGEobmFsLmRhdGEpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYWxwaGFOYWwuZGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNFSSBtdXN0IGJlIGluIGV4dHJhZGF0YSBmb3IgQXBwbGUncyBkZWNvZGVyIHRvIGRpc2NvdmVyIGFscGhhIGNoYW5uZWxcbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8qKlxuICogUGF0Y2ggYSBzaW5nbGUtbGF5ZXIgVlBTIHRvIGRlY2xhcmUgMiBsYXllcnMgd2l0aCBsYXllciAxID0gQVVYX0FMUEhBLlxuICogRkZtcGVnIDguMCdzIGh2Y2NfcGFyc2VfdnBzX2V4dGVuc2lvbiByZWFkcyB0aGlzIHRvIHNldCBhbHBoYV9sYXllcl9udWhfaWQsXG4gKiB3aGljaCBhbGxvd3MgbGF5ZXJfaWQ9MSBOQUxzIHRvIHN1cnZpdmUgQW5uZXggQiDihpIgSFZDQyBjb252ZXJzaW9uLlxuICovXG5mdW5jdGlvbiBwYXRjaFZQU0ZvckFscGhhKHZwc0RhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSB2cHNEYXRhLnN1YmFycmF5KE5BTF9IRUFERVJfU0laRSk7XG5cbiAgbGV0IGJpdFBvcyA9IDA7XG4gIGNvbnN0IHJlYWRCaXRzID0gKG46IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IGJ5dGVJZHggPSAoYml0UG9zICsgaSkgPj4gMztcbiAgICAgIGNvbnN0IGJpdElkeCA9IDcgLSAoKGJpdFBvcyArIGkpICYgNyk7XG4gICAgICB2YWwgPSAodmFsIDw8IDEpIHwgKChyYnNwW2J5dGVJZHhdISA+PiBiaXRJZHgpICYgMSk7XG4gICAgfVxuICAgIGJpdFBvcyArPSBuO1xuICAgIHJldHVybiB2YWw7XG4gIH07XG5cbiAgcmVhZEJpdHMoNCk7IC8vIHZwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHZwc0Jhc2VMYXllckludGVybmFsRmxhZyA9IHJlYWRCaXRzKDEpO1xuICByZWFkQml0cygxKTsgLy8gdnBzX2Jhc2VfbGF5ZXJfYXZhaWxhYmxlX2ZsYWdcbiAgY29uc3QgbWF4TGF5ZXJzUG9zID0gYml0UG9zO1xuICBjb25zdCBtYXhMYXllcnNNaW51czEgPSByZWFkQml0cyg2KTtcblxuICBpZiAobWF4TGF5ZXJzTWludXMxID4gMCkgcmV0dXJuIHZwc0RhdGE7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cHNEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSBiaXRzLnB1c2goKHZwc0RhdGFbaV0hID4+IGIpICYgMSk7XG4gIH1cblxuICBjb25zdCBtbE9mZnNldCA9IG1heExheWVyc1BvcyArIE5BTF9IRUFERVJfU0laRSAqIDg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSBiaXRzW21sT2Zmc2V0ICsgaV0gPSAwO1xuICBiaXRzW21sT2Zmc2V0ICsgNV0gPSAxOyAvLyB2cHNfbWF4X2xheWVyc19taW51czEgPSAxXG5cbiAgbGV0IGxhc3RCaXQgPSBiaXRzLmxlbmd0aCAtIDE7XG4gIHdoaWxlIChsYXN0Qml0ID4gMCAmJiBiaXRzW2xhc3RCaXRdID09PSAwKSBsYXN0Qml0LS07XG4gIGlmIChsYXN0Qml0IDw9IDEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVlBTOiBubyBSQlNQIHN0b3AgYml0XCIpO1xuICBiaXRzW2xhc3RCaXQgLSAxXSA9IDE7IC8vIHZwc19leHRlbnNpb25fZmxhZyA9IDFcbiAgYml0cy5sZW5ndGggPSBsYXN0Qml0O1xuXG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIGJpdHMucHVzaCgxKTsgLy8gYnl0ZS1hbGlnblxuXG4gIC8vIE1pbmltYWwgVlBTIGV4dGVuc2lvbiBmb3IgRkZtcGVnJ3MgaHZjY19wYXJzZV92cHNfZXh0ZW5zaW9uXG4gIGlmICh2cHNCYXNlTGF5ZXJJbnRlcm5hbEZsYWcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykgYml0cy5wdXNoKDApOyAvLyBnZW5lcmFsX2xldmVsX2lkY1xuICB9XG4gIGJpdHMucHVzaCgwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBiaXRzLnB1c2goaSA9PT0gMyA/IDEgOiAwKTsgLy8gc2NhbGFiaWxpdHlfbWFzazogQXV4SWRcbiAgYml0cy5wdXNoKDAsIDAsIDApOyAvLyBkaW1lbnNpb25faWRfbGVuX21pbnVzMSA9IDBcbiAgYml0cy5wdXNoKDApOyAvLyB2cHNfbnVoX2xheWVyX2lkX3ByZXNlbnRfZmxhZ1xuICBiaXRzLnB1c2goMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IEFVWF9BTFBIQVxuXG4gIGJpdHMucHVzaCgxKTtcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYml0cy5wdXNoKDApO1xuXG4gIHJldHVybiBwYWNrQml0cyhiaXRzKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhbHBoYV9jaGFubmVsX2luZm8gU0VJIG1lc3NhZ2UgKHBheWxvYWRUeXBlPTE2NSkuXG4gKiBMYXlvdXQgZnJvbSB4MjY1IFNFSUFscGhhQ2hhbm5lbEluZm86OndyaXRlU0VJLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9VTklUX1BSRUZJWF9TRUksIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGMgKHN0cmFpZ2h0IGFscGhhKVxuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkgd3JpdGVCaXRzKDAsIDEpO1xuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuLyoqIEludGVybGVhdmUgYmFzZSBhbmQgYWxwaGEgTkFMcyBmb3IgYSBzaW5nbGUgZnJhbWUuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IDMyKSB7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKG5hbC5kYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRnJhbWUsXG4gIEhhcmR3YXJlRnJhbWVzQ29udGV4dCxcbiAgUmF0aW9uYWwsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgUGFja2V0LFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX0NVREEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZDT0xfUkFOR0VfSlBFRyxcbiAgRkZfRU5DT0RFUl9IRVZDX05WRU5DLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSwgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBpbnRlcmxlYXZlQWNjZXNzVW5pdHMgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9zaGFyZWRcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBiYXNlU3dzOiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgeXV2RnJhbWU6IEZyYW1lO1xuICBod0ZyYW1lc0N0eDogSGFyZHdhcmVGcmFtZXNDb250ZXh0O1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX3NlaUJ1ZmZlcjogQnVmZmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcbiAgcHJpdmF0ZSBfc2VpSW5qZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWxwaGFCdWY/OiBCdWZmZXI7XG4gIHByaXZhdGUgX2FscGhhRnJhbWU/OiBGcmFtZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9zZWlCdWZmZXIgPSBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgaHcsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBod0ZyYW1lc0N0eCA9IG5ldyBIYXJkd2FyZUZyYW1lc0NvbnRleHQoKTtcbiAgICBod0ZyYW1lc0N0eC5hbGxvYyhody5kZXZpY2VDb250ZXh0KTtcbiAgICBod0ZyYW1lc0N0eC5mb3JtYXQgPSBBVl9QSVhfRk1UX0NVREE7XG4gICAgaHdGcmFtZXNDdHguc3dGb3JtYXQgPSBBVl9QSVhfRk1UX1lVVjQyMFA7IC8vIE5WRU5DIG9ubHkgYWNjZXB0cyBZVVY0MjBQL05WMTIsIG5vdCBCR1JBXG4gICAgaHdGcmFtZXNDdHgud2lkdGggPSB3aWR0aDtcbiAgICBod0ZyYW1lc0N0eC5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgaHdGcmFtZXNDdHguaW5pdGlhbFBvb2xTaXplID0gMjA7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGh3RnJhbWVzQ3R4LmluaXQoKSwgXCJod0ZyYW1lc0N0eC5pbml0XCIpO1xuXG4gICAgY29uc3QgbWFrZUN0eCA9IGFzeW5jIChjdHhPcHRzOiB7IGJyOiBudW1iZXI7IGZ1bGxSYW5nZT86IGJvb2xlYW47IGNxcD86IG51bWJlciB9KSA9PiB7XG4gICAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgICAgY3R4LndpZHRoID0gd2lkdGg7XG4gICAgICBjdHguaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgY3R4LnBpeGVsRm9ybWF0ID0gQVZfUElYX0ZNVF9DVURBO1xuICAgICAgaWYgKGN0eE9wdHMuZnVsbFJhbmdlKSBjdHguY29sb3JSYW5nZSA9IEFWQ09MX1JBTkdFX0pQRUc7XG4gICAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgZnBzKTtcbiAgICAgIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwoZnBzLCAxKTtcbiAgICAgIGN0eC5nb3BTaXplID0gZnBzICogMjtcbiAgICAgIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgICAgY3R4LnNldE9wdGlvbihcInByZXNldFwiLCBcInA0XCIpO1xuICAgICAgY3R4LnNldE9wdGlvbihcImJmXCIsIFwiMFwiKTsgLy8gbm8gQi1mcmFtZXMg4oCUIGtlZXAgYmFzZSthbHBoYSBwYWNrZXQgb3V0cHV0IGluIHN5bmNcbiAgICAgIGlmIChjdHhPcHRzLmNxcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN0eC5zZXRPcHRpb24oXCJyY1wiLCBcImNvbnN0cXBcIik7XG4gICAgICAgIGN0eC5zZXRPcHRpb24oXCJxcFwiLCBTdHJpbmcoY3R4T3B0cy5jcXApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KGN0eE9wdHMuYnIpO1xuICAgICAgfVxuICAgICAgY3R4Lmh3RnJhbWVzQ3R4ID0gaHdGcmFtZXNDdHg7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJudmVuYy5vcGVuMlwiKTtcbiAgICAgIHJldHVybiBjdHg7XG4gICAgfTtcblxuICAgIGNvbnN0IGJhc2VDdHggPSBhd2FpdCBtYWtlQ3R4KHsgYnI6IGJpdHJhdGUgfSk7XG4gICAgY29uc3QgYWxwaGFDdHggPSBhd2FpdCBtYWtlQ3R4KHsgYnI6IGJpdHJhdGUsIGZ1bGxSYW5nZTogdHJ1ZSwgY3FwOiAxIH0pO1xuXG4gICAgY29uc3QgYmFzZVBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICBjb25zdCBhbHBoYVBrdCA9IG1ha2VQYWNrZXQoKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG5cbiAgICBjb25zdCBiYXNlRXh0cmEgPSBiYXNlQ3R4LmV4dHJhRGF0YTtcbiAgICBjb25zdCBhbHBoYUV4dHJhID0gYWxwaGFDdHguZXh0cmFEYXRhO1xuICAgIGlmIChiYXNlRXh0cmEgJiYgYWxwaGFFeHRyYSkge1xuICAgICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YShiYXNlRXh0cmEsIGFscGhhRXh0cmEpO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VTd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICBiYXNlU3dzLmdldENvbnRleHQod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBLCB3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQyMFAsIFNXU19CSUxJTkVBUik7XG4gICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4LFxuICAgICAgYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0LFxuICAgICAgc3RyZWFtLFxuICAgICAgYmFzZVN3cyxcbiAgICAgIHl1dkZyYW1lOiBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKSxcbiAgICAgIGh3RnJhbWVzQ3R4LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VTd3MsIHl1dkZyYW1lLCBod0ZyYW1lc0N0eCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIC8vIEJhc2U6IEJHUkEg4oaSIFNXUyDihpIgWVVWNDIwUCBzdyBmcmFtZVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih5dXZGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJ5dXYubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlU3dzLnNjYWxlRnJhbWUoeXV2RnJhbWUsIGJncmFGcmFtZSksIFwic3dzLmJhc2VcIik7XG5cbiAgICAvLyBBbHBoYTogZXh0cmFjdCBhbHBoYSBjaGFubmVsIOKGkiBZVVY0MjBQIHN3IGZyYW1lIChCdWZmZXIuY29weSBwYXR0ZXJuIGZyb20gaHctZW5jb2RlLnRzKVxuICAgIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gICAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImVuY29kZTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gICAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICAgIGNvbnN0IHV2U2l6ZSA9ICh3ID4+IDEpICogKGggPj4gMSk7XG4gICAgaWYgKCF0aGlzLl9hbHBoYUJ1ZikgdGhpcy5fYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyB1dlNpemUgKiAyKTtcbiAgICBjb25zdCBidWYgPSB0aGlzLl9hbHBoYUJ1ZjtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIHtcbiAgICAgICAgYnVmW3kgKiB3ICsgeF0gPSBzcmNbeSAqIHNyY0xzICsgeCAqIDQgKyAzXSE7XG4gICAgICB9XG4gICAgfVxuICAgIGJ1Zi5maWxsKDEyOCwgeVNpemUsIHlTaXplICsgdXZTaXplICogMik7XG5cbiAgICAvLyBmcm9tVmlkZW9CdWZmZXIgaXMgdGhlIG9ubHkgd2F5IHRvIHNldCBuYXRpdmUgZnJhbWUgZGF0YSBvbiBMaW51eFxuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKGJ1ZiwgeyBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCwgd2lkdGg6IHcsIGhlaWdodDogaCB9KTtcblxuICAgIC8vIFVwbG9hZCBib3RoIHRvIEdQVSArIGVuY29kZVxuICAgIGNvbnN0IGJhc2VId0ZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgYmFzZUh3RnJhbWUuYWxsb2MoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoaHdGcmFtZXNDdHguZ2V0QnVmZmVyKGJhc2VId0ZyYW1lLCAwKSwgXCJiYXNlLmdldEJ1ZmZlclwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgaHdGcmFtZXNDdHgudHJhbnNmZXJEYXRhKGJhc2VId0ZyYW1lLCB5dXZGcmFtZSwgMCksIFwiYmFzZS50cmFuc2ZlclwiKTtcbiAgICBiYXNlSHdGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmFzZUh3RnJhbWUuZHVyYXRpb24gPSAxbjtcblxuICAgIGNvbnN0IGFscGhhSHdGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIGFscGhhSHdGcmFtZS5hbGxvYygpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihod0ZyYW1lc0N0eC5nZXRCdWZmZXIoYWxwaGFId0ZyYW1lLCAwKSwgXCJhbHBoYS5nZXRCdWZmZXJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGh3RnJhbWVzQ3R4LnRyYW5zZmVyRGF0YShhbHBoYUh3RnJhbWUsIHRoaXMuX2FscGhhRnJhbWUsIDApLCBcImFscGhhLnRyYW5zZmVyXCIpO1xuICAgIGFscGhhSHdGcmFtZS5wdHMgPSBwdHM7XG4gICAgYWxwaGFId0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmFzZUh3RnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFId0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkludGVybGVhdmVkKG11eGVyKTtcbiAgICBiYXNlSHdGcmFtZS5mcmVlKCk7XG4gICAgYWxwaGFId0ZyYW1lLmZyZWUoKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYmFzZUN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5fcy5hbHBoYUN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkludGVybGVhdmVkKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgeXV2RnJhbWUsIGJhc2VTd3MsIGh3RnJhbWVzQ3R4LCBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgeXV2RnJhbWVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZT8uZnJlZSgpO1xuICAgIGJhc2VTd3NbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdGcmFtZXNDdHguZnJlZSgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkludGVybGVhdmVkKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSA9IHRoaXMuX3M7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGJhc2VSID0gYXdhaXQgYmFzZUN0eC5yZWNlaXZlUGFja2V0KGJhc2VQa3QpO1xuICAgICAgY29uc3QgYWxwaGFSID0gYXdhaXQgYWxwaGFDdHgucmVjZWl2ZVBhY2tldChhbHBoYVBrdCk7XG5cbiAgICAgIGNvbnN0IGJhc2VSZWFkeSA9IGJhc2VSID49IDA7XG4gICAgICBjb25zdCBhbHBoYVJlYWR5ID0gYWxwaGFSID49IDA7XG4gICAgICBpZiAoIWJhc2VSZWFkeSAmJiAhYWxwaGFSZWFkeSkgYnJlYWs7XG5cbiAgICAgIC8vIEJvdGggbXVzdCBwcm9kdWNlIHBhY2tldHMgdG9nZXRoZXIgKGJmPTAgZW5zdXJlcyB0aGlzKVxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogYmFzZT0ke2Jhc2VSZWFkeX0sIGFscGhhPSR7YWxwaGFSZWFkeX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VQa3QuZGF0YSEpO1xuICAgICAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYVBrdC5kYXRhISk7XG5cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIGlmICghdGhpcy5fc2VpSW5qZWN0ZWQpIHtcbiAgICAgICAgY2h1bmtzLnB1c2godGhpcy5fc2VpQnVmZmVyKTtcbiAgICAgICAgdGhpcy5fc2VpSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2goaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzLCBhbHBoYU5hbHMpKTtcblxuICAgICAgLy8gU2F2ZSB0aW1lc3RhbXBzIGJlZm9yZSBkYXRhIHJlcGxhY2VtZW50IChzZXR0ZXIgbWF5IHJlc2V0IHRoZW0pXG4gICAgICBjb25zdCBwdHMgPSBiYXNlUGt0LnB0cztcbiAgICAgIGNvbnN0IGR0cyA9IGJhc2VQa3QuZHRzO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBiYXNlUGt0LmR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5kYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgYmFzZVBrdC5wdHMgPSBwdHM7XG4gICAgICBiYXNlUGt0LmR0cyA9IGR0cztcbiAgICAgIGJhc2VQa3QuZHVyYXRpb24gPSBkdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcblxuICAgICAgYmFzZVBrdC51bnJlZigpO1xuICAgICAgYWxwaGFQa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsIHR5cGUgQVZQaXhlbEZvcm1hdCwgdHlwZSBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vc2hhcmVkXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGNvZGVjTmFtZSwgY29kZWNUYWcsIGdsb2JhbEhlYWRlciwgY29kZWNPcHRzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHgud2lkdGggPSB3aWR0aDtcbiAgICBjdHguaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIGZwcyk7XG4gICAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChmcHMsIDEpO1xuICAgIGN0eC5nb3BTaXplID0gZnBzICogMjtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChiaXRyYXRlKTtcbiAgICBpZiAoZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhjb2RlY09wdHMpKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICAgIGlmIChjb2RlY1RhZykgY3R4LmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwidmlkZW9DdHgub3BlbjJcIik7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCBSYXRpb25hbCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiwgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9zaGFyZWRcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC53aWR0aCA9IHdpZHRoO1xuICAgIGN0eC5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgY3R4LnBpeGVsRm9ybWF0ID0gQVZfUElYX0ZNVF9CR1JBO1xuICAgIGN0eC5jb2xvclJhbmdlID0gQVZDT0xfUkFOR0VfSlBFRztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgZnBzKTtcbiAgICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKGZwcywgMSk7XG4gICAgY3R4LmdvcFNpemUgPSBmcHMgKiAyO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KGJpdHJhdGUpO1xuICAgIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIGN0eC5zZXRPcHRpb24oXCJhbHBoYV9xdWFsaXR5XCIsIFwiMVwiKTtcbiAgICBjdHguY29kZWNUYWcgPSBcImh2YzFcIjtcblxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcInZ0RW5jLm9wZW4yXCIpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIG1ha2VQYWNrZXQoKSwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL252ZW5jXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlR3B1PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzOiBWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVHcHUgPSBmYWxzZSB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBkaXNhYmxlR3B1ID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKTtcblxuICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gIH1cblxuICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICByZXR1cm4geyBod1ZpZGVvLCBodyB9O1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBzb2Z0d2FyZSBsaWJ4MjY1IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgaHc/LmRpc3Bvc2UoKTtcbiAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZnBzLFxuICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJtZWRpdW1cIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgYml0cmF0ZSxcbiAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICBtdXhlcixcbiAgfSk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCkgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVl9TQU1QTEVfRk1UX0ZMVFAsIEZGX0VOQ09ERVJfQUFDIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZVZpZGVvRW5jb2RlciwgdHlwZSBId0VuY29kZXIgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9zaGFyZWRcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xuICBkaXNhYmxlR3B1PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvdXRGaWxlKTtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBjb2RlYywgaHcgfSA9IGF3YWl0IGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzLCBtdXhlcik7XG5cbiAgICBsZXQgYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICBhdWRpbyA9IGF3YWl0IEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHtcbiAgICAgIHZpZGVvLFxuICAgICAgaHdWaWRlbyxcbiAgICAgIGF1ZGlvLFxuICAgICAgbXV4ZXIsXG4gICAgICBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZSxcbiAgICAgIGNvZGVjLFxuICAgICAgaHcsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShmcmFtZSwgbXV4ZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHNyYywgZHN0LCBzd3MgfSA9IGNvZGVjITtcbiAgICAgIG9rKHN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHNyYy5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhU3JjLm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYVNyYy5mcm9tQnVmZmVyXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGRzdC5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBzd3Muc2NhbGVGcmFtZShkc3QsIHNyYyksIFwiYmdyYVN3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgcmV0dXJuIHZpZGVvIS5lbmNvZGUoZHN0LCBtdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICAgIGNvbnN0IGNzID0gY29kZWMgPz8gKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGNzLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY3MuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInBuZ0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNzLnN3cy5zY2FsZUZyYW1lKGNzLmRzdCwgc3JjKSwgXCJwbmdTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgICAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNzLmRzdCwgbXV4ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNvZGVjKSBjc1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhdWRpbywgbGltaXRlciwgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGF1ZGlvKSBhd2FpdCBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IGF1ZGlvLmVuY29kZShwY20sIG11eGVyKSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIF9tID0gbXV4ZXI7XG4gICAgICB1c2luZyBfdiA9IHZpZGVvO1xuICAgICAgdXNpbmcgX2h2ID0gaHdWaWRlbztcbiAgICAgIHVzaW5nIF9hID0gYXVkaW87XG4gICAgICBhd2FpdCBsaW1pdGVyLmRyYWluKCk7XG4gICAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZnJlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdXNpbmcgX2NvZGVjID0gdGhpcy5fcy5jb2RlYztcbiAgICB0aGlzLl9zLmh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mud2lkdGgsIHRoaXMuX3MuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltIV0FjY2VsXVwiO1xuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RHUFVEcml2ZXIoKSB7XG4gIGNvbnN0IGh3ID0gSGFyZHdhcmVDb250ZXh0LmF1dG8oKTtcbiAgY29uc3QgcmVzdWx0ID0gaHcgIT09IG51bGw7XG4gIGh3Py5kaXNwb3NlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBjYW5JVXNlR1BVID0gZGV0ZWN0R1BVRHJpdmVyKCkudGhlbigocmVzdWx0KSA9PiB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNhbklVc2VHUFUgfSBmcm9tIFwiLi9od2FjY2VsXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaHJvbWl1bU9wdGlvbnMoZGlzYWJsZUdwdTogYm9vbGVhbikge1xuICBjb25zdCBvcHRzID0gW1xuICAgIC8vIOWuueWZqOaymeeusVxuICAgIFwibm8tc2FuZGJveFwiLFxuICAgIFwiZGlzYWJsZS1kZXYtc2htLXVzYWdlXCIsXG4gICAgLy8g6Leo5Z+fL+WuieWFqFxuICAgIFwiZGlzYWJsZS13ZWItc2VjdXJpdHlcIixcbiAgICBcImRpc2FibGUtc2l0ZS1pc29sYXRpb24tdHJpYWxzXCIsXG4gICAgXCJpZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzXCIsXG4gICAgLy8g5b2V5Yi26KGM5Li6XG4gICAgXCJkaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkXCIsXG4gICAgXCJtdXRlLWF1ZGlvXCIsXG4gICAgXCJhdXRvcGxheS1wb2xpY3k9bm8tdXNlci1nZXN0dXJlLXJlcXVpcmVkXCIsXG4gICAgXCJkaXNhYmxlLWV4dGVuc2lvbnNcIixcbiAgICAvLyDmuLLmn5NcbiAgICBcImZvcmNlLWRldmljZS1zY2FsZS1mYWN0b3I9MVwiLFxuICAgIFwiZm9yY2UtY29sb3ItcHJvZmlsZT1zcmdiXCIsXG4gICAgXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiLFxuICAgIFwidXNlLWdsPWFuZ2xlXCIsXG4gICAgXCJkZXRlcm1pbmlzdGljLW1vZGVcIixcbiAgICBcImVuYWJsZS1iZWdpbi1mcmFtZS1jb250cm9sXCIsXG4gICAgXCJkaXNhYmxlLW5ldy1jb250ZW50LXJlbmRlcmluZy10aW1lb3V0XCIsXG4gICAgXCJydW4tYWxsLWNvbXBvc2l0b3Itc3RhZ2VzLWJlZm9yZS1kcmF3XCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLWFuaW1hdGlvblwiLFxuICAgIFwiZGlzYWJsZS10aHJlYWRlZC1zY3JvbGxpbmdcIixcbiAgICBcImRpc2FibGUtY2hlY2tlci1pbWFnaW5nXCIsXG4gICAgXCJkaXNhYmxlLWltYWdlLWFuaW1hdGlvbi1yZXN5bmNcIixcbiAgICBcImVuYWJsZS1zdXJmYWNlLXN5bmNocm9uaXphdGlvblwiLFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wdXBwZXRlZXIvcHVwcGV0ZWVyL2lzc3Vlcy8yNDEwXG4gICAgXCJmb250LXJlbmRlci1oaW50aW5nPW5vbmVcIixcbiAgICAvLyDotYTmupDmjqfliLZcbiAgICBcImRpc2FibGUtYmFja2dyb3VuZC1uZXR3b3JraW5nXCIsXG4gIF07XG5cbiAgaWYgKHB1cExvZ0xldmVsIDwgMykge1xuICAgIG9wdHMucHVzaChcImxvZy1sZXZlbD0zXCIpO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBbXCJGb250YXRpb25CYWNrZW5kXCJdO1xuICBjb25zdCBlbmFibGVHcHUgPSAoYXdhaXQgY2FuSVVzZUdQVSkgJiYgIWRpc2FibGVHcHU7XG4gIGlmICghZW5hYmxlR3B1KSB7XG4gICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPXN3aWZ0c2hhZGVyXCIsIFwiZW5hYmxlLXVuc2FmZS1zd2lmdHNoYWRlclwiKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLnB1c2goXCJkaXNhYmxlLWdwdS1zYW5kYm94XCIsIFwiZW5hYmxlLXVuc2FmZS13ZWJncHVcIik7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgaWYgKHBsYXQgPT09IFwiZGFyd2luXCIpIHtcbiAgICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1tZXRhbFwiKTtcbiAgICB9IGVsc2UgaWYgKHBsYXQgPT09IFwid2luMzJcIikge1xuICAgICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPWQzZDExXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9dnVsa2FuXCIsIFwiZGlzYWJsZS12dWxrYW4tc3VyZmFjZVwiKTtcbiAgICAgIGZlYXR1cmVzLnB1c2goXCJWdWxrYW5cIik7XG4gICAgfVxuICB9XG5cbiAgb3B0cy5wdXNoKGBlbmFibGUtZmVhdHVyZXM9JHtmZWF0dXJlcy5qb2luKFwiLFwiKX1gKTtcbiAgcmV0dXJuIG9wdHM7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgZWxlY3Ryb24sIHsgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgY2hyb21pdW1PcHRpb25zIH0gZnJvbSBcIi4uL2Jhc2UvY2hyb21pdW1cIjtcbmltcG9ydCB7IHB1cEFwcCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZXhlYywgUFVQX0FSR1NfS0VZIH0gZnJvbSBcIi4uL2Jhc2UvcHJvY2Vzc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWxlY3Ryb25PcHRzKGRpc2FibGVHcHU6IGJvb2xlYW4pIHtcbiAgcmV0dXJuIFsuLi4oYXdhaXQgY2hyb21pdW1PcHRpb25zKGRpc2FibGVHcHUpKSwgXCJoZWFkbGVzcz1uZXdcIl07XG59XG5cbmNvbnN0IFRBRyA9IFwiW0VsZWN0cm9uXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRWxlY3Ryb25BcHAoc2l6ZTogU2l6ZSwgYXJnczogdW5rbm93bltdLCBpcGNTb2NrZXRQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgY21kUGFydHM6IHVua25vd25bXSA9IFtdO1xuICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgaWYgKHBsYXQgPT09IFwibGludXhcIikge1xuICAgIGNtZFBhcnRzLnB1c2goYHh2ZmItcnVuYCwgYC0tYXV0by1zZXJ2ZXJudW1gLCBgLS1zZXJ2ZXItYXJncz1cIi1zY3JlZW4gMCAke3NpemUud2lkdGh9eCR7c2l6ZS5oZWlnaHR9eDI0XCJgKTtcbiAgfVxuICBjb25zdCBvcHRzID0gYXdhaXQgZWxlY3Ryb25PcHRzKGFyZ3MuaW5jbHVkZXMoXCItLWRpc2FibGUtZ3B1XCIpKTtcbiAgY29uc3QgZWxlY3Ryb25BcmdzID0gb3B0cy5tYXAoKGEpID0+IGAtLSR7YX1gKTtcbiAgY29uc3QgYmFzZTY0QXJncyA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGFyZ3MpKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgZWxlY3Ryb25BcmdzLnB1c2goYCR7UFVQX0FSR1NfS0VZfT0ke2Jhc2U2NEFyZ3N9YCk7XG4gIGNtZFBhcnRzLnB1c2goZWxlY3Ryb24sIC4uLmVsZWN0cm9uQXJncywgcHVwQXBwKTtcbiAgY29uc3QgY21kID0gY21kUGFydHMuam9pbihcIiBcIik7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGNtZCk7XG4gIHJldHVybiBleGVjKGNtZCwge1xuICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICBzaGVsbDogcGxhdCA9PT0gXCJsaW51eFwiLFxuICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgUlVTVF9CQUNLVFJBQ0U6IFwiZnVsbFwiLCBQVVBfSVBDX1NPQ0tFVDogaXBjU29ja2V0UGF0aCB9LFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbm5lY3Rpb24sIGNyZWF0ZVNlcnZlciwgdHlwZSBTb2NrZXQgfSBmcm9tIFwibmV0XCI7XG5cbmNvbnN0IEhFQURFUl9TSVpFID0gODtcblxuZXhwb3J0IGNvbnN0IGVudW0gSXBjTXNnVHlwZSB7XG4gIFBST0dSRVNTID0gMSxcbiAgRE9ORSA9IDIsXG4gIEVSUk9SID0gMyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zb2NrZXQ6IFNvY2tldCkge31cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuUFJPR1JFU1MsIEJ1ZmZlci5mcm9tKGAke3ZhbHVlfWApKTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5FUlJPUiwgQnVmZmVyLmZyb20oZXJyb3IpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuRE9ORSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlKHR5cGU6IElwY01zZ1R5cGUsIHBheWxvYWQ6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYyhIRUFERVJfU0laRSk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUodHlwZSwgMCk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUocGF5bG9hZC5ieXRlTGVuZ3RoLCA0KTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUoaGVhZGVyKTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUocGF5bG9hZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RJcGMoc29ja2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxJcGNXcml0ZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzb2NrZXQgPSBjcmVhdGVDb25uZWN0aW9uKHNvY2tldFBhdGgpO1xuICAgIHNvY2tldC5vbmNlKFwiY29ubmVjdFwiLCAoKSA9PiByZXNvbHZlKG5ldyBJcGNXcml0ZXIoc29ja2V0KSkpO1xuICAgIHNvY2tldC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8e1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBtZXNzYWdlOiBbdHlwZTogSXBjTXNnVHlwZSwgYnVmZmVyOiBCdWZmZXJdO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbXTtcbn0+IHtcbiAgcHJpdmF0ZSBfY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBwcml2YXRlIF9idWZmZXJlZCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc29ja2V0OiBTb2NrZXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImRhdGFcIiwgKGRhdGEpID0+IHRoaXMub25EYXRhKGRhdGEpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiKSk7XG4gIH1cblxuICBwcml2YXRlIG9uRGF0YShkYXRhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaHVua3MucHVzaChkYXRhKTtcbiAgICB0aGlzLl9idWZmZXJlZCArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgdGhpcy5mbHVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaCgpOiB2b2lkIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyZWQgPCBIRUFERVJfU0laRSkgcmV0dXJuO1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5wZWVrKEhFQURFUl9TSVpFKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBoZWFkZXIucmVhZFVJbnQzMkxFKDApIGFzIElwY01zZ1R5cGU7XG4gICAgICBjb25zdCBsZW4gPSBoZWFkZXIucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlcmVkIDwgSEVBREVSX1NJWkUgKyBsZW4pIHJldHVybjtcbiAgICAgIHRoaXMuY29uc3VtZShIRUFERVJfU0laRSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jb25zdW1lKGxlbik7XG4gICAgICB0aGlzLmVtaXQoXCJtZXNzYWdlXCIsIHR5cGUsIHBheWxvYWQpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5QUk9HUkVTUzoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIE51bWJlcihwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRE9ORToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgSlNPTi5wYXJzZShwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRVJST1I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBlZWsobjogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fY2h1bmtzWzBdICYmIHRoaXMuX2NodW5rc1swXS5ieXRlTGVuZ3RoID49IG4pIHJldHVybiB0aGlzLl9jaHVua3NbMF07XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5fY2h1bmtzKS5zdWJhcnJheSgwLCBuKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZShuOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgbikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9jaHVua3NbMF0hO1xuICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGNodW5rLmJ5dGVMZW5ndGgsIG4gLSBvZmZzZXQpO1xuICAgICAgY2h1bmsuY29weShvdXQsIG9mZnNldCwgMCwgdGFrZSk7XG4gICAgICBpZiAodGFrZSA9PT0gY2h1bmsuYnl0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaHVua3Muc2hpZnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NodW5rc1swXSA9IGNodW5rLnN1YmFycmF5KHRha2UpO1xuICAgICAgfVxuICAgICAgb2Zmc2V0ICs9IHRha2U7XG4gICAgfVxuICAgIHRoaXMuX2J1ZmZlcmVkIC09IG47XG4gICAgcmV0dXJuIG91dDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY1NlcnZlciB7XG4gIHdhaXRGb3JDb25uZWN0aW9uKCk6IFByb21pc2U8SXBjUmVhZGVyPjtcbiAgY2xvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlwY1NlcnZlcihzb2NrZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElwY1NlcnZlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKHNvY2tldFBhdGgsICgpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB3YWl0Rm9yQ29ubmVjdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SXBjUmVhZGVyPigob2ssIG5vKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImNvbm5lY3Rpb25cIiwgKHNvY2tldCkgPT4gb2sobmV3IElwY1JlYWRlcihzb2NrZXQpKSk7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIG5vKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpY2tJbmplY3Rvck9wdGlvbnMge1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBza2lwcyB0aGUgdG9wLWZyYW1lIGd1YXJkIHNvIHRoZSBpbmplY3RvciBydW5zIGluIHRoZSBtYWluIGRvY3VtZW50LlxuICAgKiBSZXF1aXJlZCBmb3IgUHVwcGV0ZWVyIG1vZGUgd2hlcmUgdGhlIHBhZ2UgaXMgbG9hZGVkIGRpcmVjdGx5IChubyBzdGVnbyBpZnJhbWUgd3JhcHBlcikuXG4gICAqIERlZmF1bHQ6IGZhbHNlIChFbGVjdHJvbi9zdGVnbyBtb2RlIOKAlCBvbmx5IGluamVjdCBpbiBpZnJhbWVzKS5cbiAgICovXG4gIHNraXBGcmFtZUd1YXJkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIEpTIGluamVjdG9yIHRoYXQgaG9va3MgYWxsIHRpbWUtcmVsYXRlZCBnbG9iYWxzIGluIHRoZSB0YXJnZXQgZnJhbWUuXG4gKiBJbiBFbGVjdHJvbi9zdGVnbyBtb2RlIChkZWZhdWx0KSwgZ3VhcmRzIGFnYWluc3QgcnVubmluZyBpbiB0aGUgdG9wLWxldmVsIGZyYW1lLlxuICogSW4gUHVwcGV0ZWVyIG1vZGUgKHNraXBGcmFtZUd1YXJkOiB0cnVlKSwgaW5qZWN0cyBkaXJlY3RseSBpbnRvIHRoZSBtYWluIGRvY3VtZW50LlxuICogTXVzdCBiZSBpbmplY3RlZCB2aWEgUGFnZS5hZGRTY3JpcHRUb0V2YWx1YXRlT25OZXdEb2N1bWVudCBBTkQgZGlyZWN0bHkgaW50b1xuICogYWxyZWFkeS1sb2FkZWQgZnJhbWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUaWNrSW5qZWN0b3Iob3B0cz86IFRpY2tJbmplY3Rvck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBmcmFtZUd1YXJkID0gb3B0cz8uc2tpcEZyYW1lR3VhcmQgPyBcIlwiIDogXCJpZiAod2luZG93LnNlbGYgPT09IHdpbmRvdy50b3ApIHJldHVybjtcIjtcbiAgcmV0dXJuIGAoZnVuY3Rpb24oKSB7XG4gICR7ZnJhbWVHdWFyZH1cbiAgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICBjb25zdCBvcmlnID0ge1xuICAgIERhdGU6IERhdGUsXG4gICAgZGF0ZU5vdzogRGF0ZS5ub3cuYmluZChEYXRlKSxcbiAgICBwZXJmb3JtYW5jZU5vdzogcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpLFxuICAgIHJhZjogcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBjYWY6IGNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBjbGVhclRpbWVvdXQ6IGNsZWFyVGltZW91dC5iaW5kKHdpbmRvdyksXG4gICAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsLmJpbmQod2luZG93KSxcbiAgICBjbGVhckludGVydmFsOiBjbGVhckludGVydmFsLmJpbmQod2luZG93KSxcbiAgfTtcblxuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHJhZlF1ZXVlID0gW107XG4gIGNvbnN0IHRpbWVycyA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgZGF0ZU9yaWdpbiA9IG5ldyBvcmlnLkRhdGUoKTtcbiAgY29uc3QgcGVyZk9yaWdpbiA9IG9yaWcucGVyZm9ybWFuY2VOb3coKTtcblxuICBwZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBlcmZPcmlnaW4gKyBjdXJyTXM7IH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBPID0gb3JpZy5EYXRlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IE8oZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXMpO1xuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KE8sIFtudWxsXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpKSgpO1xuICB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXM7IH07XG4gIERhdGUucGFyc2UgPSBvcmlnLkRhdGUucGFyc2U7XG4gIERhdGUuVVRDID0gb3JpZy5EYXRlLlVUQztcbiAgRGF0ZS5wcm90b3R5cGUgPSBvcmlnLkRhdGUucHJvdG90eXBlO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYikge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmFmUXVldWUgPSByYWZRdWV1ZS5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfTtcblxuICB3aW5kb3cuc2V0VGltZW91dCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ3RpbWVvdXQnLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIHdpbmRvdy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICdpbnRlcnZhbCcsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICBmdW5jdGlvbiBwcm9jZXNzKHRpbWVzdGFtcE1zKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgZG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goYSA9PiB7XG4gICAgICBhLnBhdXNlKCk7XG4gICAgICBhLmN1cnJlbnRUaW1lID0gY3Vyck1zO1xuICAgIH0pO1xuICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRpbWVycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSB0aW1lcnNbaWRzW2ldXTtcbiAgICAgIGlmICghdCkgY29udGludWU7XG4gICAgICB3aGlsZSAodC5uZXh0IDw9IGN1cnJNcykge1xuICAgICAgICBpZiAodHlwZW9mIHQuY2IgPT09ICdzdHJpbmcnKSBldmFsKHQuY2IpOyBlbHNlIHQuY2IuYXBwbHkodW5kZWZpbmVkLCB0LmFyZ3MpO1xuICAgICAgICBpZiAodC50eXBlID09PSAndGltZW91dCcpIHsgZGVsZXRlIHRpbWVyc1tpZHNbaV1dOyBicmVhazsgfVxuICAgICAgICB0Lm5leHQgKz0gdC5kZWxheTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmFmcyA9IHJhZlF1ZXVlLnNwbGljZSgwKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJhZnMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJhZnNbal0uY2IoY3Vyck1zKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlamVjdCgpIHtcbiAgICBEYXRlID0gb3JpZy5EYXRlO1xuICAgIHBlcmZvcm1hbmNlLm5vdyA9IG9yaWcucGVyZm9ybWFuY2VOb3c7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG9yaWcucmFmO1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IG9yaWcuY2FmO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0ID0gb3JpZy5zZXRUaW1lb3V0O1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBvcmlnLmNsZWFyVGltZW91dDtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBvcmlnLnNldEludGVydmFsO1xuICAgIHdpbmRvdy5jbGVhckludGVydmFsID0gb3JpZy5jbGVhckludGVydmFsO1xuICAgIGRlbGV0ZSB3aW5kb3cuJHtUSUNLX1NZTUJPTH07XG4gIH1cblxuICB3aW5kb3cuJHtUSUNLX1NZTUJPTH0gPSB7IHByb2Nlc3M6IHByb2Nlc3MsIGVqZWN0OiBlamVjdCB9O1xufSkoKTtgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9Qcm9jZXNzKHRpbWVzdGFtcE1zOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvRWplY3QoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBpZiAodHlwZW9mICR7VElDS19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgJHtUSUNLX1NZTUJPTH0uZWplY3QoKWA7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgcHVwcGV0ZWVyIGZyb20gXCJwdXBwZXRlZXJcIjtcbmltcG9ydCB7IGNocm9taXVtT3B0aW9ucyB9IGZyb20gXCIuLi9iYXNlL2Nocm9taXVtXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgeyB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGJ1aWxkVGlja0luamVjdG9yLCBkb0VqZWN0LCBkb1Byb2Nlc3MgfSBmcm9tIFwiLi90aWNrXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1B1cHBldGVlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvUHVwcGV0ZWVyKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyxcbiAgb25Qcm9ncmVzcz86IChwOiBudW1iZXIpID0+IHZvaWQsXG4pOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgb3V0RmlsZSwgZGlzYWJsZUdwdSB9ID0gb3B0aW9ucztcbiAgaWYgKG9wdGlvbnMud2l0aEF1ZGlvKSBsb2dnZXIud2FybihUQUcsIFwiYXVkaW8gY2FwdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGluIFB1cHBldGVlciBtb2RlXCIpO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXRGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgZGlzYWJsZUdwdSB9KTtcblxuICBjb25zdCBicm93c2VyID0gYXdhaXQgcHVwcGV0ZWVyLmxhdW5jaCh7XG4gICAgaGVhZGxlc3M6IFwic2hlbGxcIixcbiAgICBkZWZhdWx0Vmlld3BvcnQ6IHsgd2lkdGgsIGhlaWdodCB9LFxuICAgIGFyZ3M6IChhd2FpdCBjaHJvbWl1bU9wdGlvbnMoZGlzYWJsZUdwdSkpLm1hcCgoYSkgPT4gYC0tJHthfWApLFxuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhZ2UgPSAoYXdhaXQgYnJvd3Nlci5wYWdlcygpKVswXSE7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgcGFnZS5jcmVhdGVDRFBTZXNzaW9uKCk7XG4gICAgLy8gUGFnZS5hZGRTY3JpcHRUb0V2YWx1YXRlT25OZXdEb2N1bWVudCBtdXN0IHVzZSB0aGUgcGFnZSdzIG93biBDRFAgY2xpZW50LlxuICAgIC8vIEhlYWRsZXNzRXhwZXJpbWVudGFsIHVzZXMgYSBzZXBhcmF0ZSBzZXNzaW9uIChzZWUgcHVwcGV0ZWVyLWNhcHR1cmUpLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Ig4oCUIF9jbGllbnQoKSBpcyBhIHByaXZhdGUgUHVwcGV0ZWVyIEFQSSBub3QgZXhwb3NlZCBpbiB0eXBlIGRlY2xhcmF0aW9uc1xuICAgIGNvbnN0IHBhZ2VDbGllbnQgPSBwYWdlLl9jbGllbnQoKSBhcyB0eXBlb2Ygc2Vzc2lvbjtcblxuICAgIGNvbnN0IHRpY2tTY3JpcHQgPSBidWlsZFRpY2tJbmplY3Rvcih7IHNraXBGcmFtZUd1YXJkOiB0cnVlIH0pO1xuICAgIGNvbnN0IHsgaWRlbnRpZmllciB9ID0gYXdhaXQgcGFnZUNsaWVudC5zZW5kKFwiUGFnZS5hZGRTY3JpcHRUb0V2YWx1YXRlT25OZXdEb2N1bWVudFwiLCB7IHNvdXJjZTogdGlja1NjcmlwdCB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwYWdlLmdvdG8oc291cmNlLCB7IHdhaXRVbnRpbDogXCJuZXR3b3JraWRsZTBcIiwgdGltZW91dDogMzBfMDAwIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIHBhZ2UuZnJhbWVzKCkpIHtcbiAgICAgICAgYXdhaXQgZnJhbWUuZXZhbHVhdGUodGlja1NjcmlwdCk7XG4gICAgICAgIGF3YWl0IGZyYW1lLmV2YWx1YXRlKGRvUHJvY2VzcygwKSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNlc3Npb24uc2VuZChcIkhlYWRsZXNzRXhwZXJpbWVudGFsLmVuYWJsZVwiKTtcblxuICAgICAgLy8gVHJpZ2dlciBhbiBpbml0aWFsIHJlbmRlciBzbyBhbnkgQ1NTIGFuaW1hdGlvbnMgc3RhcnQgYW5kIGZpcmUgYW5pbWF0aW9uU3RhcnRlZCBldmVudHMuXG4gICAgICBhd2FpdCBzZXNzaW9uLnNlbmQoXCJIZWFkbGVzc0V4cGVyaW1lbnRhbC5iZWdpbkZyYW1lXCIsIHtcbiAgICAgICAgZnJhbWVUaW1lVGlja3M6IDAsXG4gICAgICAgIGludGVydmFsOiBmcmFtZUludGVydmFsLFxuICAgICAgICBub0Rpc3BsYXlVcGRhdGVzOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgd3JpdHRlbiA9IDA7XG4gICAgICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICAgICAgbGV0IGNhcHR1cmVUaW1lc3RhbXAgPSAwO1xuICAgICAgbGV0IGZyYW1lVGltZVRpY2tzID0gZnJhbWVJbnRlcnZhbDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgIGNhcHR1cmVUaW1lc3RhbXAgKz0gZnJhbWVJbnRlcnZhbDtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwYWdlLmZyYW1lcygpLm1hcCgoZnJhbWUpID0+IGZyYW1lLmV2YWx1YXRlKGRvUHJvY2VzcyhjYXB0dXJlVGltZXN0YW1wKSkpKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXNzaW9uLnNlbmQoXCJIZWFkbGVzc0V4cGVyaW1lbnRhbC5iZWdpbkZyYW1lXCIsIHtcbiAgICAgICAgICBmcmFtZVRpbWVUaWNrcyxcbiAgICAgICAgICBpbnRlcnZhbDogZnJhbWVJbnRlcnZhbCxcbiAgICAgICAgICBub0Rpc3BsYXlVcGRhdGVzOiBmYWxzZSxcbiAgICAgICAgICBzY3JlZW5zaG90OiB7IGZvcm1hdDogXCJwbmdcIiB9LFxuICAgICAgICB9KTtcbiAgICAgICAgZnJhbWVUaW1lVGlja3MgKz0gZnJhbWVJbnRlcnZhbDtcblxuICAgICAgICBpZiAoIXJlc3VsdC5zY3JlZW5zaG90RGF0YSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFRBRywgYGZyYW1lICR7aX0gcHJvZHVjZWQgbm8gc2NyZWVuc2hvdGApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmUuZW5jb2RlUE5HKEJ1ZmZlci5mcm9tKHJlc3VsdC5zY3JlZW5zaG90RGF0YSwgXCJiYXNlNjRcIikpO1xuICAgICAgICB3cml0dGVuKys7XG5cbiAgICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKG5ld1Byb2dyZXNzIC0gcHJvZ3Jlc3MpID4gMTApIHtcbiAgICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICAgIG9uUHJvZ3Jlc3M/Lihwcm9ncmVzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBmcmFtZSBvZiBwYWdlLmZyYW1lcygpKSB7XG4gICAgICAgIGlmICghZnJhbWUuZGV0YWNoZWQpIGF3YWl0IGZyYW1lLmV2YWx1YXRlKGRvRWplY3QoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh3cml0dGVuID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gICAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiAwLCBvdXRGaWxlIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHNlc3Npb24uc2VuZChcIkhlYWRsZXNzRXhwZXJpbWVudGFsLmRpc2FibGVcIik7XG4gICAgICBhd2FpdCBwYWdlQ2xpZW50LnNlbmQoXCJQYWdlLnJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbk5ld0RvY3VtZW50XCIsIHsgaWRlbnRpZmllciB9KTtcbiAgICAgIGF3YWl0IHNlc3Npb24uZGV0YWNoKCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGJyb3dzZXIuY2xvc2UoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgcGxhdGZvcm0sIHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgcHVwRXhwZXJpbWVudGFsUHVwcGV0ZWVyIH0gZnJvbSBcIi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgcnVuRWxlY3Ryb25BcHAgfSBmcm9tIFwiLi9yZW5kZXJlci9lbGVjdHJvblwiO1xuaW1wb3J0IHsgY3JlYXRlSXBjU2VydmVyLCB0eXBlIElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBkb1B1cHBldGVlciB9IGZyb20gXCIuL3JlbmRlcmVyL3B1cHBldGVlclwiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMsIHR5cGUgUmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJSZXN1bHQgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbcHVwXVwiO1xuXG5leHBvcnQgdHlwZSBQdXBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1cE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFJlbmRlck9wdGlvbnM+IHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M/OiBQdXBQcm9ncmVzc0NhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1cFJlc3VsdCBleHRlbmRzIFJlbmRlclJlc3VsdCB7fVxuXG5pbnRlcmZhY2UgQXBwT3B0aW9ucyBleHRlbmRzIFJlbmRlck9wdGlvbnMge1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuUHVwQXBwKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBBcHBPcHRpb25zLCBzb2NrZXRQYXRoOiBzdHJpbmcpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYHJ1blB1cEFwcGAsIHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXG4gICAgc291cmNlLFxuICAgIGAtLXdpZHRoYCxcbiAgICBgJHtvcHRpb25zLndpZHRofWAsXG4gICAgYC0taGVpZ2h0YCxcbiAgICBgJHtvcHRpb25zLmhlaWdodH1gLFxuICAgIGAtLWZwc2AsXG4gICAgYCR7b3B0aW9ucy5mcHN9YCxcbiAgICBgLS1kdXJhdGlvbmAsXG4gICAgYCR7b3B0aW9ucy5kdXJhdGlvbn1gLFxuICAgIGAtLW91dC1maWxlYCxcbiAgICBgJHtvcHRpb25zLm91dEZpbGV9YCxcbiAgXTtcbiAgaWYgKG9wdGlvbnMud2l0aEF1ZGlvKSBhcmdzLnB1c2goYC0td2l0aC1hdWRpb2ApO1xuICBpZiAob3B0aW9ucy51c2VJbm5lclByb3h5KSBhcmdzLnB1c2goYC0tdXNlLWlubmVyLXByb3h5YCk7XG4gIGlmIChvcHRpb25zLmRldGVybWluaXN0aWMpIGFyZ3MucHVzaChgLS1kZXRlcm1pbmlzdGljYCk7XG4gIGlmIChvcHRpb25zLmRpc2FibGVHcHUpIGFyZ3MucHVzaChgLS1kaXNhYmxlLWdwdWApO1xuXG4gIHJldHVybiBydW5FbGVjdHJvbkFwcChvcHRpb25zLCBhcmdzLCBzb2NrZXRQYXRoKTtcbn1cblxuY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVwKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBQYXJ0aWFsPFB1cE9wdGlvbnM+KTogUHJvbWlzZTxQdXBSZXN1bHQ+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYHB1cGAsIHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gIGlmIChzaWduYWw/LmFib3J0ZWQpIHRocm93IHNpZ25hbC5yZWFzb247XG5cbiAgY29uc3Qgb3V0RmlsZSA9IG9wdGlvbnMub3V0RmlsZSA/PyBkLm91dEZpbGU7XG4gIGNvbnN0IHJlbmRlck9wdHM6IFJlbmRlck9wdGlvbnMgPSB7XG4gICAgd2lkdGg6IG9wdGlvbnMud2lkdGggPz8gZC53aWR0aCxcbiAgICBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0ID8/IGQuaGVpZ2h0LFxuICAgIGZwczogb3B0aW9ucy5mcHMgPz8gZC5mcHMsXG4gICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24gPz8gZC5kdXJhdGlvbixcbiAgICB3aXRoQXVkaW86IG9wdGlvbnMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgIHVzZUlubmVyUHJveHk6IG9wdGlvbnMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgZGV0ZXJtaW5pc3RpYzogb3B0aW9ucy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICBkaXNhYmxlR3B1OiBvcHRpb25zLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgIG91dEZpbGUsXG4gIH07XG5cbiAgY29uc3QgdG1wRGlyID0gam9pbih0bXBkaXIoKSwgXCJwdXBcIiwgcmFuZG9tVVVJRCgpKTtcbiAgYXdhaXQgbWtkaXIodG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3Qgc29ja2V0UGF0aCA9IGpvaW4odG1wRGlyLCBcInB1cC5zb2NrXCIpO1xuXG4gIGNvbnN0IHQwID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHRpY2sgPSAocDogbnVtYmVyKSA9PiAobG9nZ2VyLmluZm8oVEFHLCBgJHtzb3VyY2V9IHByb2dyZXNzOiAke3B9JWApLCBvcHRpb25zLm9uUHJvZ3Jlc3M/LihwKSk7XG5cbiAgLy8gT24gTGludXggKyBkZXRlcm1pbmlzdGljIG1vZGUsIHVzZSBQdXBwZXRlZXIgaW5saW5lIChubyBFbGVjdHJvbiBzdWJwcm9jZXNzIG5lZWRlZCkuXG4gIGlmIChwbGF0Zm9ybSgpID09PSBcImxpbnV4XCIgJiYgcmVuZGVyT3B0cy5kZXRlcm1pbmlzdGljICYmIHB1cEV4cGVyaW1lbnRhbFB1cHBldGVlcikge1xuICAgIHRpY2soMCk7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGF3YWl0IGRvUHVwcGV0ZWVyKHNvdXJjZSwgcmVuZGVyT3B0cywgdGljayk7XG4gICAgdGljaygxMDApO1xuICAgIGxvZ2dlci5pbmZvKFRBRywgYGRvbmUgJHtvdXRGaWxlfSBpbiAke01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSB0MCl9bXNgKTtcbiAgICByZXR1cm4geyAuLi5zdW1tYXJ5LCBvcHRpb25zOiByZW5kZXJPcHRzIH07XG4gIH1cblxuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBjcmVhdGVJcGNTZXJ2ZXIoc29ja2V0UGF0aCk7XG4gIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHJ1blB1cEFwcChzb3VyY2UsIHsgLi4ucmVuZGVyT3B0cywgc2lnbmFsIH0sIHNvY2tldFBhdGgpO1xuXG4gIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGFib3J0ZWRgKTtcbiAgICBjb25zdCBwaWQgPSBoYW5kbGUucHJvY2Vzcy5waWQ7XG4gICAgaWYgKHBpZCkgdHJlZUtpbGwocGlkKTtcbiAgICBlbHNlIGhhbmRsZS5wcm9jZXNzLmtpbGwoKTtcbiAgICBybVN5bmModG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH07XG4gIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPElwY0RvbmVQYXlsb2FkPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAoYXdhaXQgc2VydmVyLndhaXRGb3JDb25uZWN0aW9uKCkpXG4gICAgICAgIC5vbihcImNsb3NlXCIsICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJJUEMgY2xvc2VkIHdpdGhvdXQgcmVzdWx0XCIpKSlcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCAoKSA9PiBzaWduYWw/LmFib3J0ZWQgJiYgcmVqZWN0KHNpZ25hbC5yZWFzb24pKVxuICAgICAgICAub24oXCJwcm9ncmVzc1wiLCB0aWNrKVxuICAgICAgICAub24oXCJkb25lXCIsIHJlc29sdmUpXG4gICAgICAgIC5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSkuZmluYWxseSgoKSA9PiBzZXJ2ZXIuY2xvc2UoKSk7XG4gICAgdGljaygwKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtyZXN1bHQsIGhhbmRsZS53YWl0XSk7XG4gICAgb2soc3VtbWFyeSwgXCJubyBzdW1tYXJ5IHJlY2VpdmVkXCIpO1xuICAgIHRpY2soMTAwKTtcbiAgICBsb2dnZXIuaW5mbyhUQUcsIGBkb25lICR7b3V0RmlsZX0gaW4gJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdDApfW1zYCk7XG4gICAgcmV0dXJuIHsgLi4uc3VtbWFyeSwgb3B0aW9uczogcmVuZGVyT3B0cyB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgc2lnbmFsLnJlYXNvbjtcbiAgICB0aHJvdyBlO1xuICB9IGZpbmFsbHkge1xuICAgIHJtU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuIl19