pup-recorder 0.6.2 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +0,0 @@
1
- import'source-map-support/register.js';import {Log}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING}from'node-av/constants';import {createRequire}from'module';import {dirname,join}from'path';import c from'zod';import {existsSync,rmSync}from'fs';import {mkdtemp}from'fs/promises';import {tmpdir,platform}from'os';import {HardwareContext}from'node-av/api';import {spawn}from'child_process';import je from'tree-kill';import {fileURLToPath}from'url';import {EventEmitter}from'events';var ke=Object.create;var $=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var I=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),v=t=>{throw TypeError(t)};var Y=(t,e,r)=>e in t?$(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var Q=t=>[,,,ke(null)],X=["class","method","getter","setter","accessor","field","value","get","set"],A=t=>t!==void 0&&typeof t!="function"?v("Function expected"):t,Pe=(t,e,r,o,n)=>({kind:X[t],name:e,metadata:o,addInitializer:s=>r._?v("Already initialized"):n.push(A(s||null))}),G=(t,e)=>Y(e,I("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},C=(t,e,r,o,n,s)=>{var i,p,d,k,l=e&7,E=false,b=false,T=2,P=X[l+5],xe=t[T]||(t[T]=[]),w=((n=n.prototype),Te(n,r));for(var D=o.length-1;D>=0;D--)d=Pe(l,r,p={},t[3],xe),(d.static=E,d.private=b,k=d.access={has:f=>r in f},(k.get=f=>f[r]),l>2),i=(0, o[D])(w[P],d),p._=1,A(i)&&(w[P]=i);return w&&$(n,r,w),n},ee=(t,e,r)=>Y(t,e+"",r);var re=(t,e,r)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&v("Object expected");var o,n;o===void 0&&(o=e[I("dispose")],r),typeof o!="function"&&v("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(s){return Promise.reject(s)}}),t.push([r,o,e]);}return e},te=(t,e,r)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(a,i,p,d){return d=Error(p),d.name="SuppressedError",d.error=a,d.suppressed=i,d},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 oe=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 rr(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 ne(t,e,r){try{return e(process.env[t])}catch{return r}}function se(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 ir(t){return typeof t=="string"?t:String(t)}function ar(t){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(r=>t(r.trim()))}var Re=createRequire(import.meta.url),O=ne("PUP_LOG_LEVEL",se,2),ae=dirname(Re.resolve("pup-recorder/package.json")),le=join(ae,"dist","app.cjs");join(ae,"dist","runtime","preload.cjs");var N="<pup@debug>",U="<pup@info>",F="<pup@warn>",H="<pup@error>",j="<pup@fatal>";function R(t,e){return function(...r){let o=r.map(n=>n instanceof Error?n.stack??String(n):n);return t.call(this,...o)}}var pe,ce,ue,de,me,x;me=[R],de=[R],ue=[R],ce=[R],pe=[R];var y=class{constructor(e=O){this._level=e;Z(x,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?.(N,...e);}info(...e){this.impl?.info?.(U,...e);}warn(...e){this.impl?.warn?.(F,...e);}error(...e){this.impl?.error?.(H,...e);}fatal(...e){this.impl?.error?.(j,...e),process.exit(1);}dispatch(e){let r=e.trimEnd();r.startsWith(N)?this.debug(r.slice(N.length+1)):r.startsWith(U)?this.info(r.slice(U.length+1)):r.startsWith(F)?this.warn(r.slice(F.length+1)):r.startsWith(H)?this.error(r.slice(H.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);});})}};x=Q(),C(x,1,"debug",me,y),C(x,1,"info",de,y),C(x,1,"warn",ue,y),C(x,1,"error",ce,y),C(x,1,"fatal",pe,y),G(x,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 Tr(t,e){return (...r)=>{try{let o=t(...r);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Le=1920,De=1080,Me=30,$e=5,Ge=10,We=["out/html.mp4","out/html.webm"],Er=c.object({duration:c.number().describe("Duration in seconds"),width:c.number().describe("Video width"),height:c.number().describe("Video height"),fps:c.number().describe("Frames per second"),withAudio:c.boolean().describe("Capture and encode audio"),outFiles:c.array(c.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:c.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:c.boolean().describe("Render by frame rather than recording"),disableGpu:c.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:c.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),disableWebSecurity:c.boolean().describe("Drop the same-origin wall; required to record a local file"),windowTolerant:c.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:c.number().describe("Window load timeout in seconds"),screenshots:c.array(c.number()).describe("Second marks to dump frame bitmaps as PNG")}),he={width:Le,height:De,fps:Me,duration:$e,outFiles:We,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,windowTolerant:false,windowTimeout:Ge,screenshots:[]};var S=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};var Ue="[HWAccel]",ge=new S(()=>{var r=[];try{let t=re(r,HardwareContext.auto());let e=t!==null;u.debug(Ue,"gpu:",e);return e}catch(o){var n=o,s=true;}finally{te(r,n,s);}});async function fe(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","deny-permission-prompts","use-mock-keychain","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"];O>=3?e.push("log-level=0","v=1"):e.push("log-level=3");let r=["FontationBackend"];if(!(!t&&ge.value))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}var V="--pup-priv-args";function zr(){let t=process.argv,e=t.find(o=>o.startsWith(V));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 be(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?je(i,"SIGKILL"):s.kill("SIGKILL");}}}async function Ke(t){return [...await fe(t),"headless=new"]}var we="[Electron]";async function ye({args:t}){let{default:e}=await import('electron'),r=await Ke(t.includes("--disable-gpu")),o=await mkdtemp(join(tmpdir(),"pup-profile-")),n=r.map(p=>`--${p}`);n.push(`--user-data-dir=${o}`),n.push(`${V}=${Buffer.from(JSON.stringify(t)).toString("base64")}`);let s=[e,...n,le].join(" ");u.debug(we,s);let a={...process.env,RUST_BACKTRACE:"full"},i=be(s,{stdio:["ignore","pipe","pipe","ipc"],env:a});return i.process.once("exit",()=>{try{rmSync(o,{recursive:!0,force:!0});}catch(p){u.warn(we,"profile cleanup failed:",p);}}),i}var B=["file:","http:","https:","data:"],Qe=/^(file:|https?:|data:)/;function ve(t){if(!Qe.test(t)){let e=`${t.split(":")[0]}:`,r=B.includes(e)?`unsupported protocol: ${e}, expected ${B.join(", ")}`:`invalid source format, expected ${B.join(", ")}`;throw new Error(r)}if(t.startsWith("file:")&&!existsSync(fileURLToPath(t)))throw new Error(`source file not found: ${t}`)}var L=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 z="[pup]";async function Ze(t,e){u.debug(z,"runPupApp",t,e);let r=[t,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--window-timeout",`${e.windowTimeout}`,"--out-file",e.outFiles.join(",")];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.disableWebSecurity&&r.push("--disable-web-security"),e.windowTolerant&&r.push("--window-tolerant"),e.screenshots.length>0&&r.push("--screenshots",e.screenshots.join(",")),ye({args:r})}var g=he;async function wt(t,e){u.debug(z,"pup",t,e);let{signal:r}=e;r?.throwIfAborted(),ve(t);let o=e.outFiles??g.outFiles,n={width:e.width??g.width,height:e.height??g.height,fps:e.fps??g.fps,duration:e.duration??g.duration,withAudio:e.withAudio??g.withAudio,useInnerProxy:e.useInnerProxy??g.useInnerProxy,deterministic:e.deterministic??g.deterministic,disableGpu:e.disableGpu??g.disableGpu,disableHwCodec:e.disableHwCodec??g.disableHwCodec,disableWebSecurity:e.disableWebSecurity??g.disableWebSecurity,windowTolerant:e.windowTolerant??g.windowTolerant,windowTimeout:e.windowTimeout??g.windowTimeout,screenshots:e.screenshots??g.screenshots,outFiles:o},s=performance.now(),a=0,i=l=>{a=l,e.onProgress?.(l);},p=await Ze(t,n),d,k=()=>{p.process.send?.({type:"cancel",reason:String(r?.reason??"abort")}),d=setTimeout(()=>p.kill(),5e3);};r?.addEventListener("abort",k,{once:true});try{let l=new Promise((b,T)=>{new L(p.process).on("close",P=>{let _=JSON.stringify({source:t,progress:a,code:P,killed:p.killed});T(new Error(`crashed: ${_}`));}).on("progress",i).on("console",(P,_)=>e.onConsole?.(P,_)).on("done",b).on("error",T);});i(0);let[E]=await Promise.all([l,p.wait]);return i(100),u.debug(z,`done ${o.join(",")} in ${Math.round(performance.now()-s)}ms`),{...E,options:n}}catch(l){throw p.kill(),r?.throwIfAborted(),l}finally{clearTimeout(d),r?.removeEventListener("abort",k);}}export{oe as a,rr as b,ne as c,se as d,ir as e,ar as f,y as g,u as h,Tr as i,zr as j,Le as k,De as l,Me as m,$e as n,Ge as o,Er as p,he as q,S as r,wt as s};//# sourceMappingURL=chunk-N72ZECPY.js.map
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2NsaV91aS50cyIsIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9yZW5kZXJlci9zY2hlbWEudHMiLCIuLi9zcmMvYmFzZS9sYXp5LnRzIiwiLi4vc3JjL2Jhc2UvaHdhY2NlbC50cyIsIi4uL3NyYy9iYXNlL2Nocm9taXVtLnRzIiwiLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uL3NyYy9yZW5kZXJlci9lbGVjdHJvbi50cyIsIi4uL3NyYy9yZW5kZXJlci9odG1sX2NoZWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9wdXAudHMiXSwibmFtZXMiOlsiUHJvZ3Jlc3NCYXIiLCJvcHRzIiwid3JpdHRlbiIsInBjdCIsImxpbmUiLCJyYXRpbyIsImZpbGxlZCIsImJhciIsInN1ZmZpeCIsImJhckxvZ2dlciIsIndyYXAiLCJmbiIsImFyZ3MiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VBcnJheSIsIml0ZW0iLCJzIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJwdXBMb2dMZXZlbCIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwicHVwQXBwIiwiam9pbiIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwibm9lcnIiLCJyZXQiLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX1dJTkRPV19USU1FT1VUIiwiREVGQVVMVF9PVVRfRklMRVMiLCJyZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJMYXp5IiwibWFrZVZhbHVlIiwiVEFHIiwiY2FuSVVzZUdQVSIsIl9zdGFjayIsImh3IiwiX191c2luZyIsIkhhcmR3YXJlQ29udGV4dCIsInJlc3VsdCIsIl8iLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwiY2hyb21pdW1PcHRpb25zIiwiZGlzYWJsZUdwdSIsImZlYXR1cmVzIiwicGxhdCIsInBsYXRmb3JtIiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsImV4ZWMiLCJjbWQiLCJvcHRpb25zIiwicGFydHMiLCJjb21tYW5kIiwic3Bhd24iLCJraWxsZWQiLCJwaWQiLCJ0cmVlS2lsbCIsImVsZWN0cm9uT3B0cyIsInJ1bkVsZWN0cm9uQXBwIiwiZWxlY3Ryb24iLCJwcm9maWxlRGlyIiwibWtkdGVtcCIsInRtcGRpciIsImVsZWN0cm9uQXJncyIsImEiLCJlbnYiLCJoYW5kbGUiLCJybVN5bmMiLCJlIiwiU1VQUE9SVEVEX1BST1RPQ09MUyIsIlNPVVJDRV9QQVRURVJOIiwiY2hlY2tIVE1MIiwic291cmNlIiwicHJvdG9jb2wiLCJleGlzdHNTeW5jIiwiZmlsZVVSTFRvUGF0aCIsIklwY1JlYWRlciIsIkV2ZW50RW1pdHRlciIsImNoaWxkIiwicmF3IiwiYyIsInJ1blB1cEFwcCIsInJlbmRlciIsImQiLCJwdXAiLCJvdXRGaWxlcyIsInJlbmRlck9wdHMiLCJ0MCIsInByb2dyZXNzIiwidGljayIsInAiLCJraWxsVGltZXIiLCJvbkFib3J0IiwibCIsIm0iLCJzdW1tYXJ5Il0sIm1hcHBpbmdzIjoiMmtFQVlPLElBQU1BLEVBQUFBLENBQU4sS0FBa0IsQ0FDZixRQUFBLENBQVcsRUFDWCxNQUFBLENBQVMsS0FBQSxDQUNBLE1BQUEsQ0FDQSxJQUFBLENBQ0EsSUFBQSxDQUNBLFVBQUEsQ0FFakIsWUFBWUMsQ0FBQUEsQ0FBa0IsQ0FDNUIsS0FBSyxNQUFBLENBQVNBLENBQUFBLENBQUssTUFDbkIsSUFBQSxDQUFLLElBQUEsQ0FBT0EsQ0FBQUEsQ0FBSyxHQUFBLENBQ2pCLElBQUEsQ0FBSyxJQUFBLENBQU8sQ0FBQyxDQUFDQSxDQUFBQSxDQUFLLElBQUksS0FBQSxDQUN2QixJQUFBLENBQUssV0FBYUEsQ0FBQUEsQ0FBSyxTQUFBLEVBQWEsTUFDdEMsQ0FFQSxJQUFJLEtBQUEsRUFBZ0IsQ0FDbEIsT0FBTyxJQUFBLENBQUssTUFDZCxDQUVBLE1BQUEsQ0FBT0MsQ0FBQUEsQ0FBdUIsQ0FDNUIsSUFBQSxDQUFLLFFBQUEsQ0FBVyxJQUFBLENBQUssR0FBQSxDQUFJLElBQUEsQ0FBSyxNQUFBLENBQVEsS0FBSyxHQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFPLENBQUMsQ0FBQSxDQUMxRCxLQUFLLE1BQUEsR0FDUCxDQUVBLGFBQUEsQ0FBY0MsQ0FBQUEsQ0FBbUIsQ0FDL0IsS0FBSyxNQUFBLENBQU8sSUFBQSxDQUFLLEtBQUEsQ0FBT0EsQ0FBQUEsQ0FBTSxHQUFBLENBQU8sSUFBQSxDQUFLLE1BQU0sQ0FBQyxFQUNuRCxDQUVBLEtBQUEsRUFBYyxDQUNSLElB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QUEsQ0FBSyxHQUFHLENBQUMsQ0FBQSxJQUFBLEVBQU8sSUFBQSxDQUFLLEtBQUEsQ0FBTSxXQUFBLENBQVksR0FBQSxFQUFJLENBQUlFLENBQUUsQ0FBQyxDQUFBLEVBQUEsQ0FBSSxDQUFBLENBQ2xGLENBQUUsR0FBR1EsQ0FBQUEsQ0FBUyxPQUFBLENBQVNULENBQVcsQ0FDM0MsQ0FBQSxNQUFTbEIsQ0FBQUEsQ0FBRyxDQUNWLE1BQUFGLENBQUFBLENBQU8sSUFBQSxFQUFLLENBQ1o5RCxDQUFBQSxFQUFRLGNBQUEsRUFBZSxDQUNqQmdFLENBQ1IsQ0FBQSxPQUFFLENBQ0EsWUFBQSxDQUFhdUIsQ0FBUyxDQUFBLENBQ3RCdkYsQ0FBQUEsRUFBUSxtQkFBQSxDQUFvQixPQUFBLENBQVN3RixDQUFPLEVBQzlDLENBQ0YiLCJmaWxlIjoiY2h1bmstTjcyWkVDUFkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzI2LlxuXG5pbXBvcnQgdHlwZSB7IExvZ2dlckxpa2UgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IEJBUl9XSURUSCA9IDQwO1xuXG5pbnRlcmZhY2UgQmFyT3B0aW9ucyB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIG91dDogTm9kZUpTLldyaXRlU3RyZWFtO1xuICBzaG93Q291bnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NCYXIge1xuICBwcml2YXRlIF93cml0dGVuID0gMDtcbiAgcHJpdmF0ZSBfc2hvd24gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG90YWw6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3V0OiBOb2RlSlMuV3JpdGVTdHJlYW07XG4gIHByaXZhdGUgcmVhZG9ubHkgX3R0eTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2hvd0NvdW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEJhck9wdGlvbnMpIHtcbiAgICB0aGlzLl90b3RhbCA9IG9wdHMudG90YWw7XG4gICAgdGhpcy5fb3V0ID0gb3B0cy5vdXQ7XG4gICAgdGhpcy5fdHR5ID0gISFvcHRzLm91dC5pc1RUWTtcbiAgICB0aGlzLl9zaG93Q291bnQgPSBvcHRzLnNob3dDb3VudCA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCB0b3RhbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90b3RhbDtcbiAgfVxuXG4gIHVwZGF0ZSh3cml0dGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl93cml0dGVuID0gTWF0aC5taW4odGhpcy5fdG90YWwsIE1hdGgubWF4KDAsIHdyaXR0ZW4pKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgdXBkYXRlUGVyY2VudChwY3Q6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKE1hdGgucm91bmQoKHBjdCAvIDEwMCkgKiB0aGlzLl90b3RhbCkpO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3R0eSAmJiB0aGlzLl9zaG93bikge1xuICAgICAgdGhpcy5fb3V0LndyaXRlKFwiXFxyXFx4MWJbMktcIik7XG4gICAgfVxuICB9XG5cbiAgcmVkcmF3KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsb2cobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuX291dC53cml0ZShgJHtsaW5lfVxcbmApO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cblxuICBmaW5pc2gobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuX291dC53cml0ZShgJHtsaW5lfVxcbmApO1xuICAgIHRoaXMuX3Nob3duID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3R0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fd3JpdHRlbiA9PT0gMCAmJiAhdGhpcy5fc2hvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLl90b3RhbCA+IDAgPyB0aGlzLl93cml0dGVuIC8gdGhpcy5fdG90YWwgOiAwO1xuICAgIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQocmF0aW8gKiBCQVJfV0lEVEgpO1xuICAgIGNvbnN0IGJhciA9IFwiI1wiLnJlcGVhdChmaWxsZWQpICsgXCItXCIucmVwZWF0KEJBUl9XSURUSCAtIGZpbGxlZCk7XG4gICAgY29uc3QgcGN0ID0gTWF0aC5yb3VuZChyYXRpbyAqIDEwMCk7XG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5fc2hvd0NvdW50ID8gYCR7dGhpcy5fd3JpdHRlbn0vJHt0aGlzLl90b3RhbH0gKCR7cGN0fSUpYCA6IGAke3BjdH0lYDtcbiAgICB0aGlzLl9vdXQud3JpdGUoYFxcclske2Jhcn1dICR7c3VmZml4fWApO1xuICAgIHRoaXMuX3Nob3duID0gdHJ1ZTtcbiAgfVxufVxuXG4vLyBBcm91bmQgZWFjaCBjb25zb2xlLiogY2FsbCwgY2xlYXIgdGhlIGJhciBsaW5lIHRoZW4gcmVkcmF3IOKAlCBrZWVwcyBuYXRpdmUgY29uc29sZSBjb2xvcmluZyBpbnRhY3QuXG5leHBvcnQgZnVuY3Rpb24gYmFyTG9nZ2VyKGJhcjogUHJvZ3Jlc3NCYXIpOiBMb2dnZXJMaWtlIHtcbiAgY29uc3Qgd3JhcCA9XG4gICAgPFQgZXh0ZW5kcyAoLi4uYTogdW5rbm93bltdKSA9PiB2b2lkPihmbjogVCkgPT5cbiAgICAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBiYXIuY2xlYXIoKTtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgYmFyLnJlZHJhdygpO1xuICAgIH07XG4gIHJldHVybiB7XG4gICAgZGVidWc6IHdyYXAoY29uc29sZS5kZWJ1ZyksXG4gICAgaW5mbzogd3JhcChjb25zb2xlLmluZm8pLFxuICAgIHdhcm46IHdyYXAoY29uc29sZS53YXJuKSxcbiAgICBlcnJvcjogd3JhcChjb25zb2xlLmVycm9yKSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cblxuLy8gQ29tbWEtc2VwYXJhdGVkIHN0cmluZyDihpIgYXJyYXkgdmlhIGEgcGVyLWl0ZW0gcGFyc2VyOyBlbXB0eS9ibGFuayDihpIgW10uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJheTxUPihpdGVtOiAoeDogdW5rbm93bikgPT4gVCk6ICh4OiB1bmtub3duKSA9PiBUW10ge1xuICByZXR1cm4gKHgpID0+IHtcbiAgICBpZiAodHlwZW9mIHggIT09IFwic3RyaW5nXCIgfHwgeC50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHguc3BsaXQoXCIsXCIpLm1hcCgocykgPT4gaXRlbShzLnRyaW0oKSkpO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBQcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwicHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6ICguLi5tZXNzYWdlczogdW5rbm93bltdKSA9PiB1bmtub3duLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSB7XG4gICAgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIH0gZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIHtcbiAgICBsb2dnZXIud2Fybihtc2cpO1xuICB9XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8QSBleHRlbmRzIHVua25vd25bXSwgUiwgRD4oZm46ICguLi5hcmdzOiBBKSA9PiBSLCBkZWZhdWx0VmFsdWU6IEQpOiAoLi4uYXJnczogQSkgPT4gUiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSkgYXMgUiB8IEQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJTkRPV19USU1FT1VUID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRVMgPSBbXCJvdXQvaHRtbC5tcDRcIiwgXCJvdXQvaHRtbC53ZWJtXCJdO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLmRlc2NyaWJlKFwiT3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICBkaXNhYmxlV2ViU2VjdXJpdHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRHJvcCB0aGUgc2FtZS1vcmlnaW4gd2FsbDsgcmVxdWlyZWQgdG8gcmVjb3JkIGEgbG9jYWwgZmlsZVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG4gIHdpbmRvd1RpbWVvdXQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJXaW5kb3cgbG9hZCB0aW1lb3V0IGluIHNlY29uZHNcIiksXG4gIHNjcmVlbnNob3RzOiB6LmFycmF5KHoubnVtYmVyKCkpLmRlc2NyaWJlKFwiU2Vjb25kIG1hcmtzIHRvIGR1bXAgZnJhbWUgYml0bWFwcyBhcyBQTkdcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIHJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgYmxhbms6IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBzY3JlZW5zaG90czogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlczogREVGQVVMVF9PVVRfRklMRVMsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IGZhbHNlLFxuICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgZGlzYWJsZUdwdTogZmFsc2UsXG4gIGRpc2FibGVId0NvZGVjOiBmYWxzZSxcbiAgZGlzYWJsZVdlYlNlY3VyaXR5OiBmYWxzZSxcbiAgd2luZG93VG9sZXJhbnQ6IGZhbHNlLFxuICB3aW5kb3dUaW1lb3V0OiBERUZBVUxUX1dJTkRPV19USU1FT1VULFxuICBzY3JlZW5zaG90czogW10sXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGNsYXNzIExhenk8VD4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYWtlVmFsdWU6ICgpID0+IFQpIHt9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5tYWtlVmFsdWUoKTtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlITtcbiAgfVxuXG4gIGdldCBpbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIF92YWx1ZTogVCB8IHVuZGVmaW5lZDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgTGF6eSB9IGZyb20gXCIuL2xhenlcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbSFdBY2NlbF1cIjtcblxuLy8gTGF6eTogZWFnZXIgYXV0bygpIGRsb3BlbnMgbGliY3VkYSBhdCBpbXBvcnQsIHdob3NlIGluaXQgdGhyZWFkIGNhbiBTRUdWIEdQVS1sZXNzIHBvZHMgKDIwMjYtMDctMjQgZXhpdC0xMzIgc3Rvcm0pLlxuZXhwb3J0IGNvbnN0IGNhbklVc2VHUFUgPSBuZXcgTGF6eSgoKSA9PiB7XG4gIHVzaW5nIGh3ID0gSGFyZHdhcmVDb250ZXh0LmF1dG8oKTtcbiAgY29uc3QgcmVzdWx0ID0gaHcgIT09IG51bGw7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY2FuSVVzZUdQVSB9IGZyb20gXCIuL2h3YWNjZWxcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNocm9taXVtT3B0aW9ucyhkaXNhYmxlR3B1OiBib29sZWFuKSB7XG4gIGNvbnN0IG9wdHMgPSBbXG4gICAgLy8g5a655Zmo5rKZ566xXG4gICAgXCJuby1zYW5kYm94XCIsXG4gICAgXCJkaXNhYmxlLWRldi1zaG0tdXNhZ2VcIixcbiAgICAvLyDot6jln58v5a6J5YWoXG4gICAgXCJkaXNhYmxlLXdlYi1zZWN1cml0eVwiLFxuICAgIFwiZGlzYWJsZS1zaXRlLWlzb2xhdGlvbi10cmlhbHNcIixcbiAgICBcImlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnNcIixcbiAgICAvLyDlvZXliLbooYzkuLpcbiAgICBcImRpc2FibGUtYmxpbmstZmVhdHVyZXM9QXV0b21hdGlvbkNvbnRyb2xsZWRcIixcbiAgICBcIm11dGUtYXVkaW9cIixcbiAgICBcImF1dG9wbGF5LXBvbGljeT1uby11c2VyLWdlc3R1cmUtcmVxdWlyZWRcIixcbiAgICBcImRpc2FibGUtZXh0ZW5zaW9uc1wiLFxuICAgIFwiZGVueS1wZXJtaXNzaW9uLXByb21wdHNcIixcbiAgICBcInVzZS1tb2NrLWtleWNoYWluXCIsXG4gICAgLy8g5riy5p+TXG4gICAgXCJmb3JjZS1kZXZpY2Utc2NhbGUtZmFjdG9yPTFcIixcbiAgICBcImZvcmNlLWNvbG9yLXByb2ZpbGU9c3JnYlwiLFxuICAgIFwiaWdub3JlLWdwdS1ibG9ja2xpc3RcIixcbiAgICBcInVzZS1nbD1hbmdsZVwiLFxuICAgIFwiZGV0ZXJtaW5pc3RpYy1tb2RlXCIsXG4gICAgXCJlbmFibGUtYmVnaW4tZnJhbWUtY29udHJvbFwiLFxuICAgIFwiZGlzYWJsZS1uZXctY29udGVudC1yZW5kZXJpbmctdGltZW91dFwiLFxuICAgIFwicnVuLWFsbC1jb21wb3NpdG9yLXN0YWdlcy1iZWZvcmUtZHJhd1wiLFxuICAgIFwiZGlzYWJsZS10aHJlYWRlZC1hbmltYXRpb25cIixcbiAgICBcImRpc2FibGUtdGhyZWFkZWQtc2Nyb2xsaW5nXCIsXG4gICAgXCJkaXNhYmxlLWNoZWNrZXItaW1hZ2luZ1wiLFxuICAgIFwiZGlzYWJsZS1pbWFnZS1hbmltYXRpb24tcmVzeW5jXCIsXG4gICAgXCJlbmFibGUtc3VyZmFjZS1zeW5jaHJvbml6YXRpb25cIixcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcHVwcGV0ZWVyL3B1cHBldGVlci9pc3N1ZXMvMjQxMFxuICAgIFwiZm9udC1yZW5kZXItaGludGluZz1ub25lXCIsXG4gICAgLy8g6LWE5rqQ5o6n5Yi2XG4gICAgXCJkaXNhYmxlLWJhY2tncm91bmQtbmV0d29ya2luZ1wiLFxuICAgIFwianMtZmxhZ3M9LS1tYXgtb2xkLXNwYWNlLXNpemU9NTEyXCIsXG4gICAgXCJyZW5kZXJlci1wcm9jZXNzLWxpbWl0PTFcIixcbiAgICBcIm51bS1yYXN0ZXItdGhyZWFkcz0yXCIsXG4gICAgXCJkaXNhYmxlLWJhY2tncm91bmQtdGltZXItdGhyb3R0bGluZ1wiLFxuICAgIFwiZGlzYWJsZS1yZW5kZXJlci1iYWNrZ3JvdW5kaW5nXCIsXG4gICAgXCJkaXNhYmxlLWJhY2tncm91bmRpbmctb2NjbHVkZWQtd2luZG93c1wiLFxuICAgIC8vIOaXpeW/l+i/vei4qlxuICAgIFwiZW5hYmxlLWxvZ2dpbmc9c3RkZXJyXCIsXG4gIF07XG5cbiAgaWYgKHB1cExvZ0xldmVsID49IDMpIHtcbiAgICBvcHRzLnB1c2goXCJsb2ctbGV2ZWw9MFwiLCBcInY9MVwiKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLnB1c2goXCJsb2ctbGV2ZWw9M1wiKTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVzID0gW1wiRm9udGF0aW9uQmFja2VuZFwiXTtcbiAgLy8gZGlzYWJsZUdwdSBmaXJzdDogaXQgc2hvcnQtY2lyY3VpdHMgcGFzdCB0aGUgbGF6eSBwcm9iZSwgc28gYSBkaXNhYmxlZCBwb2QgbmV2ZXIgZGxvcGVucyBsaWJjdWRhLlxuICBjb25zdCBlbmFibGVHcHUgPSAhZGlzYWJsZUdwdSAmJiBjYW5JVXNlR1BVLnZhbHVlO1xuICBpZiAoIWVuYWJsZUdwdSkge1xuICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1zd2lmdHNoYWRlclwiLCBcImVuYWJsZS11bnNhZmUtc3dpZnRzaGFkZXJcIik7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5wdXNoKFwiZGlzYWJsZS1ncHUtc2FuZGJveFwiLCBcImVuYWJsZS11bnNhZmUtd2ViZ3B1XCIpO1xuICAgIGNvbnN0IHBsYXQgPSBwbGF0Zm9ybSgpO1xuICAgIGlmIChwbGF0ID09PSBcImRhcndpblwiKSB7XG4gICAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9bWV0YWxcIik7XG4gICAgfSBlbHNlIGlmIChwbGF0ID09PSBcIndpbjMyXCIpIHtcbiAgICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1kM2QxMVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPXZ1bGthblwiLCBcImRpc2FibGUtdnVsa2FuLXN1cmZhY2VcIik7XG4gICAgICBmZWF0dXJlcy5wdXNoKFwiVnVsa2FuXCIpO1xuICAgIH1cbiAgfVxuXG4gIG9wdHMucHVzaChgZW5hYmxlLWZlYXR1cmVzPSR7ZmVhdHVyZXMuam9pbihcIixcIil9YCk7XG4gIHJldHVybiBvcHRzO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zLCBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgfVxuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHtcbiAgICAgICAgdHJlZUtpbGwocGlkLCBcIlNJR0tJTExcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgeyBybVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgbWtkdGVtcCB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNocm9taXVtT3B0aW9ucyB9IGZyb20gXCIuLi9iYXNlL2Nocm9taXVtXCI7XG5pbXBvcnQgeyBwdXBBcHAgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGV4ZWMsIFBVUF9BUkdTX0tFWSB9IGZyb20gXCIuLi9iYXNlL3Byb2Nlc3NcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVsZWN0cm9uT3B0cyhkaXNhYmxlR3B1OiBib29sZWFuKSB7XG4gIHJldHVybiBbLi4uKGF3YWl0IGNocm9taXVtT3B0aW9ucyhkaXNhYmxlR3B1KSksIFwiaGVhZGxlc3M9bmV3XCJdO1xufVxuXG5jb25zdCBUQUcgPSBcIltFbGVjdHJvbl1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBSdW5FbGVjdHJvbkFwcE9wdGlvbnMge1xuICBhcmdzOiB1bmtub3duW107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5FbGVjdHJvbkFwcCh7IGFyZ3MgfTogUnVuRWxlY3Ryb25BcHBPcHRpb25zKSB7XG4gIC8vIExhenk6IGVsZWN0cm9uJ3MgZW50cnkgdGhyb3dzIGlmIHRoZSBiaW5hcnkgaXMgYWJzZW50LCBzbyB1dGlsLW9ubHkgY29uc3VtZXJzIG11c3Qgbm90IGxvYWQgaXQgYXQgaW1wb3J0IHRpbWUuXG4gIGNvbnN0IHsgZGVmYXVsdDogZWxlY3Ryb24gfSA9IGF3YWl0IGltcG9ydChcImVsZWN0cm9uXCIpO1xuICBjb25zdCBvcHRzID0gYXdhaXQgZWxlY3Ryb25PcHRzKGFyZ3MuaW5jbHVkZXMoXCItLWRpc2FibGUtZ3B1XCIpKTtcbiAgLy8gUGVyLXByb2Nlc3MgcHJvZmlsZTogaXNvbGF0ZXMgdGhpcyBjYWxsJ3MgQ2hyb21pdW0gY2FjaGUgKHdhcm11cCB3aW5kb3dzIHNoYXJlIGl0IHZpYSBkZWZhdWx0U2Vzc2lvbiksIHdpcGVkIG9uIGV4aXQuXG4gIGNvbnN0IHByb2ZpbGVEaXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksIFwicHVwLXByb2ZpbGUtXCIpKTtcbiAgY29uc3QgZWxlY3Ryb25BcmdzID0gb3B0cy5tYXAoKGEpID0+IGAtLSR7YX1gKTtcbiAgZWxlY3Ryb25BcmdzLnB1c2goYC0tdXNlci1kYXRhLWRpcj0ke3Byb2ZpbGVEaXJ9YCk7XG4gIGVsZWN0cm9uQXJncy5wdXNoKGAke1BVUF9BUkdTX0tFWX09JHtCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShhcmdzKSkudG9TdHJpbmcoXCJiYXNlNjRcIil9YCk7XG4gIGNvbnN0IGNtZCA9IFtlbGVjdHJvbiwgLi4uZWxlY3Ryb25BcmdzLCBwdXBBcHBdLmpvaW4oXCIgXCIpO1xuICBsb2dnZXIuZGVidWcoVEFHLCBjbWQpO1xuXG4gIGNvbnN0IGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSB7IC4uLnByb2Nlc3MuZW52LCBSVVNUX0JBQ0tUUkFDRTogXCJmdWxsXCIgfTtcbiAgY29uc3QgaGFuZGxlID0gZXhlYyhjbWQsIHsgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCIsIFwiaXBjXCJdLCBlbnYgfSk7XG4gIGhhbmRsZS5wcm9jZXNzLm9uY2UoXCJleGl0XCIsICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcm1TeW5jKHByb2ZpbGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIFwicHJvZmlsZSBjbGVhbnVwIGZhaWxlZDpcIiwgZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGhhbmRsZTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICBjb25zdCBwcm90b2NvbCA9IGAke3NvdXJjZS5zcGxpdChcIjpcIilbMF19OmA7XG4gICAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgICA/IGB1bnN1cHBvcnRlZCBwcm90b2NvbDogJHtwcm90b2NvbH0sIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YFxuICAgICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG5cbiAgLy8gZmlsZTogc291cmNlcyBhcmUgY2hlYXAgdG8gc3RhdCBoZXJlOyBFbGVjdHJvbiB3b3VsZCBvbmx5IHN1cmZhY2UgYSBtaXNzaW5nIG9uZSBhcyBkaWQtZmFpbC1sb2FkIGFmdGVyIHNwYXduK3dhcm11cC5cbiAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKFwiZmlsZTpcIikgJiYgIWV4aXN0c1N5bmMoZmlsZVVSTFRvUGF0aChzb3VyY2UpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgc291cmNlIGZpbGUgbm90IGZvdW5kOiAke3NvdXJjZX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwibm9kZTpldmVudHNcIjtcblxuZXhwb3J0IGVudW0gSXBjTXNnVHlwZSB7XG4gIC8vIGNoaWxkIOKGkiBwYXJlbnRcbiAgQ29uc29sZSA9IFwiY29uc29sZVwiLFxuICBQcm9ncmVzcyA9IFwicHJvZ3Jlc3NcIixcbiAgRG9uZSA9IFwiZG9uZVwiLFxuICBFcnJvciA9IFwiZXJyb3JcIixcbiAgLy8gcGFyZW50IOKGkiBjaGlsZFxuICBDYW5jZWwgPSBcImNhbmNlbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGU7XG4gIGxldmVsOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNhbmNlbDtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Eb25lO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRXJyb3I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRXJyb3IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRG9uZSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Db25zb2xlOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUHJvZ3Jlc3M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Eb25lOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVycm9yOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBydW5FbGVjdHJvbkFwcCB9IGZyb20gXCIuL3JlbmRlcmVyL2VsZWN0cm9uXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9yZW5kZXJlci9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyB0eXBlIElwY0RvbmVQYXlsb2FkLCBJcGNNc2dUeXBlLCBJcGNSZWFkZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ29uc29sZUNhbGxiYWNrLFxuICBkZWZhdWx0UmVuZGVyT3B0aW9ucyxcbiAgdHlwZSBQcm9ncmVzc0NhbGxiYWNrLFxuICB0eXBlIFJlbmRlck9wdGlvbnMsXG4gIHR5cGUgUmVuZGVyUmVzdWx0LFxufSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbcHVwXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1cE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFJlbmRlck9wdGlvbnM+IHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU/OiBDb25zb2xlQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVwUmVzdWx0IGV4dGVuZHMgUmVuZGVyUmVzdWx0IHt9XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blB1cEFwcChzb3VyY2U6IHN0cmluZywgcmVuZGVyOiBSZW5kZXJPcHRpb25zKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGBydW5QdXBBcHBgLCBzb3VyY2UsIHJlbmRlcik7XG5cbiAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXG4gICAgc291cmNlLFxuICAgIGAtLXdpZHRoYCxcbiAgICBgJHtyZW5kZXIud2lkdGh9YCxcbiAgICBgLS1oZWlnaHRgLFxuICAgIGAke3JlbmRlci5oZWlnaHR9YCxcbiAgICBgLS1mcHNgLFxuICAgIGAke3JlbmRlci5mcHN9YCxcbiAgICBgLS1kdXJhdGlvbmAsXG4gICAgYCR7cmVuZGVyLmR1cmF0aW9ufWAsXG4gICAgYC0td2luZG93LXRpbWVvdXRgLFxuICAgIGAke3JlbmRlci53aW5kb3dUaW1lb3V0fWAsXG4gICAgYC0tb3V0LWZpbGVgLFxuICAgIHJlbmRlci5vdXRGaWxlcy5qb2luKFwiLFwiKSxcbiAgXTtcbiAgaWYgKHJlbmRlci53aXRoQXVkaW8pIHtcbiAgICBhcmdzLnB1c2goYC0td2l0aC1hdWRpb2ApO1xuICB9XG4gIGlmIChyZW5kZXIudXNlSW5uZXJQcm94eSkge1xuICAgIGFyZ3MucHVzaChgLS11c2UtaW5uZXItcHJveHlgKTtcbiAgfVxuICBpZiAocmVuZGVyLmRldGVybWluaXN0aWMpIHtcbiAgICBhcmdzLnB1c2goYC0tZGV0ZXJtaW5pc3RpY2ApO1xuICB9XG4gIGlmIChyZW5kZXIuZGlzYWJsZUdwdSkge1xuICAgIGFyZ3MucHVzaChgLS1kaXNhYmxlLWdwdWApO1xuICB9XG4gIGlmIChyZW5kZXIuZGlzYWJsZUh3Q29kZWMpIHtcbiAgICBhcmdzLnB1c2goYC0tZGlzYWJsZS1ody1jb2RlY2ApO1xuICB9XG4gIGlmIChyZW5kZXIuZGlzYWJsZVdlYlNlY3VyaXR5KSB7XG4gICAgYXJncy5wdXNoKGAtLWRpc2FibGUtd2ViLXNlY3VyaXR5YCk7XG4gIH1cbiAgaWYgKHJlbmRlci53aW5kb3dUb2xlcmFudCkge1xuICAgIGFyZ3MucHVzaChgLS13aW5kb3ctdG9sZXJhbnRgKTtcbiAgfVxuICBpZiAocmVuZGVyLnNjcmVlbnNob3RzLmxlbmd0aCA+IDApIHtcbiAgICBhcmdzLnB1c2goYC0tc2NyZWVuc2hvdHNgLCByZW5kZXIuc2NyZWVuc2hvdHMuam9pbihcIixcIikpO1xuICB9XG5cbiAgcmV0dXJuIHJ1bkVsZWN0cm9uQXBwKHsgYXJncyB9KTtcbn1cblxuY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVwKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBQYXJ0aWFsPFB1cE9wdGlvbnM+KTogUHJvbWlzZTxQdXBSZXN1bHQ+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYHB1cGAsIHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgY29uc3Qgb3V0RmlsZXMgPSBvcHRpb25zLm91dEZpbGVzID8/IGQub3V0RmlsZXM7XG4gIGNvbnN0IHJlbmRlck9wdHM6IFJlbmRlck9wdGlvbnMgPSB7XG4gICAgd2lkdGg6IG9wdGlvbnMud2lkdGggPz8gZC53aWR0aCxcbiAgICBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0ID8/IGQuaGVpZ2h0LFxuICAgIGZwczogb3B0aW9ucy5mcHMgPz8gZC5mcHMsXG4gICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24gPz8gZC5kdXJhdGlvbixcbiAgICB3aXRoQXVkaW86IG9wdGlvbnMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgIHVzZUlubmVyUHJveHk6IG9wdGlvbnMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgZGV0ZXJtaW5pc3RpYzogb3B0aW9ucy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICBkaXNhYmxlR3B1OiBvcHRpb25zLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgIGRpc2FibGVId0NvZGVjOiBvcHRpb25zLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgZGlzYWJsZVdlYlNlY3VyaXR5OiBvcHRpb25zLmRpc2FibGVXZWJTZWN1cml0eSA/PyBkLmRpc2FibGVXZWJTZWN1cml0eSxcbiAgICB3aW5kb3dUb2xlcmFudDogb3B0aW9ucy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgIHdpbmRvd1RpbWVvdXQ6IG9wdGlvbnMud2luZG93VGltZW91dCA/PyBkLndpbmRvd1RpbWVvdXQsXG4gICAgc2NyZWVuc2hvdHM6IG9wdGlvbnMuc2NyZWVuc2hvdHMgPz8gZC5zY3JlZW5zaG90cyxcbiAgICBvdXRGaWxlcyxcbiAgfTtcblxuICBjb25zdCB0MCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBjb25zdCB0aWNrID0gKHA6IG51bWJlcikgPT4ge1xuICAgIHByb2dyZXNzID0gcDtcbiAgICBvcHRpb25zLm9uUHJvZ3Jlc3M/LihwKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGUgPSBhd2FpdCBydW5QdXBBcHAoc291cmNlLCByZW5kZXJPcHRzKTtcblxuICBsZXQga2lsbFRpbWVyOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICBoYW5kbGUucHJvY2Vzcy5zZW5kPy4oeyB0eXBlOiBJcGNNc2dUeXBlLkNhbmNlbCwgcmVhc29uOiBTdHJpbmcoc2lnbmFsPy5yZWFzb24gPz8gXCJhYm9ydFwiKSB9KTtcbiAgICBraWxsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGhhbmRsZS5raWxsKCksIDVfMDAwKTtcbiAgfTtcbiAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG5ldyBJcGNSZWFkZXIoaGFuZGxlLnByb2Nlc3MpXG4gICAgICAgIC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gSlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIHByb2dyZXNzLCBjb2RlLCBraWxsZWQ6IGhhbmRsZS5raWxsZWQgfSk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgY3Jhc2hlZDogJHttc2d9YCkpO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJwcm9ncmVzc1wiLCB0aWNrKVxuICAgICAgICAub24oXCJjb25zb2xlXCIsIChsLCBtKSA9PiBvcHRpb25zLm9uQ29uc29sZT8uKGwsIG0pKVxuICAgICAgICAub24oXCJkb25lXCIsIHJlc29sdmUpXG4gICAgICAgIC5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSk7XG4gICAgdGljaygwKTtcbiAgICBjb25zdCBbc3VtbWFyeV0gPSBhd2FpdCBQcm9taXNlLmFsbChbcmVzdWx0LCBoYW5kbGUud2FpdF0pO1xuICAgIHRpY2soMTAwKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgZG9uZSAke291dEZpbGVzLmpvaW4oXCIsXCIpfSBpbiAke01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSB0MCl9bXNgKTtcbiAgICByZXR1cm4geyAuLi5zdW1tYXJ5LCBvcHRpb25zOiByZW5kZXJPcHRzIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGUua2lsbCgpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICB0aHJvdyBlO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dChraWxsVGltZXIpO1xuICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICB9XG59XG4iXX0=