pup-recorder 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build.ts +9 -10
- package/dist/_tsup-dts-rollup.d.ts +195 -74
- package/dist/app.cjs +5 -5
- package/dist/chunk-YJ7QEMFY.js +4 -0
- package/dist/cli.js +2 -2
- package/dist/iframe_preload.cjs +2 -2
- package/dist/index.d.ts +10 -31
- package/dist/index.js +2 -2
- package/package.json +3 -3
- package/dist/chunk-GDKW7ZIE.js +0 -4
package/dist/chunk-GDKW7ZIE.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import'source-map-support/register.js';import {createRequire}from'module';import {dirname,join}from'path';import {Log}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING}from'node-av/constants';import {spawn}from'child_process';import Oe from'tree-kill';import f from'zod';import Fe from'electron';import {platform}from'os';import {HardwareContext}from'node-av/api';import {EventEmitter}from'events';var fe=Object.create;var D=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var T=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),P=t=>{throw TypeError(t)};var Y=(t,e,r)=>e in t?D(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var Q=t=>[,,,fe(null)],X=["class","method","getter","setter","accessor","field","value","get","set"],C=t=>t!==void 0&&typeof t!="function"?P("Function expected"):t,we=(t,e,r,o,n)=>({kind:X[t],name:e,metadata:o,addInitializer:s=>r._?P("Already initialized"):n.push(C(s||null))}),M=(t,e)=>Y(e,T("metadata"),t[3]),Z=(t,e,r,o)=>{for(var n=0,s=t[e>>1],a=s&&s.length;n<a;n++)s[n].call(r);return o},E=(t,e,r,o,n,s)=>{var i,p,c,v,l=e&7,R=false,d=false,x=2,_=X[l+5],he=t[x]||(t[x]=[]),b=((n=n.prototype),be(n,r));for(var L=o.length-1;L>=0;L--)c=we(l,r,p={},t[3],he),(c.static=R,c.private=d,v=c.access={has:g=>r in g},(v.get=g=>g[r]),l>2),i=(0, o[L])(b[_],c),p._=1,C(i)&&(b[_]=i);return b&&D(n,r,b),n},ee=(t,e,r)=>Y(t,e+"",r);var je=(t,e,r)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&P("Object expected");var o,n;r&&(o=e[T("asyncDispose")]),o===void 0&&(o=e[T("dispose")],r&&(n=o)),typeof o!="function"&&P("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(s){return Promise.reject(s)}}),t.push([r,o,e]);}else r&&t.push([r]);return e},Be=(t,e,r)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(a,i,p,c){return c=Error(p),c.name="SuppressedError",c.error=a,c.suppressed=i,c},n=a=>e=r?new o(a,e,"An error was suppressed during disposal"):(r=true,a),s=a=>{for(;a=t.pop();)try{var i=a[1]&&a[1].call(a[2]);if(a[0])return Promise.resolve(i).then(s,p=>(n(p),s()))}catch(p){n(p);}if(r)throw e};return s()};var re=class{_written=0;_shown=false;_total;_out;_tty;_showCount;constructor(e){this._total=e.total,this._out=e.out,this._tty=!!e.out.isTTY,this._showCount=e.showCount??false;}get total(){return this._total}update(e){this._written=Math.min(this._total,Math.max(0,e)),this.render();}updatePercent(e){this.update(Math.round(e/100*this._total));}clear(){this._tty&&this._shown&&this._out.write("\r\x1B[2K");}redraw(){this.render();}log(e){this.clear(),this._out.write(e+`
|
|
2
|
-
`),this.redraw();}finish(e){this.clear(),this._out.write(e+`
|
|
3
|
-
`),this._shown=false;}render(){if(!this._tty||this._written===0&&!this._shown)return;let e=this._total>0?this._written/this._total:0,r=Math.round(e*40),o="#".repeat(r)+"-".repeat(40-r),n=Math.round(e*100),s=this._showCount?`${this._written}/${this._total} (${n}%)`:`${n}%`;this._out.write(`\r[${o}] ${s}`),this._shown=true;}};function Ke(t){let e=r=>(...o)=>{t.clear(),r(...o),t.redraw();};return {debug:e(console.debug),info:e(console.info),warn:e(console.warn),error:e(console.error)}}function te(t,e,r){try{return e(process.env[t])}catch{return r}}function oe(t){if(typeof t=="number")return t;let e=Number(t);if(Number.isNaN(e))throw new Error(`Value ${t} is not a valid number`);return e}function Qe(t){return typeof t=="string"?t:String(t)}var ke=createRequire(import.meta.url),A=te("PUP_LOG_LEVEL",oe,2),F=dirname(ke.resolve("pup-recorder/package.json")),ne=join(F,"dist","app.cjs"),nr=join(F,"dist","audio_preload.cjs"),sr=join(F,"dist","iframe_preload.cjs");var $="<pup@debug>",U="<pup@info>",H="<pup@warn>",W="<pup@error>",j="<pup@fatal>";function O(t,e){return function(...r){let o=r.map(n=>n instanceof Error?n.stack??String(n):n);return t.call(this,...o)}}var se,ie,ae,le,pe,k;pe=[O],le=[O],ae=[O],ie=[O],se=[O];var y=class{constructor(e=A){this._level=e;Z(k,5,this);ee(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 r=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,s=e.error??console.error,a=this._level;this._impl={debug:a>=3?r:void 0,info:a>=2?o:void 0,warn:a>=1?n:void 0,error:a>=0?s:void 0};}debug(...e){this.impl?.debug?.($,...e);}info(...e){this.impl?.info?.(U,...e);}warn(...e){this.impl?.warn?.(H,...e);}error(...e){this.impl?.error?.(W,...e);}fatal(...e){this.impl?.error?.(j,...e),process.exit(1);}dispatch(e){let r=e.trimEnd();r.startsWith($)?this.debug(r.slice($.length+1)):r.startsWith(U)?this.info(r.slice(U.length+1)):r.startsWith(H)?this.warn(r.slice(H.length+1)):r.startsWith(W)?this.error(r.slice(W.length+1)):this.info(r);}attach(e,r){return new Promise((o,n)=>{this.debug(`${r}.attach`);let s="",a=i=>{let p=i.toString();p.startsWith(j)?s+=p.slice(j.length+1):this.dispatch(p);};e.stderr?.on("data",a),e.stdout?.on("data",a),e.on("error",i=>{s+=i.message,e.kill();}).once("close",(i,p)=>{i||p||s?(s||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${r}.close`,{code:i,signal:p,fatal:s}),n(new Error(s))):(this.debug(`${r}.close`),o());}).on("unhandledRejection",i=>{this.error(`${r}.unhandled`,i);}).on("uncaughtExceptionMonitor",i=>{this.error(`${r}.unhandled`,i);});})}};k=Q(),E(k,1,"debug",pe,y),E(k,1,"info",le,y),E(k,1,"warn",ae,y),E(k,1,"error",ie,y),E(k,1,"fatal",se,y),M(k,y);var u=new y;Log.setCallback((t,e)=>{let r=e.trimEnd();r&&(t<=AV_LOG_ERROR?u.error(r):t<=AV_LOG_WARNING&&u.warn(r));});function mr(t,e){return (...r)=>{try{let o=t(...r);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var B="--pup-priv-args";function yr(){let t=process.argv,e=t.find(o=>o.startsWith(B));if(!e)return u.debug("procargv",t),process.argv;let r=["exec",...t.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),r.push(...JSON.parse(e)),u.debug("pupargs",r),r}function ce(t,e){let r=t.split(" ").filter(i=>i.length),[o,...n]=r;if(!o)throw new Error("empty command");let s=spawn(o,n,{stdio:"inherit",...e}),a=false;return {process:s,wait:u.attach(s,o),get killed(){return a},kill(){if(a)return;a=true;let i=s.pid;i?Oe(i,"SIGKILL"):s.kill("SIGKILL");}}}var Te=1920,Ae=1080,Ie=30,Le=5,Se="out/html.mp4,out/html.webm",_r=f.object({duration:f.number().describe("Duration in seconds"),width:f.number().describe("Video width"),height:f.number().describe("Video height"),fps:f.number().describe("Frames per second"),withAudio:f.boolean().describe("Capture and encode audio"),outFile:f.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:f.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:f.boolean().describe("Render by frame rather than recording"),disableGpu:f.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:f.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:f.boolean().describe("Fall back to dom-ready if warmup load times out")}),ue={width:Te,height:Ae,fps:Ie,duration:Le,outFile:Se,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false};var Me="[HWAccel]";async function Ne(){let t=HardwareContext.auto(),e=t!==null;return t?.dispose(),e}var de=Ne().then(t=>(u.debug(Me,"gpu:",t),t));async function ge(t){let e=["no-sandbox","disable-dev-shm-usage","disable-web-security","disable-site-isolation-trials","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","autoplay-policy=no-user-gesture-required","disable-extensions","force-device-scale-factor=1","force-color-profile=srgb","ignore-gpu-blocklist","use-gl=angle","deterministic-mode","enable-begin-frame-control","disable-new-content-rendering-timeout","run-all-compositor-stages-before-draw","disable-threaded-animation","disable-threaded-scrolling","disable-checker-imaging","disable-image-animation-resync","enable-surface-synchronization","font-render-hinting=none","disable-background-networking","js-flags=--max-old-space-size=512","renderer-process-limit=1","num-raster-threads=2","disable-background-timer-throttling","disable-renderer-backgrounding","disable-backgrounding-occluded-windows","enable-logging=stderr"];A>=3?e.push("log-level=0","v=1"):e.push("log-level=3");let r=["FontationBackend"];if(!(await de&&!t))e.push("use-angle=swiftshader","enable-unsafe-swiftshader");else {e.push("disable-gpu-sandbox","enable-unsafe-webgpu");let n=platform();n==="darwin"?e.push("use-angle=metal"):n==="win32"?e.push("use-angle=d3d11"):(e.push("use-angle=vulkan","disable-vulkan-surface"),r.push("Vulkan"));}return e.push(`enable-features=${r.join(",")}`),e}async function $e(t){return [...await ge(t),"headless=new"]}var Ue="[Electron]";async function me({args:t}){let r=(await $e(t.includes("--disable-gpu"))).map(s=>`--${s}`);r.push(`${B}=${Buffer.from(JSON.stringify(t)).toString("base64")}`);let o=[Fe,...r,ne].join(" ");u.debug(Ue,o);let n={...process.env,RUST_BACKTRACE:"full"};return ce(o,{stdio:["ignore","pipe","pipe","ipc"],env:n})}var I=class extends EventEmitter{constructor(e){super(),e.on("message",r=>{let o=r;switch(o.type){case "console":{this.emit("console",o.level,o.message);break}case "progress":{this.emit("progress",o.value);break}case "done":{this.emit("done",o.payload);break}case "error":{this.emit("error",new Error(o.error));break}}}),e.once("exit",r=>this.emit("close",r));}};var V="[pup]";async function We(t,e){u.debug(V,"runPupApp",t,e);let r=[t,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--out-file",`${e.outFile}`];return e.withAudio&&r.push("--with-audio"),e.useInnerProxy&&r.push("--use-inner-proxy"),e.deterministic&&r.push("--deterministic"),e.disableGpu&&r.push("--disable-gpu"),e.disableHwCodec&&r.push("--disable-hw-codec"),e.windowTolerant&&r.push("--window-tolerant"),me({args:r})}var w=ue;async function Qr(t,e){u.debug(V,"pup",t,e);let{signal:r}=e;r?.throwIfAborted();let o=e.outFile??w.outFile,n={width:e.width??w.width,height:e.height??w.height,fps:e.fps??w.fps,duration:e.duration??w.duration,withAudio:e.withAudio??w.withAudio,useInnerProxy:e.useInnerProxy??w.useInnerProxy,deterministic:e.deterministic??w.deterministic,disableGpu:e.disableGpu??w.disableGpu,disableHwCodec:e.disableHwCodec??w.disableHwCodec,windowTolerant:e.windowTolerant??w.windowTolerant,outFile:o},s=performance.now(),a=0,i=v=>{a=v,e.onProgress?.(v);},p=await We(t,n),c=()=>{p.process.send?.({type:"cancel",reason:String(r?.reason??"abort")}),setTimeout(()=>p.kill(),5e3);};r?.addEventListener("abort",c,{once:true});try{let v=new Promise((R,d)=>{new I(p.process).on("close",x=>{let _=JSON.stringify({source:t,progress:a,code:x,killed:p.killed});d(new Error(`crashed: ${_}`));}).on("progress",i).on("console",(x,_)=>e.onConsole?.(x,_)).on("done",R).on("error",d);});i(0);let[l]=await Promise.all([v,p.wait]);return i(100),u.debug(V,`done ${o} in ${Math.round(performance.now()-s)}ms`),{...l,options:n}}catch(v){throw p.kill(),r?.throwIfAborted(),v}finally{r?.removeEventListener("abort",c);}}export{je as a,Be as b,re as c,Ke as d,te as e,oe as f,Qe as g,A as h,F as i,ne as j,nr as k,sr as l,y as m,u as n,mr as o,B as p,yr as q,ce as r,Te as s,Ae as t,Ie as u,Le as v,Se as w,_r as x,ue as y,Qr as z};//# sourceMappingURL=chunk-GDKW7ZIE.js.map
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2NsaV91aS50cyIsIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9iYXNlL3Byb2Nlc3MudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2NoZW1hLnRzIiwiLi4vc3JjL2Jhc2UvaHdhY2NlbC50cyIsIi4uL3NyYy9iYXNlL2Nocm9taXVtLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2VsZWN0cm9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9wdXAudHMiXSwibmFtZXMiOlsiUHJvZ3Jlc3NCYXIiLCJvcHRzIiwid3JpdHRlbiIsInBjdCIsImxpbmUiLCJyYXRpbyIsImZpbGxlZCIsImJhciIsInN1ZmZpeCIsImJhckxvZ2dlciIsIndyYXAiLCJmbiIsImFyZ3MiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInBhcnNlU3RyaW5nIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJwdXBMb2dMZXZlbCIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwicHVwQXBwIiwiam9pbiIsInB1cEF1ZGlvUHJlbG9hZCIsInB1cElmcmFtZVByZWxvYWQiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIm5vZXJyIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsImV4ZWMiLCJjbWQiLCJvcHRpb25zIiwicGFydHMiLCJzIiwiY29tbWFuZCIsInNwYXduIiwia2lsbGVkIiwicGlkIiwidHJlZUtpbGwiLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX09VVF9GSUxFIiwiUmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwiVEFHIiwiZGV0ZWN0R1BVRHJpdmVyIiwiaHciLCJIYXJkd2FyZUNvbnRleHQiLCJyZXN1bHQiLCJjYW5JVXNlR1BVIiwiY2hyb21pdW1PcHRpb25zIiwiZGlzYWJsZUdwdSIsImZlYXR1cmVzIiwicGxhdCIsInBsYXRmb3JtIiwiZWxlY3Ryb25PcHRzIiwicnVuRWxlY3Ryb25BcHAiLCJlbGVjdHJvbkFyZ3MiLCJhIiwiZWxlY3Ryb24iLCJlbnYiLCJJcGNSZWFkZXIiLCJFdmVudEVtaXR0ZXIiLCJjaGlsZCIsInJhdyIsImMiLCJydW5QdXBBcHAiLCJzb3VyY2UiLCJyZW5kZXIiLCJkIiwicHVwIiwib3V0RmlsZSIsInJlbmRlck9wdHMiLCJ0MCIsInByb2dyZXNzIiwidGljayIsInAiLCJoYW5kbGUiLCJvbkFib3J0IiwibCIsIm0iLCJzdW1tYXJ5IiwiZSJdLCJtYXBwaW5ncyI6IitpRUFZTyxJQUFNQSxFQUFBQSxDQUFO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RSxDQUFBQSxDQUFPLE1BQU8sQ0FBQyxFQUM1RTFFLENBQUFBLENBQU8sSUFBSSxLQUFBLENBQU0sQ0FBQSxTQUFBLEVBQVlwQixDQUFHLENBQUEsQ0FBRSxDQUFDLEVBQ3JDLENBQUMsQ0FBQSxDQUNBLEVBQUEsQ0FBRyxVQUFBLENBQVk0RixDQUFJLEVBQ25CLEVBQUEsQ0FBRyxTQUFBLENBQVcsQ0FBQ0ksQ0FBQUEsQ0FBR0MsQ0FBQUEsR0FBTXBELENBQUFBLENBQVEsWUFBWW1ELENBQUFBLENBQUdDLENBQUMsQ0FBQyxDQUFBLENBQ2pELEVBQUEsQ0FBRyxNQUFBLENBQVE5RSxDQUFPLENBQUEsQ0FDbEIsRUFBQSxDQUFHLE9BQUEsQ0FBU0MsQ0FBTSxFQUN2QixDQUFDLEVBQ0R3RSxDQUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNOLEdBQU0sQ0FBQ00sQ0FBTyxFQUFJLE1BQU0sT0FBQSxDQUFRLElBQUksQ0FBQ2pDLENBQUFBLENBQVE2QixFQUFPLElBQUksQ0FBQyxDQUFBLENBQ3pELE9BQUFGLENBQUFBLENBQUssR0FBRyxFQUNSN0QsQ0FBQUEsQ0FBTyxLQUFBLENBQU04QixDQUFBQSxDQUFLLENBQUEsS0FBQSxFQUFRMkIsQ0FBTyxDQUFBLElBQUEsRUFBTyxLQUFLLEtBQUEsQ0FBTSxXQUFBLENBQVksR0FBQSxFQUFJLENBQUlFLENBQUUsQ0FBQyxJQUFJLENBQUEsQ0FDdkUsQ0FBRSxHQUFHUSxDQUFBQSxDQUFTLE9BQUEsQ0FBU1QsQ0FBVyxDQUMzQyxDQUFBLE1BQVNVLENBQUFBLENBQUcsQ0FDVixNQUFBTCxDQUFBQSxDQUFPLElBQUEsR0FDUHBFLENBQUFBLEVBQVEsY0FBQSxFQUFlLENBQ2pCeUUsQ0FDUixDQUFBLE9BQUUsQ0FDQXpFLEdBQVEsbUJBQUEsQ0FBb0IsT0FBQSxDQUFTcUUsQ0FBTyxFQUM5QyxDQUNGIiwiZmlsZSI6ImNodW5rLUdES1c3WklFLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMjYuXG5cbmltcG9ydCB0eXBlIHsgTG9nZ2VyTGlrZSB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgQkFSX1dJRFRIID0gNDA7XG5cbmludGVyZmFjZSBCYXJPcHRpb25zIHtcbiAgdG90YWw6IG51bWJlcjtcbiAgb3V0OiBOb2RlSlMuV3JpdGVTdHJlYW07XG4gIHNob3dDb3VudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0JhciB7XG4gIHByaXZhdGUgX3dyaXR0ZW4gPSAwO1xuICBwcml2YXRlIF9zaG93biA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b3RhbDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vdXQ6IE5vZGVKUy5Xcml0ZVN0cmVhbTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHR5OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaG93Q291bnQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Iob3B0czogQmFyT3B0aW9ucykge1xuICAgIHRoaXMuX3RvdGFsID0gb3B0cy50b3RhbDtcbiAgICB0aGlzLl9vdXQgPSBvcHRzLm91dDtcbiAgICB0aGlzLl90dHkgPSAhIW9wdHMub3V0LmlzVFRZO1xuICAgIHRoaXMuX3Nob3dDb3VudCA9IG9wdHMuc2hvd0NvdW50ID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHRvdGFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsO1xuICB9XG5cbiAgdXBkYXRlKHdyaXR0ZW46IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3dyaXR0ZW4gPSBNYXRoLm1pbih0aGlzLl90b3RhbCwgTWF0aC5tYXgoMCwgd3JpdHRlbikpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cGRhdGVQZXJjZW50KHBjdDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGUoTWF0aC5yb3VuZCgocGN0IC8gMTAwKSAqIHRoaXMuX3RvdGFsKSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdHR5ICYmIHRoaXMuX3Nob3duKSB0aGlzLl9vdXQud3JpdGUoXCJcXHJcXHgxYlsyS1wiKTtcbiAgfVxuXG4gIHJlZHJhdygpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbG9nKGxpbmU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLl9vdXQud3JpdGUobGluZSArIFwiXFxuXCIpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cblxuICBmaW5pc2gobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuX291dC53cml0ZShsaW5lICsgXCJcXG5cIik7XG4gICAgdGhpcy5fc2hvd24gPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdHR5KSByZXR1cm47XG4gICAgaWYgKHRoaXMuX3dyaXR0ZW4gPT09IDAgJiYgIXRoaXMuX3Nob3duKSByZXR1cm47XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLl90b3RhbCA+IDAgPyB0aGlzLl93cml0dGVuIC8gdGhpcy5fdG90YWwgOiAwO1xuICAgIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQocmF0aW8gKiBCQVJfV0lEVEgpO1xuICAgIGNvbnN0IGJhciA9IFwiI1wiLnJlcGVhdChmaWxsZWQpICsgXCItXCIucmVwZWF0KEJBUl9XSURUSCAtIGZpbGxlZCk7XG4gICAgY29uc3QgcGN0ID0gTWF0aC5yb3VuZChyYXRpbyAqIDEwMCk7XG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5fc2hvd0NvdW50ID8gYCR7dGhpcy5fd3JpdHRlbn0vJHt0aGlzLl90b3RhbH0gKCR7cGN0fSUpYCA6IGAke3BjdH0lYDtcbiAgICB0aGlzLl9vdXQud3JpdGUoYFxcclske2Jhcn1dICR7c3VmZml4fWApO1xuICAgIHRoaXMuX3Nob3duID0gdHJ1ZTtcbiAgfVxufVxuXG4vLyBBcm91bmQgZWFjaCBjb25zb2xlLiogY2FsbCwgY2xlYXIgdGhlIGJhciBsaW5lIHRoZW4gcmVkcmF3IOKAlCBrZWVwcyBuYXRpdmUgY29uc29sZSBjb2xvcmluZyBpbnRhY3QuXG5leHBvcnQgZnVuY3Rpb24gYmFyTG9nZ2VyKGJhcjogUHJvZ3Jlc3NCYXIpOiBMb2dnZXJMaWtlIHtcbiAgY29uc3Qgd3JhcCA9XG4gICAgPFQgZXh0ZW5kcyAoLi4uYTogdW5rbm93bltdKSA9PiB2b2lkPihmbjogVCkgPT5cbiAgICAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBiYXIuY2xlYXIoKTtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgYmFyLnJlZHJhdygpO1xuICAgIH07XG4gIHJldHVybiB7XG4gICAgZGVidWc6IHdyYXAoY29uc29sZS5kZWJ1ZyksXG4gICAgaW5mbzogd3JhcChjb25zb2xlLmluZm8pLFxuICAgIHdhcm46IHdyYXAoY29uc29sZS53YXJuKSxcbiAgICBlcnJvcjogd3JhcChjb25zb2xlLmVycm9yKSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSByZXR1cm4geDtcbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBBdWRpb1ByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImF1ZGlvX3ByZWxvYWQuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cElmcmFtZVByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImlmcmFtZV9wcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8Rm4gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSwgRD4oXG4gIGZuOiBGbixcbiAgZGVmYXVsdFZhbHVlOiBELFxuKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rm4+KSA9PiBSZXR1cm5UeXBlPEZuPiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSByZXR1cm47XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIGVsc2UgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0L2h0bWwubXA0LG91dC9odG1sLndlYm1cIjtcblxuZXhwb3J0IGNvbnN0IFJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29tbWEtc2VwYXJhdGVkIG91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0hXQWNjZWxdXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdEdQVURyaXZlcigpIHtcbiAgY29uc3QgaHcgPSBIYXJkd2FyZUNvbnRleHQuYXV0bygpO1xuICBjb25zdCByZXN1bHQgPSBodyAhPT0gbnVsbDtcbiAgaHc/LmRpc3Bvc2UoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGNhbklVc2VHUFUgPSBkZXRlY3RHUFVEcml2ZXIoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHU6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY2FuSVVzZUdQVSB9IGZyb20gXCIuL2h3YWNjZWxcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNocm9taXVtT3B0aW9ucyhkaXNhYmxlR3B1OiBib29sZWFuKSB7XG4gIGNvbnN0IG9wdHMgPSBbXG4gICAgLy8g5a655Zmo5rKZ566xXG4gICAgXCJuby1zYW5kYm94XCIsXG4gICAgXCJkaXNhYmxlLWRldi1zaG0tdXNhZ2VcIixcbiAgICAvLyDot6jln58v5a6J5YWoXG4gICAgXCJkaXNhYmxlLXdlYi1zZWN1cml0eVwiLFxuICAgIFwiZGlzYWJsZS1zaXRlLWlzb2xhdGlvbi10cmlhbHNcIixcbiAgICBcImlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnNcIixcbiAgICAvLyDlvZXliLbooYzkuLpcbiAgICBcImRpc2FibGUtYmxpbmstZmVhdHVyZXM9QXV0b21hdGlvbkNvbnRyb2xsZWRcIixcbiAgICBcIm11dGUtYXVkaW9cIixcbiAgICBcImF1dG9wbGF5LXBvbGljeT1uby11c2VyLWdlc3R1cmUtcmVxdWlyZWRcIixcbiAgICBcImRpc2FibGUtZXh0ZW5zaW9uc1wiLFxuICAgIC8vIOa4suafk1xuICAgIFwiZm9yY2UtZGV2aWNlLXNjYWxlLWZhY3Rvcj0xXCIsXG4gICAgXCJmb3JjZS1jb2xvci1wcm9maWxlPXNyZ2JcIixcbiAgICBcImlnbm9yZS1ncHUtYmxvY2tsaXN0XCIsXG4gICAgXCJ1c2UtZ2w9YW5nbGVcIixcbiAgICBcImRldGVybWluaXN0aWMtbW9kZVwiLFxuICAgIFwiZW5hYmxlLWJlZ2luLWZyYW1lLWNvbnRyb2xcIixcbiAgICBcImRpc2FibGUtbmV3LWNvbnRlbnQtcmVuZGVyaW5nLXRpbWVvdXRcIixcbiAgICBcInJ1bi1hbGwtY29tcG9zaXRvci1zdGFnZXMtYmVmb3JlLWRyYXdcIixcbiAgICBcImRpc2FibGUtdGhyZWFkZWQtYW5pbWF0aW9uXCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLXNjcm9sbGluZ1wiLFxuICAgIFwiZGlzYWJsZS1jaGVja2VyLWltYWdpbmdcIixcbiAgICBcImRpc2FibGUtaW1hZ2UtYW5pbWF0aW9uLXJlc3luY1wiLFxuICAgIFwiZW5hYmxlLXN1cmZhY2Utc3luY2hyb25pemF0aW9uXCIsXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3B1cHBldGVlci9wdXBwZXRlZXIvaXNzdWVzLzI0MTBcbiAgICBcImZvbnQtcmVuZGVyLWhpbnRpbmc9bm9uZVwiLFxuICAgIC8vIOi1hOa6kOaOp+WItlxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLW5ldHdvcmtpbmdcIixcbiAgICBcImpzLWZsYWdzPS0tbWF4LW9sZC1zcGFjZS1zaXplPTUxMlwiLFxuICAgIFwicmVuZGVyZXItcHJvY2Vzcy1saW1pdD0xXCIsXG4gICAgXCJudW0tcmFzdGVyLXRocmVhZHM9MlwiLFxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLXRpbWVyLXRocm90dGxpbmdcIixcbiAgICBcImRpc2FibGUtcmVuZGVyZXItYmFja2dyb3VuZGluZ1wiLFxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kaW5nLW9jY2x1ZGVkLXdpbmRvd3NcIixcbiAgICAvLyDml6Xlv5fov73ouKpcbiAgICBcImVuYWJsZS1sb2dnaW5nPXN0ZGVyclwiLFxuICBdO1xuXG4gIGlmIChwdXBMb2dMZXZlbCA+PSAzKSB7XG4gICAgb3B0cy5wdXNoKFwibG9nLWxldmVsPTBcIiwgXCJ2PTFcIik7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5wdXNoKFwibG9nLWxldmVsPTNcIik7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IFtcIkZvbnRhdGlvbkJhY2tlbmRcIl07XG4gIGNvbnN0IGVuYWJsZUdwdSA9IChhd2FpdCBjYW5JVXNlR1BVKSAmJiAhZGlzYWJsZUdwdTtcbiAgaWYgKCFlbmFibGVHcHUpIHtcbiAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9c3dpZnRzaGFkZXJcIiwgXCJlbmFibGUtdW5zYWZlLXN3aWZ0c2hhZGVyXCIpO1xuICB9IGVsc2Uge1xuICAgIG9wdHMucHVzaChcImRpc2FibGUtZ3B1LXNhbmRib3hcIiwgXCJlbmFibGUtdW5zYWZlLXdlYmdwdVwiKTtcbiAgICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgICBpZiAocGxhdCA9PT0gXCJkYXJ3aW5cIikge1xuICAgICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPW1ldGFsXCIpO1xuICAgIH0gZWxzZSBpZiAocGxhdCA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9ZDNkMTFcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT12dWxrYW5cIiwgXCJkaXNhYmxlLXZ1bGthbi1zdXJmYWNlXCIpO1xuICAgICAgZmVhdHVyZXMucHVzaChcIlZ1bGthblwiKTtcbiAgICB9XG4gIH1cblxuICBvcHRzLnB1c2goYGVuYWJsZS1mZWF0dXJlcz0ke2ZlYXR1cmVzLmpvaW4oXCIsXCIpfWApO1xuICByZXR1cm4gb3B0cztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmltcG9ydCBlbGVjdHJvbiBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGNocm9taXVtT3B0aW9ucyB9IGZyb20gXCIuLi9iYXNlL2Nocm9taXVtXCI7XG5pbXBvcnQgeyBwdXBBcHAgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGV4ZWMsIFBVUF9BUkdTX0tFWSB9IGZyb20gXCIuLi9iYXNlL3Byb2Nlc3NcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVsZWN0cm9uT3B0cyhkaXNhYmxlR3B1OiBib29sZWFuKSB7XG4gIHJldHVybiBbLi4uKGF3YWl0IGNocm9taXVtT3B0aW9ucyhkaXNhYmxlR3B1KSksIFwiaGVhZGxlc3M9bmV3XCJdO1xufVxuXG5jb25zdCBUQUcgPSBcIltFbGVjdHJvbl1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBSdW5FbGVjdHJvbkFwcE9wdGlvbnMge1xuICBhcmdzOiB1bmtub3duW107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5FbGVjdHJvbkFwcCh7IGFyZ3MgfTogUnVuRWxlY3Ryb25BcHBPcHRpb25zKSB7XG4gIGNvbnN0IG9wdHMgPSBhd2FpdCBlbGVjdHJvbk9wdHMoYXJncy5pbmNsdWRlcyhcIi0tZGlzYWJsZS1ncHVcIikpO1xuICBjb25zdCBlbGVjdHJvbkFyZ3MgPSBvcHRzLm1hcCgoYSkgPT4gYC0tJHthfWApO1xuICBlbGVjdHJvbkFyZ3MucHVzaChgJHtQVVBfQVJHU19LRVl9PSR7QnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYXJncykpLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWApO1xuICBjb25zdCBjbWQgPSBbZWxlY3Ryb24sIC4uLmVsZWN0cm9uQXJncywgcHVwQXBwXS5qb2luKFwiIFwiKTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgY21kKTtcblxuICBjb25zdCBlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0geyAuLi5wcm9jZXNzLmVudiwgUlVTVF9CQUNLVFJBQ0U6IFwiZnVsbFwiIH07XG4gIHJldHVybiBleGVjKGNtZCwgeyBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIiwgXCJpcGNcIl0sIGVudiB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIjtcblxuZXhwb3J0IGNvbnN0IGVudW0gSXBjTXNnVHlwZSB7XG4gIC8vIGNoaWxkIOKGkiBwYXJlbnRcbiAgQ09OU09MRSA9IFwiY29uc29sZVwiLFxuICBQUk9HUkVTUyA9IFwicHJvZ3Jlc3NcIixcbiAgRE9ORSA9IFwiZG9uZVwiLFxuICBFUlJPUiA9IFwiZXJyb3JcIixcbiAgLy8gcGFyZW50IOKGkiBjaGlsZFxuICBDQU5DRUwgPSBcImNhbmNlbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNPTlNPTEU7XG4gIGxldmVsOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNBTkNFTDtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuUFJPR1JFU1M7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9uZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRE9ORTtcbiAgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkVSUk9SO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJcGNNc2cgPSBDb25zb2xlTXNnIHwgUHJvZ3Jlc3NNc2cgfCBEb25lTXNnIHwgRXJyb3JNc2cgfCBDYW5jZWxNc2c7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRXZlbnRzIHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgY29uc29sZTogW2xldmVsOiBzdHJpbmcsIG1zZzogc3RyaW5nXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW2NvZGU6IG51bWJlciB8IG51bGxdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVDb25zb2xlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuQ09OU09MRSwgbGV2ZWwsIG1lc3NhZ2UgfSk7XG4gIH1cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLlBST0dSRVNTLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkVSUk9SLCBlcnJvciB9KTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkRPTkUsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmQobXNnOiBJcGNNc2cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghcHJvY2Vzcy5zZW5kKSByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgcHJvY2Vzcy5zZW5kKG1zZywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXBjUmVhZGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyPElwY0V2ZW50cz4ge1xuICBjb25zdHJ1Y3RvcihjaGlsZDogQ2hpbGRQcm9jZXNzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjaGlsZC5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICAgICAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkNPTlNPTEU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJjb25zb2xlXCIsIG1zZy5sZXZlbCwgbXNnLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5QUk9HUkVTUzoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIG1zZy52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkRPTkU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJkb25lXCIsIG1zZy5wYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRVJST1I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IobXNnLmVycm9yKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjaGlsZC5vbmNlKFwiZXhpdFwiLCAoYykgPT4gdGhpcy5lbWl0KFwiY2xvc2VcIiwgYykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHJ1bkVsZWN0cm9uQXBwIH0gZnJvbSBcIi4vcmVuZGVyZXIvZWxlY3Ryb25cIjtcbmltcG9ydCB7IElwY01zZ1R5cGUsIElwY1JlYWRlciwgdHlwZSBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHtcbiAgZGVmYXVsdFJlbmRlck9wdGlvbnMsXG4gIHR5cGUgQ29uc29sZUNhbGxiYWNrLFxuICB0eXBlIFByb2dyZXNzQ2FsbGJhY2ssXG4gIHR5cGUgUmVuZGVyT3B0aW9ucyxcbiAgdHlwZSBSZW5kZXJSZXN1bHQsXG59IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltwdXBdXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVwT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8UmVuZGVyT3B0aW9ucz4ge1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgb25Qcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZT86IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdXBSZXN1bHQgZXh0ZW5kcyBSZW5kZXJSZXN1bHQge31cblxuYXN5bmMgZnVuY3Rpb24gcnVuUHVwQXBwKHNvdXJjZTogc3RyaW5nLCByZW5kZXI6IFJlbmRlck9wdGlvbnMpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYHJ1blB1cEFwcGAsIHNvdXJjZSwgcmVuZGVyKTtcblxuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtcbiAgICBzb3VyY2UsXG4gICAgYC0td2lkdGhgLFxuICAgIGAke3JlbmRlci53aWR0aH1gLFxuICAgIGAtLWhlaWdodGAsXG4gICAgYCR7cmVuZGVyLmhlaWdodH1gLFxuICAgIGAtLWZwc2AsXG4gICAgYCR7cmVuZGVyLmZwc31gLFxuICAgIGAtLWR1cmF0aW9uYCxcbiAgICBgJHtyZW5kZXIuZHVyYXRpb259YCxcbiAgICBgLS1vdXQtZmlsZWAsXG4gICAgYCR7cmVuZGVyLm91dEZpbGV9YCxcbiAgXTtcbiAgaWYgKHJlbmRlci53aXRoQXVkaW8pIGFyZ3MucHVzaChgLS13aXRoLWF1ZGlvYCk7XG4gIGlmIChyZW5kZXIudXNlSW5uZXJQcm94eSkgYXJncy5wdXNoKGAtLXVzZS1pbm5lci1wcm94eWApO1xuICBpZiAocmVuZGVyLmRldGVybWluaXN0aWMpIGFyZ3MucHVzaChgLS1kZXRlcm1pbmlzdGljYCk7XG4gIGlmIChyZW5kZXIuZGlzYWJsZUdwdSkgYXJncy5wdXNoKGAtLWRpc2FibGUtZ3B1YCk7XG4gIGlmIChyZW5kZXIuZGlzYWJsZUh3Q29kZWMpIGFyZ3MucHVzaChgLS1kaXNhYmxlLWh3LWNvZGVjYCk7XG4gIGlmIChyZW5kZXIud2luZG93VG9sZXJhbnQpIGFyZ3MucHVzaChgLS13aW5kb3ctdG9sZXJhbnRgKTtcblxuICByZXR1cm4gcnVuRWxlY3Ryb25BcHAoeyBhcmdzIH0pO1xufVxuXG5jb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnRpYWw8UHVwT3B0aW9ucz4pOiBQcm9taXNlPFB1cFJlc3VsdD4ge1xuICBsb2dnZXIuZGVidWcoVEFHLCBgcHVwYCwgc291cmNlLCBvcHRpb25zKTtcblxuICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gIGNvbnN0IG91dEZpbGUgPSBvcHRpb25zLm91dEZpbGUgPz8gZC5vdXRGaWxlO1xuICBjb25zdCByZW5kZXJPcHRzOiBSZW5kZXJPcHRpb25zID0ge1xuICAgIHdpZHRoOiBvcHRpb25zLndpZHRoID8/IGQud2lkdGgsXG4gICAgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCA/PyBkLmhlaWdodCxcbiAgICBmcHM6IG9wdGlvbnMuZnBzID8/IGQuZnBzLFxuICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uID8/IGQuZHVyYXRpb24sXG4gICAgd2l0aEF1ZGlvOiBvcHRpb25zLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICB1c2VJbm5lclByb3h5OiBvcHRpb25zLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgIGRldGVybWluaXN0aWM6IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgZGlzYWJsZUdwdTogb3B0aW9ucy5kaXNhYmxlR3B1ID8/IGQuZGlzYWJsZUdwdSxcbiAgICBkaXNhYmxlSHdDb2RlYzogb3B0aW9ucy5kaXNhYmxlSHdDb2RlYyA/PyBkLmRpc2FibGVId0NvZGVjLFxuICAgIHdpbmRvd1RvbGVyYW50OiBvcHRpb25zLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgb3V0RmlsZSxcbiAgfTtcblxuICBjb25zdCB0MCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBjb25zdCB0aWNrID0gKHA6IG51bWJlcikgPT4ge1xuICAgIHByb2dyZXNzID0gcDtcbiAgICBvcHRpb25zLm9uUHJvZ3Jlc3M/LihwKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGUgPSBhd2FpdCBydW5QdXBBcHAoc291cmNlLCByZW5kZXJPcHRzKTtcblxuICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgIGhhbmRsZS5wcm9jZXNzLnNlbmQ/Lih7IHR5cGU6IElwY01zZ1R5cGUuQ0FOQ0VMLCByZWFzb246IFN0cmluZyhzaWduYWw/LnJlYXNvbiA/PyBcImFib3J0XCIpIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gaGFuZGxlLmtpbGwoKSwgNV8wMDApO1xuICB9O1xuICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbmV3IElwY1JlYWRlcihoYW5kbGUucHJvY2VzcylcbiAgICAgICAgLm9uKFwiY2xvc2VcIiwgKGNvZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgcHJvZ3Jlc3MsIGNvZGUsIGtpbGxlZDogaGFuZGxlLmtpbGxlZCB9KTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBjcmFzaGVkOiAke21zZ31gKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInByb2dyZXNzXCIsIHRpY2spXG4gICAgICAgIC5vbihcImNvbnNvbGVcIiwgKGwsIG0pID0+IG9wdGlvbnMub25Db25zb2xlPy4obCwgbSkpXG4gICAgICAgIC5vbihcImRvbmVcIiwgcmVzb2x2ZSlcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbiAgICB0aWNrKDApO1xuICAgIGNvbnN0IFtzdW1tYXJ5XSA9IGF3YWl0IFByb21pc2UuYWxsKFtyZXN1bHQsIGhhbmRsZS53YWl0XSk7XG4gICAgdGljaygxMDApO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBkb25lICR7b3V0RmlsZX0gaW4gJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdDApfW1zYCk7XG4gICAgcmV0dXJuIHsgLi4uc3VtbWFyeSwgb3B0aW9uczogcmVuZGVyT3B0cyB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlLmtpbGwoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgdGhyb3cgZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgfVxufVxuIl19
|