pup-recorder 0.3.10 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('tree-kill');var S=require('zod'),crypto=require('crypto'),os=require('os'),child_process=require('child_process'),ffmpeg=require('node-av/ffmpeg'),api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var S__default=/*#__PURE__*/_interopDefault(S);var ro=Object.create;var Ye=Object.defineProperty;var oo=Object.getOwnPropertyDescriptor;var Se=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),$=r=>{throw TypeError(r)};var Tt=(r,e,t)=>e in r?Ye(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var kt=r=>[,,,ro(null)],It=["class","method","getter","setter","accessor","field","value","get","set"],he=r=>r!==void 0&&typeof r!="function"?$("Function expected"):r,no=(r,e,t,o,n)=>({kind:It[r],name:e,metadata:o,addInitializer:i=>t._?$("Already initialized"):n.push(he(i||null))}),Ke=(r,e)=>Tt(e,Se("metadata"),r[3]),Rt=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},Z=(r,e,t,o,n,i)=>{var c,a,d,p,u=e&7,f=false,w=false,h=2,b=It[u+5],_=r[h]||(r[h]=[]),g=((n=n.prototype),oo(n,t));for(var y=o.length-1;y>=0;y--)d=no(u,t,a={},r[3],_),(d.static=f,d.private=w,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),c=(0, o[y])(g[b],d),a._=1,he(c)&&(g[b]=c);return g&&Ye(n,t,g),n},Mt=(r,e,t)=>Tt(r,e+"",t);var P=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&$("Object expected");var o,n;t&&(o=e[Se("asyncDispose")]),o===void 0&&(o=e[Se("dispose")],t&&(n=o)),typeof o!="function"&&$("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},E=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,d){return d=Error(a),d.name="SuppressedError",d.error=s,d.suppressed=c,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(i,a=>(n(a),i()))}catch(a){n(a);}if(t)throw e};return i()};var ao=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=ao();function Ot(r,e,t){try{return e(process.env[r])}catch{return t}}function G(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}var po=module$1.createRequire(m),Dt=Ot("PUP_LOG_LEVEL",G,2),Lt=path.dirname(po.resolve("pup-recorder/package.json"));path.join(Lt,"dist","app.cjs");var Nt=path.join(Lt,"dist","audio_preload.cjs");var Ze="<pup@debug>",et="<pup@info>",tt="<pup@warn>",rt="<pup@error>",ot="<pup@fatal>";function we(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Vt,Ht,Ut,Wt,$t,j;$t=[we],Wt=[we],Ut=[we],Ht=[we],Vt=[we];var I=class{constructor(e=Dt){this._level=e;Rt(j,5,this);Mt(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,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(Ze,...e);}info(...e){this.impl?.info?.(et,...e);}warn(...e){this.impl?.warn?.(tt,...e);}error(...e){this.impl?.error?.(rt,...e);}fatal(...e){this.impl?.error?.(ot,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(Ze)?this.debug(t.slice(Ze.length+1)):t.startsWith(et)?this.info(t.slice(et.length+1)):t.startsWith(tt)?this.warn(t.slice(tt.length+1)):t.startsWith(rt)?this.error(t.slice(rt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=c=>{let a=c.toString();a.startsWith(ot)?i+=a.slice(ot.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",c=>{i+=c.message,e.kill();}).once("close",(c,a)=>{c||a||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};j=kt(),Z(j,1,"debug",$t,I),Z(j,1,"info",Wt,I),Z(j,1,"warn",Ut,I),Z(j,1,"error",Ht,I),Z(j,1,"fatal",Vt,I),Ke(j,I);var l=new I;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?l.error(t):r<=constants.AV_LOG_WARNING&&l.warn(t));});var bo="[Crash]";function jt(){let r=path.join(electron.app.getPath("userData"),"crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),l.debug(bo,"set dump to",r);}function ge(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var vo="--pup-priv-args";function zt(){let r=process.argv,e=r.find(o=>o.startsWith(vo));if(!e)return l.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)),l.debug("pupargs",t),t}var xo=1920,_o=1080,yo=30,Po=5,Eo="out/html.mp4,out/html.webm",qt=S__default.default.object({duration:S__default.default.number().describe("Duration in seconds"),width:S__default.default.number().describe("Video width"),height:S__default.default.number().describe("Video height"),fps:S__default.default.number().describe("Frames per second"),withAudio:S__default.default.boolean().describe("Capture and encode audio"),outFile:S__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:S__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:S__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:S__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:S__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:S__default.default.boolean().describe("Fall back to dom-ready if warmup load times out")}),Qt={width:xo,height:_o,fps:yo,duration:Po,outFile:Eo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false};function Fo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function Yt(r){let e=qt.shape,t=Qt;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).action(async(o,n)=>{try{await r.run(Fo(o),{width:ge(G,t.width)(n.width),height:ge(G,t.height)(n.height),fps:ge(G,t.fps)(n.fps),duration:ge(G,t.duration)(n.duration),outFile:n.outFile??t.outFile,withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,windowTolerant:n.windowTolerant??t.windowTolerant});}catch(i){l.fatal(i);}}),await commander.program.parseAsync(zt());}var Ce=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};var Mo="[DecodeSession]",Oo=5e3,Bo=20,Fe=class{constructor(e,t,o){this.meta=e;this.src=t;this.framesDir=o;this.spawn();}meta;src;framesDir;proc;ready=0;done=false;waiters=new Set;watcher;async getFrame(e){e<1&&(e=1);let t=path.join(this.framesDir,`${Jt(e)}.png`);try{return await promises.readFile(t)}catch{}return this.done&&this.ready<e?Buffer.alloc(0):this.wait(e)}close(){this.proc&&(this.proc.kill("SIGKILL"),this.proc=void 0),this.watcher&&(clearInterval(this.watcher),this.watcher=void 0);for(let{w:e}of this.waiters)clearTimeout(e.timer),e.resolve(Buffer.alloc(0));this.waiters.clear(),promises.rm(this.framesDir,{recursive:true,force:true});}wait(e){return new Promise(t=>{let o={resolve:t,timer:setTimeout(()=>{this.waiters.delete(n),t(Buffer.alloc(0));},Oo)},n={idx:e,w:o};this.waiters.add(n);})}async spawn(){await promises.mkdir(this.framesDir,{recursive:true});let e=this.meta.fps,t=path.join(this.framesDir,"%06d.png"),o=child_process.spawn(ffmpeg.ffmpegPath(),["-loglevel","error","-y","-i",this.src,"-vf",`fps=${e}`,"-pix_fmt","rgba","-compression_level","1","-pred","none",t],{stdio:["ignore","ignore","pipe"]});this.proc=o,o.stderr?.on("data",n=>l.warn(Mo,`[${this.meta.id.slice(0,8)}] ${n.toString().trim()}`)),o.on("exit",()=>{this.done=true,this.poll(),this.drainWaiters();}),this.watcher=setInterval(()=>this.poll(),Bo);}async poll(){try{let e=await promises.readdir(this.framesDir),t=0;for(let o of e){if(!o.endsWith(".png"))continue;let n=parseInt(o.slice(0,-4),10);n>t&&(t=n);}if(t<=this.ready)return;this.ready=t,this.drainWaiters();}catch{}}drainWaiters(){for(let e of [...this.waiters])e.idx<=this.ready?(this.waiters.delete(e),clearTimeout(e.w.timer),promises.readFile(path.join(this.framesDir,`${Jt(e.idx)}.png`)).then(t=>e.w.resolve(t)).catch(()=>e.w.resolve(Buffer.alloc(0)))):this.done&&(this.waiters.delete(e),clearTimeout(e.w.timer),e.w.resolve(Buffer.alloc(0)));}};function Jt(r){return r.toString().padStart(6,"0")}var No=5e3;async function Zt(r){var i=[];try{let e=AbortSignal.timeout(No);let t=P(i,await api.Demuxer.open(r,{signal:e}),!0);let o=t.streams?.find(p=>p.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!o)throw new Error(`probe: no video stream in ${r}`);let n=t.duration>0?t.duration:0;return {width:o.codecpar.width,height:o.codecpar.height,duration:n}}catch(s){var c=s,a=true;}finally{var d=E(i,c,a);d&&await d;}}var $o="[VideoSrcCache]",er=path.join(os.tmpdir(),"pup-video-cache"),tr=new Map;function or(r){if(!r.startsWith("http://")&&!r.startsWith("https://"))return Promise.resolve(r);let e=tr.get(r);return e||(e=Go(r),tr.set(r,e)),e}async function Go(r){await promises.mkdir(er,{recursive:true});let e=crypto.createHash("sha1").update(r).digest("hex"),t=jo(r),o=path.join(er,`${e}${t}`),n=Date.now(),i=await fetch(r);if(!i.ok)throw new Error(`video src download failed ${i.status}: ${r}`);return await promises.writeFile(o,Buffer.from(await i.arrayBuffer())),l.debug($o,`cached ${r} -> ${o} in ${Date.now()-n}ms`),o}function jo(r){let e=r.match(/\.(mp4|mov|webm|m4v)(?:\?|$|#)/i);return e?.[1]?`.${e[1].toLowerCase()}`:".mp4"}var Qo=path.join(os.tmpdir(),"pup-video-frames"),it=class{sessions=new Map;async open(e){let t=Xo(e.src,e.fps),o=this.sessions.get(t);if(o)return o.refs++,o.session.meta;let n=await or(e.src),i=await Zt(n),s={id:t,width:i.width,height:i.height,fps:e.fps,duration:i.duration},c=path.join(Qo,t);return this.sessions.set(t,{session:new Fe(s,n,c),refs:1}),s}getFrame(e,t){let o=this.sessions.get(e);if(!o)throw new Error(`frame-server: unknown id=${e}`);return o.session.getFrame(t)}close(e){let t=this.sessions.get(e);t&&(--t.refs>0||(t.session.close(),this.sessions.delete(e)));}closeAll(){for(let[,e]of this.sessions)e.session.close();this.sessions.clear();}};function Xo(r,e){return crypto.createHash("sha1").update(`${r}|${e}`).digest("hex")}var ee=new it;var Ko="[FrameProtocol]",Jo="pup-frame",z={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function sr(){electron.protocol.handle(Jo,async r=>{if(r.method==="OPTIONS")return new Response(null,{status:204,headers:z});let e=new URL(r.url);l.debug(Ko,`${r.method} ${e.hostname}${e.search}`);try{switch(e.hostname){case "open":return Zo(await ee.open({src:e.searchParams.get("src")??"",fps:ir(e,"fps",30)}));case "frame":return en(await ee.getFrame(e.searchParams.get("id")??"",ir(e,"idx",1)));case "close":return ee.close(e.searchParams.get("id")??""),new Response(null,{status:204,headers:z});default:return new Response(`unknown action: ${e.hostname}`,{status:404,headers:z})}}catch(t){let o=t instanceof Error?t.message:String(t);return new Response(o,{status:500,headers:z})}});}function Zo(r){return new Response(JSON.stringify(r),{headers:{...z,"content-type":"application/json"}})}function en(r){if(r.byteLength===0)return new Response(null,{status:410,headers:z});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...z,"content-type":"image/png","cache-control":"no-store"}})}function ir(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}function Ae(r){return new Promise(e=>setTimeout(e,r))}function R(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}var Te=5e3;function ke(r,e,t){return R(r.sendCommand(e,t),Te,`cdp.${e}`)}function st(r,e){return R(ke(r,"Runtime.evaluate",{expression:e}),Te,"evalIn")}function ar(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${Te}ms`));},Te),i=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),ke(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e,maxVirtualTimeTaskStarvationCount:1}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function cr(r){await ke(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Ie(r,e){await ke(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var at=32;var dr="stego-tick";function ur(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
1
+ 'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('tree-kill');var S=require('zod'),crypto=require('crypto'),api=require('node-av/api'),os=require('os'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var S__default=/*#__PURE__*/_interopDefault(S);var Zr=Object.create;var Je=Object.defineProperty;var eo=Object.getOwnPropertyDescriptor;var Se=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),z=r=>{throw TypeError(r)};var Rt=(r,e,t)=>e in r?Je(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var It=r=>[,,,Zr(null)],Bt=["class","method","getter","setter","accessor","field","value","get","set"],he=r=>r!==void 0&&typeof r!="function"?z("Function expected"):r,to=(r,e,t,o,i)=>({kind:Bt[r],name:e,metadata:o,addInitializer:n=>t._?z("Already initialized"):i.push(he(n||null))}),Ze=(r,e)=>Rt(e,Se("metadata"),r[3]),Ot=(r,e,t,o)=>{for(var i=0,n=r[e>>1],s=n&&n.length;i<s;i++)n[i].call(t);return o},te=(r,e,t,o,i,n)=>{var d,a,c,p,u=e&7,h=false,f=false,w=2,b=Bt[u+5],y=r[w]||(r[w]=[]),g=((i=i.prototype),eo(i,t));for(var v=o.length-1;v>=0;v--)c=to(u,t,a={},r[3],y),(c.static=h,c.private=f,p=c.access={has:_=>t in _},(p.get=_=>_[t]),u>2),d=(0, o[v])(g[b],c),a._=1,he(d)&&(g[b]=d);return g&&Je(i,t,g),i},Mt=(r,e,t)=>Rt(r,e+"",t);var P=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&z("Object expected");var o,i;t&&(o=e[Se("asyncDispose")]),o===void 0&&(o=e[Se("dispose")],t&&(i=o)),typeof o!="function"&&z("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},E=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,d,a,c){return c=Error(a),c.name="SuppressedError",c.error=s,c.suppressed=d,c},i=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),n=s=>{for(;s=r.pop();)try{var d=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(d).then(n,a=>(i(a),n()))}catch(a){i(a);}if(t)throw e};return n()};var io=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=io();function Lt(r,e,t){try{return e(process.env[r])}catch{return t}}function j(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}var ao=module$1.createRequire(m),Nt=Lt("PUP_LOG_LEVEL",j,2),rt=path.dirname(ao.resolve("pup-recorder/package.json"));path.join(rt,"dist","app.cjs");var Dt=path.join(rt,"dist","audio_preload.cjs"),Vt=path.join(rt,"dist","iframe_preload.cjs");var ot="<pup@debug>",it="<pup@info>",nt="<pup@warn>",st="<pup@error>",at="<pup@fatal>";function we(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var Ht,Ut,Wt,$t,Gt,q;Gt=[we],$t=[we],Wt=[we],Ut=[we],Ht=[we];var O=class{constructor(e=Nt){this._level=e;Ot(q,5,this);Mt(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,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?i:void 0,error:s>=0?n:void 0};}debug(...e){this.impl?.debug?.(ot,...e);}info(...e){this.impl?.info?.(it,...e);}warn(...e){this.impl?.warn?.(nt,...e);}error(...e){this.impl?.error?.(st,...e);}fatal(...e){this.impl?.error?.(at,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ot)?this.debug(t.slice(ot.length+1)):t.startsWith(it)?this.info(t.slice(it.length+1)):t.startsWith(nt)?this.warn(t.slice(nt.length+1)):t.startsWith(st)?this.error(t.slice(st.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",s=d=>{let a=d.toString();a.startsWith(at)?n+=a.slice(at.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",d=>{n+=d.message,e.kill();}).once("close",(d,a)=>{d||a||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:d,signal:a,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",d=>{this.error(`${t}.unhandled`,d);}).on("uncaughtExceptionMonitor",d=>{this.error(`${t}.unhandled`,d);});})}};q=It(),te(q,1,"debug",Gt,O),te(q,1,"info",$t,O),te(q,1,"warn",Wt,O),te(q,1,"error",Ut,O),te(q,1,"fatal",Ht,O),Ze(q,O);var l=new O;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?l.error(t):r<=constants.AV_LOG_WARNING&&l.warn(t));});var ho="[Crash]";function jt(){let r=path.join(electron.app.getPath("userData"),"crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),l.debug(ho,"set dump to",r);}function ge(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var wo="--pup-priv-args";function qt(){let r=process.argv,e=r.find(o=>o.startsWith(wo));if(!e)return l.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)),l.debug("pupargs",t),t}var go=1920,bo=1080,_o=30,xo=5,vo="out/html.mp4,out/html.webm",Yt=S__default.default.object({duration:S__default.default.number().describe("Duration in seconds"),width:S__default.default.number().describe("Video width"),height:S__default.default.number().describe("Video height"),fps:S__default.default.number().describe("Frames per second"),withAudio:S__default.default.boolean().describe("Capture and encode audio"),outFile:S__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:S__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:S__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:S__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:S__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:S__default.default.boolean().describe("Fall back to dom-ready if warmup load times out")}),Xt={width:go,height:bo,fps:_o,duration:xo,outFile:vo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false};function Eo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function Qt(r){let e=Yt.shape,t=Xt;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).action(async(o,i)=>{try{await r.run(Eo(o),{width:ge(j,t.width)(i.width),height:ge(j,t.height)(i.height),fps:ge(j,t.fps)(i.fps),duration:ge(j,t.duration)(i.duration),outFile:i.outFile??t.outFile,withAudio:i.withAudio??t.withAudio,useInnerProxy:i.useInnerProxy??t.useInnerProxy,deterministic:i.deterministic??t.deterministic,disableGpu:i.disableGpu??t.disableGpu,disableHwCodec:i.disableHwCodec??t.disableHwCodec,windowTolerant:i.windowTolerant??t.windowTolerant});}catch(n){l.fatal(n);}}),await commander.program.parseAsync(qt());}var Ce=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};var ko="[DecodeSession]",To=5e3,Ro=4,Io=16,Fe=class{constructor(e,t){this.meta=e;this.src=t;this.pump();}meta;src;buf=new Map;ready=0;want=1;done=false;closed=false;gen=0;ctrl=new AbortController;waiters=new Set;resume;restart;async getFrame(e){e<1&&(e=1);let t=this.buf.get(e);return t||(this.done&&e>this.ready?Buffer.alloc(0):(e>this.ready?(e>this.want&&(this.want=e),this.wake()):(this.want=e,this.requestRestart()),this.wait(e)))}close(){this.closed=true,this.done=true,this.ctrl.abort(),this.wake(),this.requestRestart();for(let{w:e}of this.waiters)clearTimeout(e.timer),e.resolve(Buffer.alloc(0));this.waiters.clear(),this.buf.clear();}wait(e){return new Promise(t=>{let o={resolve:t,timer:setTimeout(()=>{this.waiters.delete(i),t(Buffer.alloc(0));},To)},i={idx:e,w:o};this.waiters.add(i);})}wake(){let e=this.resume;this.resume=void 0,e?.();}requestRestart(){this.gen++;let e=this.restart;this.restart=void 0,e?.(),this.wake();}async pump(){for(;!this.closed;){let e=this.gen;this.ready=0,this.done=false,this.buf.clear();try{await this.decodePass(e);}catch(t){!this.closed&&this.gen===e&&l.warn(ko,`[${this.meta.id.slice(0,8)}] decode ended: ${t instanceof Error?t.message:String(t)}`);}if(this.closed)break;this.gen===e&&(this.done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){var v=[];try{let t=this.ctrl.signal;let o=P(v,await api.Demuxer.open(this.src,{signal:t}),!0);let i=o.streams?.find(k=>k.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!i)throw new Error("no video stream");let n=P(v,await api.Decoder.create(i,{signal:t}));let{frameWidth:s,frameHeight:d,width:a,height:c,fps:p}=this.meta;let u=s!==a||d!==c?`scale=${s}:${d},`:"";let h=P(v,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let f=0;for await(var w of h.frames(n.frames(o.packets(i.index)))){var b=[];try{let k=P(b,w);if(this.closed||this.gen!==e)return;if(k){for(f++;!this.closed&&this.gen===e&&f>this.want+Ro;)await this.pause();if(this.closed||this.gen!==e)return;this.buf.set(f,Bo(k)),this.ready=f,this.evict(),this.drainWaiters();}}catch(x){var y=x,g=!0;}finally{E(b,y,g);}}}catch(_){var A=_,B=true;}finally{var L=E(v,A,B);L&&await L;}}pause(){return new Promise(e=>this.resume=e)}untilRestart(){return this.closed?Promise.resolve():new Promise(e=>this.restart=e)}evict(){let e=this.want-Io;for(let t of this.buf.keys())t<e&&this.buf.delete(t);}drainWaiters(){for(let e of [...this.waiters]){let t=this.buf.get(e.idx);t?(this.waiters.delete(e),clearTimeout(e.w.timer),e.w.resolve(t)):this.done&&(this.waiters.delete(e),clearTimeout(e.w.timer),e.w.resolve(Buffer.alloc(0)));}}};function Bo(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let i=Buffer.allocUnsafe(e*r.height);for(let n=0;n<r.height;n++)o.copy(i,n*e,n*t,n*t+e);return i}var Lo=5e3;async function Jt(r){var n=[];try{let e=AbortSignal.timeout(Lo);let t=P(n,await api.Demuxer.open(r,{signal:e}),!0);let o=t.streams?.find(p=>p.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!o)throw new Error(`probe: no video stream in ${r}`);let i=t.duration>0?t.duration:0;return {width:o.codecpar.width,height:o.codecpar.height,duration:i}}catch(s){var d=s,a=true;}finally{var c=E(n,d,a);c&&await c;}}var Zt="[VideoSrcCache]",Ae=path.join(os.tmpdir(),"pup-video-cache"),ke=class{inFlight=new Map;ctrl=new AbortController;localize(e){if(!e.startsWith("http://")&&!e.startsWith("https://"))return Promise.resolve(e);let t=this.inFlight.get(e);return t||(t=this.download(e),this.inFlight.set(e,t)),t}abort(){this.ctrl.abort(),this.inFlight.clear();}async clear(){this.abort(),await promises.rm(Ae,{recursive:true,force:true}),l.debug(Zt,`cleaned cache ${Ae}`);}async download(e){await promises.mkdir(Ae,{recursive:true});let t=path.join(Ae,`${crypto.createHash("sha1").update(e).digest("hex")}${$o(e)}`);if(fs.existsSync(t))return t;let o=Date.now(),i=await fetch(e,{signal:this.ctrl.signal});if(!i.ok)throw new Error(`video src download failed ${i.status}: ${e}`);return await promises.writeFile(t,Buffer.from(await i.arrayBuffer())),l.debug(Zt,`cached ${e} -> ${t} in ${Date.now()-o}ms`),t}};function $o(r){let e=r.match(/\.(mp4|mov|webm|m4v)(?:\?|$|#)/i);return e?.[1]?`.${e[1].toLowerCase()}`:".mp4"}var ct=class{sessions=new Map;srcs=new ke;inFlightOpens=new Set;closed=false;async open(e){let t=this.openInner(e);this.inFlightOpens.add(t);try{return await t}finally{this.inFlightOpens.delete(t);}}async openInner(e){if(this.closed)throw new Error("frame-server: closed");let t=zo(e),o=this.sessions.get(t);if(o)return o.refs++,o.session.meta;let i=await this.srcs.localize(e.src);if(this.closed)throw new Error("frame-server: closed");let n=await Jt(i);if(this.closed)throw new Error("frame-server: closed");let s=n.width,d=n.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let c=Math.min(1,Math.max(e.dstW/n.width,e.dstH/n.height));s=tr(n.width*c),d=tr(n.height*c);}let a={id:t,width:n.width,height:n.height,frameWidth:s,frameHeight:d,fps:e.fps,duration:n.duration};return this.sessions.set(t,{session:new Fe(a,i),refs:1}),a}getFrame(e,t){let o=this.sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}close(e){let t=this.sessions.get(e);t&&(--t.refs>0||(t.session.close(),this.sessions.delete(e)));}async closeAll(){this.closed=true,this.srcs.abort(),await Promise.allSettled([...this.inFlightOpens]);for(let[,e]of this.sessions)e.session.close();this.sessions.clear(),await this.srcs.clear();}};function zo(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function tr(r){let e=Math.round(r);return Math.max(2,e-e%2)}var re=new ct;var qo="[FrameProtocol]",Yo="pup-frame",Y={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function rr(){electron.protocol.handle(Yo,async r=>{if(r.method==="OPTIONS")return new Response(null,{status:204,headers:Y});let e=new URL(r.url);l.debug(qo,`${r.method} ${e.hostname}${e.search}`);try{switch(e.hostname){case "open":return Xo(await re.open({src:e.searchParams.get("src")??"",fps:Te(e,"fps",30),dstW:Te(e,"w",0),dstH:Te(e,"h",0),fit:e.searchParams.get("fit")??void 0}));case "frame":return Ko(await re.getFrame(e.searchParams.get("id")??"",Te(e,"idx",1)));case "close":return re.close(e.searchParams.get("id")??""),new Response(null,{status:204,headers:Y});default:return new Response(`unknown action: ${e.hostname}`,{status:404,headers:Y})}}catch(t){let o=t instanceof Error?t.message:String(t);return new Response(o,{status:500,headers:Y})}});}function Xo(r){return new Response(JSON.stringify(r),{headers:{...Y,"content-type":"application/json"}})}function Ko(r){if(r.byteLength===0)return new Response(null,{status:410,headers:Y});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...Y,"content-type":"application/octet-stream","cache-control":"no-store"}})}function Te(r,e,t){let o=r.searchParams.get(e),i=o?parseInt(o,10):NaN;return Number.isFinite(i)?i:t}function Re(r){return new Promise(e=>setTimeout(e,r))}function M(r,e,t){return new Promise((o,i)=>{let n=setTimeout(()=>i(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,i).finally(()=>clearTimeout(n));})}var Ie=5e3;function Be(r,e,t){return M(r.sendCommand(e,t),Ie,`cdp.${e}`)}function dt(r,e){return M(Be(r,"Runtime.evaluate",{expression:e}),Ie,"evalIn")}function or(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>{r.off("message",n),o(new Error(`advanceVirtualTime timed out after ${Ie}ms`));},Ie),n=(s,d)=>{d==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(i),r.off("message",n),t());};r.on("message",n),Be(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e,maxVirtualTimeTaskStarvationCount:1}).catch(s=>{clearTimeout(i),r.off("message",n),o(s);});})}async function ir(r){await Be(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Oe(r,e){await Be(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var ut=32;var nr="stego-tick";function sr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -23,6 +23,11 @@
23
23
  display: block;
24
24
  image-rendering: pixelated;
25
25
  }
26
+ /* Heartbeat: invisible always-on tick. Forces Chromium compositor to issue BeginFrame each
27
+ virtual tick on otherwise-static pages so canvas#stego putImageData updates land in the
28
+ captured paint event. Without this, a static iframe + paused virtual time leaves the
29
+ compositor's last frame cached even after canvas dirties; invalidate() only re-emits the
30
+ cached frame. */
26
31
  /* Heartbeat: invisible always-on tick. Forces Chromium compositor to issue BeginFrame each
27
32
  virtual tick on otherwise-static pages so canvas#stego putImageData updates land in the
28
33
  captured paint event. Without this, a static iframe + paused virtual time leaves the
@@ -52,7 +57,7 @@
52
57
  (function() {
53
58
  const { ipcRenderer } = require('electron');
54
59
  const WIDTH = ${t};
55
- const MARKER_WIDTH = ${at};
60
+ const MARKER_WIDTH = ${ut};
56
61
  const canvas = document.getElementById('stego');
57
62
  const ctx = canvas.getContext('2d', { willReadFrequently: true });
58
63
  let startTime = null;
@@ -83,7 +88,7 @@
83
88
  }
84
89
 
85
90
  ctx.putImageData(imageData, 0, 0);
86
- ipcRenderer.send('${dr}');
91
+ ipcRenderer.send('${nr}');
87
92
  }
88
93
 
89
94
  function updateLoop() {
@@ -112,430 +117,6 @@
112
117
  })();
113
118
  </script>
114
119
  </body>
115
- </html>`}function Re(r,e){let{width:t,height:o}=e;if(t<at||o<2)return;let n=o-1,i=0;for(let s=0;s<at;s++){let c=(n*t+s)*4,d=(r[c]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function pr(r){return st(r,"__pup_start_stego__()")}async function mr(r,e,t){let o=new Promise(n=>r.ipc.once(dr,n));await st(r.debugger,`__pup_draw_stego__(${e})`),await ar(r.debugger,t),await R(o,5e3,"swapBuffer");}var ct="pup",tn="pup-frame",lr={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:ct,privileges:lr},{scheme:tn,privileges:lr}]);function hr(){electron.protocol.handle(ct,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=ur(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function wr(r,e){let t=new URL(`${ct}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var te=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,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,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();}};async function q(r,e){let t=new nodeAv.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 nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,n]of Object.entries(r.options??{}))t.setOption(o,n);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function Q(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function F(){let r=new nodeAv.Packet;return r.alloc(),r}async function re(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var B=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=Q(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=Q(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=F();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=P(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{E(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var En={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Me=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=F(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let n=e.muxer.addStream(o);return new r(o,n,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),n=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!n)throw new Error("Failed to create abuffer");let i=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(i,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${En[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=nodeAv.FilterInOut.createList([{name:"in",filterCtx:n,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,p,d),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=n,this._bufSink=s;}async encode(e,t){var s=[];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 n=o.length>>1;let i=P(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,d=true;}finally{E(s,a,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return re(this._ctx,this._pkt,this._stream,e)}};function L(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var D=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 n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},C=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 N=Buffer.from([0,0,0,1]);var pt=16;var mt=23,ne=32,ie=33,Oe=34,Er=39;function Sr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function lt(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function T(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 n=t+o;if(n+2>r.length)break;let i=r.length;for(let a=n+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){i=a;break}let{type:s,layerId:c}=Sr(r[n],r[n+1]);e.push({type:s,layerId:c,data:r.subarray(n,i)}),t=i;}return e}function ft(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Sr(t[0],t[1]),[i,s]=lt(o,e,n);return t[0]=i,t[1]=s,t}function k(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 X(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var Sn=48,Ar=24,Cn=2,Fn=10,ht=0,An=1;function Cr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Fr(r,e){let t=k(r);return Cr(t,e+Cn,0),Cr(t,e+Fn,1),X(t)}function Be(r){let e=T(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===ne?n=Fr(o.data,Sn):o.type===ie&&(n=Fr(o.data,Ar)),t.push(N,n);}return Buffer.concat(t)}function Tn(r,e,t){let o=k(r),n=new C(o),i=new D;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return X(L(i.bits))}function kn(r,e,t,o){let n=k(r),i=new C(n),s=new D;for(let c=0;c<e;c++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return X(L(s.bits))}function Tr(r){let e=Ar+96;return Tn(r,e,1)}function kr(r){return kn(r,16,1,1)}function In(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function Rn(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function Mn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=pt&&e<=mt;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):Rn(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===An||n===ht)&&(r.read(1)&&(r.readUe(),n===ht&&r.readUe()),n===ht&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),In(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Ir(r,e,t){let o=k(r),n=new C(o),i=new C(o),s=Mn(i,e,t),c=s%8===0?8:8-s%8,a=(s+c)/8,d=new D;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=pt&&e<=mt&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return X(Buffer.concat([L(d.bits),o.subarray(a)]))}function On(r){let e=new C(k(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 Bn(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 Dn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===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 Rr(r,e,t){let o=On(r);if(!o)return r;let n=new D;return Bn(n,o),Dn(n,o,e,t),n.bits.push(1),n.align(0),X(L(n.bits))}function Mr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let c=new Uint32Array(t.buffer,t.byteOffset,s);for(let a=0;a<s;a++)e[a]=c[a]>>>24;}else for(let c=0;c<i;c++){let a=c*o+3,d=c*n;for(let p=0;p<n;p++)e[d+p]=t[a+p*4];}}function Ln(r,e){return r===ie?Tr(e):r===Oe?kr(e):e}function Or(r){let{baseExtradata:e,alphaExtradata:t}=r,o=T(e),n=T(t),i=new Map;for(let a of n){if(a.type===ne)continue;let d=i.get(a.type)??[];d.push(a),i.set(a.type,d);}let s=[],c=new Set;for(let a of o){let d=a.type===ne?Rr(a.data,r.width,r.height):a.data;if(s.push(N,d),!c.has(a.type)){c.add(a.type);for(let p of i.get(a.type)??[]){let u=Ln(a.type,p.data);s.push(N,ft(u,1));}}}return s.push(Nn()),Buffer.concat(s)}function Nn(){let[t,o]=lt(Er,0,1),n=[],i=(s,c)=>{for(let a=c-1;a>=0;a--)n.push(s>>a&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([N,Buffer.from([t,o]),Buffer.from([165,4]),L(n),Buffer.from([128])])}function Br(r,e,t){let o=[];for(let n of r)o.push(N,n.data);for(let n of e)if(n.type<ne){let i=Ir(n.data,n.type,t);o.push(N,ft(i,1));}return Buffer.concat(o)}var De=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:c}=this._s,a=Br(T(e.data),T(t.data),c);n.data=Be(a),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function V(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Wn(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function $n(r){let e=new C(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&V("sps_max_sub_layers_minus1",t,"0"),e.read(1),Wn(e,t),e.readUe();let o=e.readUe();o===3&&V("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let f=0;f<s;f++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&V("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&V("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&V("num_short_term_ref_pic_sets",a,"\u22641");let d=0;if(a===1){let f=e.readUe(),w=e.readUe();d=f+w;for(let h=0;h<f;h++)e.readUe(),e.read(1);for(let h=0;h<w;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&V("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:c,numShortTermRefPicSets:a,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Gn(r){let e=new C(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&V("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&V("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Dr(r){let e=T(r),t=e.find(s=>s.type===ie),o=e.find(s=>s.type===Oe);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=$n(k(t.data)),i=Gn(k(o.data));return {...n,...i}}var Le=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new De({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e,c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:n,bitrate:i,options:{preset:"p4",bf:"0",tier:"main"}},p=await q({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),u,f,w,h;try{if(u=await q({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),!p.extraData||!u.extraData)throw new Error("nvenc: codec extradata missing");let b=Dr(p.extraData),x=s.addStream(p,"hvc1"),_=Or({baseExtradata:p.extraData,alphaExtradata:u.extraData,width:t,height:o});x.codecpar.extradata=Be(_);let g=t*o,y=(t+1>>1)*(o+1>>1),v=Buffer.alloc(g+y*2);return v.fill(128,g),f=F(),w=F(),h=Q(t,o,constants.AV_PIX_FMT_YUV420P),new r({baseCtx:p,alphaCtx:u,basePkt:f,alphaPkt:w,stream:x,alphaSwFrame:h,alphaBuf:v,hevcCfg:b})}catch(b){throw f?.free(),w?.free(),h?.free(),u?.freeContext(),p.freeContext(),b}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,c=this._pts++;Mr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=c,i.duration=1n,e.pts=c,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var se=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:n,muxer:i,...s}=e,c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=await q({codec:c,...s,codecTag:o,options:n},"videoCtx.open2"),d=i.addStream(a,o);return new r(a,F(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.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 re(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:n,hw:i,bitrate:s,muxer:c}=e,a=i.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let d=await q({codec:a,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p;try{let u=c.addStream(d,"hvc1");return p=F(),new r(d,p,u)}catch(u){throw p?.free(),d.freeContext(),u}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.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 re(this._ctx,this._pkt,this._stream,e)}};var Ve="[Encoder]";async function Nr(r,e){let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=false,sharedHw:c}=r,a=c??(s?void 0:api.HardwareContext.auto()??void 0),d=!c&&!!a;try{if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc"))return l.debug(Ve,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ne.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d};if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc"))return l.debug(Ve,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Le.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d}}catch(u){l.warn(Ve,"Hardware codec session limits reached, use software encoder",u),d&&a?.dispose();}return l.debug(Ve,"using software libx265 HEVC alpha encoder"),{video:await se.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await B.create(t,o),ownsHw:false}}var He=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=P(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{E(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(this._opened){this._opened=false;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose]();}}}};var fi="libvpx-vp9",xe=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new He(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),n=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:n,opts:e})}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c}=e;return Nr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await se.create({width:o,height:n,fps:i,codecName:fi,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await B.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return Me.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var ae=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:n,outFile:i,withAudio:s=false,disableHwCodec:c=false}=e,a=i.split(",").map(h=>h.trim()).filter(Boolean);if(a.length===0)throw new Error("outFile must contain at least one path");let d=a.map(h=>xe.kindFromPath(h)),u=!c&&d.includes("mp4")?api.HardwareContext.auto()??void 0:void 0,f=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA,w=[];for(let h=0;h<a.length;h++){let b=await xe.create({outFile:a[h],kind:d[h],width:t,height:o,fps:n,withAudio:s,disableHwCodec:c,sharedHw:d[h]==="mp4"&&f?u:void 0});w.push(b);}return new r({sinks:w,sharedHw:u,limiter:new te(1),outFiles:a,opts:e})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=P(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{E(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await B.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=Q(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var Ue=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let d=Math.max(0,a-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),c=1-(1-i)*(1-s);return {global:i,local:s,jank:c,expected:n,actual:this._actual,maxBurst:o}}};function We(r,e){return r.width===e.width&&r.height===e.height}var Hr="audio-meta",Ur="audio-chunk";function Wr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,c)=>{let a=c.sampleRate,d=t();e.setupAudio(a);let p=Math.ceil(d*a/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,c)=>{try{await e.encodeAudio(c);}catch(a){o(a);}};return r.ipc.on(Hr,n),r.ipc.on(Ur,i),()=>{r.ipc.removeListener(Hr,n),r.ipc.removeListener(Ur,i);}}function $r({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async function(...i){let s=0;for(;;){o?.throwIfAborted();try{let c=[r(...i)];return t&&c.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(c)}catch(c){if(o?.throwIfAborted(),s++,s>=e)throw c;await Ae(Math.pow(2,s)*100+Math.random()*100);}}}}var wt=["file:","http:","https:","data:"],_i=/^(file:|https?:|data:)/;function Gr(r){if(_i.test(r))return;let e=r.split(":")[0]+":",t=wt.includes(e)?`unsupported protocol: ${e}, expected ${wt.join(", ")}`:`invalid source format, expected ${wt.join(", ")}`;throw new Error(t)}var $e=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var Ge="[Network]",Pi=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function gt(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=Pi.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function jr({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,n=new te(256),i=new Map;async function s(a,d){let p=new $e;i.set(a,p),await p.wait({timeout:5e3,onTimeout:d}).finally(()=>i.delete(a));}function c(a){i.get(a)?.signal();}o.onBeforeRequest((a,d)=>{let p=a.url,u=t?gt(p):p;n.schedule(()=>{let f=`${e.id}_${a.id}`;return l.debug(Ge,"start:",{key:f,url:p,proxied:u,method:a.method,source:r,stats:n.stats}),d(u===p?{cancel:false}:{cancel:false,redirectURL:u}),s(f,()=>{l.warn(Ge,"maybe timeout:",{key:f,url:p,proxied:u,method:a.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:a},d)=>{delete a?.["x-frame-options"],delete a?.["X-Frame-Options"],delete a?.["content-security-policy"],delete a?.["Content-Security-Policy"],d({cancel:false,responseHeaders:a});}),o.onCompleted(a=>{let d=`${e.id}_${a.id}`;c(d),l.debug(Ge,"completed:",{key:d,url:a.url,method:a.method,statusCode:a.statusCode,source:r});}),o.onErrorOccurred(a=>{let d=`${e.id}_${a.id}`;c(d),l.error(Ge,"error:",{key:d,url:a.url,method:a.method,error:a.error,source:r});});}function bt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Y="[Window]",zr=new Error("window timeout");function Si({source:r,win:e,action:t,tolerant:o,signal:n}){return new Promise((i,s)=>{let c=setTimeout(()=>a(zr),1e4),a=d=>{clearTimeout(c),d?s(d):i();};n?.throwIfAborted(),n?.addEventListener("abort",()=>a(n.reason),{once:true}),e.webContents.once("dom-ready",()=>{l.debug(Y,"dom-ready:",{source:r}),o&&a();}),e.webContents.once("did-stop-loading",()=>{l.debug(Y,"did-stop-loading:",{source:r}),a();}),e.webContents.once("did-fail-load",(d,p,u,f)=>{let w=`did-fail-load: ${JSON.stringify({url:f,source:r,code:p,desc:u})}`;l.error(Y,w),a(new Error(w));}),e.webContents.once("render-process-gone",(d,{exitCode:p,reason:u})=>{let f=`render-process-gone: ${JSON.stringify({source:r,exitCode:p,reason:u})}`;l.error(Y,f),a(new Error(f));}),t();})}function ce(r){return new Promise(e=>{bt(r);let t=setTimeout(()=>{try{l.warn(Y,"force close"),r.destroy();}catch{}o();},1e3),o=()=>(clearTimeout(t),e());r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}async function qr({source:r,renderer:e,tolerant:t,preload:o,signal:n,onCreated:i}){let{width:s,height:c,useInnerProxy:a}=e,d=a?gt(r):r,p=new electron.BrowserWindow({width:s,height:c+1,minWidth:s,minHeight:c+1,maxWidth:s,maxHeight:c+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:o}});jr({source:r,window:p,useInnerProxy:a}),p.webContents.debugger.attach("1.3"),await i?.(p),p.webContents.on("console-message",({level:u,message:f,lineNumber:w,sourceId:h})=>{let b=[Y,"console:",{message:f,lineNumber:w,sourceId:h,source:r}];u==="error"?l.error(...b):l.debug(...b),!(u==="warning"&&f.startsWith("%cElectron Security Warning"))&&e.onConsole(u,f);});try{let u=wr(d,{width:s,height:c});await Si({source:r,win:p,action:()=>p.loadURL(u),tolerant:t,signal:n});}catch(u){throw await ce(p),u}return p}var Ci=$r({fn:qr,maxAttempts:2});async function je({source:r,renderer:e,preload:t,onCreated:o,signal:n}){Gr(r),n?.throwIfAborted();let i,s;try{i=await Ci({source:r,renderer:e,signal:n});}catch(a){s=a;}let c=()=>qr({source:r,renderer:e,preload:t,onCreated:o,signal:n,tolerant:e.windowTolerant});if(e.windowTolerant&&s===zr)return l.warn(Y,`warmup timeout: ${r}, falling back to dom-ready`),await c();if(s){let{message:a,stack:d}=s;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:d})}`)}i&&(i.webContents.removeAllListeners(),bt(i),await Ae(2e3),await ce(i));try{return await c()}catch(a){let{message:d,stack:p}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:d,stack:p})}`)}}var Fi="[Render]";async function Qr(r){var K=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;let u=P(K,await ae.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let f=Math.ceil(t*i);let w=1e3/t;let h={width:o,height:n+1};let b=0;let x;let _=0;let g;let y;let v;let M;let U=new Ue(t);let de;let ue=O=>{b++,u.encodeBGRA(O).catch(J=>g??=J);};let ye=(O,J,le)=>{if(g??=d?.reason,g){v?.(g);return}let W=le.getSize();if(!We(W,h)){Ie(pe,h);return}let Qe=le.toBitmap(),fe=Re(Qe,W);if(fe===void 0){g??=new Error(`no timestamp @ ${b}`);return}if(x!==void 0&&fe-x<w*.8)return;let Xe=Buffer.from(Qe.buffer,Qe.byteOffset,n*o*4);if(x===void 0)ue(Xe),U.wrote();else {let Pt=fe-x;if(Pt<=w*1.2)ue(Xe),U.wrote();else {let Et=Math.round(Pt/w);U.dropped(Et-1),U.wrote();for(let St=0;St<Et&&b<f;St++)ue(Xe);}}x=fe;let yt=Math.floor(b/f*100);Math.abs(yt-_)>10&&(_=yt,p(_));let to=i*1e3;(fe>=to-w*.5||b>=f)&&y?.();};let A=await je({source:e,renderer:r,signal:d,preload:s?Nt:void 0,onCreated:O=>{s&&(de=Wr({wc:O.webContents,encoder:u,getVideoTimeMs:()=>x??0,onError:J=>g??=J}));}});let pe=A.webContents.debugger;try{A.webContents.stopPainting(),A.webContents.setFrameRate(t),A.webContents.on("paint",ye),A.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>v?.(d.reason),{once:!0}),await pr(pe),await new Promise((O,J)=>{[y,v]=[O,J];let le=0,W=0;M=setInterval(()=>{if(b!==le){le=b,W=0;return}if(W>=3){v?.(new Error("drawable timeout"));return}l.warn(Fi,`${e} render is extremely slow, written=${b} stuck=${W}`),W++,A.webContents.invalidate();},1e3);});}finally{clearInterval(M),A.webContents.off("paint",ye),await ce(A),de?.(),await u.finish();}if(g||b===0)throw g??new Error("no frames captured");else {let O=U.finalize();return {written:b,jank:O.jank,outFile:c}}}catch(me){var qe=me,Pe=true;}finally{var Ee=E(K,qe,Pe);Ee&&await Ee;}}var Ai="[Rerender]",Xr=3;async function Yr(r,e){let t;for(let o=0;o<Xr;o++)try{return await e()}catch(n){if(r.aborted)throw n;t=n,l.warn(Ai,`retry ${o+1}/${Xr}: ${n.message}`);}throw t}var Ti="[Video]",vt="__pup_video__",ki=`(function() {
116
- if (window.self === window.top) return;
117
- if (typeof ${vt} !== 'undefined') return;
118
-
119
- const SCHEME = 'pup-frame://';
120
- const AHEAD = 10;
121
- const HVE = HTMLVideoElement.prototype;
122
- const MEDIA = HTMLMediaElement.prototype;
123
- const origPause = HVE.pause;
124
- const ctDesc = Object.getOwnPropertyDescriptor(HVE, 'currentTime') || Object.getOwnPropertyDescriptor(MEDIA, 'currentTime');
125
- const pausedDesc = Object.getOwnPropertyDescriptor(HVE, 'paused') || Object.getOwnPropertyDescriptor(MEDIA, 'paused');
126
- const endedDesc = Object.getOwnPropertyDescriptor(HVE, 'ended') || Object.getOwnPropertyDescriptor(MEDIA, 'ended');
127
- const srcDesc = Object.getOwnPropertyDescriptor(HVE, 'src') || Object.getOwnPropertyDescriptor(MEDIA, 'src');
128
-
129
- const sessions = new WeakMap();
130
- const attaching = new WeakMap();
131
- const lastSnapshot = new WeakMap();
132
- const caches = new Map();
133
- let currMs = 0;
134
- let lastMs = 0;
135
-
136
- const MIRROR_PROPS = [
137
- 'borderRadius','borderTopLeftRadius','borderTopRightRadius','borderBottomLeftRadius','borderBottomRightRadius',
138
- 'transform','transformOrigin','filter','clipPath','boxShadow','opacity','mixBlendMode','mask',
139
- 'zIndex','position','left','top','right','bottom',
140
- ];
141
-
142
- function getCache(id) {
143
- let c = caches.get(id);
144
- if (!c) {
145
- c = { bitmaps: new Map(), inFlight: new Map(), readers: new Map() };
146
- caches.set(id, c);
147
- }
148
- return c;
149
- }
150
-
151
- function fetchBitmap(state, idx) {
152
- const c = getCache(state.meta.id);
153
- const existing = c.inFlight.get(idx);
154
- if (existing) return existing;
155
- if (c.bitmaps.has(idx)) return Promise.resolve(c.bitmaps.get(idx));
156
- const p = fetch(SCHEME + 'frame?id=' + state.meta.id + '&idx=' + idx)
157
- .then((r) => r.ok ? r.blob() : null)
158
- .then((b) => b ? createImageBitmap(b) : null)
159
- .then((bm) => { c.inFlight.delete(idx); if (bm) c.bitmaps.set(idx, bm); return bm; })
160
- .catch(() => { c.inFlight.delete(idx); return null; });
161
- c.inFlight.set(idx, p);
162
- return p;
163
- }
164
-
165
- function ensurePrefetched(state, fromIdx, count) {
166
- const maxIdx = Math.max(1, Math.round(state.meta.duration * state.meta.fps));
167
- for (let i = fromIdx; i < fromIdx + count; i++) {
168
- if (i < 1 || i > maxIdx) continue;
169
- fetchBitmap(state, i);
170
- }
171
- }
172
-
173
- function evictOld(c) {
174
- let minIdx = Infinity;
175
- c.readers.forEach((idx) => { if (idx < minIdx) minIdx = idx; });
176
- if (!isFinite(minIdx)) return;
177
- const floor = minIdx - 2;
178
- c.bitmaps.forEach((bm, idx) => {
179
- if (idx < floor) { bm.close(); c.bitmaps.delete(idx); }
180
- });
181
- }
182
-
183
- function setupCanvas(video) {
184
- const cv = document.createElement('canvas');
185
- cv.dataset.pupVideoOverlay = '1';
186
- cv.style.pointerEvents = 'none';
187
- video.style.visibility = 'hidden';
188
- video.muted = true;
189
- const parent = video.parentNode || document.body;
190
- parent.insertBefore(cv, video.nextSibling);
191
- syncOverlay(video, cv);
192
- // Bridge cold-start: paint last-known frame of previous clip so canvas isn't blank while decoder warms up.
193
- const snap = lastSnapshot.get(video);
194
- if (snap) {
195
- try { cv.getContext('2d').drawImage(snap, 0, 0, cv.width, cv.height); } catch {}
196
- }
197
- return cv;
198
- }
199
-
200
- function syncOverlay(video, cv) {
201
- const cs = window.getComputedStyle(video);
202
- const offsetParent = video.offsetParent || document.body;
203
- const vr = video.getBoundingClientRect();
204
- const pr = offsetParent.getBoundingClientRect();
205
- cv.style.position = 'absolute';
206
- cv.style.left = (vr.left - pr.left) + 'px';
207
- cv.style.top = (vr.top - pr.top) + 'px';
208
- cv.style.width = vr.width + 'px';
209
- cv.style.height = vr.height + 'px';
210
- for (const p of MIRROR_PROPS) {
211
- if (p === 'position' || p === 'left' || p === 'top' || p === 'right' || p === 'bottom') continue;
212
- cv.style[p] = cs[p];
213
- }
214
- const dpr = window.devicePixelRatio || 1;
215
- const w = Math.max(1, Math.round(vr.width * dpr));
216
- const h = Math.max(1, Math.round(vr.height * dpr));
217
- if (cv.width !== w) cv.width = w;
218
- if (cv.height !== h) cv.height = h;
219
- }
220
-
221
- function fitRect(srcW, srcH, dstW, dstH, fit) {
222
- if (fit === 'none') return [(dstW - srcW) / 2, (dstH - srcH) / 2, srcW, srcH];
223
- if (fit === 'contain' || fit === 'scale-down') {
224
- const sc = Math.min(dstW / srcW, dstH / srcH);
225
- const k = fit === 'scale-down' ? Math.min(1, sc) : sc;
226
- const ws = k * srcW, hs = k * srcH;
227
- return [(dstW - ws) / 2, (dstH - hs) / 2, ws, hs];
228
- }
229
- if (fit === 'cover') {
230
- const sc = Math.max(dstW / srcW, dstH / srcH);
231
- const ws = sc * srcW, hs = sc * srcH;
232
- return [(dstW - ws) / 2, (dstH - hs) / 2, ws, hs];
233
- }
234
- return [0, 0, dstW, dstH];
235
- }
236
-
237
- function attach(video) {
238
- if (sessions.has(video)) return Promise.resolve(sessions.get(video));
239
- const pending = attaching.get(video);
240
- if (pending) return pending;
241
- const src = video.src || video.currentSrc;
242
- if (!src) return Promise.resolve(null);
243
- if (/^(blob:|data:|mediastream:)/i.test(src)) return Promise.resolve(null);
244
- const cv = setupCanvas(video);
245
- const birthMs = currMs;
246
- const state = {
247
- meta: null, cv: cv, ctx: cv.getContext('2d'),
248
- paused: !(video.autoplay || !video.paused),
249
- currentTime: 0, ended: false, lastDrawnIdx: -1, dead: false,
250
- objectFit: window.getComputedStyle(video).objectFit || 'fill',
251
- };
252
- sessions.set(video, state);
253
- const p = doAttach(video, state, src, birthMs).finally(() => attaching.delete(video));
254
- attaching.set(video, p);
255
- return p;
256
- }
257
-
258
- async function doAttach(video, state, src, birthMs) {
259
- const fps = parseInt(video.dataset.pupFps || '30', 10);
260
- const res = await fetch(SCHEME + 'open?src=' + encodeURIComponent(src) + '&fps=' + fps);
261
- if (sessions.get(video) !== state) return null;
262
- if (!res.ok) { state.dead = true; return null; }
263
- const meta = await res.json();
264
- if (sessions.get(video) !== state) return null;
265
- state.meta = meta;
266
- state.currentTime = state.paused ? 0 : Math.max(0, (currMs - birthMs) / 1000);
267
- Object.defineProperty(video, 'videoWidth', { value: meta.width, configurable: true });
268
- Object.defineProperty(video, 'videoHeight', { value: meta.height, configurable: true });
269
- Object.defineProperty(video, 'duration', { value: meta.duration, configurable: true });
270
- Object.defineProperty(video, 'readyState', { value: 4, configurable: true });
271
- ['loadstart','durationchange','loadedmetadata','loadeddata','canplay','canplaythrough'].forEach((e) => {
272
- video.dispatchEvent(new Event(e));
273
- });
274
- if (!state.paused) {
275
- video.dispatchEvent(new Event('play'));
276
- video.dispatchEvent(new Event('playing'));
277
- }
278
- ensurePrefetched(state, 1, AHEAD);
279
- return state;
280
- }
281
-
282
- function detach(video) {
283
- const state = sessions.get(video);
284
- if (!state) return;
285
- if (state.meta) {
286
- // Snapshot current canvas so the next attach can paint it during decoder warmup \u2014 no blank gap on src swap.
287
- if (state.lastDrawnIdx >= 0) {
288
- try {
289
- const snap = new OffscreenCanvas(state.cv.width, state.cv.height);
290
- snap.getContext('2d').drawImage(state.cv, 0, 0);
291
- lastSnapshot.set(video, snap);
292
- } catch {}
293
- }
294
- const c = caches.get(state.meta.id);
295
- if (c) {
296
- c.readers.delete(state);
297
- if (c.readers.size === 0) {
298
- c.bitmaps.forEach((bm) => bm.close());
299
- caches.delete(state.meta.id);
300
- fetch(SCHEME + 'close?id=' + state.meta.id, { keepalive: true });
301
- }
302
- }
303
- }
304
- state.cv.remove();
305
- sessions.delete(video);
306
- attaching.delete(video);
307
- }
308
-
309
- function resume(video, state) {
310
- if (!state.paused && !state.ended) return;
311
- state.paused = false;
312
- state.ended = false;
313
- video.dispatchEvent(new Event('play'));
314
- video.dispatchEvent(new Event('playing'));
315
- }
316
-
317
- HVE.play = function() {
318
- const video = this;
319
- const state = sessions.get(video);
320
- if (!state) return attach(video).then((s) => { if (s) resume(video, s); });
321
- resume(video, state);
322
- return Promise.resolve();
323
- };
324
- HVE.pause = function() {
325
- const state = sessions.get(this);
326
- if (!state) { origPause.call(this); return; }
327
- if (!state.paused) { state.paused = true; this.dispatchEvent(new Event('pause')); }
328
- };
329
- Object.defineProperty(HVE, 'paused', {
330
- configurable: true,
331
- get: function() { const s = sessions.get(this); return s ? s.paused : pausedDesc.get.call(this); },
332
- });
333
- Object.defineProperty(HVE, 'ended', {
334
- configurable: true,
335
- get: function() { const s = sessions.get(this); return s ? s.ended : endedDesc.get.call(this); },
336
- });
337
- if (ctDesc) {
338
- Object.defineProperty(HVE, 'currentTime', {
339
- configurable: true,
340
- get: function() { const s = sessions.get(this); return s ? s.currentTime : ctDesc.get.call(this); },
341
- set: function(t) {
342
- const s = sessions.get(this);
343
- if (!s) { ctDesc.set.call(this, t); return; }
344
- s.currentTime = Math.max(0, Math.min(t, s.meta.duration));
345
- if (s.currentTime < s.meta.duration) s.ended = false;
346
- this.dispatchEvent(new Event('seeking'));
347
- this.dispatchEvent(new Event('seeked'));
348
- this.dispatchEvent(new Event('timeupdate'));
349
- },
350
- });
351
- }
352
-
353
- function onSrcChange(video) {
354
- // setter hook + MutationObserver both fire for one bgVideo.src = X assignment; dedupe by stored src.
355
- const src = video.src || video.currentSrc || '';
356
- if (video.__pupLastSrc === src) return;
357
- video.__pupLastSrc = src;
358
- if (sessions.has(video)) detach(video);
359
- attach(video);
360
- }
361
- function scan(root) {
362
- if (!root) return;
363
- if (root.tagName === 'VIDEO') attach(root);
364
- if (root.querySelectorAll) root.querySelectorAll('video').forEach((v) => attach(v));
365
- }
366
- scan(document.documentElement);
367
- new MutationObserver((muts) => {
368
- for (const m of muts) {
369
- if (m.type === 'attributes' && m.target instanceof HTMLVideoElement && m.attributeName === 'src') {
370
- onSrcChange(m.target);
371
- continue;
372
- }
373
- for (const n of m.addedNodes) if (n instanceof Element) scan(n);
374
- for (const n of m.removedNodes) if (n instanceof HTMLVideoElement) detach(n);
375
- }
376
- }).observe(document, { subtree: true, childList: true, attributes: true, attributeFilter: ['src'] });
377
-
378
- if (srcDesc && srcDesc.set) {
379
- Object.defineProperty(HVE, 'src', {
380
- configurable: true,
381
- get: srcDesc.get,
382
- set: function(v) { srcDesc.set.call(this, v); onSrcChange(this); },
383
- });
384
- }
385
-
386
- async function paint(video, state, idx) {
387
- const c = getCache(state.meta.id);
388
- c.readers.set(state, idx);
389
- let bm = c.bitmaps.get(idx);
390
- if (!bm) {
391
- ensurePrefetched(state, idx + 1, AHEAD - 1);
392
- bm = await fetchBitmap(state, idx);
393
- if (sessions.get(video) !== state) return;
394
- if (!bm) return;
395
- }
396
- const cv = state.cv;
397
- const r = fitRect(bm.width, bm.height, cv.width, cv.height, state.objectFit);
398
- state.ctx.clearRect(0, 0, cv.width, cv.height);
399
- state.ctx.drawImage(bm, r[0], r[1], r[2], r[3]);
400
- state.lastDrawnIdx = idx;
401
- ensurePrefetched(state, idx + 1, AHEAD);
402
- evictOld(c);
403
- }
404
-
405
- function advance(timestampMs) {
406
- lastMs = currMs;
407
- currMs = timestampMs;
408
- const dt = Math.max(0, currMs - lastMs) / 1000;
409
- const ps = [];
410
- document.querySelectorAll('video').forEach((v) => {
411
- const state = sessions.get(v);
412
- if (!state || state.dead) return;
413
- syncOverlay(v, state.cv);
414
- if (!state.meta) return;
415
- if (!state.paused && !state.ended) {
416
- state.currentTime += dt * (v.playbackRate || 1);
417
- if (state.currentTime >= state.meta.duration) {
418
- if (v.loop) { state.currentTime = state.currentTime % state.meta.duration; }
419
- else {
420
- state.currentTime = state.meta.duration;
421
- state.paused = true;
422
- state.ended = true;
423
- v.dispatchEvent(new Event('ended'));
424
- }
425
- } else {
426
- v.dispatchEvent(new Event('timeupdate'));
427
- }
428
- }
429
- const idx = Math.max(1, Math.round(state.currentTime * state.meta.fps));
430
- if (idx === state.lastDrawnIdx) return;
431
- ps.push(paint(v, state, idx));
432
- });
433
- return Promise.all(ps);
434
- }
435
-
436
- window.${vt} = { advance: advance };
437
- })();`,Ii=3e4;async function Kr(r,e){if(!(!r||!r.url))try{let t=r.executeJavaScript(`${ki} ${vt}.advance(${e})`);await R(t,Ii,"video.advance");}catch(t){l.warn(Ti,`advance skipped: ${t instanceof Error?t.message:String(t)}`);}}var ze="__pup_tick__",Ri=`(function() {
438
- if (window.self === window.top) return;
439
- if (typeof ${ze} !== 'undefined') return;
440
-
441
- const orig = {
442
- Date: Date,
443
- dateNow: Date.now.bind(Date),
444
- performanceNow: performance.now.bind(performance),
445
- raf: requestAnimationFrame.bind(window),
446
- caf: cancelAnimationFrame.bind(window),
447
- setTimeout: setTimeout.bind(window),
448
- clearTimeout: clearTimeout.bind(window),
449
- setInterval: setInterval.bind(window),
450
- clearInterval: clearInterval.bind(window),
451
- };
452
-
453
- let currMs = 0;
454
- let rafQueue = [];
455
- const timers = {};
456
- let nextId = 1;
457
- const dateOrigin = new orig.Date();
458
- const perfOrigin = orig.performanceNow();
459
-
460
- performance.now = function() { return perfOrigin + currMs; };
461
- Date.now = function() { return dateOrigin.getTime() + currMs; };
462
- Date = function() {
463
- var O = orig.Date;
464
- if (arguments.length === 0) return new O(dateOrigin.getTime() + currMs);
465
- return new (Function.prototype.bind.apply(O, [null].concat(Array.prototype.slice.call(arguments))))();
466
- };
467
- Date.now = function() { return dateOrigin.getTime() + currMs; };
468
- Date.parse = orig.Date.parse;
469
- Date.UTC = orig.Date.UTC;
470
- Date.prototype = orig.Date.prototype;
471
-
472
- window.requestAnimationFrame = function(cb) {
473
- const id = nextId++;
474
- rafQueue.push({ id, cb });
475
- return id;
476
- };
477
- window.cancelAnimationFrame = function(id) {
478
- rafQueue = rafQueue.filter((r) => r.id !== id);
479
- };
480
-
481
- window.setTimeout = function(cb, delay, ...args) {
482
- const id = nextId++;
483
- timers[id] = { type: 'timeout', cb, delay: delay || 0, next: currMs + (delay || 0), args };
484
- return id;
485
- };
486
- window.clearTimeout = function(id) { delete timers[id]; };
487
-
488
- window.setInterval = function(cb, delay, ...args) {
489
- const id = nextId++;
490
- const d = Math.max(delay || 0, 1);
491
- timers[id] = { type: 'interval', cb, delay: d, next: currMs + d, args };
492
- return id;
493
- };
494
- window.clearInterval = function(id) { delete timers[id]; };
495
-
496
- function safeInvoke(fn, args) {
497
- try {
498
- if (typeof fn === 'string') eval(fn);
499
- else fn.apply(undefined, args || []);
500
- } catch (e) {
501
- console.error('[Tick] error:', e && e.stack || e);
502
- }
503
- }
504
-
505
- function process(timestampMs) {
506
- currMs = timestampMs;
507
- document.getAnimations().forEach(a => {
508
- a.pause();
509
- a.currentTime = currMs;
510
- });
511
- const ids = Object.keys(timers);
512
- for (let i = 0; i < ids.length; i++) {
513
- const t = timers[ids[i]];
514
- if (!t) continue;
515
- while (t.next <= currMs) {
516
- safeInvoke(t.cb, t.args);
517
- if (t.type === 'timeout') { delete timers[ids[i]]; break; }
518
- t.next += t.delay;
519
- }
520
- }
521
- const rafs = rafQueue.splice(0);
522
- for (let j = 0; j < rafs.length; j++) {
523
- safeInvoke(rafs[j].cb, [currMs]);
524
- }
525
- }
526
-
527
- function eject() {
528
- Date = orig.Date;
529
- performance.now = orig.performanceNow;
530
- window.requestAnimationFrame = orig.raf;
531
- window.cancelAnimationFrame = orig.caf;
532
- window.setTimeout = orig.setTimeout;
533
- window.clearTimeout = orig.clearTimeout;
534
- window.setInterval = orig.setInterval;
535
- window.clearInterval = orig.clearInterval;
536
- delete window.${ze};
537
- }
538
-
539
- window.${ze} = { process: process, eject: eject };
540
- })();`;async function Jr(r,e){if(!r)return;let t=r.executeJavaScript(`${Ri} ${ze}.process(${e})`);await Promise.all([R(t,5e3,"tick.executeJavaScript"),Kr(r,e)]);}var xt="[Shoot]";async function Mi({source:r,win:e,size:t,ms:o}){let n,i=0,s=0,c,a=e.webContents.debugger,d={width:t.width,height:t.height+1};try{return await new Promise((p,u)=>{c=setInterval(()=>{if(s>=3){u(new Error("drawable timeout"));return}s++,l.warn(xt,`${r} render is extremely slow @ ${o}, current: ${n} with ${s} repeats`),e.webContents.invalidate();},1e3);let f=(w,h,b)=>{let x=b.getSize();if(!We(x,d)){Ie(a,d);return}let _=b.toBitmap(),g=Re(_,x);if(g===void 0||Math.abs(g-o)>1){n=g,i++;return}e.webContents.off("paint",f),p(Buffer.from(_.buffer,_.byteOffset,t.height*t.width*4)),e.webContents.stopPainting(),e.webContents.setFrameRate(240);};e.webContents.on("paint",f),e.webContents.startPainting();})}finally{clearInterval(c);}}async function Zr(r){var de=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;s&&l.warn(xt,"audio will be ignored on this mode");let u=performance.now();let f=je({source:e,renderer:r,signal:d});let w=P(de,await ae.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let h=await f;l.debug(xt,"init done:",{source:e,cost:performance.now()-u});let b=Math.ceil(t*i);let x=1e3/t;let _=0;let g=0;let y;let v=h.webContents.debugger;let M=h.webContents.mainFrame;let U=M.frames[0];try{h.webContents.setFrameRate(t),h.webContents.stopPainting(),await cr(v);for(let K=0;K<b;K++){d?.throwIfAborted();let me=(K+1)*x;await Jr(U,me),await mr(h.webContents,me,x);let qe=await Mi({source:e,win:h,size:{width:o,height:n},ms:me});if(w.encodeBGRA(qe).catch(Ee=>y??=Ee),_++,y)throw y;let Pe=Math.floor(_/b*100);Math.abs(Pe-g)>10&&(g=Pe,p(g));}}finally{ee.closeAll(),await ce(h),await w.finish();}if(y)throw y;if(_===0)throw new Error("no frames captured");else return {written:_,jank:0,outFile:c}}catch(ue){var ye=ue,A=true;}finally{var pe=E(de,ye,A);pe&&await pe;}}var Ni="[App]";function eo(){l.debug(Ni,"gpu features:",electron.app.getGPUFeatureStatus());}var _e=new AbortController,_t=false;jt();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",eo);electron.app.on("before-quit",r=>!_t&&r.preventDefault());electron.app.on("will-quit",r=>!_t&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>_e.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&_e.abort(e.reason);});Yt({name:"app",run:async(r,e)=>{let t=new Ce;try{await electron.app.whenReady(),hr(),sr(),eo();for(let i of e.outFile.split(","))await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?Zr:Qr;_e.signal.throwIfAborted();let n=await Yr(_e.signal,()=>o({source:r,...e,signal:_e.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)}));await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{_t=true,electron.app.exit();}}});//# sourceMappingURL=app.cjs.map
541
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErOWRlMjgzOGRkMWU1ZjdmNS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZV9zZXNzaW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2ZmcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3JjX2NhY2hlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2ZyYW1lX3NlcnZlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm90b2NvbC50cyIsIi4uL3NyYy9iYXNlL3RpbWluZy50cyIsIi4uL3NyYy9iYXNlL2NkcC50cyIsIi4uL3NyYy9yZW5kZXJlci9zdGVnby50cyIsIi4uL3NyYy9yZW5kZXJlci9wcm90b2NvbC50cyIsIi4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL21pc2MudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2NvZGVjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9iaXQudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbmFsLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhX2Rhcndpbi50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS92cHMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGEudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvZHVhbF9sYXllcl9tdXgudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL252ZW5jLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW90b29sYm94LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9mYWN0b3J5LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9tdXhlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvc2luay50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiLCIuLi9zcmMvYmFzZS9mcmFtZV9kcm9wLnRzIiwiLi4vc3JjL2Jhc2UvaW1hZ2UudHMiLCIuLi9zcmMvcmVuZGVyZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uL3NyYy9yZW5kZXJlci9odG1sX2NoZWNrLnRzIiwiLi4vc3JjL2Jhc2Uvd2FpdGFibGVfZXZlbnQudHMiLCIuLi9zcmMvcmVuZGVyZXIvbmV0d29yay50cyIsIi4uL3NyYy9yZW5kZXJlci93aW5kb3cudHMiLCIuLi9zcmMvcmVuZGVyZXIvcmVuZGVyLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlcmVuZGVyLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3NoaW0udHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBBdWRpb1ByZWxvYWQiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIlRBRyIsInN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIiwiZHVtcERpciIsImFwcCIsIm1rZGlyU3luYyIsImNyYXNoUmVwb3J0ZXIiLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX09VVF9GSUxFIiwiUmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwicyIsImFicyIsInJlYWxwYXRoU3luYyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSXBjV3JpdGVyIiwicGF5bG9hZCIsIldBSVRfVElNRU9VVF9NUyIsIlBPTExfSU5URVJWQUxfTVMiLCJEZWNvZGVTZXNzaW9uIiwibWV0YSIsInNyYyIsImZyYW1lc0RpciIsImlkeCIsInBhdGgiLCJwYWQ2IiwicmVhZEZpbGUiLCJ3Iiwicm0iLCJlbnRyeSIsIm1rZGlyIiwiZnBzIiwicGF0dGVybiIsInNwYXduIiwiZmZtcGVnUGF0aCIsImIiLCJlbnRyaWVzIiwicmVhZGRpciIsIm1heCIsImJ1ZiIsIm4iLCJQUk9CRV9USU1FT1VUX01TIiwicHJvYmUiLCJfc3RhY2siLCJfX3VzaW5nIiwiRGVtdXhlciIsInN0cmVhbSIsIkFWTUVESUFfVFlQRV9WSURFTyIsImR1cmF0aW9uIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9wcm9taXNlIiwiX19jYWxsRGlzcG9zZSIsIkNBQ0hFX0RJUiIsInRtcGRpciIsImNhY2hlIiwibG9jYWxpemUiLCJwIiwiZG93bmxvYWQiLCJoYXNoIiwiY3JlYXRlSGFzaCIsImV4dCIsInBpY2tFeHQiLCJkc3QiLCJ0MCIsInJlcyIsIndyaXRlRmlsZSIsInVybCIsIm0iLCJGUkFNRVNfUk9PVCIsIkZyYW1lU2VydmVyIiwiaWQiLCJrZXkiLCJoaXQiLCJsb2NhbFBhdGgiLCJmcmFtZVNlcnZlciIsIlNDSEVNRSIsIkNPUlNfSEVBREVSUyIsInNldHVwRnJhbWVQcm90b2NvbCIsInByb3RvY29sIiwicmVxIiwianNvbk9rIiwiaW50IiwicG5nT2siLCJieXRlcyIsImNvcHkiLCJmYWxsYmFjayIsInYiLCJzbGVlcCIsIm1zIiwid2l0aFRpbWVvdXQiLCJsYWJlbCIsInRpbWVyIiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiZXZhbEluIiwiZXhwcmVzc2lvbiIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlc2l6ZURyYXdhYmxlIiwic2l6ZSIsIkZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIiwiU1RFR09fVElDS19DSEFOTkVMIiwiYnVpbGRTdGVnb0hUTUwiLCJ0YXJnZXRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsInN3YXBCdWZmZXIiLCJ3YyIsImV4cGVjdGVkIiwiaW50ZXJ2YWwiLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJzZXR1cFB1cFByb3RvY29sIiwiaHRtbCIsImNyZWF0ZVN0ZWdvVVJMIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJrZWVwIiwib3BlblZpZGVvQ3R4IiwiY3R4IiwiQ29kZWNDb250ZXh0IiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwiRkZtcGVnRXJyb3IiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnl0ZSIsIkJpdFdyaXRlciIsInZhbCIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwiQiIsIm9sZEFsaWduQml0cyIsInNsaWNlRGF0YUJ5dGVPZmZzZXQiLCJleHRyYWN0UFRMIiwidnBzRGF0YSIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwicHRsIiwid3JpdGVWUFNFeHRlbnNpb24iLCJidWlsZEFscGhhVlBTIiwiZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIiwiYmdyYUZyYW1lIiwic3JjTHMiLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJhbHBoYVN3RnJhbWUiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiRm9ybWF0TXV4ZXIiLCJvdXRQYXRoIiwiZm9ybWF0TmFtZSIsIkZvcm1hdENvbnRleHQiLCJjb2RlY0N0eCIsIkRpY3Rpb25hcnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJPdXRwdXRTaW5rIiwiX091dHB1dFNpbmsiLCJsb3dlciIsInZpZGVvIiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsIkZGX0VOQ09ERVJfTElCT1BVUyIsInNhbXBsZVJhdGUiLCJod1ZpZGVvIiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIm91dEZpbGUiLCJ3aXRoQXVkaW8iLCJvdXRGaWxlcyIsImtpbmRzIiwiaXNId0FscGhhQ2FwYWJsZSIsInNpbmtzIiwic2luayIsImlucHV0IiwiRnJhbWVEcm9wU3RhdHMiLCJjb3VudCIsInRvdGFsRHJvcHBlZCIsImxvY2FsU3VtIiwibWF4QnVyc3QiLCJidXJzdCIsInBlcmNlcHRpYmxlIiwiZyIsImwiLCJzY29yZSIsInNpemVFcXVhbHMiLCJhIiwiQVVESU9fTUVUQV9DSEFOTkVMIiwiQVVESU9fQ0hVTktfQ0hBTk5FTCIsImF0dGFjaEF1ZGlvTGlzdGVuZXJzIiwiZW5jb2RlciIsImdldFZpZGVvVGltZU1zIiwib25FcnJvciIsIm9uTWV0YSIsIl9lIiwic3RhcnRNcyIsInNpbGVuY2VTYW1wbGVzIiwib25DaHVuayIsImJ1ZmZlciIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiU1VQUE9SVEVEX1BST1RPQ09MUyIsIlNPVVJDRV9QQVRURVJOIiwiY2hlY2tIVE1MIiwiV2FpdGFibGVFdmVudCIsIm1hcCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJVUkwiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsImNhbGxiYWNrIiwicHJveGllZCIsInJlc3BvbnNlSGVhZGVycyIsInVuc2V0SW50ZXJjZXB0b3IiLCJUSU1FT1VUX0VSUk9SIiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsInRvbGVyYW50IiwiZG9uZSIsImRlc2MiLCJleGl0Q29kZSIsImRpc3Bvc2VXaW5kb3ciLCJvcGVuV2luZG93IiwicmVuZGVyZXIiLCJwcmVsb2FkIiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJzdGFjayIsInJlbmRlciIsIm9uUHJvZ3Jlc3MiLCJ0b3RhbCIsImZyYW1lSW50ZXJ2YWwiLCJmcmFtZVNpemUiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJlbmNvZGVFcnJvciIsInJlc29sdmVyIiwicmVqZWN0ZXIiLCJkcm9wU3RhdHMiLCJkaXNwb3NlQXVkaW8iLCJzY2hlZHVsZUZyYW1lIiwicGFpbnQiLCJfciIsImltYWdlIiwiaW1hZ2VTaXplIiwiY3VycmVudFRpbWUiLCJjcm9wcGVkIiwidGltZURlbHRhIiwiZnJhbWVzVG9JbnNlcnQiLCJuZXdQcm9ncmVzcyIsImR1cmF0aW9uTXMiLCJsYXN0V3JpdHRlbiIsInN0dWNrIiwiZHJvcFNjb3JlIiwiTUFYX1JFTkRFUl9BVFRFTVBUUyIsIndpdGhSZXJlbmRlciIsImxhc3RFcnIiLCJWSURFT19TWU1CT0wiLCJIT09LIiwiQURWQU5DRV9USU1FT1VUX01TIiwiYWR2YW5jZVZpZGVvcyIsInRpbWVzdGFtcE1zIiwiZXYiLCJUSUNLX1NZTUJPTCIsInRpY2siLCJ0aWNrRXYiLCJsYXN0VHMiLCJsYWdneSIsIl9kIiwidHMiLCJzaG9vdCIsInRJbml0Iiwid2luUCIsInBpcGVsaW5lIiwibWFpbiIsImlmcmFtZSIsImZyYW1lTXMiLCJwcmludEZlYXR1cmVzIiwiY3RybCIsImV4aXRpbmciLCJNZW51IiwicmF3IiwiaXBjIiwicmVzdWx0Il0sIm1hcHBpbmdzIjoia3BCQUtBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsd0JBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsSUFBQSxDQUFBLFlBQUEsQ0FBQSxJQUFBLENBQUEsUUFBQSxDQUFBLElBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxVQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsQ0FBQSxLQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsTUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLFFBQUEsQ0FBQSxDQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxxQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsR0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsUUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsRUFBQSxDQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxNQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSx1QkFBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxlQUFBLEVBQUEsVUFBQSxDQUFBLGVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLGlCQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEseUNBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBTUEsR0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsR0FBQSxDQUNoQixJQUFJLEdBQUEsQ0FBSSxDQUFBLEtBQUEsRUFBUSxVQUFVLENBQUEsQ0FBRSxFQUFFLElBQUEsQ0FDN0IsUUFBQSxDQUFTLGVBQWlCLFFBQUEsQ0FBUyxhQUFBLENBQWMsUUFBUSxXQUFBLEVBQVksR0FBTSxRQUFBLENBQzFFLFFBQUEsQ0FBUyxjQUFjLEdBQUEsQ0FDdkIsSUFBSSxHQUFBLENBQUksU0FBQSxDQUFXLFNBQVMsT0FBTyxDQUFBLENBQUUsSUFBQSxDQUVoQ0MsQ0FBQUEsQ0FBZ0NELElBQWlCLENDTnZELFNBQVNFLEVBQUFBLENBQVFDLENBQUFBLENB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QSxDQUFvQm5LLENBQUFBLEVBQUFBLENBQUtvSSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUMxRCxJQUFBLElBQVNwSSxDQUFBQSxDQUFJbUssQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQm5LLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxFQUFBQSxDQUFLb0ksQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNULElBQUEsSUFBU3BJLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJLEVBQUEsQ0FBSUEsQ0FBQUEsRUFBQUEsQ0FBS29JLENBQUFBLENBQUcsSUFBQSxDQUFLcEksQ0FBQUEsR0FBTSxDQUFBLEVBQUtBLENBQUFBLEdBQU0sQ0FBQyxDQUFBLENBQ3ZEb0ksQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSytCLENBQUFBLENBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBSSxPQUFTQSxDQUFBQSxDQUFJLFFBQVEsQ0FBQSxDQUU1RC9CLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFMUksQ0FBQUEsQ0FBTyxFQUFFLENBQUEsQ0FDZDBJLENBQUFBLENBQUcsQ0FBQSxDQUFFekksQ0FBQUEsQ0FBUSxFQUFFLENBQUEsQ0FDZnlJLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUdUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxD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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxTQUFBLEVBK1RoQkEsRUFBWSxDQUFBO0FBQUEsS0FBQSxDQUFBLENBR2pCRSxFQUFBQSxDQUFxQixHQUFBLENBRTNCLGVBQXNCQyxFQUFBQSxDQUFjeFcsQ0FBQUEsQ0FBaUN5VyxFQUFvQyxDQUN2RyxHQUFJLEVBQUEsQ0FBQ3pXLENBQUFBLEVBQVMsQ0FBQ0EsQ0FBQUEsQ0FBTSxLQUNyQixHQUFJLENBQ0YsSUFBTTBXLENBQUFBLENBQUsxVyxDQUFBQSxDQUFNLGlCQUFBLENBQWtCLENBQUEsRUFBR3NXLEVBQUksQ0FBQSxDQUFBLEVBQUlELEVBQVksQ0FBQSxTQUFBLEVBQVlJLENBQVcsQ0FBQSxDQUFBLENBQUcsQ0FBQSxDQUNwRixNQUFNaGEsQ0FBQUEsQ0FBWWlhLENBQUFBLENBQUlILEVBQUFBLENBQW9CLGVBQWUsRUFDM0QsQ0FBQSxNQUFTM2UsRUFBRyxDQUNWdkMsQ0FBQUEsQ0FBTyxJQUFBLENBQUtLLEVBQUFBLENBQUssQ0FBQSxpQkFBQSxFQUFvQmtDLENBQUFBLFlBQWEsTUFBUUEsQ0FBQUEsQ0FBRSxPQUFBLENBQVUsTUFBQSxDQUFPQSxDQUFDLENBQUMsQ0FBQSxDQUFFLEVBQ25GLENBQ0YsQ0NqVk8sSUFBTStlLEVBQUFBLENBQWMsY0FBQSxDQUVyQkwsRUFBQUEsQ0FBTyxDQUFBO0FBQUE7QUFBQSxhQUFBLEVBRUVLLEVBQVcsQ0FBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQUFBLEVBaUdOQSxFQUFXLENBQUE7QUFBQTs7QUFBQSxTQUFBLEVBR3BCQSxFQUFXLENBQUE7QUFBQSxLQUFBLENBQUEsQ0FHdEIsZUFBc0JDLEVBQUFBLENBQUs1VyxDQUFBQSxDQUFpQ3lXLEVBQXFCLENBQy9FLEdBQUksQ0FBQ3pXLENBQUFBLENBQU8sT0FHWixJQUFNNlcsQ0FBQUEsQ0FBUzdXLEVBQU0saUJBQUEsQ0FBa0IsQ0FBQSxFQUFHc1csRUFBSSxDQUFBLENBQUEsRUFBSUssRUFBVyxZQUFZRixDQUFXLENBQUEsQ0FBQSxDQUFHLENBQUEsQ0FDdkYsTUFBTSxRQUFRLEdBQUEsQ0FBSSxDQUFDaGEsRUFBWW9hLENBQUFBLENBQVEsR0FBQSxDQUFPLHdCQUF3QixDQUFBLENBQUdMLEVBQUFBLENBQWN4VyxDQUFBQSxDQUFPeVcsQ0FBVyxDQUFDLENBQUMsRUFDN0csQ0NsR0EsSUFBTS9nQixFQUFBQSxDQUFNLFVBU1osZUFBZTJmLEVBQUFBLENBQU0sQ0FBRSxNQUFBLENBQUEzZCxFQUFRLEdBQUEsQ0FBQXliLENBQUFBLENBQUssS0FBQTFWLENBQUFBLENBQU0sRUFBQSxDQUFBakIsQ0FBRyxDQUFBLENBQWtDLENBQzdFLElBQUlzYSxDQUFBQSxDQUNBQyxFQUFRLENBQUEsQ0FDUmYsQ0FBQUEsQ0FBUSxFQUNSclgsQ0FBQUEsQ0FDRTdCLENBQUFBLENBQU1xVyxFQUFJLFdBQUEsQ0FBWSxRQUFBLENBQ3RCd0IsQ0FBQUEsQ0FBa0IsQ0FBRSxNQUFPbFgsQ0FBQUEsQ0FBSyxLQUFBLENBQU8sT0FBUUEsQ0FBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBRSxDQUFBLENBQ3JFLEdBQUksQ0FDRixPQUFPLE1BQU0sSUFBSSxPQUFBLENBQWdCLENBQUNoSixFQUFTQyxDQUFBQSxHQUFXLENBQ3BEaUssRUFBVyxXQUFBLENBQVksSUFBTSxDQUMzQixHQUFJcVgsR0FBUyxDQUFBLENBQUcsQ0FDZHRoQixFQUFPLElBQUksS0FBQSxDQUFNLGtCQUFrQixDQUFDLENBQUEsQ0FDcEMsTUFDRixDQUNBc2hCLElBQ0EzZ0IsQ0FBQUEsQ0FBTyxJQUFBLENBQUtLLEdBQUssQ0FBQSxFQUFHZ0MsQ0FBTSwrQkFBK0I4RSxDQUFFLENBQUEsV0FBQSxFQUFjc2EsQ0FBTSxDQUFBLE1BQUEsRUFBU2QsQ0FBSyxDQUFBLFFBQUEsQ0FBVSxDQUFBLENBQ3ZHN0MsRUFBSSxXQUFBLENBQVksVUFBQSxHQUNsQixDQUFBLENBQUcsR0FBSSxDQUFBLENBQ1AsSUFBTTdWLEVBQVUsQ0FBQzJULENBQUFBLENBQXdDK0YsRUFBZXpCLENBQUFBLEdBQXVCLENBQzdGLElBQU1DLENBQUFBLENBQVlELENBQUFBLENBQU0sT0FBQSxFQUFRLENBQ2hDLEdBQUksQ0FBQy9FLEVBQUFBLENBQVdnRixFQUFXYixDQUFTLENBQUEsQ0FBRyxDQUVyQ25YLEVBQUFBLENBQWVWLENBQUFBLENBQUs2WCxDQUFTLENBQUEsQ0FDN0IsTUFDRixDQUNBLElBQU0xVyxFQUFTc1gsQ0FBQUEsQ0FBTSxRQUFBLEdBQ2YwQixDQUFBQSxDQUFLalosRUFBQUEsQ0FBWUMsQ0FBQUEsQ0FBUXVYLENBQVMsRUFDeEMsR0FBSXlCLENBQUFBLEdBQU8sUUFBYSxJQUFBLENBQUssR0FBQSxDQUFJQSxFQUFLemEsQ0FBRSxDQUFBLENBQUksRUFBRyxDQUM3Q3NhLENBQUFBLENBQVNHLEVBQ1RGLENBQUFBLEVBQUFBLENBQ0EsTUFDRixDQUNBNUQsQ0FBQUEsQ0FBSSxXQUFBLENBQVksSUFBSSxPQUFBLENBQVM3VixDQUFPLENBQUEsQ0FDcEM3SSxDQUFBQSxDQUFRLE9BQU8sSUFBQSxDQUFLd0osQ0FBQUEsQ0FBTyxPQUFRQSxDQUFBQSxDQUFPLFVBQUEsQ0FBWVIsRUFBSyxNQUFBLENBQVNBLENBQUFBLENBQUssS0FBQSxDQUFRLENBQUMsQ0FBQyxDQUFBLENBQ25GMFYsQ0FBQUEsQ0FBSSxZQUFZLFlBQUEsRUFBYSxDQUU3QkEsRUFBSSxXQUFBLENBQVksWUFBQSxDQUFhLEdBQUcsRUFDbEMsRUFDQUEsQ0FBQUEsQ0FBSSxXQUFBLENBQVksR0FBRyxPQUFBLENBQVM3VixDQUFPLEVBQ25DNlYsQ0FBQUEsQ0FBSSxXQUFBLENBQVksYUFBQSxHQUNsQixDQUFDLENBQ0gsQ0FBQSxPQUFFLENBQ0EsYUFBQSxDQUFjeFUsQ0FBUSxFQUN4QixDQUNGLENBRUEsZUFBc0J1WSxFQUFBQSxDQUFNNWYsRUFBb0QsQ0FNOUUsSUFBQW1DLEdBQUEsRUFBQSxDQUFBLEdBQUEsQ0FMQSxHQUFNLENBQUUsTUFBQSxDQUFBL0IsQ0FBQUEsQ0FBUSxHQUFBLENBQUFtQixDQUFBQSxDQUFLLE1BQUFpRixDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsRUFBUSxRQUFBLENBQUFqRSxDQUFBQSxDQUFVLFVBQUF5VixDQUFBQSxDQUFXLE9BQUEsQ0FBQUQsQ0FBQUEsQ0FBUyxjQUFBLENBQUF6QixFQUFnQixNQUFBLENBQUE3WSxDQUFBQSxDQUFRLFdBQUF3ZixDQUFXLENBQUEsQ0FBSWxkLEVBQ3JHaVksQ0FBQUEsRUFBV2xhLENBQUFBLENBQU8sS0FBS0ssRUFBQUEsQ0FBSyxvQ0FBb0MsRUFFcEUsSUFBTXloQixDQUFBQSxDQUFRLFlBQVksR0FBQSxFQUFJLENBQzlCLElBQU1DLENBQUFBLENBQU9qRCxFQUFBQSxDQUFXLENBQUUsTUFBQSxDQUFBemMsRUFBUSxRQUFBLENBQVVKLENBQUFBLENBQVMsT0FBQXRDLENBQU8sQ0FBQyxFQUM3RCxJQUFZcWlCLENBQUFBLENBQVczZCxDQUFBQSxDQUFBRCxFQUFBQSxDQUFBLE1BQU0yVixFQUFBQSxDQUFnQixNQUFBLENBQU8sQ0FBRSxLQUFBLENBQUF0UixDQUFBQSxDQUFPLE9BQUFDLENBQUFBLENBQVEsR0FBQSxDQUFBbEYsQ0FBQUEsQ0FBSyxPQUFBLENBQUF5VyxFQUFTLFNBQUEsQ0FBQUMsQ0FBQUEsQ0FBVyxlQUFBMUIsQ0FBZSxDQUFDLEVBQXZGLENBQUEsQ0FBQSxDQUFBLENBQ3ZCLElBQU1zRixFQUFNLE1BQU1pRSxDQUFBQSxDQUNsQi9oQixFQUFPLEtBQUEsQ0FBTUssRUFBQUEsQ0FBSyxhQUFjLENBQUUsTUFBQSxDQUFBZ0MsRUFBUSxJQUFBLENBQU0sV0FBQSxDQUFZLEdBQUEsRUFBSSxDQUFJeWYsQ0FBTSxDQUFDLENBQUEsQ0FFM0UsSUFBTTFDLENBQUFBLENBQVEsSUFBQSxDQUFLLEtBQUs1YixDQUFBQSxDQUFNaUIsQ0FBUSxDQUFBLENBQ3RDLElBQU00YSxFQUFnQixHQUFBLENBQU83YixDQUFBQSxDQUU3QixJQUFJK2IsQ0FBQUEsQ0FBVSxDQUFBLENBQ2QsSUFBSUUsQ0FBQUEsQ0FBVyxDQUFBLENBQ2YsSUFBSUMsQ0FBQUEsQ0FDSixJQUFNalksQ0FBQUEsQ0FBTXFXLENBQUFBLENBQUksWUFBWSxRQUFBLENBQzVCLElBQU1tRSxFQUFPbkUsQ0FBQUEsQ0FBSSxXQUFBLENBQVksVUFDN0IsSUFBTW9FLENBQUFBLENBQVNELEVBQUssTUFBQSxDQUFPLENBQUMsRUFDNUIsR0FBSSxDQUNGbkUsRUFBSSxXQUFBLENBQVksWUFBQSxDQUFhdGEsQ0FBRyxDQUFBLENBQ2hDc2EsRUFBSSxXQUFBLENBQVksWUFBQSxHQUNoQixNQUFNNVYsRUFBQUEsQ0FBaUJULENBQUcsQ0FBQSxDQUUxQixJQUFBLElBQVNrRCxDQUFBQSxDQUFRLENBQUEsQ0FBR0EsRUFBUXlVLENBQUFBLENBQU96VSxDQUFBQSxFQUFBQSxDQUFTLENBQzFDaEwsQ0FBQUEsRUFBUSxjQUFBLEdBQ1IsSUFBTXdpQixFQUFBQSxDQUFBQSxDQUFXeFgsQ0FBQUEsQ0FBUSxDQUFBLEVBQUswVSxFQUU5QixNQUFNa0MsRUFBQUEsQ0FBS1csRUFBUUMsRUFBTyxDQUFBLENBQzFCLE1BQU1oWixFQUFBQSxDQUFXMlUsQ0FBQUEsQ0FBSSxXQUFBLENBQWFxRSxFQUFBQSxDQUFTOUMsQ0FBYSxDQUFBLENBQ3hELElBQU16VyxHQUFTLE1BQU1vWCxFQUFBQSxDQUFNLENBQUUsTUFBQSxDQUFBM2QsQ0FBQUEsQ0FBUSxHQUFBLENBQUF5YixDQUFBQSxDQUFLLEtBQU0sQ0FBRSxLQUFBLENBQUFyVixFQUFPLE1BQUEsQ0FBQUMsQ0FBTyxFQUFHLEVBQUEsQ0FBSXlaLEVBQVEsQ0FBQyxDQUFBLENBS2hGLEdBRkFILENBQUFBLENBQVMsVUFBQSxDQUFXcFosRUFBTSxDQUFBLENBQUUsS0FBQSxDQUFPckcsSUFBT21kLENBQUFBLEdBQWdCbmQsRUFBRSxDQUFBLENBQzVEZ2QsQ0FBQUEsRUFBQUEsQ0FDSUcsRUFBYSxNQUFNQSxDQUFBQSxDQUV2QixJQUFNYyxFQUFBQSxDQUFjLElBQUEsQ0FBSyxNQUFPakIsQ0FBQUEsQ0FBVUgsQ0FBQUEsQ0FBUyxHQUFHLENBQUEsQ0FDbEQsSUFBQSxDQUFLLElBQUlvQixFQUFBQSxDQUFjZixDQUFRLEVBQUksRUFBQSxHQUNyQ0EsQ0FBQUEsQ0FBV2UsR0FDWHJCLENBQUFBLENBQVdNLENBQVEsQ0FBQSxFQUV2QixDQUNGLFFBQUUsQ0FDQXBaLEVBQUFBLENBQVksVUFBUyxDQUNyQixNQUFNK1gsR0FBY04sQ0FBRyxDQUFBLENBQ3ZCLE1BQU1rRSxDQUFBQSxDQUFTLFNBQ2pCLENBRUEsR0FBSXRDLENBQUFBLENBQWEsTUFBTUEsRUFDdkIsR0FBSUgsQ0FBQUEsR0FBWSxDQUFBLENBQ2QsTUFBTSxJQUFJLEtBQUEsQ0FBTSxvQkFBb0IsT0FFcEMsT0FBTyxDQUFFLFFBQUFBLENBQUFBLENBQVMsSUFBQSxDQUFNLEVBQUcsT0FBQSxDQUFBdEYsQ0FBUSxRQS9DckN2VixFQUFBQSxDQUFBLENBQUEsSUFBQUMsR0FBQUQsRUFBQUEsQ0FBQUUsQ0FBQUEsQ0FBQSxrQkFBQUMsRUFBQUEsQ0FBQUMsQ0FBQUEsQ0FBQVYsRUFBQUEsQ0FBQU8sRUFBQUEsQ0FBQUMsR0FBQUMsRUFBQUEsRUFBQSxNQUFBQSxJQWlERixDQ25IQSxJQUFNeEUsR0FBTSxPQUFBLENBRVosU0FBUytoQixFQUFBQSxFQUFnQixDQUN2QnBpQixFQUFPLEtBQUEsQ0FBTUssRUFBQUEsQ0FBSyxnQkFBaUJHLFlBQUFBLENBQUksbUJBQUEsRUFBcUIsRUFDOUQsQ0FFQSxJQUFNNmhCLEVBQUFBLENBQU8sSUFBSSxlQUFBLENBQ2JDLEVBQUFBLENBQVUsTUFFZGhpQixFQUFBQSxFQUEyQixDQUMzQmlpQixjQUFLLGtCQUFBLENBQW1CLElBQUksRUFDNUIvaEIsWUFBQUEsQ0FBSSxJQUFBLEVBQU0sTUFBSyxDQUNmQSxZQUFBQSxDQUFJLEdBQUcsbUJBQUEsQ0FBcUIsSUFBTSxDQUFDLENBQUMsQ0FBQSxDQUNwQ0EsWUFBQUEsQ0FBSSxFQUFBLENBQUcsa0JBQW1CNGhCLEVBQWEsQ0FBQSxDQUN2QzVoQixhQUFJLEVBQUEsQ0FBRyxhQUFBLENBQWdCK0IsR0FBTSxDQUFDK2YsRUFBQUEsRUFBVy9mLENBQUFBLENBQUUsY0FBQSxFQUFnQixDQUFBLENBQzNEL0IsWUFBQUEsQ0FBSSxHQUFHLFdBQUEsQ0FBYytCLENBQUFBLEVBQU0sQ0FBQytmLEVBQUFBLEVBQVcvZixDQUFBQSxDQUFFLGNBQUEsRUFBZ0IsRUFFekRrSixTQUFBQSxDQUFHLE9BQUEsQ0FBUSxLQUFNLHNEQUFpRCxDQUFBLENBQ2xFLFFBQVEsSUFBQSxDQUFLLFlBQUEsQ0FBYyxJQUFNNFcsRUFBQUEsQ0FBSyxNQUFNLFlBQVksQ0FBQyxFQUN6RCxPQUFBLENBQVEsRUFBQSxDQUFHLFVBQVlHLENBQUFBLEVBQVEsQ0FDN0IsSUFBTXZrQixDQUFBQSxDQUFNdWtCLEVBQ1J2a0IsQ0FBQUEsQ0FBSSxJQUFBLEdBQVMsVUFBbUJva0IsRUFBQUEsQ0FBSyxLQUFBLENBQU1wa0IsRUFBSSxNQUFNLEVBQzNELENBQUMsQ0FBQSxDQUVEK0QsR0FBUSxDQUNOLElBQUEsQ0FBTSxNQUNOLEdBQUEsQ0FBSyxNQUFPSyxFQUFRSixDQUFBQSxHQUFZLENBQzlCLElBQU13Z0IsQ0FBQUEsQ0FBTSxJQUFJamdCLEVBQUFBLENBQ2hCLEdBQUksQ0FDRixNQUFNaEMsWUFBQUEsQ0FBSSxXQUFVLENBQ3BCb0osRUFBQUEsR0FDQXBELEVBQUFBLEVBQW1CLENBQ25CNGIsSUFBYyxDQUNkLElBQUEsSUFBVzFTLEtBQU96TixDQUFBQSxDQUFRLE9BQUEsQ0FBUSxNQUFNLEdBQUcsQ0FBQSxDQUN6QyxNQUFNc0IsY0FBQUEsQ0FBTW5HLGFBQVFzUyxDQUFHLENBQUEsQ0FBRyxDQUFFLFNBQUEsQ0FBVyxDQUFBLENBQUssQ0FBQyxDQUFBLENBRS9DLElBQU1xTyxDQUFBQSxDQUFTOWIsQ0FBQUEsQ0FBUSxjQUFnQjRmLEVBQUFBLENBQVEzQyxFQUFBQSxDQUMvQ21ELEdBQUssTUFBQSxDQUFPLGNBQUEsR0FDWixJQUFNSyxDQUFBQSxDQUFTLE1BQU01QixFQUFBQSxDQUFhdUIsR0FBSyxNQUFBLENBQVEsSUFDN0N0RSxFQUFPLENBQ0wsTUFBQSxDQUFBMWIsRUFDQSxHQUFHSixDQUFBQSxDQUNILE9BQVFvZ0IsRUFBQUEsQ0FBSyxNQUFBLENBQ2IsV0FBYWxkLENBQUFBLEVBQU1zZCxDQUFBQSxDQUFJLGNBQWN0ZCxDQUFDLENBQUEsQ0FDdEMsVUFBVyxDQUFDOFYsQ0FBQUEsQ0FBR25WLENBQUFBLEdBQU0yYyxDQUFBQSxDQUFJLGFBQWF4SCxDQUFBQSxDQUFHblYsQ0FBQyxDQUM1QyxDQUFDLENBQ0gsRUFDQSxNQUFNMmMsQ0FBQUEsQ0FBSSxTQUFBLENBQVVDLENBQU0sRUFDNUIsQ0FBQSxNQUFTbmdCLENBQUFBLENBQUcsQ0FDVixJQUFNdkQsQ0FBQUEsQ0FBUXVELEVBQ1J1RCxDQUFBQSxDQUFJOUcsQ0FBQUEsQ0FBTSxLQUFBLEVBQVNBLENBQUFBLENBQU0sU0FBVyxNQUFBLENBQU91RCxDQUFBQSxFQUFLLGVBQWUsQ0FBQSxDQUNyRSxNQUFNa2dCLEVBQUksVUFBQSxDQUFXM2MsQ0FBQyxFQUN4QixDQUFBLE9BQUUsQ0FDQXdjLEdBQVUsSUFBQSxDQUNWOWhCLFlBQUFBLENBQUksT0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHJldHVybiB4O1xuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJtb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cEF1ZGlvUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXVkaW9fcHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yMS5cblxuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltDcmFzaF1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCkge1xuICBjb25zdCBkdW1wRGlyID0gam9pbihhcHAuZ2V0UGF0aChcInVzZXJEYXRhXCIpLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8Rm4gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSwgRD4oXG4gIGZuOiBGbixcbiAgZGVmYXVsdFZhbHVlOiBELFxuKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rm4+KSA9PiBSZXR1cm5UeXBlPEZuPiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSByZXR1cm47XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIGVsc2UgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0L2h0bWwubXA0LG91dC9odG1sLndlYm1cIjtcblxuZXhwb3J0IGNvbnN0IFJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29tbWEtc2VwYXJhdGVkIG91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCBSZW5kZXJTY2hlbWEsIHR5cGUgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHJldHVybiBzO1xuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlOiBvcHRzLm91dEZpbGUgPz8gZC5vdXRGaWxlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENPTlNPTEUgPSBcImNvbnNvbGVcIixcbiAgUFJPR1JFU1MgPSBcInByb2dyZXNzXCIsXG4gIERPTkUgPSBcImRvbmVcIixcbiAgRVJST1IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ0FOQ0VMID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DT05TT0xFO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DQU5DRUw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLlBST0dSRVNTO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvbmVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkRPTkU7XG4gIHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5FUlJPUjtcbiAgZXJyb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSXBjTXNnID0gQ29uc29sZU1zZyB8IFByb2dyZXNzTXNnIHwgRG9uZU1zZyB8IEVycm9yTXNnIHwgQ2FuY2VsTXNnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwY0V2ZW50cyB7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIGNvbnNvbGU6IFtsZXZlbDogc3RyaW5nLCBtc2c6IHN0cmluZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtjb2RlOiBudW1iZXIgfCBudWxsXTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIHdyaXRlQ29uc29sZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkNPTlNPTEUsIGxldmVsLCBtZXNzYWdlIH0pO1xuICB9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5QUk9HUkVTUywgdmFsdWUgfSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5FUlJPUiwgZXJyb3IgfSk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5ET05FLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKG1zZzogSXBjTXNnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXByb2Nlc3Muc2VuZCkgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5DT05TT0xFOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUFJPR1JFU1M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5ET05FOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVSUk9SOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHJtIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBmZm1wZWdQYXRoIH0gZnJvbSBcIm5vZGUtYXYvZmZtcGVnXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBXQUlUX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IFBPTExfSU5URVJWQUxfTVMgPSAyMDtcblxuaW50ZXJmYWNlIFdhaXRlciB7XG4gIHJlc29sdmU6IChiOiBCdWZmZXIpID0+IHZvaWQ7XG4gIHRpbWVyOiBOb2RlSlMuVGltZW91dDtcbn1cblxuZXhwb3J0IGNsYXNzIERlY29kZVNlc3Npb24ge1xuICBwcml2YXRlIHByb2M6IENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkeSA9IDA7XG4gIHByaXZhdGUgZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIHdhaXRlcnMgPSBuZXcgU2V0PHsgaWR4OiBudW1iZXI7IHc6IFdhaXRlciB9PigpO1xuICBwcml2YXRlIHdhdGNoZXI6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1ldGE6IFZpZGVvTWV0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNyYzogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZnJhbWVzRGlyOiBzdHJpbmcsXG4gICkge1xuICAgIHZvaWQgdGhpcy5zcGF3bigpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RnJhbWUoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmIChpZHggPCAxKSBpZHggPSAxO1xuICAgIGNvbnN0IHBhdGggPSBqb2luKHRoaXMuZnJhbWVzRGlyLCBgJHtwYWQ2KGlkeCl9LnBuZ2ApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVhZEZpbGUocGF0aCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBub3QgeWV0IG9uIGRpc2tcbiAgICB9XG4gICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLnJlYWR5IDwgaWR4KSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICAgIHJldHVybiB0aGlzLndhaXQoaWR4KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgIHRoaXMucHJvYyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMud2F0Y2hlcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLndhdGNoZXIpO1xuICAgICAgdGhpcy53YXRjaGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHsgdyB9IG9mIHRoaXMud2FpdGVycykge1xuICAgICAgY2xlYXJUaW1lb3V0KHcudGltZXIpO1xuICAgICAgdy5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHRoaXMud2FpdGVycy5jbGVhcigpO1xuICAgIHZvaWQgcm0odGhpcy5mcmFtZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd2FpdChpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHc6IFdhaXRlciA9IHtcbiAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgdGltZXI6IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMud2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgICAgfSwgV0FJVF9USU1FT1VUX01TKSxcbiAgICAgIH07XG4gICAgICBjb25zdCBlbnRyeSA9IHsgaWR4LCB3IH07XG4gICAgICB0aGlzLndhaXRlcnMuYWRkKGVudHJ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3Bhd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbWtkaXIodGhpcy5mcmFtZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IGZwcyA9IHRoaXMubWV0YS5mcHM7XG4gICAgY29uc3QgcGF0dGVybiA9IGpvaW4odGhpcy5mcmFtZXNEaXIsIFwiJTA2ZC5wbmdcIik7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKFxuICAgICAgZmZtcGVnUGF0aCgpLFxuICAgICAgW1xuICAgICAgICBcIi1sb2dsZXZlbFwiLFxuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIFwiLXlcIixcbiAgICAgICAgXCItaVwiLFxuICAgICAgICB0aGlzLnNyYyxcbiAgICAgICAgXCItdmZcIixcbiAgICAgICAgYGZwcz0ke2Zwc31gLFxuICAgICAgICBcIi1waXhfZm10XCIsXG4gICAgICAgIFwicmdiYVwiLFxuICAgICAgICBcIi1jb21wcmVzc2lvbl9sZXZlbFwiLFxuICAgICAgICBcIjFcIixcbiAgICAgICAgXCItcHJlZFwiLFxuICAgICAgICBcIm5vbmVcIixcbiAgICAgICAgcGF0dGVybixcbiAgICAgIF0sXG4gICAgICB7IHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdIH0sXG4gICAgKTtcbiAgICB0aGlzLnByb2MgPSBwcm9jO1xuICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgKGI6IEJ1ZmZlcikgPT4gbG9nZ2VyLndhcm4oVEFHLCBgWyR7dGhpcy5tZXRhLmlkLnNsaWNlKDAsIDgpfV0gJHtiLnRvU3RyaW5nKCkudHJpbSgpfWApKTtcbiAgICBwcm9jLm9uKFwiZXhpdFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5wb2xsKCk7XG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgIH0pO1xuICAgIHRoaXMud2F0Y2hlciA9IHNldEludGVydmFsKCgpID0+IHRoaXMucG9sbCgpLCBQT0xMX0lOVEVSVkFMX01TKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcG9sbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIodGhpcy5mcmFtZXNEaXIpO1xuICAgICAgbGV0IG1heCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgZW50cmllcykge1xuICAgICAgICBpZiAoIW5hbWUuZW5kc1dpdGgoXCIucG5nXCIpKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KG5hbWUuc2xpY2UoMCwgLTQpLCAxMCk7XG4gICAgICAgIGlmIChuID4gbWF4KSBtYXggPSBuO1xuICAgICAgfVxuICAgICAgaWYgKG1heCA8PSB0aGlzLnJlYWR5KSByZXR1cm47XG4gICAgICB0aGlzLnJlYWR5ID0gbWF4O1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGRpciBtYXkgbm90IGV4aXN0IHlldFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5XYWl0ZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnRoaXMud2FpdGVyc10pIHtcbiAgICAgIGlmIChlbnRyeS5pZHggPD0gdGhpcy5yZWFkeSkge1xuICAgICAgICB0aGlzLndhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGVudHJ5LncudGltZXIpO1xuICAgICAgICB2b2lkIHJlYWRGaWxlKGpvaW4odGhpcy5mcmFtZXNEaXIsIGAke3BhZDYoZW50cnkuaWR4KX0ucG5nYCkpXG4gICAgICAgICAgLnRoZW4oKGJ1ZikgPT4gZW50cnkudy5yZXNvbHZlKGJ1ZikpXG4gICAgICAgICAgLmNhdGNoKCgpID0+IGVudHJ5LncucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRoaXMud2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBjbGVhclRpbWVvdXQoZW50cnkudy50aW1lcik7XG4gICAgICAgIGVudHJ5LncucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYWQ2KG46IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoNiwgXCIwXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IERlbXV4ZXIgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5jb25zdCBQUk9CRV9USU1FT1VUX01TID0gNV8wMDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVSZXN1bHQge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KFBST0JFX1RJTUVPVVRfTVMpO1xuICBhd2FpdCB1c2luZyBkID0gYXdhaXQgRGVtdXhlci5vcGVuKHNyYywgeyBzaWduYWwgfSk7XG4gIGNvbnN0IHN0cmVhbSA9IGQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB0aHJvdyBuZXcgRXJyb3IoYHByb2JlOiBubyB2aWRlbyBzdHJlYW0gaW4gJHtzcmN9YCk7XG4gIGNvbnN0IGR1cmF0aW9uID0gZC5kdXJhdGlvbiA+IDAgPyBkLmR1cmF0aW9uIDogMDtcbiAgcmV0dXJuIHsgd2lkdGg6IHN0cmVhbS5jb2RlY3Bhci53aWR0aCwgaGVpZ2h0OiBzdHJlYW0uY29kZWNwYXIuaGVpZ2h0LCBkdXJhdGlvbiB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMjIuXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltWaWRlb1NyY0NhY2hlXVwiO1xuY29uc3QgQ0FDSEVfRElSID0gam9pbih0bXBkaXIoKSwgXCJwdXAtdmlkZW8tY2FjaGVcIik7XG5jb25zdCBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZz4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbGl6ZShzcmM6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3JjLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpICYmICFzcmMuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNyYyk7XG4gIGxldCBwID0gY2FjaGUuZ2V0KHNyYyk7XG4gIGlmICghcCkge1xuICAgIHAgPSBkb3dubG9hZChzcmMpO1xuICAgIGNhY2hlLnNldChzcmMsIHApO1xuICB9XG4gIHJldHVybiBwO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZChzcmM6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IG1rZGlyKENBQ0hFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUoc3JjKS5kaWdlc3QoXCJoZXhcIik7XG4gIGNvbnN0IGV4dCA9IHBpY2tFeHQoc3JjKTtcbiAgY29uc3QgZHN0ID0gam9pbihDQUNIRV9ESVIsIGAke2hhc2h9JHtleHR9YCk7XG4gIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goc3JjKTtcbiAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgdmlkZW8gc3JjIGRvd25sb2FkIGZhaWxlZCAke3Jlcy5zdGF0dXN9OiAke3NyY31gKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGRzdCwgQnVmZmVyLmZyb20oYXdhaXQgcmVzLmFycmF5QnVmZmVyKCkpKTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYGNhY2hlZCAke3NyY30gLT4gJHtkc3R9IGluICR7RGF0ZS5ub3coKSAtIHQwfW1zYCk7XG4gIHJldHVybiBkc3Q7XG59XG5cbmZ1bmN0aW9uIHBpY2tFeHQodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtID0gdXJsLm1hdGNoKC9cXC4obXA0fG1vdnx3ZWJtfG00dikoPzpcXD98JHwjKS9pKTtcbiAgcmV0dXJuIG0/LlsxXSA/IGAuJHttWzFdLnRvTG93ZXJDYXNlKCl9YCA6IFwiLm1wNFwiO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgRGVjb2RlU2Vzc2lvbiB9IGZyb20gXCIuL2RlY29kZV9zZXNzaW9uXCI7XG5pbXBvcnQgeyBwcm9iZSB9IGZyb20gXCIuL2ZmcHJvYmVcIjtcbmltcG9ydCB7IGxvY2FsaXplIH0gZnJvbSBcIi4vc3JjX2NhY2hlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRW50cnkge1xuICBzZXNzaW9uOiBEZWNvZGVTZXNzaW9uO1xuICByZWZzOiBudW1iZXI7XG59XG5cbmNvbnN0IEZSQU1FU19ST09UID0gam9pbih0bXBkaXIoKSwgXCJwdXAtdmlkZW8tZnJhbWVzXCIpO1xuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIHNlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIEVudHJ5PigpO1xuXG4gIGFzeW5jIG9wZW4ob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGNvbnN0IGlkID0ga2V5KG9wdHMuc3JjLCBvcHRzLmZwcyk7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdC5yZWZzKys7XG4gICAgICByZXR1cm4gaGl0LnNlc3Npb24ubWV0YTtcbiAgICB9XG4gICAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgbG9jYWxpemUob3B0cy5zcmMpO1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBwcm9iZShsb2NhbFBhdGgpO1xuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHsgaWQsIHdpZHRoOiBpbmZvLndpZHRoLCBoZWlnaHQ6IGluZm8uaGVpZ2h0LCBmcHM6IG9wdHMuZnBzLCBkdXJhdGlvbjogaW5mby5kdXJhdGlvbiB9O1xuICAgIGNvbnN0IGZyYW1lc0RpciA9IGpvaW4oRlJBTUVTX1JPT1QsIGlkKTtcbiAgICB0aGlzLnNlc3Npb25zLnNldChpZCwgeyBzZXNzaW9uOiBuZXcgRGVjb2RlU2Vzc2lvbihtZXRhLCBsb2NhbFBhdGgsIGZyYW1lc0RpciksIHJlZnM6IDEgfSk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHRocm93IG5ldyBFcnJvcihgZnJhbWUtc2VydmVyOiB1bmtub3duIGlkPSR7aWR9YCk7XG4gICAgcmV0dXJuIGUuc2Vzc2lvbi5nZXRGcmFtZShpZHgpO1xuICB9XG5cbiAgY2xvc2UoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGUgPSB0aGlzLnNlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSByZXR1cm47XG4gICAgaWYgKC0tZS5yZWZzID4gMCkgcmV0dXJuO1xuICAgIGUuc2Vzc2lvbi5jbG9zZSgpO1xuICAgIHRoaXMuc2Vzc2lvbnMuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIGNsb3NlQWxsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgWywgZV0gb2YgdGhpcy5zZXNzaW9ucykgZS5zZXNzaW9uLmNsb3NlKCk7XG4gICAgdGhpcy5zZXNzaW9ucy5jbGVhcigpO1xuICB9XG5cbn1cblxuZnVuY3Rpb24ga2V5KHNyYzogc3RyaW5nLCBmcHM6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUoYCR7c3JjfXwke2Zwc31gKS5kaWdlc3QoXCJoZXhcIik7XG59XG5cbmV4cG9ydCBjb25zdCBmcmFtZVNlcnZlciA9IG5ldyBGcmFtZVNlcnZlcigpO1xuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBmcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBGcmFtZVByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3JlcS5tZXRob2R9ICR7dXJsLmhvc3RuYW1lfSR7dXJsLnNlYXJjaH1gKTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICByZXR1cm4ganNvbk9rKGF3YWl0IGZyYW1lU2VydmVyLm9wZW4oeyBzcmM6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIsIGZwczogaW50KHVybCwgXCJmcHNcIiwgMzApIH0pKTtcbiAgICAgICAgY2FzZSBcImZyYW1lXCI6XG4gICAgICAgICAgcmV0dXJuIHBuZ09rKGF3YWl0IGZyYW1lU2VydmVyLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMSkpKTtcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgICAgZnJhbWVTZXJ2ZXIuY2xvc2UodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGB1bmtub3duIGFjdGlvbjogJHt1cmwuaG9zdG5hbWV9YCwgeyBzdGF0dXM6IDQwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobXNnLCB7IHN0YXR1czogNTAwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcG5nT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggPT09IDApIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQxMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImltYWdlL3BuZ1wiLCBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnQodXJsOiBVUkwsIGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgdiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG4gIGNvbnN0IG4gPSB2ID8gcGFyc2VJbnQodiwgMTApIDogTmFOO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IGZhbGxiYWNrO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmNvbnN0IENEUF9USU1FT1VUX01TID0gNV8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZW5kKGNkcDogRGVidWdnZXIsIG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBvYmplY3QpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGNkcC5zZW5kQ29tbWFuZChtZXRob2QsIHBhcmFtcyksIENEUF9USU1FT1VUX01TLCBgY2RwLiR7bWV0aG9kfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbEluKGNkcDogRGVidWdnZXIsIGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoc2VuZChjZHAsIFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7IGV4cHJlc3Npb24gfSksIENEUF9USU1FT1VUX01TLCBcImV2YWxJblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyLCBidWRnZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgYWR2YW5jZVZpcnR1YWxUaW1lIHRpbWVkIG91dCBhZnRlciAke0NEUF9USU1FT1VUX01TfW1zYCkpO1xuICAgIH0sIENEUF9USU1FT1VUX01TKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoXzogRWxlY3Ryb24uRXZlbnQsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09PSBcIkVtdWxhdGlvbi52aXJ0dWFsVGltZUJ1ZGdldEV4cGlyZWRcIikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjZHAub24oXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIC8vIFN0YXJ2YXRpb249MSBmb3JjZXMgYnVkZ2V0IHRvIGV4cGlyZSBldmVuIGlmIGEgc2xvdyBmZXRjaCB0YXNrIGlzIHBlbmRpbmc7IGRlZmF1bHQgdW5ib3VuZGVkIGRlYWRsb2Nrcy5cbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICAgIG1heFZpcnR1YWxUaW1lVGFza1N0YXJ2YXRpb25Db3VudDogMSxcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzaXplRHJhd2FibGUoY2RwOiBEZWJ1Z2dlciwgc2l6ZTogU2l6ZSkge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHtcbiAgICAuLi5zaXplLFxuICAgIGRldmljZVNjYWxlRmFjdG9yOiAxLFxuICAgIG1vYmlsZTogZmFsc2UsXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgdHlwZSBEZWJ1Z2dlciwgdHlwZSBTaXplLCB0eXBlIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlydHVhbFRpbWUsIGV2YWxJbiB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcbmV4cG9ydCBjb25zdCBTVEVHT19USUNLX0NIQU5ORUwgPSBcInN0ZWdvLXRpY2tcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RlZ29IVE1MKHRhcmdldFVSTDogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gIDxzdHlsZT5cbiAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgaHRtbCwgYm9keSB7IHdpZHRoOiAke3dpZHRofXB4OyBoZWlnaHQ6ICR7aGVpZ2h0ICsgMX1weDsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICN0YXJnZXQgeyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6IDA7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGJvcmRlcjogbm9uZTsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgI3N0ZWdvIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7XG4gICAgICBoZWlnaHQ6IDFweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XG4gICAgfVxuICAgIC8qIEhlYXJ0YmVhdDogaW52aXNpYmxlIGFsd2F5cy1vbiB0aWNrLiBGb3JjZXMgQ2hyb21pdW0gY29tcG9zaXRvciB0byBpc3N1ZSBCZWdpbkZyYW1lIGVhY2hcbiAgICAgICB2aXJ0dWFsIHRpY2sgb24gb3RoZXJ3aXNlLXN0YXRpYyBwYWdlcyBzbyBjYW52YXMjc3RlZ28gcHV0SW1hZ2VEYXRhIHVwZGF0ZXMgbGFuZCBpbiB0aGVcbiAgICAgICBjYXB0dXJlZCBwYWludCBldmVudC4gV2l0aG91dCB0aGlzLCBhIHN0YXRpYyBpZnJhbWUgKyBwYXVzZWQgdmlydHVhbCB0aW1lIGxlYXZlcyB0aGVcbiAgICAgICBjb21wb3NpdG9yJ3MgbGFzdCBmcmFtZSBjYWNoZWQgZXZlbiBhZnRlciBjYW52YXMgZGlydGllczsgaW52YWxpZGF0ZSgpIG9ubHkgcmUtZW1pdHMgdGhlXG4gICAgICAgY2FjaGVkIGZyYW1lLiAqL1xuICAgIEBrZXlmcmFtZXMgcHVwX2hlYXJ0YmVhdCB7XG4gICAgICAwJSB7IG9wYWNpdHk6IDAuNTsgfVxuICAgICAgMTAwJSB7IG9wYWNpdHk6IDE7IH1cbiAgICB9XG4gICAgI2hlYXJ0YmVhdCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHdpZHRoOiAxcHg7XG4gICAgICBoZWlnaHQ6IDFweDtcbiAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICBhbmltYXRpb246IHB1cF9oZWFydGJlYXQgMXMgbGluZWFyIGluZmluaXRlO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxpZnJhbWUgaWQ9XCJ0YXJnZXRcIiBzcmM9XCIke3RhcmdldFVSTH1cIj48L2lmcmFtZT5cbiAgPGNhbnZhcyBpZD1cInN0ZWdvXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIjFcIj48L2NhbnZhcz5cbiAgPGRpdiBpZD1cImhlYXJ0YmVhdFwiPjwvZGl2PlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcblxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnJHtTVEVHT19USUNLX0NIQU5ORUx9Jyk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX2RyYXdfc3RlZ29fXyA9IChtcykgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gZW5jb2RlVGltZXN0YW1wKG1zKSk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfc3RvcF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgICAgcmFmSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdGVnbyhiaXRtYXA6IEJ1ZmZlciwgc2l6ZTogU2l6ZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgaWYgKHdpZHRoIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggfHwgaGVpZ2h0IDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXJrZXJSb3cgPSBoZWlnaHQgLSAxO1xuXG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICBjb25zdCBwaXhlbElkeCA9IChtYXJrZXJSb3cgKiB3aWR0aCArIGkpICogNDtcbiAgICBjb25zdCByID0gYml0bWFwW3BpeGVsSWR4XSA/PyAwO1xuICAgIGNvbnN0IGJpdCA9IHIgPiAxMjcgPyAxIDogMDtcbiAgICB0aW1lc3RhbXAgPSAodGltZXN0YW1wIDw8IDEpIHwgYml0O1xuICB9XG5cbiAgdGltZXN0YW1wID0gdGltZXN0YW1wID4+PiAwO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkgfHwgdGltZXN0YW1wIDwgMCB8fCB0aW1lc3RhbXAgPiAxZTcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0YXJ0X3N0ZWdvX18oKWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdG9wX3N0ZWdvX18oKWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3dhcEJ1ZmZlcih3YzogV2ViQ29udGVudHMsIGV4cGVjdGVkOiBudW1iZXIsIGludGVydmFsOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3dhcHBlZCA9IG5ldyBQcm9taXNlKChyKSA9PiB3Yy5pcGMub25jZShTVEVHT19USUNLX0NIQU5ORUwsIHIpKTtcbiAgYXdhaXQgZXZhbEluKHdjLmRlYnVnZ2VyLCBgX19wdXBfZHJhd19zdGVnb19fKCR7ZXhwZWN0ZWR9KWApO1xuICBhd2FpdCBhZHZhbmNlVmlydHVhbFRpbWUod2MuZGVidWdnZXIsIGludGVydmFsKTtcbiAgYXdhaXQgd2l0aFRpbWVvdXQoc3dhcHBlZCwgNV8wMDAsIFwic3dhcEJ1ZmZlclwiKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkU3RlZ29IVE1MIH0gZnJvbSBcIi4vc3RlZ29cIjtcblxuY29uc3QgUFVQX1NDSEVNRSA9IFwicHVwXCI7XG5jb25zdCBGUkFNRV9TQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG4vLyBgcHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkYCBob25vcnMgb25seSB0aGUgTEFTVCBjYWxsIOKAlCByZWdpc3RlciBldmVyeVxuLy8gY3VzdG9tIHNjaGVtZSBpbiB0aGlzIG9uZSBwbGFjZS4gTmV3IHNjaGVtZXMgbXVzdCBiZSBhZGRlZCB0byBQUklWSUxFR0VEX1NDSEVNRVMgYmVsb3cuXG5jb25zdCBQUklWSUxFR0VEX1BSSVZJTEVHRVMgPSB7XG4gIHN0YW5kYXJkOiB0cnVlLFxuICBzZWN1cmU6IHRydWUsXG4gIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgYWxsb3dTZXJ2aWNlV29ya2VyczogdHJ1ZSxcbiAgc3VwcG9ydEZldGNoQVBJOiB0cnVlLFxuICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgc3RyZWFtOiB0cnVlLFxuICBjb2RlQ2FjaGU6IHRydWUsXG59IGFzIGNvbnN0O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGJlZm9yZSBhcHAgaXMgcmVhZHkuXG5wcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQoW1xuICB7IHNjaGVtZTogUFVQX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG4gIHsgc2NoZW1lOiBGUkFNRV9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjLnJlcGxhY2UoXCJodHRwOi8vXCIsIFwiaHR0cHM6Ly9cIikpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcIndcIiwgU3RyaW5nKHNpemUud2lkdGgpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJoXCIsIFN0cmluZyhzaXplLmhlaWdodCkpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHJldHVybjtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIEhhcmR3YXJlRnJhbWVzQ29udGV4dCwgUGFja2V0LCBSYXRpb25hbCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgQVZDb2xvclJhbmdlLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DdHhPcHRpb25zIHtcbiAgY29kZWM6IENvZGVjO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2xvclJhbmdlPzogQVZDb2xvclJhbmdlO1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaHdGcmFtZXNDdHg/OiBIYXJkd2FyZUZyYW1lc0NvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICBpZiAob3B0cy5od0ZyYW1lc0N0eCkgY3R4Lmh3RnJhbWVzQ3R4ID0gb3B0cy5od0ZyYW1lc0N0eDtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgcGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLmJpdHMucHVzaCgodiA+PiBpKSAmIDEpO1xuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB0aGlzLmJpdHMucHVzaChwYWQpO1xuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRSZWFkZXIge1xuICBwcml2YXRlIF9iaXRzOiBudW1iZXJbXTtcbiAgcG9zID0gMDtcbiAgY29uc3RydWN0b3IoZGF0YTogQnVmZmVyKSB7XG4gICAgdGhpcy5fYml0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmVhZFVlKCk6IG51bWJlciB7XG4gICAgbGV0IHplcm9zID0gMDtcbiAgICB3aGlsZSAodGhpcy5fYml0c1t0aGlzLnBvc10gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH1cbiAgICB0aGlzLnBvcysrO1xuICAgIGxldCB2YWwgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemVyb3M7IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuLy8gSEVWQyBOQUwgdW5pdCB0eXBlcyAoVC1SRUMtSC4yNjUgVGFibGUgNy0xKVxuZXhwb3J0IGNvbnN0IE5BTF9CTEFfV19MUCA9IDE2O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfV19SQURMID0gMTk7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9OX0xQID0gMjA7XG5leHBvcnQgY29uc3QgTkFMX1JTVl9JUkFQX1ZDTDIzID0gMjM7XG5leHBvcnQgY29uc3QgTkFMX1ZQUyA9IDMyO1xuZXhwb3J0IGNvbnN0IE5BTF9TUFMgPSAzMztcbmV4cG9ydCBjb25zdCBOQUxfUFBTID0gMzQ7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9QUkVGSVggPSAzOTtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1NVRkZJWCA9IDQwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gUGF0Y2ggTlZFTkMgb3V0cHV0IHRvIGNvbmZvcm0gdG8gQXBwbGUgSEVWQyBWaWRlbyB3aXRoIEFscGhhIEludGVyb3BlcmFiaWxpdHkgUHJvZmlsZS5cbi8vIFNwZWM6IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9hdi1mb3VuZGF0aW9uL0hFVkMtVmlkZW8td2l0aC1BbHBoYS1JbnRlcm9wZXJhYmlsaXR5LVByb2ZpbGUucGRmXG4vLyBTbGljZSBwYXJzZXIgaXMgY29uZmlnLWRyaXZlbjogTnZlbmNIZXZjQ29uZmlnIGZyb20gcGFyc2UudHMgZGVyaXZlcyBmbGFncyBhdCBlbmNvZGVyIGluaXQuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBOQUxfQkxBX1dfTFAsXG4gIE5BTF9SU1ZfSVJBUF9WQ0wyMyxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbixcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG4vLyBQVEwgYml0IG9mZnNldHMgd2l0aGluIGVtdWxhdGlvbi1wcmV2ZW50aW9uLXN0cmlwcGVkIE5BTCAoTkFMIGhlYWRlciBpbmNsdWRlZCkuXG5jb25zdCBWUFNfUFRMX0JJVCA9IDQ4OyAvLyAxNiAoTkFMIGhkcikgKyAzMiAoVlBTIHByZWZpeClcbmNvbnN0IFNQU19QVExfQklUID0gMjQ7IC8vIDE2IChOQUwgaGRyKSArIDggKFNQUyBwcmVmaXgpXG5jb25zdCBQVExfVElFUl9CSVQgPSAyO1xuY29uc3QgUFRMX0NPTVBBVDJfQklUID0gMTA7IC8vIHByb2ZpbGVfc3BhY2UoMikgKyB0aWVyKDEpICsgaWRjKDUpICsgY29tcGF0WzAsMV0oMilcbmNvbnN0IFNMSUNFX1RZUEVfQiA9IDA7XG5jb25zdCBTTElDRV9UWVBFX1AgPSAxO1xuXG5mdW5jdGlvbiBzZXRCaXQoYnVmOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCB2YWx1ZTogMCB8IDEpOiB2b2lkIHtcbiAgY29uc3QgYnl0ZSA9IGJpdE9mZnNldCA+PiAzO1xuICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIChiaXRPZmZzZXQgJiA3KSk7XG4gIGNvbnN0IGN1ciA9IGJ1ZltieXRlXSA/PyAwO1xuICBidWZbYnl0ZV0gPSB2YWx1ZSA/IGN1ciB8IG1hc2sgOiBjdXIgJiB+bWFzaztcbn1cblxuZnVuY3Rpb24gcGF0Y2hQdGwobmFsRGF0YTogQnVmZmVyLCBwdGxTdGFydEJpdDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsRGF0YSk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9USUVSX0JJVCwgMCk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9DT01QQVQyX0JJVCwgMSk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHJic3ApO1xufVxuXG4vKiogUGF0Y2ggZXZlcnkgVlBTL1NQUyBOQUwgaW4gYW4gQW5uZXggQiBiaXRzdHJlYW0gc28gUFRMIG1hdGNoZXMgQXBwbGUveDI2NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEhldmNBbHBoYVB0bChiaXRzdHJlYW06IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbSk7XG4gIGlmIChuYWxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGJpdHN0cmVhbTtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBuYWxzKSB7XG4gICAgbGV0IGRhdGEgPSBuYWwuZGF0YTtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgVlBTX1BUTF9CSVQpO1xuICAgIGVsc2UgaWYgKG5hbC50eXBlID09PSBOQUxfU1BTKSBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFNQU19QVExfQklUKTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8vIOKUgOKUgOKUgCB1ZSh2KSByZXdyaXRlIGhlbHBlcnMgKFNQUy9QUFMg4oCUIFJCU1AgY2FuIGdyb3cgZnJlZWx5LCBubyBDQUJBQyB0cmFpbGluZykg4pSA4pSAXG5cbmZ1bmN0aW9uIHJld3JpdGVPbmVVZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbCk7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSBidy5iaXRzLnB1c2goMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVR3b1VlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWwxOiBudW1iZXIsIG5ld1ZhbDI6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbDEpO1xuICBidy51ZShuZXdWYWwyKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG4vKiogQWxwaGEgU1BTOiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTcHMoc3BzOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBTUFNfU0VRX0lEX0JJVCA9IFNQU19QVExfQklUICsgOTY7IC8vIFBUTCBpcyA5NiBiaXRzIGZvciBvdXIgcHJvZmlsZSBjb25maWdcbiAgcmV0dXJuIHJld3JpdGVPbmVVZShzcHMsIFNQU19TRVFfSURfQklULCAxKTtcbn1cblxuLyoqIEFscGhhIFBQUzogcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEsIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVBwcyhwcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiByZXdyaXRlVHdvVWUocHBzLCAxNiAvKiBhZnRlciBOQUwgaGVhZGVyICovLCAxLCAxKTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWNlIGhlYWRlciByZXdyaXRlIChtdXN0IHByZXNlcnZlIENBQkFDIGJ5dGUgYWxpZ25tZW50KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcmVhZFNlKGJyOiBCaXRSZWFkZXIpOiBudW1iZXIge1xuICBjb25zdCB1ZSA9IGJyLnJlYWRVZSgpO1xuICByZXR1cm4gdWUgJiAxID8gKHVlICsgMSkgPj4gMSA6IC0odWUgPj4gMSk7XG59XG5cbi8vIElubGluZSBzdF9yZWZfcGljX3NldCB3aGVuIHNsaWNlIGhhcyBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X3Nwc19mbGFnPTAuXG4vLyBzdFJwc0lkeCA9IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyBzbyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uIG1heSB1c2UgcHJldiBzZXQuXG5mdW5jdGlvbiBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyOiBCaXRSZWFkZXIsIG51bURlbHRhUG9jc1NldDA6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBpbnRlckZsYWcgPSBici5yZWFkKDEpOyAvLyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWdcbiAgaWYgKGludGVyRmxhZykge1xuICAgIGNvbnN0IGRlbHRhSWR4TWludXMxID0gYnIucmVhZFVlKCk7IC8vIHN0UnBzSWR4ID09IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgcHJlc2VudFxuICAgIGlmIChkZWx0YUlkeE1pbnVzMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBhcHBsZV9hbHBoYTogdW5leHBlY3RlZCBkZWx0YV9pZHhfbWludXMxPSR7ZGVsdGFJZHhNaW51czF9YCk7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVsdGFfcnBzX3NpZ25cbiAgICBici5yZWFkVWUoKTsgLy8gYWJzX2RlbHRhX3Jwc19taW51czFcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBudW1EZWx0YVBvY3NTZXQwOyBqKyspIHtcbiAgICAgIGNvbnN0IHVzZWQgPSBici5yZWFkKDEpO1xuICAgICAgaWYgKCF1c2VkKSBici5yZWFkKDEpOyAvLyB1c2VfZGVsdGFfZmxhZ1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICB9XG59XG5cbi8qKiBQYXJzZSBzbGljZV9zZWdtZW50X2hlYWRlciB1cCB0byBieXRlX2FsaWdubWVudC4gUmV0dXJucyBiaXQgcG9zaXRpb24gQiAoZW5kIG9mIGhlYWRlciBjb250ZW50KS4gKi9cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQoYnI6IEJpdFJlYWRlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IG51bWJlciB7XG4gIGJyLnJlYWQoMTYpOyAvLyBza2lwIE5BTCBoZWFkZXJcbiAgaWYgKGJyLnJlYWQoMSkgIT09IDEpIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBleHBlY3RlZCBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnPTFcIik7XG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSBici5yZWFkKDEpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIGJyLnJlYWRVZSgpOyAvLyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBzbGljZVR5cGUgPSBici5yZWFkVWUoKTtcbiAgaWYgKCFpc0lyYXApIHtcbiAgICBici5yZWFkKGNmZy5sb2cyTWF4UG9jTHNiKTsgLy8gc2xpY2VfcGljX29yZGVyX2NudF9sc2JcbiAgICBjb25zdCBzdFJlZlBpY1NldFNwc0ZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmICghc3RSZWZQaWNTZXRTcHNGbGFnKSBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyLCBjZmcubnVtRGVsdGFQb2NzU2V0MCk7XG4gICAgZWxzZSBpZiAoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMgPiAxKSBici5yZWFkKE1hdGguY2VpbChNYXRoLmxvZzIoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMpKSk7XG4gICAgaWYgKGNmZy5sb25nVGVybVJlZlBpY3NQcmVzZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogbG9uZ190ZXJtX3JlZl9waWNzIHBhdGggdW5pbXBsZW1lbnRlZFwiKTtcbiAgICBpZiAoY2ZnLnNwc1RlbXBvcmFsTXZwRW5hYmxlZCkgYnIucmVhZCgxKTsgLy8gc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZ1xuICB9XG4gIGlmIChjZmcuc2FvRW5hYmxlZCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19sdW1hX2ZsYWdcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fY2hyb21hX2ZsYWdcbiAgfVxuICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX1AgfHwgc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICBjb25zdCBvdmVycmlkZUZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmIChvdmVycmlkZUZsYWcpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSBici5yZWFkVWUoKTtcbiAgICB9XG4gICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSBici5yZWFkKDEpOyAvLyBtdmRfbDFfemVyb19mbGFnXG4gICAgaWYgKGNmZy5jYWJhY0luaXRQcmVzZW50KSBici5yZWFkKDEpOyAvLyBjYWJhY19pbml0X2ZsYWdcbiAgICBici5yZWFkVWUoKTsgLy8gZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmRcbiAgfVxuICByZWFkU2UoYnIpOyAvLyBzbGljZV9xcF9kZWx0YVxuICBpZiAoY2ZnLnBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnKSBici5yZWFkKDEpOyAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZ1xuICByZXR1cm4gYnIucG9zO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYWxwaGEgc2xpY2UgaGVhZGVyOiBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLlxuICogVGhlICsyLWJpdCBzaGlmdCBpcyBhYnNvcmJlZCBieSBlbWl0dGluZyBhIGZyZXNoIGJ5dGVfYWxpZ25tZW50IHRoZW4gYXBwZW5kaW5nIHRoZVxuICogb3JpZ2luYWwgQ0FCQUMgc2xpY2Vfc2VnbWVudF9kYXRhIGJ5dGVzIHZlcmJhdGltLiBDQUJBQyBieXRlIGJvdW5kYXJ5IGlzIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKHNsaWNlOiBCdWZmZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzbGljZSk7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcblxuICBjb25zdCBwcm9iZSA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IEIgPSBwYXJzZUhlYWRlclRvQWxpZ25tZW50KHByb2JlLCBuYWxUeXBlLCBjZmcpO1xuICBjb25zdCBvbGRBbGlnbkJpdHMgPSBCICUgOCA9PT0gMCA/IDggOiA4IC0gKEIgJSA4KTtcbiAgY29uc3Qgc2xpY2VEYXRhQnl0ZU9mZnNldCA9IChCICsgb2xkQWxpZ25CaXRzKSAvIDg7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZ1xuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG5cbiAgYnIucmVhZFVlKCk7IC8vIGRpc2NhcmQgb2xkIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJ3LnVlKDEpOyAvLyBuZXcgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcblxuICB3aGlsZSAoYnIucG9zIDwgQikgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBjb3B5IHJlc3Qgb2YgaGVhZGVyIGJpdHNcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIGJ5dGVfYWxpZ25tZW50OiByYnNwX2FsaWdubWVudF9iaXRfb25lXG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcblxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihCdWZmZXIuY29uY2F0KFtwYWNrQml0cyhidy5iaXRzKSwgcmJzcC5zdWJhcnJheShzbGljZURhdGFCeXRlT2Zmc2V0KV0pKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgYWRkRW11bGF0aW9uUHJldmVudGlvbiwgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiB9IGZyb20gXCIuL25hbFwiO1xuXG5pbnRlcmZhY2UgUGFyc2VkUFRMIHtcbiAgcHRsU3RhcnQ6IG51bWJlcjtcbiAgcHRsRW5kOiBudW1iZXI7XG4gIHB0bEJpdHM6IG51bWJlcltdO1xuICBtYXhTdWJMYXllcnNNaW51czE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBUTCh2cHNEYXRhOiBCdWZmZXIpOiBQYXJzZWRQVEwgfCB1bmRlZmluZWQge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbih2cHNEYXRhKSk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHZwc19pZFxuICBici5yZWFkKDIpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsICsgYXZhaWxhYmxlXG4gIGlmIChici5yZWFkKDYpID4gMCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICBjb25zdCBtYXhTdWJMYXllcnNNaW51czEgPSBici5yZWFkKDMpO1xuICBici5yZWFkKDEgKyAxNik7IC8vIHRlbXBvcmFsX25lc3RpbmcgKyByZXNlcnZlZFxuXG4gIGNvbnN0IHB0bFN0YXJ0ID0gYnIucG9zO1xuICBici5yZWFkKDk2KTsgLy8gZ2VuZXJhbCBQVEwgKHByb2ZpbGVfc3BhY2UgKyB0aWVyICsgaWRjICsgY29tcGF0ICsgY29uc3RyYWludHMgKyBsZXZlbClcbiAgaWYgKG1heFN1YkxheWVyc01pbnVzMSA+IDApIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICByZXR1cm4geyBwdGxTdGFydCwgcHRsRW5kOiBici5wb3MsIHB0bEJpdHM6IGJyLmJpdHMsIG1heFN1YkxheWVyc01pbnVzMSB9O1xufVxuXG4vKiogV3JpdGUgYmFzZSBWUFMgZmllbGRzIGZvciAyLWxheWVyIGFscGhhLiAqL1xuZnVuY3Rpb24gd3JpdGVCYXNlVlBTKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMKSB7XG4gIGJ3LncoMHg0MDAxLCAxNik7IC8vIE5BTCBoZWFkZXJcbiAgYncudygwLCA0KTsgLy8gdnBzX2lkXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWxcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9hdmFpbGFibGVcbiAgYncudygxLCA2KTsgLy8gbWF4X2xheWVyc19taW51czEgPSAxXG4gIGJ3LncocHRsLm1heFN1YkxheWVyc01pbnVzMSwgMyk7XG4gIC8vIHRlbXBvcmFsX25lc3Rpbmc6IHRydWUgd2hlbiBzaW5nbGUgc3ViLWxheWVyIChhbGwgcmVmcyBsYXllciAwKVxuICBidy5mbGFnKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPT09IDApO1xuICBidy53KDB4ZmZmZiwgMTYpOyAvLyByZXNlcnZlZFxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LmZsYWcoMSk7IC8vIHN1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgYncudWUoNCk7IC8vIG1heERlY1BpY0J1ZmZlcmluZyAtIDFcbiAgICBidy51ZSgyKTsgLy8gbnVtUmVvcmRlclBpY3NcbiAgICBidy51ZSg0KTsgLy8gbWF4TGF0ZW5jeUluY3JlYXNlICsgMVxuICB9XG5cbiAgYncudygxLCA2KTsgLy8gbWF4X251aF9sYXllcl9pZCA9IDFcbiAgYncudWUoMSk7IC8vIG51bV9sYXllcl9zZXRzX21pbnVzMSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMF1cbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMV1cbiAgYncuZmxhZygwKTsgLy8gdGltaW5nX2luZm9fcHJlc2VudFxuICBidy5mbGFnKDEpOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWdcbiAgYncuYWxpZ24oMSk7IC8vIGV4dGVuc2lvbiBhbGlnbm1lbnQgYml0cyA9IDFcbn1cblxuLyoqIFdyaXRlIFZQUyBleHRlbnNpb24gbWF0Y2hpbmcgeDI2NSA0LjEgRU5BQkxFX0FMUEhBLiAqL1xuZnVuY3Rpb24gd3JpdGVWUFNFeHRlbnNpb24oYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIC8vIEV4dGVuc2lvbiBQVEw6IGxldmVsX2lkYyBvbmx5IChwcm9maWxlUHJlc2VudEZsYWc9MClcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bEVuZCAtIDgsIDgpO1xuICBpZiAocHRsLm1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykgYncudygwLCAyKTtcbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykgYncudygwLCAyKTtcbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYncuZmxhZyhpID09PSAyIHx8IGkgPT09IDMpOyAvLyBzY2FsYWJpbGl0eTogc3BhdGlhbCArIGF1eFxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSByZXR1cm4gdnBzRGF0YTtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgcmV3cml0ZUFscGhhUHBzLCByZXdyaXRlQWxwaGFTbGljZUhlYWRlciwgcmV3cml0ZUFscGhhU3BzIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9TRUlfUFJFRklYLFxuICBOQUxfU1BTLFxuICBOQUxfUFBTLFxuICBOQUxfVlBTLFxuICB0eXBlIE5hbFVuaXQsXG4gIHJld3JpdGVOYWxMYXllcklkLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbi8vIEJHUkEgYWxwaGEg4oaSIFkgcGxhbmUgb2YgcGFja2VkIFlVVjQyMFAuIENhbGxlciBwcmUtZmlsbHMgVVY9MTI4LlxuLy8gVWludDMyIHBhdGg6IEJHUkEgTEUgdTMyID4+PiAyNCA9IEEgYnl0ZS5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lOiBGcmFtZSwgYnVmOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgaWYgKCFzcmMgfHwgIXNyY0xzKSB0aHJvdyBuZXcgRXJyb3IoXCJleHRyYWN0QWxwaGE6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgaWYgKHNyYy5ieXRlT2Zmc2V0ICUgNCA9PT0gMCAmJiBzcmNMcyA9PT0gdyAqIDQpIHtcbiAgICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgeVNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNpemU7IGkrKykgYnVmW2ldID0gc3JjMzJbaV0hID4+PiAyNDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgY29uc3Qgcm93QmFzZSA9IHkgKiBzcmNMcyArIDM7XG4gICAgICBjb25zdCBkc3RCYXNlID0geSAqIHc7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykgYnVmW2RzdEJhc2UgKyB4XSA9IHNyY1tyb3dCYXNlICsgeCAqIDRdITtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIEFwcGxlIEhFVkMgQWxwaGEgUHJvZmlsZTogYWxwaGEgU1BTIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZD0xLCBhbHBoYSBQUFMgcGljK3NlcSBpZD0xLlxuZnVuY3Rpb24gcmV3cml0ZUFscGhhUGFyYW1TZXQodHlwZTogbnVtYmVyLCBkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAodHlwZSA9PT0gTkFMX1NQUykgcmV0dXJuIHJld3JpdGVBbHBoYVNwcyhkYXRhKTtcbiAgaWYgKHR5cGUgPT09IE5BTF9QUFMpIHJldHVybiByZXdyaXRlQWxwaGFQcHMoZGF0YSk7XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykgY29udGludWU7XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gTkFMX1ZQUyA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjb25zdCBhRGF0YSA9IHJld3JpdGVBbHBoYVBhcmFtU2V0KG5hbC50eXBlLCBhbHBoYU5hbC5kYXRhKTtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhRGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfU0VJX1BSRUZJWCwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9O1xuXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jYW5jZWxfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfdXNlX2lkYyAoMCA9IHVuc3BlY2lmaWVkL3ByZW11bHRpcGxpZWQ7IG1hdGNoZXMgeDI2NSBFTkFCTEVfQUxQSEEpXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB3cml0ZUJpdHMoMCwgMSk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCBOQUxfVlBTKSB7XG4gICAgICBjb25zdCBkYXRhID0gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIobmFsLmRhdGEsIG5hbC50eXBlLCBjZmcpO1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChkYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEx1IEFvIChsdWFvQGJpbGliaWxpLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GLCB0eXBlIEFWUGFja2V0RmxhZyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHsgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgUGVuZGluZ1BhY2tldCB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgcHRzOiBiaWdpbnQ7XG4gIGR0czogYmlnaW50O1xuICBkdXJhdGlvbjogYmlnaW50O1xuICBmbGFnczogQVZQYWNrZXRGbGFnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1YWxMYXllck11eE9wdGlvbnMge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuLy8gRHJhaW5zIHRoZSBiYXNlICsgYWxwaGEgTlZFTkMgc2Vzc2lvbnMgYW5kIHdyaXRlcyBpbnRlcmxlYXZlZCBIRVZDLWFscGhhIGFjY2VzcyB1bml0cy5cbmV4cG9ydCBjbGFzcyBEdWFsTGF5ZXJNdXgge1xuICBwcml2YXRlIF9zOiBEdWFsTGF5ZXJNdXhPcHRpb25zO1xuICBwcml2YXRlIF9iYXNlUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICBwcml2YXRlIF9hbHBoYVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzOiBEdWFsTGF5ZXJNdXhPcHRpb25zKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCB9ID0gdGhpcy5fcztcbiAgICAvLyBEcmFpbiBlYWNoIHNlc3Npb24gZnVsbHkg4oCUIGluZGVwZW5kZW50IE5WRU5DIHNlc3Npb25zIHJ1biBhIGZyYW1lIGFwYXJ0IHRyYW5zaWVudGx5LlxuICAgIHRoaXMuX2Jhc2VRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYmFzZUN0eCwgYmFzZVBrdCwgXCJiYXNlXCIpKSk7XG4gICAgdGhpcy5fYWxwaGFRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYWxwaGFDdHgsIGFscGhhUGt0LCBcImFscGhhXCIpKSk7XG4gICAgLy8gYmY9MCDihpIgbm8gcmVvcmRlcjsgcXVldWUgaW5kZXggTiBpcyB0aGUgc2FtZSBmcmFtZSBmb3IgYm90aC4gTGVmdG92ZXIgd2FpdHMgZm9yIG5leHQgZHJhaW4uXG4gICAgd2hpbGUgKHRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGVQYWlyKHRoaXMuX2Jhc2VRdWV1ZS5zaGlmdCgpISwgdGhpcy5fYWxwaGFRdWV1ZS5zaGlmdCgpISwgbXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVucGFpcmVkIGxlZnRvdmVycyBhZnRlciBFT0YgPSB0cnVlIGJhc2UvYWxwaGEgZGVzeW5jOyByZXR1cm5zIGEgZGVzY3JpcHRpb24sIGVsc2UgdW5kZWZpbmVkLlxuICBkZXN5bmNBZnRlckVvZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiAhdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGBiYXNlPSR7dGhpcy5fYmFzZVF1ZXVlLmxlbmd0aH0sIGFscGhhPSR7dGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGh9IHVucGFpcmVkYDtcbiAgfVxuXG4gIC8vIEVBR0FJTi9FT0YgPSBub3JtYWwgc3RvcDsgYW55IG90aGVyIG5lZ2F0aXZlIGlzIGEgcmVhbCBmYXVsdCwgbm90IFwiZHJhaW5lZFwiLlxuICBwcml2YXRlIGFzeW5jIHJlY2VpdmVBbGwoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ1BhY2tldFtdPiB7XG4gICAgY29uc3Qgb3V0OiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgIGlmIChyZXQgPj0gMCkge1xuICAgICAgICBvdXQucHVzaCh0aGlzLnNuYXBzaG90KHBrdCkpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmV0ID09PSBBVkVSUk9SX0VBR0FJTiB8fCByZXQgPT09IEFWRVJST1JfRU9GKSByZXR1cm4gb3V0O1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5yZWNlaXZlUGFja2V0YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbmFwc2hvdChwa3Q6IFBhY2tldCk6IFBlbmRpbmdQYWNrZXQge1xuICAgIC8vIHBrdC5kYXRhIGlzIG5hdGl2ZSBtZW1vcnkgZnJlZWQgb24gdW5yZWYg4oCUIGNvcHkgYmVmb3JlIHF1ZXVlaW5nLlxuICAgIHJldHVybiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHBrdC5kYXRhISksIHB0czogcGt0LnB0cywgZHRzOiBwa3QuZHRzLCBkdXJhdGlvbjogcGt0LmR1cmF0aW9uLCBmbGFnczogcGt0LmZsYWdzIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlUGFpcihiYXNlOiBQZW5kaW5nUGFja2V0LCBhbHBoYTogUGVuZGluZ1BhY2tldCwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBiYXNlQ3R4LCBzdHJlYW0sIGhldmNDZmcgfSA9IHRoaXMuX3M7XG4gICAgLy8gUGF0Y2ggaW4tYmFuZCBWUFMvU1BTIFBUTCBiaXRzIGZvciBBcHBsZS1WVEIgY29tcGF0IChlbmNvZGVyIHJlcGVhdHMgaGVhZGVycyBwZXIgSURSKS5cbiAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmVBY2Nlc3NVbml0cyhzcGxpdE5hbFVuaXRzKGJhc2UuZGF0YSksIHNwbGl0TmFsVW5pdHMoYWxwaGEuZGF0YSksIGhldmNDZmcpO1xuICAgIC8vIGRhdGEgc2V0dGVyIHdpcGVzIHB0cy9kdHMvZHVyYXRpb24vZmxhZ3Mg4oCUIHJlc3RvcmU7IGZsYWdzJyBLRVkgYml0IGRyaXZlcyBtb3Ygc3Rzcy5cbiAgICBiYXNlUGt0LmRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bChpbnRlcmxlYXZlZCk7XG4gICAgYmFzZVBrdC5wdHMgPSBiYXNlLnB0cztcbiAgICBiYXNlUGt0LmR0cyA9IGJhc2UuZHRzO1xuICAgIGJhc2VQa3QuZHVyYXRpb24gPSBiYXNlLmR1cmF0aW9uID09PSAwbiA/IDFuIDogYmFzZS5kdXJhdGlvbjtcbiAgICBiYXNlUGt0LmZsYWdzID0gYmFzZS5mbGFncztcbiAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG4gICAgYmFzZVBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBQYXJzZSBOVkVOQyBTUFMvUFBTIGV4dHJhZGF0YSBhdCBlbmNvZGVyIGluaXQgdG8gZGVyaXZlIGZsYWdzIHRoZSBzbGljZSBoZWFkZXIgcGFyc2VyIGRlcGVuZHMgb24uXG4vLyBEZWZ1c2VzIGZyYWdpbGUgaGFyZGNvZGVkIGFzc3VtcHRpb25zOiBpZiBOVkVOQyBkZWZhdWx0cyBzaGlmdCwgdGhyb3dzIHdpdGggYWN0aW9uYWJsZSBlcnJvci5cblxuaW1wb3J0IHsgQml0UmVhZGVyIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBOQUxfUFBTLCBOQUxfU1BTLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnZlbmNIZXZjQ29uZmlnIHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuO1xuICBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZmFpbChmaWVsZDogc3RyaW5nLCBnb3Q6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgaGV2Y19hbHBoYTogTlZFTkMgU1BTL1BQUyB1bnN1cHBvcnRlZDogJHtmaWVsZH09JHtnb3R9LCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xufVxuXG5mdW5jdGlvbiBza2lwUHRsKGJyOiBCaXRSZWFkZXIsIG1heFN1YkxheWVyczogbnVtYmVyKTogdm9pZCB7XG4gIGJyLnJlYWQoMiArIDEgKyA1KTsgLy8gcHJvZmlsZV9zcGFjZSwgdGllciwgcHJvZmlsZV9pZGNcbiAgYnIucmVhZCgzMik7IC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnWzAuLjMxXVxuICBici5yZWFkKDQ4KTsgLy8gNCBzb3VyY2UvcGFja2VkIGZsYWdzICsgNDMgY29uc3RyYWludC9yZXNlcnZlZCArIDEgaW5ibGRcbiAgYnIucmVhZCg4KTsgLy8gbGV2ZWxfaWRjXG4gIGNvbnN0IHN1YlByb2ZpbGVQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBzdWJMZXZlbFByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBzdWJQcm9maWxlUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICAgIHN1YkxldmVsUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGlmIChtYXhTdWJMYXllcnMgPiAwKSBmb3IgKGxldCBpID0gbWF4U3ViTGF5ZXJzOyBpIDwgODsgaSsrKSBici5yZWFkKDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgaWYgKHN1YlByb2ZpbGVQcmVzZW50W2ldKSBici5yZWFkKDggKyAzMiArIDQ4KTtcbiAgICBpZiAoc3ViTGV2ZWxQcmVzZW50W2ldKSBici5yZWFkKDgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3BzKHNwc1Jic3A6IEJ1ZmZlcik6IHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xufSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihzcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgbWF4U3ViTGF5ZXJzID0gYnIucmVhZCgzKTtcbiAgLy8gYWxwaGFfZGFyd2luLnJld3JpdGVBbHBoYVNwcyArIHZwcy5leHRyYWN0UFRMIGhhcmRjb2RlIDk2LWJpdCBQVEwg4oCUIG9ubHkgdmFsaWQgd2hlbiBzdWJfbGF5ZXJzPTAuXG4gIGlmIChtYXhTdWJMYXllcnMgIT09IDApIGZhaWwoXCJzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxXCIsIG1heFN1YkxheWVycywgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBzcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnXG4gIHNraXBQdGwoYnIsIG1heFN1YkxheWVycyk7XG4gIGJyLnJlYWRVZSgpOyAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgY2hyb21hRm9ybWF0ID0gYnIucmVhZFVlKCk7XG4gIGlmIChjaHJvbWFGb3JtYXQgPT09IDMpIGZhaWwoXCJjaHJvbWFfZm9ybWF0X2lkY1wiLCBjaHJvbWFGb3JtYXQsIFwi4omgM1wiKTtcbiAgYnIucmVhZFVlKCk7IC8vIHBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXNcbiAgYnIucmVhZFVlKCk7IC8vIHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgY29uc3QgbG9nMk1heFBvY0xzYiA9IGJyLnJlYWRVZSgpICsgNDtcbiAgY29uc3Qgc3ViT3JkZXJJbmZvID0gYnIucmVhZCgxKTtcbiAgY29uc3Qgb3JkZXJDb3VudCA9IHN1Yk9yZGVySW5mbyA/IG1heFN1YkxheWVycyArIDEgOiAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyQ291bnQ7IGkrKykge1xuICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgaWYgKGJyLnJlYWQoMSkpIGZhaWwoXCJzY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gYW1wX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBzYW9FbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGJyLnJlYWQoMSkpIGZhaWwoXCJwY21fZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgY29uc3QgbnVtU3RScHMgPSBici5yZWFkVWUoKTtcbiAgaWYgKG51bVN0UnBzID4gMSkgZmFpbChcIm51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0c1wiLCBudW1TdFJwcywgXCLiiaQxXCIpO1xuICBsZXQgbnVtRGVsdGFQb2NzU2V0MCA9IDA7XG4gIGlmIChudW1TdFJwcyA9PT0gMSkge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIG51bURlbHRhUG9jc1NldDAgPSBudW1OZWcgKyBudW1Qb3M7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgfVxuICBjb25zdCBsb25nVGVybVJlZlBpY3NQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIGZhaWwoXCJsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgY29uc3Qgc3BzVGVtcG9yYWxNdnBFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgcmV0dXJuIHsgbG9nMk1heFBvY0xzYiwgc2FvRW5hYmxlZCwgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtU3RScHMsIG51bURlbHRhUG9jc1NldDAsIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQsIHNwc1RlbXBvcmFsTXZwRW5hYmxlZCB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVBwcyhwcHNSYnNwOiBCdWZmZXIpOiB7IGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuIH0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocHBzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkKDEpOyAvLyBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIG91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZ1xuICBjb25zdCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cyA9IGJyLnJlYWQoMyk7XG4gIGlmIChudW1FeHRyYVNsaWNlSGVhZGVyQml0cyAhPT0gMCkgZmFpbChcIm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0c1wiLCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cywgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBzaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBjYWJhY0luaXRQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBpbml0X3FwX21pbnVzMjYgKHNlLCBidXQgdWUgcGFyc2VyIGZpbmUgdG8gYWR2YW5jZSlcbiAgYnIucmVhZCgxKTsgLy8gY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkgYnIucmVhZFVlKCk7IC8vIGN1X3FwX2RlbHRhX2VuYWJsZWQg4oaSIGRpZmZfY3VfcXBfZGVsdGFfZGVwdGhcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jYl9xcF9vZmZzZXRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jcl9xcF9vZmZzZXRcbiAgYnIucmVhZCgxKTsgLy8gcHBzX3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfYmlwcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwidGlsZXNfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWdcbiAgY29uc3QgcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBjb25zdCBkZWJsb2NraW5nQ29udHJvbFByZXNlbnQgPSBici5yZWFkKDEpO1xuICBsZXQgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGZhbHNlO1xuICBpZiAoZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50KSB7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnXG4gICAgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGJyLnJlYWQoMSkgPT09IDE7IC8vIHBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnXG4gICAgaWYgKCFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlKSB7XG4gICAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IC8vIGJldGEvdGMgb2Zmc2V0cyAoc2UgdmlhIHVlIGFkdmFuY2UpXG4gICAgfVxuICB9XG4gIC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIGluIHNsaWNlIGhlYWRlciBpcyBwcmVzZW50IGlmZlxuICAvLyBwcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgJiYgIXNsaWNlX2RlYmxvY2tpbmdfZGlzYWJsZWQuXG4gIGNvbnN0IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnID0gcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgJiYgIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGU7XG4gIHJldHVybiB7IGNhYmFjSW5pdFByZXNlbnQsIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhleHRyYWRhdGE6IEJ1ZmZlcik6IE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGV4dHJhZGF0YSk7XG4gIGNvbnN0IHNwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfU1BTKTtcbiAgY29uc3QgcHBzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9QUFMpO1xuICBpZiAoIXNwcykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogU1BTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICBpZiAoIXBwcykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogUFBTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICBjb25zdCBzID0gcGFyc2VTcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzcHMuZGF0YSkpO1xuICBjb25zdCBwID0gcGFyc2VQcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihwcHMuZGF0YSkpO1xuICByZXR1cm4geyAuLi5zLCAuLi5wIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuLi92aWRlb3Rvb2xib3hcIjtcbmltcG9ydCB7IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSwgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBEdWFsTGF5ZXJNdXggfSBmcm9tIFwiLi9kdWFsX2xheWVyX211eFwiO1xuaW1wb3J0IHsgdHlwZSBOdmVuY0hldmNDb25maWcsIHBhcnNlTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBhbHBoYVN3RnJhbWU6IEZyYW1lO1xuICBhbHBoYUJ1ZjogQnVmZmVyO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBOdmVuY0R1YWxMYXllckVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogTnZlbmNTdGF0ZTtcbiAgcHJpdmF0ZSBfbXV4OiBEdWFsTGF5ZXJNdXg7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogTnZlbmNTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICAgIHRoaXMuX211eCA9IG5ldyBEdWFsTGF5ZXJNdXgoe1xuICAgICAgYmFzZUN0eDogcy5iYXNlQ3R4LFxuICAgICAgYWxwaGFDdHg6IHMuYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0OiBzLmJhc2VQa3QsXG4gICAgICBhbHBoYVBrdDogcy5hbHBoYVBrdCxcbiAgICAgIHN0cmVhbTogcy5zdHJlYW0sXG4gICAgICBoZXZjQ2ZnOiBzLmhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICAvLyB0aWVyPW1haW4gbWF0Y2hlcyBBcHBsZSBWaWRlb1Rvb2xib3g7IG1hY09TIENocm9tZSByZXF1aXJlcyBNYWluIHRpZXIgZm9yIEhFVkMgYWxwaGEgZGVjb2RlLlxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiwgdGllcjogXCJtYWluXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IOKAlCBOVkVOQyBjb252ZXJ0cyBpbnRlcm5hbGx5LCBubyBDUFUgU1dTLCBubyBod0ZyYW1lc0N0eCBuZWVkZWQuXG4gICAgY29uc3QgYmFzZUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIik7XG5cbiAgICBsZXQgYWxwaGFDdHg6IENvZGVjQ29udGV4dCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYmFzZVBrdDogUGFja2V0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBhbHBoYVBrdDogUGFja2V0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBhbHBoYVN3RnJhbWU6IEZyYW1lIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBhbHBoYUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9LCBcIm52ZW5jLmFscGhhLm9wZW4yXCIpO1xuXG4gICAgICBpZiAoIWJhc2VDdHguZXh0cmFEYXRhIHx8ICFhbHBoYUN0eC5leHRyYURhdGEpIHRocm93IG5ldyBFcnJvcihcIm52ZW5jOiBjb2RlYyBleHRyYWRhdGEgbWlzc2luZ1wiKTtcbiAgICAgIGNvbnN0IGhldmNDZmcgPSBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhiYXNlQ3R4LmV4dHJhRGF0YSk7XG5cbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgICBjb25zdCB1bmlmaWVkID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUN0eC5leHRyYURhdGEsXG4gICAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICB9KTtcbiAgICAgIC8vIEFwcGxlLVZUQiBjb21wYXQ6IHJld3JpdGUgVlBTK1NQUyBQVEwgYml0cyB0byBtYXRjaCB4MjY1L1ZUQiBvdXRwdXQgKHRpZXI9TWFpbiwgY29tcGF0WzJdPTEpLlxuICAgICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKHVuaWZpZWQpO1xuXG4gICAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgICAgLy8gWVVWNDIwUCBjaHJvbWEgcGxhbmVzIGFyZSBjZWlsKHcvMinDl2NlaWwoaC8yKTsgZmxvb3IgdW5kZXJmbG93cyBvbiBvZGQgZGltZW5zaW9ucy5cbiAgICAgIGNvbnN0IGNocm9tYVNpemUgPSAoKHdpZHRoICsgMSkgPj4gMSkgKiAoKGhlaWdodCArIDEpID4+IDEpO1xuICAgICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyBjaHJvbWFTaXplICogMik7XG4gICAgICBhbHBoYUJ1Zi5maWxsKDEyOCwgeVNpemUpO1xuXG4gICAgICBiYXNlUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgYWxwaGFQa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICBhbHBoYVN3RnJhbWUgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKTtcblxuICAgICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgICBiYXNlQ3R4LFxuICAgICAgICBhbHBoYUN0eCxcbiAgICAgICAgYmFzZVBrdCxcbiAgICAgICAgYWxwaGFQa3QsXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgYWxwaGFTd0ZyYW1lLFxuICAgICAgICBhbHBoYUJ1ZixcbiAgICAgICAgaGV2Y0NmZyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFBhcnRpYWwgY29uc3RydWN0aW9uOiBlbmNvZGVyIG5ldmVyIHJldHVybmVkLCBzbyBbU3ltYm9sLmRpc3Bvc2VdIGlzIHVucmVhY2hhYmxlLlxuICAgICAgYmFzZVBrdD8uZnJlZSgpO1xuICAgICAgYWxwaGFQa3Q/LmZyZWUoKTtcbiAgICAgIGFscGhhU3dGcmFtZT8uZnJlZSgpO1xuICAgICAgYWxwaGFDdHg/LmZyZWVDb250ZXh0KCk7XG4gICAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUsIGFscGhhQnVmIH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuX3B0cysrO1xuXG4gICAgLy8gRXh0cmFjdCB0aGUgYWxwaGEgcGxhbmUgYmVmb3JlIGJhc2Uuc2VuZEZyYW1lIOKAlCB0aGUgZW5jb2RlciB1bnJlZnMgdGhlIGlucHV0IGZyYW1lLlxuICAgIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWUsIGFscGhhQnVmKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLm1ha2VXcml0YWJsZSgpLCBcImFscGhhU3cubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUuZnJvbUJ1ZmZlcihhbHBoYUJ1ZiksIFwiYWxwaGFTdy5mcm9tQnVmZmVyXCIpO1xuICAgIGFscGhhU3dGcmFtZS5wdHMgPSBwdHM7XG4gICAgYWxwaGFTd0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYmFzZUN0eCwgXCJiYXNlXCIpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmFscGhhQ3R4LCBcImFscGhhXCIpO1xuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gICAgY29uc3QgZGVzeW5jID0gdGhpcy5fbXV4LmRlc3luY0FmdGVyRW9mKCk7XG4gICAgaWYgKGRlc3luYykgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6ICR7ZGVzeW5jfWApO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCB3aGVuIE5WRU5DIHNlc3Npb25zIGZyZWVkIGluIGNyZWF0aW9uIG9yZGVyLlxuICAgIC8vIExJRk8gZGVzdHJveSBhdm9pZHMgdGhlIHNlZ2ZhdWx0LiBQZXIgTlZJRElBIGZvcnVtIC90LzI2OTk3NC5cbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIC8vIEVPRiBmbHVzaDsgRUFHQUlOL0VPRiByZXR1cm5zIGFyZSBiZW5pZ24gKGFscmVhZHktZHJhaW5pbmcgZW5jb2RlcikuXG4gIHByaXZhdGUgYXN5bmMgc2VuZEVvZihjdHg6IENvZGVjQ29udGV4dCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXQgPSBhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGlmIChyZXQgPCAwICYmIHJldCAhPT0gQVZFUlJPUl9FQUdBSU4gJiYgcmV0ICE9PSBBVkVSUk9SX0VPRikge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5zZW5kRnJhbWUobnVsbClgKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGxldCBwa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgICAgcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFBhcnRpYWwgY29uc3RydWN0aW9uOiBlbmNvZGVyIG5ldmVyIHJldHVybmVkLCBzbyBbU3ltYm9sLmRpc3Bvc2VdIGlzIHVucmVhY2hhYmxlLlxuICAgICAgcGt0Py5mcmVlKCk7XG4gICAgICBjdHguZnJlZUNvbnRleHQoKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIERpY3Rpb25hcnksIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICAvLyArZmFzdHN0YXJ0IHJlbG9jYXRlcyBtb292IHRvIGZpbGUgZnJvbnQgb24gd3JpdGVUcmFpbGVyIHNvIHBsYXllcnMgY2FuIGJlZ2luIHBsYXliYWNrIGJlZm9yZSBmdWxsIGRvd25sb2FkLlxuICAgIHVzaW5nIG9wdHMgPSBEaWN0aW9uYXJ5LmZyb21PYmplY3QoeyBtb3ZmbGFnczogXCIrZmFzdHN0YXJ0XCIgfSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihvcHRzKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZEICsgbmF0aXZlIGNvbnRleHQuXG4gICAgICBhd2FpdCB0aGlzLl9jdHguY2xvc2VPdXRwdXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yNC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgRkZfRU5DT0RFUl9BQUMsXG4gIEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgdHlwZSBGRlZpZGVvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVId1ZpZGVvRW5jb2RlciwgdHlwZSBId0VuY29kZXIsIHR5cGUgVmlkZW9TZXR1cCB9IGZyb20gXCIuL2ZhY3RvcnlcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbi8vIG5vZGUtYXYgNS4yLjMgY29uc3RhbnQgaXMgd3Jvbmc7IGZmbXBlZyByZWdpc3RlcnMgd2l0aCBkYXNoLlxuY29uc3QgRkZfRU5DT0RFUl9MSUJWUFhfVlA5ID0gXCJsaWJ2cHgtdnA5XCIgYXMgRkZWaWRlb0VuY29kZXI7XG5cbmV4cG9ydCB0eXBlIFNpbmtLaW5kID0gXCJtcDRcIiB8IFwid2VibVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmtPcHRpb25zIHtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBraW5kOiBTaW5rS2luZDtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICB3aXRoQXVkaW86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjOiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuaW50ZXJmYWNlIFNpbmtTdGF0ZSB7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGF1ZGlvPzogQXVkaW9FbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIG93bnNIdzogYm9vbGVhbjtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG9wdHM6IFNpbmtPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgT3V0cHV0U2luayBpbXBsZW1lbnRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IFNpbmtTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFNpbmtTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGtpbmRGcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBTaW5rS2luZCB7XG4gICAgY29uc3QgbG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLndlYm1cIikpIHJldHVybiBcIndlYm1cIjtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIubXA0XCIpIHx8IGxvd2VyLmVuZHNXaXRoKFwiLm1vdlwiKSkgcmV0dXJuIFwibXA0XCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgY29uc3QgbXV4ZXIgPSBuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKTtcbiAgICBjb25zdCB2aWRlbyA9IG9wdHMua2luZCA9PT0gXCJtcDRcIiA/IGF3YWl0IHRoaXMubXA0VmlkZW8ob3B0cywgbXV4ZXIpIDogYXdhaXQgdGhpcy53ZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGNvbnN0IGF1ZGlvID0gb3B0cy53aXRoQXVkaW8gPyBhd2FpdCB0aGlzLmF1ZGlvRm9yKG9wdHMsIG11eGVyKSA6IHVuZGVmaW5lZDtcbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXRTaW5rKHsgbXV4ZXIsIC4uLnZpZGVvLCBhdWRpbywgb3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHsgZGVhZGxpbmU6IFwicmVhbHRpbWVcIiwgXCJjcHUtdXNlZFwiOiBcIjhcIiwgXCJyb3ctbXRcIjogXCIxXCIsIHRocmVhZHM6IFwiMlwiIH0sXG4gICAgICBiaXRyYXRlOiA0XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHZpZGVvLCBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksIG93bnNIdzogZmFsc2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGF1ZGlvRm9yKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIC8vIE9wdXMgcmVqZWN0cyA0NC4xay5cbiAgICBjb25zdCBjZmcgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiXG4gICAgICAgID8geyBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLCBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDIH1cbiAgICAgICAgOiB7IG91dFNhbXBsZVJhdGU6IDQ4XzAwMCwgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVCwgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQk9QVVMgfTtcbiAgICByZXR1cm4gQXVkaW9FbmNvZGVyLmNyZWF0ZSh7IC4uLmNmZywgZ2xvYmFsSGVhZGVyOiB0cnVlLCBiaXRyYXRlOiAxMjhfMDAwLCBtdXhlciB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoYmdyYUZyYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZURlY29kZWRGcmFtZShzcmM6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKHNyYywgbXV4ZXIpO1xuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKHNyYyk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYXVkaW8/LmVuY29kZShwY20sIHRoaXMuX3MubXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgYXVkaW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgaWYgKGh3VmlkZW8pIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgIGVsc2UgYXdhaXQgdmlkZW8hLmZsdXNoKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSBodz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzd0VuY29kZShzcmM6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB2aWRlbywgY29kZWMsIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIG9rKGNvZGVjPy5zd3MsIFwic3dzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY29kZWMuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInNpbmtEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjb2RlYy5zd3Muc2NhbGVGcmFtZShjb2RlYy5kc3QsIHNyYyksIFwic2lua1N3cy5zY2FsZUZyYW1lXCIpO1xuICAgIGF3YWl0IHZpZGVvIS5lbmNvZGUoY29kZWMuZHN0LCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbyA9IGZhbHNlLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlIH0gPSBvcHRzO1xuICAgIGNvbnN0IG91dEZpbGVzID0gb3V0RmlsZVxuICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgLm1hcCgocCkgPT4gcC50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChvdXRGaWxlcy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIm91dEZpbGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIGNvbnN0IHNoYXJlZEh3ID0gbmVlZHNNcDRIdyA/IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBFbmNvZGVyUGlwZWxpbmUoeyBzaW5rcywgc2hhcmVkSHcsIGxpbWl0ZXI6IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMSksIG91dEZpbGVzLCBvcHRzIH0pO1xuICB9XG5cbiAgc2V0dXBBdWRpbyhzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgc2luay5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zLnNpbmtzLm1hcCgoc2luaykgPT4gc2luay5lbmNvZGVCR1JBKGZyYW1lKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3Mub3B0cztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5lbmNvZGVEZWNvZGVkRnJhbWUoc3JjKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmtbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICBjb25zdCBmcmFtZSA9IG1ha2VGcmFtZSh0aGlzLl9zLm9wdHMud2lkdGgsIHRoaXMuX3Mub3B0cy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmZyb21CdWZmZXIoaW5wdXQpLCBcImJncmFGcmFtZS5mcm9tQnVmZmVyXCIpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMy5cblxuLyoqXG4gKiBGcmFtZSBkcm9wIHF1YWxpdHkgc2NvcmUgKDAgPSBwZXJmZWN0LCAxID0gd29yc3QpLlxuICpcbiAqIENvbWJpbmVzIHR3byBkaW1lbnNpb25zOlxuICogLSBHbG9iYWw6IG92ZXJhbGwgZHJvcCByYXRlIGFjcm9zcyB0aGUgdGltZWxpbmVcbiAqIC0gTG9jYWw6IHBlcmNlcHR1YWwgc2V2ZXJpdHkgb2YgY29uc2VjdXRpdmUgZHJvcHMgKGJ1cnN0cylcbiAqXG4gKiBVc2VzIGNvbXBsZW1lbnRhcnkgbXVsdGlwbGljYXRpb246IHNjb3JlID0gMSAtICgxLWcpKDEtbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcmFtZURyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gdGhlIGVuY29kZXIuICovXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGRyb3BwZWQuICovXG4gIGRyb3BwZWQoY291bnQgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudEJ1cnN0ICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIEZpbmFsaXplIGFuZCByZXR1cm4gdGhlIHNjb3JlLiAqL1xuICBmaW5hbGl6ZSgpOiBGcmFtZURyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVFcXVhbHMoYTogU2l6ZSwgYjogU2l6ZSkge1xuICByZXR1cm4gYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgeyB0eXBlIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgd2MuaXBjLm9uKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgd2MuaXBjLm9uKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBXaGVuIHByb3ZpZGVkLCB1c2VSZXRyeSBiYWlscyBvdXQgaW1tZWRpYXRlbHkgb24gYWJvcnQgaW5zdGVhZCBvZiByZXRyeWluZy4gVGhlIHNpZ25hbFxuICAvLyBpcyBub3QgYXV0by10aHJlYWRlZCBpbnRvIGZuIOKAlCBjYWxsZXIgbXVzdCB3aXJlIGl0IHdoZXJlIGl0IG1hdHRlcnMgKGUuZy4gZmV0Y2gsIFMzIHNlbmQpLlxuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0Pih7IGZuLCBtYXhBdHRlbXB0cyA9IDMsIHRpbWVvdXQsIHNpZ25hbCB9OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiBBcmdzKSB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNPVVJDRV9QQVRURVJOLnRlc3Qoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3RvY29sID0gc291cmNlLnNwbGl0KFwiOlwiKVswXSArIFwiOlwiO1xuICBjb25zdCBtZXNzYWdlID0gU1VQUE9SVEVEX1BST1RPQ09MUy5pbmNsdWRlcyhwcm90b2NvbClcbiAgICA/IGB1bnN1cHBvcnRlZCBwcm90b2NvbDogJHtwcm90b2NvbH0sIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YFxuICAgIDogYGludmFsaWQgc291cmNlIGZvcm1hdCwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gO1xuXG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSBcInVybFwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sIC8vXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSB9OiBOZXR3b3JrT3B0aW9ucykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICBjb25zdCBsaW1pdGVyID0gbmV3IENvbmN1cnJlbmN5TGltaXRlcigyNTYpO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnQud2FpdCh7IHRpbWVvdXQ6IDVfMDAwLCBvblRpbWVvdXQgfSkuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIGBlcnJvcjpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIGVycm9yOiBkZXRhaWxzLmVycm9yLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uLCB0b2xlcmFudCwgc2lnbmFsIH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKFRJTUVPVVRfRVJST1IpLCAxMF8wMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG4gICAgICBlbHNlIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBkb25lKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkb20tcmVhZHk6XCIsIHsgc291cmNlIH0pO1xuICAgICAgaWYgKHRvbGVyYW50KSBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IChjbGVhclRpbWVvdXQodGltZXIpLCByZXNvbHZlKCkpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuZGV0YWNoKCk7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgZG9uZSk7XG4gICAgd2luLmNsb3NlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgdHlwZSBXaW5kb3dDcmVhdGVkQ2FsbGJhY2sgPSAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHByZWxvYWQ/OiBzdHJpbmc7XG4gIG9uQ3JlYXRlZD86IFdpbmRvd0NyZWF0ZWRDYWxsYmFjaztcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coe1xuICBzb3VyY2UsXG4gIHJlbmRlcmVyLFxuICB0b2xlcmFudCxcbiAgcHJlbG9hZCxcbiAgc2lnbmFsLFxuICBvbkNyZWF0ZWQsXG59OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQsXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3c6IHdpbiwgdXNlSW5uZXJQcm94eSB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIG1lc3NhZ2Uuc3RhcnRzV2l0aChgJWNFbGVjdHJvbiBTZWN1cml0eSBXYXJuaW5nYCkpIHJldHVybjtcbiAgICByZW5kZXJlci5vbkNvbnNvbGUobGV2ZWwsIG1lc3NhZ2UpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGNyZWF0ZVN0ZWdvVVJMKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uOiAoKSA9PiB3aW4ubG9hZFVSTCh1cmwpLCB0b2xlcmFudCwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5jb25zdCBvcGVuV2luZG93V2l0aFJldHJ5ID0gdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHtcbiAgc291cmNlLFxuICByZW5kZXJlcixcbiAgcHJlbG9hZCxcbiAgb25DcmVhdGVkLFxuICBzaWduYWwsXG59OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHByZWxvYWQsIG9uQ3JlYXRlZCwgc2lnbmFsLCB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQgfSk7XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlLCB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBwdXBBdWRpb1ByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IEZyYW1lRHJvcFN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvZnJhbWVfZHJvcFwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBhdHRhY2hBdWRpb0xpc3RlbmVycywgdHlwZSBBdWRpb0Rpc3Bvc2FsIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN0YXJ0U3RlZ28gfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZW5kZXJdXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXIob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IEZyYW1lRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGRpc3Bvc2VBdWRpbzogQXVkaW9EaXNwb3NhbCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgZW5jb2RlRXJyb3IgPz89IHNpZ25hbD8ucmVhc29uO1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVjb2RlIHN0ZWdvIHRpbWVzdGFtcCBmcm9tIHRoZSBib3R0b20gcGl4ZWwgcm93IHdpdGhvdXQgZnVsbCBiaXRtYXAgY29weVxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlU2l6ZSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTa2lwIGZyYW1lcyB0aGF0IGFycml2ZSB0b28gc29vbiAoPCA4MCUgb2YgZnJhbWUgaW50ZXJ2YWwpXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lIDwgZnJhbWVJbnRlcnZhbCAqIDAuOCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiB3aWR0aCAqIDQpO1xuXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICBkcm9wU3RhdHMuZHJvcHBlZChmcmFtZXNUb0luc2VydCAtIDEpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIHByZWxvYWQ6IHdpdGhBdWRpbyA/IHB1cEF1ZGlvUHJlbG9hZCA6IHVuZGVmaW5lZCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3csIHdyaXR0ZW49JHt3cml0dGVufSBzdHVjaz0ke3N0dWNrfWApO1xuICAgICAgICBzdHVjaysrO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlcmVuZGVyPFQ+KHNpZ25hbDogQWJvcnRTaWduYWwsIGFjdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBsZXQgbGFzdEVycjogdW5rbm93bjtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhyb3cgZTtcbiAgICAgIGxhc3RFcnIgPSBlO1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcmV0cnkgJHthdHRlbXB0ICsgMX0vJHtNQVhfUkVOREVSX0FUVEVNUFRTfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbGFzdEVycjtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgTHUgQW8gKGx1YW9AYmlsaWJpbGkuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vLi4vYmFzZS90aW1pbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9dXCI7XG5leHBvcnQgY29uc3QgVklERU9fU1lNQk9MID0gXCJfX3B1cF92aWRlb19fXCI7XG5cbmNvbnN0IEhPT0sgPSBgKGZ1bmN0aW9uKCkge1xuICBpZiAod2luZG93LnNlbGYgPT09IHdpbmRvdy50b3ApIHJldHVybjtcbiAgaWYgKHR5cGVvZiAke1ZJREVPX1NZTUJPTH0gIT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgY29uc3QgU0NIRU1FID0gJ3B1cC1mcmFtZTovLyc7XG4gIGNvbnN0IEFIRUFEID0gMTA7XG4gIGNvbnN0IEhWRSA9IEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlO1xuICBjb25zdCBNRURJQSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlO1xuICBjb25zdCBvcmlnUGF1c2UgPSBIVkUucGF1c2U7XG4gIGNvbnN0IGN0RGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFZFLCAnY3VycmVudFRpbWUnKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1FRElBLCAnY3VycmVudFRpbWUnKTtcbiAgY29uc3QgcGF1c2VkRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFZFLCAncGF1c2VkJykgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNRURJQSwgJ3BhdXNlZCcpO1xuICBjb25zdCBlbmRlZERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgJ2VuZGVkJykgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNRURJQSwgJ2VuZGVkJyk7XG4gIGNvbnN0IHNyY0Rlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgJ3NyYycpIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsICdzcmMnKTtcblxuICBjb25zdCBzZXNzaW9ucyA9IG5ldyBXZWFrTWFwKCk7XG4gIGNvbnN0IGF0dGFjaGluZyA9IG5ldyBXZWFrTWFwKCk7XG4gIGNvbnN0IGxhc3RTbmFwc2hvdCA9IG5ldyBXZWFrTWFwKCk7XG4gIGNvbnN0IGNhY2hlcyA9IG5ldyBNYXAoKTtcbiAgbGV0IGN1cnJNcyA9IDA7XG4gIGxldCBsYXN0TXMgPSAwO1xuXG4gIGNvbnN0IE1JUlJPUl9QUk9QUyA9IFtcbiAgICAnYm9yZGVyUmFkaXVzJywnYm9yZGVyVG9wTGVmdFJhZGl1cycsJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJywnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJyxcbiAgICAndHJhbnNmb3JtJywndHJhbnNmb3JtT3JpZ2luJywnZmlsdGVyJywnY2xpcFBhdGgnLCdib3hTaGFkb3cnLCdvcGFjaXR5JywnbWl4QmxlbmRNb2RlJywnbWFzaycsXG4gICAgJ3pJbmRleCcsJ3Bvc2l0aW9uJywnbGVmdCcsJ3RvcCcsJ3JpZ2h0JywnYm90dG9tJyxcbiAgXTtcblxuICBmdW5jdGlvbiBnZXRDYWNoZShpZCkge1xuICAgIGxldCBjID0gY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICBjID0geyBiaXRtYXBzOiBuZXcgTWFwKCksIGluRmxpZ2h0OiBuZXcgTWFwKCksIHJlYWRlcnM6IG5ldyBNYXAoKSB9O1xuICAgICAgY2FjaGVzLnNldChpZCwgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2hCaXRtYXAoc3RhdGUsIGlkeCkge1xuICAgIGNvbnN0IGMgPSBnZXRDYWNoZShzdGF0ZS5tZXRhLmlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGMuaW5GbGlnaHQuZ2V0KGlkeCk7XG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgaWYgKGMuYml0bWFwcy5oYXMoaWR4KSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjLmJpdG1hcHMuZ2V0KGlkeCkpO1xuICAgIGNvbnN0IHAgPSBmZXRjaChTQ0hFTUUgKyAnZnJhbWU/aWQ9JyArIHN0YXRlLm1ldGEuaWQgKyAnJmlkeD0nICsgaWR4KVxuICAgICAgLnRoZW4oKHIpID0+IHIub2sgPyByLmJsb2IoKSA6IG51bGwpXG4gICAgICAudGhlbigoYikgPT4gYiA/IGNyZWF0ZUltYWdlQml0bWFwKGIpIDogbnVsbClcbiAgICAgIC50aGVuKChibSkgPT4geyBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpOyBpZiAoYm0pIGMuYml0bWFwcy5zZXQoaWR4LCBibSk7IHJldHVybiBibTsgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7IGMuaW5GbGlnaHQuZGVsZXRlKGlkeCk7IHJldHVybiBudWxsOyB9KTtcbiAgICBjLmluRmxpZ2h0LnNldChpZHgsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5zdXJlUHJlZmV0Y2hlZChzdGF0ZSwgZnJvbUlkeCwgY291bnQpIHtcbiAgICBjb25zdCBtYXhJZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHN0YXRlLm1ldGEuZHVyYXRpb24gKiBzdGF0ZS5tZXRhLmZwcykpO1xuICAgIGZvciAobGV0IGkgPSBmcm9tSWR4OyBpIDwgZnJvbUlkeCArIGNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpIDwgMSB8fCBpID4gbWF4SWR4KSBjb250aW51ZTtcbiAgICAgIGZldGNoQml0bWFwKHN0YXRlLCBpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBldmljdE9sZChjKSB7XG4gICAgbGV0IG1pbklkeCA9IEluZmluaXR5O1xuICAgIGMucmVhZGVycy5mb3JFYWNoKChpZHgpID0+IHsgaWYgKGlkeCA8IG1pbklkeCkgbWluSWR4ID0gaWR4OyB9KTtcbiAgICBpZiAoIWlzRmluaXRlKG1pbklkeCkpIHJldHVybjtcbiAgICBjb25zdCBmbG9vciA9IG1pbklkeCAtIDI7XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBmbG9vcikgeyBibS5jbG9zZSgpOyBjLmJpdG1hcHMuZGVsZXRlKGlkeCk7IH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHVwQ2FudmFzKHZpZGVvKSB7XG4gICAgY29uc3QgY3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjdi5kYXRhc2V0LnB1cFZpZGVvT3ZlcmxheSA9ICcxJztcbiAgICBjdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgIHZpZGVvLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICB2aWRlby5tdXRlZCA9IHRydWU7XG4gICAgY29uc3QgcGFyZW50ID0gdmlkZW8ucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5O1xuICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoY3YsIHZpZGVvLm5leHRTaWJsaW5nKTtcbiAgICBzeW5jT3ZlcmxheSh2aWRlbywgY3YpO1xuICAgIC8vIEJyaWRnZSBjb2xkLXN0YXJ0OiBwYWludCBsYXN0LWtub3duIGZyYW1lIG9mIHByZXZpb3VzIGNsaXAgc28gY2FudmFzIGlzbid0IGJsYW5rIHdoaWxlIGRlY29kZXIgd2FybXMgdXAuXG4gICAgY29uc3Qgc25hcCA9IGxhc3RTbmFwc2hvdC5nZXQodmlkZW8pO1xuICAgIGlmIChzbmFwKSB7XG4gICAgICB0cnkgeyBjdi5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZShzbmFwLCAwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTsgfSBjYXRjaCB7fVxuICAgIH1cbiAgICByZXR1cm4gY3Y7XG4gIH1cblxuICBmdW5jdGlvbiBzeW5jT3ZlcmxheSh2aWRlbywgY3YpIHtcbiAgICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgICBjb25zdCBvZmZzZXRQYXJlbnQgPSB2aWRlby5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgICBjb25zdCB2ciA9IHZpZGVvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHByID0gb2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGN2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBjdi5zdHlsZS5sZWZ0ID0gKHZyLmxlZnQgLSBwci5sZWZ0KSArICdweCc7XG4gICAgY3Yuc3R5bGUudG9wID0gKHZyLnRvcCAtIHByLnRvcCkgKyAncHgnO1xuICAgIGN2LnN0eWxlLndpZHRoID0gdnIud2lkdGggKyAncHgnO1xuICAgIGN2LnN0eWxlLmhlaWdodCA9IHZyLmhlaWdodCArICdweCc7XG4gICAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgICAgaWYgKHAgPT09ICdwb3NpdGlvbicgfHwgcCA9PT0gJ2xlZnQnIHx8IHAgPT09ICd0b3AnIHx8IHAgPT09ICdyaWdodCcgfHwgcCA9PT0gJ2JvdHRvbScpIGNvbnRpbnVlO1xuICAgICAgY3Yuc3R5bGVbcF0gPSBjc1twXTtcbiAgICB9XG4gICAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICBjb25zdCB3ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci53aWR0aCAqIGRwcikpO1xuICAgIGNvbnN0IGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLmhlaWdodCAqIGRwcikpO1xuICAgIGlmIChjdi53aWR0aCAhPT0gdykgY3Yud2lkdGggPSB3O1xuICAgIGlmIChjdi5oZWlnaHQgIT09IGgpIGN2LmhlaWdodCA9IGg7XG4gIH1cblxuICBmdW5jdGlvbiBmaXRSZWN0KHNyY1csIHNyY0gsIGRzdFcsIGRzdEgsIGZpdCkge1xuICAgIGlmIChmaXQgPT09ICdub25lJykgcmV0dXJuIFsoZHN0VyAtIHNyY1cpIC8gMiwgKGRzdEggLSBzcmNIKSAvIDIsIHNyY1csIHNyY0hdO1xuICAgIGlmIChmaXQgPT09ICdjb250YWluJyB8fCBmaXQgPT09ICdzY2FsZS1kb3duJykge1xuICAgICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgICAgY29uc3QgayA9IGZpdCA9PT0gJ3NjYWxlLWRvd24nID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgICBjb25zdCB3cyA9IGsgKiBzcmNXLCBocyA9IGsgKiBzcmNIO1xuICAgICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgICB9XG4gICAgaWYgKGZpdCA9PT0gJ2NvdmVyJykge1xuICAgICAgY29uc3Qgc2MgPSBNYXRoLm1heChkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgICAgY29uc3Qgd3MgPSBzYyAqIHNyY1csIGhzID0gc2MgKiBzcmNIO1xuICAgICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgICB9XG4gICAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dGFjaCh2aWRlbykge1xuICAgIGlmIChzZXNzaW9ucy5oYXModmlkZW8pKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNlc3Npb25zLmdldCh2aWRlbykpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBhdHRhY2hpbmcuZ2V0KHZpZGVvKTtcbiAgICBpZiAocGVuZGluZykgcmV0dXJuIHBlbmRpbmc7XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmM7XG4gICAgaWYgKCFzcmMpIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgaWYgKC9eKGJsb2I6fGRhdGE6fG1lZGlhc3RyZWFtOikvaS50ZXN0KHNyYykpIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgY29uc3QgY3YgPSBzZXR1cENhbnZhcyh2aWRlbyk7XG4gICAgY29uc3QgYmlydGhNcyA9IGN1cnJNcztcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIG1ldGE6IG51bGwsIGN2OiBjdiwgY3R4OiBjdi5nZXRDb250ZXh0KCcyZCcpLFxuICAgICAgcGF1c2VkOiAhKHZpZGVvLmF1dG9wbGF5IHx8ICF2aWRlby5wYXVzZWQpLFxuICAgICAgY3VycmVudFRpbWU6IDAsIGVuZGVkOiBmYWxzZSwgbGFzdERyYXduSWR4OiAtMSwgZGVhZDogZmFsc2UsXG4gICAgICBvYmplY3RGaXQ6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKS5vYmplY3RGaXQgfHwgJ2ZpbGwnLFxuICAgIH07XG4gICAgc2Vzc2lvbnMuc2V0KHZpZGVvLCBzdGF0ZSk7XG4gICAgY29uc3QgcCA9IGRvQXR0YWNoKHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zKS5maW5hbGx5KCgpID0+IGF0dGFjaGluZy5kZWxldGUodmlkZW8pKTtcbiAgICBhdHRhY2hpbmcuc2V0KHZpZGVvLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRvQXR0YWNoKHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zKSB7XG4gICAgY29uc3QgZnBzID0gcGFyc2VJbnQodmlkZW8uZGF0YXNldC5wdXBGcHMgfHwgJzMwJywgMTApO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFNDSEVNRSArICdvcGVuP3NyYz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHNyYykgKyAnJmZwcz0nICsgZnBzKTtcbiAgICBpZiAoc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHJldHVybiBudWxsO1xuICAgIGlmICghcmVzLm9rKSB7IHN0YXRlLmRlYWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfVxuICAgIGNvbnN0IG1ldGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChzZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkgcmV0dXJuIG51bGw7XG4gICAgc3RhdGUubWV0YSA9IG1ldGE7XG4gICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5wYXVzZWQgPyAwIDogTWF0aC5tYXgoMCwgKGN1cnJNcyAtIGJpcnRoTXMpIC8gMTAwMCk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCAndmlkZW9XaWR0aCcsIHsgdmFsdWU6IG1ldGEud2lkdGgsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sICd2aWRlb0hlaWdodCcsIHsgdmFsdWU6IG1ldGEuaGVpZ2h0LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCAnZHVyYXRpb24nLCB7IHZhbHVlOiBtZXRhLmR1cmF0aW9uLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCAncmVhZHlTdGF0ZScsIHsgdmFsdWU6IDQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBbJ2xvYWRzdGFydCcsJ2R1cmF0aW9uY2hhbmdlJywnbG9hZGVkbWV0YWRhdGEnLCdsb2FkZWRkYXRhJywnY2FucGxheScsJ2NhbnBsYXl0aHJvdWdoJ10uZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoZSkpO1xuICAgIH0pO1xuICAgIGlmICghc3RhdGUucGF1c2VkKSB7XG4gICAgICB2aWRlby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncGxheScpKTtcbiAgICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwbGF5aW5nJykpO1xuICAgIH1cbiAgICBlbnN1cmVQcmVmZXRjaGVkKHN0YXRlLCAxLCBBSEVBRCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gZGV0YWNoKHZpZGVvKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHJldHVybjtcbiAgICBpZiAoc3RhdGUubWV0YSkge1xuICAgICAgLy8gU25hcHNob3QgY3VycmVudCBjYW52YXMgc28gdGhlIG5leHQgYXR0YWNoIGNhbiBwYWludCBpdCBkdXJpbmcgZGVjb2RlciB3YXJtdXAg4oCUIG5vIGJsYW5rIGdhcCBvbiBzcmMgc3dhcC5cbiAgICAgIGlmIChzdGF0ZS5sYXN0RHJhd25JZHggPj0gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHN0YXRlLmN2LndpZHRoLCBzdGF0ZS5jdi5oZWlnaHQpO1xuICAgICAgICAgIHNuYXAuZ2V0Q29udGV4dCgnMmQnKS5kcmF3SW1hZ2Uoc3RhdGUuY3YsIDAsIDApO1xuICAgICAgICAgIGxhc3RTbmFwc2hvdC5zZXQodmlkZW8sIHNuYXApO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgICBjb25zdCBjID0gY2FjaGVzLmdldChzdGF0ZS5tZXRhLmlkKTtcbiAgICAgIGlmIChjKSB7XG4gICAgICAgIGMucmVhZGVycy5kZWxldGUoc3RhdGUpO1xuICAgICAgICBpZiAoYy5yZWFkZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0pID0+IGJtLmNsb3NlKCkpO1xuICAgICAgICAgIGNhY2hlcy5kZWxldGUoc3RhdGUubWV0YS5pZCk7XG4gICAgICAgICAgZmV0Y2goU0NIRU1FICsgJ2Nsb3NlP2lkPScgKyBzdGF0ZS5tZXRhLmlkLCB7IGtlZXBhbGl2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzdGF0ZS5jdi5yZW1vdmUoKTtcbiAgICBzZXNzaW9ucy5kZWxldGUodmlkZW8pO1xuICAgIGF0dGFjaGluZy5kZWxldGUodmlkZW8pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lKHZpZGVvLCBzdGF0ZSkge1xuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgIHN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3BsYXknKSk7XG4gICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3BsYXlpbmcnKSk7XG4gIH1cblxuICBIVkUucGxheSA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHZpZGVvID0gdGhpcztcbiAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuIGF0dGFjaCh2aWRlbykudGhlbigocykgPT4geyBpZiAocykgcmVzdW1lKHZpZGVvLCBzKTsgfSk7XG4gICAgcmVzdW1lKHZpZGVvLCBzdGF0ZSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICBIVkUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXN0YXRlKSB7IG9yaWdQYXVzZS5jYWxsKHRoaXMpOyByZXR1cm47IH1cbiAgICBpZiAoIXN0YXRlLnBhdXNlZCkgeyBzdGF0ZS5wYXVzZWQgPSB0cnVlOyB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwYXVzZScpKTsgfVxuICB9O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCAncGF1c2VkJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkgeyBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpOyByZXR1cm4gcyA/IHMucGF1c2VkIDogcGF1c2VkRGVzYy5nZXQuY2FsbCh0aGlzKTsgfSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsICdlbmRlZCcsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHsgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTsgcmV0dXJuIHMgPyBzLmVuZGVkIDogZW5kZWREZXNjLmdldC5jYWxsKHRoaXMpOyB9LFxuICB9KTtcbiAgaWYgKGN0RGVzYykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsICdjdXJyZW50VGltZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7IGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7IHJldHVybiBzID8gcy5jdXJyZW50VGltZSA6IGN0RGVzYy5nZXQuY2FsbCh0aGlzKTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoIXMpIHsgY3REZXNjLnNldC5jYWxsKHRoaXMsIHQpOyByZXR1cm47IH1cbiAgICAgICAgcy5jdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHQsIHMubWV0YS5kdXJhdGlvbikpO1xuICAgICAgICBpZiAocy5jdXJyZW50VGltZSA8IHMubWV0YS5kdXJhdGlvbikgcy5lbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzZWVraW5nJykpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzZWVrZWQnKSk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3RpbWV1cGRhdGUnKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25TcmNDaGFuZ2UodmlkZW8pIHtcbiAgICAvLyBzZXR0ZXIgaG9vayArIE11dGF0aW9uT2JzZXJ2ZXIgYm90aCBmaXJlIGZvciBvbmUgYmdWaWRlby5zcmMgPSBYIGFzc2lnbm1lbnQ7IGRlZHVwZSBieSBzdG9yZWQgc3JjLlxuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjIHx8ICcnO1xuICAgIGlmICh2aWRlby5fX3B1cExhc3RTcmMgPT09IHNyYykgcmV0dXJuO1xuICAgIHZpZGVvLl9fcHVwTGFzdFNyYyA9IHNyYztcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKHZpZGVvKSkgZGV0YWNoKHZpZGVvKTtcbiAgICBhdHRhY2godmlkZW8pO1xuICB9XG4gIGZ1bmN0aW9uIHNjYW4ocm9vdCkge1xuICAgIGlmICghcm9vdCkgcmV0dXJuO1xuICAgIGlmIChyb290LnRhZ05hbWUgPT09ICdWSURFTycpIGF0dGFjaChyb290KTtcbiAgICBpZiAocm9vdC5xdWVyeVNlbGVjdG9yQWxsKSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ3ZpZGVvJykuZm9yRWFjaCgodikgPT4gYXR0YWNoKHYpKTtcbiAgfVxuICBzY2FuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gIG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRzKSA9PiB7XG4gICAgZm9yIChjb25zdCBtIG9mIG11dHMpIHtcbiAgICAgIGlmIChtLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJiBtLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgJiYgbS5hdHRyaWJ1dGVOYW1lID09PSAnc3JjJykge1xuICAgICAgICBvblNyY0NoYW5nZShtLnRhcmdldCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBuIG9mIG0uYWRkZWROb2RlcykgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KSBzY2FuKG4pO1xuICAgICAgZm9yIChjb25zdCBuIG9mIG0ucmVtb3ZlZE5vZGVzKSBpZiAobiBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIGRldGFjaChuKTtcbiAgICB9XG4gIH0pLm9ic2VydmUoZG9jdW1lbnQsIHsgc3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnc3JjJ10gfSk7XG5cbiAgaWYgKHNyY0Rlc2MgJiYgc3JjRGVzYy5zZXQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCAnc3JjJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBzcmNEZXNjLmdldCxcbiAgICAgIHNldDogZnVuY3Rpb24odikgeyBzcmNEZXNjLnNldC5jYWxsKHRoaXMsIHYpOyBvblNyY0NoYW5nZSh0aGlzKTsgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBhaW50KHZpZGVvLCBzdGF0ZSwgaWR4KSB7XG4gICAgY29uc3QgYyA9IGdldENhY2hlKHN0YXRlLm1ldGEuaWQpO1xuICAgIGMucmVhZGVycy5zZXQoc3RhdGUsIGlkeCk7XG4gICAgbGV0IGJtID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICAgIGlmICghYm0pIHtcbiAgICAgIGVuc3VyZVByZWZldGNoZWQoc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gICAgICBibSA9IGF3YWl0IGZldGNoQml0bWFwKHN0YXRlLCBpZHgpO1xuICAgICAgaWYgKHNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSByZXR1cm47XG4gICAgICBpZiAoIWJtKSByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN2ID0gc3RhdGUuY3Y7XG4gICAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgY3Yud2lkdGgsIGN2LmhlaWdodCwgc3RhdGUub2JqZWN0Rml0KTtcbiAgICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIHN0YXRlLmN0eC5kcmF3SW1hZ2UoYm0sIHJbMF0sIHJbMV0sIHJbMl0sIHJbM10pO1xuICAgIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgICBlbnN1cmVQcmVmZXRjaGVkKHN0YXRlLCBpZHggKyAxLCBBSEVBRCk7XG4gICAgZXZpY3RPbGQoYyk7XG4gIH1cblxuICBmdW5jdGlvbiBhZHZhbmNlKHRpbWVzdGFtcE1zKSB7XG4gICAgbGFzdE1zID0gY3Vyck1zO1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgY3Vyck1zIC0gbGFzdE1zKSAvIDEwMDA7XG4gICAgY29uc3QgcHMgPSBbXTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCd2aWRlbycpLmZvckVhY2goKHYpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gc2Vzc2lvbnMuZ2V0KHYpO1xuICAgICAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5kZWFkKSByZXR1cm47XG4gICAgICBzeW5jT3ZlcmxheSh2LCBzdGF0ZS5jdik7XG4gICAgICBpZiAoIXN0YXRlLm1ldGEpIHJldHVybjtcbiAgICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSArPSBkdCAqICh2LnBsYXliYWNrUmF0ZSB8fCAxKTtcbiAgICAgICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lID49IHN0YXRlLm1ldGEuZHVyYXRpb24pIHtcbiAgICAgICAgICBpZiAodi5sb29wKSB7IHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUuY3VycmVudFRpbWUgJSBzdGF0ZS5tZXRhLmR1cmF0aW9uOyB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgICAgICBzdGF0ZS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgdi5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZW5kZWQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHYuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3RpbWV1cGRhdGUnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGlkeCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoc3RhdGUuY3VycmVudFRpbWUgKiBzdGF0ZS5tZXRhLmZwcykpO1xuICAgICAgaWYgKGlkeCA9PT0gc3RhdGUubGFzdERyYXduSWR4KSByZXR1cm47XG4gICAgICBwcy5wdXNoKHBhaW50KHYsIHN0YXRlLCBpZHgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHMpO1xuICB9XG5cbiAgd2luZG93LiR7VklERU9fU1lNQk9MfSA9IHsgYWR2YW5jZTogYWR2YW5jZSB9O1xufSkoKTtgO1xuXG5jb25zdCBBRFZBTkNFX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZHZhbmNlVmlkZW9zKGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQsIHRpbWVzdGFtcE1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFmcmFtZSB8fCAhZnJhbWUudXJsKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgZXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChgJHtIT09LfSAke1ZJREVPX1NZTUJPTH0uYWR2YW5jZSgke3RpbWVzdGFtcE1zfSlgKTtcbiAgICBhd2FpdCB3aXRoVGltZW91dChldiwgQURWQU5DRV9USU1FT1VUX01TLCBcInZpZGVvLmFkdmFuY2VcIik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIGBhZHZhbmNlIHNraXBwZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGFkdmFuY2VWaWRlb3MgfSBmcm9tIFwiLi92aWRlby9zaGltXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmNvbnN0IEhPT0sgPSBgKGZ1bmN0aW9uKCkge1xuICBpZiAod2luZG93LnNlbGYgPT09IHdpbmRvdy50b3ApIHJldHVybjtcbiAgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICBjb25zdCBvcmlnID0ge1xuICAgIERhdGU6IERhdGUsXG4gICAgZGF0ZU5vdzogRGF0ZS5ub3cuYmluZChEYXRlKSxcbiAgICBwZXJmb3JtYW5jZU5vdzogcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpLFxuICAgIHJhZjogcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBjYWY6IGNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBjbGVhclRpbWVvdXQ6IGNsZWFyVGltZW91dC5iaW5kKHdpbmRvdyksXG4gICAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsLmJpbmQod2luZG93KSxcbiAgICBjbGVhckludGVydmFsOiBjbGVhckludGVydmFsLmJpbmQod2luZG93KSxcbiAgfTtcblxuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHJhZlF1ZXVlID0gW107XG4gIGNvbnN0IHRpbWVycyA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgZGF0ZU9yaWdpbiA9IG5ldyBvcmlnLkRhdGUoKTtcbiAgY29uc3QgcGVyZk9yaWdpbiA9IG9yaWcucGVyZm9ybWFuY2VOb3coKTtcblxuICBwZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBlcmZPcmlnaW4gKyBjdXJyTXM7IH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBPID0gb3JpZy5EYXRlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IE8oZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXMpO1xuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KE8sIFtudWxsXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpKSgpO1xuICB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXM7IH07XG4gIERhdGUucGFyc2UgPSBvcmlnLkRhdGUucGFyc2U7XG4gIERhdGUuVVRDID0gb3JpZy5EYXRlLlVUQztcbiAgRGF0ZS5wcm90b3R5cGUgPSBvcmlnLkRhdGUucHJvdG90eXBlO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYikge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmFmUXVldWUgPSByYWZRdWV1ZS5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfTtcblxuICB3aW5kb3cuc2V0VGltZW91dCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ3RpbWVvdXQnLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIHdpbmRvdy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICdpbnRlcnZhbCcsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlKGZuLCBhcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdzdHJpbmcnKSBldmFsKGZuKTtcbiAgICAgIGVsc2UgZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzIHx8IFtdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbVGlja10gZXJyb3I6JywgZSAmJiBlLnN0YWNrIHx8IGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXMpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICBkb2N1bWVudC5nZXRBbmltYXRpb25zKCkuZm9yRWFjaChhID0+IHtcbiAgICAgIGEucGF1c2UoKTtcbiAgICAgIGEuY3VycmVudFRpbWUgPSBjdXJyTXM7XG4gICAgfSk7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXModGltZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tpZHNbaV1dO1xuICAgICAgaWYgKCF0KSBjb250aW51ZTtcbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIHNhZmVJbnZva2UodC5jYiwgdC5hcmdzKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gJ3RpbWVvdXQnKSB7IGRlbGV0ZSB0aW1lcnNbaWRzW2ldXTsgYnJlYWs7IH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByYWZzLmxlbmd0aDsgaisrKSB7XG4gICAgICBzYWZlSW52b2tlKHJhZnNbal0uY2IsIFtjdXJyTXNdKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlamVjdCgpIHtcbiAgICBEYXRlID0gb3JpZy5EYXRlO1xuICAgIHBlcmZvcm1hbmNlLm5vdyA9IG9yaWcucGVyZm9ybWFuY2VOb3c7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG9yaWcucmFmO1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IG9yaWcuY2FmO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0ID0gb3JpZy5zZXRUaW1lb3V0O1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBvcmlnLmNsZWFyVGltZW91dDtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBvcmlnLnNldEludGVydmFsO1xuICAgIHdpbmRvdy5jbGVhckludGVydmFsID0gb3JpZy5jbGVhckludGVydmFsO1xuICAgIGRlbGV0ZSB3aW5kb3cuJHtUSUNLX1NZTUJPTH07XG4gIH1cblxuICB3aW5kb3cuJHtUSUNLX1NZTUJPTH0gPSB7IHByb2Nlc3M6IHByb2Nlc3MsIGVqZWN0OiBlamVjdCB9O1xufSkoKTtgO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGljayhmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkLCB0aW1lc3RhbXBNczogbnVtYmVyKSB7XG4gIGlmICghZnJhbWUpIHJldHVybjtcbiAgLy8gUGVyLWNhbGxiYWNrIGVycm9ycyBhcmUgc3dhbGxvd2VkIGluc2lkZSBIT09LIChzZWUgc2FmZUludm9rZSkuIE9ubHkgQ0RQL3RpbWVvdXQgZmFpbHVyZXNcbiAgLy8gc3VyZmFjZSBoZXJlIOKAlCB0aGV5IHNpZ25hbCBhIHJlYWwgZmF1bHQgKHJlbmRlcmVyIGhhbmcsIElQQyBicm9rZW4pIGFuZCBtdXN0IHByb3BhZ2F0ZS5cbiAgY29uc3QgdGlja0V2ID0gZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYCR7SE9PS30gJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhmcmFtZSwgdGltZXN0YW1wTXMpXSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQge1xuICB0eXBlIEJyb3dzZXJXaW5kb3csXG4gIHR5cGUgRXZlbnQsXG4gIHR5cGUgTmF0aXZlSW1hZ2UsXG4gIHR5cGUgUmVjdGFuZ2xlLFxuICB0eXBlIFNpemUsXG4gIHR5cGUgV2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zLFxufSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHBhdXNlVmlydHVhbFRpbWUsIHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHR5cGUgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN3YXBCdWZmZXIgfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgdGljayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGZyYW1lU2VydmVyIH0gZnJvbSBcIi4vdmlkZW8vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IGxhc3RUczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgbGFnZ3kgPSAwO1xuICBsZXQgc3R1Y2sgPSAwO1xuICBsZXQgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSAzKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcImRyYXdhYmxlIHRpbWVvdXRcIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gcmVuZGVyIGlzIGV4dHJlbWVseSBzbG93IEAgJHttc30sIGN1cnJlbnQ6ICR7bGFzdFRzfSB3aXRoICR7c3R1Y2t9IHJlcGVhdHNgKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLmludmFsaWRhdGUoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgICAgY29uc3QgaGFuZGxlciA9IChfZTogRXZlbnQ8V2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zPiwgX2Q6IFJlY3RhbmdsZSwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICBjb25zdCB0cyA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgTWF0aC5hYnModHMgLSBtcykgPiAxKSB7XG4gICAgICAgICAgbGFzdFRzID0gdHM7XG4gICAgICAgICAgbGFnZ3krKztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBzaXplLmhlaWdodCAqIHNpemUud2lkdGggKiA0KSk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICAgICAgLy8gQ29tcG9zaXRvciBjYXAsIE5PVCBvdXRwdXQgZnBzLiBNYXggaXQgc28gcGFpbnQgZXZlbnRzIGFycml2ZSB3aXRob3V0IGludGVyLWZyYW1lIHdhbGwgZGVsYXkuXG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoMjQwKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob290KG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGUsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG4gIGlmICh3aXRoQXVkaW8pIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuXG4gIGNvbnN0IHRJbml0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHdpblAgPSBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlcjogb3B0aW9ucywgc2lnbmFsIH0pO1xuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHdpbiA9IGF3YWl0IHdpblA7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiaW5pdCBkb25lOlwiLCB7IHNvdXJjZSwgY29zdDogcGVyZm9ybWFuY2Uubm93KCkgLSB0SW5pdCB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICBhd2FpdCBwYXVzZVZpcnR1YWxUaW1lKGNkcCk7XG5cbiAgICBmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgdG90YWw7IGZyYW1lKyspIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWUgKyAxKSAqIGZyYW1lSW50ZXJ2YWw7XG5cbiAgICAgIGF3YWl0IHRpY2soaWZyYW1lLCBmcmFtZU1zKTtcbiAgICAgIGF3YWl0IHN3YXBCdWZmZXIod2luLndlYkNvbnRlbnRzLCBmcmFtZU1zLCBmcmFtZUludGVydmFsKTtcbiAgICAgIGNvbnN0IGJpdG1hcCA9IGF3YWl0IHBhaW50KHsgc291cmNlLCB3aW4sIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LCBtczogZnJhbWVNcyB9KTtcbiAgICAgIC8vIEtpY2sgb2ZmIGVuY29kZSB3aXRob3V0IGF3YWl0aW5nOyBwaXBlbGluZSBsaW1pdGVyIHNlcmlhbGl6ZXMgaW50ZXJuYWxseS5cbiAgICAgIC8vIEVuY29kZSBydW5zIGNvbmN1cnJlbnQgd2l0aCBuZXh0IGZyYW1lJ3MgQ0RQL3BhaW50IHNldHVwLlxuICAgICAgcGlwZWxpbmUuZW5jb2RlQkdSQShiaXRtYXApLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgICAgIHdyaXR0ZW4rKztcbiAgICAgIGlmIChlbmNvZGVFcnJvcikgdGhyb3cgZW5jb2RlRXJyb3I7XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWVTZXJ2ZXIuY2xvc2VBbGwoKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IpIHRocm93IGVuY29kZUVycm9yO1xuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiAwLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgYXBwLCBNZW51IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgSXBjTXNnVHlwZSwgSXBjV3JpdGVyLCB0eXBlIElwY01zZyB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgc2V0dXBGcmFtZVByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2xcIjtcbmltcG9ydCB7IHNldHVwUHVwUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci9wcm90b2NvbFwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVuZGVyXCI7XG5pbXBvcnQgeyB3aXRoUmVyZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZXJlbmRlclwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuY29uc3QgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbmxldCBleGl0aW5nID0gZmFsc2U7XG5cbnN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCk7XG5NZW51LnNldEFwcGxpY2F0aW9uTWVudShudWxsKTtcbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5hcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG5hcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcbmFwcC5vbihcIndpbGwtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxub2socHJvY2Vzcy5zZW5kLCBcImlwYyBjaGFubmVsIG1pc3Npbmcg4oCUIHNwYXduIHdpdGggc3RkaW9bM109J2lwYydcIik7XG5wcm9jZXNzLm9uY2UoXCJkaXNjb25uZWN0XCIsICgpID0+IGN0cmwuYWJvcnQoXCJkaXNjb25uZWN0XCIpKTtcbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgaWYgKG1zZy50eXBlID09PSBJcGNNc2dUeXBlLkNBTkNFTCkgY3RybC5hYm9ydChtc2cucmVhc29uKTtcbn0pO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJhcHBcIixcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaXBjID0gbmV3IElwY1dyaXRlcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBzZXR1cEZyYW1lUHJvdG9jb2woKTtcbiAgICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICAgIGZvciAoY29uc3Qgb3V0IG9mIG9wdGlvbnMub3V0RmlsZS5zcGxpdChcIixcIikpIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXQpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgY3RybC5zaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhSZXJlbmRlcihjdHJsLnNpZ25hbCwgKCkgPT5cbiAgICAgICAgYWN0aW9uKHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICAgIG9uUHJvZ3Jlc3M6IChwKSA9PiBpcGMud3JpdGVQcm9ncmVzcyhwKSxcbiAgICAgICAgICBvbkNvbnNvbGU6IChsLCBtKSA9PiBpcGMud3JpdGVDb25zb2xlKGwsIG0pLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBpcGMud3JpdGVEb25lKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgY29uc3QgbSA9IGVycm9yLnN0YWNrID8/IGVycm9yLm1lc3NhZ2UgPz8gU3RyaW5nKGUgPz8gXCJ1bmtub3duIGVycm9yXCIpO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRXJyb3IobSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRpbmcgPSB0cnVlO1xuICAgICAgYXBwLmV4aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
120
+ </html>`}function Me(r,e){let{width:t,height:o}=e;if(t<ut||o<2)return;let i=o-1,n=0;for(let s=0;s<ut;s++){let d=(i*t+s)*4,c=(r[d]??0)>127?1:0;n=n<<1|c;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function ar(r){return dt(r,"__pup_start_stego__()")}async function cr(r,e,t){let o=new Promise(i=>r.ipc.once(nr,i));await dt(r.debugger,`__pup_draw_stego__(${e})`),await or(r.debugger,t),await M(o,5e3,"swapBuffer");}var pt="pup",Qo="pup-frame",dr={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:pt,privileges:dr},{scheme:Qo,privileges:dr}]);function pr(){electron.protocol.handle(pt,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),i=parseInt(e.searchParams.get("h")??"0",10),n=sr(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function mr(r,e){let t=new URL(`${pt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var oe=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();}};async function X(r,e){let t=new nodeAv.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 nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function K(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function F(){let r=new nodeAv.Packet;return r.alloc(),r}async function ie(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)break;nodeAv.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 D=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=K(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=K(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=F();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=P(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var n=i,s=true;}finally{E(o,n,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var _i={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Le=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=F(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.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 nodeAv.FilterGraph;t.alloc();let o=nodeAv.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=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${_i[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,c=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,p,c),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let 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=P(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(d){var a=d,c=true;}finally{E(s,a,c);}}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===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return ie(this._ctx,this._pkt,this._stream,e)}};function H(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var V=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},C=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]);var ft=16;var ht=23,se=32,ae=33,Ne=34,xr=39;function vr(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 wt(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function R(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 a=i+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){n=a;break}let{type:s,layerId:d}=vr(r[i],r[i+1]);e.push({type:s,layerId:d,data:r.subarray(i,n)}),t=n;}return e}function gt(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=vr(t[0],t[1]),[n,s]=wt(o,e,i);return t[0]=n,t[1]=s,t}function I(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 Q(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var xi=48,Er=24,vi=2,Pi=10,bt=0,yi=1;function Pr(r,e,t){let o=e>>3,i=1<<7-(e&7),n=r[o]??0;r[o]=t?n|i:n&~i;}function yr(r,e){let t=I(r);return Pr(t,e+vi,0),Pr(t,e+Pi,1),Q(t)}function De(r){let e=R(r);if(e.length===0)return r;let t=[];for(let o of e){let i=o.data;o.type===se?i=yr(o.data,xi):o.type===ae&&(i=yr(o.data,Er)),t.push(U,i);}return Buffer.concat(t)}function Ei(r,e,t){let o=I(r),i=new C(o),n=new V;for(let s=0;s<e;s++)n.bits.push(i.read(1));for(i.readUe(),n.ue(t);i.pos<i.bits.length;)n.bits.push(i.read(1));for(;n.bits.length%8!==0;)n.bits.push(0);return Q(H(n.bits))}function Si(r,e,t,o){let i=I(r),n=new C(i),s=new V;for(let d=0;d<e;d++)s.bits.push(n.read(1));for(n.readUe(),n.readUe(),s.ue(t),s.ue(o);n.pos<n.bits.length;)s.bits.push(n.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return Q(H(s.bits))}function Sr(r){let e=Er+96;return Ei(r,e,1)}function Cr(r){return Si(r,16,1,1)}function Ci(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function Fi(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let i=0;i<=e;i++)r.read(1)||r.read(1);}else {let o=r.readUe(),i=r.readUe();for(let n=0;n<o;n++)r.readUe(),r.read(1);for(let n=0;n<i;n++)r.readUe(),r.read(1);}}function Ai(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=ft&&e<=ht;o&&r.read(1),r.readUe();let i=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):Fi(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(i===yi||i===bt)&&(r.read(1)&&(r.readUe(),i===bt&&r.readUe()),i===bt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),Ci(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Fr(r,e,t){let o=I(r),i=new C(o),n=new C(o),s=Ai(n,e,t),d=s%8===0?8:8-s%8,a=(s+d)/8,c=new V;for(let u=0;u<16;u++)c.bits.push(i.read(1));for(c.bits.push(i.read(1)),e>=ft&&e<=ht&&c.bits.push(i.read(1)),i.readUe(),c.ue(1);i.pos<s;)c.bits.push(i.read(1));for(c.bits.push(1);c.bits.length%8!==0;)c.bits.push(0);return Q(Buffer.concat([H(c.bits),o.subarray(a)]))}function ki(r){let e=new C(I(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 Ti(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 Ri(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 Ar(r,e,t){let o=ki(r);if(!o)return r;let i=new V;return Ti(i,o),Ri(i,o,e,t),i.bits.push(1),i.align(0),Q(H(i.bits))}function kr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let i=r.width,n=r.height,s=i*n;if(t.byteOffset%4===0&&o===i*4){let d=new Uint32Array(t.buffer,t.byteOffset,s);for(let a=0;a<s;a++)e[a]=d[a]>>>24;}else for(let d=0;d<n;d++){let a=d*o+3,c=d*i;for(let p=0;p<i;p++)e[c+p]=t[a+p*4];}}function Ii(r,e){return r===ae?Sr(e):r===Ne?Cr(e):e}function Tr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=R(e),i=R(t),n=new Map;for(let a of i){if(a.type===se)continue;let c=n.get(a.type)??[];c.push(a),n.set(a.type,c);}let s=[],d=new Set;for(let a of o){let c=a.type===se?Ar(a.data,r.width,r.height):a.data;if(s.push(U,c),!d.has(a.type)){d.add(a.type);for(let p of n.get(a.type)??[]){let u=Ii(a.type,p.data);s.push(U,gt(u,1));}}}return s.push(Bi()),Buffer.concat(s)}function Bi(){let[t,o]=wt(xr,0,1),i=[],n=(s,d)=>{for(let a=d-1;a>=0;a--)i.push(s>>a&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]),H(i),Buffer.from([128])])}function Rr(r,e,t){let o=[];for(let i of r)o.push(U,i.data);for(let i of e)if(i.type<se){let n=Fr(i.data,i.type,t);o.push(U,gt(n,1));}return Buffer.concat(o)}var Ve=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:n}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,i,"base")),this._alphaQueue.push(...await this.receiveAll(o,n,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let i=[];for(;;){let n=await e.receivePacket(t);if(n>=0){i.push(this.snapshot(t)),t.unref();continue}if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)return i;nodeAv.FFmpegError.throwIfError(n,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:i,baseCtx:n,stream:s,hevcCfg:d}=this._s,a=Rr(R(e.data),R(t.data),d);i.data=De(a),i.pts=e.pts,i.dts=e.dts,i.duration=e.duration===0n?1n:e.duration,i.flags=e.flags,i.streamIndex=s.index,i.rescaleTs(n.timeBase,s.timeBase),await o.writePacket(i),i.unref();}};function W(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Ni(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let i=0;i<e;i++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let i=e;i<8;i++)r.read(2);for(let i=0;i<e;i++)t[i]&&r.read(88),o[i]&&r.read(8);}function Di(r){let e=new C(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&W("sps_max_sub_layers_minus1",t,"0"),e.read(1),Ni(e,t),e.readUe();let o=e.readUe();o===3&&W("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let i=e.readUe()+4,s=e.read(1)?t+1:1;for(let h=0;h<s;h++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&W("scaling_list_enabled_flag",1,"0"),e.read(1);let d=e.read(1)===1;e.read(1)&&W("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&W("num_short_term_ref_pic_sets",a,"\u22641");let c=0;if(a===1){let h=e.readUe(),f=e.readUe();c=h+f;for(let w=0;w<h;w++)e.readUe(),e.read(1);for(let w=0;w<f;w++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&W("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:i,saoEnabled:d,numShortTermRefPicSets:a,numDeltaPocsSet0:c,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Vi(r){let e=new C(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&W("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&W("tiles_enabled_flag",1,"0"),e.read(1);let i=e.read(1)===1,n=e.read(1),s=false;return n&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:i&&!s}}function Ir(r){let e=R(r),t=e.find(s=>s.type===ae),o=e.find(s=>s.type===Ne);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let i=Di(I(t.data)),n=Vi(I(o.data));return {...i,...n}}var He=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Ve({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){let{width:t,height:o,fps:i,bitrate:n,muxer:s}=e,d=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!d)throw new Error("hevc_nvenc encoder not found");let c={codec:d,width:t,height:o,fps:i,bitrate:n,options:{preset:"p4",bf:"0",tier:"main"}},p=await X({...c,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),u,h,f,w;try{if(u=await X({...c,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),!p.extraData||!u.extraData)throw new Error("nvenc: codec extradata missing");let b=Ir(p.extraData),x=s.addStream(p,"hvc1"),y=Tr({baseExtradata:p.extraData,alphaExtradata:u.extraData,width:t,height:o});x.codecpar.extradata=De(y);let g=t*o,v=(t+1>>1)*(o+1>>1),_=Buffer.alloc(g+v*2);return _.fill(128,g),h=F(),f=F(),w=K(t,o,constants.AV_PIX_FMT_YUV420P),new r({baseCtx:p,alphaCtx:u,basePkt:h,alphaPkt:f,stream:x,alphaSwFrame:w,alphaBuf:_,hevcCfg:b})}catch(b){throw h?.free(),f?.free(),w?.free(),u?.freeContext(),p.freeContext(),b}}async encode(e,t){let{baseCtx:o,alphaCtx:i,alphaSwFrame:n,alphaBuf:s}=this._s,d=this._pts++;kr(e,s),nodeAv.FFmpegError.throwIfError(n.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(n.fromBuffer(s),"alphaSw.fromBuffer"),n.pts=d,n.duration=1n,e.pts=d,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await i.sendFrame(n),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i,alphaSwFrame:n}=this._s;e.free(),t.free(),n.free(),i.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var ce=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,...s}=e,d=nodeAv.Codec.findEncoderByName(t);if(!d)throw new Error(`Video encoder not found: ${t}`);let a=await X({codec:d,...s,codecTag:o,options:i},"videoCtx.open2"),c=n.addStream(a,o);return new r(a,F(),c)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.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 ie(this._ctx,this._pkt,this._stream,e)}};var Ue=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:s,muxer:d}=e,a=n.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let c=await X({codec:a,width:t,height:o,fps:i,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p;try{let u=d.addStream(c,"hvc1");return p=F(),new r(c,p,u)}catch(u){throw p?.free(),c.freeContext(),u}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.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 ie(this._ctx,this._pkt,this._stream,e)}};var We="[Encoder]";async function Or(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableHwCodec:s=false,sharedHw:d}=r,a=d??(s?void 0:api.HardwareContext.auto()??void 0),c=!d&&!!a;try{if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc"))return l.debug(We,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ue.create({width:t,height:o,fps:i,hw:a,bitrate:n,muxer:e}),hw:a,ownsHw:c};if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc"))return l.debug(We,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await He.create({width:t,height:o,fps:i,hw:a,bitrate:n,muxer:e}),hw:a,ownsHw:c}}catch(u){l.warn(We,"Hardware codec session limits reached, use software encoder",u),c&&a?.dispose();}return l.debug(We,"using software libx265 HEVC alpha encoder"),{video:await ce.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:n,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await D.create(t,o),ownsHw:false}}var $e=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=P(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var i=o,n=true;}finally{E(t,i,n);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(this._opened){this._opened=false;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose]();}}}};var un="libvpx-vp9",xe=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new $e(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),i=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:i,opts:e})}static mp4Video(e,t){let{width:o,height:i,fps:n,disableHwCodec:s,sharedHw:d}=e;return Or({width:o,height:i,fps:n,disableHwCodec:s,sharedHw:d},t)}static async webmVideo(e,t){let{width:o,height:i,fps:n}=e;return {video:await ce.create({width:o,height:i,fps:n,codecName:un,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await D.create(o,i),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return Le.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:i}=this._s;await o?.flush(i),e?await e.flush(i):await t.flush(i);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:i,codec:n,hw:s,ownsHw:d}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),i?.[Symbol.dispose](),n?.[Symbol.dispose](),await e[Symbol.asyncDispose](),d&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:i}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,i);}};var de=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:i,outFile:n,withAudio:s=false,disableHwCodec:d=false}=e,a=n.split(",").map(w=>w.trim()).filter(Boolean);if(a.length===0)throw new Error("outFile must contain at least one path");let c=a.map(w=>xe.kindFromPath(w)),u=!d&&c.includes("mp4")?api.HardwareContext.auto()??void 0:void 0,h=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA,f=[];for(let w=0;w<a.length;w++){let b=await xe.create({outFile:a[w],kind:c[w],width:t,height:o,fps:i,withAudio:s,disableHwCodec:d,sharedHw:c[w]==="mp4"&&h?u:void 0});f.push(b);}return new r({sinks:f,sharedHw:u,limiter:new oe(1),outFiles:a,opts:e})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=P(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(d=>d.encodeBGRA(t)));}catch(i){var n=i,s=true;}finally{E(o,n,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await D.create(t,o);let i=await this._s.pngCodec.decodePNG(e);for(let n of this._s.sinks)await n.encodeDecodedFrame(i);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=K(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var Ge=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let c=Math.max(0,a-1);t+=(c/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,s=Math.min(1,t),d=1-(1-n)*(1-s);return {global:n,local:s,jank:d,expected:i,actual:this._actual,maxBurst:o}}};function ze(r,e){return r.width===e.width&&r.height===e.height}var Lr="audio-meta",Nr="audio-chunk";function Dr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let i=async(s,d)=>{let a=d.sampleRate,c=t();e.setupAudio(a);let p=Math.ceil(c*a/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},n=async(s,d)=>{try{await e.encodeAudio(d);}catch(a){o(a);}};return r.ipc.on(Lr,i),r.ipc.on(Nr,n),()=>{r.ipc.removeListener(Lr,i),r.ipc.removeListener(Nr,n);}}function Vr({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let i=new Error(`timeout over ${t}ms`);return async function(...n){let s=0;for(;;){o?.throwIfAborted();try{let d=[r(...n)];return t&&d.push(promises$1.setTimeout(t).then(()=>{throw i})),await Promise.race(d)}catch(d){if(o?.throwIfAborted(),s++,s>=e)throw d;await Re(Math.pow(2,s)*100+Math.random()*100);}}}}var _t=["file:","http:","https:","data:"],gn=/^(file:|https?:|data:)/;function Hr(r){if(gn.test(r))return;let e=r.split(":")[0]+":",t=_t.includes(e)?`unsupported protocol: ${e}, expected ${_t.join(", ")}`:`invalid source format, expected ${_t.join(", ")}`;throw new Error(t)}var je=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var qe="[Network]",_n=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),xn=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function vn(r){for(let e of xn)if(r.startsWith(e))return true;return false}function xt(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=_n.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Ur({source:r,window:e,useInnerProxy:t,cancelMedia:o}){let i=e.webContents.session.webRequest,n=new oe(256),s=new Map;async function d(c,p){let u=new je;s.set(c,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(c));}function a(c){s.get(c)?.signal();}i.onBeforeRequest((c,p)=>{let u=c.url;if(o&&c.resourceType==="media"){p({cancel:true});return}let h=t?xt(u):u;n.schedule(()=>{let f=`${e.id}_${c.id}`;return l.debug(qe,"start:",{key:f,url:u,proxied:h,method:c.method,source:r,stats:n.stats}),p(h===u?{cancel:false}:{cancel:false,redirectURL:h}),vn(u)?Promise.resolve():d(f,()=>{l.warn(qe,"maybe timeout:",{key:f,url:u,proxied:h,method:c.method,source:r});})});}),i.onHeadersReceived(({responseHeaders:c},p)=>{delete c?.["x-frame-options"],delete c?.["X-Frame-Options"],delete c?.["content-security-policy"],delete c?.["Content-Security-Policy"],p({cancel:false,responseHeaders:c});}),i.onCompleted(c=>{let p=`${e.id}_${c.id}`;a(p),l.debug(qe,"completed:",{key:p,url:c.url,method:c.method,statusCode:c.statusCode,source:r});}),i.onErrorOccurred(c=>{let p=`${e.id}_${c.id}`;a(p),!(o&&c.resourceType==="media"&&c.error==="net::ERR_BLOCKED_BY_CLIENT")&&l.error(qe,"error:",{key:p,url:c.url,method:c.method,error:c.error,resourceType:c.resourceType,source:r});});}function vt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var J="[Window]",Wr=new Error("window timeout");function yn({source:r,win:e,action:t,tolerant:o,signal:i}){return new Promise((n,s)=>{let d=setTimeout(()=>a(Wr),1e4),a=c=>{clearTimeout(d),c?s(c):n();};i?.throwIfAborted(),i?.addEventListener("abort",()=>a(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{l.debug(J,"dom-ready:",{source:r}),o&&a();}),e.webContents.once("did-stop-loading",()=>{l.debug(J,"did-stop-loading:",{source:r}),a();}),e.webContents.once("did-fail-load",(c,p,u,h)=>{let f=`did-fail-load: ${JSON.stringify({url:h,source:r,code:p,desc:u})}`;l.error(J,f),a(new Error(f));}),e.webContents.once("render-process-gone",(c,{exitCode:p,reason:u})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:p,reason:u})}`;l.error(J,h),a(new Error(h));}),t();})}function ue(r){return new Promise(e=>{vt(r);let t=setTimeout(()=>{try{l.warn(J,"force close"),r.destroy();}catch{}o();},1e3),o=()=>(clearTimeout(t),e());r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function En(r){if(r.deterministic)return Vt;if(r.withAudio)return Dt}async function $r({source:r,renderer:e,tolerant:t,signal:o,onCreated:i}){let{width:n,height:s,useInnerProxy:d}=e,a=d?xt(r):r,c=new electron.BrowserWindow({width:n,height:s+1,minWidth:n,minHeight:s+1,maxWidth:n,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:En(e)}});Ur({source:r,window:c,useInnerProxy:d,cancelMedia:e.deterministic}),c.webContents.debugger.attach("1.3"),await i?.(c),c.webContents.on("console-message",({level:p,message:u,lineNumber:h,sourceId:f})=>{let w=[J,"console:",{message:u,lineNumber:h,sourceId:f,source:r}];p==="error"?l.error(...w):l.debug(...w),!(p==="warning"&&u.startsWith("%cElectron Security Warning"))&&e.onConsole(p,u);});try{let p=mr(a,{width:n,height:s});await yn({source:r,win:c,action:()=>c.loadURL(p),tolerant:t,signal:o});}catch(p){throw await ue(c),p}return c}var Sn=Vr({fn:$r,maxAttempts:2});async function Ye({source:r,renderer:e,onCreated:t,signal:o}){Hr(r),o?.throwIfAborted();let i,n;try{i=await Sn({source:r,renderer:e,signal:o});}catch(d){n=d;}let s=()=>$r({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&n===Wr)return l.warn(J,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(n){let{message:d,stack:a}=n;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:d,stack:a})}`)}i&&(i.webContents.removeAllListeners(),vt(i),await Re(2e3),await ue(i));try{return await s()}catch(d){let{message:a,stack:c}=d;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:a,stack:c})}`)}}var Cn="[Render]";async function Gr(r){var Z=[];try{let{source:e,fps:t,width:o,height:i,duration:n,withAudio:s,outFile:d,disableHwCodec:a,signal:c,onProgress:p}=r;let u=P(Z,await de.create({width:o,height:i,fps:t,outFile:d,withAudio:s,disableHwCodec:a}),!0);let h=Math.ceil(t*n);let f=1e3/t;let w={width:o,height:i+1};let b=0;let x;let y=0;let g;let v;let _;let A;let B=new Ge(t);let L;let k=N=>{b++,u.encodeBGRA(N).catch(ee=>g??=ee);};let Pe=(N,ee,le)=>{if(g??=c?.reason,g){_?.(g);return}let G=le.getSize();if(!ze(G,w)){Oe(pe,w);return}let Ke=le.toBitmap(),fe=Me(Ke,G);if(fe===void 0){g??=new Error(`no timestamp @ ${b}`);return}if(x!==void 0&&fe-x<f*.8)return;let Qe=Buffer.from(Ke.buffer,Ke.byteOffset,i*o*4);if(x===void 0)k(Qe),B.wrote();else {let St=fe-x;if(St<=f*1.2)k(Qe),B.wrote();else {let Ct=Math.round(St/f);B.dropped(Ct-1),B.wrote();for(let Ft=0;Ft<Ct&&b<h;Ft++)k(Qe);}}x=fe;let Et=Math.floor(b/h*100);Et!==y&&(y=Et,p(y));let Jr=n*1e3;(fe>=Jr-f*.5||b>=h)&&v?.();};let T=await Ye({source:e,renderer:r,signal:c,onCreated:N=>{s&&(L=Dr({wc:N.webContents,encoder:u,getVideoTimeMs:()=>x??0,onError:ee=>g??=ee}));}});let pe=T.webContents.debugger;try{T.webContents.stopPainting(),T.webContents.setFrameRate(t),T.webContents.on("paint",Pe),T.webContents.startPainting(),c?.throwIfAborted(),c?.addEventListener("abort",()=>_?.(c.reason),{once:!0}),await ar(pe),await new Promise((N,ee)=>{[v,_]=[N,ee];let le=0,G=0;A=setInterval(()=>{if(b!==le){le=b,G=0;return}if(G>=3){_?.(new Error("drawable timeout"));return}l.warn(Cn,`${e} render is extremely slow, written=${b} stuck=${G}`),G++,T.webContents.invalidate();},1e3);});}finally{clearInterval(A),T.webContents.off("paint",Pe),await ue(T),L?.(),await u.finish();}if(g||b===0)throw g??new Error("no frames captured");else {let N=B.finalize();return {written:b,jank:N.jank,outFile:d}}}catch(me){var Xe=me,ye=true;}finally{var Ee=E(Z,Xe,ye);Ee&&await Ee;}}var Fn="[Rerender]",zr=3;async function jr(r,e){let t;for(let o=0;o<zr;o++)try{return await e()}catch(i){if(r.aborted)throw i;t=i,l.warn(Fn,`retry ${o+1}/${zr}: ${i.message}`);}throw t}var An="[Video]",kn=5e3;async function qr(r,e){if(!(!r||!r.url))try{let t=`window.__pup_video__&&window.__pup_video__.advance(${e})`,o=r.executeJavaScript(t);await M(o,kn,"video.advance");}catch(t){l.warn(An,`advance skipped: ${t instanceof Error?t.message:String(t)}`);}}var Yr="__pup_tick__";async function Xr(r,e){if(!r)return;let t=`window.${Yr}&&window.${Yr}.process(${e})`,o=r.executeJavaScript(t);await Promise.all([M(o,5e3,"tick.executeJavaScript"),qr(r,e)]);}var Pt="[Shoot]";async function Tn({source:r,win:e,size:t,ms:o}){let i,n=0,s=0,d,a=e.webContents.debugger,c={width:t.width,height:t.height+1};try{return await new Promise((p,u)=>{d=setInterval(()=>{if(s>=3){u(new Error("drawable timeout"));return}s++,l.warn(Pt,`${r} render is extremely slow @ ${o}, current: ${i} with ${s} repeats`),e.webContents.invalidate();},1e3);let h=(f,w,b)=>{let x=b.getSize();if(!ze(x,c)){Oe(a,c);return}let y=b.toBitmap(),g=Me(y,x);if(g===void 0||Math.abs(g-o)>1){i=g,n++;return}e.webContents.off("paint",h),p(Buffer.from(y.buffer,y.byteOffset,t.height*t.width*4)),e.webContents.stopPainting(),e.webContents.setFrameRate(240);};e.webContents.on("paint",h),e.webContents.startPainting();})}finally{clearInterval(d);}}async function Kr(r){var L=[];try{let{source:e,fps:t,width:o,height:i,duration:n,withAudio:s,outFile:d,disableHwCodec:a,signal:c,onProgress:p}=r;s&&l.warn(Pt,"audio will be ignored on this mode");let u=performance.now();let h=Ye({source:e,renderer:r,signal:c});let f=P(L,await de.create({width:o,height:i,fps:t,outFile:d,withAudio:s,disableHwCodec:a}),!0);let w=await h;l.debug(Pt,"init done:",{source:e,cost:performance.now()-u});let b=Math.ceil(t*n);let x=1e3/t;let y=0;let g=0;let v;let _=w.webContents.debugger;let A=w.webContents.mainFrame;let B=A.frames[0];try{w.webContents.setFrameRate(t),w.webContents.stopPainting(),await ir(_);for(let Z=0;Z<b;Z++){c?.throwIfAborted();let me=(Z+1)*x;await Xr(B,me),await cr(w.webContents,me,x);let Xe=await Tn({source:e,win:w,size:{width:o,height:i},ms:me});if(f.encodeBGRA(Xe).catch(Ee=>v??=Ee),y++,v)throw v;let ye=Math.floor(y/b*100);ye!==g&&(g=ye,p(g));}}finally{await re.closeAll(),await ue(w),await f.finish();}if(v)throw v;if(y===0)throw new Error("no frames captured");else return {written:y,jank:0,outFile:d}}catch(k){var Pe=k,T=true;}finally{var pe=E(L,Pe,T);pe&&await pe;}}var Mn="[App]";function Qr(){l.debug(Mn,"gpu features:",electron.app.getGPUFeatureStatus());}var ve=new AbortController,yt=false;jt();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",Qr);electron.app.on("before-quit",r=>!yt&&r.preventDefault());electron.app.on("will-quit",r=>!yt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>ve.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&ve.abort(e.reason);});Qt({name:"app",run:async(r,e)=>{let t=new Ce;try{await electron.app.whenReady(),pr(),rr(),Qr();for(let n of e.outFile.split(","))await promises.mkdir(path.dirname(n),{recursive:!0});let o=e.deterministic?Kr:Gr;ve.signal.throwIfAborted();let i=await jr(ve.signal,()=>o({source:r,...e,signal:ve.signal,onProgress:n=>t.writeProgress(n),onConsole:(n,s)=>t.writeConsole(n,s)}));await t.writeDone(i);}catch(o){let i=o,n=i.stack??i.message??String(o??"unknown error");await t.writeError(n);}finally{yt=true,electron.app.exit();}}});
121
+ //# sourceMappingURL=app.cjs.map
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNTBiNzk5NjAzMDk2YTFmNy9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZV9zZXNzaW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3Byb2JlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3NyY19jYWNoZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9jZHAudHMiLCIuLi9zcmMvcmVuZGVyZXIvc3RlZ28udHMiLCIuLi9zcmMvcmVuZGVyZXIvcHJvdG9jb2wudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NpbmsudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcmVuZGVyZXIvaHRtbF9jaGVjay50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInB1cExvZ0xldmVsIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwQXVkaW9QcmVsb2FkIiwicHVwSWZyYW1lUHJlbG9hZCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwiVEFHIiwic3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIiLCJkdW1wRGlyIiwiYXBwIiwibWtkaXJTeW5jIiwiY3Jhc2hSZXBvcnRlciIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJSZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJub3JtYWxpemVTb3VyY2UiLCJzIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwiV0FJVF9USU1FT1VUX01TIiwiREVDT0RFX0FIRUFEIiwiS0VFUF9CRUhJTkQiLCJEZWNvZGVTZXNzaW9uIiwibWV0YSIsInNyYyIsImlkeCIsImhpdCIsInciLCJlbnRyeSIsInIiLCJnZW4iLCJfc3RhY2siLCJpbnB1dCIsIl9fdXNpbmciLCJEZW11eGVyIiwic3RyZWFtIiwiQVZNRURJQV9UWVBFX1ZJREVPIiwiZGVjIiwiRGVjb2RlciIsImZyYW1lV2lkdGgiLCJmcmFtZUhlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwiZnBzIiwic2NhbGUiLCJmaWx0ZXIiLCJGaWx0ZXJBUEkiLCJfZnJhbWUiLCJmcmFtZSIsInBhY2tSZ2JhIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJfcHJvbWlzZSIsImZsb29yIiwiayIsInJvdyIsInN0cmlkZSIsIm91dCIsInkiLCJQUk9CRV9USU1FT1VUX01TIiwicHJvYmUiLCJkdXJhdGlvbiIsIkNBQ0hFX0RJUiIsInRtcGRpciIsIlNyY0NhY2hlIiwicCIsInJtIiwibWtkaXIiLCJkc3QiLCJjcmVhdGVIYXNoIiwicGlja0V4dCIsImV4aXN0c1N5bmMiLCJ0MCIsInJlcyIsIndyaXRlRmlsZSIsInVybCIsIm0iLCJGcmFtZVNlcnZlciIsImlkIiwia2V5IiwibG9jYWxQYXRoIiwiZXZlbiIsIm4iLCJmcmFtZVNlcnZlciIsIlNDSEVNRSIsIkNPUlNfSEVBREVSUyIsInNldHVwRnJhbWVQcm90b2NvbCIsInByb3RvY29sIiwicmVxIiwianNvbk9rIiwiaW50IiwicmdiYU9rIiwiYnl0ZXMiLCJjb3B5IiwiZmFsbGJhY2siLCJ2Iiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwibGFiZWwiLCJ0aW1lciIsIkNEUF9USU1FT1VUX01TIiwic2VuZCIsImNkcCIsIm1ldGhvZCIsInBhcmFtcyIsImV2YWxJbiIsImV4cHJlc3Npb24iLCJhZHZhbmNlVmlydHVhbFRpbWUiLCJidWRnZXQiLCJ0aW1lb3V0IiwiaGFuZGxlciIsInBhdXNlVmlydHVhbFRpbWUiLCJyZXNpemVEcmF3YWJsZSIsInNpemUiLCJGUkFNRV9TWU5DX01BUktFUl9XSURUSCIsIlNURUdPX1RJQ0tfQ0hBTk5FTCIsImJ1aWxkU3RlZ29IVE1MIiwidGFyZ2V0VVJMIiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwic3dhcEJ1ZmZlciIsIndjIiwiZXhwZWN0ZWQiLCJpbnRlcnZhbCIsInN3YXBwZWQiLCJQVVBfU0NIRU1FIiwiRlJBTUVfU0NIRU1FIiwiUFJJVklMRUdFRF9QUklWSUxFR0VTIiwic2V0dXBQdXBQcm90b2NvbCIsImh0bWwiLCJjcmVhdGVTdGVnb1VSTCIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5Iiwia2VlcCIsIm9wZW5WaWRlb0N0eCIsImN0eCIsIkNvZGVjQ29udGV4dCIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiRkZtcGVnRXJyb3IiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJGcmFtZSIsIm1ha2VQYWNrZXQiLCJwa3QiLCJQYWNrZXQiLCJkcmFpblBhY2tldHMiLCJtdXhlciIsIkFWRVJST1JfRUFHQUlOIiwiQVZFUlJPUl9FT0YiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJjb2RlYyIsIkNvZGVjIiwiRkZfREVDT0RFUl9QTkciLCJvayIsInBuZyIsIkFWX1BJWF9GTVRfQkdSQSIsIkFWX1BJWF9GTVRfWVVWQTQyMFAiLCJwbmdEYXRhIiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJmbXQiLCJTV1NfQklMSU5FQVIiLCJTQU1QTEVfRk1UX05BTUUiLCJBVl9TQU1QTEVfRk1UX0ZMVCIsIkFWX1NBTVBMRV9GTVRfRkxUUCIsIkF1ZGlvRW5jb2RlciIsIl9BdWRpb0VuY29kZXIiLCJvdXRGbXQiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJ6ZXJvcyIsIkFOTkVYX0JfU1RBUlRfQ09ERSIsIk5BTF9CTEFfV19MUCIsIk5BTF9SU1ZfSVJBUF9WQ0wyMyIsIk5BTF9WUFMiLCJOQUxfU1BTIiwiTkFMX1BQUyIsIk5BTF9TRUlfUFJFRklYIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiVlBTX1BUTF9CSVQiLCJTUFNfUFRMX0JJVCIsIlBUTF9USUVSX0JJVCIsIlBUTF9DT01QQVQyX0JJVCIsIlNMSUNFX1RZUEVfQiIsIlNMSUNFX1RZUEVfUCIsInNldEJpdCIsImJpdE9mZnNldCIsIm1hc2siLCJjdXIiLCJwYXRjaFB0bCIsIm5hbERhdGEiLCJwdGxTdGFydEJpdCIsInJic3AiLCJwYXRjaEhldmNBbHBoYVB0bCIsImNodW5rcyIsInJld3JpdGVPbmVVZSIsIm5hbEluIiwibmV3VmFsIiwiYnIiLCJidyIsInJld3JpdGVUd29VZSIsIm5ld1ZhbDEiLCJuZXdWYWwyIiwicmV3cml0ZUFscGhhU3BzIiwic3BzIiwiU1BTX1NFUV9JRF9CSVQiLCJyZXdyaXRlQWxwaGFQcHMiLCJwcHMiLCJyZWFkU2UiLCJ1ZSIsInBhcnNlSW5saW5lU3RSZWZQaWNTZXQiLCJudW1EZWx0YVBvY3NTZXQwIiwiZGVsdGFJZHhNaW51czEiLCJudW1OZWciLCJudW1Qb3MiLCJwYXJzZUhlYWRlclRvQWxpZ25tZW50IiwibmFsVHlwZSIsImNmZyIsImlzSXJhcCIsInNsaWNlVHlwZSIsInJld3JpdGVBbHBoYVNsaWNlSGVhZGVyIiwic2xpY2UiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwicm93QmFzZSIsImRzdEJhc2UiLCJyZXdyaXRlQWxwaGFQYXJhbVNldCIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJhRGF0YSIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJEdWFsTGF5ZXJNdXgiLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJ0YWciLCJiYXNlIiwiYWxwaGEiLCJoZXZjQ2ZnIiwiaW50ZXJsZWF2ZWQiLCJmYWlsIiwiZmllbGQiLCJnb3QiLCJza2lwUHRsIiwibWF4U3ViTGF5ZXJzIiwic3ViUHJvZmlsZVByZXNlbnQiLCJzdWJMZXZlbFByZXNlbnQiLCJwYXJzZVNwcyIsInNwc1Jic3AiLCJjaHJvbWFGb3JtYXQiLCJsb2cyTWF4UG9jTHNiIiwib3JkZXJDb3VudCIsInNhb0VuYWJsZWQiLCJudW1TdFJwcyIsImxvbmdUZXJtUmVmUGljc1ByZXNlbnQiLCJzcHNUZW1wb3JhbE12cEVuYWJsZWQiLCJwYXJzZVBwcyIsInBwc1Jic3AiLCJudW1FeHRyYVNsaWNlSGVhZGVyQml0cyIsImNhYmFjSW5pdFByZXNlbnQiLCJwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCIsImRlYmxvY2tpbmdDb250cm9sUHJlc2VudCIsInNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUiLCJwYXJzZU52ZW5jSGV2Y0NvbmZpZyIsImV4dHJhZGF0YSIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYWxwaGFTd0ZyYW1lIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidW5pZmllZCIsImNocm9tYVNpemUiLCJhbHBoYUJ1ZiIsInB0cyIsImRlc3luYyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJEaWN0aW9uYXJ5IiwiRkZfRU5DT0RFUl9MSUJWUFhfVlA5IiwiT3V0cHV0U2luayIsIl9PdXRwdXRTaW5rIiwicGF0aCIsImxvd2VyIiwidmlkZW8iLCJhdWRpbyIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsIm91dEZpbGVzIiwia2luZHMiLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiRnJhbWVEcm9wU3RhdHMiLCJjb3VudCIsInRvdGFsRHJvcHBlZCIsImxvY2FsU3VtIiwibWF4QnVyc3QiLCJidXJzdCIsInBlcmNlcHRpYmxlIiwiZyIsImwiLCJzY29yZSIsInNpemVFcXVhbHMiLCJhIiwiQVVESU9fTUVUQV9DSEFOTkVMIiwiQVVESU9fQ0hVTktfQ0hBTk5FTCIsImF0dGFjaEF1ZGlvTGlzdGVuZXJzIiwiZW5jb2RlciIsImdldFZpZGVvVGltZU1zIiwib25FcnJvciIsIm9uTWV0YSIsIl9lIiwic3RhcnRNcyIsInNpbGVuY2VTYW1wbGVzIiwib25DaHVuayIsImJ1ZmZlciIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiU1VQUE9SVEVEX1BST1RPQ09MUyIsIlNPVVJDRV9QQVRURVJOIiwiY2hlY2tIVE1MIiwiV2FpdGFibGVFdmVudCIsIm1hcCIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsImNhbmNlbE1lZGlhIiwibGltaXRlciIsImV2ZW50cyIsIndhaXQiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0b2xlcmFudCIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJkaXNwb3NlV2luZG93IiwicGlja1ByZWxvYWQiLCJyZW5kZXJlciIsIm9wZW5XaW5kb3ciLCJvbkNyZWF0ZWQiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsIm9wZW5XaW5kb3dXaXRoUmV0cnkiLCJsb2FkV2luZG93Iiwid2FybXVwIiwib3BlbiIsInN0YWNrIiwicmVuZGVyIiwib25Qcm9ncmVzcyIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0V3JpdHRlblRpbWUiLCJwcm9ncmVzcyIsImVuY29kZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJkcm9wU2NvcmUiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsIkFEVkFOQ0VfVElNRU9VVF9NUyIsImFkdmFuY2VWaWRlb3MiLCJ0aW1lc3RhbXBNcyIsImV4cHIiLCJldiIsIlRJQ0tfU1lNQk9MIiwidGljayIsInRpY2tFdiIsImxhc3RUcyIsImxhZ2d5IiwiX2QiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJtYWluIiwiaWZyYW1lIiwiZnJhbWVNcyIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXci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QSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUsrQixDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksT0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNUQvQixDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRXROLEVBQU8sRUFBRSxDQUFBLENBQ2RzTixDQUFBQSxDQUFHLENBQUEsQ0FBRXJOLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZxTixDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBRVBBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDWCxDQU9PLFNBQVNpQyxFQUFBQSxDQUFjTixDQUFBQSxDQUFpQmpQLENBQUFBLENBQWVDLENBQUFBLENBQXdCLENBQ3BGLElBQU1vUCxDQUFBQSxDQUFNTCxHQUFXQyxDQUFPLENBQUEsQ0FDOUIsR0FBSSxDQUFDSSxDQUFBQSxDQUFLLE9BQU9KLENBQUFBLENBRWpCLElBQU0zQixFQUFLLElBQUl4RCxDQUFBQSxDQUNmLE9BQUFzRixFQUFBQSxDQUFhOUIsRUFBSStCLENBQUcsQ0FBQSxDQUNwQkMsRUFBQUEsQ0FBa0JoQyxDQUFBQSxDQUFJK0IsRUFBS3JQLENBQUFBLENBQU9DLENBQU0sQ0FBQSxDQUV4Q3FOLENBQUFBLENBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDZEEsRUFBRyxLQUFBLENBQU0sQ0FBQyxDQUFBLENBQ0hyQixDQUFBQSxDQUF1QnhDLEVBQVM2RCxDQUFBQSxDQUFHLElBQUksQ0FBQyxDQUNqRCxDQ2pITyxTQUFTa0MsRUFBQUEsQ0FBNEJDLENBQUFBLENBQWtCOUYsQ0FBQUEsQ0FBbUIsQ0FDL0UsSUFBTTVLLENBQUFBLENBQU0wUSxDQUFBQSxDQUFVLE9BQU8sQ0FBQyxDQUFBLENBQ3hCQyxDQUFBQSxDQUFRRCxDQUFBQSxDQUFVLFdBQVcsQ0FBQyxDQUFBLENBQ3BDLEdBQUksQ0FBQzFRLEdBQU8sQ0FBQzJRLENBQUFBLENBQU8sTUFBTSxJQUFJLEtBQUEsQ0FBTSxpQ0FBaUMsQ0FBQSxDQUNyRSxJQUFNeFEsRUFBSXVRLENBQUFBLENBQVUsS0FBQSxDQUNkRSxDQUFBQSxDQUFJRixDQUFBQSxDQUFVLE1BQUEsQ0FDZEcsQ0FBQUEsQ0FBUTFRLENBQUFBLENBQUl5USxDQUFBQSxDQUNsQixHQUFJNVEsQ0FBQUEsQ0FBSSxVQUFBLENBQWEsQ0FBQSxHQUFNLENBQUEsRUFBSzJRLENBQUFBLEdBQVV4USxDQUFBQSxDQUFJLENBQUEsQ0FBRyxDQUMvQyxJQUFNMlEsQ0FBQUEsQ0FBUSxJQUFJLFdBQUEsQ0FBWTlRLENBQUFBLENBQUksT0FBUUEsQ0FBQUEsQ0FBSSxVQUFBLENBQVk2USxDQUFLLENBQUEsQ0FDL0QsUUFBU3hLLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJd0ssQ0FBQUEsQ0FBT3hLLENBQUFBLEVBQUFBLENBQUt1RSxDQUFBQSxDQUFJdkUsQ0FBQyxDQUFBLENBQUl5SyxFQUFNekssQ0FBQyxDQUFBLEdBQU8sR0FDekQsQ0FBQSxhQUNXakUsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUl3TyxDQUFBQSxDQUFHeE8sSUFBSyxDQUMxQixJQUFNMk8sQ0FBQUEsQ0FBVTNPLENBQUFBLENBQUl1TyxDQUFBQSxDQUFRLENBQUEsQ0FDdEJLLENBQUFBLENBQVU1TyxDQUFBQSxDQUFJakMsRUFDcEIsSUFBQSxJQUFTckcsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUlxRyxFQUFHckcsQ0FBQUEsRUFBQUEsQ0FBSzhRLENBQUFBLENBQUlvRyxDQUFBQSxDQUFVbFgsQ0FBQyxFQUFJa0csQ0FBQUEsQ0FBSStRLENBQUFBLENBQVVqWCxDQUFBQSxDQUFJLENBQUMsRUFDcEUsQ0FFSixDQVVBLFNBQVNtWCxHQUFxQmpGLENBQUFBLENBQWN2UCxDQUFBQSxDQUFzQixDQUNoRSxPQUFJdVAsQ0FBQUEsR0FBU04sRUFBQUEsQ0FBZ0JpRCxFQUFBQSxDQUFnQmxTLENBQUksRUFDN0N1UCxDQUFBQSxHQUFTTCxFQUFBQSxDQUFnQm1ELEVBQUFBLENBQWdCclMsQ0FBSSxDQUFBLENBQzFDQSxDQUNULENBRU8sU0FBU3lVLEdBQXNCM1IsQ0FBQUEsQ0FBdUMsQ0FDM0UsR0FBTSxDQUFFLGNBQUE0UixDQUFBQSxDQUFlLGNBQUEsQ0FBQUMsQ0FBZSxDQUFBLENBQUk3UixFQUNwQzhSLENBQUFBLENBQVcvRSxDQUFBQSxDQUFjNkUsQ0FBYSxDQUFBLENBQ3RDRyxDQUFBQSxDQUFZaEYsQ0FBQUEsQ0FBYzhFLENBQWMsQ0FBQSxDQUV4Q0csRUFBYyxJQUFJLEdBQUEsQ0FDeEIsSUFBQSxJQUFXekUsQ0FBQUEsSUFBT3dFLEVBQVcsQ0FDM0IsR0FBSXhFLENBQUFBLENBQUksSUFBQSxHQUFTckIsR0FBUyxTQUMxQixJQUFNK0YsQ0FBQUEsQ0FBTUQsQ0FBQUEsQ0FBWSxHQUFBLENBQUl6RSxDQUFBQSxDQUFJLElBQUksQ0FBQSxFQUFLLEVBQUMsQ0FDMUMwRSxDQUFBQSxDQUFJLElBQUEsQ0FBSzFFLENBQUcsRUFDWnlFLENBQUFBLENBQVksR0FBQSxDQUFJekUsQ0FBQUEsQ0FBSSxJQUFBLENBQU0wRSxDQUFHLEVBQy9CLENBRUEsSUFBTXRELENBQUFBLENBQW1CLEVBQUMsQ0FDcEJ1RCxDQUFBQSxDQUFVLElBQUksSUFDcEIsSUFBQSxJQUFXM0UsQ0FBQUEsSUFBT3VFLENBQUFBLENBQVUsQ0FDMUIsSUFBTTVVLENBQUFBLENBQU9xUSxDQUFBQSxDQUFJLElBQUEsR0FBU3JCLEdBQVUrRSxFQUFBQSxDQUFjMUQsQ0FBQUEsQ0FBSSxJQUFBLENBQU12TixDQUFBQSxDQUFLLEtBQUEsQ0FBT0EsQ0FBQUEsQ0FBSyxNQUFNLENBQUEsQ0FBSXVOLEVBQUksSUFBQSxDQUUzRixHQURBb0IsQ0FBQUEsQ0FBTyxJQUFBLENBQUs1QyxFQUFvQjdPLENBQUksQ0FBQSxDQUNoQyxDQUFDZ1YsQ0FBQUEsQ0FBUSxJQUFJM0UsQ0FBQUEsQ0FBSSxJQUFJLENBQUEsQ0FBRyxDQUMxQjJFLENBQUFBLENBQVEsR0FBQSxDQUFJM0UsQ0FBQUEsQ0FBSSxJQUFJLEVBQ3BCLElBQUEsSUFBVzRFLENBQUFBLElBQVlILENBQUFBLENBQVksR0FBQSxDQUFJekUsQ0FBQUEsQ0FBSSxJQUFJLENBQUEsRUFBSyxHQUFJLENBQ3RELElBQU02RSxDQUFBQSxDQUFRVixFQUFBQSxDQUFxQm5FLENBQUFBLENBQUksSUFBQSxDQUFNNEUsQ0FBQUEsQ0FBUyxJQUFJLEVBQzFEeEQsQ0FBQUEsQ0FBTyxJQUFBLENBQUs1QyxDQUFBQSxDQUFvQnVCLEVBQUFBLENBQWtCOEUsRUFBTyxDQUFDLENBQUMsRUFDN0QsQ0FDRixDQUNGLENBRUEsT0FBQXpELENBQUFBLENBQU8sSUFBQSxDQUFLMEQsRUFBQUEsRUFBMEIsQ0FBQSxDQUMvQixNQUFBLENBQU8sT0FBTzFELENBQU0sQ0FDN0IsQ0FFTyxTQUFTMEQsRUFBQUEsRUFBbUMsQ0FHakQsR0FBTSxDQUFDQyxFQUFJQyxDQUFFLENBQUEsQ0FBSTNGLEVBQUFBLENBQWdCUCxFQUFBQSxDQUFnQixDQUFBLENBQUcsQ0FBQyxDQUFBLENBRS9DakIsQ0FBQUEsQ0FBaUIsRUFBQyxDQUNsQm9ILENBQUFBLENBQVksQ0FBQy9HLENBQUFBLENBQWFwSCxJQUFjLENBQzVDLElBQUEsSUFBU3lDLENBQUFBLENBQUl6QyxDQUFBQSxDQUFJLEVBQUd5QyxDQUFBQSxFQUFLLENBQUEsQ0FBR0EsQ0FBQUEsRUFBQUEsQ0FBS3NFLENBQUFBLENBQUssSUFBQSxDQUFNSyxDQUFBQSxFQUFPM0UsQ0FBQUEsQ0FBSyxDQUFDLEVBQzNELENBQUEsQ0FVQSxJQVJBMEwsQ0FBQUEsQ0FBVSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2RBLENBQUFBLENBQVUsQ0FBQSxDQUFHLENBQUMsRUFDZEEsQ0FBQUEsQ0FBVSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2RBLENBQUFBLENBQVUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNkQSxFQUFVLEdBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDaEJBLENBQUFBLENBQVUsRUFBRyxDQUFDLENBQUEsQ0FDZEEsQ0FBQUEsQ0FBVSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2RBLENBQUFBLENBQVUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNQcEgsQ0FBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQSxHQUFNLEdBQUdvSCxDQUFBQSxDQUFVLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFNUMsT0FBTyxNQUFBLENBQU8sTUFBQSxDQUFPLENBQ25CekcsRUFDQSxNQUFBLENBQU8sSUFBQSxDQUFLLENBQUN1RyxDQUFBQSxDQUFJQyxDQUFFLENBQUMsQ0FBQSxDQUNwQixNQUFBLENBQU8sS0FBSyxDQUFDLEdBQUEsQ0FBYSxDQUFXLENBQUMsRUFDdENwSCxDQUFBQSxDQUFTQyxDQUFJLENBQUEsQ0FDYixNQUFBLENBQU8sS0FBSyxDQUFDLEdBQUksQ0FBQyxDQUNwQixDQUFDLENBQ0gsQ0FFTyxTQUFTcUgsR0FBc0JYLENBQUFBLENBQXFCQyxDQUFBQSxDQUFzQjdCLENBQUFBLENBQThCLENBQzdHLElBQU12QixDQUFBQSxDQUFtQixFQUFDLENBQzFCLFFBQVdwQixDQUFBQSxJQUFPdUUsQ0FBQUEsQ0FDaEJuRCxDQUFBQSxDQUFPLElBQUEsQ0FBSzVDLENBQUFBLENBQW9Cd0IsQ0FBQUEsQ0FBSSxJQUFJLENBQUEsQ0FFMUMsUUFBV0EsQ0FBQUEsSUFBT3dFLENBQUFBLENBQ2hCLEdBQUl4RSxDQUFBQSxDQUFJLEtBQU9yQixFQUFBQSxDQUFTLENBQ3RCLElBQU1oUCxDQUFBQSxDQUFPbVQsR0FBd0I5QyxDQUFBQSxDQUFJLElBQUEsQ0FBTUEsQ0FBQUEsQ0FBSSxJQUFBLENBQU0yQyxDQUFHLENBQUEsQ0FDNUR2QixDQUFBQSxDQUFPLElBQUEsQ0FBSzVDLEVBQW9CdUIsRUFBQUEsQ0FBa0JwUSxDQUFBQSxDQUFNLENBQUMsQ0FBQyxFQUM1RCxDQUVGLE9BQU8sTUFBQSxDQUFPLE9BQU95UixDQUFNLENBQzdCLENDbEdPLElBQU0rRCxFQUFBQSxDQUFOLEtBQW1CLENBQ2hCLEVBQUEsQ0FDQSxXQUE4QixFQUFDLENBQy9CLFdBQUEsQ0FBK0IsRUFBQyxDQUV4QyxXQUFBLENBQVluVCxDQUFBQSxDQUF3QixDQUNsQyxLQUFLLEVBQUEsQ0FBS0EsRUFDWixDQUVBLE1BQU0sTUFBTXNKLENBQUFBLENBQW1DLENBQzdDLEdBQU0sQ0FBRSxRQUFBOEosQ0FBQUEsQ0FBUyxRQUFBLENBQUFDLENBQUFBLENBQVUsT0FBQSxDQUFBQyxDQUFBQSxDQUFTLFFBQUEsQ0FBQUMsQ0FBUyxDQUFBLENBQUksS0FBSyxFQUFBLENBS3RELElBSEEsSUFBQSxDQUFLLFVBQUEsQ0FBVyxLQUFLLEdBQUksTUFBTSxJQUFBLENBQUssVUFBQSxDQUFXSCxFQUFTRSxDQUFBQSxDQUFTLE1BQU0sQ0FBRSxDQUFBLENBQ3pFLElBQUEsQ0FBSyxXQUFBLENBQVksSUFBQSxDQUFLLEdBQUksTUFBTSxJQUFBLENBQUssVUFBQSxDQUFXRCxDQUFBQSxDQUFVRSxDQUFBQSxDQUFVLE9BQU8sQ0FBRSxDQUFBLENBRXRFLElBQUEsQ0FBSyxXQUFXLE1BQUEsRUFBVSxJQUFBLENBQUssV0FBQSxDQUFZLE1BQUEsRUFDaEQsTUFBTSxJQUFBLENBQUssU0FBQSxDQUFVLElBQUEsQ0FBSyxXQUFXLEtBQUEsRUFBTSxDQUFJLElBQUEsQ0FBSyxXQUFBLENBQVksT0FBTSxDQUFJakssQ0FBSyxFQUVuRixDQUdBLGdCQUFxQyxDQUNuQyxHQUFJLEVBQUEsQ0FBQyxJQUFBLENBQUssVUFBQSxDQUFXLE1BQUEsRUFBVSxDQUFDLElBQUEsQ0FBSyxZQUFZLE1BQUEsQ0FBQSxDQUNqRCxPQUFPLENBQUEsS0FBQSxFQUFRLElBQUEsQ0FBSyxVQUFBLENBQVcsTUFBTSxDQUFBLFFBQUEsRUFBVyxJQUFBLENBQUssWUFBWSxNQUFNLENBQUEsU0FBQSxDQUN6RSxDQUdBLE1BQWMsVUFBQSxDQUFXWixDQUFBQSxDQUFtQlMsQ0FBQUEsQ0FBYXFLLENBQUFBLENBQXVDLENBQzlGLElBQU1uUSxDQUFBQSxDQUF1QixFQUFDLENBQzlCLE9BQWEsQ0FDWCxJQUFNcEUsQ0FBQUEsQ0FBTSxNQUFNeUosRUFBSSxhQUFBLENBQWNTLENBQUcsQ0FBQSxDQUN2QyxHQUFJbEssQ0FBQUEsRUFBTyxDQUFBLENBQUcsQ0FDWm9FLENBQUFBLENBQUksS0FBSyxJQUFBLENBQUssUUFBQSxDQUFTOEYsQ0FBRyxDQUFDLENBQUEsQ0FDM0JBLENBQUFBLENBQUksS0FBQSxFQUFNLENBQ1YsUUFDRixDQUNBLEdBQUlsSyxDQUFBQSxHQUFRc0ssd0JBQUFBLEVBQWtCdEssQ0FBQUEsR0FBUXVLLHFCQUFBQSxDQUFhLE9BQU9uRyxDQUFBQSxDQUMxRHlGLG1CQUFZLFlBQUEsQ0FBYTdKLENBQUFBLENBQUssQ0FBQSxNQUFBLEVBQVN1VSxDQUFHLGdCQUFnQixFQUM1RCxDQUNGLENBRVEsUUFBQSxDQUFTckssRUFBNEIsQ0FFM0MsT0FBTyxDQUFFLElBQUEsQ0FBTSxNQUFBLENBQU8sSUFBQSxDQUFLQSxDQUFBQSxDQUFJLElBQUssRUFBRyxHQUFBLENBQUtBLENBQUFBLENBQUksR0FBQSxDQUFLLEdBQUEsQ0FBS0EsRUFBSSxHQUFBLENBQUssUUFBQSxDQUFVQSxDQUFBQSxDQUFJLFFBQUEsQ0FBVSxNQUFPQSxDQUFBQSxDQUFJLEtBQU0sQ0FDOUcsQ0FFQSxNQUFjLFNBQUEsQ0FBVXNLLENBQUFBLENBQXFCQyxDQUFBQSxDQUFzQnBLLEVBQW1DLENBQ3BHLEdBQU0sQ0FBRSxPQUFBLENBQUFnSyxFQUFTLE9BQUEsQ0FBQUYsQ0FBQUEsQ0FBUyxNQUFBLENBQUF2UixDQUFBQSxDQUFRLFFBQUE4UixDQUFRLENBQUEsQ0FBSSxJQUFBLENBQUssRUFBQSxDQUU3Q0MsQ0FBQUEsQ0FBY1YsRUFBQUEsQ0FBc0IxRixDQUFBQSxDQUFjaUcsQ0FBQUEsQ0FBSyxJQUFJLENBQUEsQ0FBR2pHLENBQUFBLENBQWNrRyxDQUFBQSxDQUFNLElBQUksQ0FBQSxDQUFHQyxDQUFPLENBQUEsQ0FFdEdMLENBQUFBLENBQVEsS0FBT25FLEVBQUFBLENBQWtCeUUsQ0FBVyxDQUFBLENBQzVDTixDQUFBQSxDQUFRLEdBQUEsQ0FBTUcsQ0FBQUEsQ0FBSyxHQUFBLENBQ25CSCxDQUFBQSxDQUFRLElBQU1HLENBQUFBLENBQUssR0FBQSxDQUNuQkgsQ0FBQUEsQ0FBUSxRQUFBLENBQVdHLEVBQUssUUFBQSxHQUFhLEVBQUEsQ0FBSyxFQUFBLENBQUtBLENBQUFBLENBQUssU0FDcERILENBQUFBLENBQVEsS0FBQSxDQUFRRyxDQUFBQSxDQUFLLEtBQUEsQ0FDckJILENBQUFBLENBQVEsV0FBQSxDQUFjelIsQ0FBQUEsQ0FBTyxLQUFBLENBQzdCeVIsRUFBUSxTQUFBLENBQVVGLENBQUFBLENBQVEsUUFBQSxDQUFVdlIsQ0FBQUEsQ0FBTyxRQUFRLENBQUEsQ0FDbkQsTUFBTXlILENBQUFBLENBQU0sV0FBQSxDQUFZZ0ssQ0FBTyxDQUFBLENBQy9CQSxDQUFBQSxDQUFRLEtBQUEsR0FDVixDQUNGLENBQUEsQ0N4RUEsU0FBU08sQ0FBQUEsQ0FBS0MsRUFBZUMsQ0FBQUEsQ0FBY2xNLENBQUFBLENBQXlCLENBQ2xFLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSx1Q0FBQSxFQUEwQ2lNLENBQUssQ0FBQSxDQUFBLEVBQUlDLENBQUcsQ0FBQSxXQUFBLEVBQWNsTSxDQUFRLENBQUEsQ0FBRSxDQUNoRyxDQUVBLFNBQVNtTSxFQUFBQSxDQUFReEUsQ0FBQUEsQ0FBZXlFLEVBQTRCLENBQzFEekUsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBUyxDQUFBLENBQ2pCQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxFQUFFLEVBQ1ZBLENBQUFBLENBQUcsSUFBQSxDQUFLLEVBQUUsQ0FBQSxDQUNWQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVCxJQUFNMEUsQ0FBQUEsQ0FBOEIsRUFBQyxDQUMvQkMsQ0FBQUEsQ0FBNEIsRUFBQyxDQUNuQyxJQUFBLElBQVMsQ0FBQSxDQUFJLENBQUEsQ0FBRyxFQUFJRixDQUFBQSxDQUFjLENBQUEsRUFBQSxDQUNoQ0MsQ0FBQUEsQ0FBa0IsSUFBQSxDQUFLMUUsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLEVBQ2pDMkUsQ0FBQUEsQ0FBZ0IsSUFBQSxDQUFLM0UsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FFakMsR0FBSXlFLENBQUFBLENBQWUsRUFBRyxJQUFBLElBQVMsQ0FBQSxDQUFJQSxDQUFBQSxDQUFjLENBQUEsQ0FBSSxDQUFBLENBQUcsQ0FBQSxFQUFBLENBQUt6RSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDdEUsSUFBQSxJQUFTLENBQUEsQ0FBSSxDQUFBLENBQUcsRUFBSXlFLENBQUFBLENBQWMsQ0FBQSxFQUFBLENBQzVCQyxDQUFBQSxDQUFrQixDQUFDLEdBQUcxRSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxFQUFXLENBQUEsQ0FDekMyRSxDQUFBQSxDQUFnQixDQUFDLENBQUEsRUFBRzNFLENBQUFBLENBQUcsS0FBSyxDQUFDLEVBRXJDLENBRUEsU0FBUzRFLEVBQUFBLENBQVNDLENBQUFBLENBT2hCLENBQ0EsSUFBTTdFLEVBQUssSUFBSWxELENBQUFBLENBQVUrSCxDQUFPLENBQUEsQ0FDaEM3RSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxFQUFFLENBQUEsQ0FDVkEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsSUFBTXlFLEVBQWV6RSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFMUJ5RSxJQUFpQixDQUFBLEVBQUdKLENBQUFBLENBQUssMkJBQUEsQ0FBNkJJLENBQUFBLENBQWMsR0FBRyxDQUFBLENBQzNFekUsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1R3RSxFQUFBQSxDQUFReEUsQ0FBQUEsQ0FBSXlFLENBQVksQ0FBQSxDQUN4QnpFLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQ1YsSUFBTThFLENBQUFBLENBQWU5RSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUMzQjhFLENBQUFBLEdBQWlCLENBQUEsRUFBR1QsQ0FBQUEsQ0FBSyxtQkFBQSxDQUFxQlMsRUFBYyxTQUFJLENBQUEsQ0FDcEU5RSxDQUFBQSxDQUFHLE1BQUEsR0FDSEEsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDTkEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxHQUNYQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUFHQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUFHQSxFQUFHLE1BQUEsRUFBTyxDQUFHQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUFBLENBRW5EQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUNWQSxFQUFHLE1BQUEsRUFBTyxDQUNWLElBQU0rRSxDQUFBQSxDQUFnQi9FLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQUksQ0FBQSxDQUU5QmdGLEVBRGVoRixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDSXlFLEVBQWUsQ0FBQSxDQUFJLENBQUEsQ0FDckQsSUFBQSxJQUFTMU0sQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJaU4sQ0FBQUEsQ0FBWWpOLENBQUFBLEVBQUFBLENBQzlCaUksQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FBR0EsQ0FBQUEsQ0FBRyxNQUFBLEdBQVVBLENBQUFBLENBQUcsTUFBQSxFQUFPLENBRXRDQSxDQUFBQSxDQUFHLFFBQU8sQ0FBR0EsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FBR0EsRUFBRyxNQUFBLEVBQU8sQ0FBR0EsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDakRBLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQUdBLEVBQUcsTUFBQSxFQUFPLENBQ25CQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsRUFBR3FFLENBQUFBLENBQUssMkJBQUEsQ0FBNkIsQ0FBQSxDQUFHLEdBQUcsQ0FBQSxDQUN4RHJFLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNULElBQU1pRixDQUFBQSxDQUFhakYsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxHQUFNLENBQUEsQ0FDOUJBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxFQUFHcUUsQ0FBQUEsQ0FBSyxtQkFBb0IsQ0FBQSxDQUFHLEdBQUcsQ0FBQSxDQUMvQyxJQUFNYSxDQUFBQSxDQUFXbEYsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDdkJrRixFQUFXLENBQUEsRUFBR2IsQ0FBQUEsQ0FBSyw2QkFBQSxDQUErQmEsQ0FBQUEsQ0FBVSxTQUFJLENBQUEsQ0FDcEUsSUFBSXJFLENBQUFBLENBQW1CLENBQUEsQ0FDdkIsR0FBSXFFLENBQUFBLEdBQWEsQ0FBQSxDQUFHLENBQ2xCLElBQU1uRSxDQUFBQSxDQUFTZixDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUNuQmdCLEVBQVNoQixDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUN6QmEsQ0FBQUEsQ0FBbUJFLEVBQVNDLENBQUFBLENBQzVCLElBQUEsSUFBU2pKLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJZ0osQ0FBQUEsQ0FBUWhKLENBQUFBLEVBQUFBLENBQU9pSSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUFHQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ3pELElBQUEsSUFBU2pJLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJaUosRUFBUWpKLENBQUFBLEVBQUFBLENBQU9pSSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUFHQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQzNELENBQ0EsSUFBTW1GLENBQUFBLENBQXlCbkYsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLEdBQU0sQ0FBQSxDQUMxQ21GLENBQUFBLEVBQXdCZCxDQUFBQSxDQUFLLGlDQUFBLENBQW1DLENBQUEsQ0FBRyxHQUFHLENBQUEsQ0FDMUUsSUFBTWUsQ0FBQUEsQ0FBd0JwRixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsR0FBTSxDQUFBLENBQzdDLE9BQU8sQ0FBRSxjQUFBK0UsQ0FBQUEsQ0FBZSxVQUFBLENBQUFFLENBQUFBLENBQVksc0JBQUEsQ0FBd0JDLEVBQVUsZ0JBQUEsQ0FBQXJFLENBQUFBLENBQWtCLHNCQUFBLENBQUFzRSxDQUFBQSxDQUF3QixzQkFBQUMsQ0FBc0IsQ0FDeEksQ0FFQSxTQUFTQyxFQUFBQSxDQUFTQyxDQUFBQSxDQUEyRixDQUMzRyxJQUFNdEYsRUFBSyxJQUFJbEQsQ0FBQUEsQ0FBVXdJLENBQU8sQ0FBQSxDQUNoQ3RGLEVBQUcsSUFBQSxDQUFLLEVBQUUsQ0FBQSxDQUNWQSxDQUFBQSxDQUFHLFFBQU8sQ0FDVkEsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDVkEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNULElBQU11RixFQUEwQnZGLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNyQ3VGLElBQTRCLENBQUEsRUFBR2xCLENBQUFBLENBQUssNkJBQUEsQ0FBK0JrQixDQUFBQSxDQUF5QixHQUFHLENBQUEsQ0FDbkd2RixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVCxJQUFNd0YsQ0FBQUEsQ0FBbUJ4RixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsR0FBTSxDQUFBLENBQ3hDQSxFQUFHLE1BQUEsRUFBTyxDQUNWQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUNWQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUNWQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNMQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsRUFBR0EsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDMUJBLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQ1ZBLENBQUFBLENBQUcsUUFBTyxDQUNWQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ0xBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxFQUFHcUUsQ0FBQUEsQ0FBSyxxQkFBc0IsQ0FBQSxDQUFHLEdBQUcsQ0FBQSxDQUNqRHJFLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVCxJQUFNeUYsQ0FBQUEsQ0FBbUN6RixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsR0FBTSxFQUNsRDBGLENBQUFBLENBQTJCMUYsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ3RDMkYsQ0FBQUEsQ0FBa0MsS0FBQSxDQUN0QyxPQUFJRCxJQUNGMUYsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QyRixDQUFBQSxDQUFrQzNGLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsSUFBTSxDQUFBLENBQzVDMkYsQ0FBQUEsR0FDSDNGLENBQUFBLENBQUcsTUFBQSxHQUFVQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUFBLENBQUEsQ0FNcEIsQ0FBRSxpQkFBQXdGLENBQUFBLENBQWtCLGdDQUFBLENBRGNDLENBQUFBLEVBQW9DLENBQUNFLENBQ2xCLENBQzlELENBRU8sU0FBU0MsR0FBcUJDLENBQUFBLENBQW9DLENBQ3ZFLElBQU0zSCxDQUFBQSxDQUFPRixFQUFjNkgsQ0FBUyxDQUFBLENBQzlCdkYsQ0FBQUEsQ0FBTXBDLENBQUFBLENBQUssS0FBTTVJLENBQUFBLEVBQU1BLENBQUFBLENBQUUsSUFBQSxHQUFTOEgsRUFBTyxDQUFBLENBQ3pDcUQsQ0FBQUEsQ0FBTXZDLENBQUFBLENBQUssSUFBQSxDQUFNNUksR0FBTUEsQ0FBQUEsQ0FBRSxJQUFBLEdBQVMrSCxFQUFPLENBQUEsQ0FDL0MsR0FBSSxDQUFDaUQsQ0FBQUEsQ0FBSyxNQUFNLElBQUksTUFBTSw0Q0FBNEMsQ0FBQSxDQUN0RSxHQUFJLENBQUNHLENBQUFBLENBQUssTUFBTSxJQUFJLEtBQUEsQ0FBTSw0Q0FBNEMsQ0FBQSxDQUN0RSxJQUFNalEsQ0FBQUEsQ0FBSW9VLEVBQUFBLENBQVNqRyxDQUFBQSxDQUEwQjJCLENBQUFBLENBQUksSUFBSSxDQUFDLEVBQ2hEak0sQ0FBQUEsQ0FBSWdSLEVBQUFBLENBQVMxRyxDQUFBQSxDQUEwQjhCLENBQUFBLENBQUksSUFBSSxDQUFDLENBQUEsQ0FDdEQsT0FBTyxDQUFFLEdBQUdqUSxDQUFBQSxDQUFHLEdBQUc2RCxDQUFFLENBQ3RCLENDbEhPLElBQU15UixFQUFBQSxDQUFOLE1BQU1DLENBQTRDLENBQy9DLEVBQUEsQ0FDQSxJQUFBLENBQ0EsSUFBQSxDQUFPLEVBQUEsQ0FFUCxXQUFBLENBQVl2VixDQUFBQSxDQUFlLENBQ2pDLEtBQUssRUFBQSxDQUFLQSxDQUFBQSxDQUNWLElBQUEsQ0FBSyxJQUFBLENBQU8sSUFBSW1ULEVBQUFBLENBQWEsQ0FDM0IsT0FBQSxDQUFTblQsQ0FBQUEsQ0FBRSxRQUNYLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBRSxRQUFBLENBQ1osT0FBQSxDQUFTQSxDQUFBQSxDQUFFLE9BQUEsQ0FDWCxRQUFBLENBQVVBLENBQUFBLENBQUUsU0FDWixNQUFBLENBQVFBLENBQUFBLENBQUUsTUFBQSxDQUNWLE9BQUEsQ0FBU0EsRUFBRSxPQUNiLENBQUMsRUFDSCxDQUVBLGFBQWEsTUFBQSxDQUFPUyxDQUFBQSxDQUE2RCxDQUMvRSxHQUFNLENBQUUsS0FBQSxDQUFBMEIsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLEVBQVEsR0FBQSxDQUFBQyxDQUFBQSxDQUFLLE9BQUEsQ0FBQW1ULENBQUFBLENBQVMsS0FBQSxDQUFBbE0sQ0FBTSxDQUFBLENBQUk3SSxDQUFBQSxDQUV6Q2tKLEVBQVFDLFlBQUFBLENBQU0saUJBQUEsQ0FBa0I2TCwrQkFBcUIsQ0FBQSxDQUMzRCxHQUFJLENBQUM5TCxDQUFBQSxDQUFPLE1BQU0sSUFBSSxLQUFBLENBQU0sOEJBQThCLENBQUEsQ0FJMUQsSUFBTStMLEVBQVMsQ0FBRSxLQUFBLENBQUEvTCxDQUFBQSxDQUFPLEtBQUEsQ0FBQXhILEVBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQUMsQ0FBQUEsQ0FBSyxPQUFBLENBQUFtVCxDQUFBQSxDQUFTLE9BQUEsQ0FEbkMsQ0FBRSxPQUFRLElBQUEsQ0FBTSxFQUFBLENBQUksR0FBQSxDQUFLLElBQUEsQ0FBTSxNQUFPLENBQ2dCLENBQUEsQ0FFbEVwQyxDQUFBQSxDQUFVLE1BQU0zSyxFQUFhLENBQUUsR0FBR2lOLENBQUFBLENBQVEsV0FBQSxDQUFhMUwseUJBQWdCLENBQUEsQ0FBRyxrQkFBa0IsQ0FBQSxDQUU5RnFKLEVBQ0FDLENBQUFBLENBQ0FDLENBQUFBLENBQ0FvQyxDQUFBQSxDQUNKLEdBQUksQ0FHRixHQUZBdEMsQ0FBQUEsQ0FBVyxNQUFNNUssQ0FBQUEsQ0FBYSxDQUFFLEdBQUdpTixDQUFBQSxDQUFRLFdBQUEsQ0FBYUUsNEJBQW1CLENBQUEsQ0FBRyxtQkFBbUIsQ0FBQSxDQUU3RixDQUFDeEMsRUFBUSxTQUFBLEVBQWEsQ0FBQ0MsQ0FBQUEsQ0FBUyxTQUFBLENBQVcsTUFBTSxJQUFJLEtBQUEsQ0FBTSxnQ0FBZ0MsRUFDL0YsSUFBTU0sQ0FBQUEsQ0FBVXlCLEVBQUFBLENBQXFCaEMsQ0FBQUEsQ0FBUSxTQUFTLENBQUEsQ0FFaER2UixDQUFBQSxDQUFTeUgsQ0FBQUEsQ0FBTSxVQUFVOEosQ0FBQUEsQ0FBUyxNQUFNLENBQUEsQ0FDeEN5QyxDQUFBQSxDQUFVekQsR0FBc0IsQ0FDcEMsYUFBQSxDQUFlZ0IsQ0FBQUEsQ0FBUSxTQUFBLENBQ3ZCLGVBQWdCQyxDQUFBQSxDQUFTLFNBQUEsQ0FDekIsS0FBQSxDQUFBbFIsQ0FBQUEsQ0FDQSxNQUFBLENBQUFDLENBQ0YsQ0FBQyxDQUFBLENBRURQLEVBQU8sUUFBQSxDQUFTLFNBQUEsQ0FBWXNOLEVBQUFBLENBQWtCMEcsQ0FBTyxDQUFBLENBRXJELElBQU05RCxDQUFBQSxDQUFRNVAsQ0FBQUEsQ0FBUUMsRUFFaEIwVCxDQUFBQSxDQUFBQSxDQUFlM1QsQ0FBQUEsQ0FBUSxDQUFBLEVBQU0sQ0FBQSxHQUFPQyxDQUFBQSxDQUFTLENBQUEsRUFBTSxDQUFBLENBQUEsQ0FDbkQyVCxDQUFBQSxDQUFXLE9BQU8sS0FBQSxDQUFNaEUsQ0FBQUEsQ0FBUStELENBQUFBLENBQWEsQ0FBQyxFQUNwRCxPQUFBQyxDQUFBQSxDQUFTLElBQUEsQ0FBSyxHQUFBLENBQUtoRSxDQUFLLENBQUEsQ0FFeEJ1QixDQUFBQSxDQUFVcEssQ0FBQUEsRUFBVyxDQUNyQnFLLENBQUFBLENBQVdySyxDQUFBQSxFQUFXLENBQ3RCeU0sQ0FBQUEsQ0FBZTVNLEVBQVU1RyxDQUFBQSxDQUFPQyxDQUFBQSxDQUFRd1QsNEJBQWtCLENBQUEsQ0FFbkQsSUFBSUwsQ0FBQUEsQ0FBc0IsQ0FDL0IsT0FBQSxDQUFBbkMsRUFDQSxRQUFBLENBQUFDLENBQUFBLENBQ0EsT0FBQSxDQUFBQyxDQUFBQSxDQUNBLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxNQUFBLENBQUExUixDQUFBQSxDQUNBLGFBQUE4VCxDQUFBQSxDQUNBLFFBQUEsQ0FBQUksQ0FBQUEsQ0FDQSxPQUFBLENBQUFwQyxDQUNGLENBQUMsQ0FDSCxDQUFBLE1BQVNqVCxDQUFBQSxDQUFHLENBRVYsTUFBQTRTLENBQUFBLEVBQVMsSUFBQSxFQUFLLENBQ2RDLENBQUFBLEVBQVUsSUFBQSxFQUFLLENBQ2ZvQyxDQUFBQSxFQUFjLE1BQUssQ0FDbkJ0QyxDQUFBQSxFQUFVLFdBQUEsRUFBWSxDQUN0QkQsRUFBUSxXQUFBLEVBQVksQ0FDZDFTLENBQ1IsQ0FDRixDQUVBLE1BQU0sTUFBQSxDQUFPa1IsQ0FBQUEsQ0FBa0J0SSxDQUFBQSxDQUFtQyxDQUNoRSxHQUFNLENBQUUsT0FBQSxDQUFBOEosRUFBUyxRQUFBLENBQUFDLENBQUFBLENBQVUsWUFBQSxDQUFBc0MsQ0FBQUEsQ0FBYyxTQUFBSSxDQUFTLENBQUEsQ0FBSSxJQUFBLENBQUssRUFBQSxDQUNyREMsRUFBTSxJQUFBLENBQUssSUFBQSxFQUFBLENBR2pCckUsRUFBQUEsQ0FBNEJDLENBQUFBLENBQVdtRSxDQUFRLENBQUEsQ0FDL0NqTixrQkFBQUEsQ0FBWSxZQUFBLENBQWE2TSxFQUFhLFlBQUEsRUFBYSxDQUFHLHNCQUFzQixDQUFBLENBQzVFN00sa0JBQUFBLENBQVksWUFBQSxDQUFhNk0sQ0FBQUEsQ0FBYSxVQUFBLENBQVdJLENBQVEsQ0FBQSxDQUFHLG9CQUFvQixDQUFBLENBQ2hGSixDQUFBQSxDQUFhLEdBQUEsQ0FBTUssQ0FBQUEsQ0FDbkJMLENBQUFBLENBQWEsUUFBQSxDQUFXLEdBRXhCL0QsQ0FBQUEsQ0FBVSxHQUFBLENBQU1vRSxDQUFBQSxDQUNoQnBFLENBQUFBLENBQVUsU0FBVyxFQUFBLENBQ3JCOUksa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1zSyxFQUFRLFNBQUEsQ0FBVXhCLENBQVMsQ0FBQSxDQUFHLGdCQUFnQixDQUFBLENBQzdFOUksa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU11SyxFQUFTLFNBQUEsQ0FBVXNDLENBQVksQ0FBQSxDQUFHLGlCQUFpQixDQUFBLENBRWxGLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxNQUFNck0sQ0FBSyxFQUM3QixDQUVBLE1BQU0sS0FBQSxDQUFNQSxDQUFBQSxDQUFtQyxDQUM3QyxNQUFNLEtBQUssT0FBQSxDQUFRLElBQUEsQ0FBSyxFQUFBLENBQUcsT0FBQSxDQUFTLE1BQU0sQ0FBQSxDQUMxQyxNQUFNLElBQUEsQ0FBSyxPQUFBLENBQVEsS0FBSyxFQUFBLENBQUcsUUFBQSxDQUFVLE9BQU8sQ0FBQSxDQUM1QyxNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssS0FBQSxDQUFNQSxDQUFLLENBQUEsQ0FDM0IsSUFBTTJNLENBQUFBLENBQVMsSUFBQSxDQUFLLElBQUEsQ0FBSyxjQUFBLEVBQWUsQ0FDeEMsR0FBSUEsRUFBUSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsY0FBQSxFQUFpQkEsQ0FBTSxDQUFBLENBQUUsQ0FDdkQsQ0FFQSxDQUFDLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBVSxDQUN2QixHQUFNLENBQUUsT0FBQSxDQUFBM0MsQ0FBQUEsQ0FBUyxRQUFBLENBQUFDLEVBQVUsT0FBQSxDQUFBSCxDQUFBQSxDQUFTLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FBVSxZQUFBLENBQUFzQyxDQUFhLENBQUEsQ0FBSSxJQUFBLENBQUssR0FDcEVyQyxDQUFBQSxDQUFRLElBQUEsRUFBSyxDQUNiQyxDQUFBQSxDQUFTLE1BQUssQ0FDZG9DLENBQUFBLENBQWEsSUFBQSxFQUFLLENBR2xCdEMsRUFBUyxXQUFBLEVBQVksQ0FDckJELENBQUFBLENBQVEsV0FBQSxHQUNWLENBR0EsTUFBYyxPQUFBLENBQVExSyxFQUFtQjhLLENBQUFBLENBQTRCLENBQ25FLElBQU12VSxDQUFBQSxDQUFNLE1BQU15SixDQUFBQSxDQUFJLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDaEN6SixFQUFNLENBQUEsRUFBS0EsQ0FBQUEsR0FBUXNLLHdCQUFBQSxFQUFrQnRLLENBQUFBLEdBQVF1SyxxQkFBQUEsRUFDL0NWLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYTdKLENBQUFBLENBQUssU0FBU3VVLENBQUcsQ0FBQSxnQkFBQSxDQUFrQixFQUVoRSxDQUNGLENBQUEsQ0N2SU8sSUFBTTBDLEVBQUFBLENBQU4sTUFBTUMsQ0FBbUMsQ0FDN0IsSUFBQSxDQUNBLElBQUEsQ0FDQSxPQUFBLENBQ1QsSUFBQSxDQUFPLEdBRVAsV0FBQSxDQUFZek4sQ0FBQUEsQ0FBbUJTLENBQUFBLENBQWF0SCxDQUFBQSxDQUFnQixDQUNsRSxJQUFBLENBQUssSUFBQSxDQUFPNkcsQ0FBQUEsQ0FDWixJQUFBLENBQUssSUFBQSxDQUFPUyxDQUFBQSxDQUNaLElBQUEsQ0FBSyxPQUFBLENBQVV0SCxFQUNqQixDQUVBLGFBQWEsTUFBQSxDQUFPcEIsQ0FBQUEsQ0FBa0QsQ0FDcEUsR0FBTSxDQUFFLFNBQUEsQ0FBQTJWLEVBQVcsUUFBQSxDQUFBQyxDQUFBQSxDQUFVLFNBQUEsQ0FBQUMsQ0FBQUEsQ0FBVyxLQUFBLENBQUFoTixDQUFBQSxDQUFPLEdBQUdpTixDQUFLLEVBQUk5VixDQUFBQSxDQUVyRGtKLENBQUFBLENBQVFDLFlBQUFBLENBQU0saUJBQUEsQ0FBa0J3TSxDQUFTLENBQUEsQ0FDL0MsR0FBSSxDQUFDek0sQ0FBQUEsQ0FBTyxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEseUJBQUEsRUFBNEJ5TSxDQUFTLENBQUEsQ0FBRSxDQUFBLENBRW5FLElBQU0xTixDQUFBQSxDQUFNLE1BQU1ELENBQUFBLENBQWEsQ0FBRSxLQUFBLENBQUFrQixDQUFBQSxDQUFPLEdBQUc0TSxDQUFBQSxDQUFNLFFBQUEsQ0FBQUYsQ0FBQUEsQ0FBVSxRQUFTQyxDQUFVLENBQUEsQ0FBRyxnQkFBZ0IsQ0FBQSxDQUMzRnpVLENBQUFBLENBQVN5SCxDQUFBQSxDQUFNLFNBQUEsQ0FBVVosQ0FBQUEsQ0FBSzJOLENBQVEsQ0FBQSxDQUM1QyxPQUFPLElBQUlGLENBQUFBLENBQWF6TixFQUFLUSxDQUFBQSxFQUFXLENBQUdySCxDQUFNLENBQ25ELENBRUEsTUFBTSxNQUFBLENBQU9hLENBQUFBLENBQWM0RyxDQUFBQSxDQUFtQyxDQUM1RDVHLENBQUFBLENBQU0sR0FBQSxDQUFNLElBQUEsQ0FBSyxPQUNqQkEsQ0FBQUEsQ0FBTSxRQUFBLENBQVcsRUFBQSxDQUNqQm9HLGtCQUFBQSxDQUFZLGFBQWEsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVXBHLENBQUssQ0FBQSxDQUFHLG9CQUFvQixDQUFBLENBQy9FLE1BQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTTRHLENBQUssRUFDeEIsQ0FFQSxNQUFNLEtBQUEsQ0FBTUEsQ0FBQUEsQ0FBbUMsQ0FDN0MsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJLEVBQzlCLE1BQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTUEsQ0FBSyxFQUN4QixDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFVLENBQ3ZCLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxFQUFLLENBQ2YsSUFBQSxDQUFLLElBQUEsQ0FBSyxjQUNaLENBRVEsS0FBQSxDQUFNQSxDQUFBQSxDQUFtQyxDQUMvQyxPQUFPRCxFQUFBQSxDQUFhLElBQUEsQ0FBSyxLQUFNLElBQUEsQ0FBSyxJQUFBLENBQU0sSUFBQSxDQUFLLE9BQUEsQ0FBU0MsQ0FBSyxDQUMvRCxDQUNGLENBQUEsQ0M3Q08sSUFBTWtOLEVBQUFBLENBQU4sTUFBTUMsQ0FBMEMsQ0FDN0MsS0FDQSxJQUFBLENBQ0EsT0FBQSxDQUNBLElBQUEsQ0FBTyxFQUFBLENBRVAsWUFBWS9OLENBQUFBLENBQW1CUyxDQUFBQSxDQUFhdEgsQ0FBQUEsQ0FBZ0IsQ0FDbEUsSUFBQSxDQUFLLElBQUEsQ0FBTzZHLENBQUFBLENBQ1osSUFBQSxDQUFLLEtBQU9TLENBQUFBLENBQ1osSUFBQSxDQUFLLE9BQUEsQ0FBVXRILEVBQ2pCLENBRUEsYUFBYSxNQUFBLENBQU9wQixDQUFBQSxDQUEyRCxDQUM3RSxHQUFNLENBQUUsS0FBQSxDQUFBMEIsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsR0FBQSxDQUFBQyxDQUFBQSxDQUFLLEVBQUEsQ0FBQXFVLEVBQUksT0FBQSxDQUFBbEIsQ0FBQUEsQ0FBUyxLQUFBLENBQUFsTSxDQUFNLENBQUEsQ0FBSTdJLENBQUFBLENBRTdDa0osQ0FBQUEsQ0FBUStNLENBQUFBLENBQUcsZ0JBQWdCLE1BQU0sQ0FBQSxDQUN2QyxHQUFJLENBQUMvTSxDQUFBQSxDQUFPLE1BQU0sSUFBSSxLQUFBLENBQU0scUNBQXFDLENBQUEsQ0FFakUsSUFBTWpCLENBQUFBLENBQU0sTUFBTUQsRUFDaEIsQ0FDRSxLQUFBLENBQUFrQixDQUFBQSxDQUNBLEtBQUEsQ0FBQXhILEVBQ0EsTUFBQSxDQUFBQyxDQUFBQSxDQUNBLEdBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxPQUFBLENBQUFtVCxDQUFBQSxDQUNBLFdBQUEsQ0FBYXhMLHlCQUFBQSxDQUNiLFdBQVkyTSwwQkFBQUEsQ0FDWixRQUFBLENBQVUsTUFBQSxDQUNWLE9BQUEsQ0FBUyxDQUFFLGFBQUEsQ0FBZSxHQUFJLENBQ2hDLENBQUEsQ0FDQSxhQUNGLENBQUEsQ0FDSXhOLENBQUFBLENBQ0osR0FBSSxDQUNGLElBQU10SCxDQUFBQSxDQUFTeUgsQ0FBQUEsQ0FBTSxTQUFBLENBQVVaLEVBQUssTUFBTSxDQUFBLENBQzFDLE9BQUFTLENBQUFBLENBQU1ELEdBQVcsQ0FDVixJQUFJdU4sQ0FBQUEsQ0FBb0IvTixDQUFBQSxDQUFLUyxFQUFLdEgsQ0FBTSxDQUNqRCxDQUFBLE1BQVNuQixDQUFBQSxDQUFHLENBRVYsTUFBQXlJLENBQUFBLEVBQUssSUFBQSxHQUNMVCxDQUFBQSxDQUFJLFdBQUEsRUFBWSxDQUNWaEksQ0FDUixDQUNGLENBRUEsTUFBTSxNQUFBLENBQU9rUixFQUFrQnRJLENBQUFBLENBQW1DLENBQ2hFc0ksQ0FBQUEsQ0FBVSxHQUFBLENBQU0sSUFBQSxDQUFLLElBQUEsRUFBQSxDQUNyQkEsQ0FBQUEsQ0FBVSxRQUFBLENBQVcsR0FDckI5SSxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxJQUFBLENBQUssS0FBSyxTQUFBLENBQVU4SSxDQUFTLENBQUEsQ0FBRyxpQkFBaUIsRUFDaEYsTUFBTSxJQUFBLENBQUssS0FBQSxDQUFNdEksQ0FBSyxFQUN4QixDQUVBLE1BQU0sS0FBQSxDQUFNQSxFQUFtQyxDQUM3QyxNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssU0FBQSxDQUFVLElBQUksQ0FBQSxDQUM5QixNQUFNLEtBQUssS0FBQSxDQUFNQSxDQUFLLEVBQ3hCLENBRUEsQ0FBQyxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQVUsQ0FDdkIsSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLEVBQUssQ0FDZixLQUFLLElBQUEsQ0FBSyxXQUFBLEdBQ1osQ0FFUSxNQUFNQSxDQUFBQSxDQUFtQyxDQUMvQyxPQUFPRCxFQUFBQSxDQUFhLElBQUEsQ0FBSyxJQUFBLENBQU0sSUFBQSxDQUFLLElBQUEsQ0FBTSxLQUFLLE9BQUEsQ0FBU0MsQ0FBSyxDQUMvRCxDQUNGLENBQUEsQ0NqRUEsSUFBTTlLLEVBQUFBLENBQU0sV0FBQSxDQXFCWixlQUFzQm9ZLEVBQUFBLENBQXFCblcsQ0FBQUEsQ0FBNkI2SSxDQUFBQSxDQUF5QyxDQUMvRyxHQUFNLENBQUUsS0FBQSxDQUFBbkgsQ0FBQUEsQ0FBTyxPQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQUMsQ0FBQUEsQ0FBSyxPQUFBLENBQUFtVCxFQUFVLEdBQUEsQ0FBVyxjQUFBLENBQUFxQixDQUFBQSxDQUFpQixLQUFBLENBQU8sU0FBQUMsQ0FBUyxDQUFBLENBQUlyVyxDQUFBQSxDQUNoRmlXLENBQUFBLENBQUtJLENBQUFBLEdBQWFELENBQUFBLENBQWlCLE1BQUEsQ0FBYUUsbUJBQUFBLENBQWdCLE1BQUssRUFBSyxNQUFBLENBQUEsQ0FDMUVDLENBQUFBLENBQVMsQ0FBQ0YsR0FBWSxDQUFDLENBQUNKLENBQUFBLENBRTlCLEdBQUksQ0FDRixHQUFJQSxDQUFBQSxFQUFJLGNBQUEsR0FBbUJPLHVDQUFBQSxFQUFpQ1AsQ0FBQUEsQ0FBRyxlQUFBLENBQWdCLE1BQU0sQ0FBQSxDQUNuRixPQUFBdlksQ0FBQUEsQ0FBTyxLQUFBLENBQU1LLEVBQUFBLENBQUssdUNBQXVDLEVBRWxELENBQUUsT0FBQSxDQURPLE1BQU1nWSxFQUFBQSxDQUFvQixPQUFPLENBQUUsS0FBQSxDQUFBclUsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsR0FBQSxDQUFBQyxDQUFBQSxDQUFLLEVBQUEsQ0FBQXFVLEVBQUksT0FBQSxDQUFBbEIsQ0FBQUEsQ0FBUyxLQUFBLENBQUFsTSxDQUFNLENBQUMsQ0FBQSxDQUN6RSxFQUFBLENBQUFvTixDQUFBQSxDQUFJLE9BQUFNLENBQU8sQ0FBQSxDQUUvQixHQUFJTixDQUFBQSxFQUFJLGNBQUEsR0FBbUJRLCtCQUFBQSxFQUF5QlIsQ0FBQUEsQ0FBRyxlQUFBLENBQWdCLE1BQU0sQ0FBQSxDQUMzRSxPQUFBdlksQ0FBQUEsQ0FBTyxLQUFBLENBQU1LLEdBQUssMkNBQTJDLENBQUEsQ0FFdEQsQ0FBRSxPQUFBLENBRE8sTUFBTThXLEVBQUFBLENBQXNCLE1BQUEsQ0FBTyxDQUFFLEtBQUEsQ0FBQW5ULENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQUMsRUFBSyxFQUFBLENBQUFxVSxDQUFBQSxDQUFJLE9BQUEsQ0FBQWxCLENBQUFBLENBQVMsS0FBQSxDQUFBbE0sQ0FBTSxDQUFDLENBQUEsQ0FDM0UsR0FBQW9OLENBQUFBLENBQUksTUFBQSxDQUFBTSxDQUFPLENBRWpDLENBQUEsTUFBU3RXLENBQUFBLENBQUcsQ0FDVnZDLENBQUFBLENBQU8sS0FBS0ssRUFBQUEsQ0FBSyw2REFBQSxDQUErRGtDLENBQUMsQ0FBQSxDQUM3RXNXLEdBQVFOLENBQUFBLEVBQUksT0FBQSxHQUNsQixDQUVBLE9BQUF2WSxDQUFBQSxDQUFPLEtBQUEsQ0FBTUssRUFBQUEsQ0FBSywyQ0FBMkMsQ0FBQSxDQVl0RCxDQUFFLEtBQUEsQ0FYSyxNQUFNMFgsR0FBYSxNQUFBLENBQU8sQ0FDdEMsS0FBQSxDQUFBL1QsQ0FBQUEsQ0FDQSxNQUFBLENBQUFDLENBQUFBLENBQ0EsR0FBQSxDQUFBQyxDQUFBQSxDQUNBLFVBQVc4VSw0QkFBQUEsQ0FDWCxRQUFBLENBQVUsTUFBQSxDQUNWLFNBQUEsQ0FBVyxDQUFFLE1BQUEsQ0FBUSxNQUFBLENBQVEsYUFBQSxDQUFlLCtDQUFnRCxDQUFBLENBQzVGLE9BQUEsQ0FBQTNCLENBQUFBLENBQ0EsV0FBQSxDQUFhdkwsOEJBQ2IsS0FBQSxDQUFBWCxDQUNGLENBQUMsQ0FBQSxDQUNlLE1BQU8sTUFBTUcsQ0FBQUEsQ0FBVyxNQUFBLENBQU90SCxDQUFBQSxDQUFPQyxDQUFNLENBQUEsQ0FBRyxNQUFBLENBQVEsS0FBTSxDQUMvRSxDQ3BFTyxJQUFNZ1YsRUFBQUEsQ0FBTixLQUFrQixDQUNOLElBQUEsQ0FDVCxPQUFBLENBQVUsS0FBQSxDQUVsQixXQUFBLENBQVlDLENBQUFBLENBQWlCQyxFQUFxQixDQUNoRCxJQUFBLENBQUssSUFBQSxDQUFPLElBQUlDLHFCQUNoQnpPLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxJQUFBLENBQUssSUFBQSxDQUFLLG9CQUFvQixJQUFBLENBQU13TyxDQUFBQSxFQUFjLElBQUEsQ0FBTUQsQ0FBTyxDQUFBLENBQUcscUJBQXFCLEVBQ2xILENBRUEsVUFBVUcsQ0FBQUEsQ0FBd0JuQixDQUFBQSxDQUEyRCxDQUMzRixJQUFNeFUsQ0FBQUEsQ0FBUyxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDdkMsT0FBQUEsQ0FBQUEsQ0FBTyxRQUFBLENBQVcyVixDQUFBQSxDQUFTLFFBQUEsQ0FDM0IxTyxrQkFBQUEsQ0FBWSxZQUFBLENBQWFqSCxFQUFPLFFBQUEsQ0FBUyxXQUFBLENBQVkyVixDQUFRLENBQUEsQ0FBRyxzQkFBc0IsQ0FBQSxDQUNsRm5CLENBQUFBLEdBQVV4VSxDQUFBQSxDQUFPLFFBQUEsQ0FBUyxTQUFXd1UsQ0FBQUEsQ0FBQUEsQ0FDbEN4VSxDQUNULENBRUEsTUFBTSxJQUFBLEVBQXNCLENBSTFCLElBQUFKLENBQUFBLENBQUEsT0FIQSxHQUFJLElBQUEsQ0FBSyxPQUFBLENBQVMsT0FDbEJxSCxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxJQUFBLENBQUssS0FBSyxVQUFBLEVBQVcsQ0FBRyxZQUFZLENBQUEsQ0FFbkUsSUFBTXJJLENBQUFBLENBQU9rQixDQUFBQSxDQUFBRixDQUFBQSxDQUFBZ1csa0JBQVcsVUFBQSxDQUFXLENBQUUsUUFBQSxDQUFVLFlBQWEsQ0FBQyxDQUFBLENBQUEsQ0FDN0QzTyxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxLQUFLLElBQUEsQ0FBSyxXQUFBLENBQVlySSxDQUFJLENBQUEsQ0FBRyxhQUFhLENBQUEsQ0FDekUsSUFBQSxDQUFLLE9BQUEsQ0FBVSxVQUZmbUMsQ0FBQUEsQ0FBQSxDQUFBLElBQUFDLENBQUFBLENBQUFELENBQUFBLENBQUFFLENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQXRCLENBQUFBLENBQUFvQixFQUFBQyxDQUFBQSxFQUFBQSxDQUdGLENBRUEsTUFBTSxXQUFBLENBQVlxRyxDQUFBQSxDQUE0QixDQUM1Q0wsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxxQkFBQSxDQUFzQkssQ0FBRyxFQUFHLHVCQUF1QixFQUM5RixDQUVBLE1BQU8sT0FBTyxZQUFZLENBQUEsRUFBbUIsQ0FDM0MsR0FBSyxJQUFBLENBQUssT0FBQSxDQUNWLENBQUEsSUFBQSxDQUFLLE9BQUEsQ0FBVSxNQUNmLEdBQUksQ0FDRixNQUFNLElBQUEsQ0FBSyxLQUFLLFlBQUEsR0FDbEIsQ0FBQSxPQUFFLENBRUEsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFdBQUEsRUFBWSxDQUM1QixNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssTUFBQSxDQUFPLFlBQVksQ0FBQSxHQUNyQyxDQUFBLENBQ0YsQ0FDRixFQ3pCQSxJQUFNdU8sRUFBQUEsQ0FBd0IsWUFBQSxDQTBCakJDLEVBQUFBLENBQU4sTUFBTUMsQ0FBc0MsQ0FDekMsRUFBQSxDQUNBLFNBQUEsQ0FBWSxLQUFBLENBRVosV0FBQSxDQUFZNVgsQ0FBQUEsQ0FBYyxDQUNoQyxLQUFLLEVBQUEsQ0FBS0EsRUFDWixDQUVBLE9BQU8sWUFBQSxDQUFhNlgsQ0FBQUEsQ0FBd0IsQ0FDMUMsSUFBTUMsRUFBUUQsQ0FBQUEsQ0FBSyxXQUFBLEVBQVksQ0FDL0IsR0FBSUMsQ0FBQUEsQ0FBTSxRQUFBLENBQVMsT0FBTyxDQUFBLENBQUcsT0FBTyxNQUFBLENBQ3BDLEdBQUlBLENBQUFBLENBQU0sUUFBQSxDQUFTLE1BQU0sQ0FBQSxFQUFLQSxDQUFBQSxDQUFNLFFBQUEsQ0FBUyxNQUFNLEVBQUcsT0FBTyxLQUFBLENBQzdELE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSw4QkFBQSxFQUFpQ0QsQ0FBSSxDQUFBLENBQUUsQ0FDekQsQ0FFQSxhQUFhLE1BQUEsQ0FBT3BYLENBQUFBLENBQXdDLENBQzFELElBQU02SSxDQUFBQSxDQUFRLElBQUk4TixFQUFBQSxDQUFZM1csRUFBSyxPQUFPLENBQUEsQ0FDcENzWCxDQUFBQSxDQUFRdFgsQ0FBQUEsQ0FBSyxJQUFBLEdBQVMsS0FBQSxDQUFRLE1BQU0sSUFBQSxDQUFLLFNBQVNBLENBQUFBLENBQU02SSxDQUFLLENBQUEsQ0FBSSxNQUFNLEtBQUssU0FBQSxDQUFVN0ksQ0FBQUEsQ0FBTTZJLENBQUssQ0FBQSxDQUNqRzBPLEVBQVF2WCxDQUFBQSxDQUFLLFNBQUEsQ0FBWSxNQUFNLElBQUEsQ0FBSyxRQUFBLENBQVNBLENBQUFBLENBQU02SSxDQUFLLENBQUEsQ0FBSSxPQUNsRSxPQUFBLE1BQU1BLENBQUFBLENBQU0sSUFBQSxFQUFLLENBQ1YsSUFBSXNPLENBQUFBLENBQVcsQ0FBRSxLQUFBLENBQUF0TyxFQUFPLEdBQUd5TyxDQUFBQSxDQUFPLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FBTyxJQUFBLENBQUF2WCxDQUFLLENBQUMsQ0FDeEQsQ0FFQSxPQUFlLFFBQUEsQ0FBU0EsQ0FBQUEsQ0FBbUI2SSxDQUFBQSxDQUF5QyxDQUNsRixHQUFNLENBQUUsS0FBQSxDQUFBbkgsQ0FBQUEsQ0FBTyxPQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQUMsQ0FBQUEsQ0FBSyxjQUFBLENBQUF3VSxDQUFBQSxDQUFnQixRQUFBLENBQUFDLENBQVMsQ0FBQSxDQUFJclcsRUFDekQsT0FBT21XLEVBQUFBLENBQXFCLENBQUUsS0FBQSxDQUFBelUsRUFBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsR0FBQSxDQUFBQyxDQUFBQSxDQUFLLGVBQUF3VSxDQUFBQSxDQUFnQixRQUFBLENBQUFDLENBQVMsQ0FBQSxDQUFHeE4sQ0FBSyxDQUNyRixDQUVBLGFBQXFCLFVBQVU3SSxDQUFBQSxDQUFtQjZJLENBQUFBLENBQXlDLENBQ3pGLEdBQU0sQ0FBRSxLQUFBLENBQUFuSCxDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxJQUFBQyxDQUFJLENBQUEsQ0FBSTVCLENBQUFBLENBVy9CLE9BQU8sQ0FBRSxLQUFBLENBVkssTUFBTXlWLEVBQUFBLENBQWEsT0FBTyxDQUN0QyxLQUFBLENBQUEvVCxDQUFBQSxDQUNBLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxHQUFBLENBQUFDLENBQUFBLENBQ0EsU0FBQSxDQUFXcVYsR0FDWCxTQUFBLENBQVcsQ0FBRSxRQUFBLENBQVUsVUFBQSxDQUFZLFVBQUEsQ0FBWSxHQUFBLENBQUssUUFBQSxDQUFVLEdBQUEsQ0FBSyxRQUFTLEdBQUksQ0FBQSxDQUNoRixPQUFBLENBQVMsR0FBQSxDQUNULFlBQWF6Tiw2QkFBQUEsQ0FDYixLQUFBLENBQUFYLENBQ0YsQ0FBQyxFQUNlLEtBQUEsQ0FBTyxNQUFNRyxDQUFBQSxDQUFXLE1BQUEsQ0FBT3RILENBQUFBLENBQU9DLENBQU0sQ0FBQSxDQUFHLE1BQUEsQ0FBUSxLQUFNLENBQy9FLENBRUEsT0FBZSxRQUFBLENBQVMzQixDQUFBQSxDQUFtQjZJLENBQUFBLENBQTJDLENBRXBGLElBQU1xSCxFQUNKbFEsQ0FBQUEsQ0FBSyxJQUFBLEdBQVMsS0FBQSxDQUNWLENBQUUsYUFBQSxDQUFlLEtBQUEsQ0FBUSxZQUFBLENBQWNnSyw0QkFBQUEsQ0FBb0IsVUFBV3dOLHdCQUFlLENBQUEsQ0FDckYsQ0FBRSxhQUFBLENBQWUsS0FBUSxZQUFBLENBQWN6TiwyQkFBQUEsQ0FBbUIsU0FBQSxDQUFXME4sNEJBQW1CLEVBQzlGLE9BQU94TixFQUFBQSxDQUFhLE1BQUEsQ0FBTyxDQUFFLEdBQUdpRyxDQUFBQSxDQUFLLFlBQUEsQ0FBYyxJQUFBLENBQU0sUUFBUyxLQUFBLENBQVMsS0FBQSxDQUFBckgsQ0FBTSxDQUFDLENBQ3BGLENBRUEsWUFBQSxDQUFhNk8sQ0FBQUEsQ0FBMEIsQ0FDckMsSUFBQSxDQUFLLEVBQUEsQ0FBRyxLQUFBLEVBQU8sWUFBQSxDQUFhQSxDQUFVLEVBQ3hDLENBRUEsTUFBTSxXQUFXdkcsQ0FBQUEsQ0FBaUMsQ0FDaEQsR0FBTSxDQUFFLFFBQUF3RyxDQUFBQSxDQUFTLEtBQUEsQ0FBQTlPLENBQU0sQ0FBQSxDQUFJLEtBQUssRUFBQSxDQUNoQyxPQUFJOE8sQ0FBQUEsQ0FBZ0JBLENBQUFBLENBQVEsTUFBQSxDQUFPeEcsQ0FBQUEsQ0FBV3RJLENBQUssQ0FBQSxDQUM1QyxLQUFLLFFBQUEsQ0FBU3NJLENBQVMsQ0FDaEMsQ0FFQSxNQUFNLGtCQUFBLENBQW1CMVEsQ0FBQUEsQ0FBMkIsQ0FDbEQsR0FBTSxDQUFFLE9BQUEsQ0FBQWtYLENBQUFBLENBQVMsS0FBQSxDQUFBOU8sQ0FBTSxDQUFBLENBQUksSUFBQSxDQUFLLEVBQUEsQ0FDaEMsT0FBSThPLEVBQWdCQSxDQUFBQSxDQUFRLE1BQUEsQ0FBT2xYLENBQUFBLENBQUtvSSxDQUFLLEVBQ3RDLElBQUEsQ0FBSyxRQUFBLENBQVNwSSxDQUFHLENBQzFCLENBRUEsTUFBTSxXQUFBLENBQVl3SyxDQUFBQSxDQUE0QixDQUM1QyxNQUFNLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxFQUFPLE9BQU9BLENBQUFBLENBQUssSUFBQSxDQUFLLEVBQUEsQ0FBRyxLQUFLLEVBQ2hELENBRUEsTUFBTSxLQUFBLEVBQXVCLENBQzNCLEdBQU0sQ0FBRSxPQUFBLENBQUEwTSxDQUFBQSxDQUFTLEtBQUEsQ0FBQUwsQ0FBQUEsQ0FBTyxLQUFBLENBQUFDLENBQUFBLENBQU8sTUFBQTFPLENBQU0sQ0FBQSxDQUFJLElBQUEsQ0FBSyxFQUFBLENBQzlDLE1BQU0wTyxDQUFBQSxFQUFPLEtBQUEsQ0FBTTFPLENBQUssQ0FBQSxDQUNwQjhPLEVBQVMsTUFBTUEsQ0FBQUEsQ0FBUSxLQUFBLENBQU05TyxDQUFLLENBQUEsQ0FDakMsTUFBTXlPLENBQUFBLENBQU8sS0FBQSxDQUFNek8sQ0FBSyxFQUMvQixDQUVBLE1BQU8sTUFBQSxDQUFPLFlBQVksQ0FBQSxFQUFtQixDQUMzQyxHQUFJLEtBQUssU0FBQSxDQUFXLE9BQ3BCLElBQUEsQ0FBSyxTQUFBLENBQVksSUFBQSxDQUNqQixHQUFNLENBQUUsS0FBQSxDQUFBQSxFQUFPLEtBQUEsQ0FBQXlPLENBQUFBLENBQU8sT0FBQSxDQUFBSyxDQUFBQSxDQUFTLE1BQUFKLENBQUFBLENBQU8sS0FBQSxDQUFBck8sQ0FBQUEsQ0FBTyxFQUFBLENBQUErTSxFQUFJLE1BQUEsQ0FBQU0sQ0FBTyxDQUFBLENBQUksSUFBQSxDQUFLLEVBQUEsQ0FDakVlLENBQUFBLEdBQVEsTUFBQSxDQUFPLE9BQU8sR0FBRSxDQUN4QkssQ0FBQUEsR0FBVSxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUUsQ0FDMUJKLENBQUFBLEdBQVEsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3hCck8sQ0FBQUEsR0FBUSxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUUsQ0FDeEIsTUFBTUwsRUFBTSxNQUFBLENBQU8sWUFBWSxDQUFBLEVBQUUsQ0FDN0IwTixHQUFRTixDQUFBQSxFQUFJLE9BQUEsR0FDbEIsQ0FFQSxNQUFjLFFBQUEsQ0FBU3hWLENBQUFBLENBQTJCLENBQ2hELEdBQU0sQ0FBRSxLQUFBLENBQUE2VyxDQUFBQSxDQUFPLEtBQUEsQ0FBQXBPLEVBQU8sS0FBQSxDQUFBTCxDQUFNLENBQUEsQ0FBSSxJQUFBLENBQUssR0FDckNRLFNBQUFBLENBQUdILENBQUFBLEVBQU8sR0FBQSxDQUFLLHFCQUFxQixFQUNwQ2Isa0JBQUFBLENBQVksWUFBQSxDQUFhYSxDQUFBQSxDQUFNLEdBQUEsQ0FBSSxZQUFBLEVBQWEsQ0FBRyxzQkFBc0IsQ0FBQSxDQUN6RWIsbUJBQVksWUFBQSxDQUFhLE1BQU1hLENBQUFBLENBQU0sR0FBQSxDQUFJLFdBQVdBLENBQUFBLENBQU0sR0FBQSxDQUFLekksQ0FBRyxDQUFBLENBQUcsb0JBQW9CLENBQUEsQ0FDekYsTUFBTTZXLENBQUFBLENBQU8sTUFBQSxDQUFPcE8sQ0FBQUEsQ0FBTSxHQUFBLENBQUtMLENBQUssRUFDdEMsQ0FDRixDQUFBLENDbkhPLElBQU0rTyxFQUFBQSxDQUFOLE1BQU1DLENBQWdCLENBQ25CLEVBQUEsQ0FDQSxTQUFBLENBQVksTUFFWixXQUFBLENBQVl0WSxDQUFBQSxDQUFrQixDQUNwQyxJQUFBLENBQUssRUFBQSxDQUFLQSxFQUNaLENBRUEsYUFBYSxPQUFPUyxDQUFBQSxDQUF3RCxDQUMxRSxHQUFNLENBQUUsTUFBQTBCLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQUMsRUFBSyxPQUFBLENBQUFrVyxDQUFBQSxDQUFTLFNBQUEsQ0FBQUMsQ0FBQUEsQ0FBWSxLQUFBLENBQU8sY0FBQSxDQUFBM0IsQ0FBQUEsQ0FBaUIsS0FBTSxFQUFJcFcsQ0FBQUEsQ0FDN0VnWSxDQUFBQSxDQUFXRixDQUFBQSxDQUNkLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FDVCxHQUFBLENBQUsxVSxDQUFBQSxFQUFNQSxFQUFFLElBQUEsRUFBTSxDQUFBLENBQ25CLE1BQUEsQ0FBTyxPQUFPLENBQUEsQ0FDakIsR0FBSTRVLENBQUFBLENBQVMsU0FBVyxDQUFBLENBQUcsTUFBTSxJQUFJLEtBQUEsQ0FBTSx3Q0FBd0MsQ0FBQSxDQUVuRixJQUFNQyxDQUFBQSxDQUFRRCxDQUFBQSxDQUFTLElBQUs1VSxDQUFBQSxFQUFNOFQsRUFBQUEsQ0FBVyxZQUFBLENBQWE5VCxDQUFDLENBQUMsQ0FBQSxDQUV0RGlULENBQUFBLENBRGEsQ0FBQ0QsR0FBa0I2QixDQUFBQSxDQUFNLFFBQUEsQ0FBUyxLQUFLLENBQUEsQ0FDM0IzQixtQkFBQUEsQ0FBZ0IsSUFBQSxFQUFLLEVBQUssTUFBQSxDQUFhLE9BQ2hFNEIsQ0FBQUEsQ0FDSjdCLENBQUFBLEVBQVUsY0FBQSxHQUFtQkcsdUNBQUFBLEVBQWlDSCxDQUFBQSxFQUFVLGNBQUEsR0FBbUJJLCtCQUFBQSxDQUV2RjBCLENBQUFBLENBQXNCLEVBQUMsQ0FDN0IsSUFBQSxJQUFTclIsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEVBQUlrUixDQUFBQSxDQUFTLE1BQUEsQ0FBUWxSLENBQUFBLEVBQUFBLENBQUssQ0FDeEMsSUFBTXNSLENBQUFBLENBQU8sTUFBTWxCLEVBQUFBLENBQVcsTUFBQSxDQUFPLENBQ25DLE9BQUEsQ0FBU2MsQ0FBQUEsQ0FBU2xSLENBQUMsRUFDbkIsSUFBQSxDQUFNbVIsQ0FBQUEsQ0FBTW5SLENBQUMsQ0FBQSxDQUNiLE1BQUFwRixDQUFBQSxDQUNBLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxHQUFBLENBQUFDLEVBQ0EsU0FBQSxDQUFBbVcsQ0FBQUEsQ0FDQSxjQUFBLENBQUEzQixDQUFBQSxDQUNBLFFBQUEsQ0FBVTZCLENBQUFBLENBQU1uUixDQUFDLENBQUEsR0FBTSxPQUFTb1IsQ0FBQUEsQ0FBbUI3QixDQUFBQSxDQUFXLE1BQ2hFLENBQUMsRUFDRDhCLENBQUFBLENBQU0sSUFBQSxDQUFLQyxDQUFJLEVBQ2pCLENBRUEsT0FBTyxJQUFJUCxDQUFBQSxDQUFnQixDQUFFLEtBQUEsQ0FBQU0sQ0FBQUEsQ0FBTyxRQUFBLENBQUE5QixDQUFBQSxDQUFVLFFBQVMsSUFBSXhPLEVBQUFBLENBQW1CLENBQUMsQ0FBQSxDQUFHLFFBQUEsQ0FBQW1RLENBQUFBLENBQVUsSUFBQSxDQUFBaFksQ0FBSyxDQUFDLENBQ3BHLENBRUEsVUFBQSxDQUFXMFgsQ0FBQUEsQ0FBMEIsQ0FDbkMsSUFBQSxJQUFXVSxDQUFBQSxJQUFRLElBQUEsQ0FBSyxHQUFHLEtBQUEsQ0FBT0EsQ0FBQUEsQ0FBSyxZQUFBLENBQWFWLENBQVUsRUFDaEUsQ0FFQSxNQUFNLFVBQUEsQ0FBV3pXLENBQUFBLENBQThCLENBQzdDLE1BQU0sSUFBQSxDQUFLLEVBQUEsQ0FBRyxPQUFBLENBQVEsUUFBQSxDQUFTLFNBQVksQ0FDekMsSUFBQUQsRUFBQSxFQUFBLENBQUEsR0FBQSxDQUFBLElBQU1pQixDQUFBQSxDQUFRZixDQUFBQSxDQUFBRixDQUFBQSxDQUFBLEtBQUssU0FBQSxDQUFVQyxDQUFLLENBQUEsQ0FBQSxDQUNsQyxNQUFNLFFBQVEsR0FBQSxDQUFJLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFNLEdBQUEsQ0FBS21YLENBQUFBLEVBQVNBLENBQUFBLENBQUssVUFBQSxDQUFXblcsQ0FBSyxDQUFDLENBQUMsRUFBQSxDQUFBLE1BRHJFRSxDQUFBQSxDQUFBLEtBQUFDLENBQUFBLENBQUFELENBQUFBLENBQUFFLENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsRUFBQXRCLENBQUFBLENBQUFvQixDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQUVGLENBQUMsRUFDSCxDQUVBLE1BQU0sU0FBQSxDQUFVb0gsRUFBZ0MsQ0FDOUMsTUFBTSxJQUFBLENBQUssRUFBQSxDQUFHLE9BQUEsQ0FBUSxRQUFBLENBQVMsU0FBWSxDQUN6QyxHQUFNLENBQUUsS0FBQSxDQUFBL0gsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQU8sQ0FBQSxDQUFJLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FDbEMsSUFBQSxDQUFLLEVBQUEsQ0FBRyxRQUFBLEdBQWEsTUFBTXFILEVBQVcsTUFBQSxDQUFPdEgsQ0FBQUEsQ0FBT0MsQ0FBTSxDQUFBLENBQzFELElBQU1sQixDQUFBQSxDQUFNLE1BQU0sSUFBQSxDQUFLLEVBQUEsQ0FBRyxRQUFBLENBQVMsU0FBQSxDQUFVZ0osQ0FBTyxDQUFBLENBQ3BELFFBQVcyTyxDQUFBQSxJQUFRLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFPLE1BQU1BLENBQUFBLENBQUssa0JBQUEsQ0FBbUIzWCxDQUFHLEVBQ3JFLENBQUMsRUFDSCxDQUVBLE1BQU0sV0FBQSxDQUFZd0ssQ0FBQUEsQ0FBNEIsQ0FDNUMsTUFBTSxJQUFBLENBQUssR0FBRyxPQUFBLENBQVEsUUFBQSxDQUFTLFNBQVksQ0FDekMsUUFBV21OLENBQUFBLElBQVEsSUFBQSxDQUFLLEVBQUEsQ0FBRyxLQUFBLENBQU8sTUFBTUEsQ0FBQUEsQ0FBSyxXQUFBLENBQVluTixDQUFHLEVBQzlELENBQUMsRUFDSCxDQUVBLE1BQU0sUUFBNEIsQ0FDaEMsR0FBSSxDQUNGLE1BQU0sSUFBQSxDQUFLLEVBQUEsQ0FBRyxPQUFBLENBQVEsS0FBQSxHQUN0QixJQUFBLElBQVdtTixDQUFBQSxJQUFRLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFPLE1BQU1BLENBQUFBLENBQUssS0FBQSxHQUMvQyxDQUFBLE9BQUUsQ0FDQSxNQUFNLElBQUEsQ0FBSyxPQUNiLENBQ0EsT0FBTyxJQUFBLENBQUssR0FBRyxRQUNqQixDQUVBLE1BQU8sTUFBQSxDQUFPLFlBQVksQ0FBQSxFQUFtQixDQUN2QyxJQUFBLENBQUssWUFDVCxNQUFNLElBQUEsQ0FBSyxFQUFBLENBQUcsT0FBQSxDQUFRLEtBQUEsRUFBTSxDQUM1QixNQUFNLElBQUEsQ0FBSyxNQUFLLEVBQ2xCLENBRUEsTUFBYyxJQUFBLEVBQXNCLENBQ2xDLEdBQUksQ0FBQSxJQUFBLENBQUssU0FBQSxDQUNULE1BQUssU0FBQSxDQUFZLElBQUEsQ0FDakIsSUFBQSxJQUFXQSxDQUFBQSxJQUFRLEtBQUssRUFBQSxDQUFHLEtBQUEsQ0FBTyxNQUFNQSxDQUFBQSxDQUFLLE9BQU8sWUFBWSxDQUFBLEVBQUUsQ0FDbEUsSUFBQSxDQUFLLEVBQUEsQ0FBRyxRQUFBLEdBQVcsTUFBQSxDQUFPLE9BQU8sR0FBRSxDQUNuQyxJQUFBLENBQUssRUFBQSxDQUFHLFFBQUEsRUFBVSxPQUFBLEdBQVEsQ0FDNUIsQ0FFUSxTQUFBLENBQVVuWCxFQUFzQixDQUN0QyxJQUFNZ0IsQ0FBQUEsQ0FBUXFHLENBQUFBLENBQVUsSUFBQSxDQUFLLEVBQUEsQ0FBRyxJQUFBLENBQUssS0FBQSxDQUFPLEtBQUssRUFBQSxDQUFHLElBQUEsQ0FBSyxNQUFBLENBQVFpQix5QkFBZSxFQUNoRixPQUFBbEIsa0JBQUFBLENBQVksWUFBQSxDQUFhcEcsQ0FBQUEsQ0FBTSxXQUFXaEIsQ0FBSyxDQUFBLENBQUcsc0JBQXNCLENBQUEsQ0FDakVnQixDQUNULENBQ0YsQ0FBQSxDQ3hHTyxJQUFNb1csR0FBTixLQUFxQixDQUNULElBQUEsQ0FDVCxPQUFBLENBQVUsRUFDVixhQUFBLENBQWdCLENBQUEsQ0FDaEIsT0FBQSxDQUFvQixHQUU1QixXQUFBLENBQVl6VyxDQUFBQSxDQUFhLENBQ3ZCLElBQUEsQ0FBSyxJQUFBLENBQU9BLEVBQ2QsQ0FHQSxLQUFBLENBQU0wVyxFQUFRLENBQUEsQ0FBUyxDQUNqQixJQUFBLENBQUssYUFBQSxDQUFnQixJQUN2QixJQUFBLENBQUssT0FBQSxDQUFRLElBQUEsQ0FBSyxJQUFBLENBQUssYUFBYSxDQUFBLENBQ3BDLElBQUEsQ0FBSyxhQUFBLENBQWdCLENBQUEsQ0FBQSxDQUV2QixJQUFBLENBQUssT0FBQSxFQUFXQSxFQUNsQixDQUdBLFFBQVFBLENBQUFBLENBQVEsQ0FBQSxDQUFTLENBQ3ZCLElBQUEsQ0FBSyxhQUFBLEVBQWlCQSxFQUN4QixDQUdBLFFBQUEsRUFBMkIsQ0FDckIsSUFBQSxDQUFLLGFBQUEsQ0FBZ0IsQ0FBQSxHQUN2QixJQUFBLENBQUssT0FBQSxDQUFRLElBQUEsQ0FBSyxJQUFBLENBQUssYUFBYSxFQUNwQyxJQUFBLENBQUssYUFBQSxDQUFnQixDQUFBLENBQUEsQ0FHdkIsSUFBSUMsRUFBZSxDQUFBLENBQ2ZDLENBQUFBLENBQVcsQ0FBQSxDQUNYQyxDQUFBQSxDQUFXLEVBQ2YsSUFBQSxJQUFXQyxDQUFBQSxJQUFTLElBQUEsQ0FBSyxPQUFBLENBQVMsQ0FDaENILENBQUFBLEVBQWdCRyxDQUFBQSxDQUNoQkQsQ0FBQUEsQ0FBVyxLQUFLLEdBQUEsQ0FBSUEsQ0FBQUEsQ0FBVUMsQ0FBSyxDQUFBLENBQ25DLElBQU1DLENBQUFBLENBQWMsSUFBQSxDQUFLLEdBQUEsQ0FBSSxDQUFBLENBQUdELEVBQVEsQ0FBQyxDQUFBLENBQ3pDRixDQUFBQSxFQUFBQSxDQUFhRyxDQUFBQSxDQUFjLElBQUEsQ0FBSyxJQUFBLEdBQVMsRUFDM0MsQ0FFQSxJQUFNdlIsQ0FBQUEsQ0FBVyxJQUFBLENBQUssT0FBQSxDQUFVbVIsQ0FBQUEsQ0FDMUJLLEVBQUl4UixDQUFBQSxDQUFXLENBQUEsQ0FBSW1SLENBQUFBLENBQWVuUixDQUFBQSxDQUFXLEVBQzdDeVIsQ0FBQUEsQ0FBSSxJQUFBLENBQUssR0FBQSxDQUFJLENBQUEsQ0FBR0wsQ0FBUSxDQUFBLENBQ3hCTSxDQUFBQSxDQUFRLENBQUEsQ0FBQSxDQUFLLEVBQUlGLENBQUFBLEdBQU0sQ0FBQSxDQUFJQyxDQUFBQSxDQUFBQSxDQUVqQyxPQUFPLENBQUUsTUFBQSxDQUFRRCxDQUFBQSxDQUFHLEtBQUEsQ0FBT0MsRUFBRyxJQUFBLENBQU1DLENBQUFBLENBQU8sUUFBQSxDQUFBMVIsQ0FBQUEsQ0FBVSxNQUFBLENBQVEsSUFBQSxDQUFLLE9BQUEsQ0FBUyxRQUFBLENBQUFxUixDQUFTLENBQ3RGLENBQ0YsQ0FBQSxDQzFETyxTQUFTTSxHQUFXQyxDQUFBQSxDQUFTek4sQ0FBQUEsQ0FBUyxDQUMzQyxPQUFPeU4sRUFBRSxLQUFBLEdBQVV6TixDQUFBQSxDQUFFLEtBQUEsRUFBU3lOLENBQUFBLENBQUUsTUFBQSxHQUFXek4sQ0FBQUEsQ0FBRSxNQUMvQyxDQ1BPLElBQU0wTixFQUFBQSxDQUFxQixZQUFBLENBQ3JCQyxHQUFzQixhQUFBLENBVzVCLFNBQVNDLEVBQUFBLENBQXFCLENBQUUsR0FBQWhTLENBQUFBLENBQUksT0FBQSxDQUFBaVMsQ0FBQUEsQ0FBUyxjQUFBLENBQUFDLENBQUFBLENBQWdCLE9BQUEsQ0FBQUMsQ0FBUSxDQUFBLENBQXdDLENBQ2xILElBQU1DLENBQUFBLENBQVMsTUFBT0MsQ0FBQUEsQ0FBYXRjLElBQWlDLENBQ2xFLElBQU13YSxDQUFBQSxDQUFheGEsQ0FBQUEsQ0FBSyxXQUNsQnVjLENBQUFBLENBQVVKLENBQUFBLEVBQWUsQ0FDL0JELENBQUFBLENBQVEsVUFBQSxDQUFXMUIsQ0FBVSxDQUFBLENBQzdCLElBQU1nQyxFQUFpQixJQUFBLENBQUssSUFBQSxDQUFNRCxDQUFBQSxDQUFVL0IsQ0FBQUEsQ0FBYyxHQUFJLENBQUEsQ0FDOUQsR0FBSSxFQUFBZ0MsR0FBa0IsQ0FBQSxDQUFBLENBQ3RCLEdBQUksQ0FDRixNQUFNTixDQUFBQSxDQUFRLFdBQUEsQ0FBWSxNQUFBLENBQU8sS0FBQSxDQUFNTSxFQUFpQixDQUFBLENBQUksQ0FBQyxDQUFDLEVBQ2hFLE9BQVNoZCxDQUFBQSxDQUFPLENBQ2Q0YyxDQUFBQSxDQUFRNWMsQ0FBYyxFQUN4QixDQUNGLENBQUEsQ0FFTWlkLENBQUFBLENBQVUsTUFBT0gsQ0FBQUEsQ0FBYUksQ0FBQUEsR0FBbUIsQ0FDckQsR0FBSSxDQUNGLE1BQU1SLENBQUFBLENBQVEsV0FBQSxDQUFZUSxDQUFNLEVBQ2xDLENBQUEsTUFBU2xkLENBQUFBLENBQU8sQ0FDZDRjLEVBQVE1YyxDQUFjLEVBQ3hCLENBQ0YsQ0FBQSxDQUVBLE9BQUF5SyxDQUFBQSxDQUFHLEdBQUEsQ0FBSSxFQUFBLENBQUc4UixHQUFvQk0sQ0FBTSxDQUFBLENBQ3BDcFMsQ0FBQUEsQ0FBRyxHQUFBLENBQUksR0FBRytSLEVBQUFBLENBQXFCUyxDQUFPLENBQUEsQ0FFL0IsSUFBTSxDQUNYeFMsQ0FBQUEsQ0FBRyxHQUFBLENBQUksY0FBQSxDQUFlOFIsRUFBQUEsQ0FBb0JNLENBQU0sQ0FBQSxDQUNoRHBTLENBQUFBLENBQUcsR0FBQSxDQUFJLGVBQWUrUixFQUFBQSxDQUFxQlMsQ0FBTyxFQUNwRCxDQUNGLENDaENPLFNBQVNFLEVBQUFBLENBQWtDLENBQUUsRUFBQSxDQUFBdmIsRUFBSSxXQUFBLENBQUF3YixDQUFBQSxDQUFjLENBQUEsQ0FBRyxPQUFBLENBQUE3VCxFQUFTLE1BQUEsQ0FBQTVJLENBQU8sQ0FBQSxDQUE0QixDQUNuSCxJQUFNMGMsQ0FBQUEsQ0FBZSxJQUFJLEtBQUEsQ0FBTSxDQUFBLGFBQUEsRUFBZ0I5VCxDQUFPLENBQUEsRUFBQSxDQUFJLENBQUEsQ0FDMUQsT0FBTyxrQkFBbUIxSCxDQUFBQSxDQUFZLENBQ3BDLElBQUl5YixDQUFBQSxDQUFVLEVBQ2QsT0FBYSxDQUNYM2MsQ0FBQUEsRUFBUSxjQUFBLEdBQ1IsR0FBSSxDQUNGLElBQU00YyxDQUFBQSxDQUFXLENBQUMzYixDQUFBQSxDQUFHLEdBQUdDLENBQUksQ0FBQyxDQUFBLENBQzdCLE9BQUkwSCxDQUFBQSxFQUNGZ1UsQ0FBQUEsQ0FBUyxLQUNQQyxxQkFBQUEsQ0FBV2pVLENBQU8sQ0FBQSxDQUFFLElBQUEsQ0FBSyxJQUFNLENBQzdCLE1BQU04VCxDQUNSLENBQUMsQ0FDSCxDQUFBLENBRUssTUFBTSxPQUFBLENBQVEsS0FBS0UsQ0FBUSxDQUNwQyxDQUFBLE1BQVNoYSxDQUFBQSxDQUFHLENBR1YsR0FGQTVDLENBQUFBLEVBQVEsY0FBQSxHQUNSMmMsQ0FBQUEsRUFBQUEsQ0FDSUEsQ0FBQUEsRUFBV0YsQ0FBQUEsQ0FDYixNQUFNN1osQ0FBQUEsQ0FFUixNQUFNa0YsRUFBQUEsQ0FBTSxJQUFBLENBQUssSUFBSSxDQUFBLENBQUc2VSxDQUFPLENBQUEsQ0FBSSxHQUFBLENBQU0sS0FBSyxNQUFBLEVBQU8sQ0FBSSxHQUFHLEVBQzlELENBQ0YsQ0FDRixDQUNGLENDdENBLElBQU1HLEVBQUFBLENBQXNCLENBQUMsT0FBQSxDQUFTLE9BQUEsQ0FBUyxTQUFVLE9BQU8sQ0FBQSxDQUMxREMsRUFBQUEsQ0FBaUIsd0JBQUEsQ0FFaEIsU0FBU0MsRUFBQUEsQ0FBVXRhLENBQUFBLENBQXNCLENBQzlDLEdBQUlxYSxHQUFlLElBQUEsQ0FBS3JhLENBQU0sQ0FBQSxDQUM1QixPQUdGLElBQU0yRSxDQUFBQSxDQUFXM0UsQ0FBQUEsQ0FBTyxLQUFBLENBQU0sR0FBRyxDQUFBLENBQUUsQ0FBQyxDQUFBLENBQUksR0FBQSxDQUNsQ25ELEVBQVV1ZCxFQUFBQSxDQUFvQixRQUFBLENBQVN6VixDQUFRLENBQUEsQ0FDakQseUJBQXlCQSxDQUFRLENBQUEsV0FBQSxFQUFjeVYsRUFBQUEsQ0FBb0IsSUFBQSxDQUFLLElBQUksQ0FBQyxDQUFBLENBQUEsQ0FDN0UsQ0FBQSxnQ0FBQSxFQUFtQ0EsR0FBb0IsSUFBQSxDQUFLLElBQUksQ0FBQyxDQUFBLENBQUEsQ0FFckUsTUFBTSxJQUFJLEtBQUEsQ0FBTXZkLENBQU8sQ0FDekIsQ0NUTyxJQUFNMGQsR0FBTixLQUFvQixDQUNqQixRQUFBLENBQ0EsUUFBQSxDQUNBLGNBRVIsSUFBQSxDQUFLM2EsQ0FBQUEsQ0FBc0MsQ0FDekMsR0FBSSxLQUFLLFFBQUEsQ0FDUCxNQUFNLElBQUksS0FBQSxDQUFNLGlCQUFpQixDQUFBLENBRW5DLE9BQUEsSUFBQSxDQUFLLFFBQUEsQ0FBVyxJQUFJLE9BQUEsQ0FBUzdDLENBQUFBLEVBQVksQ0FDdkMsSUFBQSxDQUFLLFNBQVdBLENBQUFBLENBQ1o2QyxDQUFBQSxFQUFTLE9BQUEsR0FBWSxNQUFBLEdBQ3ZCLEtBQUssYUFBQSxDQUFnQixVQUFBLENBQVcsSUFBTSxDQUNwQ0EsQ0FBQUEsQ0FBUSxTQUFBLElBQVksQ0FDcEI3QyxDQUFBQSxHQUNGLENBQUEsQ0FBRzZDLENBQUFBLENBQVEsT0FBTyxDQUFBLEVBRXRCLENBQUMsQ0FBQSxDQUNNLElBQUEsQ0FBSyxRQUNkLENBRUEsUUFBUyxDQUNQLFlBQUEsQ0FBYSxJQUFBLENBQUssYUFBYSxDQUFBLENBQy9CLElBQUEsQ0FBSyxRQUFBLENBQVcsTUFBQSxDQUNoQixLQUFLLFFBQUEsS0FDUCxDQUNGLENBQUEsQ0N6QkEsSUFBTTVCLEVBQUFBLENBQU0sV0FBQSxDQUVOd2MsRUFBQUEsQ0FBTSxJQUFJLEdBQUEsQ0FBSSxDQUNsQixDQUFDLHFCQUFBLENBQXVCLHVCQUF1QixDQUFBLENBQy9DLENBQUMsZ0JBQUEsQ0FBa0IsdUJBQXVCLENBQzVDLENBQUMsQ0FBQSxDQUVLQyxFQUFBQSxDQUFnQixDQUFDLE1BQUEsQ0FBUSxZQUFBLENBQWMsT0FBQSxDQUFTLE9BQUEsQ0FBUyxRQUFTLG1CQUFBLENBQXFCLFdBQVcsQ0FBQSxDQUV4RyxTQUFTQyxFQUFBQSxDQUFjM1csQ0FBQUEsQ0FBc0IsQ0FDM0MsSUFBQSxJQUFXdkUsS0FBS2liLEVBQUFBLENBQWUsR0FBSTFXLENBQUFBLENBQUksVUFBQSxDQUFXdkUsQ0FBQyxDQUFBLENBQUcsT0FBTyxLQUFBLENBQzdELE9BQU8sTUFDVCxDQUVPLFNBQVNtYixFQUFBQSxDQUFXNVcsQ0FBQUEsQ0FBYSxDQUN0QyxHQUFJLENBQUNBLEVBQUksVUFBQSxDQUFXLE1BQU0sQ0FBQSxDQUN4QixPQUFPQSxFQUVULElBQU02VyxDQUFBQSxDQUFTLElBQUlDLE9BQUFBLENBQUk5VyxDQUFHLENBQUEsQ0FDcEJ2SSxDQUFBQSxDQUFTZ2YsRUFBQUEsQ0FBSSxHQUFBLENBQUlJLENBQUFBLENBQU8sUUFBUSxDQUFBLENBQ3RDLE9BQUtwZixHQUdMb2YsQ0FBQUEsQ0FBTyxRQUFBLENBQVdwZixDQUFBQSxDQUNsQm9mLENBQUFBLENBQU8sUUFBQSxDQUFXLE9BQUEsQ0FDWEEsQ0FBQUEsQ0FBTyxRQUFBLElBSkw3VyxDQUtYLENBU08sU0FBUytXLEVBQUFBLENBQWUsQ0FBRSxNQUFBLENBQUE5YSxDQUFBQSxDQUFRLE1BQUEsQ0FBQSthLEVBQVEsYUFBQSxDQUFBQyxDQUFBQSxDQUFlLFdBQUEsQ0FBQUMsQ0FBWSxFQUFtQixDQUM3RixJQUFNclcsQ0FBQUEsQ0FBTW1XLENBQUFBLENBQU8sWUFBWSxPQUFBLENBQVEsVUFBQSxDQUNqQ0csQ0FBQUEsQ0FBVSxJQUFJcFQsRUFBQUEsQ0FBbUIsR0FBRyxDQUFBLENBQ3BDcVQsQ0FBQUEsQ0FBUyxJQUFJLEdBQUEsQ0FFbkIsZUFBZUMsQ0FBQUEsQ0FBS2pYLENBQUFBLENBQWFrWCxFQUF3QixDQUN2RCxJQUFNQyxDQUFBQSxDQUFRLElBQUlmLEdBQ2xCWSxDQUFBQSxDQUFPLEdBQUEsQ0FBSWhYLENBQUFBLENBQUttWCxDQUFLLENBQUEsQ0FDckIsTUFBTUEsQ0FBQUEsQ0FBTSxJQUFBLENBQUssQ0FBRSxPQUFBLENBQVMsR0FBQSxDQUFPLFNBQUEsQ0FBQUQsQ0FBVSxDQUFDLENBQUEsQ0FBRSxPQUFBLENBQVEsSUFBTUYsQ0FBQUEsQ0FBTyxPQUFPaFgsQ0FBRyxDQUFDLEVBQ2xGLENBRUEsU0FBUzdHLENBQUFBLENBQU82RyxDQUFBQSxDQUFhLENBQzNCZ1gsRUFBTyxHQUFBLENBQUloWCxDQUFHLENBQUEsRUFBRyxNQUFBLEdBQ25CLENBRUFTLENBQUFBLENBQUksZUFBQSxDQUFnQixDQUFDMlcsQ0FBQUEsQ0FBU0MsQ0FBQUEsR0FBYSxDQUN6QyxJQUFNelgsQ0FBQUEsQ0FBTXdYLENBQUFBLENBQVEsR0FBQSxDQUNwQixHQUFJTixHQUFlTSxDQUFBQSxDQUFRLFlBQUEsR0FBaUIsT0FBQSxDQUFTLENBQ25EQyxFQUFTLENBQUUsTUFBQSxDQUFRLElBQUssQ0FBQyxFQUN6QixNQUNGLENBQ0EsSUFBTUMsQ0FBQUEsQ0FBVVQsQ0FBQUEsQ0FBZ0JMLEVBQUFBLENBQVc1VyxDQUFHLENBQUEsQ0FBSUEsRUFDbERtWCxDQUFBQSxDQUFRLFFBQUEsQ0FBUyxJQUFNLENBQ3JCLElBQU0vVyxDQUFBQSxDQUFNLENBQUEsRUFBRzRXLENBQUFBLENBQU8sRUFBRSxDQUFBLENBQUEsRUFBSVEsQ0FBQUEsQ0FBUSxFQUFFLENBQUEsQ0FBQSxDQWN0QyxPQWJBNWQsQ0FBQUEsQ0FBTyxLQUFBLENBQU1LLEVBQUFBLENBQUssU0FBVSxDQUMxQixHQUFBLENBQUFtRyxDQUFBQSxDQUNBLEdBQUEsQ0FBQUosRUFDQSxPQUFBLENBQUEwWCxDQUFBQSxDQUNBLE1BQUEsQ0FBUUYsQ0FBQUEsQ0FBUSxPQUNoQixNQUFBLENBQUF2YixDQUFBQSxDQUNBLEtBQUEsQ0FBT2tiLENBQUFBLENBQVEsS0FDakIsQ0FBQyxDQUFBLENBRUNNLENBQUFBLENBREVDLElBQVkxWCxDQUFBQSxDQUNMLENBQUUsTUFBQSxDQUFRLEtBQU0sQ0FBQSxDQUVoQixDQUFFLE1BQUEsQ0FBUSxLQUFBLENBQU8sWUFBYTBYLENBQVEsQ0FGckIsQ0FBQSxDQUl4QmYsRUFBQUEsQ0FBYzNXLENBQUcsQ0FBQSxDQUFVLE9BQUEsQ0FBUSxPQUFBLEdBQ2hDcVgsQ0FBQUEsQ0FBS2pYLENBQUFBLENBQUssSUFBTSxDQUNyQnhHLEVBQU8sSUFBQSxDQUFLSyxFQUFBQSxDQUFLLGdCQUFBLENBQWtCLENBQ2pDLElBQUFtRyxDQUFBQSxDQUNBLEdBQUEsQ0FBQUosQ0FBQUEsQ0FDQSxPQUFBLENBQUEwWCxDQUFBQSxDQUNBLE1BQUEsQ0FBUUYsQ0FBQUEsQ0FBUSxNQUFBLENBQ2hCLE9BQUF2YixDQUNGLENBQUMsRUFDSCxDQUFDLENBQ0gsQ0FBQyxFQUNILENBQUMsQ0FBQSxDQUVENEUsRUFBSSxpQkFBQSxDQUFrQixDQUFDLENBQUUsZUFBQSxDQUFBOFcsQ0FBZ0IsQ0FBQSxDQUFHRixDQUFBQSxHQUFhLENBQ3ZELE9BQU9FLENBQUFBLEdBQWtCLGlCQUFpQixDQUFBLENBQzFDLE9BQU9BLElBQWtCLGlCQUFpQixDQUFBLENBQzFDLE9BQU9BLENBQUFBLEdBQWtCLHlCQUF5QixDQUFBLENBQ2xELE9BQU9BLENBQUFBLEdBQWtCLHlCQUF5QixDQUFBLENBQ2xERixDQUFBQSxDQUFTLENBQUUsTUFBQSxDQUFRLE1BQU8sZUFBQSxDQUFBRSxDQUFnQixDQUFDLEVBQzdDLENBQUMsQ0FBQSxDQUVEOVcsQ0FBQUEsQ0FBSSxXQUFBLENBQWEyVyxHQUFZLENBQzNCLElBQU1wWCxDQUFBQSxDQUFNLENBQUEsRUFBRzRXLENBQUFBLENBQU8sRUFBRSxDQUFBLENBQUEsRUFBSVEsQ0FBQUEsQ0FBUSxFQUFFLENBQUEsQ0FBQSxDQUN0Q2plLENBQUFBLENBQU82RyxDQUFHLENBQUEsQ0FDVnhHLEVBQU8sS0FBQSxDQUFNSyxFQUFBQSxDQUFLLFlBQUEsQ0FBYyxDQUM5QixJQUFBbUcsQ0FBQUEsQ0FDQSxHQUFBLENBQUtvWCxDQUFBQSxDQUFRLEdBQUEsQ0FDYixNQUFBLENBQVFBLENBQUFBLENBQVEsTUFBQSxDQUNoQixVQUFBLENBQVlBLEVBQVEsVUFBQSxDQUNwQixNQUFBLENBQUF2YixDQUNGLENBQUMsRUFDSCxDQUFDLENBQUEsQ0FFRDRFLENBQUFBLENBQUksZ0JBQWlCMlcsQ0FBQUEsRUFBWSxDQUMvQixJQUFNcFgsQ0FBQUEsQ0FBTSxDQUFBLEVBQUc0VyxDQUFBQSxDQUFPLEVBQUUsQ0FBQSxDQUFBLEVBQUlRLEVBQVEsRUFBRSxDQUFBLENBQUEsQ0FDdENqZSxDQUFBQSxDQUFPNkcsQ0FBRyxFQUNOLEVBQUE4VyxDQUFBQSxFQUFlTSxDQUFBQSxDQUFRLFlBQUEsR0FBaUIsU0FBV0EsQ0FBQUEsQ0FBUSxLQUFBLEdBQVUsNEJBQUEsQ0FBQSxFQUd6RTVkLENBQUFBLENBQU8sS0FBQSxDQUFNSyxFQUFBQSxDQUFLLFFBQUEsQ0FBVSxDQUMxQixJQUFBbUcsQ0FBQUEsQ0FDQSxHQUFBLENBQUtvWCxDQUFBQSxDQUFRLEdBQUEsQ0FDYixNQUFBLENBQVFBLENBQUFBLENBQVEsTUFBQSxDQUNoQixLQUFBLENBQU9BLEVBQVEsS0FBQSxDQUNmLFlBQUEsQ0FBY0EsQ0FBQUEsQ0FBUSxZQUFBLENBQ3RCLE1BQUEsQ0FBQXZiLENBQ0YsQ0FBQyxFQUNILENBQUMsRUFDSCxDQUVPLFNBQVMyYixFQUFBQSxDQUFpQlosRUFBdUIsQ0FDdEQsSUFBTW5XLENBQUFBLENBQU1tVyxDQUFBQSxDQUFPLFlBQVksT0FBQSxDQUFRLFVBQUEsQ0FDdkNuVyxDQUFBQSxDQUFJLGVBQUEsQ0FBZ0IsSUFBSSxDQUFBLENBQ3hCQSxDQUFBQSxDQUFJLGlCQUFBLENBQWtCLElBQUksQ0FBQSxDQUMxQkEsQ0FBQUEsQ0FBSSxXQUFBLENBQVksSUFBSSxFQUNwQkEsQ0FBQUEsQ0FBSSxlQUFBLENBQWdCLElBQUksRUFDMUIsQ0M1SEEsSUFBTTVHLENBQUFBLENBQU0sVUFBQSxDQUNONGQsRUFBQUEsQ0FBZ0IsSUFBSSxLQUFBLENBQU0sZ0JBQWdCLENBQUEsQ0FVaEQsU0FBU0MsRUFBQUEsQ0FBYyxDQUFFLE1BQUEsQ0FBQTdiLENBQUFBLENBQVEsSUFBQThiLENBQUFBLENBQUssTUFBQSxDQUFBQyxDQUFBQSxDQUFRLFFBQUEsQ0FBQUMsRUFBVSxNQUFBLENBQUExZSxDQUFPLENBQUEsQ0FBa0IsQ0FDL0UsT0FBTyxJQUFJLE9BQUEsQ0FBYyxDQUFDUCxFQUFTQyxDQUFBQSxHQUFXLENBQzVDLElBQU1rSixDQUFBQSxDQUFVLFVBQUEsQ0FBVyxJQUFNK1YsQ0FBQUEsQ0FBS0wsRUFBYSxFQUFHLEdBQU0sQ0FBQSxDQUN0REssQ0FBQUEsQ0FBUTdlLENBQUFBLEVBQWtCLENBQzlCLFlBQUEsQ0FBYThJLENBQU8sQ0FBQSxDQUNoQjlJLEVBQUtKLENBQUFBLENBQU9JLENBQUcsQ0FBQSxDQUNkTCxDQUFBQSxHQUNQLENBQUEsQ0FDQU8sQ0FBQUEsRUFBUSxjQUFBLEVBQWUsQ0FDdkJBLEdBQVEsZ0JBQUEsQ0FBaUIsT0FBQSxDQUFTLElBQU0yZSxDQUFBQSxDQUFLM2UsQ0FBQUEsQ0FBTyxNQUFNLENBQUEsQ0FBRyxDQUFFLEtBQU0sSUFBSyxDQUFDLENBQUEsQ0FDM0V3ZSxDQUFBQSxDQUFJLFlBQVksSUFBQSxDQUFLLFdBQUEsQ0FBYSxJQUFNLENBQ3RDbmUsRUFBTyxLQUFBLENBQU1LLENBQUFBLENBQUssWUFBQSxDQUFjLENBQUUsTUFBQSxDQUFBZ0MsQ0FBTyxDQUFDLENBQUEsQ0FDdENnYyxHQUFVQyxDQUFBQSxHQUNoQixDQUFDLENBQUEsQ0FDREgsRUFBSSxXQUFBLENBQVksSUFBQSxDQUFLLGtCQUFBLENBQW9CLElBQU0sQ0FDN0NuZSxDQUFBQSxDQUFPLEtBQUEsQ0FBTUssQ0FBQUEsQ0FBSyxtQkFBQSxDQUFxQixDQUFFLE1BQUEsQ0FBQWdDLENBQU8sQ0FBQyxFQUNqRGljLENBQUFBLEdBQ0YsQ0FBQyxDQUFBLENBQ0RILENBQUFBLENBQUksV0FBQSxDQUFZLElBQUEsQ0FBSyxlQUFBLENBQWlCLENBQUNyQyxDQUFBQSxDQUFJcGMsQ0FBQUEsQ0FBTTZlLENBQUFBLENBQU1uWSxDQUFBQSxHQUFRLENBQzdELElBQU1uSSxDQUFBQSxDQUFNLENBQUEsZUFBQSxFQUFrQixLQUFLLFNBQUEsQ0FBVSxDQUFFLEdBQUEsQ0FBQW1JLENBQUFBLENBQUssT0FBQS9ELENBQUFBLENBQVEsSUFBQSxDQUFBM0MsQ0FBQUEsQ0FBTSxJQUFBLENBQUE2ZSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FDekV2ZSxDQUFBQSxDQUFPLEtBQUEsQ0FBTUssQ0FBQUEsQ0FBS3BDLENBQUcsQ0FBQSxDQUNyQnFnQixFQUFLLElBQUksS0FBQSxDQUFNcmdCLENBQUcsQ0FBQyxFQUNyQixDQUFDLENBQUEsQ0FDRGtnQixDQUFBQSxDQUFJLFdBQUEsQ0FBWSxLQUFLLHFCQUFBLENBQXVCLENBQUNyQyxDQUFBQSxDQUFJLENBQUUsUUFBQSxDQUFBMEMsQ0FBQUEsQ0FBVSxNQUFBLENBQUE1ZSxDQUFPLElBQU0sQ0FDeEUsSUFBTTNCLENBQUFBLENBQU0sQ0FBQSxxQkFBQSxFQUF3QixLQUFLLFNBQUEsQ0FBVSxDQUFFLE1BQUEsQ0FBQW9FLENBQUFBLENBQVEsU0FBQW1jLENBQUFBLENBQVUsTUFBQSxDQUFBNWUsQ0FBTyxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQ2hGSSxDQUFBQSxDQUFPLEtBQUEsQ0FBTUssRUFBS3BDLENBQUcsQ0FBQSxDQUNyQnFnQixDQUFBQSxDQUFLLElBQUksS0FBQSxDQUFNcmdCLENBQUcsQ0FBQyxFQUNyQixDQUFDLENBQUEsQ0FDRG1nQixDQUFBQSxHQUNGLENBQUMsQ0FDSCxDQUVPLFNBQVNLLEVBQUFBLENBQWNOLEVBQW9CLENBQ2hELE9BQU8sSUFBSSxPQUFBLENBQWUvZSxHQUFZLENBQ3BDNGUsRUFBQUEsQ0FBaUJHLENBQUcsQ0FBQSxDQUNwQixJQUFNdFcsQ0FBQUEsQ0FBUSxVQUFBLENBQVcsSUFBTSxDQUM3QixHQUFJLENBQ0Y3SCxDQUFBQSxDQUFPLElBQUEsQ0FBS0ssRUFBSyxhQUFhLENBQUEsQ0FDOUI4ZCxDQUFBQSxDQUFJLE9BQUEsR0FDTixDQUFBLEtBQVEsQ0FBQyxDQUNURyxJQUNGLENBQUEsQ0FBRyxHQUFJLENBQUEsQ0FDREEsQ0FBQUEsQ0FBTyxLQUFPLFlBQUEsQ0FBYXpXLENBQUssRUFBR3pJLENBQUFBLEVBQVEsQ0FBQSxDQUNqRCtlLENBQUFBLENBQUksV0FBQSxDQUFZLGNBQWEsQ0FDN0JBLENBQUFBLENBQUksV0FBQSxDQUFZLFFBQUEsQ0FBUyxRQUFPLENBQ2hDQSxDQUFBQSxDQUFJLElBQUEsQ0FBSyxRQUFBLENBQVVHLENBQUksQ0FBQSxDQUN2QkgsQ0FBQUEsQ0FBSSxLQUFBLEdBQ04sQ0FBQyxDQUNILENBWUEsU0FBU08sRUFBQUEsQ0FBWUMsQ0FBQUEsQ0FBZ0QsQ0FDbkUsR0FBSUEsRUFBUyxhQUFBLENBQWUsT0FBT3JoQixFQUFBQSxDQUNuQyxHQUFJcWhCLENBQUFBLENBQVMsU0FBQSxDQUFXLE9BQU90aEIsRUFFakMsQ0FFQSxlQUFldWhCLEVBQUFBLENBQVcsQ0FBRSxNQUFBLENBQUF2YyxFQUFRLFFBQUEsQ0FBQXNjLENBQUFBLENBQVUsUUFBQSxDQUFBTixDQUFBQSxDQUFVLE9BQUExZSxDQUFBQSxDQUFRLFNBQUEsQ0FBQWtmLENBQVUsQ0FBQSxDQUEwQyxDQUNsSCxHQUFNLENBQUUsS0FBQSxDQUFBN2EsRUFBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsYUFBQSxDQUFBb1osQ0FBYyxFQUFJc0IsQ0FBQUEsQ0FDbkM1YixDQUFBQSxDQUFNc2EsQ0FBQUEsQ0FBZ0JMLEVBQUFBLENBQVczYSxDQUFNLENBQUEsQ0FBSUEsQ0FBQUEsQ0FFM0M4YixDQUFBQSxDQUFNLElBQUlXLHNCQUFBQSxDQUFjLENBQzVCLEtBQUEsQ0FBQTlhLENBQUFBLENBQ0EsT0FBUUMsQ0FBQUEsQ0FBUyxDQUFBLENBQ2pCLFFBQUEsQ0FBVUQsQ0FBQUEsQ0FDVixVQUFXQyxDQUFBQSxDQUFTLENBQUEsQ0FDcEIsUUFBQSxDQUFVRCxDQUFBQSxDQUNWLFVBQVdDLENBQUFBLENBQVMsQ0FBQSxDQUNwQixTQUFBLENBQVcsS0FBQSxDQUNYLFdBQUEsQ0FBYSxLQUFBLENBQ2IsT0FBQSxDQUFTLEtBQUEsQ0FDVCxLQUFNLEtBQUEsQ0FDTixXQUFBLENBQWEsSUFBQSxDQUNiLGVBQUEsQ0FBaUIsTUFBQSxDQUNqQixLQUFBLENBQU8sS0FBQSxDQUNQLGNBQUEsQ0FBZ0IsQ0FDZCxTQUFBLENBQVcsSUFBQSxDQUNYLG9CQUFBLENBQXNCLEtBQUEsQ0FDdEIsZUFBQSxDQUFpQixJQUFBLENBQ2pCLDBCQUFBLENBQTRCLElBQUEsQ0FDNUIsd0JBQXlCLElBQUEsQ0FDekIsZ0JBQUEsQ0FBa0IsS0FBQSxDQUNsQixXQUFBLENBQWEsTUFDYiwyQkFBQSxDQUE2QixJQUFBLENBQzdCLG9CQUFBLENBQXNCLElBQUEsQ0FDdEIsUUFBU3lhLEVBQUFBLENBQVlDLENBQVEsQ0FDL0IsQ0FDRixDQUFDLENBQUEsQ0FDRHhCLEVBQUFBLENBQWUsQ0FBRSxPQUFBOWEsQ0FBQUEsQ0FBUSxNQUFBLENBQVE4YixDQUFBQSxDQUFLLGFBQUEsQ0FBQWQsRUFBZSxXQUFBLENBQWFzQixDQUFBQSxDQUFTLGFBQWMsQ0FBQyxFQUMxRlIsQ0FBQUEsQ0FBSSxXQUFBLENBQVksUUFBQSxDQUFTLE1BQUEsQ0FBTyxLQUFLLENBQUEsQ0FDckMsTUFBTVUsQ0FBQUEsR0FBWVYsQ0FBRyxDQUFBLENBRXJCQSxDQUFBQSxDQUFJLFdBQUEsQ0FBWSxFQUFBLENBQUcsa0JBQW1CLENBQUMsQ0FBRSxLQUFBLENBQUFqZSxDQUFBQSxDQUFPLFFBQUFoQixDQUFBQSxDQUFTLFVBQUEsQ0FBQTZmLENBQUFBLENBQVksUUFBQSxDQUFBQyxDQUFTLENBQUEsR0FBTSxDQUNsRixJQUFNQyxFQUFPLENBQUM1ZSxDQUFBQSxDQUFLLFVBQUEsQ0FBWSxDQUFFLE9BQUEsQ0FBQW5CLENBQUFBLENBQVMsVUFBQSxDQUFBNmYsQ0FBQUEsQ0FBWSxTQUFBQyxDQUFBQSxDQUFVLE1BQUEsQ0FBQTNjLENBQU8sQ0FBQyxDQUFBLENBQ3hFbkMsQ0FBQUEsR0FBVSxPQUFBLENBQVVGLENBQUFBLENBQU8sTUFBTSxHQUFHaWYsQ0FBSSxDQUFBLENBQUlqZixDQUFBQSxDQUFPLE1BQU0sR0FBR2lmLENBQUksQ0FBQSxDQUM1RCxFQUFBL2UsSUFBVSxTQUFBLEVBQWFoQixDQUFBQSxDQUFRLFVBQUEsQ0FBVyw2QkFBNkIsQ0FBQSxDQUFBLEVBQzNFeWYsQ0FBQUEsQ0FBUyxTQUFBLENBQVV6ZSxDQUFBQSxDQUFPaEIsQ0FBTyxFQUNuQyxDQUFDLENBQUEsQ0FFRCxHQUFJLENBQ0YsSUFBTWtILENBQUFBLENBQU04RCxFQUFBQSxDQUFlbkgsQ0FBQUEsQ0FBSyxDQUFFLEtBQUEsQ0FBQWlCLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFPLENBQUMsQ0FBQSxDQUNqRCxNQUFNaWEsRUFBQUEsQ0FBYyxDQUFFLE1BQUEsQ0FBQTdiLENBQUFBLENBQVEsR0FBQSxDQUFBOGIsQ0FBQUEsQ0FBSyxPQUFRLElBQU1BLENBQUFBLENBQUksT0FBQSxDQUFRL1gsQ0FBRyxFQUFHLFFBQUEsQ0FBQWlZLENBQUFBLENBQVUsTUFBQSxDQUFBMWUsQ0FBTyxDQUFDLEVBQ3ZGLENBQUEsTUFBUzRDLENBQUFBLENBQUcsQ0FDVixNQUFBLE1BQU1rYyxFQUFBQSxDQUFjTixDQUFHLENBQUEsQ0FDakI1YixDQUNSLENBRUEsT0FBTzRiLENBQ1QsQ0FFQSxJQUFNZSxFQUFBQSxDQUFzQi9DLEVBQUFBLENBQVMsQ0FBRSxFQUFBLENBQUl5QyxFQUFBQSxDQUFZLFdBQUEsQ0FBYSxDQUFFLENBQUMsQ0FBQSxDQUV2RSxlQUFzQk8sRUFBQUEsQ0FBVyxDQUFFLE9BQUE5YyxDQUFBQSxDQUFRLFFBQUEsQ0FBQXNjLENBQUFBLENBQVUsU0FBQSxDQUFBRSxFQUFXLE1BQUEsQ0FBQWxmLENBQU8sQ0FBQSxDQUEwQyxDQUMvR2dkLEVBQUFBLENBQVV0YSxDQUFNLENBQUEsQ0FFaEIxQyxDQUFBQSxFQUFRLGdCQUFlLENBQ3ZCLElBQUl5ZixDQUFBQSxDQUNBcGdCLENBQUFBLENBQ0osR0FBSSxDQUNGb2dCLENBQUFBLENBQVMsTUFBTUYsR0FBb0IsQ0FBRSxNQUFBLENBQUE3YyxDQUFBQSxDQUFRLFFBQUEsQ0FBQXNjLENBQUFBLENBQVUsTUFBQSxDQUFBaGYsQ0FBTyxDQUFDLEVBQ2pFLENBQUEsTUFBUzRDLENBQUFBLENBQUcsQ0FDVnZELENBQUFBLENBQVF1RCxFQUNWLENBRUEsSUFBTThjLENBQUFBLENBQU8sSUFBTVQsR0FBVyxDQUFFLE1BQUEsQ0FBQXZjLENBQUFBLENBQVEsUUFBQSxDQUFBc2MsQ0FBQUEsQ0FBVSxTQUFBLENBQUFFLENBQUFBLENBQVcsTUFBQSxDQUFBbGYsRUFBUSxRQUFBLENBQVVnZixDQUFBQSxDQUFTLGNBQWUsQ0FBQyxDQUFBLENBRXhHLEdBQUlBLENBQUFBLENBQVMsY0FBQSxFQUFrQjNmLElBQVVpZixFQUFBQSxDQUN2QyxPQUFBamUsQ0FBQUEsQ0FBTyxJQUFBLENBQUtLLENBQUFBLENBQUssQ0FBQSxnQkFBQSxFQUFtQmdDLENBQU0sQ0FBQSwyQkFBQSxDQUE2QixFQUNoRSxNQUFNZ2QsQ0FBQUEsRUFBSyxDQUdwQixHQUFJcmdCLEVBQU8sQ0FDVCxHQUFNLENBQUUsT0FBQSxDQUFBRSxFQUFTLEtBQUEsQ0FBQW9nQixDQUFNLENBQUEsQ0FBSXRnQixDQUFBQSxDQUMzQixNQUFNLElBQUksS0FBQSxDQUFNLENBQUEseUJBQUEsRUFBNEIsS0FBSyxTQUFBLENBQVUsQ0FBRSxNQUFBLENBQUFxRCxDQUFBQSxDQUFRLFFBQUFuRCxDQUFBQSxDQUFTLEtBQUEsQ0FBQW9nQixDQUFNLENBQUMsQ0FBQyxDQUFBLENBQUUsQ0FDMUYsQ0FFSUYsQ0FBQUEsR0FDRkEsQ0FBQUEsQ0FBTyxXQUFBLENBQVksa0JBQUEsRUFBbUIsQ0FDdENwQixHQUFpQm9CLENBQU0sQ0FBQSxDQUN2QixNQUFNM1gsRUFBQUEsQ0FBTSxHQUFJLENBQUEsQ0FDaEIsTUFBTWdYLEVBQUFBLENBQWNXLENBQU0sR0FHNUIsR0FBSSxDQUNGLE9BQU8sTUFBTUMsQ0FBQUEsRUFDZixDQUFBLE1BQVM5YyxDQUFBQSxDQUFHLENBQ1YsR0FBTSxDQUFFLE9BQUEsQ0FBQXJELENBQUFBLENBQVMsS0FBQSxDQUFBb2dCLENBQU0sQ0FBQSxDQUFJL2MsQ0FBQUEsQ0FDM0IsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLHVCQUFBLEVBQTBCLElBQUEsQ0FBSyxTQUFBLENBQVUsQ0FBRSxNQUFBLENBQUFGLENBQUFBLENBQVEsUUFBQW5ELENBQUFBLENBQVMsS0FBQSxDQUFBb2dCLENBQU0sQ0FBQyxDQUFDLENBQUEsQ0FBRSxDQUN4RixDQUNGLENDdktBLElBQU1qZixFQUFBQSxDQUFNLFVBQUEsQ0FFWixlQUFzQmtmLEVBQUFBLENBQU90ZCxDQUFBQSxDQUFvRCxDQUcvRSxJQUFBcUIsQ0FBQUEsQ0FBQSxPQUZBLEdBQU0sQ0FBRSxNQUFBLENBQUFqQixDQUFBQSxDQUFRLElBQUE2QixDQUFBQSxDQUFLLEtBQUEsQ0FBQUYsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLEVBQVEsUUFBQSxDQUFBcUIsQ0FBQUEsQ0FBVSxTQUFBLENBQUErVSxDQUFBQSxDQUFXLE9BQUEsQ0FBQUQsQ0FBQUEsQ0FBUyxjQUFBLENBQUExQixDQUFBQSxDQUFnQixPQUFBL1ksQ0FBQUEsQ0FBUSxVQUFBLENBQUE2ZixDQUFXLENBQUEsQ0FBSXZkLEVBRXpHLElBQVl5WixDQUFBQSxDQUFVbFksQ0FBQUEsQ0FBQUYsQ0FBQUEsQ0FBQSxNQUFNNFcsRUFBQUEsQ0FBZ0IsTUFBQSxDQUFPLENBQUUsS0FBQSxDQUFBbFcsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsR0FBQSxDQUFBQyxFQUFLLE9BQUEsQ0FBQWtXLENBQUFBLENBQVMsU0FBQSxDQUFBQyxDQUFBQSxDQUFXLGNBQUEsQ0FBQTNCLENBQWUsQ0FBQyxDQUFBLENBQXZGLElBRXRCLElBQU0rRyxDQUFBQSxDQUFRLElBQUEsQ0FBSyxJQUFBLENBQUt2YixDQUFBQSxDQUFNb0IsQ0FBUSxDQUFBLENBQ3RDLElBQU1vYSxFQUFnQixHQUFBLENBQU94YixDQUFBQSxDQUM3QixJQUFNeWIsQ0FBQUEsQ0FBa0IsQ0FBRSxLQUFBLENBQUEzYixDQUFBQSxDQUFPLE1BQUEsQ0FBUUMsQ0FBQUEsQ0FBUyxDQUFFLENBQUEsQ0FFcEQsSUFBSTJiLENBQUFBLENBQVUsQ0FBQSxDQUNkLElBQUlDLENBQUFBLENBQ0osSUFBSUMsQ0FBQUEsQ0FBVyxFQUNmLElBQUlDLENBQUFBLENBQ0osSUFBSUMsQ0FBQUEsQ0FDSixJQUFJQyxDQUFBQSxDQUNKLElBQUl0VyxDQUFBQSxDQUNKLElBQU11VyxFQUFZLElBQUl2RixFQUFBQSxDQUFlelcsQ0FBRyxDQUFBLENBRXhDLElBQUlpYyxDQUFBQSxDQUNKLElBQU1DLENBQUFBLENBQWlCN2IsR0FBa0IsQ0FDdkNxYixDQUFBQSxFQUFBQSxDQUNBbEUsQ0FBQUEsQ0FBUSxVQUFBLENBQVduWCxDQUFLLENBQUEsQ0FBRSxLQUFBLENBQU9oQyxFQUFBQSxFQUFPd2QsQ0FBQUEsR0FBZ0J4ZCxFQUFFLEVBQzVELENBQUEsQ0FFQSxJQUFNOGQsRUFBQUEsQ0FBUSxDQUFDdkUsQ0FBQUEsQ0FBYXdFLEVBQUFBLENBQWFDLEVBQUFBLEdBQXVCLENBRTlELEdBREFSLENBQUFBLEdBQWdCcGdCLENBQUFBLEVBQVEsTUFBQSxDQUNwQm9nQixDQUFBQSxDQUFhLENBQ2ZFLENBQUFBLEdBQVdGLENBQVcsRUFDdEIsTUFDRixDQUVBLElBQU1TLENBQUFBLENBQVlELEVBQUFBLENBQU0sT0FBQSxFQUFRLENBQ2hDLEdBQUksQ0FBQ2xGLEVBQUFBLENBQVdtRixDQUFBQSxDQUFXYixDQUFTLENBQUEsQ0FBRyxDQUVyQ2pYLEVBQUFBLENBQWVWLEVBQUFBLENBQUsyWCxDQUFTLENBQUEsQ0FDN0IsTUFDRixDQUdBLElBQU0xVyxFQUFBQSxDQUFTc1gsRUFBQUEsQ0FBTSxRQUFBLEVBQVMsQ0FDeEJFLEVBQUFBLENBQWN6WCxFQUFBQSxDQUFZQyxHQUFRdVgsQ0FBUyxDQUFBLENBQ2pELEdBQUlDLEVBQUFBLEdBQWdCLEtBQUEsQ0FBQSxDQUFXLENBQzdCVixDQUFBQSxHQUFnQixJQUFJLE1BQU0sQ0FBQSxlQUFBLEVBQWtCSCxDQUFPLENBQUEsQ0FBRSxDQUFBLENBQ3JELE1BQ0YsQ0FHQSxHQUFJQyxDQUFBQSxHQUFvQixRQUFhWSxFQUFBQSxDQUFjWixDQUFBQSxDQUFrQkgsQ0FBQUEsQ0FBZ0IsRUFBQSxDQUFLLE9BRTFGLElBQU1nQixFQUFBQSxDQUFVLE1BQUEsQ0FBTyxJQUFBLENBQUt6WCxHQUFPLE1BQUEsQ0FBUUEsRUFBQUEsQ0FBTyxVQUFBLENBQVloRixDQUFBQSxDQUFTRCxDQUFBQSxDQUFRLENBQUMsQ0FBQSxDQUVoRixHQUFJNmIsSUFBb0IsS0FBQSxDQUFBLENBQ3RCTyxDQUFBQSxDQUFjTSxFQUFPLENBQUEsQ0FDckJSLENBQUFBLENBQVUsS0FBQSxFQUFNLENBQUEsS0FDWCxDQUNMLElBQU1TLEVBQUFBLENBQVlGLEVBQUFBLENBQWNaLENBQUFBLENBQ2hDLEdBQUljLEVBQUFBLEVBQWFqQixDQUFBQSxDQUFnQixHQUFBLENBQy9CVSxDQUFBQSxDQUFjTSxFQUFPLENBQUEsQ0FDckJSLENBQUFBLENBQVUsS0FBQSxFQUFNLENBQUEsS0FDWCxDQUNMLElBQU1VLEVBQUFBLENBQWlCLElBQUEsQ0FBSyxLQUFBLENBQU1ELEdBQVlqQixDQUFhLENBQUEsQ0FDM0RRLENBQUFBLENBQVUsT0FBQSxDQUFRVSxFQUFBQSxDQUFpQixDQUFDLENBQUEsQ0FDcENWLENBQUFBLENBQVUsT0FBTSxDQUNoQixJQUFBLElBQVM5VyxFQUFBQSxDQUFJLENBQUEsQ0FBR0EsR0FBSXdYLEVBQUFBLEVBQWtCaEIsQ0FBQUEsQ0FBVUgsQ0FBQUEsQ0FBT3JXLEVBQUFBLEVBQUFBLENBQ3JEZ1gsRUFBY00sRUFBTyxFQUV6QixDQUNGLENBQ0FiLENBQUFBLENBQWtCWSxFQUFBQSxDQUVsQixJQUFNSSxFQUFBQSxDQUFjLEtBQUssS0FBQSxDQUFPakIsQ0FBQUEsQ0FBVUgsQ0FBQUEsQ0FBUyxHQUFHLEVBQ2xEb0IsRUFBQUEsR0FBZ0JmLENBQUFBLEdBQ2xCQSxDQUFBQSxDQUFXZSxFQUFBQSxDQUNYckIsRUFBV00sQ0FBUSxDQUFBLENBQUEsQ0FHckIsSUFBTWdCLEVBQUFBLENBQWF4YixDQUFBQSxDQUFXLEdBQUEsQ0FBQSxDQUMxQm1iLEVBQUFBLEVBQWVLLEVBQUFBLENBQWFwQixFQUFnQixFQUFBLEVBQU9FLENBQUFBLEVBQVdILENBQUFBLEdBQ2hFTyxDQUFBQSxLQUVKLENBQUEsQ0FFQSxJQUFNN0IsQ0FBQUEsQ0FBTSxNQUFNZ0IsRUFBQUEsQ0FBVyxDQUMzQixNQUFBLENBQUE5YyxDQUFBQSxDQUNBLFFBQUEsQ0FBVUosQ0FBQUEsQ0FDVixNQUFBLENBQUF0QyxDQUFBQSxDQUNBLFVBQVl3ZSxDQUFBQSxFQUFRLENBQ2Q5RCxDQUFBQSxHQUNGOEYsQ0FBQUEsQ0FBZTFFLEdBQXFCLENBQ2xDLEVBQUEsQ0FBSTBDLENBQUFBLENBQUksV0FBQSxDQUNSLFFBQUF6QyxDQUFBQSxDQUNBLGNBQUEsQ0FBZ0IsSUFBTW1FLENBQUFBLEVBQW1CLENBQUEsQ0FDekMsT0FBQSxDQUFVdGQsRUFBQUEsRUFBY3dkLENBQUFBLEdBQWdCeGQsRUFDMUMsQ0FBQyxDQUFBLEVBRUwsQ0FDRixDQUFDLENBQUEsQ0FDRCxJQUFNeUYsRUFBQUEsQ0FBTW1XLENBQUFBLENBQUksWUFBWSxRQUFBLENBRTVCLEdBQUksQ0FDRkEsQ0FBQUEsQ0FBSSxXQUFBLENBQVksWUFBQSxFQUFhLENBQzdCQSxDQUFBQSxDQUFJLFlBQVksWUFBQSxDQUFhamEsQ0FBRyxDQUFBLENBQ2hDaWEsQ0FBQUEsQ0FBSSxZQUFZLEVBQUEsQ0FBRyxPQUFBLENBQVNrQyxFQUFLLENBQUEsQ0FDakNsQyxFQUFJLFdBQUEsQ0FBWSxhQUFBLEVBQWMsQ0FDOUJ4ZSxDQUFBQSxFQUFRLGNBQUEsRUFBZSxDQUN2QkEsQ0FBQUEsRUFBUSxnQkFBQSxDQUFpQixRQUFTLElBQU1zZ0IsQ0FBQUEsR0FBV3RnQixDQUFBQSxDQUFPLE1BQU0sQ0FBQSxDQUFHLENBQUUsSUFBQSxDQUFNLENBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDakYsTUFBTTRKLEVBQUFBLENBQVd2QixFQUFHLENBQUEsQ0FDcEIsTUFBTSxJQUFJLE9BQUEsQ0FBYyxDQUFDNUUsQ0FBQUEsQ0FBR3VNLEVBQUFBLEdBQU0sQ0FDaEMsQ0FBQ3FRLEVBQVVDLENBQVEsQ0FBQSxDQUFJLENBQUM3YyxDQUFBQSxDQUFHdU0sRUFBQyxDQUFBLENBQzVCLElBQUlvUixFQUFBQSxDQUFjLENBQUEsQ0FDZEMsQ0FBQUEsQ0FBUSxDQUFBLENBQ1pyWCxDQUFBQSxDQUFXLFdBQUEsQ0FBWSxJQUFNLENBQzNCLEdBQUlpVyxDQUFBQSxHQUFZbUIsRUFBQUEsQ0FBYSxDQUMzQkEsRUFBQUEsQ0FBY25CLENBQUFBLENBQ2RvQixDQUFBQSxDQUFRLENBQUEsQ0FDUixNQUNGLENBQ0EsR0FBSUEsQ0FBQUEsRUFBUyxDQUFBLENBQUcsQ0FDZGYsQ0FBQUEsR0FBVyxJQUFJLEtBQUEsQ0FBTSxrQkFBa0IsQ0FBQyxDQUFBLENBQ3hDLE1BQ0YsQ0FDQWpnQixFQUFPLElBQUEsQ0FBS0ssRUFBQUEsQ0FBSyxDQUFBLEVBQUdnQyxDQUFNLHNDQUFzQ3VkLENBQU8sQ0FBQSxPQUFBLEVBQVVvQixDQUFLLENBQUEsQ0FBRSxDQUFBLENBQ3hGQSxDQUFBQSxFQUFBQSxDQUNBN0MsQ0FBQUEsQ0FBSSxXQUFBLENBQVksYUFDbEIsQ0FBQSxDQUFHLEdBQUksRUFDVCxDQUFDLEVBQ0gsQ0FBQSxPQUFFLENBQ0EsY0FBY3hVLENBQVEsQ0FBQSxDQUN0QndVLENBQUFBLENBQUksV0FBQSxDQUFZLEdBQUEsQ0FBSSxPQUFBLENBQVNrQyxFQUFLLENBQUEsQ0FDbEMsTUFBTTVCLEVBQUFBLENBQWNOLENBQUcsQ0FBQSxDQUN2QmdDLENBQUFBLEtBQ0EsTUFBTXpFLENBQUFBLENBQVEsTUFBQSxHQUNoQixDQUVBLEdBQUlxRSxDQUFBQSxFQUFlSCxDQUFBQSxHQUFZLENBQUEsQ0FDN0IsTUFBTUcsQ0FBQUEsRUFBZSxJQUFJLEtBQUEsQ0FBTSxvQkFBb0IsQ0FBQSxDQUFBLEtBQzlDLENBQ0wsSUFBTWtCLENBQUFBLENBQVlmLENBQUFBLENBQVUsUUFBQSxFQUFTLENBQ3JDLE9BQU8sQ0FBRSxPQUFBLENBQUFOLENBQUFBLENBQVMsSUFBQSxDQUFNcUIsQ0FBQUEsQ0FBVSxJQUFBLENBQU0sT0FBQSxDQUFBN0csQ0FBUSxDQUNsRCxRQXhJQTNWLEVBQUFBLENBQUEsQ0FBQSxJQUFBQyxFQUFBQSxDQUFBRCxFQUFBQSxDQUFBRSxHQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUEsSUFBQUUsRUFBQUEsQ0FBQUQsQ0FBQUEsQ0FBQXRCLENBQUFBLENBQUFvQixHQUFBQyxFQUFBQSxDQUFBQSxDQUFBRSxFQUFBQSxFQUFBLE1BQUFBLEdBQUFBLENBeUlGLENDeEpBLElBQU14RSxFQUFBQSxDQUFNLFlBQUEsQ0FFQzZnQixHQUFzQixDQUFBLENBRW5DLGVBQXNCQyxFQUFBQSxDQUFnQnhoQixDQUFBQSxDQUFxQnllLENBQUFBLENBQXNDLENBQy9GLElBQUlnRCxDQUFBQSxDQUNKLFFBQVM5RSxDQUFBQSxDQUFVLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBVTRFLEVBQUFBLENBQXFCNUUsQ0FBQUEsRUFBQUEsQ0FDbkQsR0FBSSxDQUNGLE9BQU8sTUFBTThCLENBQUFBLEVBQ2YsQ0FBQSxNQUFTN2IsQ0FBQUEsQ0FBRyxDQUNWLEdBQUk1QyxDQUFBQSxDQUFPLE9BQUEsQ0FBUyxNQUFNNEMsRUFDMUI2ZSxDQUFBQSxDQUFVN2UsQ0FBQUEsQ0FDVnZDLENBQUFBLENBQU8sSUFBQSxDQUFLSyxFQUFBQSxDQUFLLENBQUEsTUFBQSxFQUFTaWMsQ0FBQUEsQ0FBVSxDQUFDLElBQUk0RSxFQUFtQixDQUFBLEVBQUEsRUFBTTNlLENBQUFBLENBQVksT0FBTyxFQUFFLEVBQ3pGLENBRUYsTUFBTTZlLENBQ1IsQ0NkQSxJQUFNL2dCLEVBQUFBLENBQU0sU0FBQSxDQUNOZ2hCLEVBQUFBLENBQXFCLEdBQUEsQ0FFM0IsZUFBc0JDLEdBQWMvYyxDQUFBQSxDQUFpQ2dkLENBQUFBLENBQW9DLENBQ3ZHLEdBQUksR0FBQ2hkLENBQUFBLEVBQVMsQ0FBQ0EsQ0FBQUEsQ0FBTSxHQUFBLENBQUEsQ0FDckIsR0FBSSxDQUNGLElBQU1pZCxDQUFBQSxDQUFPLENBQUEsbURBQUEsRUFBc0RELENBQVcsQ0FBQSxDQUFBLENBQUEsQ0FDeEVFLENBQUFBLENBQUtsZCxDQUFBQSxDQUFNLGtCQUFrQmlkLENBQUksQ0FBQSxDQUN2QyxNQUFNN1osQ0FBQUEsQ0FBWThaLENBQUFBLENBQUlKLEVBQUFBLENBQW9CLGVBQWUsRUFDM0QsT0FBUzllLENBQUFBLENBQUcsQ0FDVnZDLENBQUFBLENBQU8sSUFBQSxDQUFLSyxFQUFBQSxDQUFLLENBQUEsaUJBQUEsRUFBb0JrQyxDQUFBQSxZQUFhLEtBQUEsQ0FBUUEsRUFBRSxPQUFBLENBQVUsTUFBQSxDQUFPQSxDQUFDLENBQUMsRUFBRSxFQUNuRixDQUNGLENDWk8sSUFBTW1mLEdBQWMsY0FBQSxDQUUzQixlQUFzQkMsRUFBQUEsQ0FBS3BkLENBQUFBLENBQWlDZ2QsQ0FBQUEsQ0FBcUIsQ0FDL0UsR0FBSSxDQUFDaGQsRUFBTyxPQUNaLElBQU1pZCxDQUFBQSxDQUFPLENBQUEsT0FBQSxFQUFVRSxFQUFXLENBQUEsU0FBQSxFQUFZQSxFQUFXLENBQUEsU0FBQSxFQUFZSCxDQUFXLElBQzFFSyxDQUFBQSxDQUFTcmQsQ0FBQUEsQ0FBTSxpQkFBQSxDQUFrQmlkLENBQUksQ0FBQSxDQUMzQyxNQUFNLE9BQUEsQ0FBUSxHQUFBLENBQUksQ0FBQzdaLENBQUFBLENBQVlpYSxDQUFBQSxDQUFRLEdBQUEsQ0FBTyx3QkFBd0IsRUFBR04sRUFBQUEsQ0FBYy9jLENBQUFBLENBQU9nZCxDQUFXLENBQUMsQ0FBQyxFQUM3RyxDQ1FBLElBQU1saEIsRUFBQUEsQ0FBTSxTQUFBLENBU1osZUFBZWdnQixFQUFBQSxDQUFNLENBQUUsT0FBQWhlLENBQUFBLENBQVEsR0FBQSxDQUFBOGIsQ0FBQUEsQ0FBSyxJQUFBLENBQUF4VixDQUFBQSxDQUFNLEVBQUEsQ0FBQWpCLENBQUcsQ0FBQSxDQUFrQyxDQUM3RSxJQUFJbWEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBUSxDQUFBLENBQ1JkLENBQUFBLENBQVEsQ0FBQSxDQUNSclgsQ0FBQUEsQ0FDRTNCLENBQUFBLENBQU1tVyxFQUFJLFdBQUEsQ0FBWSxRQUFBLENBQ3RCd0IsQ0FBQUEsQ0FBa0IsQ0FBRSxNQUFPaFgsQ0FBQUEsQ0FBSyxLQUFBLENBQU8sTUFBQSxDQUFRQSxDQUFBQSxDQUFLLE9BQVMsQ0FBRSxDQUFBLENBQ3JFLEdBQUksQ0FDRixPQUFPLE1BQU0sSUFBSSxPQUFBLENBQWdCLENBQUN2SixDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3BEc0ssQ0FBQUEsQ0FBVyxZQUFZLElBQU0sQ0FDM0IsR0FBSXFYLENBQUFBLEVBQVMsRUFBRyxDQUNkM2hCLENBQUFBLENBQU8sSUFBSSxLQUFBLENBQU0sa0JBQWtCLENBQUMsQ0FBQSxDQUNwQyxNQUNGLENBQ0EyaEIsQ0FBQUEsRUFBQUEsQ0FDQWhoQixDQUFBQSxDQUFPLElBQUEsQ0FBS0ssRUFBQUEsQ0FBSyxHQUFHZ0MsQ0FBTSxDQUFBLDRCQUFBLEVBQStCcUYsQ0FBRSxDQUFBLFdBQUEsRUFBY21hLENBQU0sQ0FBQSxNQUFBLEVBQVNiLENBQUssQ0FBQSxRQUFBLENBQVUsQ0FBQSxDQUN2RzdDLENBQUFBLENBQUksV0FBQSxDQUFZLFVBQUEsR0FDbEIsRUFBRyxHQUFJLENBQUEsQ0FDUCxJQUFNM1YsQ0FBQUEsQ0FBVSxDQUFDc1QsQ0FBQUEsQ0FBd0NpRyxDQUFBQSxDQUFleEIsQ0FBQUEsR0FBdUIsQ0FDN0YsSUFBTUMsQ0FBQUEsQ0FBWUQsQ0FBQUEsQ0FBTSxPQUFBLEVBQVEsQ0FDaEMsR0FBSSxDQUFDbEYsRUFBQUEsQ0FBV21GLEVBQVdiLENBQVMsQ0FBQSxDQUFHLENBRXJDalgsRUFBQUEsQ0FBZVYsRUFBSzJYLENBQVMsQ0FBQSxDQUM3QixNQUNGLENBQ0EsSUFBTTFXLENBQUFBLENBQVNzWCxDQUFBQSxDQUFNLFFBQUEsRUFBUyxDQUN4QnlCLENBQUFBLENBQUtoWixFQUFBQSxDQUFZQyxDQUFBQSxDQUFRdVgsQ0FBUyxFQUN4QyxHQUFJd0IsQ0FBQUEsR0FBTyxLQUFBLENBQUEsRUFBYSxJQUFBLENBQUssR0FBQSxDQUFJQSxDQUFBQSxDQUFLdGEsQ0FBRSxDQUFBLENBQUksRUFBRyxDQUM3Q21hLENBQUFBLENBQVNHLENBQUFBLENBQ1RGLENBQUFBLEVBQUFBLENBQ0EsTUFDRixDQUNBM0QsQ0FBQUEsQ0FBSSxXQUFBLENBQVksSUFBSSxPQUFBLENBQVMzVixDQUFPLENBQUEsQ0FDcENwSixDQUFBQSxDQUFRLE9BQU8sSUFBQSxDQUFLNkosQ0FBQUEsQ0FBTyxNQUFBLENBQVFBLENBQUFBLENBQU8sV0FBWU4sQ0FBQUEsQ0FBSyxNQUFBLENBQVNBLENBQUFBLENBQUssS0FBQSxDQUFRLENBQUMsQ0FBQyxDQUFBLENBQ25Gd1YsQ0FBQUEsQ0FBSSxZQUFZLFlBQUEsRUFBYSxDQUU3QkEsQ0FBQUEsQ0FBSSxXQUFBLENBQVksWUFBQSxDQUFhLEdBQUcsRUFDbEMsQ0FBQSxDQUNBQSxFQUFJLFdBQUEsQ0FBWSxFQUFBLENBQUcsT0FBQSxDQUFTM1YsQ0FBTyxDQUFBLENBQ25DMlYsQ0FBQUEsQ0FBSSxXQUFBLENBQVksYUFBQSxHQUNsQixDQUFDLENBQ0gsQ0FBQSxPQUFFLENBQ0EsY0FBY3hVLENBQVEsRUFDeEIsQ0FDRixDQUVBLGVBQXNCc1ksRUFBQUEsQ0FBTWhnQixDQUFBQSxDQUFvRCxDQU05RSxJQUFBcUIsQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUxBLEdBQU0sQ0FBRSxPQUFBakIsQ0FBQUEsQ0FBUSxHQUFBLENBQUE2QixDQUFBQSxDQUFLLEtBQUEsQ0FBQUYsRUFBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsUUFBQSxDQUFBcUIsQ0FBQUEsQ0FBVSxVQUFBK1UsQ0FBQUEsQ0FBVyxPQUFBLENBQUFELENBQUFBLENBQVMsY0FBQSxDQUFBMUIsQ0FBQUEsQ0FBZ0IsTUFBQSxDQUFBL1ksQ0FBQUEsQ0FBUSxVQUFBLENBQUE2ZixDQUFXLENBQUEsQ0FBSXZkLENBQUFBLENBQ3JHb1ksQ0FBQUEsRUFBV3JhLENBQUFBLENBQU8sS0FBS0ssRUFBQUEsQ0FBSyxvQ0FBb0MsQ0FBQSxDQUVwRSxJQUFNNmhCLEVBQVEsV0FBQSxDQUFZLEdBQUEsRUFBSSxDQUM5QixJQUFNQyxDQUFBQSxDQUFPaEQsRUFBQUEsQ0FBVyxDQUFFLE1BQUEsQ0FBQTljLEVBQVEsUUFBQSxDQUFVSixDQUFBQSxDQUFTLE1BQUEsQ0FBQXRDLENBQU8sQ0FBQyxDQUFBLENBQzdELElBQVl5aUIsQ0FBQUEsQ0FBVzVlLEVBQUFGLENBQUFBLENBQUEsTUFBTTRXLEVBQUFBLENBQWdCLE1BQUEsQ0FBTyxDQUFFLEtBQUEsQ0FBQWxXLENBQUFBLENBQU8sTUFBQSxDQUFBQyxFQUFRLEdBQUEsQ0FBQUMsQ0FBQUEsQ0FBSyxPQUFBLENBQUFrVyxDQUFBQSxDQUFTLFVBQUFDLENBQUFBLENBQVcsY0FBQSxDQUFBM0IsQ0FBZSxDQUFDLEVBQXZGLENBQUEsQ0FBQSxDQUFBLENBQ3ZCLElBQU15RixDQUFBQSxDQUFNLE1BQU1nRSxDQUFBQSxDQUNsQm5pQixDQUFBQSxDQUFPLEtBQUEsQ0FBTUssRUFBQUEsQ0FBSyxhQUFjLENBQUUsTUFBQSxDQUFBZ0MsQ0FBQUEsQ0FBUSxJQUFBLENBQU0sWUFBWSxHQUFBLEVBQUksQ0FBSTZmLENBQU0sQ0FBQyxFQUUzRSxJQUFNekMsQ0FBQUEsQ0FBUSxJQUFBLENBQUssSUFBQSxDQUFLdmIsQ0FBQUEsQ0FBTW9CLENBQVEsQ0FBQSxDQUN0QyxJQUFNb2EsRUFBZ0IsR0FBQSxDQUFPeGIsQ0FBQUEsQ0FFN0IsSUFBSTBiLENBQUFBLENBQVUsRUFDZCxJQUFJRSxDQUFBQSxDQUFXLENBQUEsQ0FDZixJQUFJQyxFQUNKLElBQU0vWCxDQUFBQSxDQUFNbVcsQ0FBQUEsQ0FBSSxXQUFBLENBQVksUUFBQSxDQUM1QixJQUFNa0UsQ0FBQUEsQ0FBT2xFLENBQUFBLENBQUksWUFBWSxTQUFBLENBQzdCLElBQU1tRSxDQUFBQSxDQUFTRCxDQUFBQSxDQUFLLE1BQUEsQ0FBTyxDQUFDLENBQUEsQ0FDNUIsR0FBSSxDQUNGbEUsQ0FBQUEsQ0FBSSxXQUFBLENBQVksWUFBQSxDQUFhamEsQ0FBRyxDQUFBLENBQ2hDaWEsQ0FBQUEsQ0FBSSxXQUFBLENBQVksWUFBQSxHQUNoQixNQUFNMVYsRUFBQUEsQ0FBaUJULENBQUcsQ0FBQSxDQUUxQixRQUFTekQsQ0FBQUEsQ0FBUSxDQUFBLENBQUdBLENBQUFBLENBQVFrYixDQUFBQSxDQUFPbGIsSUFBUyxDQUMxQzVFLENBQUFBLEVBQVEsY0FBQSxFQUFlLENBQ3ZCLElBQU00aUIsRUFBQUEsQ0FBQUEsQ0FBV2hlLENBQUFBLENBQVEsQ0FBQSxFQUFLbWIsRUFFOUIsTUFBTWlDLEVBQUFBLENBQUtXLENBQUFBLENBQVFDLEVBQU8sRUFDMUIsTUFBTS9ZLEVBQUFBLENBQVcyVSxDQUFBQSxDQUFJLFdBQUEsQ0FBYW9FLEdBQVM3QyxDQUFhLENBQUEsQ0FDeEQsSUFBTXpXLEVBQUFBLENBQVMsTUFBTW9YLEVBQUFBLENBQU0sQ0FBRSxNQUFBLENBQUFoZSxFQUFRLEdBQUEsQ0FBQThiLENBQUFBLENBQUssSUFBQSxDQUFNLENBQUUsTUFBQW5hLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFPLENBQUEsQ0FBRyxHQUFJc2UsRUFBUSxDQUFDLENBQUEsQ0FLaEYsR0FGQUgsQ0FBQUEsQ0FBUyxVQUFBLENBQVduWixFQUFNLENBQUEsQ0FBRSxNQUFPMUcsRUFBQUEsRUFBT3dkLENBQUFBLEdBQWdCeGQsRUFBRSxDQUFBLENBQzVEcWQsQ0FBQUEsRUFBQUEsQ0FDSUcsQ0FBQUEsQ0FBYSxNQUFNQSxDQUFBQSxDQUV2QixJQUFNYyxFQUFBQSxDQUFjLElBQUEsQ0FBSyxLQUFBLENBQU9qQixDQUFBQSxDQUFVSCxDQUFBQSxDQUFTLEdBQUcsQ0FBQSxDQUNsRG9CLEVBQUFBLEdBQWdCZixJQUNsQkEsQ0FBQUEsQ0FBV2UsRUFBQUEsQ0FDWHJCLENBQUFBLENBQVdNLENBQVEsR0FFdkIsQ0FDRixDQUFBLE9BQUUsQ0FDQSxNQUFNbFosR0FBWSxRQUFBLEVBQVMsQ0FDM0IsTUFBTTZYLEVBQUFBLENBQWNOLENBQUcsQ0FBQSxDQUN2QixNQUFNaUUsQ0FBQUEsQ0FBUyxTQUNqQixDQUVBLEdBQUlyQyxDQUFBQSxDQUFhLE1BQU1BLENBQUFBLENBQ3ZCLEdBQUlILENBQUFBLEdBQVksRUFDZCxNQUFNLElBQUksS0FBQSxDQUFNLG9CQUFvQixDQUFBLENBQUEsS0FFcEMsT0FBTyxDQUFFLE9BQUEsQ0FBQUEsRUFBUyxJQUFBLENBQU0sQ0FBQSxDQUFHLE9BQUEsQ0FBQXhGLENBQVEsUUEvQ3JDM1YsQ0FBQUEsQ0FBQSxDQUFBLElBQUFDLEVBQUFBLENBQUFELENBQUFBLENBQUFFLEVBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQSxJQUFBRSxFQUFBQSxDQUFBRCxDQUFBQSxDQUFBdEIsQ0FBQUEsQ0FBQW9CLEVBQUFBLENBQUFDLENBQUFBLENBQUFBLENBQUFFLEVBQUFBLEVBQUEsTUFBQUEsSUFpREYsQ0NuSEEsSUFBTXhFLEVBQUFBLENBQU0sT0FBQSxDQUVaLFNBQVNtaUIsRUFBQUEsRUFBZ0IsQ0FDdkJ4aUIsQ0FBQUEsQ0FBTyxNQUFNSyxFQUFBQSxDQUFLLGVBQUEsQ0FBaUJHLFlBQUFBLENBQUksbUJBQUEsRUFBcUIsRUFDOUQsQ0FFQSxJQUFNaWlCLEdBQU8sSUFBSSxlQUFBLENBQ2JDLEVBQUFBLENBQVUsS0FBQSxDQUVkcGlCLElBQTJCLENBQzNCcWlCLGFBQUFBLENBQUssa0JBQUEsQ0FBbUIsSUFBSSxFQUM1Qm5pQixZQUFBQSxDQUFJLElBQUEsRUFBTSxJQUFBLEVBQUssQ0FDZkEsWUFBQUEsQ0FBSSxFQUFBLENBQUcsbUJBQUEsQ0FBcUIsSUFBTSxDQUFDLENBQUMsQ0FBQSxDQUNwQ0EsWUFBQUEsQ0FBSSxFQUFBLENBQUcsa0JBQW1CZ2lCLEVBQWEsQ0FBQSxDQUN2Q2hpQixZQUFBQSxDQUFJLEVBQUEsQ0FBRyxjQUFnQitCLENBQUFBLEVBQU0sQ0FBQ21nQixFQUFBQSxFQUFXbmdCLENBQUFBLENBQUUsY0FBQSxFQUFnQixDQUFBLENBQzNEL0IsWUFBQUEsQ0FBSSxHQUFHLFdBQUEsQ0FBYytCLENBQUFBLEVBQU0sQ0FBQ21nQixFQUFBQSxFQUFXbmdCLEVBQUUsY0FBQSxFQUFnQixDQUFBLENBRXpEb0osU0FBQUEsQ0FBRyxRQUFRLElBQUEsQ0FBTSxzREFBaUQsQ0FBQSxDQUNsRSxPQUFBLENBQVEsSUFBQSxDQUFLLFlBQUEsQ0FBYyxJQUFNOFcsRUFBQUEsQ0FBSyxNQUFNLFlBQVksQ0FBQyxDQUFBLENBQ3pELE9BQUEsQ0FBUSxFQUFBLENBQUcsU0FBQSxDQUFZRyxDQUFBQSxFQUFRLENBQzdCLElBQU0za0IsQ0FBQUEsQ0FBTTJrQixDQUFBQSxDQUNSM2tCLENBQUFBLENBQUksSUFBQSxHQUFTLFFBQUEsRUFBbUJ3a0IsRUFBQUEsQ0FBSyxLQUFBLENBQU14a0IsQ0FBQUEsQ0FBSSxNQUFNLEVBQzNELENBQUMsQ0FBQSxDQUVEK0QsRUFBQUEsQ0FBUSxDQUNOLElBQUEsQ0FBTSxLQUFBLENBQ04sR0FBQSxDQUFLLE1BQU9LLEVBQVFKLENBQUFBLEdBQVksQ0FDOUIsSUFBTTRnQixDQUFBQSxDQUFNLElBQUlyZ0IsRUFBQUEsQ0FDaEIsR0FBSSxDQUNGLE1BQU1oQyxZQUFBQSxDQUFJLFNBQUEsRUFBVSxDQUNwQndKLEVBQUFBLEdBQ0FqRCxFQUFBQSxFQUFtQixDQUNuQnliLEVBQUFBLEVBQWMsQ0FDZCxRQUFXdGQsQ0FBQUEsSUFBT2pELENBQUFBLENBQVEsT0FBQSxDQUFRLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FDekMsTUFBTTJELGNBQUFBLENBQU16SSxhQUFRK0gsQ0FBRyxDQUFBLENBQUcsQ0FBRSxTQUFBLENBQVcsRUFBSyxDQUFDLENBQUEsQ0FFL0MsSUFBTWtaLENBQUFBLENBQVNuYyxFQUFRLGFBQUEsQ0FBZ0JnZ0IsRUFBQUEsQ0FBUTFDLEVBQUFBLENBQy9Da0QsRUFBQUEsQ0FBSyxNQUFBLENBQU8sY0FBQSxFQUFlLENBQzNCLElBQU1LLEVBQVMsTUFBTTNCLEVBQUFBLENBQWFzQixFQUFBQSxDQUFLLE1BQUEsQ0FBUSxJQUM3Q3JFLENBQUFBLENBQU8sQ0FDTCxNQUFBLENBQUEvYixFQUNBLEdBQUdKLENBQUFBLENBQ0gsTUFBQSxDQUFRd2dCLEVBQUFBLENBQUssTUFBQSxDQUNiLFVBQUEsQ0FBYS9jLENBQUFBLEVBQU1tZCxDQUFBQSxDQUFJLGNBQWNuZCxDQUFDLENBQUEsQ0FDdEMsU0FBQSxDQUFXLENBQUN5VixFQUFHOVUsQ0FBQUEsR0FBTXdjLENBQUFBLENBQUksWUFBQSxDQUFhMUgsQ0FBQUEsQ0FBRzlVLENBQUMsQ0FDNUMsQ0FBQyxDQUNILENBQUEsQ0FDQSxNQUFNd2MsQ0FBQUEsQ0FBSSxTQUFBLENBQVVDLENBQU0sRUFDNUIsQ0FBQSxNQUFTdmdCLENBQUFBLENBQUcsQ0FDVixJQUFNdkQsRUFBUXVELENBQUFBLENBQ1I4RCxDQUFBQSxDQUFJckgsQ0FBQUEsQ0FBTSxLQUFBLEVBQVNBLEVBQU0sT0FBQSxFQUFXLE1BQUEsQ0FBT3VELENBQUFBLEVBQUssZUFBZSxDQUFBLENBQ3JFLE1BQU1zZ0IsQ0FBQUEsQ0FBSSxVQUFBLENBQVd4YyxDQUFDLEVBQ3hCLENBQUEsT0FBRSxDQUNBcWMsRUFBQUEsQ0FBVSxLQUNWbGlCLFlBQUFBLENBQUksSUFBQSxHQUNOLENBQ0YsQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHg7XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwQXVkaW9QcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhdWRpb19wcmVsb2FkLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBJZnJhbWVQcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJpZnJhbWVfcHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yMS5cblxuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltDcmFzaF1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCkge1xuICBjb25zdCBkdW1wRGlyID0gam9pbihhcHAuZ2V0UGF0aChcInVzZXJEYXRhXCIpLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8Rm4gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSwgRD4oXG4gIGZuOiBGbixcbiAgZGVmYXVsdFZhbHVlOiBELFxuKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rm4+KSA9PiBSZXR1cm5UeXBlPEZuPiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSByZXR1cm47XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIGVsc2UgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0L2h0bWwubXA0LG91dC9odG1sLndlYm1cIjtcblxuZXhwb3J0IGNvbnN0IFJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29tbWEtc2VwYXJhdGVkIG91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCBSZW5kZXJTY2hlbWEsIHR5cGUgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHJldHVybiBzO1xuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlOiBvcHRzLm91dEZpbGUgPz8gZC5vdXRGaWxlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENPTlNPTEUgPSBcImNvbnNvbGVcIixcbiAgUFJPR1JFU1MgPSBcInByb2dyZXNzXCIsXG4gIERPTkUgPSBcImRvbmVcIixcbiAgRVJST1IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ0FOQ0VMID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DT05TT0xFO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DQU5DRUw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLlBST0dSRVNTO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvbmVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkRPTkU7XG4gIHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5FUlJPUjtcbiAgZXJyb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSXBjTXNnID0gQ29uc29sZU1zZyB8IFByb2dyZXNzTXNnIHwgRG9uZU1zZyB8IEVycm9yTXNnIHwgQ2FuY2VsTXNnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwY0V2ZW50cyB7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIGNvbnNvbGU6IFtsZXZlbDogc3RyaW5nLCBtc2c6IHN0cmluZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtjb2RlOiBudW1iZXIgfCBudWxsXTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIHdyaXRlQ29uc29sZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkNPTlNPTEUsIGxldmVsLCBtZXNzYWdlIH0pO1xuICB9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5QUk9HUkVTUywgdmFsdWUgfSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5FUlJPUiwgZXJyb3IgfSk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5ET05FLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKG1zZzogSXBjTXNnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXByb2Nlc3Muc2VuZCkgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5DT05TT0xFOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUFJPR1JFU1M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5ET05FOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVSUk9SOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBEZWNvZGVyLCBEZW11eGVyLCBGaWx0ZXJBUEkgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRGVjb2RlU2Vzc2lvbl1cIjtcbmNvbnN0IFdBSVRfVElNRU9VVF9NUyA9IDVfMDAwO1xuY29uc3QgREVDT0RFX0FIRUFEID0gNDsgLy8gZGVjb2RlIGEgZmV3IGZyYW1lcyBwYXN0IHRoZSBoaWdoZXN0IHJlcXVlc3Q7IHRoZSBwYWdlIGFscmVhZHkgcHJlZmV0Y2hlc1xuY29uc3QgS0VFUF9CRUhJTkQgPSAxNjsgLy8gbXVzdCBleGNlZWQgdGhlIHBhZ2UncyBwcmVmZXRjaCBsZWFkIChBSEVBRD0xMCkgb3IgdGhlIHBhaW50ZWQgZnJhbWUgZ2V0cyBldmljdGVkIOKGkiByZXN0YXJ0IHRocmFzaFxuXG5pbnRlcmZhY2UgV2FpdGVyIHtcbiAgcmVzb2x2ZTogKGI6IEJ1ZmZlcikgPT4gdm9pZDtcbiAgdGltZXI6IE5vZGVKUy5UaW1lb3V0O1xufVxuXG4vLyBJbi1wcm9jZXNzIGRlY29kZTogRGVtdXhlciDihpIgRGVjb2RlciDihpIgYGZwcz1OLHNjYWxlLGZvcm1hdD1yZ2JhYCBmaWx0ZXIsIHNlcnZpbmcgdGhlIE50aCBmaWx0ZXJlZCBmcmFtZVxuLy8gYXMgdGlnaHQgUkdCQSBieSBpbmRleC4gRGVtYW5kLWRyaXZlbiAoZGVjb2RlcyBhaGVhZCBvZiB0aGUgaGlnaGVzdCByZXF1ZXN0LCB0aGVuIHBhdXNlcykgc28gb25seSBhXG4vLyB+MjAtZnJhbWUgd2luZG93IHN0YXlzIHJlc2lkZW50LiBBIHJlcXVlc3QgZm9yIGFuIGFscmVhZHktcGFzc2VkIGZyYW1lIChsb29wL2JhY2t3YXJkIHNlZWspIHJlc3RhcnRzIHRoZVxuLy8gcGFzcyBmcm9tIGZyYW1lIDEg4oCUIHRoZSBkZWNvZGVyIGlzIGZvcndhcmQtb25seSwgc28gcmV3aW5kID0gcmUtZGVjb2RlLlxuZXhwb3J0IGNsYXNzIERlY29kZVNlc3Npb24ge1xuICBwcml2YXRlIGJ1ZiA9IG5ldyBNYXA8bnVtYmVyLCBCdWZmZXI+KCk7XG4gIHByaXZhdGUgcmVhZHkgPSAwO1xuICBwcml2YXRlIHdhbnQgPSAxO1xuICBwcml2YXRlIGRvbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBnZW4gPSAwO1xuICBwcml2YXRlIGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHByaXZhdGUgd2FpdGVycyA9IG5ldyBTZXQ8eyBpZHg6IG51bWJlcjsgdzogV2FpdGVyIH0+KCk7XG4gIHByaXZhdGUgcmVzdW1lOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1ldGE6IFZpZGVvTWV0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNyYzogc3RyaW5nLFxuICApIHtcbiAgICB2b2lkIHRoaXMucHVtcCgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RnJhbWUoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmIChpZHggPCAxKSBpZHggPSAxO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHJldHVybiBoaXQ7XG4gICAgaWYgKHRoaXMuZG9uZSAmJiBpZHggPiB0aGlzLnJlYWR5KSByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIGlmIChpZHggPiB0aGlzLnJlYWR5KSB7XG4gICAgICAvLyBmb3J3YXJkLCBub3QgeWV0IGRlY29kZWQgaW4gdGhpcyBwYXNzXG4gICAgICBpZiAoaWR4ID4gdGhpcy53YW50KSB0aGlzLndhbnQgPSBpZHg7XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWxyZWFkeSBwYXNzZWQgYnV0IGV2aWN0ZWQgKGxvb3AgLyBiYWNrd2FyZCBzZWVrKSDihpIgcmUtZGVjb2RlIGZyb20gdGhlIHN0YXJ0LCB0YXJnZXRpbmcgaWR4XG4gICAgICB0aGlzLndhbnQgPSBpZHg7XG4gICAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndhaXQoaWR4KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuY3RybC5hYm9ydCgpO1xuICAgIHRoaXMud2FrZSgpO1xuICAgIHRoaXMucmVxdWVzdFJlc3RhcnQoKTtcbiAgICBmb3IgKGNvbnN0IHsgdyB9IG9mIHRoaXMud2FpdGVycykge1xuICAgICAgY2xlYXJUaW1lb3V0KHcudGltZXIpO1xuICAgICAgdy5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHRoaXMud2FpdGVycy5jbGVhcigpO1xuICAgIHRoaXMuYnVmLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIHdhaXQoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCB3OiBXYWl0ZXIgPSB7XG4gICAgICAgIHJlc29sdmUsXG4gICAgICAgIHRpbWVyOiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLndhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgICAgIH0sIFdBSVRfVElNRU9VVF9NUyksXG4gICAgICB9O1xuICAgICAgY29uc3QgZW50cnkgPSB7IGlkeCwgdyB9O1xuICAgICAgdGhpcy53YWl0ZXJzLmFkZChlbnRyeSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMucmVzdW1lO1xuICAgIHRoaXMucmVzdW1lID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICB9XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgcnVubmluZyBwYXNzIChvciB3YWtlIGEgcGFya2VkIG9uZSkgc28gcHVtcCgpIHN0YXJ0cyBhIGZyZXNoIGRlY29kZSBmcm9tIGZyYW1lIDEuXG4gIHByaXZhdGUgcmVxdWVzdFJlc3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5nZW4rKztcbiAgICBjb25zdCByID0gdGhpcy5yZXN0YXJ0O1xuICAgIHRoaXMucmVzdGFydCA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgICB0aGlzLndha2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHVtcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzLmdlbjtcbiAgICAgIHRoaXMucmVhZHkgPSAwO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmJ1Zi5jbGVhcigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQgJiYgdGhpcy5nZW4gPT09IGdlbilcbiAgICAgICAgICBsb2dnZXIud2FybihUQUcsIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgZW5kZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKSBicmVhaztcbiAgICAgIGlmICh0aGlzLmdlbiAhPT0gZ2VuKSBjb250aW51ZTsgLy8gcmVzdGFydCByZXF1ZXN0ZWQgbWlkLXBhc3NcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgYXdhaXQgdGhpcy51bnRpbFJlc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlY29kZVBhc3MoZ2VuOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzaWduYWwgPSB0aGlzLmN0cmwuc2lnbmFsO1xuICAgIGF3YWl0IHVzaW5nIGlucHV0ID0gYXdhaXQgRGVtdXhlci5vcGVuKHRoaXMuc3JjLCB7IHNpZ25hbCB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBpbnB1dC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgICBpZiAoIXN0cmVhbSkgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICAgIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwgfSk7XG4gICAgY29uc3QgeyBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSB0aGlzLm1ldGE7XG4gICAgY29uc3Qgc2NhbGUgPSBmcmFtZVdpZHRoICE9PSB3aWR0aCB8fCBmcmFtZUhlaWdodCAhPT0gaGVpZ2h0ID8gYHNjYWxlPSR7ZnJhbWVXaWR0aH06JHtmcmFtZUhlaWdodH0sYCA6IFwiXCI7XG4gICAgdXNpbmcgZmlsdGVyID0gRmlsdGVyQVBJLmNyZWF0ZShgZnBzPSR7ZnBzfSwke3NjYWxlfWZvcm1hdD1yZ2JhYCwgeyBzaWduYWwgfSk7XG4gICAgbGV0IGlkeCA9IDA7XG4gICAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBmaWx0ZXIuZnJhbWVzKGRlYy5mcmFtZXMoaW5wdXQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSkpIHtcbiAgICAgIGlmICh0aGlzLmNsb3NlZCB8fCB0aGlzLmdlbiAhPT0gZ2VuKSByZXR1cm47XG4gICAgICBpZiAoIWZyYW1lKSBjb250aW51ZTtcbiAgICAgIGlkeCsrO1xuICAgICAgd2hpbGUgKCF0aGlzLmNsb3NlZCAmJiB0aGlzLmdlbiA9PT0gZ2VuICYmIGlkeCA+IHRoaXMud2FudCArIERFQ09ERV9BSEVBRCkgYXdhaXQgdGhpcy5wYXVzZSgpO1xuICAgICAgaWYgKHRoaXMuY2xvc2VkIHx8IHRoaXMuZ2VuICE9PSBnZW4pIHJldHVybjtcbiAgICAgIHRoaXMuYnVmLnNldChpZHgsIHBhY2tSZ2JhKGZyYW1lKSk7XG4gICAgICB0aGlzLnJlYWR5ID0gaWR4O1xuICAgICAgdGhpcy5ldmljdCgpO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gKHRoaXMucmVzdW1lID0gcikpO1xuICB9XG5cbiAgLy8gUGFyayB1bnRpbCBhIGxvb3AvYmFja3dhcmQgcmVxdWVzdCAob3IgY2xvc2UpIGNhbGxzIHJlcXVlc3RSZXN0YXJ0KCkuXG4gIHByaXZhdGUgdW50aWxSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gKHRoaXMucmVzdGFydCA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLndhbnQgLSBLRUVQX0JFSElORDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5idWYua2V5cygpKSBpZiAoayA8IGZsb29yKSB0aGlzLmJ1Zi5kZWxldGUoayk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluV2FpdGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi50aGlzLndhaXRlcnNdKSB7XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLmJ1Zi5nZXQoZW50cnkuaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgdGhpcy53YWl0ZXJzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgIGNsZWFyVGltZW91dChlbnRyeS53LnRpbWVyKTtcbiAgICAgICAgZW50cnkudy5yZXNvbHZlKGhpdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aGlzLndhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGVudHJ5LncudGltZXIpO1xuICAgICAgICBlbnRyeS53LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVGlnaHQgUkdCQSBjb3B5IChkcm9wIGxpYmF2IHJvdyBwYWRkaW5nKSBzbyB0aGUgcGFnZSBjYW4gd3JhcCBpdCBzdHJhaWdodCBpbnRvIEltYWdlRGF0YS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJvdyA9IGZyYW1lLndpZHRoICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdykgcmV0dXJuIEJ1ZmZlci5mcm9tKHNyYy5zdWJhcnJheSgwLCByb3cgKiBmcmFtZS5oZWlnaHQpKTtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHJvdyAqIGZyYW1lLmhlaWdodCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgZnJhbWUuaGVpZ2h0OyB5KyspIHNyYy5jb3B5KG91dCwgeSAqIHJvdywgeSAqIHN0cmlkZSwgeSAqIHN0cmlkZSArIHJvdyk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBEZW11eGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuY29uc3QgUFJPQkVfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2JlUmVzdWx0IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZShzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dChQUk9CRV9USU1FT1VUX01TKTtcbiAgYXdhaXQgdXNpbmcgZCA9IGF3YWl0IERlbXV4ZXIub3BlbihzcmMsIHsgc2lnbmFsIH0pO1xuICBjb25zdCBzdHJlYW0gPSBkLnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkgdGhyb3cgbmV3IEVycm9yKGBwcm9iZTogbm8gdmlkZW8gc3RyZWFtIGluICR7c3JjfWApO1xuICBjb25zdCBkdXJhdGlvbiA9IGQuZHVyYXRpb24gPiAwID8gZC5kdXJhdGlvbiA6IDA7XG4gIHJldHVybiB7IHdpZHRoOiBzdHJlYW0uY29kZWNwYXIud2lkdGgsIGhlaWdodDogc3RyZWFtLmNvZGVjcGFyLmhlaWdodCwgZHVyYXRpb24gfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMjIuXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBta2Rpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9TcmNDYWNoZV1cIjtcbmNvbnN0IENBQ0hFX0RJUiA9IGpvaW4odG1wZGlyKCksIFwicHVwLXZpZGVvLWNhY2hlXCIpO1xuXG5leHBvcnQgY2xhc3MgU3JjQ2FjaGUge1xuICBwcml2YXRlIGluRmxpZ2h0ID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nPj4oKTtcbiAgcHJpdmF0ZSBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxvY2FsaXplKHNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXNyYy5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSAmJiAhc3JjLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzcmMpO1xuICAgIGxldCBwID0gdGhpcy5pbkZsaWdodC5nZXQoc3JjKTtcbiAgICBpZiAoIXApIHtcbiAgICAgIHAgPSB0aGlzLmRvd25sb2FkKHNyYyk7XG4gICAgICB0aGlzLmluRmxpZ2h0LnNldChzcmMsIHApO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIC8vIGFib3J0cyBpbi1mbGlnaHQgZmV0Y2hlcyBzbyBjYWxsZXJzIHdhaXRpbmcgb24gY2xvc2VBbGwoKSBkb24ndCBoYW5nIG9uIGEgc2xvdyBDRE4uXG4gIGFib3J0KCk6IHZvaWQge1xuICAgIHRoaXMuY3RybC5hYm9ydCgpO1xuICAgIHRoaXMuaW5GbGlnaHQuY2xlYXIoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgICBhd2FpdCBybShDQUNIRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY2xlYW5lZCBjYWNoZSAke0NBQ0hFX0RJUn1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG93bmxvYWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IG1rZGlyKENBQ0hFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3QgZHN0ID0gam9pbihDQUNIRV9ESVIsIGAke2NyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShzcmMpLmRpZ2VzdChcImhleFwiKX0ke3BpY2tFeHQoc3JjKX1gKTtcbiAgICBpZiAoZXhpc3RzU3luYyhkc3QpKSByZXR1cm4gZHN0O1xuICAgIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChzcmMsIHsgc2lnbmFsOiB0aGlzLmN0cmwuc2lnbmFsIH0pO1xuICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYHZpZGVvIHNyYyBkb3dubG9hZCBmYWlsZWQgJHtyZXMuc3RhdHVzfTogJHtzcmN9YCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGRzdCwgQnVmZmVyLmZyb20oYXdhaXQgcmVzLmFycmF5QnVmZmVyKCkpKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY2FjaGVkICR7c3JjfSAtPiAke2RzdH0gaW4gJHtEYXRlLm5vdygpIC0gdDB9bXNgKTtcbiAgICByZXR1cm4gZHN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBpY2tFeHQodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtID0gdXJsLm1hdGNoKC9cXC4obXA0fG1vdnx3ZWJtfG00dikoPzpcXD98JHwjKS9pKTtcbiAgcmV0dXJuIG0/LlsxXSA/IGAuJHttWzFdLnRvTG93ZXJDYXNlKCl9YCA6IFwiLm1wNFwiO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IERlY29kZVNlc3Npb24gfSBmcm9tIFwiLi9kZWNvZGVfc2Vzc2lvblwiO1xuaW1wb3J0IHsgcHJvYmUgfSBmcm9tIFwiLi9wcm9iZVwiO1xuaW1wb3J0IHsgU3JjQ2FjaGUgfSBmcm9tIFwiLi9zcmNfY2FjaGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3Blbk9wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIC8qKiBEaXNwbGF5LWJveCBwaXhlbHMgKGNhbnZhcyBiYWNraW5nIHN0b3JlKTsgZGVjb2RlIGlzIGRvd25zY2FsZWQgdG8gY292ZXIgdGhpcywgbmV2ZXIgdXBzY2FsZWQuICovXG4gIGRzdFc/OiBudW1iZXI7XG4gIGRzdEg/OiBudW1iZXI7XG4gIC8qKiBvYmplY3RGaXQ7IFwibm9uZVwiIG5lZWRzIDE6MSBuYXRpdmUgcGl4ZWxzIHNvIGl0IHNraXBzIGRvd25zY2FsZS4gKi9cbiAgZml0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRW50cnkge1xuICBzZXNzaW9uOiBEZWNvZGVTZXNzaW9uO1xuICByZWZzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZVNlcnZlciB7XG4gIHByaXZhdGUgc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgRW50cnk+KCk7XG4gIHByaXZhdGUgc3JjcyA9IG5ldyBTcmNDYWNoZSgpO1xuICBwcml2YXRlIGluRmxpZ2h0T3BlbnMgPSBuZXcgU2V0PFByb21pc2U8dW5rbm93bj4+KCk7XG4gIHByaXZhdGUgY2xvc2VkID0gZmFsc2U7XG5cbiAgYXN5bmMgb3BlbihvcHRzOiBPcGVuT3B0aW9ucyk6IFByb21pc2U8VmlkZW9NZXRhPiB7XG4gICAgY29uc3QgcCA9IHRoaXMub3BlbklubmVyKG9wdHMpO1xuICAgIHRoaXMuaW5GbGlnaHRPcGVucy5hZGQocCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmluRmxpZ2h0T3BlbnMuZGVsZXRlKHApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNsb3NlZC1jaGVja2VkIGFmdGVyIGV2ZXJ5IGF3YWl0IHNvIGNsb3NlQWxsKCkgY2FuJ3QgcmFjZSBzcmNzLmNsZWFyKCkgYWdhaW5zdCBsb2NhbGl6ZS9wcm9iZS5cbiAgcHJpdmF0ZSBhc3luYyBvcGVuSW5uZXIob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgY29uc3QgaWQgPSBrZXkob3B0cyk7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdC5yZWZzKys7XG4gICAgICByZXR1cm4gaGl0LnNlc3Npb24ubWV0YTtcbiAgICB9XG4gICAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgdGhpcy5zcmNzLmxvY2FsaXplKG9wdHMuc3JjKTtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBwcm9iZShsb2NhbFBhdGgpO1xuICAgIGlmICh0aGlzLmNsb3NlZCkgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgbGV0IGZyYW1lV2lkdGggPSBpbmZvLndpZHRoO1xuICAgIGxldCBmcmFtZUhlaWdodCA9IGluZm8uaGVpZ2h0O1xuICAgIC8vIERvd25zY2FsZSB0byBjb3ZlciB0aGUgZGlzcGxheSBib3ggKG5ldmVyIHVwc2NhbGUpOyBvYmplY3RGaXQgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMuXG4gICAgaWYgKG9wdHMuZHN0VyAmJiBvcHRzLmRzdEggJiYgb3B0cy5maXQgIT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5taW4oMSwgTWF0aC5tYXgob3B0cy5kc3RXIC8gaW5mby53aWR0aCwgb3B0cy5kc3RIIC8gaW5mby5oZWlnaHQpKTtcbiAgICAgIGZyYW1lV2lkdGggPSBldmVuKGluZm8ud2lkdGggKiBzKTtcbiAgICAgIGZyYW1lSGVpZ2h0ID0gZXZlbihpbmZvLmhlaWdodCAqIHMpO1xuICAgIH1cbiAgICBjb25zdCBtZXRhOiBWaWRlb01ldGEgPSB7XG4gICAgICBpZCxcbiAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgIGZyYW1lV2lkdGgsXG4gICAgICBmcmFtZUhlaWdodCxcbiAgICAgIGZwczogb3B0cy5mcHMsXG4gICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICB9O1xuICAgIHRoaXMuc2Vzc2lvbnMuc2V0KGlkLCB7IHNlc3Npb246IG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIGxvY2FsUGF0aCksIHJlZnM6IDEgfSk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICByZXR1cm4gZS5zZXNzaW9uLmdldEZyYW1lKGlkeCk7XG4gIH1cblxuICBjbG9zZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IHRoaXMuc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHJldHVybjtcbiAgICBpZiAoLS1lLnJlZnMgPiAwKSByZXR1cm47XG4gICAgZS5zZXNzaW9uLmNsb3NlKCk7XG4gICAgdGhpcy5zZXNzaW9ucy5kZWxldGUoaWQpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gYWJvcnQgaW4tZmxpZ2h0IGZldGNoZXMgZmlyc3Qgc28gYWxsU2V0dGxlZCBkb2Vzbid0IGhhbmcgb24gYSBzbG93IENETi5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5zcmNzLmFib3J0KCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi50aGlzLmluRmxpZ2h0T3BlbnNdKTtcbiAgICBmb3IgKGNvbnN0IFssIGVdIG9mIHRoaXMuc2Vzc2lvbnMpIGUuc2Vzc2lvbi5jbG9zZSgpO1xuICAgIHRoaXMuc2Vzc2lvbnMuY2xlYXIoKTtcbiAgICBhd2FpdCB0aGlzLnNyY3MuY2xlYXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBrZXkob3B0czogT3Blbk9wdGlvbnMpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAudXBkYXRlKGAke29wdHMuc3JjfXwke29wdHMuZnBzfXwke29wdHMuZHN0VyA/PyBcIlwifXwke29wdHMuZHN0SCA/PyBcIlwifXwke29wdHMuZml0ID8/IFwiXCJ9YClcbiAgICAuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vLyBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gaW50ZWdlciAo4omlMikgZm9yIHRoZSBzY2FsZXIuXG5mdW5jdGlvbiBldmVuKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4pO1xuICByZXR1cm4gTWF0aC5tYXgoMiwgciAtIChyICUgMikpO1xufVxuXG5leHBvcnQgY29uc3QgZnJhbWVTZXJ2ZXIgPSBuZXcgRnJhbWVTZXJ2ZXIoKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBmcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBGcmFtZVByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3JlcS5tZXRob2R9ICR7dXJsLmhvc3RuYW1lfSR7dXJsLnNlYXJjaH1gKTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICByZXR1cm4ganNvbk9rKFxuICAgICAgICAgICAgYXdhaXQgZnJhbWVTZXJ2ZXIub3Blbih7XG4gICAgICAgICAgICAgIHNyYzogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIixcbiAgICAgICAgICAgICAgZnBzOiBpbnQodXJsLCBcImZwc1wiLCAzMCksXG4gICAgICAgICAgICAgIGRzdFc6IGludCh1cmwsIFwid1wiLCAwKSxcbiAgICAgICAgICAgICAgZHN0SDogaW50KHVybCwgXCJoXCIsIDApLFxuICAgICAgICAgICAgICBmaXQ6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiZml0XCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIHJldHVybiByZ2JhT2soYXdhaXQgZnJhbWVTZXJ2ZXIuZ2V0RnJhbWUodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiLCBpbnQodXJsLCBcImlkeFwiLCAxKSkpO1xuICAgICAgICBjYXNlIFwiY2xvc2VcIjpcbiAgICAgICAgICBmcmFtZVNlcnZlci5jbG9zZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7IHN0YXR1czogNDA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtc2csIHsgc3RhdHVzOiA1MDAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBqc29uT2sobWV0YTogVmlkZW9NZXRhKTogUmVzcG9uc2Uge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KG1ldGEpLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gIH0pO1xufVxuXG4vLyBSYXcgUkdCQSBwaXhlbHM7IHRoZSBwYWdlIHdyYXBzIHRoZW0gaW4gSW1hZ2VEYXRhIHVzaW5nIG1ldGEud2lkdGgvaGVpZ2h0IGl0IGdvdCBmcm9tIGBvcGVuYC5cbmZ1bmN0aW9uIHJnYmFPayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNDEwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gU3RhcnZhdGlvbj0xIGZvcmNlcyBidWRnZXQgdG8gZXhwaXJlIGV2ZW4gaWYgYSBzbG93IGZldGNoIHRhc2sgaXMgcGVuZGluZzsgZGVmYXVsdCB1bmJvdW5kZWQgZGVhZGxvY2tzLlxuICAgIHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgICAgbWF4VmlydHVhbFRpbWVUYXNrU3RhcnZhdGlvbkNvdW50OiAxLFxuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNpemVEcmF3YWJsZShjZHA6IERlYnVnZ2VyLCBzaXplOiBTaXplKSB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgIC4uLnNpemUsXG4gICAgZGV2aWNlU2NhbGVGYWN0b3I6IDEsXG4gICAgbW9iaWxlOiBmYWxzZSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIERlYnVnZ2VyLCB0eXBlIFNpemUsIHR5cGUgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gICAgLyogSGVhcnRiZWF0OiBpbnZpc2libGUgYWx3YXlzLW9uIHRpY2suIEZvcmNlcyBDaHJvbWl1bSBjb21wb3NpdG9yIHRvIGlzc3VlIEJlZ2luRnJhbWUgZWFjaFxuICAgICAgIHZpcnR1YWwgdGljayBvbiBvdGhlcndpc2Utc3RhdGljIHBhZ2VzIHNvIGNhbnZhcyNzdGVnbyBwdXRJbWFnZURhdGEgdXBkYXRlcyBsYW5kIGluIHRoZVxuICAgICAgIGNhcHR1cmVkIHBhaW50IGV2ZW50LiBXaXRob3V0IHRoaXMsIGEgc3RhdGljIGlmcmFtZSArIHBhdXNlZCB2aXJ0dWFsIHRpbWUgbGVhdmVzIHRoZVxuICAgICAgIGNvbXBvc2l0b3IncyBsYXN0IGZyYW1lIGNhY2hlZCBldmVuIGFmdGVyIGNhbnZhcyBkaXJ0aWVzOyBpbnZhbGlkYXRlKCkgb25seSByZS1lbWl0cyB0aGVcbiAgICAgICBjYWNoZWQgZnJhbWUuICovXG4gICAgLyogSGVhcnRiZWF0OiBpbnZpc2libGUgYWx3YXlzLW9uIHRpY2suIEZvcmNlcyBDaHJvbWl1bSBjb21wb3NpdG9yIHRvIGlzc3VlIEJlZ2luRnJhbWUgZWFjaFxuICAgICAgIHZpcnR1YWwgdGljayBvbiBvdGhlcndpc2Utc3RhdGljIHBhZ2VzIHNvIGNhbnZhcyNzdGVnbyBwdXRJbWFnZURhdGEgdXBkYXRlcyBsYW5kIGluIHRoZVxuICAgICAgIGNhcHR1cmVkIHBhaW50IGV2ZW50LiBXaXRob3V0IHRoaXMsIGEgc3RhdGljIGlmcmFtZSArIHBhdXNlZCB2aXJ0dWFsIHRpbWUgbGVhdmVzIHRoZVxuICAgICAgIGNvbXBvc2l0b3IncyBsYXN0IGZyYW1lIGNhY2hlZCBldmVuIGFmdGVyIGNhbnZhcyBkaXJ0aWVzOyBpbnZhbGlkYXRlKCkgb25seSByZS1lbWl0cyB0aGVcbiAgICAgICBjYWNoZWQgZnJhbWUuICovXG4gICAgQGtleWZyYW1lcyBwdXBfaGVhcnRiZWF0IHtcbiAgICAgIDAlIHsgb3BhY2l0eTogMC41OyB9XG4gICAgICAxMDAlIHsgb3BhY2l0eTogMTsgfVxuICAgIH1cbiAgICAjaGVhcnRiZWF0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgYmFja2dyb3VuZDogIzAwMDtcbiAgICAgIGFuaW1hdGlvbjogcHVwX2hlYXJ0YmVhdCAxcyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8ZGl2IGlkPVwiaGVhcnRiZWF0XCI+PC9kaXY+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBlbmNvZGVUaW1lc3RhbXAobXMpKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzd2FwQnVmZmVyKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlciwgaW50ZXJ2YWw6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG4gIGF3YWl0IGFkdmFuY2VWaXJ0dWFsVGltZSh3Yy5kZWJ1Z2dlciwgaW50ZXJ2YWwpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzd2FwQnVmZmVyXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIGBwcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWRgIGhvbm9ycyBvbmx5IHRoZSBMQVNUIGNhbGwg4oCUIHJlZ2lzdGVyIGV2ZXJ5XG4vLyBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIHBsYWNlLiBOZXcgc2NoZW1lcyBtdXN0IGJlIGFkZGVkIHRvIFBSSVZJTEVHRURfU0NIRU1FUyBiZWxvdy5cbmNvbnN0IFBSSVZJTEVHRURfUFJJVklMRUdFUyA9IHtcbiAgc3RhbmRhcmQ6IHRydWUsXG4gIHNlY3VyZTogdHJ1ZSxcbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkgcmV0dXJuO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gKHRoaXMuX3Jlc29sdmUgPSByKSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBrZWVwOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX3F1ZXVlKSB7XG4gICAgICBpZiAoZW50cnkuc2lnbmFsID09PSBzaWduYWwpIHtcbiAgICAgICAgZW50cnkucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2VlcC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcXVldWUgPSBrZWVwO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy5ydW4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgSGFyZHdhcmVGcmFtZXNDb250ZXh0LCBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkgYnJlYWs7XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXdyaXRlIG5hbF91bml0X3R5cGUgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsVHlwZShuYWw6IEJ1ZmZlciwgbmV3VHlwZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyBsYXllcklkLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKG5ld1R5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZW1vdmUgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzIOKGkiAwMCAwMCkgZnJvbSBSQlNQLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSArIDIgPCBkYXRhLmxlbmd0aCAmJiBkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAzKSB7XG4gICAgICBvdXQucHVzaCgwLCAwKTtcbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goZGF0YVtpXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cblxuLyoqIEluc2VydCBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMpIGZvciBBbm5leCBCIGNvbXBsaWFuY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW11bGF0aW9uUHJldmVudGlvbihuYWw6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgb3V0LnB1c2gobmFsWzBdISwgbmFsWzFdISk7XG4gIGxldCB6ZXJvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHplcm9zID09PSAyICYmIG5hbFtpXSEgPD0gMykge1xuICAgICAgb3V0LnB1c2goMyk7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIGlmIChuYWxbaV0gPT09IDApIHplcm9zKys7XG4gICAgZWxzZSB6ZXJvcyA9IDA7XG4gICAgb3V0LnB1c2gobmFsW2ldISk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG4iLCIvLyBQYXRjaCBOVkVOQyBvdXRwdXQgdG8gY29uZm9ybSB0byBBcHBsZSBIRVZDIFZpZGVvIHdpdGggQWxwaGEgSW50ZXJvcGVyYWJpbGl0eSBQcm9maWxlLlxuLy8gU3BlYzogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcbi8vIFNsaWNlIHBhcnNlciBpcyBjb25maWctZHJpdmVuOiBOdmVuY0hldmNDb25maWcgZnJvbSBwYXJzZS50cyBkZXJpdmVzIGZsYWdzIGF0IGVuY29kZXIgaW5pdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSByZXR1cm4gYml0c3RyZWFtO1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IHdoZW4gc2xpY2UgaGFzIHNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWc9MC5cbi8vIHN0UnBzSWR4ID0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIHNvIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICBici5yZWFkKDEpOyAvLyBkZWx0YV9ycHNfc2lnblxuICAgIGJyLnJlYWRVZSgpOyAvLyBhYnNfZGVsdGFfcnBzX21pbnVzMVxuICAgIGZvciAobGV0IGogPSAwOyBqIDw9IG51bURlbHRhUG9jc1NldDA7IGorKykge1xuICAgICAgY29uc3QgdXNlZCA9IGJyLnJlYWQoMSk7XG4gICAgICBpZiAoIXVzZWQpIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICBlbHNlIGlmIChjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cyA+IDEpIGJyLnJlYWQoTWF0aC5jZWlsKE1hdGgubG9nMihjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cykpKTtcbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gIH1cbiAgaWYgKGNmZy5zYW9FbmFibGVkKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2x1bWFfZmxhZ1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19jaHJvbWFfZmxhZ1xuICB9XG4gIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfUCB8fCBzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgIGNvbnN0IG92ZXJyaWRlRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKG92ZXJyaWRlRmxhZykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIGJyLnJlYWRVZSgpO1xuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICBpZiAoY2ZnLmNhYmFjSW5pdFByZXNlbnQpIGJyLnJlYWQoMSk7IC8vIGNhYmFjX2luaXRfZmxhZ1xuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyByZXdyaXRlQWxwaGFQcHMsIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyLCByZXdyaXRlQWxwaGFTcHMgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGVuY29kZU5hbEhlYWRlcixcbiAgTkFMX1NFSV9QUkVGSVgsXG4gIE5BTF9TUFMsXG4gIE5BTF9QUFMsXG4gIE5BTF9WUFMsXG4gIHR5cGUgTmFsVW5pdCxcbiAgcmV3cml0ZU5hbExheWVySWQsXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUC4gQ2FsbGVyIHByZS1maWxscyBVVj0xMjguXG4vLyBVaW50MzIgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSByZXR1cm4gcmV3cml0ZUFscGhhU3BzKGRhdGEpO1xuICBpZiAodHlwZSA9PT0gTkFMX1BQUykgcmV0dXJuIHJld3JpdGVBbHBoYVBwcyhkYXRhKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSBjb250aW51ZTtcbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSBOQUxfVlBTID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGFEYXRhID0gcmV3cml0ZUFscGhhUGFyYW1TZXQobmFsLnR5cGUsIGFscGhhTmFsLmRhdGEpO1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFEYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9TRUlfUFJFRklYLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjICgwID0gdW5zcGVjaWZpZWQvcHJlbXVsdGlwbGllZDsgbWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10sIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IE5BTF9WUFMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihuYWwuZGF0YSwgbmFsLnR5cGUsIGNmZyk7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiwgdHlwZSBBVlBhY2tldEZsYWcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB7IGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQYWNrZXQge1xuICBkYXRhOiBCdWZmZXI7XG4gIHB0czogYmlnaW50O1xuICBkdHM6IGJpZ2ludDtcbiAgZHVyYXRpb246IGJpZ2ludDtcbiAgZmxhZ3M6IEFWUGFja2V0RmxhZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdWFsTGF5ZXJNdXhPcHRpb25zIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbi8vIERyYWlucyB0aGUgYmFzZSArIGFscGhhIE5WRU5DIHNlc3Npb25zIGFuZCB3cml0ZXMgaW50ZXJsZWF2ZWQgSEVWQy1hbHBoYSBhY2Nlc3MgdW5pdHMuXG5leHBvcnQgY2xhc3MgRHVhbExheWVyTXV4IHtcbiAgcHJpdmF0ZSBfczogRHVhbExheWVyTXV4T3B0aW9ucztcbiAgcHJpdmF0ZSBfYmFzZVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxwaGFRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoczogRHVhbExheWVyTXV4T3B0aW9ucykge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QgfSA9IHRoaXMuX3M7XG4gICAgLy8gRHJhaW4gZWFjaCBzZXNzaW9uIGZ1bGx5IOKAlCBpbmRlcGVuZGVudCBOVkVOQyBzZXNzaW9ucyBydW4gYSBmcmFtZSBhcGFydCB0cmFuc2llbnRseS5cbiAgICB0aGlzLl9iYXNlUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGJhc2VDdHgsIGJhc2VQa3QsIFwiYmFzZVwiKSkpO1xuICAgIHRoaXMuX2FscGhhUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGFscGhhQ3R4LCBhbHBoYVBrdCwgXCJhbHBoYVwiKSkpO1xuICAgIC8vIGJmPTAg4oaSIG5vIHJlb3JkZXI7IHF1ZXVlIGluZGV4IE4gaXMgdGhlIHNhbWUgZnJhbWUgZm9yIGJvdGguIExlZnRvdmVyIHdhaXRzIGZvciBuZXh0IGRyYWluLlxuICAgIHdoaWxlICh0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmIHRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlUGFpcih0aGlzLl9iYXNlUXVldWUuc2hpZnQoKSEsIHRoaXMuX2FscGhhUXVldWUuc2hpZnQoKSEsIG11eGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnBhaXJlZCBsZWZ0b3ZlcnMgYWZ0ZXIgRU9GID0gdHJ1ZSBiYXNlL2FscGhhIGRlc3luYzsgcmV0dXJucyBhIGRlc2NyaXB0aW9uLCBlbHNlIHVuZGVmaW5lZC5cbiAgZGVzeW5jQWZ0ZXJFb2YoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgIXRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikgcmV0dXJuIG91dDtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30ucmVjZWl2ZVBhY2tldGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc25hcHNob3QocGt0OiBQYWNrZXQpOiBQZW5kaW5nUGFja2V0IHtcbiAgICAvLyBwa3QuZGF0YSBpcyBuYXRpdmUgbWVtb3J5IGZyZWVkIG9uIHVucmVmIOKAlCBjb3B5IGJlZm9yZSBxdWV1ZWluZy5cbiAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuZnJvbShwa3QuZGF0YSEpLCBwdHM6IHBrdC5wdHMsIGR0czogcGt0LmR0cywgZHVyYXRpb246IHBrdC5kdXJhdGlvbiwgZmxhZ3M6IHBrdC5mbGFncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZVBhaXIoYmFzZTogUGVuZGluZ1BhY2tldCwgYWxwaGE6IFBlbmRpbmdQYWNrZXQsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYmFzZUN0eCwgc3RyZWFtLCBoZXZjQ2ZnIH0gPSB0aGlzLl9zO1xuICAgIC8vIFBhdGNoIGluLWJhbmQgVlBTL1NQUyBQVEwgYml0cyBmb3IgQXBwbGUtVlRCIGNvbXBhdCAoZW5jb2RlciByZXBlYXRzIGhlYWRlcnMgcGVyIElEUikuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlLmRhdGEpLCBzcGxpdE5hbFVuaXRzKGFscGhhLmRhdGEpLCBoZXZjQ2ZnKTtcbiAgICAvLyBkYXRhIHNldHRlciB3aXBlcyBwdHMvZHRzL2R1cmF0aW9uL2ZsYWdzIOKAlCByZXN0b3JlOyBmbGFncycgS0VZIGJpdCBkcml2ZXMgbW92IHN0c3MuXG4gICAgYmFzZVBrdC5kYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpO1xuICAgIGJhc2VQa3QucHRzID0gYmFzZS5wdHM7XG4gICAgYmFzZVBrdC5kdHMgPSBiYXNlLmR0cztcbiAgICBiYXNlUGt0LmR1cmF0aW9uID0gYmFzZS5kdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGJhc2UuZHVyYXRpb247XG4gICAgYmFzZVBrdC5mbGFncyA9IGJhc2UuZmxhZ3M7XG4gICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gUGFyc2UgTlZFTkMgU1BTL1BQUyBleHRyYWRhdGEgYXQgZW5jb2RlciBpbml0IHRvIGRlcml2ZSBmbGFncyB0aGUgc2xpY2UgaGVhZGVyIHBhcnNlciBkZXBlbmRzIG9uLlxuLy8gRGVmdXNlcyBmcmFnaWxlIGhhcmRjb2RlZCBhc3N1bXB0aW9uczogaWYgTlZFTkMgZGVmYXVsdHMgc2hpZnQsIHRocm93cyB3aXRoIGFjdGlvbmFibGUgZXJyb3IuXG5cbmltcG9ydCB7IEJpdFJlYWRlciB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgTkFMX1BQUywgTkFMX1NQUywgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjtcbiAgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZhaWwoZmllbGQ6IHN0cmluZywgZ290OiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYGhldmNfYWxwaGE6IE5WRU5DIFNQUy9QUFMgdW5zdXBwb3J0ZWQ6ICR7ZmllbGR9PSR7Z290fSwgZXhwZWN0ZWQgJHtleHBlY3RlZH1gKTtcbn1cblxuZnVuY3Rpb24gc2tpcFB0bChicjogQml0UmVhZGVyLCBtYXhTdWJMYXllcnM6IG51bWJlcik6IHZvaWQge1xuICBici5yZWFkKDIgKyAxICsgNSk7IC8vIHByb2ZpbGVfc3BhY2UsIHRpZXIsIHByb2ZpbGVfaWRjXG4gIGJyLnJlYWQoMzIpOyAvLyBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ1swLi4zMV1cbiAgYnIucmVhZCg0OCk7IC8vIDQgc291cmNlL3BhY2tlZCBmbGFncyArIDQzIGNvbnN0cmFpbnQvcmVzZXJ2ZWQgKyAxIGluYmxkXG4gIGJyLnJlYWQoOCk7IC8vIGxldmVsX2lkY1xuICBjb25zdCBzdWJQcm9maWxlUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc3ViTGV2ZWxQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgc3ViUHJvZmlsZVByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgICBzdWJMZXZlbFByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBpZiAobWF4U3ViTGF5ZXJzID4gMCkgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykgYnIucmVhZCgyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgaWYgKHN1YkxldmVsUHJlc2VudFtpXSkgYnIucmVhZCg4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNwcyhzcHNSYnNwOiBCdWZmZXIpOiB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIoc3BzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IG1heFN1YkxheWVycyA9IGJyLnJlYWQoMyk7XG4gIC8vIGFscGhhX2Rhcndpbi5yZXdyaXRlQWxwaGFTcHMgKyB2cHMuZXh0cmFjdFBUTCBoYXJkY29kZSA5Ni1iaXQgUFRMIOKAlCBvbmx5IHZhbGlkIHdoZW4gc3ViX2xheWVycz0wLlxuICBpZiAobWF4U3ViTGF5ZXJzICE9PSAwKSBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZ1xuICBza2lwUHRsKGJyLCBtYXhTdWJMYXllcnMpO1xuICBici5yZWFkVWUoKTsgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IGNocm9tYUZvcm1hdCA9IGJyLnJlYWRVZSgpO1xuICBpZiAoY2hyb21hRm9ybWF0ID09PSAzKSBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzXG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlc1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGNvbnN0IGxvZzJNYXhQb2NMc2IgPSBici5yZWFkVWUoKSArIDQ7XG4gIGNvbnN0IHN1Yk9yZGVySW5mbyA9IGJyLnJlYWQoMSk7XG4gIGNvbnN0IG9yZGVyQ291bnQgPSBzdWJPcmRlckluZm8gPyBtYXhTdWJMYXllcnMgKyAxIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckNvdW50OyBpKyspIHtcbiAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwic2NhbGluZ19saXN0X2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwicGNtX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIGZhaWwoXCJudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNcIiwgbnVtU3RScHMsIFwi4omkMVwiKTtcbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gIH1cbiAgY29uc3QgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChsb25nVGVybVJlZlBpY3NQcmVzZW50KSBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGNvbnN0IHNwc1RlbXBvcmFsTXZwRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIHJldHVybiB7IGxvZzJNYXhQb2NMc2IsIHNhb0VuYWJsZWQsIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bVN0UnBzLCBudW1EZWx0YVBvY3NTZXQwLCBsb25nVGVybVJlZlBpY3NQcmVzZW50LCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIGZhaWwoXCJudW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHNcIiwgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIGJyLnJlYWRVZSgpOyAvLyBjdV9xcF9kZWx0YV9lbmFibGVkIOKGkiBkaWZmX2N1X3FwX2RlbHRhX2RlcHRoXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkgZmFpbChcInRpbGVzX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyAvLyBiZXRhL3RjIG9mZnNldHMgKHNlIHZpYSB1ZSBhZHZhbmNlKVxuICAgIH1cbiAgfVxuICAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyBpbiBzbGljZSBoZWFkZXIgaXMgcHJlc2VudCBpZmZcbiAgLy8gcHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmICFzbGljZV9kZWJsb2NraW5nX2Rpc2FibGVkLlxuICBjb25zdCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyA9IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkICYmICFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlO1xuICByZXR1cm4geyBjYWJhY0luaXRQcmVzZW50LCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdmVuY0hldmNDb25maWcoZXh0cmFkYXRhOiBCdWZmZXIpOiBOdmVuY0hldmNDb25maWcge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhleHRyYWRhdGEpO1xuICBjb25zdCBzcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1NQUyk7XG4gIGNvbnN0IHBwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfUFBTKTtcbiAgaWYgKCFzcHMpIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFNQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgaWYgKCFwcHMpIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFBQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgY29uc3QgcyA9IHBhcnNlU3BzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc3BzLmRhdGEpKTtcbiAgY29uc3QgcCA9IHBhcnNlUHBzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24ocHBzLmRhdGEpKTtcbiAgcmV0dXJuIHsgLi4ucywgLi4ucCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgLy8gdGllcj1tYWluIG1hdGNoZXMgQXBwbGUgVmlkZW9Ub29sYm94OyBtYWNPUyBDaHJvbWUgcmVxdWlyZXMgTWFpbiB0aWVyIGZvciBIRVZDIGFscGhhIGRlY29kZS5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIsIHRpZXI6IFwibWFpblwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCDigJQgTlZFTkMgY29udmVydHMgaW50ZXJuYWxseSwgbm8gQ1BVIFNXUywgbm8gaHdGcmFtZXNDdHggbmVlZGVkLlxuICAgIGNvbnN0IGJhc2VDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpO1xuXG4gICAgbGV0IGFscGhhQ3R4OiBDb2RlY0NvbnRleHQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJhc2VQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFTd0ZyYW1lOiBGcmFtZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgICBjb25zdCBoZXZjQ2ZnID0gcGFyc2VOdmVuY0hldmNDb25maWcoYmFzZUN0eC5leHRyYURhdGEpO1xuXG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bCh1bmlmaWVkKTtcblxuICAgICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgICBjb25zdCBjaHJvbWFTaXplID0gKCh3aWR0aCArIDEpID4+IDEpICogKChoZWlnaHQgKyAxKSA+PiAxKTtcbiAgICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgY2hyb21hU2l6ZSAqIDIpO1xuICAgICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgICAgYmFzZVBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgYWxwaGFTd0ZyYW1lID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCk7XG5cbiAgICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgICAgYmFzZUN0eCxcbiAgICAgICAgYWxwaGFDdHgsXG4gICAgICAgIGJhc2VQa3QsXG4gICAgICAgIGFscGhhUGt0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGFscGhhU3dGcmFtZSxcbiAgICAgICAgYWxwaGFCdWYsXG4gICAgICAgIGhldmNDZmcsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQYXJ0aWFsIGNvbnN0cnVjdGlvbjogZW5jb2RlciBuZXZlciByZXR1cm5lZCwgc28gW1N5bWJvbC5kaXNwb3NlXSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIGJhc2VQa3Q/LmZyZWUoKTtcbiAgICAgIGFscGhhUGt0Py5mcmVlKCk7XG4gICAgICBhbHBoYVN3RnJhbWU/LmZyZWUoKTtcbiAgICAgIGFscGhhQ3R4Py5mcmVlQ29udGV4dCgpO1xuICAgICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIC8vIEV4dHJhY3QgdGhlIGFscGhhIHBsYW5lIGJlZm9yZSBiYXNlLnNlbmRGcmFtZSDigJQgdGhlIGVuY29kZXIgdW5yZWZzIHRoZSBpbnB1dCBmcmFtZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuXG4gICAgYmdyYUZyYW1lLnB0cyA9IHB0cztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhU3dGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmJhc2VDdHgsIFwiYmFzZVwiKTtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5hbHBoYUN0eCwgXCJhbHBoYVwiKTtcbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICAgIGNvbnN0IGRlc3luYyA9IHRoaXMuX211eC5kZXN5bmNBZnRlckVvZigpO1xuICAgIGlmIChkZXN5bmMpIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiAke2Rlc3luY31gKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgd2hlbiBOVkVOQyBzZXNzaW9ucyBmcmVlZCBpbiBjcmVhdGlvbiBvcmRlci5cbiAgICAvLyBMSUZPIGRlc3Ryb3kgYXZvaWRzIHRoZSBzZWdmYXVsdC4gUGVyIE5WSURJQSBmb3J1bSAvdC8yNjk5NzQuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHR5cGUgQVZQaXhlbEZvcm1hdCwgdHlwZSBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICBsZXQgcGt0OiBQYWNrZXQgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICAgIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQYXJ0aWFsIGNvbnN0cnVjdGlvbjogZW5jb2RlciBuZXZlciByZXR1cm5lZCwgc28gW1N5bWJvbC5kaXNwb3NlXSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIHBrdD8uZnJlZSgpO1xuICAgICAgY3R4LmZyZWVDb250ZXh0KCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvd25zSHc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHdWaWRlb0VuY29kZXIob3B0czogSHdWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICBjb25zdCBodyA9IHNoYXJlZEh3ID8/IChkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkpO1xuICBjb25zdCBvd25zSHcgPSAhc2hhcmVkSHcgJiYgISFodztcblxuICB0cnkge1xuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwiZmFzdFwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTE6YmZyYW1lcz0zOnBvb2xzPSs6ZnJhbWUtdGhyZWFkcz0wXCIgfSxcbiAgICBiaXRyYXRlLFxuICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgIG11eGVyLFxuICB9KTtcbiAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSwgb3duc0h3OiBmYWxzZSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBEaWN0aW9uYXJ5LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBSZXR1cm5UeXBlPEZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+IHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgLy8gK2Zhc3RzdGFydCByZWxvY2F0ZXMgbW9vdiB0byBmaWxlIGZyb250IG9uIHdyaXRlVHJhaWxlciBzbyBwbGF5ZXJzIGNhbiBiZWdpbiBwbGF5YmFjayBiZWZvcmUgZnVsbCBkb3dubG9hZC5cbiAgICB1c2luZyBvcHRzID0gRGljdGlvbmFyeS5mcm9tT2JqZWN0KHsgbW92ZmxhZ3M6IFwiK2Zhc3RzdGFydFwiIH0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIob3B0cyksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBBIGZhaWxlZC90cnVuY2F0ZWQgdHJhaWxlciB3cml0ZSBtdXN0IG5vdCBsZWFrIHRoZSBGRCArIG5hdGl2ZSBjb250ZXh0LlxuICAgICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgICBhd2FpdCB0aGlzLl9jdHhbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjQuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLm1wNFwiKSB8fCBsb3dlci5lbmRzV2l0aChcIi5tb3ZcIikpIHJldHVybiBcIm1wNFwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIGNvbnN0IG11eGVyID0gbmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSk7XG4gICAgY29uc3QgdmlkZW8gPSBvcHRzLmtpbmQgPT09IFwibXA0XCIgPyBhd2FpdCB0aGlzLm1wNFZpZGVvKG9wdHMsIG11eGVyKSA6IGF3YWl0IHRoaXMud2VibVZpZGVvKG9wdHMsIG11eGVyKTtcbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgdGhpcy5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi52aWRlbywgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIsIFwicm93LW10XCI6IFwiMVwiLCB0aHJlYWRzOiBcIjJcIiB9LFxuICAgICAgYml0cmF0ZTogNF8wMDBfMDAwLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhdWRpb0ZvcihvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICAvLyBPcHVzIHJlamVjdHMgNDQuMWsuXG4gICAgY29uc3QgY2ZnID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIlxuICAgICAgICA/IHsgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCwgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyB9XG4gICAgICAgIDogeyBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJPUFVTIH07XG4gICAgcmV0dXJuIEF1ZGlvRW5jb2Rlci5jcmVhdGUoeyAuLi5jZmcsIGdsb2JhbEhlYWRlcjogdHJ1ZSwgYml0cmF0ZTogMTI4XzAwMCwgbXV4ZXIgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShzcmMpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmF1ZGlvPy5lbmNvZGUocGNtLCB0aGlzLl9zLm11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGF1ZGlvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgIGlmIChod1ZpZGVvKSBhd2FpdCBod1ZpZGVvLmZsdXNoKG11eGVyKTtcbiAgICBlbHNlIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgb3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBvdXRGaWxlcyA9IG91dEZpbGVcbiAgICAgIC5zcGxpdChcIixcIilcbiAgICAgIC5tYXAoKHApID0+IHAudHJpbSgpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcGF0aFwiKTtcblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fcy5zaW5rcy5tYXAoKHNpbmspID0+IHNpbmsuZW5jb2RlQkdSQShmcmFtZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9zLm9wdHM7XG4gICAgICB0aGlzLl9zLnBuZ0NvZGVjID8/PSBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IHRoaXMuX3MucG5nQ29kZWMuZGVjb2RlUE5HKHBuZ0RhdGEpO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5lbmNvZGVBdWRpbyhwY20pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5mbHVzaCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZXM7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5wbmdDb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3Muc2hhcmVkSHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYmdyYUZyYW1lKGlucHV0OiBCdWZmZXIpOiBGcmFtZSB7XG4gICAgY29uc3QgZnJhbWUgPSBtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjMuXG5cbi8qKlxuICogRnJhbWUgZHJvcCBxdWFsaXR5IHNjb3JlICgwID0gcGVyZmVjdCwgMSA9IHdvcnN0KS5cbiAqXG4gKiBDb21iaW5lcyB0d28gZGltZW5zaW9uczpcbiAqIC0gR2xvYmFsOiBvdmVyYWxsIGRyb3AgcmF0ZSBhY3Jvc3MgdGhlIHRpbWVsaW5lXG4gKiAtIExvY2FsOiBwZXJjZXB0dWFsIHNldmVyaXR5IG9mIGNvbnNlY3V0aXZlIGRyb3BzIChidXJzdHMpXG4gKlxuICogVXNlcyBjb21wbGVtZW50YXJ5IG11bHRpcGxpY2F0aW9uOiBzY29yZSA9IDEgLSAoMS1nKSgxLWwpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJhbWVEcm9wU2NvcmUge1xuICBnbG9iYWw6IG51bWJlcjtcbiAgbG9jYWw6IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBleHBlY3RlZDogbnVtYmVyO1xuICBhY3R1YWw6IG51bWJlcjtcbiAgbWF4QnVyc3Q6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYW1lRHJvcFN0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnBzOiBudW1iZXI7XG4gIHByaXZhdGUgX2FjdHVhbCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRCdXJzdCA9IDA7XG4gIHByaXZhdGUgX2J1cnN0czogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihmcHM6IG51bWJlcikge1xuICAgIHRoaXMuX2ZwcyA9IGZwcztcbiAgfVxuXG4gIC8qKiBDYWxsIHdoZW4gYSBmcmFtZSBpcyBhY3R1YWxseSB3cml0dGVuIHRvIHRoZSBlbmNvZGVyLiAqL1xuICB3cm90ZShjb3VudCA9IDEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuICAgIHRoaXMuX2FjdHVhbCArPSBjb3VudDtcbiAgfVxuXG4gIC8qKiBDYWxsIHdoZW4gYSBmcmFtZSBpcyBkcm9wcGVkLiAqL1xuICBkcm9wcGVkKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRCdXJzdCArPSBjb3VudDtcbiAgfVxuXG4gIC8qKiBGaW5hbGl6ZSBhbmQgcmV0dXJuIHRoZSBzY29yZS4gKi9cbiAgZmluYWxpemUoKTogRnJhbWVEcm9wU2NvcmUge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG5cbiAgICBsZXQgdG90YWxEcm9wcGVkID0gMDtcbiAgICBsZXQgbG9jYWxTdW0gPSAwO1xuICAgIGxldCBtYXhCdXJzdCA9IDA7XG4gICAgZm9yIChjb25zdCBidXJzdCBvZiB0aGlzLl9idXJzdHMpIHtcbiAgICAgIHRvdGFsRHJvcHBlZCArPSBidXJzdDtcbiAgICAgIG1heEJ1cnN0ID0gTWF0aC5tYXgobWF4QnVyc3QsIGJ1cnN0KTtcbiAgICAgIGNvbnN0IHBlcmNlcHRpYmxlID0gTWF0aC5tYXgoMCwgYnVyc3QgLSAxKTtcbiAgICAgIGxvY2FsU3VtICs9IChwZXJjZXB0aWJsZSAvIHRoaXMuX2ZwcykgKiogMjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuX2FjdHVhbCArIHRvdGFsRHJvcHBlZDtcbiAgICBjb25zdCBnID0gZXhwZWN0ZWQgPiAwID8gdG90YWxEcm9wcGVkIC8gZXhwZWN0ZWQgOiAwO1xuICAgIGNvbnN0IGwgPSBNYXRoLm1pbigxLCBsb2NhbFN1bSk7XG4gICAgY29uc3Qgc2NvcmUgPSAxIC0gKDEgLSBnKSAqICgxIC0gbCk7XG5cbiAgICByZXR1cm4geyBnbG9iYWw6IGcsIGxvY2FsOiBsLCBqYW5rOiBzY29yZSwgZXhwZWN0ZWQsIGFjdHVhbDogdGhpcy5fYWN0dWFsLCBtYXhCdXJzdCB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGltYWdlOiBOYXRpdmVJbWFnZSkge1xuICBjb25zdCBzaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBpbWFnZS5pc0VtcHR5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXplRXF1YWxzKGE6IFNpemUsIGI6IFNpemUpIHtcbiAgcmV0dXJuIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgdHlwZSBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHR5cGUgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5cbmV4cG9ydCBjb25zdCBBVURJT19NRVRBX0NIQU5ORUwgPSBcImF1ZGlvLW1ldGFcIjtcbmV4cG9ydCBjb25zdCBBVURJT19DSFVOS19DSEFOTkVMID0gXCJhdWRpby1jaHVua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvTGlzdGVuZXJPcHRpb25zIHtcbiAgd2M6IFdlYkNvbnRlbnRzO1xuICBlbmNvZGVyOiBFbmNvZGVyUGlwZWxpbmU7XG4gIGdldFZpZGVvVGltZU1zOiAoKSA9PiBudW1iZXI7XG4gIG9uRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIEF1ZGlvRGlzcG9zYWwgPSAoKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoeyB3YywgZW5jb2RlciwgZ2V0VmlkZW9UaW1lTXMsIG9uRXJyb3IgfTogQXVkaW9MaXN0ZW5lck9wdGlvbnMpOiBBdWRpb0Rpc3Bvc2FsIHtcbiAgY29uc3Qgb25NZXRhID0gYXN5bmMgKF9lOiB1bmtub3duLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY29uc3Qgc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgICBjb25zdCBzdGFydE1zID0gZ2V0VmlkZW9UaW1lTXMoKTtcbiAgICBlbmNvZGVyLnNldHVwQXVkaW8oc2FtcGxlUmF0ZSk7XG4gICAgY29uc3Qgc2lsZW5jZVNhbXBsZXMgPSBNYXRoLmNlaWwoKHN0YXJ0TXMgKiBzYW1wbGVSYXRlKSAvIDEwMDApO1xuICAgIGlmIChzaWxlbmNlU2FtcGxlcyA8PSAwKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLy8gV2hlbiBwcm92aWRlZCwgdXNlUmV0cnkgYmFpbHMgb3V0IGltbWVkaWF0ZWx5IG9uIGFib3J0IGluc3RlYWQgb2YgcmV0cnlpbmcuIFRoZSBzaWduYWxcbiAgLy8gaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIG11c3Qgd2lyZSBpdCB3aGVyZSBpdCBtYXR0ZXJzIChlLmcuIGZldGNoLCBTMyBzZW5kKS5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0LCBzaWduYWwgfTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IHNvdXJjZS5zcGxpdChcIjpcIilbMF0gKyBcIjpcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IFVSTCB9IGZyb20gXCJ1cmxcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmNvbnN0IExPQ0FMX1NDSEVNRVMgPSBbXCJwdXA6XCIsIFwicHVwLWZyYW1lOlwiLCBcImZpbGU6XCIsIFwiZGF0YTpcIiwgXCJibG9iOlwiLCBcImNocm9tZS1leHRlbnNpb246XCIsIFwiZGV2dG9vbHM6XCJdO1xuXG5mdW5jdGlvbiBpc0xvY2FsU2NoZW1lKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcyBvZiBMT0NBTF9TQ0hFTUVTKSBpZiAodXJsLnN0YXJ0c1dpdGgocykpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbiAgY2FuY2VsTWVkaWE/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSwgY2FuY2VsTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIGlmIChjYW5jZWxNZWRpYSAmJiBkZXRhaWxzLnJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiKSB7XG4gICAgICBjYWxsYmFjayh7IGNhbmNlbDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xvY2FsU2NoZW1lKHVybCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGlmIChjYW5jZWxNZWRpYSAmJiBkZXRhaWxzLnJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiICYmIGRldGFpbHMuZXJyb3IgPT09IFwibmV0OjpFUlJfQkxPQ0tFRF9CWV9DTElFTlRcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dnZXIuZXJyb3IoVEFHLCBgZXJyb3I6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBlcnJvcjogZGV0YWlscy5lcnJvcixcbiAgICAgIHJlc291cmNlVHlwZTogZGV0YWlscy5yZXNvdXJjZVR5cGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwdXBBdWRpb1ByZWxvYWQsIHB1cElmcmFtZVByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IGNyZWF0ZVN0ZWdvVVJMIH0gZnJvbSBcIi4vcHJvdG9jb2xcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5jb25zdCBUSU1FT1VUX0VSUk9SID0gbmV3IEVycm9yKFwid2luZG93IHRpbWVvdXRcIik7XG5cbmludGVyZmFjZSBGaW5pc2hPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbiwgdG9sZXJhbnQsIHNpZ25hbCB9OiBGaW5pc2hPcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gZG9uZShUSU1FT1VUX0VSUk9SKSwgMTBfMDAwKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IHVua25vd24pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpO1xuICAgICAgZWxzZSByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gZG9uZShzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGlmICh0b2xlcmFudCkgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1zdG9wLWxvYWRpbmc6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYGRpZC1mYWlsLWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoeyB1cmwsIHNvdXJjZSwgY29kZSwgZGVzYyB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgcmVuZGVyLXByb2Nlc3MtZ29uZTogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgZXhpdENvZGUsIHJlYXNvbiB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VXaW5kb3cod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBcImZvcmNlIGNsb3NlXCIpO1xuICAgICAgICB3aW4uZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgZG9uZSgpO1xuICAgIH0sIDEwMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiAoY2xlYXJUaW1lb3V0KHRpbWVyKSwgcmVzb2x2ZSgpKTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiBwaWNrUHJlbG9hZChyZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZW5kZXJlci5kZXRlcm1pbmlzdGljKSByZXR1cm4gcHVwSWZyYW1lUHJlbG9hZDtcbiAgaWYgKHJlbmRlcmVyLndpdGhBdWRpbykgcmV0dXJuIHB1cEF1ZGlvUHJlbG9hZDtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHRvbGVyYW50LCBzaWduYWwsIG9uQ3JlYXRlZCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQ6IHBpY2tQcmVsb2FkKHJlbmRlcmVyKSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdzogd2luLCB1c2VJbm5lclByb3h5LCBjYW5jZWxNZWRpYTogcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIG1lc3NhZ2Uuc3RhcnRzV2l0aChgJWNFbGVjdHJvbiBTZWN1cml0eSBXYXJuaW5nYCkpIHJldHVybjtcbiAgICByZW5kZXJlci5vbkNvbnNvbGUobGV2ZWwsIG1lc3NhZ2UpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGNyZWF0ZVN0ZWdvVVJMKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uOiAoKSA9PiB3aW4ubG9hZFVSTCh1cmwpLCB0b2xlcmFudCwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5jb25zdCBvcGVuV2luZG93V2l0aFJldHJ5ID0gdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgb25DcmVhdGVkLCBzaWduYWwgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjaGVja0hUTUwoc291cmNlKTtcblxuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIGxldCB3YXJtdXA6IEJyb3dzZXJXaW5kb3cgfCB1bmRlZmluZWQ7XG4gIGxldCBlcnJvcjogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICB3YXJtdXAgPSBhd2FpdCBvcGVuV2luZG93V2l0aFJldHJ5KHsgc291cmNlLCByZW5kZXJlciwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG5cbiAgY29uc3Qgb3BlbiA9ICgpID0+IG9wZW5XaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCwgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50IH0pO1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgdHlwZSBOYXRpdmVJbWFnZSwgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgRnJhbWVEcm9wU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9mcmFtZV9kcm9wXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGF0dGFjaEF1ZGlvTGlzdGVuZXJzLCB0eXBlIEF1ZGlvRGlzcG9zYWwgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlbmRlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RXcml0dGVuVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRnJhbWVEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgZGlzcG9zZUF1ZGlvOiBBdWRpb0Rpc3Bvc2FsIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgZW5jb2Rlci5lbmNvZGVCR1JBKGZyYW1lKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gIH07XG5cbiAgY29uc3QgcGFpbnQgPSAoX2U6IHVua25vd24sIF9yOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICBlbmNvZGVFcnJvciA/Pz0gc2lnbmFsPy5yZWFzb247XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWNvZGUgc3RlZ28gdGltZXN0YW1wIGZyb20gdGhlIGJvdHRvbSBwaXhlbCByb3cgd2l0aG91dCBmdWxsIGJpdG1hcCBjb3B5XG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RlRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgZnJhbWVzIHRoYXQgYXJyaXZlIHRvbyBzb29uICg8IDgwJSBvZiBmcmFtZSBpbnRlcnZhbClcbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lICE9PSB1bmRlZmluZWQgJiYgY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWUgPCBmcmFtZUludGVydmFsICogMC44KSByZXR1cm47XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZURlbHRhIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0V3JpdHRlblRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3csIHdyaXR0ZW49JHt3cml0dGVufSBzdHVjaz0ke3N0dWNrfWApO1xuICAgICAgICBzdHVjaysrO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlcmVuZGVyPFQ+KHNpZ25hbDogQWJvcnRTaWduYWwsIGFjdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBsZXQgbGFzdEVycjogdW5rbm93bjtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhyb3cgZTtcbiAgICAgIGxhc3RFcnIgPSBlO1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcmV0cnkgJHthdHRlbXB0ICsgMX0vJHtNQVhfUkVOREVSX0FUVEVNUFRTfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbGFzdEVycjtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi8uLi9iYXNlL3RpbWluZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltWaWRlb11cIjtcbmNvbnN0IEFEVkFOQ0VfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyhmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZnJhbWUgfHwgIWZyYW1lLnVybCkgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IGV4cHIgPSBgd2luZG93Ll9fcHVwX3ZpZGVvX18mJndpbmRvdy5fX3B1cF92aWRlb19fLmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pYDtcbiAgICBjb25zdCBldiA9IGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGV4cHIpO1xuICAgIGF3YWl0IHdpdGhUaW1lb3V0KGV2LCBBRFZBTkNFX1RJTUVPVVRfTVMsIFwidmlkZW8uYWR2YW5jZVwiKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYGFkdmFuY2Ugc2tpcHBlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgYWR2YW5jZVZpZGVvcyB9IGZyb20gXCIuL3ZpZGVvL2FkdmFuY2VcIjtcblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpY2soZnJhbWU6IFdlYkZyYW1lTWFpbiB8IHVuZGVmaW5lZCwgdGltZXN0YW1wTXM6IG51bWJlcikge1xuICBpZiAoIWZyYW1lKSByZXR1cm47XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhmcmFtZSwgdGltZXN0YW1wTXMpXSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQge1xuICB0eXBlIEJyb3dzZXJXaW5kb3csXG4gIHR5cGUgRXZlbnQsXG4gIHR5cGUgTmF0aXZlSW1hZ2UsXG4gIHR5cGUgUmVjdGFuZ2xlLFxuICB0eXBlIFNpemUsXG4gIHR5cGUgV2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zLFxufSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHBhdXNlVmlydHVhbFRpbWUsIHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHR5cGUgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN3YXBCdWZmZXIgfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgdGljayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGZyYW1lU2VydmVyIH0gZnJvbSBcIi4vdmlkZW8vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IGxhc3RUczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgbGFnZ3kgPSAwO1xuICBsZXQgc3R1Y2sgPSAwO1xuICBsZXQgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSAzKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcImRyYXdhYmxlIHRpbWVvdXRcIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gcmVuZGVyIGlzIGV4dHJlbWVseSBzbG93IEAgJHttc30sIGN1cnJlbnQ6ICR7bGFzdFRzfSB3aXRoICR7c3R1Y2t9IHJlcGVhdHNgKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLmludmFsaWRhdGUoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgICAgY29uc3QgaGFuZGxlciA9IChfZTogRXZlbnQ8V2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zPiwgX2Q6IFJlY3RhbmdsZSwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICBjb25zdCB0cyA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgTWF0aC5hYnModHMgLSBtcykgPiAxKSB7XG4gICAgICAgICAgbGFzdFRzID0gdHM7XG4gICAgICAgICAgbGFnZ3krKztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBzaXplLmhlaWdodCAqIHNpemUud2lkdGggKiA0KSk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICAgICAgLy8gQ29tcG9zaXRvciBjYXAsIE5PVCBvdXRwdXQgZnBzLiBNYXggaXQgc28gcGFpbnQgZXZlbnRzIGFycml2ZSB3aXRob3V0IGludGVyLWZyYW1lIHdhbGwgZGVsYXkuXG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoMjQwKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob290KG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGUsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG4gIGlmICh3aXRoQXVkaW8pIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuXG4gIGNvbnN0IHRJbml0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHdpblAgPSBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlcjogb3B0aW9ucywgc2lnbmFsIH0pO1xuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHdpbiA9IGF3YWl0IHdpblA7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiaW5pdCBkb25lOlwiLCB7IHNvdXJjZSwgY29zdDogcGVyZm9ybWFuY2Uubm93KCkgLSB0SW5pdCB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICBhd2FpdCBwYXVzZVZpcnR1YWxUaW1lKGNkcCk7XG5cbiAgICBmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgdG90YWw7IGZyYW1lKyspIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWUgKyAxKSAqIGZyYW1lSW50ZXJ2YWw7XG5cbiAgICAgIGF3YWl0IHRpY2soaWZyYW1lLCBmcmFtZU1zKTtcbiAgICAgIGF3YWl0IHN3YXBCdWZmZXIod2luLndlYkNvbnRlbnRzLCBmcmFtZU1zLCBmcmFtZUludGVydmFsKTtcbiAgICAgIGNvbnN0IGJpdG1hcCA9IGF3YWl0IHBhaW50KHsgc291cmNlLCB3aW4sIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LCBtczogZnJhbWVNcyB9KTtcbiAgICAgIC8vIEtpY2sgb2ZmIGVuY29kZSB3aXRob3V0IGF3YWl0aW5nOyBwaXBlbGluZSBsaW1pdGVyIHNlcmlhbGl6ZXMgaW50ZXJuYWxseS5cbiAgICAgIC8vIEVuY29kZSBydW5zIGNvbmN1cnJlbnQgd2l0aCBuZXh0IGZyYW1lJ3MgQ0RQL3BhaW50IHNldHVwLlxuICAgICAgcGlwZWxpbmUuZW5jb2RlQkdSQShiaXRtYXApLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgICAgIHdyaXR0ZW4rKztcbiAgICAgIGlmIChlbmNvZGVFcnJvcikgdGhyb3cgZW5jb2RlRXJyb3I7XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcmFtZVNlcnZlci5jbG9zZUFsbCgpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvcikgdGhyb3cgZW5jb2RlRXJyb3I7XG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBJcGNNc2dUeXBlLCBJcGNXcml0ZXIsIHR5cGUgSXBjTXNnIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cEZyYW1lUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci92aWRlby9wcm90b2NvbFwiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHdpdGhSZXJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ0FOQ0VMKSBjdHJsLmFib3J0KG1zZy5yZWFzb24pO1xufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHNldHVwRnJhbWVQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgZm9yIChjb25zdCBvdXQgb2Ygb3B0aW9ucy5vdXRGaWxlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBjdHJsLnNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aFJlcmVuZGVyKGN0cmwuc2lnbmFsLCAoKSA9PlxuICAgICAgICBhY3Rpb24oe1xuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHNpZ25hbDogY3RybC5zaWduYWwsXG4gICAgICAgICAgb25Qcm9ncmVzczogKHApID0+IGlwYy53cml0ZVByb2dyZXNzKHApLFxuICAgICAgICAgIG9uQ29uc29sZTogKGwsIG0pID0+IGlwYy53cml0ZUNvbnNvbGUobCwgbSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZURvbmUocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBjb25zdCBtID0gZXJyb3Iuc3RhY2sgPz8gZXJyb3IubWVzc2FnZSA/PyBTdHJpbmcoZSA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgICBhd2FpdCBpcGMud3JpdGVFcnJvcihtKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdGluZyA9IHRydWU7XG4gICAgICBhcHAuZXhpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19