pup-recorder 0.3.1 → 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.
- package/dist/_tsup-dts-rollup.d.ts +11 -22
- package/dist/app.cjs +14 -8
- package/dist/chunk-NKXGLDTD.js +2 -0
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/package.json +2 -3
- package/dist/chunk-2SPBNHMM.js +0 -96
package/dist/chunk-2SPBNHMM.js
DELETED
|
@@ -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,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,FF_ENCODER_HEVC_NVENC,AV_PIX_FMT_YUV420P,AVCOL_RANGE_JPEG}from'node-av/constants';import {spawn}from'child_process';import E 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 oo from'tree-kill';import $r from'electron';import {EventEmitter}from'events';import {createServer}from'net';import Kr from'puppeteer';var At=Object.create;var me=Object.defineProperty;var It=Object.getOwnPropertyDescriptor;var Y=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),I=r=>{throw TypeError(r)};var Ne=(r,e,t)=>e in r?me(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Ve=r=>[,,,At(null)],Le=["class","method","getter","setter","accessor","field","value","get","set"],j=r=>r!==void 0&&typeof r!="function"?I("Function expected"):r,Tt=(r,e,t,o,i)=>({kind:Le[r],name:e,metadata:o,addInitializer:n=>t._?I("Already initialized"):i.push(j(n||null))}),fe=(r,e)=>Ne(e,Y("metadata"),r[3]),Me=(r,e,t,o)=>{for(var i=0,n=r[e>>1],a=n&&n.length;i<a;i++)n[i].call(t);return o},D=(r,e,t,o,i,n)=>{var c,s,u,p,d=e&7,f=false,m=false,g=2,x=Le[d+5],de=r[g]||(r[g]=[]),b=((i=i.prototype),It(i,t));for(var v=o.length-1;v>=0;v--)u=Tt(d,t,s={},r[3],de),(u.static=f,u.private=m,p=u.access={has:_=>t in _},(p.get=_=>_[t]),d>2),c=(0, o[v])(b[x],u),s._=1,j(c)&&(b[x]=c);return b&&me(i,t,b),i},Ue=(r,e,t)=>Ne(r,e+"",t);var y=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&I("Object expected");var o,i;t&&(o=e[Y("asyncDispose")]),o===void 0&&(o=e[Y("dispose")],t&&(i=o)),typeof o!="function"&&I("Object not disposable"),i&&(o=function(){try{i.call(this);}catch(n){return Promise.reject(n)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},k=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(a,c,s,u){return u=Error(s),u.name="SuppressedError",u.error=a,u.suppressed=c,u},i=a=>e=t?new o(a,e,"An error was suppressed during disposal"):(t=true,a),n=a=>{for(;a=r.pop();)try{var c=a[1]&&a[1].call(a[2]);if(a[0])return Promise.resolve(c).then(n,s=>(i(s),n()))}catch(s){i(s);}if(t)throw e};return n()};function Ge(r,e,t){try{return e(process.env[r])}catch{return t}}function He(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}function co(r){return typeof r=="string"?r:String(r)}var Vt=createRequire(import.meta.url),N=process.env,Q=Ge("PUP_LOG_LEVEL",He,2),$e=N.PUP_USE_INNER_PROXY==="1",je=N.PUP_DISABLE_GPU==="1",We=N.PUP_DISABLE_HW_CODEC==="1",ze=N.PUP_DETERMINISTIC==="1",Lt=dirname(Vt.resolve("pup-recorder/package.json")),Xe=join(Lt,"dist","app.cjs"),wo=N.PUP_IPC_SOCKET,qe=N.PUP_EXPERIMENTAL_PUPPETEER==="1";var he="<pup@debug>",we="<pup@info>",ge="<pup@warn>",_e="<pup@error>",be="<pup@fatal>";function W(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var Ye,Qe,Ke,Je,Ze,T;Ze=[W],Je=[W],Ke=[W],Qe=[W],Ye=[W];var A=class{constructor(e=Q){this._level=e;Me(T,5,this);Ue(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,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error,a=this._level;this._impl={debug:a>=3?t:void 0,info:a>=2?o:void 0,warn:a>=1?i:void 0,error:a>=0?n:void 0};}debug(...e){this.impl?.debug?.(he,...e);}info(...e){this.impl?.info?.(we,...e);}warn(...e){this.impl?.warn?.(ge,...e);}error(...e){this.impl?.error?.(_e,...e);}fatal(...e){this.impl?.error?.(be,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(he)?this.debug(t.slice(he.length+1)):t.startsWith(we)?this.info(t.slice(we.length+1)):t.startsWith(ge)?this.warn(t.slice(ge.length+1)):t.startsWith(_e)?this.error(t.slice(_e.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",a=c=>{let s=c.toString();s.startsWith(be)?n+=s.slice(be.length+1):this.dispatch(s);};e.stderr?.on("data",a),e.stdout?.on("data",a),e.on("message",a).on("error",c=>{n+=c.message,e.kill();}).once("close",(c,s)=>{c||s||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:s,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};T=Ve(),D(T,1,"debug",Ze,A),D(T,1,"info",Je,A),D(T,1,"warn",Ke,A),D(T,1,"error",Qe,A),D(T,1,"fatal",Ye,A),fe(T,A);var w=new A;Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=AV_LOG_ERROR?w.error(t):r<=AV_LOG_WARNING&&w.warn(t));});function Fo(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var xe="--pup-priv-args";function Io(){let r=process.argv,e=r.find(o=>o.startsWith(xe));if(!e)return w.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),w.debug("pupargs",t),t}function et(r,e){let t=r.split(" ").filter(a=>a.length),[o,...i]=t;if(!o)throw new Error("empty command");let n=spawn(o,i,{stdio:"inherit",...e});return {process:n,wait:w.attach(n,o)}}var $t=1920,jt=1080,Wt=30,zt=5,Xt="output.mp4",Do=E.object({duration:E.number().describe("Duration in seconds"),width:E.number().describe("Video width"),height:E.number().describe("Video height"),fps:E.number().describe("Frames per second"),withAudio:E.boolean().describe("Capture and encode audio"),outFile:E.string().describe("Output mp4 file path"),useInnerProxy:E.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:E.boolean().describe("Render by frame rather than recording"),disableGpu:E.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:E.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265")}),tt={width:$t,height:jt,fps:Wt,duration:zt,outFile:Xt,withAudio:false,useInnerProxy:$e,deterministic:ze,disableGpu:je,disableHwCodec:We};var K=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(n=>{this._active--,o(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 o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};var J=class{_ctx;_opened=false;constructor(e,t){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};async function R(r,e){let t=new CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new Rational(1,r.fps),t.framerate=new Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function X(r,e,t){let o=new Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function P(){let r=new Packet;return r.alloc(),r}async function V(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===AVERROR_EAGAIN||i===AVERROR_EOF)break;FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var ur={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},Z=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=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 o=new CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new FilterGraph;t.alloc();let o=Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=Filter.getByName("abuffersink"),a=t.createFilter(n,"sink");if(!a)throw new Error("Failed to create abuffersink");let s=`aformat=sample_fmts=${ur[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}]),p=FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(s,p,u),"graph.parsePtr"),FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=a;}async encode(e,t){var a=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)isFinite(o[p])||(o[p]=0);let i=o.length>>1;let n=y(a,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(c){var s=c,u=true;}finally{k(a,s,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 M=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=Codec.findDecoderByName(FF_DECODER_PNG);return ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=X(e,t,AV_PIX_FMT_BGRA$1),this.dst=X(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 o=[];try{let t=y(o,await this.png());this.pkt.data=e;FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var n=i,a=true;}finally{k(o,n,a);}}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]();}};function re(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var ee=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},te=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var U=Buffer.from([0,0,0,1]);function ut(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function Ee(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function G(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let i=t+o;if(i+2>r.length)break;let n=r.length;for(let s=i+2;s<r.length-2;s++)if(r[s]===0&&r[s+1]===0&&(r[s+2]===1||s+3<r.length&&r[s+2]===0&&r[s+3]===1)){n=s;break}let{type:a,layerId:c}=ut(r[i],r[i+1]);e.push({type:a,layerId:c,data:r.subarray(i,n)}),t=n;}return e}function Pe(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=ut(t[0],t[1]),[n,a]=Ee(o,e,i);return t[0]=n,t[1]=a,t}function dt(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function pt(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}function gr(r){let e=new te(dt(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function _r(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function br(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function mt(r,e,t){let o=gr(r);if(!o)return r;let i=new ee;return _r(i,o),br(i,o,e,t),i.bits.push(1),i.align(0),pt(re(i.bits))}var xr=39;function ft(r){let{baseExtradata:e,alphaExtradata:t}=r,o=G(e),i=G(t),n=new Map;for(let s of i){if(s.type===32)continue;let u=n.get(s.type)??[];u.push(s),n.set(s.type,u);}let a=[],c=new Set;for(let s of o){let u=s.type===32?mt(s.data,r.width,r.height):s.data;if(a.push(U,u),!c.has(s.type)){c.add(s.type);for(let p of n.get(s.type)??[])a.push(U,Pe(p.data,1));}}return a.push(Fe()),Buffer.concat(a)}function Fe(){let[t,o]=Ee(xr,0,1),i=[],n=(a,c)=>{for(let s=c-1;s>=0;s--)i.push(a>>s&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,o]),Buffer.from([165,4]),re(i),Buffer.from([128])])}function lt(r,e){let t=[];for(let o of r)t.push(U,o.data);for(let o of e)o.type<32&&t.push(U,Pe(o.data,1));return Buffer.concat(t)}var oe=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=Fe();}static async create(e){let{width:t,height:o,fps:i,bitrate:n,muxer:a}=e,c=Codec.findEncoderByName(FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let u={codec:c,width:t,height:o,fps:i,bitrate:n,options:{preset:"p4",bf:"0"}},p=await R({...u,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),d=await R({...u,pixelFormat:AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),f=P(),m=P(),g=a.addStream(p,"hvc1"),x=p.extraData,F=d.extraData;return x&&F&&(g.codecpar.extradata=ft({baseExtradata:x,alphaExtradata:F,width:t,height:o})),new r({baseCtx:p,alphaCtx:d,basePkt:f,alphaPkt:m,stream:g})}async encode(e,t){let{baseCtx:o,alphaCtx:i}=this._s,n=this._pts++;e.pts=n,e.duration=1n,FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame");let a=e.data?.[0],c=e.linesize?.[0];if(!a||!c)throw new Error("encode: missing BGRA data");let s=e.width,u=e.height,p=s*u,d=(s>>1)*(u>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(p+d*2));let f=this._alphaBuf;for(let m=0;m<u;m++)for(let g=0;g<s;g++)f[m*s+g]=a[m*c+g*4+3];f.fill(128,p,p+d*2),this._alphaFrame?.free(),this._alphaFrame=Frame.fromVideoBuffer(f,{format:AV_PIX_FMT_YUV420P,width:s,height:u}),this._alphaFrame.pts=n,this._alphaFrame.duration=1n,FFmpegError.throwIfError(await i.sendFrame(this._alphaFrame),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i}=this._s;e.free(),t.free(),this._alphaFrame?.free(),o.freeContext(),i.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:n,stream:a}=this._s;for(;;){let c=await t.receivePacket(i),s=await o.receivePacket(n),u=c>=0,p=s>=0;if(!u&&!p)break;if(u!==p)throw new Error(`NVENC desync: base=${u}, alpha=${p}`);let d=G(i.data),f=G(n.data),m=[];this._seiInjected||(m.push(this._seiBuffer),this._seiInjected=true),m.push(lt(d,f));let g=i.pts,x=i.dts,F=i.duration;i.data=Buffer.concat(m),i.pts=g,i.dts=x,i.duration=F===0n?1n:F,i.streamIndex=a.index,i.rescaleTs(t.timeBase,a.timeBase),await e.writePacket(i),i.unref(),n.unref();}}};var ie=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:n,...a}=e,c=Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let s=await R({codec:c,...a,codecTag:o,options:i},"videoCtx.open2"),u=n.addStream(s,o);return new r(s,P(),u)}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 ne=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:i,hw:n,bitrate:a,muxer:c}=e,s=n.getEncoderCodec("hevc");if(!s)throw new Error("hevc_videotoolbox encoder not found");let u=await R({codec:s,width:t,height:o,fps:i,bitrate:a,pixelFormat:AV_PIX_FMT_BGRA,colorRange:AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p=c.addStream(u,"hvc1");return new r(u,P(),p)}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 ae="[Encoder]";async function gt(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableHwCodec:a=false}=r,c=a?void 0:HardwareContext.auto()??void 0;try{if(c?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return w.debug(ae,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await ne.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c};if(c?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return w.debug(ae,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await oe.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c}}catch(u){w.warn(ae,"Hardware codec session limits reached, use software encoder",u);}finally{c?.dispose();}return w.debug(ae,"using software libx265 HEVC alpha encoder"),c?.dispose(),{video:await ie.create({width:t,height:o,fps:i,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:n,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await M.create(t,o)}}var se=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,outFile:i,withAudio:n=false}=e,a=new J(i),{video:c,hwVideo:s,codec:u,hw:p}=await gt(e,a),d;return n&&(d=await Z.create({outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:a})),await a.open(),new r({video:c,hwVideo:s,audio:d,muxer:a,limiter:new K(1),outFile:i,codec:u,hw:p,width:t,height:o})}setupAudio(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:n}=this._s;if(t){var u=[];try{let m=y(u,this.bgraFrame(e));await t.encode(m,n);return}catch(p){var d=p,f=true;}finally{k(u,d,f);}}let{src:a,dst:c,sws:s}=i;return ok(s,"sws not initialized"),FFmpegError.throwIfError(a.makeWritable(),"bgraSrc.makeWritable"),FFmpegError.throwIfError(a.fromBuffer(e),"bgraSrc.fromBuffer"),FFmpegError.throwIfError(c.makeWritable(),"bgraDst.makeWritable"),FFmpegError.throwIfError(await s.scaleFrame(c,a),"bgraSws.scaleFrame"),o.encode(c,n)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:n,width:a,height:c}=this._s,s=i??await M.create(a,c);try{let u=await s.decodePNG(e);t?await t.encode(u,n):(FFmpegError.throwIfError(s.dst.makeWritable(),"pngDst.makeWritable"),FFmpegError.throwIfError(await s.sws.scaleFrame(s.dst,u),"pngSws.scaleFrame"),await o.encode(s.dst,n));}finally{i||s[Symbol.dispose]();}});}async encodeAudio(e){let{audio:t,limiter:o,muxer:i}=this._s;t&&await o.schedule(()=>t.encode(e,i));}async finish(){let{video:e,hwVideo:t,audio:o,muxer:i,limiter:n}=this._s;try{var a=[];try{let d=y(a,i,!0);let f=y(a,e);let m=y(a,t);let g=y(a,o);await n.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(c){var s=c,u=!0;}finally{var p=k(a,s,u);p&&await p;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:o,muxer:i,limiter:n}=this._s;await n.drain(),e?.[Symbol.dispose](),t?.[Symbol.dispose](),o?.[Symbol.dispose](),await i[Symbol.asyncDispose](),this.free();}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=y(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,n=true;}finally{k(t,i,n);}}bgraFrame(e){let t=X(this._s.width,this._s.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var Ur="[HWAccel]";async function Gr(){let r=HardwareContext.auto(),e=r!==null;return r?.dispose(),e}var _t=Gr().then(r=>(w.debug(Ur,"gpu:",r),r));async function ce(r){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"];Q<3&&e.push("log-level=3");let t=["FontationBackend"];if(!(await _t&&!r))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 Wr(r){return [...await ce(r),"headless=new"]}var zr="[Electron]";async function bt(r,e,t){let o=[],i=platform();i==="linux"&&o.push("xvfb-run","--auto-servernum",`--server-args="-screen 0 ${r.width}x${r.height}x24"`);let a=(await Wr(e.includes("--disable-gpu"))).map(u=>`--${u}`),c=Buffer.from(JSON.stringify(e)).toString("base64");a.push(`${xe}=${c}`),o.push($r,...a,Xe);let s=o.join(" ");return w.debug(zr,s),et(s,{stdio:["ignore","pipe","pipe"],shell:i==="linux",env:{...process.env,RUST_BACKTRACE:"full",PUP_IPC_SOCKET:t}})}var ue=8;var ke=class extends EventEmitter{constructor(t){super();this._socket=t;this._socket.on("data",o=>this.onData(o)),this._socket.on("error",o=>this.emit("error",o)),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<ue)return;let t=this.peek(ue),o=t.readUInt32LE(0),i=t.readUInt32LE(4);if(this._buffered<ue+i)return;this.consume(ue);let n=this.consume(i);switch(this.emit("message",o,n),o){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 o=Buffer.allocUnsafe(t),i=0;for(;i<t;){let n=this._chunks[0],a=Math.min(n.byteLength,t-i);n.copy(o,i,0,a),a===n.byteLength?this._chunks.shift():this._chunks[0]=n.subarray(a),i+=a;}return this._buffered-=t,o}};function xt(r){return new Promise((e,t)=>{let o=createServer();o.once("error",t),o.listen(r,()=>{e({waitForConnection(){return new Promise((i,n)=>{o.once("connection",a=>i(new ke(a))),o.once("error",n);})},close(){o.close();}});});})}var H="__pup_tick__";function yt(r){return `(function() {
|
|
2
|
-
${""}
|
|
3
|
-
if (typeof ${H} !== '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.${H};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
window.${H} = { process: process, eject: eject };
|
|
95
|
-
})();`}function Se(r){return `${H}.process(${r})`}function vt(){return `if (typeof ${H} !== 'undefined') ${H}.eject()`}var Et="[Puppeteer]";async function Pt(r,e,t){var g=[];try{let{fps:o,width:i,height:n,duration:a,outFile:c,disableGpu:s,disableHwCodec:u}=e;e.withAudio&&w.warn(Et,"audio capture is not supported in Puppeteer mode");let p=Math.ceil(o*a);let d=1e3/o;await mkdir(dirname(c),{recursive:!0});let f=y(g,await se.create({width:i,height:n,fps:o,outFile:c,disableHwCodec:u}),!0);let m=await Kr.launch({headless:"shell",defaultViewport:{width:i,height:n},args:(await ce(s)).map(v=>`--${v}`)});try{let v=(await m.pages())[0],_=await v.createCDPSession(),O=v._client(),Ce=yt({skipFrameGuard:!0}),{identifier:St}=await O.send("Page.addScriptToEvaluateOnNewDocument",{source:Ce});try{await v.goto(r,{waitUntil:"networkidle0",timeout:3e4});for(let C of v.frames())await C.evaluate(Ce),await C.evaluate(Se(0));await _.send("HeadlessExperimental.enable"),await _.send("HeadlessExperimental.beginFrame",{frameTimeTicks:0,interval:d,noDisplayUpdates:!1});let q=0,pe=0,Ae=0,Ie=d;for(let C=0;C<p;C++){Ae+=d,await Promise.all(v.frames().map(Ct=>Ct.evaluate(Se(Ae))));let Te=await _.send("HeadlessExperimental.beginFrame",{frameTimeTicks:Ie,interval:d,noDisplayUpdates:!1,screenshot:{format:"png"}});if(Ie+=d,!Te.screenshotData){w.warn(Et,`frame ${C} produced no screenshot`);continue}await f.encodePNG(Buffer.from(Te.screenshotData,"base64")),q++;let Re=Math.floor(q/p*100);Math.abs(Re-pe)>10&&(pe=Re,t?.(pe));}for(let C of v.frames())C.detached||await C.evaluate(vt());if(q===0)throw new Error("no frames captured");return {written:q,jank:0,outFile:c}}finally{await _.send("HeadlessExperimental.disable"),await O.send("Page.removeScriptToEvaluateOnNewDocument",{identifier:St}),await _.detach();}}finally{await m.close();}}catch(x){var F=x,de=true;}finally{var b=k(g,F,de);b&&await b;}}var $="[pup]";async function io(r,e,t){w.debug($,"runPupApp",r,e);let o=[r,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--out-file",`${e.outFile}`];return e.withAudio&&o.push("--with-audio"),e.useInnerProxy&&o.push("--use-inner-proxy"),e.deterministic&&o.push("--deterministic"),e.disableGpu&&o.push("--disable-gpu"),e.disableHwCodec&&o.push("--disable-hw-codec"),bt(e,o,t)}var S=tt;async function sa(r,e){w.debug($,"pup",r,e);let{signal:t}=e;if(t?.aborted)throw t.reason;let o=e.outFile??S.outFile,i={width:e.width??S.width,height:e.height??S.height,fps:e.fps??S.fps,duration:e.duration??S.duration,withAudio:e.withAudio??S.withAudio,useInnerProxy:e.useInnerProxy??S.useInnerProxy,deterministic:e.deterministic??S.deterministic,disableGpu:e.disableGpu??S.disableGpu,disableHwCodec:e.disableHwCodec??S.disableHwCodec,outFile:o},n=join(tmpdir(),"pup",randomUUID());await mkdir(n,{recursive:true});let a=join(n,"pup.sock"),c=performance.now(),s=f=>(w.info($,`${r} progress: ${f}%`),e.onProgress?.(f));if(platform()==="linux"&&i.deterministic&&qe){s(0);let f=await Pt(r,i,s);return s(100),w.info($,`done ${o} in ${Math.round(performance.now()-c)}ms`),{...f,options:i}}let u=await xt(a),p=await io(r,{...i,signal:t},a),d=()=>{w.debug($,"aborted");let f=p.process.pid;f?oo(f):p.process.kill(),rmSync(n,{recursive:true,force:true});};t?.addEventListener("abort",d,{once:true});try{let f=new Promise(async(g,x)=>{(await u.waitForConnection()).on("close",()=>x(new Error("IPC closed without result"))).on("message",()=>t?.aborted&&x(t.reason)).on("progress",s).on("done",g).on("error",x);}).finally(()=>u.close());s(0);let m=await Promise.race([f,p.wait]);return ok(m,"no summary received"),s(100),w.info($,`done ${o} in ${Math.round(performance.now()-c)}ms`),{...m,options:i}}catch(f){throw t?.aborted?t.reason:f}finally{rmSync(n,{recursive:true,force:true});}}export{J as A,se as B,sa as C,Ge as a,He as b,co as c,Q as d,$e as e,je as f,We as g,ze as h,Lt as i,Xe as j,wo as k,qe as l,A as m,w as n,Fo as o,xe as p,Io as q,et as r,$t as s,jt as t,Wt as u,zt as v,Xt as w,Do as x,tt as y,K as z};//# sourceMappingURL=chunk-2SPBNHMM.js.map
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9iYXNlL3Byb2Nlc3MudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2NoZW1hLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL21pc2MudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYWxwaGEudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL252ZW5jLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW90b29sYm94LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9mYWN0b3J5LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2h3YWNjZWwudHMiLCIuLi9zcmMvYmFzZS9jaHJvbWl1bS50cyIsIi4uL3NyYy9yZW5kZXJlci9lbGVjdHJvbi50cyIsIi4uL3NyYy9yZW5kZXJlci9pcGMudHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci9wdXBwZXRlZXIudHMiLCIuLi9zcmMvcHVwLnRzIl0sIm5hbWVzIjpbInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ4IiwibnVtIiwicGFyc2VTdHJpbmciLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsImVudiIsInB1cExvZ0xldmVsIiwicHVwVXNlSW5uZXJQcm94eSIsInB1cERpc2FibGVHUFUiLCJwdXBEaXNhYmxlSHdDb2RlYyIsInB1cERldGVybWluaXN0aWMiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsInB1cEFwcCIsImpvaW4iLCJwdXBJcGNTb2NrZXQiLCJwdXBFeHBlcmltZW50YWxQdXBwZXRlZXIiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsImV4ZWMiLCJjbWQiLCJvcHRpb25zIiwicGFydHMiLCJzIiwiY29tbWFuZCIsInNwYXduIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRklMRSIsIlJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5IiwiRm9ybWF0TXV4ZXIiLCJvdXRQYXRoIiwiZm9ybWF0TmFtZSIsIkZvcm1hdENvbnRleHQiLCJGRm1wZWdFcnJvciIsImNvZGVjQ3R4IiwiY29kZWNUYWciLCJzdHJlYW0iLCJwa3QiLCJvcGVuVmlkZW9DdHgiLCJvcHRzIiwibGFiZWwiLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJtYWtlRnJhbWUiLCJ3aWR0aCIsImhlaWdodCIsInBpeEZtdCIsImZyYW1lIiwiRnJhbWUiLCJtYWtlUGFja2V0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiY29kZWMiLCJDb2RlYyIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIl9zdGFjayIsInNyYyIsImkiLCJuU2FtcGxlcyIsIl9fdXNpbmciLCJfIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsImIiLCJCaXRXcml0ZXIiLCJ2YWwiLCJuIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJ6ZXJvcyIsIkFOTkVYX0JfU1RBUlRfQ09ERSIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwiYnIiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsImJ3IiwicHRsIiwid3JpdGVWUFNFeHRlbnNpb24iLCJidWlsZEFscGhhVlBTIiwiTkFMX1VOSVRfUFJFRklYX1NFSSIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJjaHVua3MiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkiLCJoMCIsImgxIiwid3JpdGVCaXRzIiwiaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJiYXNlRXh0cmEiLCJhbHBoYUV4dHJhIiwiYmdyYUZyYW1lIiwicHRzIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwidXZTaXplIiwieSIsImJhc2VSIiwiYWxwaGFSIiwiYmFzZVJlYWR5IiwiYWxwaGFSZWFkeSIsImR0cyIsImR1cmF0aW9uIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJUQUciLCJjcmVhdGVWaWRlb0VuY29kZXIiLCJkaXNhYmxlSHdDb2RlYyIsIkhhcmR3YXJlQ29udGV4dCIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIm91dEZpbGUiLCJ3aXRoQXVkaW8iLCJ2aWRlbyIsImh3VmlkZW8iLCJhdWRpbyIsIkZGX0VOQ09ERVJfQUFDIiwic2FtcGxlUmF0ZSIsImlucHV0IiwiZHN0IiwiY3MiLCJsaW1pdGVyIiwiX20iLCJfdiIsIl9odiIsIl9hIiwiX3Byb21pc2UiLCJfY29kZWMiLCJkZXRlY3RHUFVEcml2ZXIiLCJyZXN1bHQiLCJjYW5JVXNlR1BVIiwiY2hyb21pdW1PcHRpb25zIiwiZGlzYWJsZUdwdSIsImZlYXR1cmVzIiwicGxhdCIsInBsYXRmb3JtIiwiZWxlY3Ryb25PcHRzIiwicnVuRWxlY3Ryb25BcHAiLCJzaXplIiwiaXBjU29ja2V0UGF0aCIsImNtZFBhcnRzIiwiZWxlY3Ryb25BcmdzIiwiYSIsImJhc2U2NEFyZ3MiLCJlbGVjdHJvbiIsIkhFQURFUl9TSVpFIiwiSXBjUmVhZGVyIiwiRXZlbnRFbWl0dGVyIiwiX3NvY2tldCIsImhlYWRlciIsInBheWxvYWQiLCJvZmZzZXQiLCJjaHVuayIsInRha2UiLCJjcmVhdGVJcGNTZXJ2ZXIiLCJzb2NrZXRQYXRoIiwic2VydmVyIiwiY3JlYXRlU2VydmVyIiwibm8iLCJzb2NrZXQiLCJUSUNLX1NZTUJPTCIsImJ1aWxkVGlja0luamVjdG9yIiwiZG9Qcm9jZXNzIiwidGltZXN0YW1wTXMiLCJkb0VqZWN0IiwiZG9QdXBwZXRlZXIiLCJzb3VyY2UiLCJvblByb2dyZXNzIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwibWtkaXIiLCJwaXBlbGluZSIsImJyb3dzZXIiLCJwdXBwZXRlZXIiLCJwYWdlIiwic2Vzc2lvbiIsInBhZ2VDbGllbnQiLCJ0aWNrU2NyaXB0IiwiaWRlbnRpZmllciIsIndyaXR0ZW4iLCJwcm9ncmVzcyIsImNhcHR1cmVUaW1lc3RhbXAiLCJmcmFtZVRpbWVUaWNrcyIsIm5ld1Byb2dyZXNzIiwicnVuUHVwQXBwIiwiZCIsInB1cCIsInJlbmRlck9wdHMiLCJ0bXBEaXIiLCJ0bXBkaXIiLCJyYW5kb21VVUlEIiwidDAiLCJ0aWNrIiwicCIsInN1bW1hcnkiLCJoYW5kbGUiLCJvbkFib3J0IiwicGlkIiwidHJlZUtpbGwiLCJybVN5bmMiXSwibWFwcGluZ3MiOiI0a0NBTU8sSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSx3QkFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxNQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxJQUFBLENBQUEsWUFBQSxDQUFBLElBQUEsQ0FBQSxRQUFBLENBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxHQUFBLENBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSxpQkFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLE1BQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLGVBQUEsRUFBQSxVQUFBLENBQUEsZUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSx5Q0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEs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QSxDQUFlQyxFQUFnQixDQUd2RixHQURBZ0csRUFBRyxJQUFBLENBQUtDLENBQUFBLENBQUksUUFBU0EsQ0FBQUEsQ0FBSSxNQUFBLENBQVMsRUFBRyxDQUFDLENBQUEsQ0FDbENBLEVBQUksa0JBQUEsQ0FBcUIsQ0FBQSxDQUFHLENBQzlCLElBQUEsSUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSUEsRUFBSSxrQkFBQSxDQUFvQixDQUFBLEVBQUEsQ0FBS0QsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUMxRCxJQUFBLElBQVMsRUFBSUMsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQixFQUFJLENBQUEsQ0FBRyxDQUFBLEVBQUEsQ0FBS0QsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsSUFBQSxJQUFTLEVBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSSxHQUFJLENBQUEsRUFBQSxDQUFLQSxDQUFBQSxDQUFHLEtBQUssQ0FBQSxHQUFNLENBQUEsRUFBSyxJQUFNLENBQUMsQ0FBQSxDQUN2REEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUtDLENBQUFBLENBQUksUUFBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLEVBQUksTUFBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQVEsQ0FBQSxDQUU1REQsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUVUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFFakcsQ0FBQUEsQ0FBTyxFQUFFLEVBQ2RpRyxDQUFBQSxDQUFHLENBQUEsQ0FBRWhHLEVBQVEsRUFBRSxDQUFBLENBQ2ZnRyxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUVUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBR1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFB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UyxDQUFBQSxDQUFPLElBQUEsQ0FBSytNLENBQUFBLENBQUssQ0FBQSxLQUFBLEVBQVFTLENBQU8sQ0FBQSxJQUFBLEVBQU8sSUFBQSxDQUFLLE1BQU0sV0FBQSxDQUFZLEdBQUEsR0FBUWdGLENBQUUsQ0FBQyxDQUFBLEVBQUEsQ0FBSSxDQUFBLENBQ3RFLENBQUUsR0FBR0csRUFBUyxPQUFBLENBQVNQLENBQVcsQ0FDM0MsQ0FBQSxNQUFTcFEsQ0FBQUEsQ0FBRyxDQUNWLE1BQUlyQyxDQUFBQSxFQUFRLE9BQUEsQ0FBZUEsQ0FBQUEsQ0FBTyxNQUFBLENBQzVCcUMsQ0FDUixRQUFFLENBQ0FnUixNQUFBQSxDQUFPWCxFQUFRLENBQUUsU0FBQSxDQUFXLEtBQU0sS0FBQSxDQUFPLElBQUssQ0FBQyxFQUNqRCxDQUNGIiwiZmlsZSI6ImNodW5rLTJTUEJOSE1NLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHJldHVybiB4O1xuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJtb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5leHBvcnQgY29uc3QgcHVwVXNlSW5uZXJQcm94eSA9IGVudltcIlBVUF9VU0VfSU5ORVJfUFJPWFlcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVHUFUgPSBlbnZbXCJQVVBfRElTQUJMRV9HUFVcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVId0NvZGVjID0gZW52W1wiUFVQX0RJU0FCTEVfSFdfQ09ERUNcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERldGVybWluaXN0aWMgPSBlbnZbXCJQVVBfREVURVJNSU5JU1RJQ1wiXSA9PT0gXCIxXCI7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwSXBjU29ja2V0ID0gZW52W1wiUFVQX0lQQ19TT0NLRVRcIl07XG5cbmV4cG9ydCBjb25zdCBwdXBFeHBlcmltZW50YWxQdXBwZXRlZXIgPSBlbnZbXCJQVVBfRVhQRVJJTUVOVEFMX1BVUFBFVEVFUlwiXSA9PT0gXCIxXCI7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIHR5cGUgU2VyaWFsaXphYmxlIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyIHwgU2VyaWFsaXphYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCBkaXNwYXRjaClcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8Rm4gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSwgRD4oXG4gIGZuOiBGbixcbiAgZGVmYXVsdFZhbHVlOiBELFxuKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rm4+KSA9PiBSZXR1cm5UeXBlPEZuPiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIHJldHVybiB7IHByb2Nlc3M6IHByb2MsIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCkgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHB1cERldGVybWluaXN0aWMsIHB1cERpc2FibGVHUFUsIHB1cERpc2FibGVId0NvZGVjLCBwdXBVc2VJbm5lclByb3h5IH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXRwdXQubXA0XCI7XG5cbmV4cG9ydCBjb25zdCBSZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk91dHB1dCBtcDQgZmlsZSBwYXRoXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG4gIGRpc2FibGVHcHU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBHUFUgcmVuZGVyaW5nLCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGJ1dCBpbmNyZWFzZSBzdGFiaWxpdHlcIiksXG4gIGRpc2FibGVId0NvZGVjOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgaGFyZHdhcmUgdmlkZW8gZW5jb2RlciAoTlZFTkMvVmlkZW9Ub29sYm94KSwgdXNlIHNvZnR3YXJlIHgyNjVcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IHB1cFVzZUlubmVyUHJveHksXG4gIGRldGVybWluaXN0aWM6IHB1cERldGVybWluaXN0aWMsXG4gIGRpc2FibGVHcHU6IHB1cERpc2FibGVHUFUsXG4gIGRpc2FibGVId0NvZGVjOiBwdXBEaXNhYmxlSHdDb2RlYyxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHJldHVybjtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIFBhY2tldCwgUmF0aW9uYWwsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgZW5jb2RlTmFsSGVhZGVyLCB0eXBlIE5hbFVuaXQsIHJld3JpdGVOYWxMYXllcklkLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbmNvbnN0IE5BTF9VTklUX1BSRUZJWF9TRUkgPSAzOTtcblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSAzMikgY29udGludWU7XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gMzIgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhbHBoYU5hbC5kYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9VTklUX1BSRUZJWF9TRUksIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGNcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10pOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgMzIpIHtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQobmFsLmRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVl9QSVhfRk1UX1lVVjQyMFAsIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJLCBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB7IG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX3NlaUJ1ZmZlcjogQnVmZmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcbiAgcHJpdmF0ZSBfc2VpSW5qZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWxwaGFCdWY/OiBCdWZmZXI7XG4gIHByaXZhdGUgX2FscGhhRnJhbWU/OiBGcmFtZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9zZWlCdWZmZXIgPSBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3Qg4oCUIE5WRU5DIGNvbnZlcnRzIGludGVybmFsbHksIG5vIFNXUyBuZWVkZWRcbiAgICBjb25zdCBiYXNlQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKTtcbiAgICAvLyBBbHBoYSBhcyBZVVY0MjBQIOKAlCBtYXRjaGluZyBiaXRyYXRlL0dPUCBmb3IgY29tcGF0aWJsZSBTUFMgYWNyb3NzIGxheWVyc1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIik7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIGNvbnN0IGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcblxuICAgIGNvbnN0IGJhc2VFeHRyYSA9IGJhc2VDdHguZXh0cmFEYXRhO1xuICAgIGNvbnN0IGFscGhhRXh0cmEgPSBhbHBoYUN0eC5leHRyYURhdGE7XG4gICAgaWYgKGJhc2VFeHRyYSAmJiBhbHBoYUV4dHJhKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUV4dHJhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFFeHRyYSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG5cbiAgICAvLyBBbHBoYTogZXh0cmFjdCBhbHBoYSBjaGFubmVsIOKGkiBZVVY0MjBQXG4gICAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICAgIGlmICghc3JjIHx8ICFzcmNMcykgdGhyb3cgbmV3IEVycm9yKFwiZW5jb2RlOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICAgIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICAgIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gICAgY29uc3QgdXZTaXplID0gKHcgPj4gMSkgKiAoaCA+PiAxKTtcbiAgICBpZiAoIXRoaXMuX2FscGhhQnVmKSB0aGlzLl9hbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIHV2U2l6ZSAqIDIpO1xuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2FscGhhQnVmO1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbeSAqIHcgKyB4XSA9IHNyY1t5ICogc3JjTHMgKyB4ICogNCArIDNdITtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmLmZpbGwoMTI4LCB5U2l6ZSwgeVNpemUgKyB1dlNpemUgKiAyKTtcblxuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKGJ1ZiwgeyBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCwgd2lkdGg6IHcsIGhlaWdodDogaCB9KTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lLnB0cyA9IHB0cztcbiAgICB0aGlzLl9hbHBoYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZSh0aGlzLl9hbHBoYUZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5iYXNlQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zLmFscGhhQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZT8uZnJlZSgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkludGVybGVhdmVkKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSA9IHRoaXMuX3M7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGJhc2VSID0gYXdhaXQgYmFzZUN0eC5yZWNlaXZlUGFja2V0KGJhc2VQa3QpO1xuICAgICAgY29uc3QgYWxwaGFSID0gYXdhaXQgYWxwaGFDdHgucmVjZWl2ZVBhY2tldChhbHBoYVBrdCk7XG5cbiAgICAgIGNvbnN0IGJhc2VSZWFkeSA9IGJhc2VSID49IDA7XG4gICAgICBjb25zdCBhbHBoYVJlYWR5ID0gYWxwaGFSID49IDA7XG4gICAgICBpZiAoIWJhc2VSZWFkeSAmJiAhYWxwaGFSZWFkeSkgYnJlYWs7XG5cbiAgICAgIC8vIEJvdGggbXVzdCBwcm9kdWNlIHBhY2tldHMgdG9nZXRoZXIgKGJmPTAgZW5zdXJlcyB0aGlzKVxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogYmFzZT0ke2Jhc2VSZWFkeX0sIGFscGhhPSR7YWxwaGFSZWFkeX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VQa3QuZGF0YSEpO1xuICAgICAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYVBrdC5kYXRhISk7XG5cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIGlmICghdGhpcy5fc2VpSW5qZWN0ZWQpIHtcbiAgICAgICAgY2h1bmtzLnB1c2godGhpcy5fc2VpQnVmZmVyKTtcbiAgICAgICAgdGhpcy5fc2VpSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2goaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzLCBhbHBoYU5hbHMpKTtcblxuICAgICAgLy8gU2F2ZSB0aW1lc3RhbXBzIGJlZm9yZSBkYXRhIHJlcGxhY2VtZW50IChzZXR0ZXIgbWF5IHJlc2V0IHRoZW0pXG4gICAgICBjb25zdCBwdHMgPSBiYXNlUGt0LnB0cztcbiAgICAgIGNvbnN0IGR0cyA9IGJhc2VQa3QuZHRzO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBiYXNlUGt0LmR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5kYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgYmFzZVBrdC5wdHMgPSBwdHM7XG4gICAgICBiYXNlUGt0LmR0cyA9IGR0cztcbiAgICAgIGJhc2VQa3QuZHVyYXRpb24gPSBkdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcblxuICAgICAgYmFzZVBrdC51bnJlZigpO1xuICAgICAgYWxwaGFQa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVmlkZW9FbmNvZGVyKG9wdHM6IFZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBodz8uZGlzcG9zZSgpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfU0FNUExFX0ZNVF9GTFRQLCBGRl9FTkNPREVSX0FBQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvdXRGaWxlKTtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBjb2RlYywgaHcgfSA9IGF3YWl0IGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzLCBtdXhlcik7XG5cbiAgICBsZXQgYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICBhdWRpbyA9IGF3YWl0IEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHtcbiAgICAgIHZpZGVvLFxuICAgICAgaHdWaWRlbyxcbiAgICAgIGF1ZGlvLFxuICAgICAgbXV4ZXIsXG4gICAgICBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZSxcbiAgICAgIGNvZGVjLFxuICAgICAgaHcsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShmcmFtZSwgbXV4ZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHNyYywgZHN0LCBzd3MgfSA9IGNvZGVjITtcbiAgICAgIG9rKHN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHNyYy5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhU3JjLm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYVNyYy5mcm9tQnVmZmVyXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGRzdC5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBzd3Muc2NhbGVGcmFtZShkc3QsIHNyYyksIFwiYmdyYVN3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgcmV0dXJuIHZpZGVvIS5lbmNvZGUoZHN0LCBtdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICAgIGNvbnN0IGNzID0gY29kZWMgPz8gKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGNzLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY3MuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInBuZ0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNzLnN3cy5zY2FsZUZyYW1lKGNzLmRzdCwgc3JjKSwgXCJwbmdTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgICAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNzLmRzdCwgbXV4ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNvZGVjKSBjc1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhdWRpbywgbGltaXRlciwgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGF1ZGlvKSBhd2FpdCBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IGF1ZGlvLmVuY29kZShwY20sIG11eGVyKSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIF9tID0gbXV4ZXI7XG4gICAgICB1c2luZyBfdiA9IHZpZGVvO1xuICAgICAgdXNpbmcgX2h2ID0gaHdWaWRlbztcbiAgICAgIHVzaW5nIF9hID0gYXVkaW87XG4gICAgICBhd2FpdCBsaW1pdGVyLmRyYWluKCk7XG4gICAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZnJlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdXNpbmcgX2NvZGVjID0gdGhpcy5fcy5jb2RlYztcbiAgICB0aGlzLl9zLmh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mud2lkdGgsIHRoaXMuX3MuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltIV0FjY2VsXVwiO1xuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RHUFVEcml2ZXIoKSB7XG4gIGNvbnN0IGh3ID0gSGFyZHdhcmVDb250ZXh0LmF1dG8oKTtcbiAgY29uc3QgcmVzdWx0ID0gaHcgIT09IG51bGw7XG4gIGh3Py5kaXNwb3NlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBjYW5JVXNlR1BVID0gZGV0ZWN0R1BVRHJpdmVyKCkudGhlbigocmVzdWx0KSA9PiB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNhbklVc2VHUFUgfSBmcm9tIFwiLi9od2FjY2VsXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaHJvbWl1bU9wdGlvbnMoZGlzYWJsZUdwdTogYm9vbGVhbikge1xuICBjb25zdCBvcHRzID0gW1xuICAgIC8vIOWuueWZqOaymeeusVxuICAgIFwibm8tc2FuZGJveFwiLFxuICAgIFwiZGlzYWJsZS1kZXYtc2htLXVzYWdlXCIsXG4gICAgLy8g6Leo5Z+fL+WuieWFqFxuICAgIFwiZGlzYWJsZS13ZWItc2VjdXJpdHlcIixcbiAgICBcImRpc2FibGUtc2l0ZS1pc29sYXRpb24tdHJpYWxzXCIsXG4gICAgXCJpZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzXCIsXG4gICAgLy8g5b2V5Yi26KGM5Li6XG4gICAgXCJkaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkXCIsXG4gICAgXCJtdXRlLWF1ZGlvXCIsXG4gICAgXCJhdXRvcGxheS1wb2xpY3k9bm8tdXNlci1nZXN0dXJlLXJlcXVpcmVkXCIsXG4gICAgXCJkaXNhYmxlLWV4dGVuc2lvbnNcIixcbiAgICAvLyDmuLLmn5NcbiAgICBcImZvcmNlLWRldmljZS1zY2FsZS1mYWN0b3I9MVwiLFxuICAgIFwiZm9yY2UtY29sb3ItcHJvZmlsZT1zcmdiXCIsXG4gICAgXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiLFxuICAgIFwidXNlLWdsPWFuZ2xlXCIsXG4gICAgXCJkZXRlcm1pbmlzdGljLW1vZGVcIixcbiAgICBcImVuYWJsZS1iZWdpbi1mcmFtZS1jb250cm9sXCIsXG4gICAgXCJkaXNhYmxlLW5ldy1jb250ZW50LXJlbmRlcmluZy10aW1lb3V0XCIsXG4gICAgXCJydW4tYWxsLWNvbXBvc2l0b3Itc3RhZ2VzLWJlZm9yZS1kcmF3XCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLWFuaW1hdGlvblwiLFxuICAgIFwiZGlzYWJsZS10aHJlYWRlZC1zY3JvbGxpbmdcIixcbiAgICBcImRpc2FibGUtY2hlY2tlci1pbWFnaW5nXCIsXG4gICAgXCJkaXNhYmxlLWltYWdlLWFuaW1hdGlvbi1yZXN5bmNcIixcbiAgICBcImVuYWJsZS1zdXJmYWNlLXN5bmNocm9uaXphdGlvblwiLFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wdXBwZXRlZXIvcHVwcGV0ZWVyL2lzc3Vlcy8yNDEwXG4gICAgXCJmb250LXJlbmRlci1oaW50aW5nPW5vbmVcIixcbiAgICAvLyDotYTmupDmjqfliLZcbiAgICBcImRpc2FibGUtYmFja2dyb3VuZC1uZXR3b3JraW5nXCIsXG4gIF07XG5cbiAgaWYgKHB1cExvZ0xldmVsIDwgMykge1xuICAgIG9wdHMucHVzaChcImxvZy1sZXZlbD0zXCIpO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBbXCJGb250YXRpb25CYWNrZW5kXCJdO1xuICBjb25zdCBlbmFibGVHcHUgPSAoYXdhaXQgY2FuSVVzZUdQVSkgJiYgIWRpc2FibGVHcHU7XG4gIGlmICghZW5hYmxlR3B1KSB7XG4gICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPXN3aWZ0c2hhZGVyXCIsIFwiZW5hYmxlLXVuc2FmZS1zd2lmdHNoYWRlclwiKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLnB1c2goXCJkaXNhYmxlLWdwdS1zYW5kYm94XCIsIFwiZW5hYmxlLXVuc2FmZS13ZWJncHVcIik7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgaWYgKHBsYXQgPT09IFwiZGFyd2luXCIpIHtcbiAgICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1tZXRhbFwiKTtcbiAgICB9IGVsc2UgaWYgKHBsYXQgPT09IFwid2luMzJcIikge1xuICAgICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPWQzZDExXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9dnVsa2FuXCIsIFwiZGlzYWJsZS12dWxrYW4tc3VyZmFjZVwiKTtcbiAgICAgIGZlYXR1cmVzLnB1c2goXCJWdWxrYW5cIik7XG4gICAgfVxuICB9XG5cbiAgb3B0cy5wdXNoKGBlbmFibGUtZmVhdHVyZXM9JHtmZWF0dXJlcy5qb2luKFwiLFwiKX1gKTtcbiAgcmV0dXJuIG9wdHM7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgZWxlY3Ryb24sIHsgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgY2hyb21pdW1PcHRpb25zIH0gZnJvbSBcIi4uL2Jhc2UvY2hyb21pdW1cIjtcbmltcG9ydCB7IHB1cEFwcCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZXhlYywgUFVQX0FSR1NfS0VZIH0gZnJvbSBcIi4uL2Jhc2UvcHJvY2Vzc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWxlY3Ryb25PcHRzKGRpc2FibGVHcHU6IGJvb2xlYW4pIHtcbiAgcmV0dXJuIFsuLi4oYXdhaXQgY2hyb21pdW1PcHRpb25zKGRpc2FibGVHcHUpKSwgXCJoZWFkbGVzcz1uZXdcIl07XG59XG5cbmNvbnN0IFRBRyA9IFwiW0VsZWN0cm9uXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRWxlY3Ryb25BcHAoc2l6ZTogU2l6ZSwgYXJnczogdW5rbm93bltdLCBpcGNTb2NrZXRQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgY21kUGFydHM6IHVua25vd25bXSA9IFtdO1xuICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgaWYgKHBsYXQgPT09IFwibGludXhcIikge1xuICAgIGNtZFBhcnRzLnB1c2goYHh2ZmItcnVuYCwgYC0tYXV0by1zZXJ2ZXJudW1gLCBgLS1zZXJ2ZXItYXJncz1cIi1zY3JlZW4gMCAke3NpemUud2lkdGh9eCR7c2l6ZS5oZWlnaHR9eDI0XCJgKTtcbiAgfVxuICBjb25zdCBvcHRzID0gYXdhaXQgZWxlY3Ryb25PcHRzKGFyZ3MuaW5jbHVkZXMoXCItLWRpc2FibGUtZ3B1XCIpKTtcbiAgY29uc3QgZWxlY3Ryb25BcmdzID0gb3B0cy5tYXAoKGEpID0+IGAtLSR7YX1gKTtcbiAgY29uc3QgYmFzZTY0QXJncyA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGFyZ3MpKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgZWxlY3Ryb25BcmdzLnB1c2goYCR7UFVQX0FSR1NfS0VZfT0ke2Jhc2U2NEFyZ3N9YCk7XG4gIGNtZFBhcnRzLnB1c2goZWxlY3Ryb24sIC4uLmVsZWN0cm9uQXJncywgcHVwQXBwKTtcbiAgY29uc3QgY21kID0gY21kUGFydHMuam9pbihcIiBcIik7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGNtZCk7XG4gIHJldHVybiBleGVjKGNtZCwge1xuICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICBzaGVsbDogcGxhdCA9PT0gXCJsaW51eFwiLFxuICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgUlVTVF9CQUNLVFJBQ0U6IFwiZnVsbFwiLCBQVVBfSVBDX1NPQ0tFVDogaXBjU29ja2V0UGF0aCB9LFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbm5lY3Rpb24sIGNyZWF0ZVNlcnZlciwgdHlwZSBTb2NrZXQgfSBmcm9tIFwibmV0XCI7XG5cbmNvbnN0IEhFQURFUl9TSVpFID0gODtcblxuZXhwb3J0IGNvbnN0IGVudW0gSXBjTXNnVHlwZSB7XG4gIFBST0dSRVNTID0gMSxcbiAgRE9ORSA9IDIsXG4gIEVSUk9SID0gMyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zb2NrZXQ6IFNvY2tldCkge31cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuUFJPR1JFU1MsIEJ1ZmZlci5mcm9tKGAke3ZhbHVlfWApKTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5FUlJPUiwgQnVmZmVyLmZyb20oZXJyb3IpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuRE9ORSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlKHR5cGU6IElwY01zZ1R5cGUsIHBheWxvYWQ6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYyhIRUFERVJfU0laRSk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUodHlwZSwgMCk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUocGF5bG9hZC5ieXRlTGVuZ3RoLCA0KTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUoaGVhZGVyKTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUocGF5bG9hZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RJcGMoc29ja2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxJcGNXcml0ZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzb2NrZXQgPSBjcmVhdGVDb25uZWN0aW9uKHNvY2tldFBhdGgpO1xuICAgIHNvY2tldC5vbmNlKFwiY29ubmVjdFwiLCAoKSA9PiByZXNvbHZlKG5ldyBJcGNXcml0ZXIoc29ja2V0KSkpO1xuICAgIHNvY2tldC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8e1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBtZXNzYWdlOiBbdHlwZTogSXBjTXNnVHlwZSwgYnVmZmVyOiBCdWZmZXJdO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbXTtcbn0+IHtcbiAgcHJpdmF0ZSBfY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBwcml2YXRlIF9idWZmZXJlZCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc29ja2V0OiBTb2NrZXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImRhdGFcIiwgKGRhdGEpID0+IHRoaXMub25EYXRhKGRhdGEpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiKSk7XG4gIH1cblxuICBwcml2YXRlIG9uRGF0YShkYXRhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaHVua3MucHVzaChkYXRhKTtcbiAgICB0aGlzLl9idWZmZXJlZCArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgdGhpcy5mbHVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaCgpOiB2b2lkIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyZWQgPCBIRUFERVJfU0laRSkgcmV0dXJuO1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5wZWVrKEhFQURFUl9TSVpFKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBoZWFkZXIucmVhZFVJbnQzMkxFKDApIGFzIElwY01zZ1R5cGU7XG4gICAgICBjb25zdCBsZW4gPSBoZWFkZXIucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlcmVkIDwgSEVBREVSX1NJWkUgKyBsZW4pIHJldHVybjtcbiAgICAgIHRoaXMuY29uc3VtZShIRUFERVJfU0laRSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jb25zdW1lKGxlbik7XG4gICAgICB0aGlzLmVtaXQoXCJtZXNzYWdlXCIsIHR5cGUsIHBheWxvYWQpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5QUk9HUkVTUzoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIE51bWJlcihwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRE9ORToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgSlNPTi5wYXJzZShwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRVJST1I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBlZWsobjogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fY2h1bmtzWzBdICYmIHRoaXMuX2NodW5rc1swXS5ieXRlTGVuZ3RoID49IG4pIHJldHVybiB0aGlzLl9jaHVua3NbMF07XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5fY2h1bmtzKS5zdWJhcnJheSgwLCBuKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZShuOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgbikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9jaHVua3NbMF0hO1xuICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGNodW5rLmJ5dGVMZW5ndGgsIG4gLSBvZmZzZXQpO1xuICAgICAgY2h1bmsuY29weShvdXQsIG9mZnNldCwgMCwgdGFrZSk7XG4gICAgICBpZiAodGFrZSA9PT0gY2h1bmsuYnl0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaHVua3Muc2hpZnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NodW5rc1swXSA9IGNodW5rLnN1YmFycmF5KHRha2UpO1xuICAgICAgfVxuICAgICAgb2Zmc2V0ICs9IHRha2U7XG4gICAgfVxuICAgIHRoaXMuX2J1ZmZlcmVkIC09IG47XG4gICAgcmV0dXJuIG91dDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY1NlcnZlciB7XG4gIHdhaXRGb3JDb25uZWN0aW9uKCk6IFByb21pc2U8SXBjUmVhZGVyPjtcbiAgY2xvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlwY1NlcnZlcihzb2NrZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElwY1NlcnZlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKHNvY2tldFBhdGgsICgpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB3YWl0Rm9yQ29ubmVjdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SXBjUmVhZGVyPigob2ssIG5vKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImNvbm5lY3Rpb25cIiwgKHNvY2tldCkgPT4gb2sobmV3IElwY1JlYWRlcihzb2NrZXQpKSk7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIG5vKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpY2tJbmplY3Rvck9wdGlvbnMge1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBza2lwcyB0aGUgdG9wLWZyYW1lIGd1YXJkIHNvIHRoZSBpbmplY3RvciBydW5zIGluIHRoZSBtYWluIGRvY3VtZW50LlxuICAgKiBSZXF1aXJlZCBmb3IgUHVwcGV0ZWVyIG1vZGUgd2hlcmUgdGhlIHBhZ2UgaXMgbG9hZGVkIGRpcmVjdGx5IChubyBzdGVnbyBpZnJhbWUgd3JhcHBlcikuXG4gICAqIERlZmF1bHQ6IGZhbHNlIChFbGVjdHJvbi9zdGVnbyBtb2RlIOKAlCBvbmx5IGluamVjdCBpbiBpZnJhbWVzKS5cbiAgICovXG4gIHNraXBGcmFtZUd1YXJkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIEpTIGluamVjdG9yIHRoYXQgaG9va3MgYWxsIHRpbWUtcmVsYXRlZCBnbG9iYWxzIGluIHRoZSB0YXJnZXQgZnJhbWUuXG4gKiBJbiBFbGVjdHJvbi9zdGVnbyBtb2RlIChkZWZhdWx0KSwgZ3VhcmRzIGFnYWluc3QgcnVubmluZyBpbiB0aGUgdG9wLWxldmVsIGZyYW1lLlxuICogSW4gUHVwcGV0ZWVyIG1vZGUgKHNraXBGcmFtZUd1YXJkOiB0cnVlKSwgaW5qZWN0cyBkaXJlY3RseSBpbnRvIHRoZSBtYWluIGRvY3VtZW50LlxuICogTXVzdCBiZSBpbmplY3RlZCB2aWEgUGFnZS5hZGRTY3JpcHRUb0V2YWx1YXRlT25OZXdEb2N1bWVudCBBTkQgZGlyZWN0bHkgaW50b1xuICogYWxyZWFkeS1sb2FkZWQgZnJhbWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUaWNrSW5qZWN0b3Iob3B0cz86IFRpY2tJbmplY3Rvck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBmcmFtZUd1YXJkID0gb3B0cz8uc2tpcEZyYW1lR3VhcmQgPyBcIlwiIDogXCJpZiAod2luZG93LnNlbGYgPT09IHdpbmRvdy50b3ApIHJldHVybjtcIjtcbiAgcmV0dXJuIGAoZnVuY3Rpb24oKSB7XG4gICR7ZnJhbWVHdWFyZH1cbiAgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICBjb25zdCBvcmlnID0ge1xuICAgIERhdGU6IERhdGUsXG4gICAgZGF0ZU5vdzogRGF0ZS5ub3cuYmluZChEYXRlKSxcbiAgICBwZXJmb3JtYW5jZU5vdzogcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpLFxuICAgIHJhZjogcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBjYWY6IGNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBjbGVhclRpbWVvdXQ6IGNsZWFyVGltZW91dC5iaW5kKHdpbmRvdyksXG4gICAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsLmJpbmQod2luZG93KSxcbiAgICBjbGVhckludGVydmFsOiBjbGVhckludGVydmFsLmJpbmQod2luZG93KSxcbiAgfTtcblxuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHJhZlF1ZXVlID0gW107XG4gIGNvbnN0IHRpbWVycyA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgZGF0ZU9yaWdpbiA9IG5ldyBvcmlnLkRhdGUoKTtcbiAgY29uc3QgcGVyZk9yaWdpbiA9IG9yaWcucGVyZm9ybWFuY2VOb3coKTtcblxuICBwZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBlcmZPcmlnaW4gKyBjdXJyTXM7IH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBPID0gb3JpZy5EYXRlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IE8oZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXMpO1xuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KE8sIFtudWxsXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpKSgpO1xuICB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXM7IH07XG4gIERhdGUucGFyc2UgPSBvcmlnLkRhdGUucGFyc2U7XG4gIERhdGUuVVRDID0gb3JpZy5EYXRlLlVUQztcbiAgRGF0ZS5wcm90b3R5cGUgPSBvcmlnLkRhdGUucHJvdG90eXBlO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYikge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmFmUXVldWUgPSByYWZRdWV1ZS5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfTtcblxuICB3aW5kb3cuc2V0VGltZW91dCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ3RpbWVvdXQnLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIHdpbmRvdy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICdpbnRlcnZhbCcsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICBmdW5jdGlvbiBwcm9jZXNzKHRpbWVzdGFtcE1zKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgZG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goYSA9PiB7XG4gICAgICBhLnBhdXNlKCk7XG4gICAgICBhLmN1cnJlbnRUaW1lID0gY3Vyck1zO1xuICAgIH0pO1xuICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRpbWVycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSB0aW1lcnNbaWRzW2ldXTtcbiAgICAgIGlmICghdCkgY29udGludWU7XG4gICAgICB3aGlsZSAodC5uZXh0IDw9IGN1cnJNcykge1xuICAgICAgICBpZiAodHlwZW9mIHQuY2IgPT09ICdzdHJpbmcnKSBldmFsKHQuY2IpOyBlbHNlIHQuY2IuYXBwbHkodW5kZWZpbmVkLCB0LmFyZ3MpO1xuICAgICAgICBpZiAodC50eXBlID09PSAndGltZW91dCcpIHsgZGVsZXRlIHRpbWVyc1tpZHNbaV1dOyBicmVhazsgfVxuICAgICAgICB0Lm5leHQgKz0gdC5kZWxheTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmFmcyA9IHJhZlF1ZXVlLnNwbGljZSgwKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJhZnMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJhZnNbal0uY2IoY3Vyck1zKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlamVjdCgpIHtcbiAgICBEYXRlID0gb3JpZy5EYXRlO1xuICAgIHBlcmZvcm1hbmNlLm5vdyA9IG9yaWcucGVyZm9ybWFuY2VOb3c7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG9yaWcucmFmO1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IG9yaWcuY2FmO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0ID0gb3JpZy5zZXRUaW1lb3V0O1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBvcmlnLmNsZWFyVGltZW91dDtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBvcmlnLnNldEludGVydmFsO1xuICAgIHdpbmRvdy5jbGVhckludGVydmFsID0gb3JpZy5jbGVhckludGVydmFsO1xuICAgIGRlbGV0ZSB3aW5kb3cuJHtUSUNLX1NZTUJPTH07XG4gIH1cblxuICB3aW5kb3cuJHtUSUNLX1NZTUJPTH0gPSB7IHByb2Nlc3M6IHByb2Nlc3MsIGVqZWN0OiBlamVjdCB9O1xufSkoKTtgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9Qcm9jZXNzKHRpbWVzdGFtcE1zOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvRWplY3QoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBpZiAodHlwZW9mICR7VElDS19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgJHtUSUNLX1NZTUJPTH0uZWplY3QoKWA7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgcHVwcGV0ZWVyIGZyb20gXCJwdXBwZXRlZXJcIjtcbmltcG9ydCB7IGNocm9taXVtT3B0aW9ucyB9IGZyb20gXCIuLi9iYXNlL2Nocm9taXVtXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgeyB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGJ1aWxkVGlja0luamVjdG9yLCBkb0VqZWN0LCBkb1Byb2Nlc3MgfSBmcm9tIFwiLi90aWNrXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1B1cHBldGVlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvUHVwcGV0ZWVyKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyxcbiAgb25Qcm9ncmVzcz86IChwOiBudW1iZXIpID0+IHZvaWQsXG4pOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgb3V0RmlsZSwgZGlzYWJsZUdwdSwgZGlzYWJsZUh3Q29kZWMgfSA9IG9wdGlvbnM7XG4gIGlmIChvcHRpb25zLndpdGhBdWRpbykgbG9nZ2VyLndhcm4oVEFHLCBcImF1ZGlvIGNhcHR1cmUgaXMgbm90IHN1cHBvcnRlZCBpbiBQdXBwZXRlZXIgbW9kZVwiKTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0RmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIGRpc2FibGVId0NvZGVjIH0pO1xuXG4gIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHtcbiAgICBoZWFkbGVzczogXCJzaGVsbFwiLFxuICAgIGRlZmF1bHRWaWV3cG9ydDogeyB3aWR0aCwgaGVpZ2h0IH0sXG4gICAgYXJnczogKGF3YWl0IGNocm9taXVtT3B0aW9ucyhkaXNhYmxlR3B1KSkubWFwKChhKSA9PiBgLS0ke2F9YCksXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFnZSA9IChhd2FpdCBicm93c2VyLnBhZ2VzKCkpWzBdITtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBwYWdlLmNyZWF0ZUNEUFNlc3Npb24oKTtcbiAgICAvLyBQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbk5ld0RvY3VtZW50IG11c3QgdXNlIHRoZSBwYWdlJ3Mgb3duIENEUCBjbGllbnQuXG4gICAgLy8gSGVhZGxlc3NFeHBlcmltZW50YWwgdXNlcyBhIHNlcGFyYXRlIHNlc3Npb24gKHNlZSBwdXBwZXRlZXItY2FwdHVyZSkuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciDigJQgX2NsaWVudCgpIGlzIGEgcHJpdmF0ZSBQdXBwZXRlZXIgQVBJIG5vdCBleHBvc2VkIGluIHR5cGUgZGVjbGFyYXRpb25zXG4gICAgY29uc3QgcGFnZUNsaWVudCA9IHBhZ2UuX2NsaWVudCgpIGFzIHR5cGVvZiBzZXNzaW9uO1xuXG4gICAgY29uc3QgdGlja1NjcmlwdCA9IGJ1aWxkVGlja0luamVjdG9yKHsgc2tpcEZyYW1lR3VhcmQ6IHRydWUgfSk7XG4gICAgY29uc3QgeyBpZGVudGlmaWVyIH0gPSBhd2FpdCBwYWdlQ2xpZW50LnNlbmQoXCJQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbk5ld0RvY3VtZW50XCIsIHsgc291cmNlOiB0aWNrU2NyaXB0IH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBhZ2UuZ290byhzb3VyY2UsIHsgd2FpdFVudGlsOiBcIm5ldHdvcmtpZGxlMFwiLCB0aW1lb3V0OiAzMF8wMDAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgcGFnZS5mcmFtZXMoKSkge1xuICAgICAgICBhd2FpdCBmcmFtZS5ldmFsdWF0ZSh0aWNrU2NyaXB0KTtcbiAgICAgICAgYXdhaXQgZnJhbWUuZXZhbHVhdGUoZG9Qcm9jZXNzKDApKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2Vzc2lvbi5zZW5kKFwiSGVhZGxlc3NFeHBlcmltZW50YWwuZW5hYmxlXCIpO1xuXG4gICAgICAvLyBUcmlnZ2VyIGFuIGluaXRpYWwgcmVuZGVyIHNvIGFueSBDU1MgYW5pbWF0aW9ucyBzdGFydCBhbmQgZmlyZSBhbmltYXRpb25TdGFydGVkIGV2ZW50cy5cbiAgICAgIGF3YWl0IHNlc3Npb24uc2VuZChcIkhlYWRsZXNzRXhwZXJpbWVudGFsLmJlZ2luRnJhbWVcIiwge1xuICAgICAgICBmcmFtZVRpbWVUaWNrczogMCxcbiAgICAgICAgaW50ZXJ2YWw6IGZyYW1lSW50ZXJ2YWwsXG4gICAgICAgIG5vRGlzcGxheVVwZGF0ZXM6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGxldCB3cml0dGVuID0gMDtcbiAgICAgIGxldCBwcm9ncmVzcyA9IDA7XG4gICAgICBsZXQgY2FwdHVyZVRpbWVzdGFtcCA9IDA7XG4gICAgICBsZXQgZnJhbWVUaW1lVGlja3MgPSBmcmFtZUludGVydmFsO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgY2FwdHVyZVRpbWVzdGFtcCArPSBmcmFtZUludGVydmFsO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHBhZ2UuZnJhbWVzKCkubWFwKChmcmFtZSkgPT4gZnJhbWUuZXZhbHVhdGUoZG9Qcm9jZXNzKGNhcHR1cmVUaW1lc3RhbXApKSkpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlc3Npb24uc2VuZChcIkhlYWRsZXNzRXhwZXJpbWVudGFsLmJlZ2luRnJhbWVcIiwge1xuICAgICAgICAgIGZyYW1lVGltZVRpY2tzLFxuICAgICAgICAgIGludGVydmFsOiBmcmFtZUludGVydmFsLFxuICAgICAgICAgIG5vRGlzcGxheVVwZGF0ZXM6IGZhbHNlLFxuICAgICAgICAgIHNjcmVlbnNob3Q6IHsgZm9ybWF0OiBcInBuZ1wiIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBmcmFtZVRpbWVUaWNrcyArPSBmcmFtZUludGVydmFsO1xuXG4gICAgICAgIGlmICghcmVzdWx0LnNjcmVlbnNob3REYXRhKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgZnJhbWUgJHtpfSBwcm9kdWNlZCBubyBzY3JlZW5zaG90YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBwaXBlbGluZS5lbmNvZGVQTkcoQnVmZmVyLmZyb20ocmVzdWx0LnNjcmVlbnNob3REYXRhLCBcImJhc2U2NFwiKSk7XG4gICAgICAgIHdyaXR0ZW4rKztcblxuICAgICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgICAgb25Qcm9ncmVzcz8uKHByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIHBhZ2UuZnJhbWVzKCkpIHtcbiAgICAgICAgaWYgKCFmcmFtZS5kZXRhY2hlZCkgYXdhaXQgZnJhbWUuZXZhbHVhdGUoZG9FamVjdCgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHdyaXR0ZW4gPT09IDApIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgc2Vzc2lvbi5zZW5kKFwiSGVhZGxlc3NFeHBlcmltZW50YWwuZGlzYWJsZVwiKTtcbiAgICAgIGF3YWl0IHBhZ2VDbGllbnQuc2VuZChcIlBhZ2UucmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTmV3RG9jdW1lbnRcIiwgeyBpZGVudGlmaWVyIH0pO1xuICAgICAgYXdhaXQgc2Vzc2lvbi5kZXRhY2goKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBybVN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBwbGF0Zm9ybSwgdG1wZGlyIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBwdXBFeHBlcmltZW50YWxQdXBwZXRlZXIgfSBmcm9tIFwiLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBydW5FbGVjdHJvbkFwcCB9IGZyb20gXCIuL3JlbmRlcmVyL2VsZWN0cm9uXCI7XG5pbXBvcnQgeyBjcmVhdGVJcGNTZXJ2ZXIsIHR5cGUgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IGRvUHVwcGV0ZWVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHVwcGV0ZWVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlclJlc3VsdCB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltwdXBdXCI7XG5cbmV4cG9ydCB0eXBlIFB1cFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVwT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8UmVuZGVyT3B0aW9ucz4ge1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgb25Qcm9ncmVzcz86IFB1cFByb2dyZXNzQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVwUmVzdWx0IGV4dGVuZHMgUmVuZGVyUmVzdWx0IHt9XG5cbmludGVyZmFjZSBBcHBPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5QdXBBcHAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IEFwcE9wdGlvbnMsIHNvY2tldFBhdGg6IHN0cmluZykge1xuICBsb2dnZXIuZGVidWcoVEFHLCBgcnVuUHVwQXBwYCwgc291cmNlLCBvcHRpb25zKTtcblxuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtcbiAgICBzb3VyY2UsXG4gICAgYC0td2lkdGhgLFxuICAgIGAke29wdGlvbnMud2lkdGh9YCxcbiAgICBgLS1oZWlnaHRgLFxuICAgIGAke29wdGlvbnMuaGVpZ2h0fWAsXG4gICAgYC0tZnBzYCxcbiAgICBgJHtvcHRpb25zLmZwc31gLFxuICAgIGAtLWR1cmF0aW9uYCxcbiAgICBgJHtvcHRpb25zLmR1cmF0aW9ufWAsXG4gICAgYC0tb3V0LWZpbGVgLFxuICAgIGAke29wdGlvbnMub3V0RmlsZX1gLFxuICBdO1xuICBpZiAob3B0aW9ucy53aXRoQXVkaW8pIGFyZ3MucHVzaChgLS13aXRoLWF1ZGlvYCk7XG4gIGlmIChvcHRpb25zLnVzZUlubmVyUHJveHkpIGFyZ3MucHVzaChgLS11c2UtaW5uZXItcHJveHlgKTtcbiAgaWYgKG9wdGlvbnMuZGV0ZXJtaW5pc3RpYykgYXJncy5wdXNoKGAtLWRldGVybWluaXN0aWNgKTtcbiAgaWYgKG9wdGlvbnMuZGlzYWJsZUdwdSkgYXJncy5wdXNoKGAtLWRpc2FibGUtZ3B1YCk7XG4gIGlmIChvcHRpb25zLmRpc2FibGVId0NvZGVjKSBhcmdzLnB1c2goYC0tZGlzYWJsZS1ody1jb2RlY2ApO1xuXG4gIHJldHVybiBydW5FbGVjdHJvbkFwcChvcHRpb25zLCBhcmdzLCBzb2NrZXRQYXRoKTtcbn1cblxuY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVwKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBQYXJ0aWFsPFB1cE9wdGlvbnM+KTogUHJvbWlzZTxQdXBSZXN1bHQ+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYHB1cGAsIHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gIGlmIChzaWduYWw/LmFib3J0ZWQpIHRocm93IHNpZ25hbC5yZWFzb247XG5cbiAgY29uc3Qgb3V0RmlsZSA9IG9wdGlvbnMub3V0RmlsZSA/PyBkLm91dEZpbGU7XG4gIGNvbnN0IHJlbmRlck9wdHM6IFJlbmRlck9wdGlvbnMgPSB7XG4gICAgd2lkdGg6IG9wdGlvbnMud2lkdGggPz8gZC53aWR0aCxcbiAgICBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0ID8/IGQuaGVpZ2h0LFxuICAgIGZwczogb3B0aW9ucy5mcHMgPz8gZC5mcHMsXG4gICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24gPz8gZC5kdXJhdGlvbixcbiAgICB3aXRoQXVkaW86IG9wdGlvbnMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgIHVzZUlubmVyUHJveHk6IG9wdGlvbnMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgZGV0ZXJtaW5pc3RpYzogb3B0aW9ucy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICBkaXNhYmxlR3B1OiBvcHRpb25zLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgIGRpc2FibGVId0NvZGVjOiBvcHRpb25zLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgb3V0RmlsZSxcbiAgfTtcblxuICBjb25zdCB0bXBEaXIgPSBqb2luKHRtcGRpcigpLCBcInB1cFwiLCByYW5kb21VVUlEKCkpO1xuICBhd2FpdCBta2Rpcih0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBzb2NrZXRQYXRoID0gam9pbih0bXBEaXIsIFwicHVwLnNvY2tcIik7XG5cbiAgY29uc3QgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgdGljayA9IChwOiBudW1iZXIpID0+IChsb2dnZXIuaW5mbyhUQUcsIGAke3NvdXJjZX0gcHJvZ3Jlc3M6ICR7cH0lYCksIG9wdGlvbnMub25Qcm9ncmVzcz8uKHApKTtcblxuICAvLyBPbiBMaW51eCArIGRldGVybWluaXN0aWMgbW9kZSwgdXNlIFB1cHBldGVlciBpbmxpbmUgKG5vIEVsZWN0cm9uIHN1YnByb2Nlc3MgbmVlZGVkKS5cbiAgaWYgKHBsYXRmb3JtKCkgPT09IFwibGludXhcIiAmJiByZW5kZXJPcHRzLmRldGVybWluaXN0aWMgJiYgcHVwRXhwZXJpbWVudGFsUHVwcGV0ZWVyKSB7XG4gICAgdGljaygwKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgZG9QdXBwZXRlZXIoc291cmNlLCByZW5kZXJPcHRzLCB0aWNrKTtcbiAgICB0aWNrKDEwMCk7XG4gICAgbG9nZ2VyLmluZm8oVEFHLCBgZG9uZSAke291dEZpbGV9IGluICR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAtIHQwKX1tc2ApO1xuICAgIHJldHVybiB7IC4uLnN1bW1hcnksIG9wdGlvbnM6IHJlbmRlck9wdHMgfTtcbiAgfVxuXG4gIGNvbnN0IHNlcnZlciA9IGF3YWl0IGNyZWF0ZUlwY1NlcnZlcihzb2NrZXRQYXRoKTtcbiAgY29uc3QgaGFuZGxlID0gYXdhaXQgcnVuUHVwQXBwKHNvdXJjZSwgeyAuLi5yZW5kZXJPcHRzLCBzaWduYWwgfSwgc29ja2V0UGF0aCk7XG5cbiAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgYWJvcnRlZGApO1xuICAgIGNvbnN0IHBpZCA9IGhhbmRsZS5wcm9jZXNzLnBpZDtcbiAgICBpZiAocGlkKSB0cmVlS2lsbChwaWQpO1xuICAgIGVsc2UgaGFuZGxlLnByb2Nlc3Mua2lsbCgpO1xuICAgIHJtU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfTtcbiAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIChhd2FpdCBzZXJ2ZXIud2FpdEZvckNvbm5lY3Rpb24oKSlcbiAgICAgICAgLm9uKFwiY2xvc2VcIiwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIklQQyBjbG9zZWQgd2l0aG91dCByZXN1bHRcIikpKVxuICAgICAgICAub24oXCJtZXNzYWdlXCIsICgpID0+IHNpZ25hbD8uYWJvcnRlZCAmJiByZWplY3Qoc2lnbmFsLnJlYXNvbikpXG4gICAgICAgIC5vbihcInByb2dyZXNzXCIsIHRpY2spXG4gICAgICAgIC5vbihcImRvbmVcIiwgcmVzb2x2ZSlcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KS5maW5hbGx5KCgpID0+IHNlcnZlci5jbG9zZSgpKTtcbiAgICB0aWNrKDApO1xuICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3Jlc3VsdCwgaGFuZGxlLndhaXRdKTtcbiAgICBvayhzdW1tYXJ5LCBcIm5vIHN1bW1hcnkgcmVjZWl2ZWRcIik7XG4gICAgdGljaygxMDApO1xuICAgIGxvZ2dlci5pbmZvKFRBRywgYGRvbmUgJHtvdXRGaWxlfSBpbiAke01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSB0MCl9bXNgKTtcbiAgICByZXR1cm4geyAuLi5zdW1tYXJ5LCBvcHRpb25zOiByZW5kZXJPcHRzIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB0aHJvdyBzaWduYWwucmVhc29uO1xuICAgIHRocm93IGU7XG4gIH0gZmluYWxseSB7XG4gICAgcm1TeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG4iXX0=
|