pup-recorder 0.6.7 → 0.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.cjs +4 -4
- package/package.json +2 -2
package/dist/app.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var C=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var _o=Object.create;var ut=Object.defineProperty;var bo=Object.getOwnPropertyDescriptor;var Ve=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),ee=r=>{throw TypeError(r)};var Wt=(r,e,t)=>e in r?ut(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var $t=r=>[,,,_o(null)],Gt=["class","method","getter","setter","accessor","field","value","get","set"],Fe=r=>r!==void 0&&typeof r!="function"?ee("Function expected"):r,xo=(r,e,t,o,n)=>({kind:Gt[r],name:e,metadata:o,addInitializer:i=>t._?ee("Already initialized"):n.push(Fe(i||null))}),pt=(r,e)=>Wt(e,Ve("metadata"),r[3]),zt=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},ae=(r,e,t,o,n,i)=>{var a,c,d,p,u=e&7,l=false,m=false,h=2,_=Gt[u+5],S=r[h]||(r[h]=[]),P=((n=n.prototype),bo(n,t));for(var y=o.length-1;y>=0;y--)d=xo(u,t,c={},r[3],S),(d.static=l,d.private=m,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),a=(0, o[y])(P[_],d),c._=1,Fe(a)&&(P[_]=a);return P&&ut(n,t,P),n},jt=(r,e,t)=>Wt(r,e+"",t);var g=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&ee("Object expected");var o,n;t&&(o=e[Ve("asyncDispose")]),o===void 0&&(o=e[Ve("dispose")],t&&(n=o)),typeof o!="function"&&ee("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},x=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,a,c,d){return d=Error(c),d.name="SuppressedError",d.error=s,d.suppressed=a,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(i,c=>(n(c),i()))}catch(c){n(c);}if(t)throw e};return i()};var Po=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,f=Po();function Xt(r,e,t){try{return e(process.env[r])}catch{return t}}function U(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}function Yt(r){return typeof r=="string"?r:String(r)}function lt(r){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(t=>r(t.trim()))}var Co=module$1.createRequire(f),Kt=Xt("PUP_LOG_LEVEL",U,2),ce=path.dirname(Co.resolve("pup-recorder/package.json"));path.join(ce,"dist","app.cjs");var Jt=path.join(ce,"dist","runtime","preload.cjs");var ft="<pup@debug>",ht="<pup@info>",wt="<pup@warn>",gt="<pup@error>",_t="<pup@fatal>";function Ae(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Qt,Zt,er,tr,rr,te;rr=[Ae],tr=[Ae],er=[Ae],Zt=[Ae],Qt=[Ae];var H=class{constructor(e=Kt){this._level=e;zt(te,5,this);jt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(ft,...e);}info(...e){this.impl?.info?.(ht,...e);}warn(...e){this.impl?.warn?.(wt,...e);}error(...e){this.impl?.error?.(gt,...e);}fatal(...e){this.impl?.error?.(_t,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ft)?this.debug(t.slice(ft.length+1)):t.startsWith(ht)?this.info(t.slice(ht.length+1)):t.startsWith(wt)?this.warn(t.slice(wt.length+1)):t.startsWith(gt)?this.error(t.slice(gt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=a=>{let c=a.toString();c.startsWith(_t)?i+=c.slice(_t.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",a=>{i+=a.message,e.kill();}).once("close",(a,c)=>{a||c||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}};te=$t(),ae(te,1,"debug",rr,H),ae(te,1,"info",tr,H),ae(te,1,"warn",er,H),ae(te,1,"error",Zt,H),ae(te,1,"fatal",Qt,H),pt(te,H);var w=new H;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?w.error(t):r<=constants.AV_LOG_WARNING&&w.warn(t));});var Bo="[Crash]";function nr(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),w.debug(Bo,"set dump to",r);}function de(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Mo="--pup-priv-args";function ir(){let r=process.argv,e=r.find(o=>o.startsWith(Mo));if(!e)return w.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),w.debug("pupargs",t),t}var No=1920,Oo=1080,Do=30,Lo=5,Vo=10,Uo=["out/html.mp4","out/html.webm"],sr=C__default.default.object({duration:C__default.default.number().describe("Duration in seconds"),width:C__default.default.number().describe("Video width"),height:C__default.default.number().describe("Video height"),fps:C__default.default.number().describe("Frames per second"),withAudio:C__default.default.boolean().describe("Capture and encode audio"),outFiles:C__default.default.array(C__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),disableWebSecurity:C__default.default.boolean().describe("Drop the same-origin wall; required to record a local file"),ignoreCertificateErrors:C__default.default.boolean().describe("Record over TLS the platform rejects, e.g. a self-signed intranet host"),windowTolerant:C__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:C__default.default.number().describe("Window load timeout in seconds"),screenshots:C__default.default.array(C__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),ar={width:No,height:Oo,fps:Do,duration:Lo,outFiles:Uo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,ignoreCertificateErrors:false,windowTolerant:false,windowTimeout:Vo,screenshots:[]};function $o(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function dr(r){let e=sr.shape,t=ar;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-S, --screenshots <seconds>",e.screenshots.description,"").option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <paths>",e.outFiles.description,t.outFiles.join(",")).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--disable-web-security",e.disableWebSecurity.description,t.disableWebSecurity).option("--ignore-certificate-errors",e.ignoreCertificateErrors.description,t.ignoreCertificateErrors).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run($o(o),{width:de(U,t.width)(n.width),height:de(U,t.height)(n.height),fps:de(U,t.fps)(n.fps),duration:de(U,t.duration)(n.duration),outFiles:lt(Yt)(n.outFile),withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,disableWebSecurity:n.disableWebSecurity??t.disableWebSecurity,ignoreCertificateErrors:n.ignoreCertificateErrors??t.ignoreCertificateErrors,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:de(U,t.windowTimeout)(n.windowTimeout),screenshots:lt(U)(n.screenshots)});}catch(i){w.fatal(i);}}),await commander.program.parseAsync(ir());}var Ue=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function He(r){return new Promise(e=>setTimeout(e,r))}function re(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}function ur(r,e){return e?new Promise((t,o)=>{let n=()=>o(e.reason);e.addEventListener("abort",n,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",n));}):r}function We(r,e){let t,o=false;async function n(i){let s=await r(i);o||(t=setTimeout(()=>n(i+1),s??e));}return t=setTimeout(()=>n(0),e),()=>{o=true,clearTimeout(t);}}var $e=5e3;function ke(r,e,t){return re(r.sendCommand(e,t),$e,`cdp.${e}`)}function bt(r,e){return re(ke(r,"Runtime.evaluate",{expression:e}),$e,"evalIn")}function pr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${$e}ms`));},$e),i=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),ke(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function mr(r){await ke(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Te(r,e){try{let t=r.debugger;await ke(t,"Emulation.clearDeviceMetricsOverride",{}),await ke(t,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:!1}),r.invalidate();}catch{}}var ue=32;var Go="stego-tick";function lr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
1
|
+
'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var C=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os$1=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var xo=Object.create;var ut=Object.defineProperty;var yo=Object.getOwnPropertyDescriptor;var He=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),ee=r=>{throw TypeError(r)};var Wt=(r,e,t)=>e in r?ut(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var $t=r=>[,,,xo(null)],Gt=["class","method","getter","setter","accessor","field","value","get","set"],Ae=r=>r!==void 0&&typeof r!="function"?ee("Function expected"):r,vo=(r,e,t,o,n)=>({kind:Gt[r],name:e,metadata:o,addInitializer:i=>t._?ee("Already initialized"):n.push(Ae(i||null))}),pt=(r,e)=>Wt(e,He("metadata"),r[3]),zt=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},ce=(r,e,t,o,n,i)=>{var c,a,d,p,u=e&7,l=false,m=false,w=2,b=Gt[u+5],E=r[w]||(r[w]=[]),P=((n=n.prototype),yo(n,t));for(var y=o.length-1;y>=0;y--)d=vo(u,t,a={},r[3],E),(d.static=l,d.private=m,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),c=(0, o[y])(P[b],d),a._=1,Ae(c)&&(P[b]=c);return P&&ut(n,t,P),n},jt=(r,e,t)=>Wt(r,e+"",t);var g=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&ee("Object expected");var o,n;t&&(o=e[He("asyncDispose")]),o===void 0&&(o=e[He("dispose")],t&&(n=o)),typeof o!="function"&&ee("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},x=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,d){return d=Error(a),d.name="SuppressedError",d.error=s,d.suppressed=c,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(i,a=>(n(a),i()))}catch(a){n(a);}if(t)throw e};return i()};var So=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,f=So();function Xt(r,e,t){try{return e(process.env[r])}catch{return t}}function U(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}function Yt(r){return typeof r=="string"?r:String(r)}function lt(r){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(t=>r(t.trim()))}var Ao=module$1.createRequire(f),Kt=Xt("PUP_LOG_LEVEL",U,2),de=path.dirname(Ao.resolve("pup-recorder/package.json"));path.join(de,"dist","app.cjs");var Jt=path.join(de,"dist","runtime","preload.cjs");var ft="<pup@debug>",ht="<pup@info>",wt="<pup@warn>",gt="<pup@error>",_t="<pup@fatal>";function ke(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Qt,Zt,er,tr,rr,te;rr=[ke],tr=[ke],er=[ke],Zt=[ke],Qt=[ke];var H=class{constructor(e=Kt){this._level=e;zt(te,5,this);jt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(ft,...e);}info(...e){this.impl?.info?.(ht,...e);}warn(...e){this.impl?.warn?.(wt,...e);}error(...e){this.impl?.error?.(gt,...e);}fatal(...e){this.impl?.error?.(_t,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ft)?this.debug(t.slice(ft.length+1)):t.startsWith(ht)?this.info(t.slice(ht.length+1)):t.startsWith(wt)?this.warn(t.slice(wt.length+1)):t.startsWith(gt)?this.error(t.slice(gt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=c=>{let a=c.toString();a.startsWith(_t)?i+=a.slice(_t.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",c=>{i+=c.message,e.kill();}).once("close",(c,a)=>{c||a||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};te=$t(),ce(te,1,"debug",rr,H),ce(te,1,"info",tr,H),ce(te,1,"warn",er,H),ce(te,1,"error",Zt,H),ce(te,1,"fatal",Qt,H),pt(te,H);var h=new H;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?h.error(t):r<=constants.AV_LOG_WARNING&&h.warn(t));});var No="[Crash]";function nr(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),h.debug(No,"set dump to",r);}function ue(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Oo="--pup-priv-args";function ir(){let r=process.argv,e=r.find(o=>o.startsWith(Oo));if(!e)return h.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),h.debug("pupargs",t),t}var Do=1920,Lo=1080,Vo=30,Uo=5,Ho=10,Wo=["out/html.mp4","out/html.webm"],sr=C__default.default.object({duration:C__default.default.number().describe("Duration in seconds"),width:C__default.default.number().describe("Video width"),height:C__default.default.number().describe("Video height"),fps:C__default.default.number().describe("Frames per second"),withAudio:C__default.default.boolean().describe("Capture and encode audio"),outFiles:C__default.default.array(C__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),disableWebSecurity:C__default.default.boolean().describe("Drop the same-origin wall; required to record a local file"),ignoreCertificateErrors:C__default.default.boolean().describe("Record over TLS the platform rejects, e.g. a self-signed intranet host"),windowTolerant:C__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:C__default.default.number().describe("Window load timeout in seconds"),screenshots:C__default.default.array(C__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),ar={width:Do,height:Lo,fps:Vo,duration:Uo,outFiles:Wo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,ignoreCertificateErrors:false,windowTolerant:false,windowTimeout:Ho,screenshots:[]};function zo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function dr(r){let e=sr.shape,t=ar;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-S, --screenshots <seconds>",e.screenshots.description,"").option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <paths>",e.outFiles.description,t.outFiles.join(",")).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--disable-web-security",e.disableWebSecurity.description,t.disableWebSecurity).option("--ignore-certificate-errors",e.ignoreCertificateErrors.description,t.ignoreCertificateErrors).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run(zo(o),{width:ue(U,t.width)(n.width),height:ue(U,t.height)(n.height),fps:ue(U,t.fps)(n.fps),duration:ue(U,t.duration)(n.duration),outFiles:lt(Yt)(n.outFile),withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,disableWebSecurity:n.disableWebSecurity??t.disableWebSecurity,ignoreCertificateErrors:n.ignoreCertificateErrors??t.ignoreCertificateErrors,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:ue(U,t.windowTimeout)(n.windowTimeout),screenshots:lt(U)(n.screenshots)});}catch(i){h.fatal(i);}}),await commander.program.parseAsync(ir());}var We=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function $e(r){return new Promise(e=>setTimeout(e,r))}function re(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}function ur(r,e){return e?new Promise((t,o)=>{let n=()=>o(e.reason);e.addEventListener("abort",n,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",n));}):r}function Ge(r,e){let t,o=false;async function n(i){let s=await r(i);o||(t=setTimeout(()=>n(i+1),s??e));}return t=setTimeout(()=>n(0),e),()=>{o=true,clearTimeout(t);}}var ze=5e3;function Te(r,e,t){return re(r.sendCommand(e,t),ze,`cdp.${e}`)}function bt(r,e){return re(Te(r,"Runtime.evaluate",{expression:e}),ze,"evalIn")}function pr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${ze}ms`));},ze),i=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Te(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function mr(r){await Te(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Re(r,e){try{let t=r.debugger;await Te(t,"Emulation.clearDeviceMetricsOverride",{}),await Te(t,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:!1}),r.invalidate();}catch{}}var pe=32;var jo="stego-tick";function lr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
<script>
|
|
32
32
|
(function() {
|
|
33
33
|
const WIDTH = ${t};
|
|
34
|
-
const MARKER_WIDTH = ${
|
|
34
|
+
const MARKER_WIDTH = ${pe};
|
|
35
35
|
const canvas = document.getElementById('stego');
|
|
36
36
|
const ctx = canvas.getContext('2d', { willReadFrequently: true });
|
|
37
37
|
let startTime = null;
|
|
@@ -91,6 +91,6 @@
|
|
|
91
91
|
})();
|
|
92
92
|
</script>
|
|
93
93
|
</body>
|
|
94
|
-
</html>`}function Ge(r,e){let{width:t,height:o}=e;if(t<ue||o<2)return;let n=o-1,i=0;for(let s=0;s<ue;s++){let a=(n*t+s)*4,d=(r[a]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function fr(r){return bt(r,"__pup_start_stego__()")}async function hr(r,e){await bt(r.debugger,`__pup_draw_stego__(${e})`);}async function wr(r){let e=new Promise(t=>r.ipc.once(Go,t));await re(e,5e3,"stego tick");}var xt="pup",zo="pup-frame",gr={standard:true,secure:true,bypassCSP:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:xt,privileges:gr},{scheme:zo,privileges:gr}]);function br(){electron.protocol.handle(xt,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=lr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function xr(r,e){let t=new URL(`${xt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var pe=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};var Re="libvpx-vp9";async function W(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=g(n,new DisposableStack);o.use(t);t.codecId=r.codec.id;t.width=r.width;t.height=r.height;t.pixelFormat=r.pixelFormat;t.timeBase=new nodeAv.Rational(1,r.fps);t.framerate=new nodeAv.Rational(r.fps,1);t.gopSize=r.fps*2;t.bitRate=BigInt(r.bitrate);t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);r.codecTag&&(t.codecTag=r.codecTag);r.colorRange!==void 0&&(t.colorRange=r.colorRange);r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[c,d]of Object.entries(r.options??{}))t.setOption(c,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,a=true;}finally{x(n,s,a);}}function oe(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=g(i,new DisposableStack);n.use(o);o.format=t;o.width=r;o.height=e;nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer");n.move();return o}catch(s){var a=s,c=true;}finally{x(i,a,c);}}function R(){let r=new nodeAv.Packet;return r.alloc(),r}async function me(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e);}finally{e.unref();}}}var j=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=oe(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=oe(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=R();}async png(){var o=[];try{let e=g(o,new DisposableStack);let t=new nodeAv.CodecContext;t.allocContext3(this._png);e.use(t);nodeAv.FFmpegError.throwIfError(await t.open2(this._png),"pngDecoder.open2");e.move();return t}catch(n){var i=n,s=true;}finally{x(o,i,s);}}async decodePNG(e){var o=[];try{let t=g(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{x(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var fn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},ze=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=R(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){var s=[];try{let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=g(s,new DisposableStack);let n=new nodeAv.CodecContext;n.allocContext3(t);o.use(n);n.codecId=t.id;n.sampleFormat=e.outSampleFmt;n.sampleRate=e.outSampleRate;n.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO;n.timeBase=new nodeAv.Rational(1,e.outSampleRate);n.bitRate=BigInt(e.bitrate);e.globalHeader&&n.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);nodeAv.FFmpegError.throwIfError(await n.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(n);o.move();return new r(n,i,e.outSampleFmt)}catch(a){var c=a,d=true;}finally{x(s,c,d);}}setInputRate(e){var l=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=g(l,new DisposableStack);let o=new nodeAv.FilterGraph;o.alloc();t.use(o);let n=nodeAv.Filter.getByName("abuffer");let i=o.createFilter(n,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let s=nodeAv.Filter.getByName("abuffersink");let a=o.createFilter(s,"sink");if(!a)throw new Error("Failed to create abuffersink");let c=fn[this._outFmt]??"flt";let d=`aformat=sample_fmts=${c}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`;let p=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]);let u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);nodeAv.FFmpegError.throwIfError(o.parsePtr(d,u,p),"graph.parsePtr");nodeAv.FFmpegError.throwIfError(o.configSync(),"graph.config");t.move();this._graph=o;this._bufSrc=i;this._bufSink=a;}catch(m){var h=m,_=true;}finally{x(l,h,_);}}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=g(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(a){var c=a,d=true;}finally{x(s,c,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),await this.drainCodec(e);}finally{this._filterFrame.unref();}}}drainCodec(e){return me(this._ctx,this._pkt,this._stream,e)}};function Y(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var X=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},B=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var q=Buffer.from([0,0,0,1]);var Pt=16;var Et=23,fe=32,he=33,je=34,Ar=39;function kr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function St(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function O(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let c=n+2;c<r.length-2;c++)if(r[c]===0&&r[c+1]===0&&(r[c+2]===1||c+3<r.length&&r[c+2]===0&&r[c+3]===1)){i=c;break}let{type:s,layerId:a}=kr(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function Ct(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=kr(t[0],t[1]),[i,s]=St(o,e,n);return t[0]=i,t[1]=s,t}function D(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function ne(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var hn=48,Ir=24,wn=2,gn=10,Ft=0,_n=1;function Tr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Rr(r,e){let t=D(r);return Tr(t,e+wn,0),Tr(t,e+gn,1),ne(t)}function Xe(r){let e=O(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===fe?n=Rr(o.data,hn):o.type===he&&(n=Rr(o.data,Ir)),t.push(q,n);}return Buffer.concat(t)}function bn(r,e,t){let o=D(r),n=new B(o),i=new X;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return ne(Y(i.bits))}function xn(r,e,t,o){let n=D(r),i=new B(n),s=new X;for(let a=0;a<e;a++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return ne(Y(s.bits))}function Br(r){let e=Ir+96;return bn(r,e,1)}function Mr(r){return xn(r,16,1,1)}function yn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function vn(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function Pn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=Pt&&e<=Et;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):vn(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===_n||n===Ft)&&(r.read(1)&&(r.readUe(),n===Ft&&r.readUe()),n===Ft&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),yn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Nr(r,e,t){let o=D(r),n=new B(o),i=new B(o),s=Pn(i,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new X;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Pt&&e<=Et&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return ne(Buffer.concat([Y(d.bits),o.subarray(c)]))}function En(r){let e=new B(D(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function Sn(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function Cn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Or(r,e,t){let o=En(r);if(!o)return r;let n=new X;return Sn(n,o),Cn(n,o,e,t),n.bits.push(1),n.align(0),ne(Y(n.bits))}function Dr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let a=new Uint32Array(t.buffer,t.byteOffset,s);for(let c=0;c<s;c++)e[c]=a[c]>>>24;}else for(let a=0;a<i;a++){let c=a*o+3,d=a*n;for(let p=0;p<n;p++)e[d+p]=t[c+p*4];}}function Fn(r,e){return r===he?Br(e):r===je?Mr(e):e}function Lr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=O(e),n=O(t),i=new Map;for(let c of n){if(c.type===fe)continue;let d=i.get(c.type)??[];d.push(c),i.set(c.type,d);}let s=[],a=new Set;for(let c of o){let d=c.type===fe?Or(c.data,r.width,r.height):c.data;if(s.push(q,d),!a.has(c.type)){a.add(c.type);for(let p of i.get(c.type)??[]){let u=Fn(c.type,p.data);s.push(q,Ct(u,1));}}}return s.push(An()),Buffer.concat(s)}function An(){let[t,o]=St(Ar,0,1),n=[],i=(s,a)=>{for(let c=a-1;c>=0;c--)n.push(s>>c&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([q,Buffer.from([t,o]),Buffer.from([165,4]),Y(n),Buffer.from([128])])}function Vr(r,e,t){let o=[];for(let n of r)o.push(q,n.data);for(let n of e)if(n.type<fe){let i=Nr(n.data,n.type,t);o.push(q,Ct(i,1));}return Buffer.concat(o)}var Ye=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:a}=this._s,c=Vr(O(e.data),O(t.data),a);n.data=Xe(c),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function K(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function In(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Bn(r){let e=new B(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&K("sps_max_sub_layers_minus1",t,"0"),e.read(1),In(e,t),e.readUe();let o=e.readUe();o===3&&K("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let l=0;l<s;l++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&K("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&K("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&K("num_short_term_ref_pic_sets",c,"\u22641");let d=0;if(c===1){let l=e.readUe(),m=e.readUe();d=l+m;for(let h=0;h<l;h++)e.readUe(),e.read(1);for(let h=0;h<m;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&K("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:a,numShortTermRefPicSets:c,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Mn(r){let e=new B(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&K("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&K("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Ur(r){let e=O(r),t=e.find(s=>s.type===he),o=e.find(s=>s.type===je);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Bn(D(t.data)),i=Mn(D(o.data));return {...n,...i}}var qe=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Ye({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var A=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let a=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!a)throw new Error("hevc_nvenc encoder not found");let c={preset:"p4",bf:"0",tier:"main"};let d={codec:a,width:t,height:o,fps:n,bitrate:i,options:c};let p=g(A,new DisposableStack);let u=p.use(await W({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let l=p.use(await W({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!l.extraData)throw new Error("nvenc: codec extradata missing");let m=Ur(u.extraData);let h=s.addStream(u,"hvc1");let _=Lr({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});h.codecpar.extradata=Xe(_);let b=t*o;let S=(t+1>>1)*(o+1>>1);let P=Buffer.alloc(b+S*2);P.fill(128,b);let y=p.use(R());let v=p.use(R());let E=p.use(oe(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:y,alphaPkt:v,stream:h,alphaSwFrame:E,alphaBuf:P,hevcCfg:m})}catch(k){var I=k,$=true;}finally{x(A,I,$);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,a=this._pts++;Dr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=a,i.duration=1n,e.pts=a,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var we=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var l=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=g(l,new DisposableStack);let d=c.use(await W({codec:a,...s,codecTag:o,options:n},"videoCtx.open2"));let p=c.use(R());let u=i.addStream(d,o);c.move();return new r(d,p,u)}catch(m){var h=m,_=true;}finally{x(l,h,_);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return me(this._ctx,this._pkt,this._stream,e)}};var Ke=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var m=[];try{let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:a}=e;let c=i.getEncoderCodec("hevc");if(!c)throw new Error("hevc_videotoolbox encoder not found");let d=await W({codec:c,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2");let p=g(m,new DisposableStack);p.use(d);let u=p.use(R());let l=a.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(h){var _=h,b=true;}finally{x(m,_,b);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return me(this._ctx,this._pkt,this._stream,e)}};var Je="[Encoder]";async function Wr(r,e){var m=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:a}=r;let c=a??(s?void 0:api.HardwareContext.auto()??void 0);let d=!a&&!!c;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return w.debug(Je,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ke.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return w.debug(Je,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await qe.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d}}catch(S){w.warn(Je,"Hardware codec session limits reached, use software encoder",S),d&&c?.dispose();}w.debug(Je,"using software libx265 HEVC alpha encoder");let p=g(m,new DisposableStack);let u=p.use(await we.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}));let l=p.use(await j.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(h){var _=h,b=true;}finally{x(m,_,b);}}var ge=class{_ctx;_opened=false;_disposed=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=g(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{x(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(!this._disposed){this._disposed=true;try{if(this._opened){this._opened=!1;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput();}}}finally{await this._ctx[Symbol.asyncDispose]();}}}};var Me=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){var s=[];try{let t=g(s,new AsyncDisposableStack,!0);let o=t.use(new ge(e.outFile));let n=e.kind==="mp4"?await r.mp4Video(e,o):await r.webmVideo(e,o);n.video&&t.use(n.video);n.hwVideo&&t.use(n.hwVideo);n.codec&&t.use(n.codec);n.ownsHw&&n.hw&&t.use(n.hw);let i=e.withAudio?await r.audioFor(e,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(a){var c=a,d=true;}finally{var p=x(s,c,d);p&&await p;}}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a}=e;return Wr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await we.create({width:o,height:n,fps:i,codecName:Re,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await j.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return ze.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:a}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),a&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var _e=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var h=[];try{let{width:t,height:o,fps:n,outFiles:i,withAudio:s=!1,disableHwCodec:a=!1}=e;if(i.length===0)throw new Error("outFiles must contain at least one path");let c=i.map(y=>Me.kindFromPath(y));let d=!a&&c.includes("mp4");let p=g(h,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let l=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let m=[];for(let y=0;y<i.length;y++){let v=await Me.create({outFile:i[y],kind:c[y],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[y]==="mp4"&&l?u:void 0});p.use(v),m.push(v);}p.move();return new r({sinks:m,sharedHw:u,limiter:new pe(1),outFiles:i,opts:e})}catch(_){var b=_,S=true;}finally{var P=x(h,b,S);P&&await P;}}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=g(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(a=>a.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await j.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){var n=[];try{let t=g(n,new DisposableStack);let o=t.use(oe(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA));nodeAv.FFmpegError.throwIfError(o.fromBuffer(e),"bgraFrame.fromBuffer");t.move();return o}catch(i){var s=i,a=true;}finally{x(n,s,a);}}};function Qe(r,e){return r.width===e.width&&r.height===e.height}function di(r,e){return r.readUInt8(e)>>3|r.readUInt8(e+1)>>3<<5|r.readUInt8(e+2)>>3<<10|r.readUInt8(e+3)>>3<<15}function ui(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=new Map,s=new Map,a=0,c=0;for(let d=0;d<t;d+=n)for(let p=0;p<e;p+=o){let u=(d*e+p)*4,l=di(r,u),m=(i.get(l)??0)+1;i.set(l,m),s.has(l)||s.set(l,u),m>c&&(c=m,a=l);}return s.get(a)??0}function pi(r,e,t){let o=ui(r,e,t),n=r.readUInt8(o),i=r.readUInt8(o+1),s=r.readUInt8(o+2),a=r.readUInt8(o+3),c=0;for(let d=0;d<t;d+=4){let p=d>>2&3;for(let u=p;u<e;u+=4){let l=(d*e+u)*4;if((Math.abs(r.readUInt8(l)-n)>8||Math.abs(r.readUInt8(l+1)-i)>8||Math.abs(r.readUInt8(l+2)-s)>8||Math.abs(r.readUInt8(l+3)-a)>8)&&(c++,c>=16))return false}}return true}var be=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,pi(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var xe=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let c of this._bursts){e+=c,o=Math.max(o,c);let d=Math.max(0,c-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),a=1-(1-i)*(1-s);return {global:i,local:s,jank:a,expected:n,actual:this._actual,maxBurst:o}}};var Gr="audio-meta",zr="audio-chunk";function jr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,a)=>{let c=a.sampleRate;if(!Number.isFinite(c)||c<=0||c>192e3)return;let d=t();e.setupAudio(c);let p=Math.ceil(d*c/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,a)=>{let c=ArrayBuffer.isView(a)?a.byteLength:0;if(!(c===0||c>384e3||c%8!==0))try{await e.encodeAudio(a);}catch(d){o(d);}};return r.ipc.on(Gr,n),r.ipc.on(zr,i),()=>{r.ipc.removeListener(Gr,n),r.ipc.removeListener(zr,i);}}var ye=class{constructor(e){this._s=e;let t=path.dirname(e.outFiles[0]??".");this._pending=e.marks.map((o,n)=>({ms:o*1e3,index:n,path:path.join(t,`screenshot_${n}.png`)})).sort((o,n)=>o.ms-n.ms);}_s;_pending;_done=new Map;_writes=[];capture(e,t){for(;this._pending.length>0&&this._pending[0].ms<=e;)this.take(this._pending.shift(),t);}async finish(e){for(;e&&this._pending.length>0;)this.take(this._pending.shift(),e);return await Promise.all(this._writes),[...this._done.entries()].sort((t,o)=>t[0]-o[0]).map(([,t])=>t)}take(e,t){let{width:o,height:n}=this._s,i=electron.nativeImage.createFromBitmap(t,{width:o,height:n}).toPNG();this._done.set(e.index,e.path),this._writes.push(promises.writeFile(e.path,i));}};function Ze({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async(...i)=>{let s=0;for(;;){o?.throwIfAborted();try{let a=[r(...i)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(a)}catch(a){if(o?.throwIfAborted(),s++,s>=e)throw a;await He(2**s*100+Math.random()*100);}}}}var Xr="--pup-world=",Yr="--pup-audio";var et=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var tt="[Network]",Kr=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),gi=new Set(Kr.values()),_i=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function bi(r){for(let e of _i)if(r.startsWith(e))return true;return false}function xi(r){return r.startsWith("http")&&gi.has(new url.URL(r).hostname)}function ve(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=Kr.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Jr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new pe(256),s=new Map;async function a(d,p){let u=new et;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function c(d){s.get(d)?.signal();}n.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"&&!u.startsWith("pup-frame:")){p({redirectURL:`pup-frame://stub?src=${encodeURIComponent(u)}`});return}let l=t?ve(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return w.debug(tt,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),bi(u)?Promise.resolve():a(m,()=>{w.warn(tt,"maybe timeout:",{key:m,url:u,proxied:l,method:d.method,source:r});})});}),n.onHeadersReceived(({url:d,responseHeaders:p},u)=>{if(delete p?.["x-frame-options"],delete p?.["X-Frame-Options"],delete p?.["content-security-policy"],delete p?.["Content-Security-Policy"],t&&xi(d)){u({cancel:false,responseHeaders:{...p,"access-control-allow-origin":["*"]}});return}u({cancel:false,responseHeaders:p});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;c(p),w.debug(tt,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;c(p);let{url:u,method:l,error:m,resourceType:h}=d;w[o&&h==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](tt,"error:",{key:p,url:u,method:l,error:m,resourceType:h,source:r});});}function At(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var J="[Window]",Qr=new Error("window timeout"),vi=["Mixed Content: The page at"];function Pi({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,a)=>{let c=false,d=setTimeout(()=>p(n&&c?void 0:Qr),o),p=u=>{clearTimeout(d),u?a(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{w.debug(J,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{w.debug(J,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,l,m,h)=>{let _=`did-fail-load: ${JSON.stringify({url:h,source:r,code:l,desc:m})}`;w.error(J,_),p(new Error(_));}),e.webContents.once("preload-error",(u,l,m)=>{w.error(J,`preload-error: ${JSON.stringify({source:r,message:m.message})}`),p(m);}),e.webContents.once("render-process-gone",(u,{exitCode:l,reason:m})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;w.error(J,h),p(new Error(h));}),t();})}function Pe(r){return new Promise(e=>{At(r);let t=setTimeout(()=>{try{w.warn(J,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}var Ei={shoot:path.join(ce,"dist","runtime","shoot.global.js"),render:path.join(ce,"dist","runtime","render.global.js"),audio:path.join(ce,"dist","runtime","audio.global.js")};function Si(r){let e=r.deterministic?"shoot":r.withAudio?"audio":"render";return Ei[e]}async function Zr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:a}=e,c=a?ve(r):r,d=new electron.BrowserWindow({width:i,height:s+1,minWidth:i,minHeight:s+1,maxWidth:i,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegrationInSubFrames:true,sandbox:false,webSecurity:!e.disableWebSecurity,allowRunningInsecureContent:true,experimentalFeatures:true,preload:Jt,additionalArguments:[`${Xr}${Si(e)}`,...e.withAudio?[Yr]:[]]}});Jr({source:r,window:d,useInnerProxy:a,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:l,sourceId:m})=>{if(p==="warning"&&vi.find(_=>u.startsWith(_)))return;let h=[J,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?w.error(...h):w.debug(...h),e.onConsole(p,u);});try{let p=xr(c,{width:i,height:s});await Pi({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await Pe(d),p}return d}var Ci=Ze({fn:Zr,maxAttempts:2});async function rt({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await Ci({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>Zr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Qr)return w.warn(J,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:a,stack:c}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:c})}`)}n&&(n.webContents.removeAllListeners(),At(n),await He(2e3),await Pe(n));try{return await s()}catch(a){let{message:c,stack:d}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:d})}`)}}var eo="[Render]";async function to(r){var De=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;let u=g(De,await _e.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let l=new ye({marks:r.screenshots,width:o,height:n,outFiles:a});let m=Math.ceil(t*i);let h=1e3/t;let _={width:o,height:n+1};let b=0;let S;let P=[];let y;let v=0;let E;let A;let k;let I;let $=new be(o,n);let G=new xe(t);let Oe;let Ee=T=>{b++,$.sample(T),u.encodeBGRA(T).catch(F=>E??=F);};let ie=(T,F,z)=>{if(E??=d?.reason,E){k?.(E);return}let V=z.getSize();if(!Qe(V,_)){Te(M.webContents,_);return}let dt=z.toBitmap(),se=Ge(dt,V);if(se===void 0){E??=new Error(`no timestamp @ ${b}`);return}if(y!==void 0&&se-y<h*.8)return;let Ce=Buffer.from(dt.buffer,dt.byteOffset,n*o*4);if(S=Ce,l.capture(se,Ce),y===void 0)Ee(Ce),G.wrote();else {let Ot=se-y;if(Ot<=h*1.2)Ee(Ce),G.wrote();else {let Dt=Math.round(Ot/h);G.dropped(Dt-1),G.wrote();for(let Lt=0;Lt<Dt&&b<m;Lt++)Ee(Ce);}}y=se;let Nt=Math.floor(b/m*100);Nt!==v&&(v=Nt,p(v));let go=i*1e3;(se>=go-h*.5||b>=m)&&A?.();};let M=await rt({source:e,renderer:r,signal:d,onCreated:T=>{s&&(Oe=jr({wc:T.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:F=>E??=F}));}});let ct=M.webContents.debugger;try{M.webContents.stopPainting(),M.webContents.setFrameRate(t),M.webContents.on("paint",ie),M.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>k?.(d.reason),{once:!0}),await fr(ct),await new Promise((T,F)=>{[A,k]=[T,F];let z=0,V=0;I=We(async()=>{if(b!==z){z=b,V=0;return}V++,V>=t?k?.(new Error(`renderer stalled for ${Math.round(V*1e3/t)}ms @ ${b}`)):(V===1||V===Math.floor(t/2))&&await Te(M.webContents,_);},1e3/t);});}finally{I?.(),M.webContents.off("paint",ie),await Pe(M),Oe?.(),await u.finish(),P=await l.finish(S);}if(E||b===0)throw E??new Error("no frames captured");else {let T=$.finalize();T>=.5&&w.warn(eo,`${e} blank-frame ratio ${Math.round(T*100)}% \u2014 possible white/blank screen`);let{jank:F}=G.finalize();return F>=.25&&w.warn(eo,`${e} jank score ${F.toFixed(2)} \u2014 dropped frames`),{written:b,outFiles:a,blank:T,screenshots:P,jank:F}}}catch(Le){var L=Le,N=true;}finally{var Se=x(De,L,N);Se&&await Se;}}var Fi="[Video]";async function ro({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await ur(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),w.warn(Fi,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var oo="__pup_tick__";async function no(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${oo}&&window.${oo}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([re(n,5e3,"tick.executeJavaScript"),ro(r)]);}var ki="8000000";function ot(r,e){let t={signal:e,options:{rw_timeout:ki}};return api.Demuxer.open(r,t)}async function*io({src:r,meta:e,signal:t}){var y=[];try{let o=g(y,await ot(r,t),!0);let n=o.streams?.find(I=>I.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=g(y,await api.Decoder.create(n,{signal:t}));let{frameWidth:s,frameHeight:a,width:c,height:d,fps:p}=e;let u=s!==c||a!==d?`scale=${s}:${a},`:"";let l=g(y,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let m=0;for await(var h of l.frames(i.frames(o.packets(n.index)))){var _=[];try{let I=g(_,h);I&&(yield {idx:++m,buf:Bi(I)});}catch(b){var S=b,P=!0;}finally{x(_,S,P);}}}catch(v){var E=v,A=true;}finally{var k=x(y,E,A);k&&await k;}}function Bi(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let n=Buffer.allocUnsafe(e*r.height);for(let i=0;i<r.height;i++)o.copy(n,i*e,i*t,i*t+e);return n}var Mi="[DecodeSession]",Ni=4,Oi=16,Di=256*1024*1024,Li=3,nt=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Oi,Math.floor(Di/(e.frameWidth*e.frameHeight*4))),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_leadFrames;_keepCount;_pumpDone;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear(),await this._pumpDone;}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(n){!this._closed&&this._gen===t&&(o=true,w.warn(Mi,`[${this.meta.id.slice(0,8)}] decode pass failed: ${n instanceof Error?n.message:String(n)}`));}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=Li||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=io({src:this._src,meta:this.meta,signal:this._ctrl.signal});for await(let{idx:o,buf:n}of t){if(this._closed||this._gen!==e)return;let i=this._leadFrames+o;for(;!this._closed&&this._gen===e&&i>this.demand+Ni;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(i,n),this._ready=i,this.drainWaiters(),this.evict();}}get demand(){let e=this._want;for(let t of this._waiters)t.idx>e&&(e=t.idx);return e}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};async function so(r){var S=[];try{let e=g(S,await ot(r),!0);let t=e.streams?.find(A=>A.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!t)throw new Error("probe: no video stream");let o=e.duration>0?e.duration:0;let n=t.timeBase.num/t.timeBase.den;let i=g(S,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var l of e.packets(t.index)){var m=[];try{let A=g(m,l);try{for await(var a of i.frames(A)){var c=[];try{let k=g(c,a);if(k?.decodeErrorFlags===0){s=Math.max(0,Number(k.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(c,p,u);}}}catch{}}catch(h){var _=h,b=!0;}finally{x(m,_,b);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(P){var y=P,v=true;}finally{var E=x(S,y,v);E&&await E;}}async function co({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Re);if(!o)throw new Error(`stub: encoder not found: ${Re}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=g(i,new ge(n),!0);let u=g(i,await W({codec:o,width:r,height:e,fps:1e3,bitrate:1e5,pixelFormat:constants.AV_PIX_FMT_YUV420P,options:{deadline:"realtime","cpu-used":"8"}},"stubCtx.open2"));let l=p.addStream(u);await p.open();let m=g(i,new Bt(r,e));let h=BigInt(Math.max(1,Math.round(t*1e3)));m.frame.pts=0n;m.frame.duration=h;nodeAv.FFmpegError.throwIfError(await u.sendFrame(m.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let _=g(i,R());for(;;){let b=await u.receivePacket(_);if(b===constants.AVERROR_EAGAIN||b===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(b,"stubCtx.receivePacket"),_.streamIndex=l.index,_.duration=h,_.rescaleTs(u.timeBase,l.timeBase),await p.writePacket(_),_.unref();}}catch(s){var a=s,c=!0;}finally{var d=x(i,a,c);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var Bt=class{frame;_buf;constructor(e,t){let o=e*t,n=Math.ceil(e/2)*Math.ceil(t/2);this._buf=Buffer.alloc(o+n*2,128),this._buf.fill(0,0,o),this.frame=nodeAv.Frame.fromVideoBuffer(this._buf,{width:e,height:t,format:constants.AV_PIX_FMT_YUV420P});}[Symbol.dispose](){this.frame[Symbol.dispose]();}};var it=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=Ji(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?ve(e.src):e.src,i=await this.probeCached(n);if(this._closed)throw new Error("frame-server: closed");let s=i.width,a=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let d=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));s=uo(i.width*d),a=uo(i.height*d);}let c={id:t,width:i.width,height:i.height,frameWidth:s,frameHeight:a,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new nt(c,n),refs:1}),c}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?ve(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>co({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}async close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(this._sessions.delete(e),await t.session.close()));}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=Ze({fn:so})(e);return o.catch(()=>this._probes.delete(e)),this._probes.set(e,o),o}async closeAll(){this._closed=true;let e=[...this._sessions.values()];this._sessions.clear(),await Promise.all(e.map(t=>t.session.close()));}};function Ji(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function uo(r){let e=Math.round(r);return Math.max(2,e-e%2)}var mo="[FrameProtocol]",lo="pup-frame",Q={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function fo(r){let e=new it(r);return electron.protocol.handle(lo,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:Q});let o=new URL(t.url);w.debug(mo,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return Qi(await e.open({src:o.searchParams.get("src")??"",fps:st(o,"fps",30),dstW:st(o,"w",0),dstH:st(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return es(await e.getFrame(o.searchParams.get("id")??"",st(o,"idx",1)));case "stub":return Zi(await e.stub(o.searchParams.get("src")??""));case "close":return await e.close(o.searchParams.get("id")??""),new Response(null,{status:204,headers:Q});default:return new Response(`unknown action: ${o.hostname}`,{status:404,headers:Q})}}catch(n){let i=n instanceof Error?n.message:String(n);return w.error(mo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:Q})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(lo),await e.closeAll();}}}function Qi(r){return new Response(JSON.stringify(r),{headers:{...Q,"content-type":"application/json"}})}function Zi(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...Q,"content-type":"video/webm","cache-control":"no-store"}})}function es(r){if(r.byteLength===0)return new Response(null,{status:410,headers:Q});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...Q,"content-type":"application/octet-stream","cache-control":"no-store"}})}function st(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Ne="[Shoot]",ts=240;async function rs({win:r,fps:e,size:t,ms:o}){let n,i={width:t.width,height:t.height+1};try{return await new Promise(s=>{let a=(c,d,p)=>{let u=p.getSize();if(!Qe(u,i))return;let l=p.crop({x:0,y:i.height-2,width:ue,height:2}),m=Ge(l.toBitmap(),{width:ue,height:2});if(m===void 0||Math.abs(m-o)>1)return;let h=p.toBitmap();r.webContents.off("paint",a),s(Buffer.from(h.buffer,h.byteOffset,t.height*t.width*4));};r.webContents.on("paint",a),n=We(async c=>{c>=e*5?(w.warn(Ne,`paint timeout @ ${o}`),r.webContents.off("paint",a),s(void 0)):c%Math.floor(e/2)===0&&await Te(r.webContents,i);},1e3/e);})}finally{n?.();}}async function ho(r){var ie=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;s&&w.warn(Ne,"audio will be ignored on this mode");let u=new ye({marks:r.screenshots,width:o,height:n,outFiles:a});let l=g(ie,fo(r.useInnerProxy),!0);let m=performance.now();let h=rt({source:e,renderer:r,signal:d});let _=g(ie,await _e.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let b=await h;w.debug(Ne,"init done:",{source:e,cost:Math.round(performance.now()-m)});let S=Math.ceil(t*i);let P=1e3/t;let y=0;let v=0;let E=0;let A;let k=[];let I=new be(o,n);let $=new xe(t);let G=b.webContents.debugger;let Oe=b.webContents.mainFrame;let Ee=Oe.frames[0];try{b.webContents.setFrameRate(ts),await mr(G);for(let L=0;L<S;L++){d?.throwIfAborted();let N=(L+1)*P,Se=wr(b.webContents);Se.catch(()=>{}),await Promise.all([no({frame:Ee,timestampMs:N,signal:d}),hr(b.webContents,N)]),await Promise.all([pr(G,P),Se]);let T=await rs({source:e,fps:t,win:b,size:{width:o,height:n},ms:N});T?(E=0,$.wrote()):(E++,$.dropped(1));let F=T??A;if(!F||E>=t)throw new Error(`renderer exausted @ ${N}`);A=F,u.capture(N,F),I.sample(F),await _.encodeBGRA(F),y++;let z=Math.floor(y/S*100);z!==v&&(v=z,p(v));}}finally{await Pe(b),await _.finish(),k=await u.finish(A);}if(y===0)throw new Error("no frames captured");else {let L=I.finalize();L>=.5&&w.warn(Ne,`${e} blank-frame ratio ${Math.round(L*100)}% \u2014 possible white/blank screen`);let{jank:N}=$.finalize();return N>=.25&&w.warn(Ne,`${e} jank score ${N.toFixed(2)} \u2014 frames held past paint timeout`),{written:y,outFiles:a,blank:L,jank:N,screenshots:k}}}catch(M){var ct=M,De=true;}finally{var Le=x(ie,ct,De);Le&&await Le;}}var as="[App]";process.env.ELECTRON_DISABLE_SECURITY_WARNINGS="1";function wo(){w.debug(as,"gpu features:",electron.app.getGPUFeatureStatus());}var at=new AbortController,Mt=false;nr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",wo);electron.app.on("before-quit",r=>!Mt&&r.preventDefault());electron.app.on("will-quit",r=>!Mt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>at.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&at.abort(e.reason);});dr({name:"app",run:async(r,e)=>{let t=new Ue;try{await electron.app.whenReady(),br(),wo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?ho:to;at.signal.throwIfAborted();let n=await o({source:r,...e,signal:at.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)});await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{Mt=true,electron.app.exit();}}});
|
|
94
|
+
</html>`}function je(r,e){let{width:t,height:o}=e;if(t<pe||o<2)return;let n=o-1,i=0;for(let s=0;s<pe;s++){let c=(n*t+s)*4,d=(r[c]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function fr(r){return bt(r,"__pup_start_stego__()")}async function hr(r,e){await bt(r.debugger,`__pup_draw_stego__(${e})`);}async function wr(r){let e=new Promise(t=>r.ipc.once(jo,t));await re(e,5e3,"stego tick");}var xt="pup",Xo="pup-frame",gr={standard:true,secure:true,bypassCSP:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:xt,privileges:gr},{scheme:Xo,privileges:gr}]);function br(){electron.protocol.handle(xt,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=lr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function xr(r,e){let t=new URL(`${xt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var me=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};var Ie="libvpx-vp9";async function W(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=g(n,new DisposableStack);o.use(t);t.codecId=r.codec.id;t.width=r.width;t.height=r.height;t.pixelFormat=r.pixelFormat;t.timeBase=new nodeAv.Rational(1,r.fps);t.framerate=new nodeAv.Rational(r.fps,1);t.gopSize=r.fps*2;t.bitRate=BigInt(r.bitrate);t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);r.codecTag&&(t.codecTag=r.codecTag);r.colorRange!==void 0&&(t.colorRange=r.colorRange);r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[a,d]of Object.entries(r.options??{}))t.setOption(a,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,c=true;}finally{x(n,s,c);}}function oe(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=g(i,new DisposableStack);n.use(o);o.format=t;o.width=r;o.height=e;nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer");n.move();return o}catch(s){var c=s,a=true;}finally{x(i,c,a);}}function R(){let r=new nodeAv.Packet;return r.alloc(),r}async function le(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e);}finally{e.unref();}}}var z=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=oe(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=oe(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=R();}async png(){var o=[];try{let e=g(o,new DisposableStack);let t=new nodeAv.CodecContext;t.allocContext3(this._png);e.use(t);nodeAv.FFmpegError.throwIfError(await t.open2(this._png),"pngDecoder.open2");e.move();return t}catch(n){var i=n,s=true;}finally{x(o,i,s);}}async decodePNG(e){var o=[];try{let t=g(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{x(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var wn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Xe=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=R(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){var s=[];try{let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=g(s,new DisposableStack);let n=new nodeAv.CodecContext;n.allocContext3(t);o.use(n);n.codecId=t.id;n.sampleFormat=e.outSampleFmt;n.sampleRate=e.outSampleRate;n.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO;n.timeBase=new nodeAv.Rational(1,e.outSampleRate);n.bitRate=BigInt(e.bitrate);e.globalHeader&&n.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);nodeAv.FFmpegError.throwIfError(await n.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(n);o.move();return new r(n,i,e.outSampleFmt)}catch(c){var a=c,d=true;}finally{x(s,a,d);}}setInputRate(e){var l=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=g(l,new DisposableStack);let o=new nodeAv.FilterGraph;o.alloc();t.use(o);let n=nodeAv.Filter.getByName("abuffer");let i=o.createFilter(n,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let s=nodeAv.Filter.getByName("abuffersink");let c=o.createFilter(s,"sink");if(!c)throw new Error("Failed to create abuffersink");let a=wn[this._outFmt]??"flt";let d=`aformat=sample_fmts=${a}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`;let p=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]);let u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:c,padIdx:0}]);nodeAv.FFmpegError.throwIfError(o.parsePtr(d,u,p),"graph.parsePtr");nodeAv.FFmpegError.throwIfError(o.configSync(),"graph.config");t.move();this._graph=o;this._bufSrc=i;this._bufSink=c;}catch(m){var w=m,b=true;}finally{x(l,w,b);}}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=g(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,d=true;}finally{x(s,a,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),await this.drainCodec(e);}finally{this._filterFrame.unref();}}}drainCodec(e){return le(this._ctx,this._pkt,this._stream,e)}};function X(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var j=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},M=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var Y=Buffer.from([0,0,0,1]);var Pt=16;var Et=23,he=32,we=33,Ye=34,Ar=39;function kr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function St(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function L(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let a=n+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){i=a;break}let{type:s,layerId:c}=kr(r[n],r[n+1]);e.push({type:s,layerId:c,data:r.subarray(n,i)}),t=i;}return e}function Ct(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=kr(t[0],t[1]),[i,s]=St(o,e,n);return t[0]=i,t[1]=s,t}function V(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function ne(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var gn=48,Ir=24,_n=2,bn=10,Ft=0,xn=1;function Tr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Rr(r,e){let t=V(r);return Tr(t,e+_n,0),Tr(t,e+bn,1),ne(t)}function qe(r){let e=L(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===he?n=Rr(o.data,gn):o.type===we&&(n=Rr(o.data,Ir)),t.push(Y,n);}return Buffer.concat(t)}function yn(r,e,t){let o=V(r),n=new M(o),i=new j;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return ne(X(i.bits))}function vn(r,e,t,o){let n=V(r),i=new M(n),s=new j;for(let c=0;c<e;c++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return ne(X(s.bits))}function Br(r){let e=Ir+96;return yn(r,e,1)}function Mr(r){return vn(r,16,1,1)}function Pn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function En(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function Sn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=Pt&&e<=Et;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):En(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===xn||n===Ft)&&(r.read(1)&&(r.readUe(),n===Ft&&r.readUe()),n===Ft&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),Pn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Nr(r,e,t){let o=V(r),n=new M(o),i=new M(o),s=Sn(i,e,t),c=s%8===0?8:8-s%8,a=(s+c)/8,d=new j;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Pt&&e<=Et&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return ne(Buffer.concat([X(d.bits),o.subarray(a)]))}function Cn(r){let e=new M(V(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function Fn(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function An(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Or(r,e,t){let o=Cn(r);if(!o)return r;let n=new j;return Fn(n,o),An(n,o,e,t),n.bits.push(1),n.align(0),ne(X(n.bits))}function Dr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let c=new Uint32Array(t.buffer,t.byteOffset,s);for(let a=0;a<s;a++)e[a]=c[a]>>>24;}else for(let c=0;c<i;c++){let a=c*o+3,d=c*n;for(let p=0;p<n;p++)e[d+p]=t[a+p*4];}}function kn(r,e){return r===we?Br(e):r===Ye?Mr(e):e}function Lr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=L(e),n=L(t),i=new Map;for(let a of n){if(a.type===he)continue;let d=i.get(a.type)??[];d.push(a),i.set(a.type,d);}let s=[],c=new Set;for(let a of o){let d=a.type===he?Or(a.data,r.width,r.height):a.data;if(s.push(Y,d),!c.has(a.type)){c.add(a.type);for(let p of i.get(a.type)??[]){let u=kn(a.type,p.data);s.push(Y,Ct(u,1));}}}return s.push(Tn()),Buffer.concat(s)}function Tn(){let[t,o]=St(Ar,0,1),n=[],i=(s,c)=>{for(let a=c-1;a>=0;a--)n.push(s>>a&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([Y,Buffer.from([t,o]),Buffer.from([165,4]),X(n),Buffer.from([128])])}function Vr(r,e,t){let o=[];for(let n of r)o.push(Y,n.data);for(let n of e)if(n.type<he){let i=Nr(n.data,n.type,t);o.push(Y,Ct(i,1));}return Buffer.concat(o)}var Ke=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:c}=this._s,a=Vr(L(e.data),L(t.data),c);n.data=qe(a),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function q(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Mn(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Nn(r){let e=new M(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&q("sps_max_sub_layers_minus1",t,"0"),e.read(1),Mn(e,t),e.readUe();let o=e.readUe();o===3&&q("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let l=0;l<s;l++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&q("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&q("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&q("num_short_term_ref_pic_sets",a,"\u22641");let d=0;if(a===1){let l=e.readUe(),m=e.readUe();d=l+m;for(let w=0;w<l;w++)e.readUe(),e.read(1);for(let w=0;w<m;w++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&q("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:c,numShortTermRefPicSets:a,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function On(r){let e=new M(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&q("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&q("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Ur(r){let e=L(r),t=e.find(s=>s.type===we),o=e.find(s=>s.type===Ye);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Nn(V(t.data)),i=On(V(o.data));return {...n,...i}}var Je=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Ke({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var A=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let a={preset:"p4",bf:"0",tier:"main"};let d={codec:c,width:t,height:o,fps:n,bitrate:i,options:a};let p=g(A,new DisposableStack);let u=p.use(await W({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let l=p.use(await W({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!l.extraData)throw new Error("nvenc: codec extradata missing");let m=Ur(u.extraData);let w=s.addStream(u,"hvc1");let b=Lr({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});w.codecpar.extradata=qe(b);let _=t*o;let E=(t+1>>1)*(o+1>>1);let P=Buffer.alloc(_+E*2);P.fill(128,_);let y=p.use(R());let v=p.use(R());let S=p.use(oe(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:y,alphaPkt:v,stream:w,alphaSwFrame:S,alphaBuf:P,hevcCfg:m})}catch(k){var I=k,$=true;}finally{x(A,I,$);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,c=this._pts++;Dr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=c,i.duration=1n,e.pts=c,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var ge=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var l=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=g(l,new DisposableStack);let d=a.use(await W({codec:c,...s,codecTag:o,options:n},"videoCtx.open2"));let p=a.use(R());let u=i.addStream(d,o);a.move();return new r(d,p,u)}catch(m){var w=m,b=true;}finally{x(l,w,b);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return le(this._ctx,this._pkt,this._stream,e)}};var Qe=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var m=[];try{let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:c}=e;let a=i.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let d=await W({codec:a,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2");let p=g(m,new DisposableStack);p.use(d);let u=p.use(R());let l=c.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(w){var b=w,_=true;}finally{x(m,b,_);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return le(this._ctx,this._pkt,this._stream,e)}};var Ze="[Encoder]";async function Wr(r,e){var m=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:c}=r;let a=c??(s?void 0:api.HardwareContext.auto()??void 0);let d=!c&&!!a;try{if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc"))return h.debug(Ze,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Qe.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d};if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc"))return h.debug(Ze,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Je.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d}}catch(E){h.warn(Ze,"Hardware codec session limits reached, use software encoder",E),d&&a?.dispose();}h.debug(Ze,"using software libx265 HEVC alpha encoder");let p=g(m,new DisposableStack);let u=p.use(await ge.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}));let l=p.use(await z.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(w){var b=w,_=true;}finally{x(m,b,_);}}var _e=class{_ctx;_opened=false;_disposed=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=g(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{x(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(!this._disposed){this._disposed=true;try{if(this._opened){this._opened=!1;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput();}}}finally{await this._ctx[Symbol.asyncDispose]();}}}};var Ne=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){var s=[];try{let t=g(s,new AsyncDisposableStack,!0);let o=t.use(new _e(e.outFile));let n=e.kind==="mp4"?await r.mp4Video(e,o):await r.webmVideo(e,o);n.video&&t.use(n.video);n.hwVideo&&t.use(n.hwVideo);n.codec&&t.use(n.codec);n.ownsHw&&n.hw&&t.use(n.hw);let i=e.withAudio?await r.audioFor(e,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(c){var a=c,d=true;}finally{var p=x(s,a,d);p&&await p;}}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c}=e;return Wr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await ge.create({width:o,height:n,fps:i,codecName:Ie,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await z.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return Xe.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var be=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var w=[];try{let{width:t,height:o,fps:n,outFiles:i,withAudio:s=!1,disableHwCodec:c=!1}=e;if(i.length===0)throw new Error("outFiles must contain at least one path");let a=i.map(y=>Ne.kindFromPath(y));let d=!c&&a.includes("mp4");let p=g(w,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let l=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let m=[];for(let y=0;y<i.length;y++){let v=await Ne.create({outFile:i[y],kind:a[y],width:t,height:o,fps:n,withAudio:s,disableHwCodec:c,sharedHw:a[y]==="mp4"&&l?u:void 0});p.use(v),m.push(v);}p.move();return new r({sinks:m,sharedHw:u,limiter:new me(1),outFiles:i,opts:e})}catch(b){var _=b,E=true;}finally{var P=x(w,_,E);P&&await P;}}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=g(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await z.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){var n=[];try{let t=g(n,new DisposableStack);let o=t.use(oe(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA));nodeAv.FFmpegError.throwIfError(o.fromBuffer(e),"bgraFrame.fromBuffer");t.move();return o}catch(i){var s=i,c=true;}finally{x(n,s,c);}}};function et(r,e){return r.width===e.width&&r.height===e.height}function pi(r,e){return r.readUInt8(e)>>3|r.readUInt8(e+1)>>3<<5|r.readUInt8(e+2)>>3<<10|r.readUInt8(e+3)>>3<<15}function mi(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=new Map,s=new Map,c=0,a=0;for(let d=0;d<t;d+=n)for(let p=0;p<e;p+=o){let u=(d*e+p)*4,l=pi(r,u),m=(i.get(l)??0)+1;i.set(l,m),s.has(l)||s.set(l,u),m>a&&(a=m,c=l);}return s.get(c)??0}function li(r,e,t){let o=mi(r,e,t),n=r.readUInt8(o),i=r.readUInt8(o+1),s=r.readUInt8(o+2),c=r.readUInt8(o+3),a=0;for(let d=0;d<t;d+=4){let p=d>>2&3;for(let u=p;u<e;u+=4){let l=(d*e+u)*4;if((Math.abs(r.readUInt8(l)-n)>8||Math.abs(r.readUInt8(l+1)-i)>8||Math.abs(r.readUInt8(l+2)-s)>8||Math.abs(r.readUInt8(l+3)-c)>8)&&(a++,a>=16))return false}}return true}var xe=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,li(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var ye=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let d=Math.max(0,a-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),c=1-(1-i)*(1-s);return {global:i,local:s,jank:c,expected:n,actual:this._actual,maxBurst:o}}};var Gr="audio-meta",zr="audio-chunk";function jr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,c)=>{let a=c.sampleRate;if(!Number.isFinite(a)||a<=0||a>192e3)return;let d=t();e.setupAudio(a);let p=Math.ceil(d*a/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,c)=>{let a=ArrayBuffer.isView(c)?c.byteLength:0;if(!(a===0||a>384e3||a%8!==0))try{await e.encodeAudio(c);}catch(d){o(d);}};return r.ipc.on(Gr,n),r.ipc.on(zr,i),()=>{r.ipc.removeListener(Gr,n),r.ipc.removeListener(zr,i);}}var ve=class{constructor(e){this._s=e;let t=path.dirname(e.outFiles[0]??".");this._pending=e.marks.map((o,n)=>({ms:o*1e3,index:n,path:path.join(t,`screenshot_${n}.png`)})).sort((o,n)=>o.ms-n.ms);}_s;_pending;_done=new Map;_writes=[];capture(e,t){for(;this._pending.length>0&&this._pending[0].ms<=e;)this.take(this._pending.shift(),t);}async finish(e){for(;e&&this._pending.length>0;)this.take(this._pending.shift(),e);return await Promise.all(this._writes),[...this._done.entries()].sort((t,o)=>t[0]-o[0]).map(([,t])=>t)}take(e,t){let{width:o,height:n}=this._s,i=electron.nativeImage.createFromBitmap(t,{width:o,height:n}).toPNG();this._done.set(e.index,e.path),this._writes.push(promises.writeFile(e.path,i));}};function tt({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async(...i)=>{let s=0;for(;;){o?.throwIfAborted();try{let c=[r(...i)];return t&&c.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(c)}catch(c){if(o?.throwIfAborted(),s++,s>=e)throw c;await $e(2**s*100+Math.random()*100);}}}}var Xr="--pup-world=",Yr="--pup-audio";var rt=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var ot="[Network]",Kr=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),bi=new Set(Kr.values()),xi=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function yi(r){for(let e of xi)if(r.startsWith(e))return true;return false}function vi(r){return r.startsWith("http")&&bi.has(new url.URL(r).hostname)}function Pe(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=Kr.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Jr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new me(256),s=new Map;async function c(d,p){let u=new rt;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function a(d){s.get(d)?.signal();}n.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"&&!u.startsWith("pup-frame:")){p({redirectURL:`pup-frame://stub?src=${encodeURIComponent(u)}`});return}let l=t?Pe(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return h.debug(ot,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),yi(u)?Promise.resolve():c(m,()=>{h.warn(ot,"maybe timeout:",{key:m,url:u,proxied:l,method:d.method,source:r});})});}),n.onHeadersReceived(({url:d,responseHeaders:p},u)=>{if(delete p?.["x-frame-options"],delete p?.["X-Frame-Options"],delete p?.["content-security-policy"],delete p?.["Content-Security-Policy"],t&&vi(d)){u({cancel:false,responseHeaders:{...p,"access-control-allow-origin":["*"]}});return}u({cancel:false,responseHeaders:p});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;a(p),h.debug(ot,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;a(p);let{url:u,method:l,error:m,resourceType:w}=d;h[o&&w==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](ot,"error:",{key:p,url:u,method:l,error:m,resourceType:w,source:r});});}function At(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var K="[Window]",Qr=new Error("window timeout"),Ei=["Mixed Content: The page at"];function Si({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,c)=>{let a=false,d=setTimeout(()=>p(n&&a?void 0:Qr),o),p=u=>{clearTimeout(d),u?c(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{h.debug(K,"dom-ready:",{source:r}),a=true;}),e.webContents.once("did-stop-loading",()=>{h.debug(K,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,l,m,w)=>{let b=`did-fail-load: ${JSON.stringify({url:w,source:r,code:l,desc:m})}`;h.error(K,b),p(new Error(b));}),e.webContents.once("preload-error",(u,l,m)=>{h.error(K,`preload-error: ${JSON.stringify({source:r,message:m.message})}`),p(m);}),e.webContents.once("render-process-gone",(u,{exitCode:l,reason:m})=>{let w=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;h.error(K,w),p(new Error(w));}),t();})}function Ee(r){return new Promise(e=>{At(r);let t=setTimeout(()=>{try{h.warn(K,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}var Ci={shoot:path.join(de,"dist","runtime","shoot.global.js"),render:path.join(de,"dist","runtime","render.global.js"),audio:path.join(de,"dist","runtime","audio.global.js")};function Fi(r){let e=r.deterministic?"shoot":r.withAudio?"audio":"render";return Ci[e]}async function Zr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:c}=e,a=c?Pe(r):r,d=new electron.BrowserWindow({width:i,height:s+1,minWidth:i,minHeight:s+1,maxWidth:i,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegrationInSubFrames:true,sandbox:false,webSecurity:!e.disableWebSecurity,allowRunningInsecureContent:true,experimentalFeatures:true,preload:Jt,additionalArguments:[`${Xr}${Fi(e)}`,...e.withAudio?[Yr]:[]]}});Jr({source:r,window:d,useInnerProxy:c,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:l,sourceId:m})=>{if(p==="warning"&&Ei.find(b=>u.startsWith(b)))return;let w=[K,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?h.error(...w):h.debug(...w),e.onConsole(p,u);});try{let p=xr(a,{width:i,height:s});await Si({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await Ee(d),p}return d}var Ai=tt({fn:Zr,maxAttempts:2});async function nt({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await Ai({source:r,renderer:e,signal:o});}catch(c){i=c;}let s=()=>Zr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Qr)return h.warn(K,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:c,stack:a}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:c,stack:a})}`)}n&&(n.webContents.removeAllListeners(),At(n),await $e(2e3),await Ee(n));try{return await s()}catch(c){let{message:a,stack:d}=c;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:a,stack:d})}`)}}var eo="[Render]";async function to(r){var Ve=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:c,disableHwCodec:a,signal:d,onProgress:p}=r;let u=g(Ve,await be.create({width:o,height:n,fps:t,outFiles:c,withAudio:s,disableHwCodec:a}),!0);let l=new ve({marks:r.screenshots,width:o,height:n,outFiles:c});let m=Math.ceil(t*i);let w=1e3/t;let b={width:o,height:n+1};let _=0;let E;let P=[];let y;let v=0;let S;let A;let k;let I;let $=new xe(o,n);let G=new ye(t);let Le;let Se=T=>{_++,$.sample(T),u.encodeBGRA(T).catch(F=>S??=F);};let ie=(T,F,Z)=>{if(S??=d?.reason,S){k?.(S);return}let B=Z.getSize();if(!et(B,b)){Re(N.webContents,b);return}let se=Z.toBitmap(),ae=je(se,B);if(ae===void 0){S??=new Error(`no timestamp @ ${_}`);return}if(y!==void 0&&ae-y<w*.8)return;let Fe=Buffer.from(se.buffer,se.byteOffset,n*o*4);if(E=Fe,l.capture(ae,Fe),y===void 0)Se(Fe),G.wrote();else {let Ot=ae-y;if(Ot<=w*1.2)Se(Fe),G.wrote();else {let Dt=Math.round(Ot/w);G.dropped(Dt-1),G.wrote();for(let Lt=0;Lt<Dt&&_<m;Lt++)Se(Fe);}}y=ae;let Nt=Math.floor(_/m*100);Nt!==v&&(v=Nt,p(v));let bo=i*1e3;(ae>=bo-w*.5||_>=m)&&A?.();};let N=await nt({source:e,renderer:r,signal:d,onCreated:T=>{s&&(Le=jr({wc:T.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:F=>S??=F}));}});let dt=N.webContents.debugger;try{N.webContents.stopPainting(),N.webContents.setFrameRate(t),N.webContents.on("paint",ie),N.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>k?.(d.reason),{once:!0}),await fr(dt),await new Promise((T,F)=>{[A,k]=[T,F];let Z=0,B=0;I=Ge(async()=>{if(_!==Z){Z=_,B=0;return}B++,B>=t?k?.(new Error(`renderer stalled for ${Math.round(B*1e3/t)}ms @ ${_}`)):(B===1||B===Math.floor(t/2))&&await Re(N.webContents,b);},1e3/t);});}finally{I?.(),N.webContents.off("paint",ie),await Ee(N),Le?.(),await u.finish(),P=await l.finish(E);}if(S||_===0)throw S??new Error("no frames captured");else {let T=$.finalize();T>=.5&&h.warn(eo,`${e} blank-frame ratio ${Math.round(T*100)}% \u2014 possible white/blank screen`);let{jank:F}=G.finalize();return F>=.25&&h.warn(eo,`${e} jank score ${F.toFixed(2)} \u2014 dropped frames`),{written:_,outFiles:c,blank:T,screenshots:P,jank:F}}}catch(Ue){var D=Ue,O=true;}finally{var Ce=x(Ve,D,O);Ce&&await Ce;}}var ki="[Rerender]",ro=3;async function oo(r,e){let t;for(let o=1;o<=ro;o++)try{return await e()}catch(n){r.throwIfAborted(),t=n,h.warn(ki,`retry ${o}/${ro}: ${n.message}`);}throw t}var Ti="[Video]";async function no({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await ur(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),h.warn(Ti,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var io="__pup_tick__";async function so(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${io}&&window.${io}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([re(n,5e3,"tick.executeJavaScript"),no(r)]);}var Ii="8000000";function it(r,e){let t={signal:e,options:{rw_timeout:Ii}};return api.Demuxer.open(r,t)}async function*ao({src:r,meta:e,signal:t}){var y=[];try{let o=g(y,await it(r,t),!0);let n=o.streams?.find(I=>I.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=g(y,await api.Decoder.create(n,{signal:t}));let{frameWidth:s,frameHeight:c,width:a,height:d,fps:p}=e;let u=s!==a||c!==d?`scale=${s}:${c},`:"";let l=g(y,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let m=0;for await(var w of l.frames(i.frames(o.packets(n.index)))){var b=[];try{let I=g(b,w);I&&(yield {idx:++m,buf:Oi(I)});}catch(_){var E=_,P=!0;}finally{x(b,E,P);}}}catch(v){var S=v,A=true;}finally{var k=x(y,S,A);k&&await k;}}function Oi(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let n=Buffer.allocUnsafe(e*r.height);for(let i=0;i<r.height;i++)o.copy(n,i*e,i*t,i*t+e);return n}var Di="[DecodeSession]",Li=4,Vi=16,Ui=256*1024*1024,Hi=3,st=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Vi,Math.floor(Ui/(e.frameWidth*e.frameHeight*4))),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_leadFrames;_keepCount;_pumpDone;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear(),await this._pumpDone;}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(n){!this._closed&&this._gen===t&&(o=true,h.warn(Di,`[${this.meta.id.slice(0,8)}] decode pass failed: ${n instanceof Error?n.message:String(n)}`));}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=Hi||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=ao({src:this._src,meta:this.meta,signal:this._ctrl.signal});for await(let{idx:o,buf:n}of t){if(this._closed||this._gen!==e)return;let i=this._leadFrames+o;for(;!this._closed&&this._gen===e&&i>this.demand+Li;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(i,n),this._ready=i,this.drainWaiters(),this.evict();}}get demand(){let e=this._want;for(let t of this._waiters)t.idx>e&&(e=t.idx);return e}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};async function co(r){var E=[];try{let e=g(E,await it(r),!0);let t=e.streams?.find(A=>A.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!t)throw new Error("probe: no video stream");let o=e.duration>0?e.duration:0;let n=t.timeBase.num/t.timeBase.den;let i=g(E,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var l of e.packets(t.index)){var m=[];try{let A=g(m,l);try{for await(var c of i.frames(A)){var a=[];try{let k=g(a,c);if(k?.decodeErrorFlags===0){s=Math.max(0,Number(k.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(a,p,u);}}}catch{}}catch(w){var b=w,_=!0;}finally{x(m,b,_);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(P){var y=P,v=true;}finally{var S=x(E,y,v);S&&await S;}}async function po({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Ie);if(!o)throw new Error(`stub: encoder not found: ${Ie}`);let n=path.join(os$1.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=g(i,new _e(n),!0);let u=g(i,await W({codec:o,width:r,height:e,fps:1e3,bitrate:1e5,pixelFormat:constants.AV_PIX_FMT_YUV420P,options:{deadline:"realtime","cpu-used":"8"}},"stubCtx.open2"));let l=p.addStream(u);await p.open();let m=g(i,new Bt(r,e));let w=BigInt(Math.max(1,Math.round(t*1e3)));m.frame.pts=0n;m.frame.duration=w;nodeAv.FFmpegError.throwIfError(await u.sendFrame(m.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let b=g(i,R());for(;;){let _=await u.receivePacket(b);if(_===constants.AVERROR_EAGAIN||_===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(_,"stubCtx.receivePacket"),b.streamIndex=l.index,b.duration=w,b.rescaleTs(u.timeBase,l.timeBase),await p.writePacket(b),b.unref();}}catch(s){var c=s,a=!0;}finally{var d=x(i,c,a);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var Bt=class{frame;_buf;constructor(e,t){let o=e*t,n=Math.ceil(e/2)*Math.ceil(t/2);this._buf=Buffer.alloc(o+n*2,128),this._buf.fill(0,0,o),this.frame=nodeAv.Frame.fromVideoBuffer(this._buf,{width:e,height:t,format:constants.AV_PIX_FMT_YUV420P});}[Symbol.dispose](){this.frame[Symbol.dispose]();}};var at=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=es(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?Pe(e.src):e.src,i=await this.probeCached(n);if(this._closed)throw new Error("frame-server: closed");let s=i.width,c=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let d=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));s=mo(i.width*d),c=mo(i.height*d);}let a={id:t,width:i.width,height:i.height,frameWidth:s,frameHeight:c,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new st(a,n),refs:1}),a}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?Pe(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>po({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}async close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(this._sessions.delete(e),await t.session.close()));}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=tt({fn:co})(e);return o.catch(()=>this._probes.delete(e)),this._probes.set(e,o),o}async closeAll(){this._closed=true;let e=[...this._sessions.values()];this._sessions.clear(),await Promise.all(e.map(t=>t.session.close()));}};function es(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function mo(r){let e=Math.round(r);return Math.max(2,e-e%2)}var fo="[FrameProtocol]",ho="pup-frame",J={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function wo(r){let e=new at(r);return electron.protocol.handle(ho,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:J});let o=new URL(t.url);h.debug(fo,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return ts(await e.open({src:o.searchParams.get("src")??"",fps:ct(o,"fps",30),dstW:ct(o,"w",0),dstH:ct(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return os(await e.getFrame(o.searchParams.get("id")??"",ct(o,"idx",1)));case "stub":return rs(await e.stub(o.searchParams.get("src")??""));case "close":return await e.close(o.searchParams.get("id")??""),new Response(null,{status:204,headers:J});default:return new Response(`unknown action: ${o.hostname}`,{status:404,headers:J})}}catch(n){let i=n instanceof Error?n.message:String(n);return h.error(fo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:J})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(ho),await e.closeAll();}}}function ts(r){return new Response(JSON.stringify(r),{headers:{...J,"content-type":"application/json"}})}function rs(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"video/webm","cache-control":"no-store"}})}function os(r){if(r.byteLength===0)return new Response(null,{status:410,headers:J});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"application/octet-stream","cache-control":"no-store"}})}function ct(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Oe="[Shoot]",ns=240;async function is({win:r,fps:e,size:t,ms:o}){let n,i={width:t.width,height:t.height+1},s=Math.abs(1e3/e-o)<1;try{return await new Promise(c=>{let a=(u,l,m)=>{let w=m.getSize();if(!et(w,i))return;let b=m.crop({x:0,y:i.height-2,width:pe,height:2}),_=je(b.toBitmap(),{width:pe,height:2});if(_===void 0||o-_>1)return;let E=m.toBitmap();r.webContents.off("paint",a),c({ts:_,pix:Buffer.from(E.buffer,E.byteOffset,t.height*t.width*4)});};r.webContents.on("paint",a);let d=s?e*10:e*5,p=Math.floor(s?e:e/2);n=Ge(async u=>{u>=d?(h.warn(Oe,`paint timeout @ ${o}`),r.webContents.off("paint",a),c(void 0)):u%p===0&&await Re(r.webContents,i);},1e3/e);})}finally{n?.();}}async function go(r){var ie=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:c,disableHwCodec:a,signal:d,onProgress:p}=r;s&&h.warn(Oe,"audio will be ignored on this mode");let u=new ve({marks:r.screenshots,width:o,height:n,outFiles:c});let l=g(ie,wo(r.useInnerProxy),!0);let m=performance.now();let w=nt({source:e,renderer:r,signal:d});let b=g(ie,await be.create({width:o,height:n,fps:t,outFiles:c,withAudio:s,disableHwCodec:a}),!0);let _=await w;h.debug(Oe,"init done:",{source:e,cost:Math.round(performance.now()-m)});let E=Math.ceil(t*i);let P=1e3/t;let y=0;let v=0;let S=0;let A;let k=[];let I=new xe(o,n);let $=new ye(t);let G=_.webContents.debugger;let Le=_.webContents.mainFrame;let Se=Le.frames[0];try{_.webContents.setFrameRate(ns),await mr(G);for(let D=0;D<E;D++){d?.throwIfAborted();let O=(D+1)*P,Ce=wr(_.webContents);Ce.catch(()=>{}),await Promise.all([so({frame:Se,timestampMs:O,signal:d}),hr(_.webContents,O)]),await Promise.all([pr(G,P),Ce]);let T=await is({source:e,fps:t,win:_,size:{width:o,height:n},ms:O});T?(S=0,$.wrote()):(S++,$.dropped(1));let F=T??A;if(!F||S>=t)throw new Error(`renderer exausted @ ${O}`);let Z=Math.max(1,Math.ceil(F.ts/P-D));A=F;for(let se=0;se<Z;se++)u.capture(O,F.pix),I.sample(F.pix),await b.encodeBGRA(F.pix),y++;let B=Math.floor(y/E*100);B!==v&&(v=B,p(v));}}finally{await Ee(_),await b.finish(),k=await u.finish(A?.pix);}if(y===0)throw new Error("no frames captured");else {let D=I.finalize();D>=.5&&h.warn(Oe,`${e} blank-frame ratio ${Math.round(D*100)}% \u2014 possible white/blank screen`);let{jank:O}=$.finalize();return O>=.25&&h.warn(Oe,`${e} jank score ${O.toFixed(2)} \u2014 frames held past paint timeout`),{written:y,outFiles:c,blank:D,jank:O,screenshots:k}}}catch(N){var dt=N,Ve=true;}finally{var Ue=x(ie,dt,Ve);Ue&&await Ue;}}var us="[App]";process.env.ELECTRON_DISABLE_SECURITY_WARNINGS="1";function _o(){h.debug(us,"gpu features:",electron.app.getGPUFeatureStatus());}var De=new AbortController,Mt=false;nr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",_o);electron.app.on("before-quit",r=>!Mt&&r.preventDefault());electron.app.on("will-quit",r=>!Mt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>De.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&De.abort(e.reason);});dr({name:"app",run:async(r,e)=>{let t=new We;try{await electron.app.whenReady(),br(),_o();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?go:to;De.signal.throwIfAborted();let n=await oo(De.signal,()=>o({source:r,...e,signal:De.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)}));await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{Mt=true,electron.app.exit();}}});
|
|
95
95
|
//# sourceMappingURL=app.cjs.map
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErY2JkMDZiZTE1OWE5MGZhZS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcnVudGltZS93b3JsZC50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vb3Blbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3R1Yi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInBhcnNlQXJyYXkiLCJpdGVtIiwicyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBQcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEVTIiwicmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJhYm9ydGFibGUiLCJvbkFib3J0IiwicGVyaW9kaWNhbCIsImNhbGxiYWNrIiwidG9rZW4iLCJjbG9zZWQiLCJ0aWNrIiwiY291bnQiLCJuZXh0IiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiZXZhbEluIiwiZXhwcmVzc2lvbiIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwiXyIsInBhdXNlVmlydHVhbFRpbWUiLCJyZWJ1aWxkRHJhd2FibGUiLCJ3ZWIiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJvcGVuVmlkZW9DdHgiLCJfc3RhY2siLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJzdGFjayIsIl9fdXNpbmciLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiYnl0ZXMiLCJTY3JlZW5zaG90VGFrZXIiLCJfcyIsImRpciIsInNlYyIsImluZGV4IiwiY3VycmVudFRpbWVNcyIsImZpbmFsQmdyYSIsIm5hdGl2ZUltYWdlIiwid3JpdGVGaWxlIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJXT1JMRF9BUkciLCJBVURJT19BUkciLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwidGFyZ2V0cyIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwiaXNQcm94eVRhcmdldCIsIlVSTCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJzdHViTWVkaWEiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJfcGF0aCIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsIldPUkxEX1NDUklQVFMiLCJwaWNrV29ybGRTY3JpcHQiLCJyZW5kZXJlciIsIm1vZGUiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0YWtlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0RnJhbWUiLCJzY3JlZW5zaG90cyIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiY2xlYXJTdHVja0NoZWNrIiwiYmxhbmtTdGF0cyIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJibGFuayIsImphbmsiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJUSUNLX1NZTUJPTCIsImV4cHIiLCJ0aWNrRXYiLCJSV19USU1FT1VUX1VTIiwib3BlbklucHV0IiwiRGVtdXhlciIsImRlY29kZUZyYW1lcyIsIm1ldGEiLCJBVk1FRElBX1RZUEVfVklERU8iLCJkZWMiLCJEZWNvZGVyIiwiZnJhbWVXaWR0aCIsImZyYW1lSGVpZ2h0Iiwic2NhbGUiLCJmaWx0ZXIiLCJGaWx0ZXJBUEkiLCJfZnJhbWUiLCJwYWNrUmdiYSIsInJvdyIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJpZHgiLCJoaXQiLCJmYWlscyIsImdlbiIsImZhaWxlZCIsImF0IiwiZmxvb3IiLCJ0YiIsImxlYWRHYXAiLCJvdXRlciIsIl9wa3QiLCJlbmNvZGVTdHViV2VibSIsInRtcGRpciIsInJhbmRvbUJ5dGVzIiwic3R1YiIsIlN0dWJGcmFtZSIsInJlYWRGaWxlIiwicm0iLCJsdW1hIiwiY2hyb21hIiwiRnJhbWVTZXJ2ZXIiLCJfdXNlSW5uZXJQcm94eSIsImlkIiwiZXZlbiIsInJlYWwiLCJzZXNzaW9ucyIsImNyZWF0ZUhhc2giLCJTQ0hFTUUiLCJDT1JTX0hFQURFUlMiLCJ1c2VGcmFtZVByb3RvY29sIiwiZnMiLCJqc29uT2siLCJpbnQiLCJyZ2JhT2siLCJ3ZWJtT2siLCJjb3B5IiwiZmFsbGJhY2siLCJSRU5ERVJfRlBTIiwiY2xlYXJEaXJ0eUNoZWNrIiwiX2QiLCJzbGl2ZXIiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJoZWxkIiwibGFzdEJpdG1hcCIsIm1haW4iLCJpZnJhbWUiLCJmcmFtZU1zIiwicGFpbnRlZCIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCJdLCJtYXBwaW5ncyI6Iit5RUFLQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxHQUFBLENBQ2hCLElBQUksR0FBQSxDQUFJLENBQUEsS0FBQSxFQUFRLFVBQVUsQ0FBQSxDQUFFLENBQUEsQ0FBRSxJQUFBLENBQzdCLFNBQVMsYUFBQSxFQUFpQixRQUFBLENBQVMsYUFBQSxDQUFjLE9BQUEsQ0FBUSxXQUFBLEVBQVksR0FBTSxTQUMxRSxRQUFBLENBQVMsYUFBQSxDQUFjLEdBQUEsQ0FDdkIsSUFBSSxHQUFBLENBQUksU0FBQSxDQUFXLFNBQVMsT0FBTyxDQUFBLENBQUUsSUFBQSxDQUVoQ0MsQ0FBQUEsQ0FBZ0NELEVBQUFBLEVBQWlCLENDTnZELFNBQVNFLEVBQUFBLENBQVFDLENBQUFBLENBQWNDLENBQUFBLENBQXNCQyxFQUFpQyxDQUMzRixHQUFJLENBQ0YsT0FBT0QsQ0FBQUEsQ0FBTyxPQUFBLENBQVEsSUFBSUQsQ0FBSSxDQUFDLENBQ2pDLENBQUEsS0FBUSxDQUNOLE9BQU9FLENBQ1QsQ0FDRixDQ1ZPLFNBQVNDLENBQUFBLENBQVlDLENBQUFBLENBQW9CLENBQzlDLEdBQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQ2YsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFNQyxDQUFBQSxDQUFNLE9BQU9ELENBQUMsQ0FBQSxDQUNwQixHQUFJLE1BQUEsQ0FBTyxLQUFBLENBQU1DLENBQUcsRUFDbEIsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLE1BQUEsRUFBU0QsQ0FBQyxDQUFBLHNCQUFBLENBQXdCLEVBRXBELE9BQU9DLENBQ1QsQ0FFTyxTQUFTQyxFQUFBQSxDQUFZRixDQUFBQSxDQUFvQixDQUM5QyxPQUFJLE9BQU9BLENBQUFBLEVBQU0sUUFBQSxDQUNSQSxDQUFBQSxDQUVGLE1BQUEsQ0FBT0EsQ0FBQyxDQUNqQixDQUdPLFNBQVNHLEVBQUFBLENBQWNDLENBQUFBLENBQThDLENBQzFFLE9BQVFKLENBQUFBLEVBQ0YsT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLEVBQVlBLENBQUFBLENBQUUsSUFBQSxLQUFXLEVBQUEsQ0FDakMsRUFBQyxDQUVIQSxDQUFBQSxDQUFFLEtBQUEsQ0FBTSxHQUFHLEVBQUUsR0FBQSxDQUFLSyxDQUFBQSxFQUFNRCxDQUFBQSxDQUFLQyxDQUFBQSxDQUFFLElBQUEsRUFBTSxDQUFDLENBRWpELENDckJBLElBQU1DLEVBQUFBLENBQVVDLHNCQUFBQSxDQUFjYixDQUFlLEVBRWhDYyxFQUFBQSxDQUFjYixFQUFBQSxDQUFLLGVBQUEsQ0FBaUJJLENBQUFBLENBQWEsQ0FBQyxDQUFBLENBRWxEVSxHQUFhQyxZQUFBQSxDQUFRSixFQUFBQSxDQUFRLE9BQUEsQ0FBUSwyQkFBMkIsQ0FBQyxDQUFBLENBQ3hESyxTQUFBQSxDQUFLRixFQUFBQSxDQUFZLE1BQUEsQ0FBUSxTQUFTLENBQUEsS0FDM0NHLEVBQUFBLENBQWFELFVBQUtGLEVBQUFBLENBQVksTUFBQSxDQUFRLFNBQUEsQ0FBVyxhQUFhLEVDSTNFLElBQU1JLEdBQVEsYUFBQSxDQUNSQyxFQUFBQSxDQUFPLFlBQUEsQ0FDUEMsRUFBQUEsQ0FBTyxZQUFBLENBQ1BDLEVBQUFBLENBQVEsYUFBQSxDQUNSQyxFQUFBQSxDQUFRLGFBQUEsQ0FFZCxTQUFTQyxFQUFBQSxDQUFVQyxDQUFBQSxDQUE2Q0MsQ0FBQUEsQ0FBdUMsQ0FDckcsT0FBTyxTQUFBLEdBQTJCQyxDQUFBQSxDQUFxQixDQUNyRCxJQUFNQyxDQUFBQSxDQUFZRCxDQUFBQSxDQUFTLElBQUtFLENBQUFBLEVBQ3ZCQSxDQUFBQSxZQUFlLEtBQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxLQUFBLEVBQVMsTUFBQSxDQUFPQSxDQUFHLENBQUEsQ0FBS0EsQ0FDNUQsQ0FBQSxDQUNELE9BQU9KLENBQUFBLENBQU8sSUFBQSxDQUFLLEtBQU0sR0FBR0csQ0FBUyxDQUN2QyxDQUNGLENBOUJBLElBQUFFLEdBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBa0VFRCxFQUFBQSxDQUFBLENBQUNWLEVBQUFBLENBQUFBLENBS0RTLEVBQUFBLENBQUEsQ0FBQ1QsRUFBQUEsQ0FBQUEsQ0FLRFEsRUFBQUEsQ0FBQSxDQUFDUixJQUtETyxFQUFBQSxDQUFBLENBQUNQLEVBQUFBLENBQUFBLENBS0RNLEVBQUFBLENBQUEsQ0FBQ04sRUFBQUEsQ0FBQUEsQ0F0REksSUFBTVksQ0FBQUEsQ0FBTixLQUFtQyxDQThCeEMsV0FBQSxDQUFvQkMsQ0FBQUEsQ0FBaUJ2QixFQUFBQSxDQUFhLENBQTlCLElBQUEsQ0FBQSxNQUFBLENBQUF1QixDQUFBQSxDQTlCZkMsRUFBQUEsQ0FBQUgsRUFBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQ0xJLEVBQUFBLENBQUEsS0FBUSxPQUFBLENBQUEsQ0E4Qk4sSUFBQSxDQUFLLElBQUEsQ0FBTyxRQUNkLENBRm9CLE1BQUEsQ0EzQnBCLElBQUksS0FBQSxFQUFnQixDQUNsQixPQUFPLElBQUEsQ0FBSyxNQUNkLENBRUEsSUFBSSxLQUFBLENBQU1DLENBQUFBLENBQWUsQ0FDdkIsSUFBQSxDQUFLLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FDZCxLQUFLLElBQUEsQ0FBTyxJQUFBLENBQUssS0FBQSxFQUFTLFFBQzVCLENBRUEsSUFBSSxNQUErQixDQUNqQyxPQUFPLElBQUEsQ0FBSyxLQUNkLENBRUEsSUFBSSxLQUFLQSxDQUFBQSxDQUFtQixDQUMxQixJQUFNQyxDQUFBQSxDQUFRRCxDQUFBQSxDQUFNLEtBQUEsRUFBUyxPQUFBLENBQVEsS0FBQSxDQUMvQkUsQ0FBQUEsQ0FBT0YsQ0FBQUEsQ0FBTSxJQUFBLEVBQVEsT0FBQSxDQUFRLElBQUEsQ0FDN0JHLENBQUFBLENBQU9ILEVBQU0sSUFBQSxFQUFRLE9BQUEsQ0FBUSxJQUFBLENBQzdCSSxDQUFBQSxDQUFRSixDQUFBQSxDQUFNLEtBQUEsRUFBUyxRQUFRLEtBQUEsQ0FDL0JLLENBQUFBLENBQUssSUFBQSxDQUFLLE1BQUEsQ0FDaEIsSUFBQSxDQUFLLEtBQUEsQ0FBUSxDQUNYLEtBQUEsQ0FBT0EsQ0FBQUEsRUFBTSxDQUFBLENBQUlKLENBQUFBLENBQVEsTUFBQSxDQUN6QixJQUFBLENBQU1JLEdBQU0sQ0FBQSxDQUFJSCxDQUFBQSxDQUFPLE1BQUEsQ0FDdkIsSUFBQSxDQUFNRyxDQUFBQSxFQUFNLENBQUEsQ0FBSUYsRUFBTyxNQUFBLENBQ3ZCLEtBQUEsQ0FBT0UsQ0FBQUEsRUFBTSxDQUFBLENBQUlELENBQUFBLENBQVEsTUFDM0IsRUFDRixDQU9BLEtBQUEsQ0FBQSxHQUFTakIsQ0FBQUEsQ0FBMkIsQ0FDbEMsSUFBQSxDQUFLLElBQUEsRUFBTSxRQUFRUixFQUFBQSxDQUFPLEdBQUdRLENBQVEsRUFDdkMsQ0FHQSxJQUFBLENBQUEsR0FBUUEsRUFBMkIsQ0FDakMsSUFBQSxDQUFLLElBQUEsRUFBTSxJQUFBLEdBQU9QLEVBQUFBLENBQU0sR0FBR08sQ0FBUSxFQUNyQyxDQUdBLElBQUEsQ0FBQSxHQUFRQSxDQUFBQSxDQUEyQixDQUNqQyxJQUFBLENBQUssTUFBTSxJQUFBLEdBQU9OLEVBQUFBLENBQU0sR0FBR00sQ0FBUSxFQUNyQyxDQUdBLFNBQVNBLENBQUFBLENBQTJCLENBQ2xDLElBQUEsQ0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRTCxFQUFBQSxDQUFPLEdBQUdLLENBQVEsRUFDdkMsQ0FHQSxLQUFBLENBQUEsR0FBU0EsQ0FBQUEsQ0FBMkIsQ0FDbEMsS0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRSixFQUFBQSxDQUFPLEdBQUdJLENBQVEsQ0FBQSxDQUNyQyxRQUFRLElBQUEsQ0FBSyxDQUFDLEVBQ2hCLENBRVEsUUFBQSxDQUFTbUIsQ0FBQUEsQ0FBaUIsQ0FDaEMsSUFBTWpCLENBQUFBLENBQU1pQixDQUFBQSxDQUFRLE9BQUEsRUFBUSxDQUN4QmpCLENBQUFBLENBQUksVUFBQSxDQUFXVixFQUFLLENBQUEsQ0FDdEIsSUFBQSxDQUFLLEtBQUEsQ0FBTVUsQ0FBQUEsQ0FBSSxLQUFBLENBQU1WLEVBQUFBLENBQU0sT0FBUyxDQUFDLENBQUMsQ0FBQSxDQUM3QlUsQ0FBQUEsQ0FBSSxVQUFBLENBQVdULEVBQUksRUFDNUIsSUFBQSxDQUFLLElBQUEsQ0FBS1MsQ0FBQUEsQ0FBSSxLQUFBLENBQU1ULEVBQUFBLENBQUssTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzNCUyxDQUFBQSxDQUFJLFVBQUEsQ0FBV1IsRUFBSSxDQUFBLENBQzVCLEtBQUssSUFBQSxDQUFLUSxDQUFBQSxDQUFJLEtBQUEsQ0FBTVIsRUFBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQyxDQUFDLENBQUEsQ0FDM0JRLENBQUFBLENBQUksVUFBQSxDQUFXUCxFQUFLLENBQUEsQ0FDN0IsSUFBQSxDQUFLLE1BQU1PLENBQUFBLENBQUksS0FBQSxDQUFNUCxFQUFBQSxDQUFNLE1BQUEsQ0FBUyxDQUFDLENBQUMsRUFFdEMsSUFBQSxDQUFLLElBQUEsQ0FBS08sQ0FBRyxFQUVqQixDQUVBLE1BQUEsQ0FBT2tCLEVBQW9CN0MsQ0FBQUEsQ0FBYyxDQUN2QyxPQUFPLElBQUksT0FBQSxDQUFjLENBQUM4QyxFQUFTQyxDQUFBQSxHQUFXLENBQzVDLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHL0MsQ0FBSSxTQUFTLENBQUEsQ0FDM0IsSUFBSWdELENBQUFBLENBQWdCLEVBQUEsQ0FDZEMsQ0FBQUEsQ0FBWUMsQ0FBQUEsRUFBaUIsQ0FDakMsSUFBTU4sQ0FBQUEsQ0FBVU0sQ0FBQUEsQ0FBSyxRQUFBLEVBQVMsQ0FDMUJOLENBQUFBLENBQVEsV0FBV3ZCLEVBQUssQ0FBQSxDQUMxQjJCLENBQUFBLEVBQVNKLENBQUFBLENBQVEsS0FBQSxDQUFNdkIsRUFBQUEsQ0FBTSxPQUFTLENBQUMsQ0FBQSxDQUV2QyxJQUFBLENBQUssUUFBQSxDQUFTdUIsQ0FBTyxFQUV6QixFQUNBQyxDQUFBQSxDQUFLLE1BQUEsRUFBUSxFQUFBLENBQUcsTUFBQSxDQUFRSSxDQUFRLENBQUEsQ0FDaENKLEVBQUssTUFBQSxFQUFRLEVBQUEsQ0FBRyxNQUFBLENBQVFJLENBQVEsQ0FBQSxDQUNoQ0osQ0FBQUEsQ0FDRyxFQUFBLENBQUcsT0FBQSxDQUFVTSxDQUFBQSxFQUFRLENBQ3BCSCxDQUFBQSxFQUFTRyxDQUFBQSxDQUFJLE9BQUEsQ0FDYk4sQ0FBQUEsQ0FBSyxPQUNQLENBQUMsQ0FBQSxDQUNBLElBQUEsQ0FBSyxPQUFBLENBQVMsQ0FBQ08sRUFBTUMsQ0FBQUEsR0FBVyxDQUMzQkQsQ0FBQUEsRUFBUUMsQ0FBQUEsRUFBVUwsQ0FBQUEsRUFDcEJBLENBQUFBLEdBQVUsbUJBQW1CSCxDQUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FBQSxDQUNyRCxLQUFLLEtBQUEsQ0FBTSxDQUFBLEVBQUc3QyxDQUFJLENBQUEsTUFBQSxDQUFBLENBQVUsQ0FBRSxJQUFBLENBQUFvRCxFQUFNLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxLQUFBLENBQUFMLENBQU0sQ0FBQyxDQUFBLENBQ25ERCxFQUFPLElBQUksS0FBQSxDQUFNQyxDQUFLLENBQUMsQ0FBQSxHQUV2QixJQUFBLENBQUssTUFBTSxDQUFBLEVBQUdoRCxDQUFJLENBQUEsTUFBQSxDQUFRLENBQUEsQ0FDMUI4QyxDQUFBQSxFQUFRLEVBRVosQ0FBQyxDQUFBLENBQ0EsRUFBQSxDQUFHLG9CQUFBLENBQXVCUSxDQUFBQSxFQUFXLENBQ3BDLElBQUEsQ0FBSyxNQUFNLENBQUEsRUFBR3RELENBQUksQ0FBQSxVQUFBLENBQUEsQ0FBY3NELENBQU0sRUFDeEMsQ0FBQyxFQUNBLEVBQUEsQ0FBRywwQkFBQSxDQUE2QkgsQ0FBQUEsRUFBUSxDQUN2QyxJQUFBLENBQUssS0FBQSxDQUFNLEdBQUduRCxDQUFJLENBQUEsVUFBQSxDQUFBLENBQWNtRCxDQUFHLEVBQ3JDLENBQUMsRUFDTCxDQUFDLENBQ0gsQ0FDRixDQUFBLENBaEhPbEIsRUFBQUEsQ0FBQXNCLEVBQUFBLENBQUEsQ0FBQSxDQW1DTEMsR0FBQXZCLEVBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUQsRUFBQUEsQ0FsQ1dFLENBQUFBLENBQUFBLENBd0NYc0IsRUFBQUEsQ0FBQXZCLEVBQUFBLENBQUEsU0FEQUYsRUFBQUEsQ0F2Q1dHLENBQUFBLENBQUFBLENBNkNYc0IsRUFBQUEsQ0FBQXZCLEVBQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FEQUgsRUFBQUEsQ0E1Q1dJLEdBa0RYc0IsRUFBQUEsQ0FBQXZCLEVBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUosRUFBQUEsQ0FqRFdLLENBQUFBLENBQUFBLENBdURYc0IsRUFBQUEsQ0FBQXZCLEVBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUwsRUFBQUEsQ0F0RFdNLENBQUFBLENBQUFBLENBQU51QixFQUFBQSxDQUFBeEIsRUFBQUEsQ0FBTUMsQ0FBQUEsQ0FBQUEsQ0FrSGIsSUFBTXdCLEVBQVMsSUFBSXhCLENBQUFBLENBR25CeUIsVUFBQUEsQ0FBSSxXQUFBLENBQVksQ0FBQ0MsQ0FBQUEsQ0FBT2hCLElBQVksQ0FDbEMsSUFBTWpCLENBQUFBLENBQU1pQixDQUFBQSxDQUFRLE9BQUEsRUFBUSxDQUN2QmpCLElBR0RpQyxDQUFBQSxFQUFTQyxzQkFBQUEsQ0FDWEgsQ0FBQUEsQ0FBTyxLQUFBLENBQU0vQixDQUFHLENBQUEsQ0FDUGlDLEdBQVNFLHdCQUFBQSxFQUNsQkosQ0FBQUEsQ0FBTyxJQUFBLENBQUsvQixDQUFHLENBQUEsRUFFbkIsQ0FBQyxFQ3hKRCxJQUFNb0MsRUFBQUEsQ0FBTSxTQUFBLENBRUwsU0FBU0MsRUFBQUEsRUFBNkIsQ0FFM0MsSUFBTUMsQ0FBQUEsQ0FBVWxELFNBQUFBLENBQUttRCxZQUFBQSxDQUFJLE9BQUEsQ0FBUSxTQUFTLENBQUEsQ0FBRyxlQUFnQixTQUFTLENBQUEsQ0FDdEVDLFlBQUFBLENBQVVGLENBQUFBLENBQVMsQ0FBRSxTQUFBLENBQVcsSUFBSyxDQUFDLENBQUEsQ0FDdENDLFlBQUFBLENBQUksT0FBQSxDQUFRLFlBQUEsQ0FBY0QsQ0FBTyxFQUNqQ0csc0JBQUFBLENBQWMsS0FBQSxDQUFNLENBQ2xCLFdBQUEsQ0FBYSxjQUFBLENBQ2IsY0FBQSxDQUFnQixNQUNoQixRQUFBLENBQVUsS0FBQSxDQUNWLHdCQUFBLENBQTBCLElBQzVCLENBQUMsQ0FBQSxDQUNEVixFQUFPLEtBQUEsQ0FBTUssRUFBQUEsQ0FBSyxhQUFBLENBQWVFLENBQU8sRUFDMUMsQ0NuQk8sU0FBU0ksRUFBQUEsQ0FBaUNDLEVBQXVCcEUsQ0FBQUEsQ0FBd0MsQ0FDOUcsT0FBTyxDQUFBLEdBQUlxRSxDQUFBQSxHQUFTLENBQ2xCLEdBQUksQ0FDRixJQUFNQyxDQUFBQSxDQUFNRixDQUFBQSxDQUFHLEdBQUdDLENBQUksQ0FBQSxDQUN0QixPQUFJQyxDQUFBQSxZQUFlLE9BQUEsQ0FDVkEsQ0FBQUEsQ0FBSSxLQUFBLENBQU0sSUFBTXRFLENBQVksRUFFOUJzRSxDQUNULENBQUEsS0FBUSxDQUNOLE9BQU90RSxDQUNULENBQ0YsQ0FDRixDQ1JPLElBQU11RSxFQUFBQSxDQUFlLGlCQUFBLENBRXJCLFNBQVNDLEVBQUFBLEVBQVEsQ0FDdEIsSUFBTUMsQ0FBQUEsQ0FBTyxPQUFBLENBQVEsSUFBQSxDQUNqQkMsQ0FBQUEsQ0FBT0QsQ0FBQUEsQ0FBSyxLQUFNRSxDQUFBQSxFQUFRQSxDQUFBQSxDQUFJLFVBQUEsQ0FBV0osRUFBWSxDQUFDLENBQUEsQ0FDMUQsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE9BQUFsQixDQUFBQSxDQUFPLEtBQUEsQ0FBTSxVQUFBLENBQVlpQixDQUFJLENBQUEsQ0FDdEIsT0FBQSxDQUFRLElBQUEsQ0FFakIsSUFBTUosQ0FBQUEsQ0FBTyxDQUFDLE1BQUEsQ0FBUSxHQUFHSSxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxFQUFFLENBQUMsQ0FBQSxDQUN2QyxPQUFBQyxFQUFPLE1BQUEsQ0FBTyxJQUFBLENBQUtBLENBQUFBLENBQUssS0FBQSxDQUFNLEdBQUcsQ0FBQSxDQUFFLENBQUMsQ0FBQSxDQUFJLFFBQVEsQ0FBQSxDQUFFLFFBQUEsRUFBUyxDQUMzREwsQ0FBQUEsQ0FBSyxLQUFLLEdBQUcsSUFBQSxDQUFLLEtBQUEsQ0FBTUssQ0FBSSxDQUFDLENBQUEsQ0FDN0JsQixFQUFPLEtBQUEsQ0FBTSxTQUFBLENBQVdhLENBQUksQ0FBQSxDQUNyQkEsQ0FDVCxDQ2hCTyxJQUFNTyxFQUFBQSxDQUFnQixJQUFBLENBQ2hCQyxFQUFBQSxDQUFpQixLQUNqQkMsRUFBQUEsQ0FBYyxFQUFBLENBQ2RDLEVBQUFBLENBQW1CLENBQUEsQ0FDbkJDLEVBQUFBLENBQXlCLEVBQUEsQ0FDekJDLEdBQW9CLENBQUMsY0FBQSxDQUFnQixlQUFlLENBQUEsQ0FFcERDLEVBQUFBLENBQWVDLGtCQUFBQSxDQUFFLE1BQUEsQ0FBTyxDQUNuQyxRQUFBLENBQVVBLGtCQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxxQkFBcUIsRUFDbkQsS0FBQSxDQUFPQSxrQkFBQUEsQ0FBRSxNQUFBLEVBQU8sQ0FBRSxRQUFBLENBQVMsYUFBYSxFQUN4QyxNQUFBLENBQVFBLGtCQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxjQUFjLEVBQzFDLEdBQUEsQ0FBS0Esa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLG1CQUFtQixFQUM1QyxTQUFBLENBQVdBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFFBQUEsQ0FBUywwQkFBMEIsRUFDMUQsUUFBQSxDQUFVQSxrQkFBQUEsQ0FBRSxLQUFBLENBQU1BLGtCQUFBQSxDQUFFLE1BQUEsRUFBUSxFQUFFLFFBQUEsQ0FBUyxzREFBc0QsQ0FBQSxDQUM3RixhQUFBLENBQWVBLGtCQUFBQSxDQUFFLE9BQUEsR0FBVSxRQUFBLENBQVMsOENBQThDLENBQUEsQ0FDbEYsYUFBQSxDQUFlQSxrQkFBQUEsQ0FBRSxPQUFBLEdBQVUsUUFBQSxDQUFTLHVDQUF1QyxDQUFBLENBQzNFLFVBQUEsQ0FBWUEsa0JBQUFBLENBQUUsT0FBQSxHQUFVLFFBQUEsQ0FBUyxzRUFBc0UsQ0FBQSxDQUN2RyxjQUFBLENBQWdCQSxrQkFBQUEsQ0FBRSxPQUFBLEdBQVUsUUFBQSxDQUFTLHdFQUF3RSxDQUFBLENBQzdHLGtCQUFBLENBQW9CQSxrQkFBQUEsQ0FBRSxPQUFBLEdBQVUsUUFBQSxDQUFTLDREQUE0RCxDQUFBLENBQ3JHLHVCQUFBLENBQXlCQSxrQkFBQUEsQ0FDdEIsT0FBQSxHQUNBLFFBQUEsQ0FBUyx3RUFBd0UsQ0FBQSxDQUNwRixjQUFBLENBQWdCQSxrQkFBQUEsQ0FBRSxPQUFBLEdBQVUsUUFBQSxDQUFTLGlEQUFpRCxDQUFBLENBQ3RGLGFBQUEsQ0FBZUEsa0JBQUFBLENBQUUsTUFBQSxHQUFTLFFBQUEsQ0FBUyxnQ0FBZ0MsQ0FBQSxDQUNuRSxXQUFBLENBQWFBLGtCQUFBQSxDQUFFLEtBQUEsQ0FBTUEsbUJBQUUsTUFBQSxFQUFRLENBQUEsQ0FBRSxRQUFBLENBQVMsMkNBQTJDLENBQ3ZGLENBQUMsQ0FBQSxDQXdCWUMsRUFBQUEsQ0FBc0MsQ0FDakQsS0FBQSxDQUFPUixFQUFBQSxDQUNQLE1BQUEsQ0FBUUMsRUFBQUEsQ0FDUixJQUFLQyxFQUFBQSxDQUNMLFFBQUEsQ0FBVUMsRUFBQUEsQ0FDVixRQUFBLENBQVVFLEVBQUFBLENBQ1YsU0FBQSxDQUFXLE1BQ1gsYUFBQSxDQUFlLEtBQUEsQ0FDZixhQUFBLENBQWUsS0FBQSxDQUNmLFVBQUEsQ0FBWSxLQUFBLENBQ1osZUFBZ0IsS0FBQSxDQUNoQixrQkFBQSxDQUFvQixLQUFBLENBQ3BCLHVCQUFBLENBQXlCLEtBQUEsQ0FDekIsY0FBQSxDQUFnQixNQUNoQixhQUFBLENBQWVELEVBQUFBLENBQ2YsV0FBQSxDQUFhLEVBQ2YsQ0FBQSxDQ3pEQSxTQUFTSyxFQUFBQSxDQUFnQjlFLENBQUFBLENBQW1CLENBQzFDLEdBQUlBLENBQUFBLENBQUUsUUFBQSxDQUFTLEtBQUssQ0FBQSxFQUFLQSxDQUFBQSxDQUFFLFVBQUEsQ0FBVyxPQUFPLENBQUEsQ0FDM0MsT0FBT0EsRUFFVCxJQUFJK0UsQ0FBQUEsQ0FDSixHQUFJLENBQ0ZBLENBQUFBLENBQU1DLGVBQUFBLENBQWFoRixDQUFDLEVBQ3RCLENBQUEsS0FBUSxDQUNOK0UsQ0FBQUEsQ0FBTTFDLFlBQUFBLENBQVFyQyxDQUFDLEVBQ2pCLENBQ0EsT0FBTyxDQUFBLE9BQUEsRUFBVStFLENBQUcsQ0FBQSxDQUN0QixDQU9BLGVBQXNCRSxFQUFBQSxDQUFRQyxDQUFBQSxDQUFxQixDQUNqRCxJQUFNQyxDQUFBQSxDQUFRUixFQUFBQSxDQUFhLE1BQ3JCUyxDQUFBQSxDQUFJUCxFQUFBQSxDQUNWUSxpQkFBQUEsQ0FDRyxJQUFBLENBQUtILENBQUFBLENBQVEsSUFBSSxFQUNqQixRQUFBLENBQVMsVUFBQSxDQUFZLG9EQUFvRCxDQUFBLENBQ3pFLE1BQUEsQ0FBTyxzQkFBQSxDQUF3QkMsRUFBTSxLQUFBLENBQU0sV0FBQSxDQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxLQUFLLENBQUEsQ0FBRSxFQUNwRSxNQUFBLENBQU8sdUJBQUEsQ0FBeUJELENBQUFBLENBQU0sTUFBQSxDQUFPLFdBQUEsQ0FBYSxDQUFBLEVBQUdDLEVBQUUsTUFBTSxDQUFBLENBQUUsQ0FBQSxDQUN2RSxNQUFBLENBQU8sNkJBQUEsQ0FBK0JELENBQUFBLENBQU0sV0FBQSxDQUFZLFdBQUEsQ0FBYSxFQUFFLENBQUEsQ0FDdkUsTUFBQSxDQUFPLG9CQUFBLENBQXNCQSxDQUFBQSxDQUFNLEdBQUEsQ0FBSSxZQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxHQUFHLENBQUEsQ0FBRSxDQUFBLENBQzlELE1BQUEsQ0FBTywwQkFBMkJELENBQUFBLENBQU0sUUFBQSxDQUFTLFdBQUEsQ0FBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsUUFBUSxFQUFFLENBQUEsQ0FDN0UsTUFBQSxDQUFPLHdCQUFBLENBQTBCRCxDQUFBQSxDQUFNLFFBQUEsQ0FBUyxXQUFBLENBQWFDLEVBQUUsUUFBQSxDQUFTLElBQUEsQ0FBSyxHQUFHLENBQUMsQ0FBQSxDQUNqRixNQUFBLENBQU8sbUJBQW9CRCxDQUFBQSxDQUFNLFNBQUEsQ0FBVSxXQUFBLENBQWFDLENBQUFBLENBQUUsU0FBUyxDQUFBLENBQ25FLE9BQU8scUJBQUEsQ0FBdUJELENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxhQUFhLEVBQzlFLE1BQUEsQ0FBTyxtQkFBQSxDQUFxQkQsQ0FBQUEsQ0FBTSxhQUFBLENBQWMsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLGFBQWEsQ0FBQSxDQUM1RSxNQUFBLENBQU8sZUFBQSxDQUFpQkQsQ0FBQUEsQ0FBTSxVQUFBLENBQVcsV0FBQSxDQUFhQyxFQUFFLFVBQVUsQ0FBQSxDQUNsRSxNQUFBLENBQU8sb0JBQUEsQ0FBc0JELENBQUFBLENBQU0sY0FBQSxDQUFlLFlBQWFDLENBQUFBLENBQUUsY0FBYyxDQUFBLENBQy9FLE1BQUEsQ0FBTyx3QkFBQSxDQUEwQkQsQ0FBQUEsQ0FBTSxtQkFBbUIsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLGtCQUFrQixDQUFBLENBQzNGLE1BQUEsQ0FBTyw2QkFBQSxDQUErQkQsRUFBTSx1QkFBQSxDQUF3QixXQUFBLENBQWFDLENBQUFBLENBQUUsdUJBQXVCLENBQUEsQ0FDMUcsTUFBQSxDQUFPLG9CQUFxQkQsQ0FBQUEsQ0FBTSxjQUFBLENBQWUsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLGNBQWMsQ0FBQSxDQUM5RSxPQUFPLDJCQUFBLENBQTZCRCxDQUFBQSxDQUFNLGFBQUEsQ0FBYyxXQUFBLENBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLGFBQWEsQ0FBQSxDQUFFLENBQUEsQ0FDekYsTUFBQSxDQUFPLE1BQU9FLENBQUFBLENBQWdCQyxDQUFBQSxHQUFTLENBQ3RDLEdBQUksQ0FDRixNQUFNTCxDQUFBQSxDQUFRLEdBQUEsQ0FBSUosRUFBQUEsQ0FBZ0JRLENBQU0sRUFBRyxDQUN6QyxLQUFBLENBQU8xQixFQUFBQSxDQUFNbEUsQ0FBQUEsQ0FBYTBGLENBQUFBLENBQUUsS0FBSyxFQUFFRyxDQUFBQSxDQUFLLEtBQUssQ0FBQSxDQUM3QyxNQUFBLENBQVEzQixFQUFBQSxDQUFNbEUsQ0FBQUEsQ0FBYTBGLEVBQUUsTUFBTSxDQUFBLENBQUVHLENBQUFBLENBQUssTUFBTSxDQUFBLENBQ2hELEdBQUEsQ0FBSzNCLEdBQU1sRSxDQUFBQSxDQUFhMEYsQ0FBQUEsQ0FBRSxHQUFHLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxHQUFHLEVBQ3ZDLFFBQUEsQ0FBVTNCLEVBQUFBLENBQU1sRSxDQUFBQSxDQUFhMEYsQ0FBQUEsQ0FBRSxRQUFRLENBQUEsQ0FBRUcsRUFBSyxRQUFRLENBQUEsQ0FDdEQsUUFBQSxDQUFVekYsRUFBQUEsQ0FBV0QsRUFBVyxDQUFBLENBQUUwRixFQUFLLE9BQU8sQ0FBQSxDQUM5QyxTQUFBLENBQVdBLENBQUFBLENBQUssU0FBQSxFQUFhSCxDQUFBQSxDQUFFLFVBQy9CLGFBQUEsQ0FBZUcsQ0FBQUEsQ0FBSyxhQUFBLEVBQWlCSCxDQUFBQSxDQUFFLGFBQUEsQ0FDdkMsYUFBQSxDQUFlRyxFQUFLLGFBQUEsRUFBaUJILENBQUFBLENBQUUsYUFBQSxDQUN2QyxVQUFBLENBQVlHLENBQUFBLENBQUssVUFBQSxFQUFjSCxFQUFFLFVBQUEsQ0FDakMsY0FBQSxDQUFnQkcsQ0FBQUEsQ0FBSyxjQUFBLEVBQWtCSCxDQUFBQSxDQUFFLGNBQUEsQ0FDekMsbUJBQW9CRyxDQUFBQSxDQUFLLGtCQUFBLEVBQXNCSCxDQUFBQSxDQUFFLGtCQUFBLENBQ2pELHVCQUFBLENBQXlCRyxDQUFBQSxDQUFLLHlCQUEyQkgsQ0FBQUEsQ0FBRSx1QkFBQSxDQUMzRCxjQUFBLENBQWdCRyxDQUFBQSxDQUFLLGNBQUEsRUFBa0JILENBQUFBLENBQUUsZUFDekMsYUFBQSxDQUFleEIsRUFBQUEsQ0FBTWxFLENBQUFBLENBQWEwRixDQUFBQSxDQUFFLGFBQWEsQ0FBQSxDQUFFRyxFQUFLLGFBQWEsQ0FBQSxDQUNyRSxXQUFBLENBQWF6RixFQUFBQSxDQUFXSixDQUFXLENBQUEsQ0FBRTZGLEVBQUssV0FBVyxDQUN2RCxDQUFDLEVBQ0gsQ0FBQSxNQUFTQyxDQUFBQSxDQUFHLENBQ1Z2QyxDQUFBQSxDQUFPLEtBQUEsQ0FBTXVDLENBQUMsRUFDaEIsQ0FDRixDQUFDLENBQUEsQ0FDSCxNQUFNSCxpQkFBQUEsQ0FBUSxVQUFBLENBQVdwQixFQUFBQSxFQUFPLEVBQ2xDLENDaEJPLElBQU13QixFQUFBQSxDQUFOLEtBQWdCLENBQ3JCLFlBQUEsQ0FBYXRDLENBQUFBLENBQWVoQixDQUFBQSxDQUFpQixDQUMzQyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUUsSUFBQSxDQUFNLFNBQUEsQ0FBb0IsS0FBQSxDQUFBZ0IsQ0FBQUEsQ0FBTyxPQUFBLENBQUFoQixDQUFRLENBQUMsRUFDeEQsQ0FFQSxhQUFBLENBQWNOLENBQUFBLENBQXFCLENBQ2pDLElBQUEsQ0FBSyxLQUFLLENBQUUsSUFBQSxDQUFNLFVBQUEsQ0FBcUIsS0FBQSxDQUFBQSxDQUFNLENBQUMsRUFDaEQsQ0FFQSxVQUFBLENBQVdJLENBQUFBLENBQThCLENBQ3ZDLE9BQU8sSUFBQSxDQUFLLEtBQUssQ0FBRSxJQUFBLENBQU0sT0FBQSxDQUFrQixLQUFBLENBQUFBLENBQU0sQ0FBQyxDQUNwRCxDQUVBLFNBQUEsQ0FBVXlELENBQUFBLENBQXdDLENBQ2hELE9BQU8sSUFBQSxDQUFLLEtBQUssQ0FBRSxJQUFBLENBQU0sTUFBQSxDQUFpQixPQUFBLENBQUFBLENBQVEsQ0FBQyxDQUNyRCxDQUVRLElBQUEsQ0FBS3hFLENBQUFBLENBQTRCLENBQ3ZDLE9BQU8sSUFBSSxRQUFTbUIsQ0FBQUEsRUFBWSxDQUM5QixHQUFJLENBQUMsT0FBQSxDQUFRLElBQUEsQ0FDWCxPQUFPQSxDQUFBQSxFQUFRLENBRWpCLE9BQUEsQ0FBUSxJQUFBLENBQUtuQixDQUFBQSxDQUFLLElBQU1tQixHQUFTLEVBQ25DLENBQUMsQ0FDSCxDQUNGLENBQUEsQ0NsRk8sU0FBU3NELEVBQUFBLENBQU1DLENBQUFBLENBQVksQ0FDaEMsT0FBTyxJQUFJLE9BQUEsQ0FBZXZELENBQUFBLEVBQVksVUFBQSxDQUFXQSxDQUFBQSxDQUFTdUQsQ0FBRSxDQUFDLENBQy9ELENBRU8sU0FBU0MsRUFBQUEsQ0FBZUMsQ0FBQUEsQ0FBZUYsQ0FBQUEsQ0FBWUcsRUFBMkIsQ0FDbkYsT0FBTyxJQUFJLE9BQUEsQ0FBUSxDQUFDMUQsQ0FBQUEsQ0FBU0MsSUFBVyxDQUN0QyxJQUFNMEQsQ0FBQUEsQ0FBUSxVQUFBLENBQVcsSUFBTTFELENBQUFBLENBQU8sSUFBSSxLQUFBLENBQU0sQ0FBQSxFQUFHeUQsQ0FBSyxDQUFBLGlCQUFBLEVBQW9CSCxDQUFFLENBQUEsRUFBQSxDQUFJLENBQUMsQ0FBQSxDQUFHQSxDQUFFLENBQUEsQ0FDeEZFLENBQUFBLENBQUUsSUFBQSxDQUFLekQsQ0FBQUEsQ0FBU0MsQ0FBTSxDQUFBLENBQUUsT0FBQSxDQUFRLElBQU0sWUFBQSxDQUFhMEQsQ0FBSyxDQUFDLEVBQzNELENBQUMsQ0FDSCxDQUdPLFNBQVNDLEVBQUFBLENBQWFILENBQUFBLENBQWVsRCxFQUFrQyxDQUM1RSxPQUFLQSxDQUFBQSxDQUdFLElBQUksT0FBQSxDQUFXLENBQUNQLEVBQVNDLENBQUFBLEdBQVcsQ0FDekMsSUFBTTRELENBQUFBLENBQVUsSUFBTTVELENBQUFBLENBQU9NLEVBQU8sTUFBTSxDQUFBLENBQzFDQSxDQUFBQSxDQUFPLGdCQUFBLENBQWlCLE9BQUEsQ0FBU3NELENBQUFBLENBQVMsQ0FBRSxJQUFBLENBQU0sSUFBSyxDQUFDLENBQUEsQ0FDeERKLENBQUFBLENBQUUsSUFBQSxDQUFLekQsRUFBU0MsQ0FBTSxDQUFBLENBQUUsT0FBQSxDQUFRLElBQU1NLENBQUFBLENBQU8sbUJBQUEsQ0FBb0IsUUFBU3NELENBQU8sQ0FBQyxFQUNwRixDQUFDLENBQUEsQ0FOUUosQ0FPWCxDQUdPLFNBQVNLLEVBQUFBLENBQVdDLENBQUFBLENBQXNFUixDQUFBQSxDQUFZLENBQzNHLElBQUlTLEVBQ0FDLENBQUFBLENBQVMsS0FBQSxDQUNiLGVBQWVDLENBQUFBLENBQUtDLENBQUFBLENBQWUsQ0FDakMsSUFBTUMsQ0FBQUEsQ0FBTyxNQUFNTCxDQUFBQSxDQUFTSSxDQUFLLENBQUEsQ0FDN0JGLENBQUFBLEdBR0pELENBQUFBLENBQVEsV0FBVyxJQUFNRSxDQUFBQSxDQUFLQyxDQUFBQSxDQUFRLENBQUMsQ0FBQSxDQUFHQyxDQUFBQSxFQUFRYixDQUFFLENBQUEsRUFDdEQsQ0FDQSxPQUFBUyxDQUFBQSxDQUFRLFVBQUEsQ0FBVyxJQUFNRSxFQUFLLENBQUMsQ0FBQSxDQUFHWCxDQUFFLENBQUEsQ0FDN0IsSUFBTSxDQUNYVSxFQUFTLElBQUEsQ0FDVCxZQUFBLENBQWFELENBQUssRUFDcEIsQ0FDRixDQ3BDQSxJQUFNSyxFQUFBQSxDQUFpQixHQUFBLENBRWhCLFNBQVNDLEVBQUFBLENBQUtDLENBQUFBLENBQWVDLENBQUFBLENBQWdCQyxFQUFtQyxDQUNyRixPQUFPakIsRUFBQUEsQ0FBWWUsQ0FBQUEsQ0FBSSxXQUFBLENBQVlDLENBQUFBLENBQVFDLENBQU0sQ0FBQSxDQUFHSixFQUFBQSxDQUFnQixDQUFBLElBQUEsRUFBT0csQ0FBTSxDQUFBLENBQUUsQ0FDckYsQ0FFTyxTQUFTRSxFQUFBQSxDQUFPSCxDQUFBQSxDQUFlSSxDQUFBQSxDQUFzQyxDQUMxRSxPQUFPbkIsR0FBWWMsRUFBQUEsQ0FBS0MsQ0FBQUEsQ0FBSyxrQkFBQSxDQUFvQixDQUFFLFVBQUEsQ0FBQUksQ0FBVyxDQUFDLENBQUEsQ0FBR04sRUFBQUEsQ0FBZ0IsUUFBUSxDQUM1RixDQUVPLFNBQVNPLEdBQW1CTCxDQUFBQSxDQUFlTSxDQUFBQSxDQUErQixDQUMvRSxPQUFPLElBQUksT0FBQSxDQUFRLENBQUM3RSxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU02RSxDQUFBQSxDQUFVLFVBQUEsQ0FBVyxJQUFNLENBQy9CUCxDQUFBQSxDQUFJLEdBQUEsQ0FBSSxTQUFBLENBQVdRLENBQU8sQ0FBQSxDQUMxQjlFLEVBQU8sSUFBSSxLQUFBLENBQU0sQ0FBQSxtQ0FBQSxFQUFzQ29FLEVBQWMsQ0FBQSxFQUFBLENBQUksQ0FBQyxFQUM1RSxDQUFBLENBQUdBLEVBQWMsQ0FBQSxDQUVYVSxDQUFBQSxDQUFVLENBQUNDLENBQUFBLENBQW1CUixDQUFBQSxHQUFtQixDQUNqREEsQ0FBQUEsR0FBVyxvQ0FBQSxHQUNiLFlBQUEsQ0FBYU0sQ0FBTyxDQUFBLENBQ3BCUCxDQUFBQSxDQUFJLElBQUksU0FBQSxDQUFXUSxDQUFPLENBQUEsQ0FDMUIvRSxDQUFBQSxFQUFRLEVBRVosQ0FBQSxDQUNBdUUsRUFBSSxFQUFBLENBQUcsU0FBQSxDQUFXUSxDQUFPLENBQUEsQ0FFekJULEVBQUFBLENBQUtDLENBQUFBLENBQUssaUNBQWtDLENBQzFDLE1BQUEsQ0FBUSxTQUFBLENBQ1IsTUFBQSxDQUFBTSxDQUNGLENBQUMsRUFBRSxLQUFBLENBQU8xQixDQUFBQSxFQUFNLENBQ2QsWUFBQSxDQUFhMkIsQ0FBTyxDQUFBLENBQ3BCUCxFQUFJLEdBQUEsQ0FBSSxTQUFBLENBQVdRLENBQU8sQ0FBQSxDQUMxQjlFLENBQUFBLENBQU9rRCxDQUFDLEVBQ1YsQ0FBQyxFQUNILENBQUMsQ0FDSCxDQUVBLGVBQXNCOEIsR0FBaUJWLENBQUFBLENBQThCLENBQ25FLE1BQU1ELEVBQUFBLENBQUtDLENBQUFBLENBQUssZ0NBQUEsQ0FBa0MsQ0FBRSxNQUFBLENBQVEsT0FBUSxDQUFDLEVBQ3ZFLENBRUEsZUFBc0JXLEVBQUFBLENBQWdCQyxFQUFrQkMsQ0FBQUEsQ0FBWSxDQUNsRSxHQUFJLENBQ0YsSUFBTWIsQ0FBQUEsQ0FBTVksRUFBSSxRQUFBLENBQ2hCLE1BQU1iLEVBQUFBLENBQUtDLENBQUFBLENBQUssc0NBQUEsQ0FBd0MsRUFBRSxDQUFBLENBQzFELE1BQU1ELEVBQUFBLENBQUtDLENBQUFBLENBQUssb0NBQUEsQ0FBc0MsQ0FDcEQsR0FBR2EsQ0FBQUEsQ0FDSCxpQkFBQSxDQUFtQixDQUFBLENBQ25CLE1BQUEsQ0FBUSxDQUFBLENBQ1YsQ0FBQyxFQUNERCxDQUFBQSxDQUFJLFVBQUEsR0FDTixDQUFBLEtBQVEsQ0FFUixDQUNGLENDckRPLElBQU1FLEVBQUFBLENBQTBCLEVBQUEsQ0FFaEMsSUFBTUMsRUFBQUEsQ0FBcUIsWUFBQSxDQUUzQixTQUFTQyxFQUFBQSxDQUFlQyxDQUFBQSxDQUFtQkosQ0FBQUEsQ0FBb0IsQ0FDcEUsR0FBTSxDQUFFLEtBQUEsQ0FBQUssQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQU8sQ0FBQSxDQUFJTixDQUFBQSxDQUMxQixPQUFPLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0JBQUEsRUFNaUJLLENBQUssQ0FBQSxZQUFBLEVBQWVDLENBQUFBLENBQVMsQ0FBQyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUFBLEVBS3pDRCxDQUFLLENBQUE7QUFBQSxjQUFBLEVBQ0pDLENBQU0sQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBLEVBTVRBLENBQU0sQ0FBQTtBQUFBO0FBQUEsYUFBQSxFQUVKRCxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQUFBLEVBUVNELENBQVMsQ0FBQTtBQUFBLDRCQUFBLEVBQ1JDLENBQUssQ0FBQTtBQUFBO0FBQUE7QUFBQSxvQkFBQSxFQUdiQSxDQUFLLENBQUE7QUFBQSwyQkFBQSxFQUNFSixFQUF1QixDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUEsQ0E2RHBELENBRU8sU0FBU00sRUFBQUEsQ0FBWUMsQ0FBQUEsQ0FBZ0JSLEVBQWdDLENBQzFFLEdBQU0sQ0FBRSxLQUFBLENBQUFLLENBQUFBLENBQU8sT0FBQUMsQ0FBTyxDQUFBLENBQUlOLEVBQzFCLEdBQUlLLENBQUFBLENBQVFKLElBQTJCSyxDQUFBQSxDQUFTLENBQUEsQ0FDOUMsT0FHRixJQUFNRyxDQUFBQSxDQUFZSCxDQUFBQSxDQUFTLEVBRXZCSSxDQUFBQSxDQUFZLENBQUEsQ0FDaEIsUUFBU0MsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEVBQUlWLEVBQUFBLENBQXlCVSxDQUFBQSxFQUFBQSxDQUFLLENBQ2hELElBQU1DLENBQUFBLENBQUFBLENBQVlILEVBQVlKLENBQUFBLENBQVFNLENBQUFBLEVBQUssRUFFckNFLENBQUFBLENBQUFBLENBRElMLENBQUFBLENBQU9JLENBQVEsQ0FBQSxFQUFLLENBQUEsRUFDZCxHQUFBLENBQU0sQ0FBQSxDQUFJLENBQUEsQ0FDMUJGLENBQUFBLENBQWFBLEdBQWEsQ0FBQSxDQUFLRyxFQUNqQyxDQUlBLEdBRkFILENBQUFBLENBQVlBLElBQWMsQ0FBQSxDQUV0QixFQUFBLENBQUMsT0FBTyxRQUFBLENBQVNBLENBQVMsR0FBS0EsQ0FBQUEsQ0FBWSxDQUFBLEVBQUtBLEVBQVksR0FBQSxDQUFBLENBSWhFLE9BQU9BLENBQ1QsQ0FFTyxTQUFTSSxFQUFBQSxDQUFXM0IsQ0FBQUEsQ0FBZSxDQUN4QyxPQUFPRyxHQUFPSCxDQUFBQSxDQUFLLHVCQUF1QixDQUM1QyxDQU9BLGVBQXNCNEIsR0FBVUMsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQWlDLENBQ2hGLE1BQU0zQixFQUFBQSxDQUFPMEIsRUFBRyxRQUFBLENBQVUsQ0FBQSxtQkFBQSxFQUFzQkMsQ0FBUSxDQUFBLENBQUEsQ0FBRyxFQUM3RCxDQUdBLGVBQXNCQyxFQUFBQSxDQUFjRixDQUFBQSxDQUFnQyxDQUNsRSxJQUFNRyxDQUFBQSxDQUFVLElBQUksT0FBQSxDQUFTQyxDQUFBQSxFQUFNSixFQUFHLEdBQUEsQ0FBSSxJQUFBLENBQUtkLEdBQW9Ca0IsQ0FBQyxDQUFDLEVBQ3JFLE1BQU1oRCxFQUFBQSxDQUFZK0MsRUFBUyxHQUFBLENBQU8sWUFBWSxFQUNoRCxDQ2hKQSxJQUFNRSxHQUFhLEtBQUEsQ0FDYkMsRUFBQUEsQ0FBZSxXQUFBLENBR2ZDLEVBQUFBLENBQXdCLENBQzVCLFFBQUEsQ0FBVSxLQUNWLE1BQUEsQ0FBUSxJQUFBLENBRVIsVUFBVyxJQUFBLENBQ1gsZUFBQSxDQUFpQixLQUNqQixXQUFBLENBQWEsSUFBQSxDQUNiLE9BQVEsSUFBQSxDQUNSLFNBQUEsQ0FBVyxJQUNiLENBQUEsQ0FHQUMsaUJBQUFBLENBQVMsNEJBQTRCLENBQ25DLENBQUUsT0FBUUgsRUFBQUEsQ0FBWSxVQUFBLENBQVlFLEVBQXNCLENBQUEsQ0FDeEQsQ0FBRSxNQUFBLENBQVFELEdBQWMsVUFBQSxDQUFZQyxFQUFzQixDQUM1RCxDQUFDLENBQUEsQ0FHTSxTQUFTRSxFQUFBQSxFQUF5QixDQUN2Q0Qsa0JBQVMsTUFBQSxDQUFPSCxFQUFBQSxDQUFhSyxHQUFRLENBQ25DLElBQU1DLEVBQU0sSUFBSSxHQUFBLENBQUlELEVBQUksR0FBRyxDQUFBLENBQ3JCRSxDQUFBQSxDQUFNRCxDQUFBQSxDQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksS0FBSyxDQUFBLEVBQUssRUFBQSxDQUNyQ3RCLEVBQVEsUUFBQSxDQUFTc0IsQ0FBQUEsQ0FBSSxhQUFhLEdBQUEsQ0FBSSxHQUFHLEdBQUssR0FBQSxDQUFLLEVBQUUsRUFDckRyQixDQUFBQSxDQUFTLFFBQUEsQ0FBU3FCLEVBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxHQUFHLENBQUEsRUFBSyxHQUFBLENBQUssRUFBRSxDQUFBLENBQ3RERSxDQUFBQSxDQUFPMUIsRUFBQUEsQ0FBZXlCLEVBQUssQ0FBRSxLQUFBLENBQUF2QixFQUFPLE1BQUEsQ0FBQUMsQ0FBTyxDQUFDLENBQUEsQ0FDbEQsT0FBTyxJQUFJLFFBQUEsQ0FBU3VCLENBQUFBLENBQU0sQ0FBRSxPQUFBLENBQVMsQ0FBRSxlQUFnQixXQUFZLENBQUUsQ0FBQyxDQUN4RSxDQUFDLEVBQ0gsQ0FFTyxTQUFTQyxFQUFBQSxDQUFlRixFQUFhNUIsQ0FBQUEsQ0FBb0IsQ0FDOUQsSUFBTTJCLENBQUFBLENBQU0sSUFBSSxJQUFJLENBQUEsRUFBR04sRUFBVSxVQUFVLENBQUEsQ0FDM0MsT0FBQU0sRUFBSSxZQUFBLENBQWEsR0FBQSxDQUFJLE1BQU9DLENBQUFBLENBQUksT0FBQSxDQUFRLFVBQVcsVUFBVSxDQUFDLENBQUEsQ0FDOURELENBQUFBLENBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxJQUFLLE1BQUEsQ0FBTzNCLENBQUFBLENBQUssS0FBSyxDQUFDLENBQUEsQ0FDNUMyQixFQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksSUFBSyxNQUFBLENBQU8zQixDQUFBQSxDQUFLLE1BQU0sQ0FBQyxDQUFBLENBQ3RDMkIsRUFBSSxRQUFBLEVBQ2IsQ0NyQ08sSUFBTUksRUFBQUEsQ0FBTixLQUF5QixDQU05QixXQUFBLENBQXFCQyxFQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixjQUFBLENBTGIsT0FBQSxDQUFVLENBQUEsQ0FDVixNQUFBLENBQXVCLEdBQ3ZCLFFBQUEsQ0FBVyxJQUFJLFFBQ2YsUUFBQSxDQUlSLElBQUksUUFBaUIsQ0FDbkIsT0FBTyxLQUFLLE9BQ2QsQ0FFQSxJQUFJLE9BQUEsRUFBa0IsQ0FDcEIsT0FBTyxJQUFBLENBQUssTUFBQSxDQUFPLE1BQ3JCLENBRUEsSUFBSSxLQUFBLEVBQWdCLENBQ2xCLE9BQU8sQ0FBQSxRQUFBLEVBQVcsS0FBSyxNQUFNLENBQUEsV0FBQSxFQUFjLEtBQUssT0FBTyxDQUFBLENBQ3pELENBRUEsTUFBTSxRQUFBLENBQVk1RixFQUFzQmpCLENBQUFBLENBQWtDLENBQ3hFLE9BQUFBLENBQUFBLEVBQVEsY0FBQSxHQUVKQSxDQUFBQSxFQUFVLENBQUMsS0FBSyxRQUFBLENBQVMsR0FBQSxDQUFJQSxDQUFNLENBQUEsR0FDckMsSUFBQSxDQUFLLFFBQUEsQ0FBUyxJQUFJQSxDQUFNLENBQUEsQ0FDeEJBLEVBQU8sZ0JBQUEsQ0FBaUIsT0FBQSxDQUFTLElBQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTUEsQ0FBTSxDQUFBLENBQUcsQ0FBRSxLQUFNLElBQUssQ0FBQyxHQUdwRSxJQUFJLE9BQUEsQ0FBVyxDQUFDUCxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3pDLElBQUEsQ0FBSyxNQUFBLENBQU8sSUFBQSxDQUFLLENBQ2YsR0FBQSxDQUFLLElBQU0sQ0FDVCxHQUFJTSxDQUFBQSxFQUFRLFFBQVMsQ0FDbkJOLENBQUFBLENBQU9NLENBQUFBLENBQU8sTUFBTSxDQUFBLENBQ3BCLElBQUEsQ0FBSyxNQUFLLENBQ1YsTUFDRixDQUNBLElBQUEsQ0FBSyxPQUFBLEVBQUEsQ0FDTGlCLEdBQUcsQ0FDQSxJQUFBLENBQU02RixDQUFBQSxFQUFNLENBQ1gsSUFBQSxDQUFLLE9BQUEsRUFBQSxDQUNMckgsRUFBUXFILENBQUMsQ0FBQSxDQUNULEtBQUssSUFBQSxHQUNQLENBQUMsQ0FBQSxDQUNBLEtBQUEsQ0FBT2xFLEdBQU0sQ0FDWixJQUFBLENBQUssVUFDTGxELENBQUFBLENBQU9rRCxDQUFDLEVBQ1IsSUFBQSxDQUFLLElBQUEsR0FDUCxDQUFDLEVBQ0wsQ0FBQSxDQUNBLE1BQUEsQ0FBQWxELENBQUFBLENBQ0EsTUFBQSxDQUFBTSxDQUNGLENBQUMsQ0FBQSxDQUNELEtBQUssSUFBQSxHQUNQLENBQUMsQ0FDSCxDQUVBLE1BQU0sS0FBQSxFQUF1QixDQUMzQixHQUFJLEVBQUEsSUFBQSxDQUFLLE9BQUEsR0FBWSxHQUFLLElBQUEsQ0FBSyxPQUFBLEdBQVksR0FHM0MsT0FBTyxJQUFJLE9BQUEsQ0FBU2lHLENBQUFBLEVBQU8sSUFBQSxDQUFLLFFBQUEsQ0FBV0EsQ0FBRSxDQUMvQyxDQUVRLE1BQU1qRyxDQUFBQSxDQUFxQixDQUNqQyxJQUFNK0csQ0FBQUEsQ0FBcUIsR0FDM0IsSUFBQSxJQUFXQyxDQUFBQSxJQUFTLEtBQUssTUFBQSxDQUNuQkEsQ0FBQUEsQ0FBTSxTQUFXaEgsQ0FBQUEsQ0FDbkJnSCxDQUFBQSxDQUFNLE9BQU9oSCxDQUFBQSxDQUFPLE1BQU0sQ0FBQSxDQUUxQitHLENBQUFBLENBQUssSUFBQSxDQUFLQyxDQUFLLEVBR25CLElBQUEsQ0FBSyxNQUFBLENBQVNELEVBQ2QsSUFBQSxDQUFLLElBQUEsR0FDUCxDQUVRLElBQUEsRUFBTyxDQUNiLEdBQUksSUFBQSxDQUFLLFVBQVksQ0FBQSxFQUFLLElBQUEsQ0FBSyxVQUFZLENBQUEsQ0FBRyxDQUM1QyxLQUFLLFFBQUEsSUFBVyxDQUNoQixJQUFBLENBQUssUUFBQSxDQUFXLE1BQUEsQ0FDaEIsTUFDRixDQUNJLElBQUEsQ0FBSyxPQUFBLENBQVUsS0FBSyxjQUFBLEVBQ3RCLElBQUEsQ0FBSyxPQUFPLEtBQUEsRUFBTSxFQUFHLE1BRXpCLENBQ0YsRUN2RU8sSUFBTUUsR0FBd0IsWUFBQSxDQWVyQyxlQUFzQkMsRUFBYXZFLENBQUFBLENBQXVCUSxDQUFBQSxDQUFzQyxDQUk5RixJQUFBZ0UsQ0FBQUEsQ0FBQSxPQUhBLElBQU1DLENBQUFBLENBQU0sSUFBSUMsbUJBQUFBLENBQ2hCRCxDQUFBQSxDQUFJLGFBQUEsQ0FBY3pFLENBQUFBLENBQUssS0FBSyxDQUFBLENBRTVCLElBQU0yRSxDQUFBQSxDQUFRQyxDQUFBQSxDQUFBSixFQUFBLElBQUksZUFBQSxDQUFBLENBQ2xCRyxFQUFNLEdBQUEsQ0FBSUYsQ0FBRyxFQUNiQSxDQUFBQSxDQUFJLE9BQUEsQ0FBVXpFLEVBQUssS0FBQSxDQUFNLEVBQUEsQ0FDekJ5RSxFQUFJLEtBQUEsQ0FBUXpFLENBQUFBLENBQUssTUFDakJ5RSxDQUFBQSxDQUFJLE1BQUEsQ0FBU3pFLENBQUFBLENBQUssTUFBQSxDQUNsQnlFLENBQUFBLENBQUksV0FBQSxDQUFjekUsRUFBSyxXQUFBLENBQ3ZCeUUsQ0FBQUEsQ0FBSSxTQUFXLElBQUlJLGVBQUFBLENBQVMsRUFBRzdFLENBQUFBLENBQUssR0FBRyxFQUN2Q3lFLENBQUFBLENBQUksU0FBQSxDQUFZLElBQUlJLGVBQUFBLENBQVM3RSxDQUFBQSxDQUFLLElBQUssQ0FBQyxDQUFBLENBQ3hDeUUsRUFBSSxPQUFBLENBQVV6RSxDQUFBQSxDQUFLLEdBQUEsQ0FBTSxDQUFBLENBQ3pCeUUsQ0FBQUEsQ0FBSSxPQUFBLENBQVUsT0FBT3pFLENBQUFBLENBQUssT0FBTyxFQUNqQ3lFLENBQUFBLENBQUksUUFBQSxDQUFTSyxxQ0FBMkIsQ0FBQSxDQUNwQzlFLENBQUFBLENBQUssV0FDUHlFLENBQUFBLENBQUksUUFBQSxDQUFXekUsRUFBSyxRQUFBLENBQUEsQ0FFbEJBLENBQUFBLENBQUssYUFBZSxLQUFBLENBQUEsR0FDdEJ5RSxDQUFBQSxDQUFJLFdBQWF6RSxDQUFBQSxDQUFLLFVBQUEsQ0FBQSxDQUVwQkEsQ0FBQUEsQ0FBSyxXQUFBLEdBQ1B5RSxDQUFBQSxDQUFJLFdBQUEsQ0FBY3pFLEVBQUssV0FBQSxDQUFBLENBRXpCLElBQUEsR0FBVyxDQUFDK0UsQ0FBQUEsQ0FBR1osQ0FBQyxJQUFLLE1BQUEsQ0FBTyxPQUFBLENBQVFuRSxFQUFLLE9BQUEsRUFBVyxFQUFFLENBQUEsQ0FDcER5RSxDQUFBQSxDQUFJLFVBQVVNLENBQUFBLENBQUdaLENBQUMsRUFFcEJhLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNUCxDQUFBQSxDQUFJLEtBQUEsQ0FBTXpFLENBQUFBLENBQUssTUFBTyxJQUFJLENBQUEsQ0FBR1EsQ0FBSyxDQUFBLENBQ2pFbUUsQ0FBQUEsQ0FBTSxNQUFLLENBQ1gsT0FBT0YsUUF6QlAzQyxDQUFBQSxDQUFBLENBQUEsSUFBQW1ELEVBQUFuRCxDQUFBQSxDQUFBb0QsQ0FBQUEsQ0FBQSxjQUFBQyxDQUFBQSxDQUFBWCxDQUFBQSxDQUFBUyxFQUFBQyxDQUFBQSxFQUFBQSxDQTBCRixDQUVPLFNBQVNFLEVBQUFBLENBQVU3QyxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQjZDLEVBQThCLENBSXJGLElBQUFiLEVBQUEsRUFBQSxDQUFBLEdBQUEsQ0FIQSxJQUFNYyxFQUFRLElBQUlDLFlBQUFBLENBQ2xCRCxFQUFNLEtBQUEsRUFBTSxDQUVaLElBQU1YLENBQUFBLENBQVFDLENBQUFBLENBQUFKLEVBQUEsSUFBSSxlQUFBLENBQUEsQ0FDbEJHLEVBQU0sR0FBQSxDQUFJVyxDQUFLLENBQUEsQ0FDZkEsQ0FBQUEsQ0FBTSxNQUFBLENBQVNELENBQUFBLENBQ2ZDLEVBQU0sS0FBQSxDQUFRL0MsQ0FBQUEsQ0FDZCtDLEVBQU0sTUFBQSxDQUFTOUMsQ0FBQUEsQ0FDZndDLG1CQUFZLFlBQUEsQ0FBYU0sQ0FBQUEsQ0FBTSxVQUFVLENBQUMsQ0FBQSxDQUFHLGlCQUFpQixDQUFBLENBQzlEWCxDQUFBQSxDQUFNLE1BQUssQ0FDWCxPQUFPVyxRQVBQeEQsQ0FBQUEsQ0FBQSxDQUFBLElBQUFtRCxDQUFBQSxDQUFBbkQsQ0FBQUEsQ0FBQW9ELENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsRUFBQVgsQ0FBQUEsQ0FBQVMsQ0FBQUEsQ0FBQUMsSUFRRixDQUVPLFNBQVNNLEdBQXFCLENBQ25DLElBQU1DLEVBQU0sSUFBSUMsYUFBQUEsQ0FDaEIsT0FBQUQsQ0FBQUEsQ0FBSSxLQUFBLEdBQ0dBLENBQ1QsQ0FFQSxlQUFzQkUsRUFBQUEsQ0FBYWxCLENBQUFBLENBQW1CZ0IsQ0FBQUEsQ0FBYUcsQ0FBQUEsQ0FBZ0JDLENBQUFBLENBQW1DLENBQ3BILE9BQWEsQ0FDWCxJQUFNdkMsRUFBSSxNQUFNbUIsQ0FBQUEsQ0FBSSxjQUFjZ0IsQ0FBRyxDQUFBLENBQ3JDLEdBQUluQyxDQUFBQSxHQUFNd0Msd0JBQUFBLEVBQWtCeEMsQ0FBQUEsR0FBTXlDLHNCQUNoQyxNQUVGLEdBQUksQ0FDRmYsa0JBQUFBLENBQVksWUFBQSxDQUFhMUIsRUFBRyxlQUFlLENBQUEsQ0FDM0NtQyxDQUFBQSxDQUFJLFdBQUEsQ0FBY0csQ0FBQUEsQ0FBTyxLQUFBLENBQ3JCSCxFQUFJLFFBQUEsR0FBYSxFQUFBLEdBQ25CQSxFQUFJLFFBQUEsQ0FBVyxFQUFBLENBQUEsQ0FFakJBLEVBQUksU0FBQSxDQUFVaEIsQ0FBQUEsQ0FBSSxTQUFVbUIsQ0FBQUEsQ0FBTyxRQUFRLEVBQzNDLE1BQU1DLENBQUFBLENBQU0sWUFBWUosQ0FBRyxFQUM3QixRQUFFLENBQ0FBLENBQUFBLENBQUksS0FBQSxHQUNOLENBQ0YsQ0FDRixDQzFGTyxJQUFNTyxDQUFBQSxDQUFOLE1BQU1DLENBQWlDLENBQ25DLElBQ0EsR0FBQSxDQUNBLEdBQUEsQ0FDRCxLQUNBLElBQUEsQ0FFUixhQUFhLE9BQU8xRCxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQixDQUNqRCxJQUFNMEQsQ0FBQUEsQ0FBUUMsYUFBTSxpQkFBQSxDQUFrQkMscUJBQWMsQ0FBQSxDQUNwRCxPQUFBQyxTQUFBQSxDQUFHSCxDQUFBQSxDQUFPLHlCQUF5QixDQUFBLENBQzVCLElBQUlELEVBQVcxRCxDQUFBQSxDQUFPQyxDQUFBQSxDQUFRMEQsQ0FBSyxDQUM1QyxDQUVRLFlBQVkzRCxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQjhELEVBQVksQ0FDN0QsSUFBQSxDQUFLLEtBQU9BLENBQUFBLENBQ1osSUFBQSxDQUFLLElBQU1sQixFQUFBQSxDQUFVN0MsQ0FBQUEsQ0FBT0MsQ0FBQUEsQ0FBUStELHNCQUFlLENBQUEsQ0FDbkQsSUFBQSxDQUFLLElBQU1uQixFQUFBQSxDQUFVN0MsQ0FBQUEsQ0FBT0MsRUFBUWdFLDBCQUFtQixDQUFBLENBQ3ZELEtBQUssR0FBQSxDQUFNaEIsQ0FBQUEsR0FDYixDQU9BLE1BQU0sS0FBNkIsQ0FFakMsSUFBQWhCLEVBQUEsRUFBQSxDQUFBLEdBQUEsQ0FBQSxJQUFNRyxDQUFBQSxDQUFRQyxFQUFBSixDQUFBQSxDQUFBLElBQUksZUFBQSxDQUFBLENBQ2xCLElBQU04QixDQUFBQSxDQUFNLElBQUk1QixvQkFDaEI0QixDQUFBQSxDQUFJLGFBQUEsQ0FBYyxLQUFLLElBQUksQ0FBQSxDQUMzQjNCLEVBQU0sR0FBQSxDQUFJMkIsQ0FBRyxFQUNidEIsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1zQixDQUFBQSxDQUFJLEtBQUEsQ0FBTSxLQUFLLElBQUksQ0FBQSxDQUFHLGtCQUFrQixDQUFBLENBQ3ZFM0IsQ0FBQUEsQ0FBTSxJQUFBLEVBQUssQ0FDWCxPQUFPMkIsQ0FBQUEsQ0FBQUEsTUFOUHhFLEVBQUEsQ0FBQSxJQUFBbUQsQ0FBQUEsQ0FBQW5ELEVBQUFvRCxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLEVBQUFYLENBQUFBLENBQUFTLENBQUFBLENBQUFDLElBT0YsQ0FFQSxNQUFNLFVBQVV1QixDQUFBQSxDQUFpQyxDQUMvQyxJQUFBakMsQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUFBLElBQU04QixFQUFNMUIsQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQSxNQUFNLElBQUEsQ0FBSyxHQUFBLEVBQUksQ0FBQSxDQUMzQixLQUFLLEdBQUEsQ0FBSSxJQUFBLENBQU9pQyxFQUNoQnpCLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNc0IsQ0FBQUEsQ0FBSSxVQUFBLENBQVcsS0FBSyxHQUFHLENBQUEsQ0FBRyx1QkFBdUIsQ0FBQSxDQUNoRixJQUFBLENBQUssSUFBSSxLQUFBLEVBQU0sQ0FDZnRCLG1CQUFZLFlBQUEsQ0FBYSxNQUFNc0IsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsSUFBQSxDQUFLLEdBQUcsRUFBRyx5QkFBeUIsQ0FBQSxDQUNwRixPQUFPLElBQUEsQ0FBSyxHQUFBLENBQUEsTUFMWnhFLEVBQUEsQ0FBQSxJQUFBbUQsQ0FBQUEsQ0FBQW5ELEVBQUFvRCxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLEVBQUFYLENBQUFBLENBQUFTLENBQUFBLENBQUFDLElBTUYsQ0FFQSxJQUFJLEtBQU0sQ0FDUixHQUFJLENBQUMsSUFBQSxDQUFLLElBQUEsQ0FBTSxDQUNkLElBQU13QixDQUFBQSxDQUFNLElBQUlDLDRCQUNWQyxDQUFBQSxDQUFNLElBQUEsQ0FBSyxJQUFJLE1BQUEsQ0FDckJGLENBQUFBLENBQUksV0FDRixJQUFBLENBQUssR0FBQSxDQUFJLE1BQ1QsSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUNURSxDQUFBQSxDQUNBLElBQUEsQ0FBSyxJQUFJLEtBQUEsQ0FDVCxJQUFBLENBQUssR0FBQSxDQUFJLE1BQUEsQ0FDVEosMEJBQUFBLENBQ0FLLG1CQUNGLEVBQ0EsSUFBQSxDQUFLLElBQUEsQ0FBT0gsRUFDZCxDQUNBLE9BQU8sS0FBSyxJQUNkLENBRUEsQ0FBQyxNQUFBLENBQU8sT0FBTyxHQUFVLENBQ3ZCLElBQUEsQ0FBSyxJQUFJLE1BQUEsQ0FBTyxPQUFPLEdBQUUsQ0FDekIsSUFBQSxDQUFLLEdBQUEsQ0FBSSxNQUFBLENBQU8sT0FBTyxDQUFBLEdBQ3ZCLElBQUEsQ0FBSyxHQUFBLENBQUksT0FBTyxPQUFPLENBQUEsR0FDdkIsSUFBQSxDQUFLLElBQUEsR0FBTyxPQUFPLE9BQU8sQ0FBQSxHQUM1QixDQUNGLENBQUEsQ0M1REEsSUFBTUksR0FBbUQsQ0FBRSxDQUFDQywyQkFBaUIsRUFBRyxLQUFBLENBQU8sQ0FBQ0MsNEJBQWtCLEVBQUcsTUFBTyxFQVd2R0MsRUFBQUEsQ0FBTixNQUFNQyxDQUFtQyxDQUN0QyxJQUFBLENBQ0EsUUFDQSxJQUFBLENBQ0EsUUFBQSxDQUNBLFFBQ0EsVUFBQSxDQUNBLFlBQUEsQ0FDQSxPQUNBLE9BQUEsQ0FDQSxRQUFBLENBQ0EsUUFDQSxJQUFBLENBQU8sRUFBQSxDQUVQLFdBQUEsQ0FBWXpDLENBQUFBLENBQW1CbUIsQ0FBQUEsQ0FBZ0J1QixDQUFBQSxDQUE4RCxDQUNuSCxJQUFBLENBQUssSUFBQSxDQUFPMUMsRUFDWixJQUFBLENBQUssT0FBQSxDQUFVbUIsRUFDZixJQUFBLENBQUssUUFBQSxDQUFXbkIsRUFBSSxVQUFBLENBQ3BCLElBQUEsQ0FBSyxRQUFVMEMsQ0FBQUEsQ0FDZixJQUFBLENBQUssV0FBYTFDLENBQUFBLENBQUksU0FBQSxDQUN0QixLQUFLLElBQUEsQ0FBT2UsQ0FBQUEsRUFBVyxDQUN2QixJQUFBLENBQUssWUFBQSxDQUFlLElBQUlELGFBQ3hCLElBQUEsQ0FBSyxZQUFBLENBQWEsUUFDcEIsQ0FFQSxhQUFhLE1BQUEsQ0FBT3ZGLENBQUFBLENBQWtELENBTXBFLElBQUF3RSxDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBTEEsSUFBTTBCLENBQUFBLENBQVFDLFlBQUFBLENBQU0sa0JBQWtCbkcsQ0FBQUEsQ0FBSyxTQUFTLEVBQ3BELEdBQUksQ0FBQ2tHLENBQUFBLENBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSw0QkFBNEJsRyxDQUFBQSxDQUFLLFNBQVMsRUFBRSxDQUFBLENBRzlELElBQU0yRSxFQUFRQyxDQUFBQSxDQUFBSixDQUFBQSxDQUFBLElBQUksZUFBQSxDQUFBLENBQ2xCLElBQU1DLEVBQU0sSUFBSUMsbUJBQUFBLENBQ2hCRCxFQUFJLGFBQUEsQ0FBY3lCLENBQUssRUFDdkJ2QixDQUFBQSxDQUFNLEdBQUEsQ0FBSUYsQ0FBRyxDQUFBLENBQ2JBLENBQUFBLENBQUksT0FBQSxDQUFVeUIsRUFBTSxFQUFBLENBQ3BCekIsQ0FBQUEsQ0FBSSxhQUFlekUsQ0FBQUEsQ0FBSyxZQUFBLENBQ3hCeUUsRUFBSSxVQUFBLENBQWF6RSxDQUFBQSxDQUFLLGNBQ3RCeUUsQ0FBQUEsQ0FBSSxhQUFBLENBQWdCMkMsbUNBQ3BCM0MsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsSUFBSUksZUFBQUEsQ0FBUyxDQUFBLENBQUc3RSxFQUFLLGFBQWEsQ0FBQSxDQUNqRHlFLENBQUFBLENBQUksT0FBQSxDQUFVLE1BQUEsQ0FBT3pFLENBQUFBLENBQUssT0FBTyxDQUFBLENBQzdCQSxDQUFBQSxDQUFLLGNBQ1B5RSxDQUFBQSxDQUFJLFFBQUEsQ0FBU0sscUNBQTJCLENBQUEsQ0FFMUNFLGtCQUFBQSxDQUFZLGFBQWEsTUFBTVAsQ0FBQUEsQ0FBSSxNQUFNeUIsQ0FBQUEsQ0FBTyxJQUFJLEVBQUcsZ0JBQWdCLENBQUEsQ0FDdkUsSUFBTU4sQ0FBQUEsQ0FBUzVGLENBQUFBLENBQUssS0FBQSxDQUFNLFNBQUEsQ0FBVXlFLENBQUcsQ0FBQSxDQUN2Q0UsRUFBTSxJQUFBLEVBQUssQ0FDWCxPQUFPLElBQUl1QyxDQUFBQSxDQUFhekMsRUFBS21CLENBQUFBLENBQVE1RixDQUFBQSxDQUFLLFlBQVksQ0FBQSxDQUFBLE1BaEJ0RDhCLENBQUFBLENBQUEsS0FBQW1ELENBQUFBLENBQUFuRCxDQUFBQSxDQUFBb0QsRUFBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxDQUFBQSxDQUFBWCxFQUFBUyxDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQWlCRixDQUVBLFlBQUEsQ0FBYW1DLENBQUFBLENBQTRCLENBSXZDLElBQUE3QyxDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBSEEsS0FBSyxNQUFBLEdBQVMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQzlCLEtBQUssT0FBQSxDQUFVNkMsQ0FBQUEsQ0FFZixJQUFNMUMsQ0FBQUEsQ0FBUUMsQ0FBQUEsQ0FBQUosRUFBQSxJQUFJLGVBQUEsQ0FBQSxDQUNsQixJQUFNOEMsQ0FBQUEsQ0FBUSxJQUFJQyxrQkFBQUEsQ0FDbEJELENBQUFBLENBQU0sS0FBQSxFQUFNLENBQ1ozQyxFQUFNLEdBQUEsQ0FBSTJDLENBQUssRUFDZixJQUFNRSxDQUFBQSxDQUFVQyxjQUFPLFNBQUEsQ0FBVSxTQUFTLEVBQzFDLElBQU1DLENBQUFBLENBQVNKLEVBQU0sWUFBQSxDQUNuQkUsQ0FBQUEsQ0FDQSxNQUNBLENBQUEsWUFBQSxFQUFlSCxDQUFZLHFEQUFxREEsQ0FBWSxDQUFBLENBQzlGLENBQUEsQ0FDQSxHQUFJLENBQUNLLENBQUFBLENBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSwwQkFBMEIsQ0FBQSxDQUU1QyxJQUFNQyxFQUFjRixhQUFBQSxDQUFPLFNBQUEsQ0FBVSxhQUFhLENBQUEsQ0FDbEQsSUFBTUcsRUFBVU4sQ0FBQUEsQ0FBTSxZQUFBLENBQWFLLEVBQWEsTUFBTSxDQUFBLENBQ3RELEdBQUksQ0FBQ0MsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDhCQUE4QixFQUVoRCxJQUFNQyxDQUFBQSxDQUFVZixHQUFnQixJQUFBLENBQUssT0FBTyxHQUFLLEtBQUEsQ0FDakQsSUFBTWdCLEVBQWEsQ0FBQSxvQkFBQSxFQUF1QkQsQ0FBTyxpQkFBaUIsSUFBQSxDQUFLLFFBQVEsMENBQTBDLElBQUEsQ0FBSyxVQUFVLE9BQ3hJLElBQU1FLENBQUFBLENBQVVDLGtCQUFBQSxDQUFZLFVBQUEsQ0FBVyxDQUFDLENBQUUsS0FBTSxJQUFBLENBQU0sU0FBQSxDQUFXTixFQUFRLE1BQUEsQ0FBUSxDQUFFLENBQUMsQ0FBQyxDQUFBLENBQ3JGLElBQU1PLENBQUFBLENBQVNELGtCQUFBQSxDQUFZLFdBQVcsQ0FBQyxDQUFFLEtBQU0sS0FBQSxDQUFPLFNBQUEsQ0FBV0osRUFBUyxNQUFBLENBQVEsQ0FBRSxDQUFDLENBQUMsQ0FBQSxDQUN0RjVDLGtCQUFBQSxDQUFZLGFBQWFzQyxDQUFBQSxDQUFNLFFBQUEsQ0FBU1EsRUFBWUcsQ0FBQUEsQ0FBUUYsQ0FBTyxFQUFHLGdCQUFnQixDQUFBLENBQ3RGL0MsbUJBQVksWUFBQSxDQUFhc0MsQ0FBQUEsQ0FBTSxZQUFXLENBQUcsY0FBYyxFQUMzRDNDLENBQUFBLENBQU0sSUFBQSxHQUNOLElBQUEsQ0FBSyxNQUFBLENBQVMyQyxDQUFBQSxDQUNkLElBQUEsQ0FBSyxPQUFBLENBQVVJLENBQUFBLENBQ2YsS0FBSyxRQUFBLENBQVdFLEVBQUFBLENBQUFBLE1BM0JoQjlGLEVBQUEsQ0FBQSxJQUFBbUQsQ0FBQUEsQ0FBQW5ELEVBQUFvRCxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLEVBQUFYLENBQUFBLENBQUFTLENBQUFBLENBQUFDLElBNEJGLENBRUEsTUFBTSxPQUFPZ0QsQ0FBQUEsQ0FBYXJDLENBQUFBLENBQW1DLENBVzNELElBQUFyQixDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBVkEsR0FBSSxDQUFDLElBQUEsQ0FBSyxTQUFXLENBQUMsSUFBQSxDQUFLLFFBQ3pCLE9BRUYsSUFBTVYsRUFBTSxJQUFJLFlBQUEsQ0FBYW9FLEVBQUksTUFBQSxDQUFRQSxDQUFBQSxDQUFJLFdBQVlBLENBQUFBLENBQUksVUFBQSxDQUFhLENBQUMsQ0FBQSxDQUMzRSxJQUFBLElBQVNyRixFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSWlCLENBQUFBLENBQUksTUFBQSxDQUFRakIsQ0FBQUEsRUFBQUEsQ0FDekIsTUFBQSxDQUFPLFNBQVNpQixDQUFBQSxDQUFJakIsQ0FBQyxDQUFFLENBQUEsR0FDMUJpQixDQUFBQSxDQUFJakIsQ0FBQyxDQUFBLENBQUksQ0FBQSxDQUFBLENBR2IsSUFBTXNGLENBQUFBLENBQVdyRSxDQUFBQSxDQUFJLFFBQVUsQ0FBQSxDQUMvQixJQUFNd0IsRUFBUVYsQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQWUsYUFBTSxlQUFBLENBQWdCLE1BQUEsQ0FBTyxJQUFBLENBQUt6QixDQUFBQSxDQUFJLE1BQUEsQ0FBUUEsQ0FBQUEsQ0FBSSxXQUFZQSxDQUFBQSxDQUFJLFVBQVUsRUFBRyxDQUMzRixTQUFBLENBQVdxRSxFQUNYLE1BQUEsQ0FBUXBCLDJCQUFBQSxDQUNSLFdBQVksSUFBQSxDQUFLLE9BQUEsQ0FDakIsY0FBZUssa0NBQUFBLENBQ2YsR0FBQSxDQUFLLEtBQUssSUFBQSxDQUNWLFFBQUEsQ0FBVSxDQUFFLEdBQUEsQ0FBSyxDQUFBLENBQUcsR0FBQSxDQUFLLElBQUEsQ0FBSyxPQUFRLENBQ3hDLENBQUMsQ0FBQSxDQUFBLENBQ0QsSUFBQSxDQUFLLE1BQVEsTUFBQSxDQUFPZSxDQUFRLEVBQzVCbkQsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU0sSUFBQSxDQUFLLE9BQUEsQ0FBUSxrQkFBa0JNLENBQUssQ0FBQSxDQUFHLG1CQUFtQixDQUFBLENBQ3pGLE1BQU0sS0FBSyxLQUFBLENBQU1PLENBQUssRUFBQSxDQUFBLE1BVnRCL0QsQ0FBQUEsQ0FBQSxDQUFBLElBQUFtRCxDQUFBQSxDQUFBbkQsRUFBQW9ELENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsRUFBQVgsQ0FBQUEsQ0FBQVMsQ0FBQUEsQ0FBQUMsSUFXRixDQUVBLE1BQU0sS0FBQSxDQUFNVyxDQUFBQSxDQUFtQyxDQUN6QyxJQUFBLENBQUssVUFDUCxNQUFNLElBQUEsQ0FBSyxRQUFRLGlCQUFBLENBQWtCLElBQUksRUFDekMsTUFBTSxJQUFBLENBQUssS0FBQSxDQUFNQSxDQUFLLENBQUEsQ0FBQSxDQUV4QixNQUFNLEtBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDOUIsTUFBTSxLQUFLLFVBQUEsQ0FBV0EsQ0FBSyxFQUM3QixDQUVBLENBQUMsT0FBTyxPQUFPLENBQUEsRUFBVSxDQUN2QixJQUFBLENBQUssSUFBQSxDQUFLLE1BQUssQ0FDZixJQUFBLENBQUssWUFBQSxDQUFhLElBQUEsRUFBSyxDQUN2QixJQUFBLENBQUssU0FBUyxNQUFBLENBQU8sT0FBTyxHQUFFLENBQzlCLElBQUEsQ0FBSyxLQUFLLFdBQUEsR0FDWixDQUVBLE1BQWMsS0FBQSxDQUFNQSxFQUFtQyxDQUNyRCxPQUFhLENBQ1gsSUFBTXZDLENBQUFBLENBQUksTUFBTSxJQUFBLENBQUssUUFBQSxDQUFVLGtCQUFBLENBQW1CLElBQUEsQ0FBSyxZQUFZLENBQUEsQ0FDbkUsR0FBSUEsQ0FBQUEsR0FBTXdDLHdCQUFBQSxFQUFrQnhDLElBQU15QyxxQkFBQUEsQ0FDaEMsTUFFRixHQUFJLENBQ0ZmLGtCQUFBQSxDQUFZLGFBQWExQixDQUFBQSxDQUFHLG9CQUFvQixFQUNoRDBCLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssVUFBVSxJQUFBLENBQUssWUFBWSxDQUFBLENBQUcsb0JBQW9CLENBQUEsQ0FDM0YsTUFBTSxLQUFLLFVBQUEsQ0FBV2EsQ0FBSyxFQUM3QixDQUFBLE9BQUUsQ0FDQSxLQUFLLFlBQUEsQ0FBYSxLQUFBLEdBQ3BCLENBQ0YsQ0FDRixDQUVRLFVBQUEsQ0FBV0EsQ0FBQUEsQ0FBbUMsQ0FDcEQsT0FBT0YsRUFBQUEsQ0FBYSxLQUFLLElBQUEsQ0FBTSxJQUFBLENBQUssSUFBQSxDQUFNLElBQUEsQ0FBSyxPQUFBLENBQVNFLENBQUssQ0FDL0QsQ0FDRixDQUFBLENDbkxPLFNBQVN1QyxDQUFBQSxDQUFTQyxFQUF3QixDQUMvQyxJQUFNQyxFQUFNLE1BQUEsQ0FBTyxLQUFBLENBQU1ELEVBQUssTUFBQSxFQUFVLENBQUMsQ0FBQSxDQUN6QyxJQUFBLElBQVN4RixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSXlGLENBQUFBLENBQUksTUFBQSxDQUFRekYsSUFBSyxDQUNuQyxJQUFJMEYsRUFBTyxDQUFBLENBQ1gsSUFBQSxJQUFTQyxFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxFQUFBQSxDQUNyQkQsQ0FBQUEsQ0FBUUEsR0FBUSxDQUFBLENBQUtGLENBQUFBLENBQUt4RixFQUFJLENBQUEsQ0FBSTJGLENBQUMsQ0FBQSxDQUVyQ0YsQ0FBQUEsQ0FBSXpGLENBQUMsQ0FBQSxDQUFJMEYsRUFDWCxDQUNBLE9BQU9ELENBQ1QsQ0FFTyxJQUFNRyxFQUFOLEtBQWdCLENBQ3JCLEtBQWlCLEVBQUMsQ0FDbEIsRUFBRUMsQ0FBQUEsQ0FBYUMsQ0FBQUEsQ0FBVyxDQUN4QixJQUFBLElBQVM5RixDQUFBQSxDQUFJOEYsRUFBSSxDQUFBLENBQUc5RixDQUFBQSxFQUFLLENBQUEsQ0FBR0EsQ0FBQUEsRUFBQUEsQ0FDMUIsSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFNNkYsQ0FBQUEsRUFBTzdGLENBQUFBLENBQUssQ0FBQyxFQUVqQyxDQUNBLEtBQUs2RixDQUFBQSxDQUF1QixDQUMxQixLQUFLLElBQUEsQ0FBSyxJQUFBLENBQUtBLEVBQU0sQ0FBQSxDQUFJLENBQUMsRUFDNUIsQ0FDQSxFQUFBLENBQUdBLEVBQWEsQ0FDZCxJQUFNdkUsQ0FBQUEsQ0FBSXVFLENBQUFBLENBQU0sQ0FBQSxDQUNWRSxDQUFBQSxDQUFNLEdBQUssSUFBQSxDQUFLLEtBQUEsQ0FBTXpFLENBQUMsQ0FBQSxDQUM3QixJQUFBLElBQVN0QixFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSStGLEVBQU0sQ0FBQSxDQUFHL0YsQ0FBQUEsRUFBQUEsQ0FDM0IsS0FBSyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUVsQixJQUFBLElBQVNBLEVBQUkrRixDQUFBQSxDQUFNLENBQUEsQ0FBRy9GLENBQUFBLEVBQUssQ0FBQSxDQUFHQSxDQUFBQSxFQUFBQSxDQUM1QixJQUFBLENBQUssS0FBSyxJQUFBLENBQU1zQixDQUFBQSxFQUFLdEIsRUFBSyxDQUFDLEVBRS9CLENBQ0EsS0FBQSxDQUFNZ0csQ0FBQUEsQ0FBYSxDQUNqQixLQUFPLElBQUEsQ0FBSyxLQUFLLE1BQUEsQ0FBUyxDQUFBLEdBQU0sR0FDOUIsSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFLQSxDQUFHLEVBRXRCLENBQ0EsSUFBQSxDQUFLL0UsQ0FBQUEsQ0FBZWdGLENBQUFBLENBQWVGLEVBQWEsQ0FDOUMsSUFBQSxJQUFTL0YsRUFBSSxDQUFBLENBQUdBLENBQUFBLENBQUkrRixFQUFLL0YsQ0FBQUEsRUFBQUEsQ0FDdkIsSUFBQSxDQUFLLEtBQUssSUFBQSxDQUFLaUIsQ0FBQUEsQ0FBSWdGLEVBQVFqRyxDQUFDLENBQUUsRUFFbEMsQ0FDRixDQUFBLENBRWFrRyxFQUFOLEtBQWdCLENBQ2IsS0FBQSxDQUNSLEdBQUEsQ0FBTSxDQUFBLENBQ04sV0FBQSxDQUFZN0wsRUFBYyxDQUN4QixJQUFBLENBQUssTUFBUSxFQUFDLENBQ2QsUUFBUzJGLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJM0YsQ0FBQUEsQ0FBSyxNQUFBLENBQVEyRixJQUMvQixJQUFBLElBQVMyRixDQUFBQSxDQUFJLEVBQUdBLENBQUFBLEVBQUssQ0FBQSxDQUFHQSxJQUN0QixJQUFBLENBQUssS0FBQSxDQUFNLElBQUEsQ0FBTXRMLENBQUFBLENBQUsyRixDQUFDLENBQUEsRUFBTTJGLEVBQUssQ0FBQyxFQUd6QyxDQUNBLElBQUksSUFBQSxFQUFPLENBQ1QsT0FBTyxJQUFBLENBQUssS0FDZCxDQUNBLElBQUEsQ0FBS0csRUFBbUIsQ0FDdEIsSUFBSUQsRUFBTSxDQUFBLENBQ1YsSUFBQSxJQUFTN0YsRUFBSSxDQUFBLENBQUdBLENBQUFBLENBQUk4RixDQUFBQSxDQUFHOUYsQ0FBQUEsRUFBQUEsQ0FDckI2RixDQUFBQSxDQUFPQSxDQUFBQSxFQUFPLEVBQUssSUFBQSxDQUFLLEtBQUEsQ0FBTSxLQUFLLEdBQUEsRUFBSyxDQUFBLENBRTFDLE9BQU9BLENBQ1QsQ0FDQSxRQUFpQixDQUNmLElBQUlNLEVBQVEsQ0FBQSxDQUNaLEtBQU8sS0FBSyxLQUFBLENBQU0sSUFBQSxDQUFLLEdBQUcsQ0FBQSxHQUFNLENBQUEsRUFDOUJBLENBQUFBLEVBQUFBLENBQ0EsSUFBQSxDQUFLLEdBQUEsRUFBQSxDQUVQLElBQUEsQ0FBSyxNQUNMLElBQUlOLENBQUFBLENBQU0sRUFDVixJQUFBLElBQVM3RixDQUFBQSxDQUFJLEVBQUdBLENBQUFBLENBQUltRyxDQUFBQSxDQUFPbkcsQ0FBQUEsRUFBQUEsQ0FDekI2RixDQUFBQSxDQUFPQSxDQUFBQSxFQUFPLENBQUEsQ0FBSyxLQUFLLEtBQUEsQ0FBTSxJQUFBLENBQUssS0FBSyxDQUFBLENBRTFDLE9BQU9BLEVBQU0sQ0FDZixDQUNGLENBQUEsQ0M3RUEsSUFBTU8sQ0FBQUEsQ0FBcUIsTUFBQSxDQUFPLEtBQUssQ0FBQyxDQUFBLENBQU0sRUFBTSxDQUFBLENBQU0sQ0FBSSxDQUFDLENBQUEsQ0FLeEQsSUFBTUMsR0FBZSxFQUFBLENBR3JCLElBQU1DLEdBQXFCLEVBQUEsQ0FDckJDLEVBQUFBLENBQVUsR0FDVkMsRUFBQUEsQ0FBVSxFQUFBLENBQ1ZDLEdBQVUsRUFBQSxDQUNWQyxFQUFBQSxDQUFpQixFQUFBLENBUzlCLFNBQVNDLEVBQUFBLENBQWFDLENBQUFBLENBQWlCQyxFQUF3RSxDQUM3RyxJQUFNQyxFQUFRRixDQUFBQSxFQUFXLENBQUEsQ0FBSyxHQUN4QkcsQ0FBQUEsQ0FBQUEsQ0FBWUgsQ0FBQUEsQ0FBVSxJQUFNLENBQUEsQ0FBT0MsQ0FBQUEsRUFBVyxFQUFLLEVBQUEsQ0FDbkRHLENBQUFBLENBQWFILEVBQVUsQ0FBQSxDQUM3QixPQUFPLENBQUUsSUFBQSxDQUFBQyxDQUFBQSxDQUFNLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBUyxVQUFBLENBQUFDLENBQVcsQ0FDckMsQ0FFTyxTQUFTQyxHQUFnQkgsQ0FBQUEsQ0FBY0MsQ0FBQUEsQ0FBaUJDLEVBQXNDLENBQ25HLElBQU1FLEdBQVVKLENBQUFBLENBQU8sRUFBQSxHQUFTLEVBQU9DLENBQUFBLEVBQVcsQ0FBQSxDQUFLLEVBQ2pESSxDQUFBQSxDQUFBQSxDQUFVSixDQUFBQSxDQUFVLEtBQVMsQ0FBQSxDQUFNQyxDQUFBQSxDQUFhLENBQUEsQ0FDdEQsT0FBTyxDQUFDRSxDQUFBQSxDQUFPQyxDQUFLLENBQ3RCLENBR08sU0FBU0MsQ0FBQUEsQ0FBY0MsQ0FBQUEsQ0FBOEIsQ0FDMUQsSUFBTUMsQ0FBQUEsQ0FBa0IsRUFBQyxDQUNyQnRILENBQUFBLENBQUksRUFFUixLQUFPQSxDQUFBQSxDQUFJcUgsRUFBVSxNQUFBLEVBQVEsQ0FDM0IsSUFBSUUsQ0FBQUEsQ0FBUSxDQUFBLENBQ1osR0FBSXZILENBQUFBLENBQUksQ0FBQSxDQUFJcUgsQ0FBQUEsQ0FBVSxRQUFVQSxDQUFBQSxDQUFVckgsQ0FBQyxJQUFNLENBQUEsRUFBS3FILENBQUFBLENBQVVySCxFQUFJLENBQUMsQ0FBQSxHQUFNLEdBQUtxSCxDQUFBQSxDQUFVckgsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLENBQ25HdUgsRUFBUSxDQUFBLENBQUEsS0FBQSxHQUVSdkgsQ0FBQUEsQ0FBSSxFQUFJcUgsQ0FBQUEsQ0FBVSxNQUFBLEVBQ2xCQSxDQUFBQSxDQUFVckgsQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUNqQnFILEVBQVVySCxDQUFBQSxDQUFJLENBQUMsSUFBTSxDQUFBLEVBQ3JCcUgsQ0FBQUEsQ0FBVXJILEVBQUksQ0FBQyxDQUFBLEdBQU0sR0FDckJxSCxDQUFBQSxDQUFVckgsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLENBRXJCdUgsRUFBUSxDQUFBLENBQUEsS0FDSCxDQUNMdkgsSUFDQSxRQUNGLENBRUEsSUFBTXdILENBQUFBLENBQVd4SCxDQUFBQSxDQUFJdUgsQ0FBQUEsQ0FDckIsR0FBSUMsQ0FBQUEsQ0FBVyxDQUFBLENBQWtCSCxFQUFVLE1BQUEsQ0FDekMsTUFHRixJQUFJSSxDQUFBQSxDQUFTSixDQUFBQSxDQUFVLE9BQ3ZCLElBQUEsSUFBU0ssQ0FBQUEsQ0FBSUYsRUFBVyxDQUFBLENBQWlCRSxDQUFBQSxDQUFJTCxFQUFVLE1BQUEsQ0FBUyxDQUFBLENBQUdLLElBQ2pFLEdBQ0VMLENBQUFBLENBQVVLLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDakJMLENBQUFBLENBQVVLLEVBQUksQ0FBQyxDQUFBLEdBQU0sSUFDcEJMLENBQUFBLENBQVVLLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUFNQSxFQUFJLENBQUEsQ0FBSUwsQ0FBQUEsQ0FBVSxRQUFVQSxDQUFBQSxDQUFVSyxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFBS0wsRUFBVUssQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLENBQUEsQ0FDdkcsQ0FDQUQsQ0FBQUEsQ0FBU0MsRUFDVCxLQUNGLENBR0YsR0FBTSxDQUFFLElBQUEsQ0FBQVosRUFBTSxPQUFBLENBQUFDLENBQVEsRUFBSUosRUFBQUEsQ0FBYVUsQ0FBQUEsQ0FBVUcsQ0FBUSxDQUFBLENBQUlILENBQUFBLENBQVVHLEVBQVcsQ0FBQyxDQUFFLEVBQ3JGRixDQUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBQVIsQ0FBQUEsQ0FBTSxPQUFBLENBQUFDLEVBQVMsSUFBQSxDQUFNTSxDQUFBQSxDQUFVLFNBQVNHLENBQUFBLENBQVVDLENBQU0sQ0FBRSxDQUFDLENBQUEsQ0FDdkV6SCxFQUFJeUgsRUFDTixDQUVBLE9BQU9ILENBQ1QsQ0FHTyxTQUFTSyxFQUFBQSxDQUFrQkMsQ0FBQUEsQ0FBYWIsRUFBeUIsQ0FDdEUsSUFBTWMsQ0FBQUEsQ0FBTSxNQUFBLENBQU8sSUFBQSxDQUFLRCxDQUFHLEVBQ3JCLENBQUUsSUFBQSxDQUFBZCxFQUFNLFVBQUEsQ0FBQUUsQ0FBVyxFQUFJTCxFQUFBQSxDQUFha0IsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBSUEsQ0FBQUEsQ0FBSSxDQUFDLENBQUUsQ0FBQSxDQUNwRCxDQUFDQyxDQUFBQSxDQUFJQyxDQUFFLEVBQUlkLEVBQUFBLENBQWdCSCxDQUFBQSxDQUFNQyxDQUFBQSxDQUFTQyxDQUFVLENBQUEsQ0FDMUQsT0FBQWEsRUFBSSxDQUFDLENBQUEsQ0FBSUMsRUFDVEQsQ0FBQUEsQ0FBSSxDQUFDLEVBQUlFLENBQUFBLENBQ0ZGLENBQ1QsQ0FhTyxTQUFTRyxDQUFBQSxDQUEwQjNOLEVBQXNCLENBQzlELElBQU13TixFQUFnQixFQUFDLENBQ3ZCLFFBQVM3SCxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSTNGLENBQUFBLENBQUssTUFBQSxDQUFRMkYsQ0FBQUEsRUFBQUEsQ0FDM0JBLEVBQUksQ0FBQSxDQUFJM0YsQ0FBQUEsQ0FBSyxRQUFVQSxDQUFBQSxDQUFLMkYsQ0FBQyxJQUFNLENBQUEsRUFBSzNGLENBQUFBLENBQUsyRixFQUFJLENBQUMsQ0FBQSxHQUFNLEdBQUszRixDQUFBQSxDQUFLMkYsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQy9FNkgsRUFBSSxJQUFBLENBQUssQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNiN0gsQ0FBQUEsRUFBSyxDQUFBLEVBRUw2SCxFQUFJLElBQUEsQ0FBS3hOLENBQUFBLENBQUsyRixDQUFDLENBQUUsQ0FBQSxDQUdyQixPQUFPLE1BQUEsQ0FBTyxJQUFBLENBQUs2SCxDQUFHLENBQ3hCLENBR08sU0FBU0ksRUFBQUEsQ0FBdUJMLENBQUFBLENBQXFCLENBQzFELElBQU1DLENBQUFBLENBQWdCLEVBQUMsQ0FDdkJBLENBQUFBLENBQUksSUFBQSxDQUFLRCxDQUFBQSxDQUFJLENBQUMsQ0FBQSxDQUFJQSxFQUFJLENBQUMsQ0FBRSxFQUN6QixJQUFJekIsQ0FBQUEsQ0FBUSxFQUNaLElBQUEsSUFBU25HLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSTRILENBQUFBLENBQUksT0FBUTVILENBQUFBLEVBQUFBLENBQzFCbUcsQ0FBQUEsR0FBVSxHQUFLeUIsQ0FBQUEsQ0FBSTVILENBQUMsR0FBTSxDQUFBLEdBQzVCNkgsQ0FBQUEsQ0FBSSxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1YxQixDQUFBQSxDQUFRLEdBRU55QixDQUFBQSxDQUFJNUgsQ0FBQyxJQUFNLENBQUEsQ0FDYm1HLENBQUFBLEVBQUFBLENBRUFBLEVBQVEsQ0FBQSxDQUVWMEIsQ0FBQUEsQ0FBSSxJQUFBLENBQUtELENBQUFBLENBQUk1SCxDQUFDLENBQUUsRUFFbEIsT0FBTyxNQUFBLENBQU8sS0FBSzZILENBQUcsQ0FDeEIsQ0N4SEEsSUFBTUssRUFBQUEsQ0FBYyxFQUFBLENBQ2RDLEVBQUFBLENBQWMsRUFBQSxDQUNkQyxFQUFBQSxDQUFlLEVBQ2ZDLEVBQUFBLENBQWtCLEVBQUEsQ0FDbEJDLEdBQWUsQ0FBQSxDQUNmQyxFQUFBQSxDQUFlLEVBRXJCLFNBQVNDLEVBQUFBLENBQU8vQyxFQUFhZ0QsQ0FBQUEsQ0FBbUJoUCxDQUFBQSxDQUFvQixDQUNsRSxJQUFNaU0sQ0FBQUEsQ0FBTytDLEdBQWEsQ0FBQSxDQUNwQkMsQ0FBQUEsQ0FBTyxHQUFNLENBQUEsRUFBS0QsQ0FBQUEsQ0FBWSxDQUFBLENBQUEsQ0FDOUJFLENBQUFBLENBQU1sRCxDQUFBQSxDQUFJQyxDQUFJLEdBQUssQ0FBQSxDQUN6QkQsQ0FBQUEsQ0FBSUMsQ0FBSSxDQUFBLENBQUlqTSxDQUFBQSxDQUFRa1AsRUFBTUQsQ0FBQUEsQ0FBT0MsQ0FBQUEsQ0FBTSxDQUFDRCxFQUMxQyxDQUVBLFNBQVNFLEVBQUFBLENBQVNDLENBQUFBLENBQWlCQyxFQUE2QixDQUM5RCxJQUFNQyxFQUFPZixDQUFBQSxDQUEwQmEsQ0FBTyxDQUFBLENBQzlDLE9BQUFMLEVBQUFBLENBQU9PLENBQUFBLENBQU1ELEVBQWNWLEVBQUFBLENBQWMsQ0FBQyxFQUMxQ0ksRUFBQUEsQ0FBT08sQ0FBQUEsQ0FBTUQsRUFBY1QsRUFBQUEsQ0FBaUIsQ0FBQyxFQUN0Q0osRUFBQUEsQ0FBdUJjLENBQUksQ0FDcEMsQ0FHTyxTQUFTQyxHQUFrQjNCLENBQUFBLENBQTJCLENBQzNELElBQU1DLENBQUFBLENBQU9GLENBQUFBLENBQWNDLENBQVMsQ0FBQSxDQUNwQyxHQUFJQyxDQUFBQSxDQUFLLFNBQVcsQ0FBQSxDQUNsQixPQUFPRCxFQUVULElBQU00QixDQUFBQSxDQUFtQixFQUFDLENBQzFCLElBQUEsSUFBV3JCLEtBQU9OLENBQUFBLENBQU0sQ0FDdEIsSUFBSWpOLENBQUFBLENBQU91TixDQUFBQSxDQUFJLEtBQ1hBLENBQUFBLENBQUksSUFBQSxHQUFTckIsR0FDZmxNLENBQUFBLENBQU91TyxFQUFBQSxDQUFTaEIsQ0FBQUEsQ0FBSSxJQUFBLENBQU1NLEVBQVcsQ0FBQSxDQUM1Qk4sRUFBSSxJQUFBLEdBQVNwQixFQUFBQSxHQUN0Qm5NLEVBQU91TyxFQUFBQSxDQUFTaEIsQ0FBQUEsQ0FBSSxLQUFNTyxFQUFXLENBQUEsQ0FBQSxDQUV2Q2MsRUFBTyxJQUFBLENBQUs3QyxDQUFBQSxDQUFvQi9MLENBQUksRUFDdEMsQ0FDQSxPQUFPLE1BQUEsQ0FBTyxNQUFBLENBQU80TyxDQUFNLENBQzdCLENBSUEsU0FBU0MsRUFBQUEsQ0FBYUMsQ0FBQUEsQ0FBZVYsQ0FBQUEsQ0FBbUJXLEVBQXdCLENBQzlFLElBQU1MLEVBQU9mLENBQUFBLENBQTBCbUIsQ0FBSyxFQUN0Q0UsQ0FBQUEsQ0FBSyxJQUFJbkQsRUFBVTZDLENBQUksQ0FBQSxDQUN2Qk8sRUFBSyxJQUFJMUQsQ0FBQUEsQ0FDZixRQUFTNUYsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEVBQUl5SSxDQUFBQSxDQUFXekksQ0FBQUEsRUFBQUEsQ0FDN0JzSixDQUFBQSxDQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUMsRUFJekIsSUFGQUEsQ0FBQUEsQ0FBRyxRQUFPLENBQ1ZDLENBQUFBLENBQUcsR0FBR0YsQ0FBTSxDQUFBLENBQ0xDLEVBQUcsR0FBQSxDQUFNQSxDQUFBQSxDQUFHLEtBQUssTUFBQSxFQUN0QkMsQ0FBQUEsQ0FBRyxLQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FFekIsS0FBT0MsQ0FBQUEsQ0FBRyxJQUFBLENBQUssT0FBUyxDQUFBLEdBQU0sQ0FBQSxFQUM1QkEsRUFBRyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUVoQixPQUFPckIsR0FBdUIxQyxDQUFBQSxDQUFTK0QsQ0FBQUEsQ0FBRyxJQUFJLENBQUMsQ0FDakQsQ0FFQSxTQUFTQyxFQUFBQSxDQUFhSixDQUFBQSxDQUFlVixDQUFBQSxDQUFtQmUsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQXlCLENBQ2hHLElBQU1WLENBQUFBLENBQU9mLEVBQTBCbUIsQ0FBSyxDQUFBLENBQ3RDRSxFQUFLLElBQUluRCxDQUFBQSxDQUFVNkMsQ0FBSSxDQUFBLENBQ3ZCTyxDQUFBQSxDQUFLLElBQUkxRCxDQUFBQSxDQUNmLElBQUEsSUFBUzVGLEVBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJeUksRUFBV3pJLENBQUFBLEVBQUFBLENBQzdCc0osQ0FBQUEsQ0FBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQU16QixJQUpBQSxDQUFBQSxDQUFHLE1BQUEsR0FDSEEsQ0FBQUEsQ0FBRyxNQUFBLEdBQ0hDLENBQUFBLENBQUcsRUFBQSxDQUFHRSxDQUFPLENBQUEsQ0FDYkYsQ0FBQUEsQ0FBRyxHQUFHRyxDQUFPLENBQUEsQ0FDTkosRUFBRyxHQUFBLENBQU1BLENBQUFBLENBQUcsSUFBQSxDQUFLLE1BQUEsRUFDdEJDLENBQUFBLENBQUcsSUFBQSxDQUFLLEtBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBRXpCLEtBQU9DLENBQUFBLENBQUcsSUFBQSxDQUFLLE9BQVMsQ0FBQSxHQUFNLENBQUEsRUFDNUJBLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFaEIsT0FBT3JCLEdBQXVCMUMsQ0FBQUEsQ0FBUytELENBQUFBLENBQUcsSUFBSSxDQUFDLENBQ2pELENBR08sU0FBU0ksRUFBQUEsQ0FBZ0JDLENBQUFBLENBQXFCLENBQ25ELElBQU1DLENBQUFBLENBQWlCekIsR0FBYyxFQUFBLENBQ3JDLE9BQU9lLEdBQWFTLENBQUFBLENBQUtDLENBQUFBLENBQWdCLENBQUMsQ0FDNUMsQ0FHTyxTQUFTQyxFQUFBQSxDQUFnQkMsQ0FBQUEsQ0FBcUIsQ0FDbkQsT0FBT1AsRUFBQUEsQ0FBYU8sQ0FBQUEsQ0FBSyxFQUFBLENBQTJCLENBQUEsQ0FBRyxDQUFDLENBQzFELENBSUEsU0FBU0MsR0FBT1YsQ0FBQUEsQ0FBdUIsQ0FDckMsSUFBTVcsQ0FBQUEsQ0FBS1gsQ0FBQUEsQ0FBRyxRQUFPLENBQ3JCLE9BQU9XLEVBQUssQ0FBQSxDQUFLQSxDQUFBQSxDQUFLLEdBQU0sQ0FBQSxDQUFJLEVBQUVBLEdBQU0sQ0FBQSxDQUMxQyxDQUdBLFNBQVNDLEVBQUFBLENBQXVCWixDQUFBQSxDQUFlYSxDQUFBQSxDQUFnQyxDQUU3RSxHQURrQmIsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNaLENBQ2IsSUFBTWMsQ0FBQUEsQ0FBaUJkLEVBQUcsTUFBQSxFQUFPLENBQ2pDLEdBQUljLENBQUFBLEdBQW1CLENBQUEsQ0FDckIsTUFBTSxJQUFJLEtBQUEsQ0FBTSw0Q0FBNENBLENBQWMsQ0FBQSxDQUFFLENBQUEsQ0FFOUVkLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxNQUFBLEdBQ0gsSUFBQSxJQUFTM0IsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxFQUFLd0MsQ0FBQUEsQ0FBa0J4QyxJQUN4QjJCLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxFQUVwQkEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsRUFHZixNQUFPLENBQ0wsSUFBTWUsQ0FBQUEsQ0FBU2YsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDbkJnQixFQUFTaEIsQ0FBQUEsQ0FBRyxNQUFBLEdBQ2xCLElBQUEsSUFBUyxDQUFBLENBQUksRUFBRyxDQUFBLENBQUllLENBQUFBLENBQVEsQ0FBQSxFQUFBLENBQzFCZixDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUNWQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBRVgsSUFBQSxJQUFTLENBQUEsQ0FBSSxFQUFHLENBQUEsQ0FBSWdCLENBQUFBLENBQVEsQ0FBQSxFQUFBLENBQzFCaEIsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDVkEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUViLENBQ0YsQ0FHQSxTQUFTaUIsRUFBQUEsQ0FBdUJqQixDQUFBQSxDQUFla0IsRUFBaUJDLENBQUFBLENBQThCLENBRTVGLEdBREFuQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxFQUFFLENBQUEsQ0FDTkEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxHQUFNLENBQUEsQ0FDakIsTUFBTSxJQUFJLEtBQUEsQ0FBTSx5REFBeUQsQ0FBQSxDQUUzRSxJQUFNb0IsRUFBU0YsQ0FBQUEsRUFBV2xFLEVBQUFBLEVBQWdCa0UsR0FBV2pFLEVBQUFBLENBQ2pEbUUsQ0FBQUEsRUFDRnBCLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFFWEEsQ0FBQUEsQ0FBRyxNQUFBLEdBQ0gsSUFBTXFCLENBQUFBLENBQVlyQixFQUFHLE1BQUEsRUFBTyxDQUM1QixHQUFJLENBQUNvQixDQUFBQSxDQUFRLENBUVgsR0FQQXBCLENBQUFBLENBQUcsSUFBQSxDQUFLbUIsRUFBSSxhQUFhLENBQUEsQ0FDRW5CLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFHekJtQixDQUFBQSxDQUFJLHNCQUFBLENBQXlCLEdBQ3RDbkIsQ0FBQUEsQ0FBRyxJQUFBLENBQUssS0FBSyxJQUFBLENBQUssSUFBQSxDQUFLLEtBQUttQixDQUFBQSxDQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQSxDQUZ4RFAsRUFBQUEsQ0FBdUJaLEVBQUltQixDQUFBQSxDQUFJLGdCQUFnQixFQUk3Q0EsQ0FBQUEsQ0FBSSxzQkFBQSxDQUNOLE1BQU0sSUFBSSxLQUFBLENBQU0sb0RBQW9ELENBQUEsQ0FFbEVBLENBQUFBLENBQUksdUJBQ05uQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBRWIsQ0FDQSxPQUFJbUIsQ0FBQUEsQ0FBSSxVQUFBLEdBQ05uQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxJQUVQcUIsQ0FBQUEsR0FBY25DLEVBQUFBLEVBQWdCbUMsSUFBY3BDLEVBQUFBLElBQ3pCZSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLEdBRTVCQSxFQUFHLE1BQUEsRUFBTyxDQUNOcUIsSUFBY3BDLEVBQUFBLEVBQ2hCZSxDQUFBQSxDQUFHLFFBQU8sQ0FBQSxDQUdWcUIsQ0FBQUEsR0FBY3BDLEVBQUFBLEVBQ2hCZSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBRVBtQixDQUFBQSxDQUFJLGdCQUFBLEVBQ05uQixFQUFHLElBQUEsQ0FBSyxDQUFDLEVBRVhBLENBQUFBLENBQUcsTUFBQSxJQUVMVSxFQUFBQSxDQUFPVixDQUFFLEVBQ0xtQixDQUFBQSxDQUFJLGdDQUFBLEVBQ05uQixFQUFHLElBQUEsQ0FBSyxDQUFDLEVBRUpBLENBQUFBLENBQUcsR0FDWixDQU9PLFNBQVNzQixFQUFBQSxDQUF3QkMsQ0FBQUEsQ0FBZUwsRUFBaUJDLENBQUFBLENBQThCLENBQ3BHLElBQU16QixDQUFBQSxDQUFPZixDQUFBQSxDQUEwQjRDLENBQUssQ0FBQSxDQUN0Q3ZCLENBQUFBLENBQUssSUFBSW5ELENBQUFBLENBQVU2QyxDQUFJLEVBRXZCOEIsQ0FBQUEsQ0FBUSxJQUFJM0UsRUFBVTZDLENBQUksQ0FBQSxDQUMxQitCLEVBQUlSLEVBQUFBLENBQXVCTyxDQUFBQSxDQUFPTixDQUFBQSxDQUFTQyxDQUFHLENBQUEsQ0FDOUNPLENBQUFBLENBQWVELEVBQUksQ0FBQSxHQUFNLENBQUEsQ0FBSSxFQUFJLENBQUEsQ0FBS0EsQ0FBQUEsQ0FBSSxFQUMxQ0UsQ0FBQUEsQ0FBQUEsQ0FBdUJGLENBQUFBLENBQUlDLENBQUFBLEVBQWdCLENBQUEsQ0FFM0N6QixDQUFBQSxDQUFLLElBQUkxRCxFQUNmLElBQUEsSUFBUzVGLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSSxFQUFBLENBQUlBLElBQ3RCc0osQ0FBQUEsQ0FBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQVd6QixJQVRBQyxFQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBQ1JrQixDQUFBQSxFQUFXbEUsSUFBZ0JrRSxDQUFBQSxFQUFXakUsRUFBQUEsRUFFbkRnRCxFQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBR3pCQSxDQUFBQSxDQUFHLE1BQUEsR0FDSEMsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBRUFELENBQUFBLENBQUcsSUFBTXlCLENBQUFBLEVBQ2R4QixDQUFBQSxDQUFHLEtBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFDLEVBSXpCLElBREFDLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLE1BQUEsQ0FBUyxJQUFNLENBQUEsRUFDNUJBLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUssQ0FBQyxFQUdoQixPQUFPckIsRUFBQUEsQ0FBdUIsT0FBTyxNQUFBLENBQU8sQ0FBQzFDLEVBQVMrRCxDQUFBQSxDQUFHLElBQUksRUFBR1AsQ0FBQUEsQ0FBSyxRQUFBLENBQVNpQyxDQUFtQixDQUFDLENBQUMsQ0FBQyxDQUN0RyxDQy9OQSxTQUFTQyxHQUFXQyxDQUFBQSxDQUF3QyxDQUMxRCxJQUFNN0IsQ0FBQUEsQ0FBSyxJQUFJbkQsRUFBVThCLENBQUFBLENBQTBCa0QsQ0FBTyxDQUFDLENBQUEsQ0FJM0QsR0FIQTdCLEVBQUcsSUFBQSxDQUFLLEVBQUUsRUFDVkEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNMQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQUksRUFDZixPQUVGLElBQU04QixFQUFxQjlCLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNwQ0EsQ0FBQUEsQ0FBRyxLQUFLLEVBQU0sQ0FBQSxDQUVkLElBQU0rQixDQUFBQSxDQUFXL0IsQ0FBQUEsQ0FBRyxJQUNwQixPQUFBQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxFQUFFLENBQUEsQ0FDTjhCLENBQUFBLENBQXFCLEdBQ3ZCOUIsQ0FBQUEsQ0FBRyxJQUFBLENBQUs4QixFQUFxQixDQUFBLENBQUEsQ0FBSyxDQUFBLENBQUlBLEdBQXNCLENBQUMsQ0FBQSxDQUV4RCxDQUFFLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FBVSxPQUFRL0IsQ0FBQUEsQ0FBRyxHQUFBLENBQUssUUFBU0EsQ0FBQUEsQ0FBRyxJQUFBLENBQU0sbUJBQUE4QixDQUFtQixDQUMxRSxDQUdBLFNBQVNFLEVBQUFBLENBQWEvQixDQUFBQSxDQUFlZ0MsRUFBZ0IsQ0FDbkRoQyxDQUFBQSxDQUFHLEVBQUUsS0FBQSxDQUFRLEVBQUUsRUFDZkEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRWdDLENBQUFBLENBQUksbUJBQW9CLENBQUMsQ0FBQSxDQUU5QmhDLEVBQUcsSUFBQSxDQUFLZ0MsQ0FBQUEsQ0FBSSxrQkFBQSxHQUF1QixDQUFDLENBQUEsQ0FDcENoQyxDQUFBQSxDQUFHLEVBQUUsS0FBQSxDQUFRLEVBQUUsRUFDZkEsQ0FBQUEsQ0FBRyxJQUFBLENBQUtnQyxFQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksTUFBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQVEsQ0FBQSxDQUU1RGhDLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVCxRQUFTdEosQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEdBQUtzTCxDQUFBQSxDQUFJLGtCQUFBLENBQW9CdEwsSUFDM0NzSixDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FHVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsS0FBQSxDQUFNLENBQUMsRUFDWixDQUdBLFNBQVNpQyxHQUFrQmpDLENBQUFBLENBQWVnQyxDQUFBQSxDQUFnQjVMLEVBQWVDLENBQUFBLENBQWdCLENBR3ZGLEdBREEySixDQUFBQSxDQUFHLElBQUEsQ0FBS2dDLEVBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLE9BQVMsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNsQ0EsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFxQixDQUFBLENBQUcsQ0FDOUIsSUFBQSxJQUFTdEwsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJc0wsQ0FBQUEsQ0FBSSxtQkFBb0J0TCxDQUFBQSxFQUFBQSxDQUMxQ3NKLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUVYLElBQUEsSUFBU3RKLENBQUFBLENBQUlzTCxFQUFJLGtCQUFBLENBQW9CdEwsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxFQUFBQSxDQUMxQ3NKLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBRWIsQ0FFQUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsSUFBQSxJQUFTdEosRUFBSSxDQUFBLENBQUdBLENBQUFBLENBQUksR0FBSUEsQ0FBQUEsRUFBQUEsQ0FDdEJzSixDQUFBQSxDQUFHLEtBQUt0SixDQUFBQSxHQUFNLENBQUEsRUFBS0EsSUFBTSxDQUFDLENBQUEsQ0FFNUJzSixFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLZ0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLEVBQUksUUFBQSxDQUFVQSxDQUFBQSxDQUFJLE9BQVNBLENBQUFBLENBQUksUUFBUSxFQUU1RGhDLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBRVRBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUU1SixDQUFBQSxDQUFPLEVBQUUsRUFDZDRKLENBQUFBLENBQUcsQ0FBQSxDQUFFM0osQ0FBQUEsQ0FBUSxFQUFFLENBQUEsQ0FDZjJKLENBQUFBLENBQUcsS0FB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LFNBQ3hCLE1BQU0wa0IsY0FBQUEsQ0FBTXZwQixhQUFRNFAsQ0FBRyxDQUFBLENBQUcsQ0FBRSxTQUFBLENBQVcsQ0FBQSxDQUFLLENBQUMsRUFFL0MsSUFBTTRRLENBQUFBLENBQVMzYixFQUFRLGFBQUEsQ0FBZ0IwakIsRUFBQUEsQ0FBUXhHLEdBQy9DbUgsRUFBQUEsQ0FBSyxNQUFBLENBQU8sZ0JBQWUsQ0FDM0IsSUFBTU0sRUFBUyxNQUFNaEosQ0FBQUEsQ0FBTyxDQUMxQixNQUFBLENBQUF2YixDQUFBQSxDQUNBLEdBQUdKLENBQUFBLENBQ0gsTUFBQSxDQUFRcWtCLEVBQUFBLENBQUssTUFBQSxDQUNiLFVBQUEsQ0FBYXpqQixDQUFBQSxFQUFNNmpCLEVBQUksYUFBQSxDQUFjN2pCLENBQUMsRUFDdEMsU0FBQSxDQUFXLENBQUNvWCxFQUFHZixDQUFBQSxHQUFNd04sQ0FBQUEsQ0FBSSxhQUFhek0sQ0FBQUEsQ0FBR2YsQ0FBQyxDQUM1QyxDQUFDLENBQUEsQ0FDRCxNQUFNd04sQ0FBQUEsQ0FBSSxTQUFBLENBQVVFLENBQU0sRUFDNUIsQ0FBQSxNQUFTcmtCLENBQUFBLENBQUcsQ0FDVixJQUFNdkQsQ0FBQUEsQ0FBUXVELEVBQ1IyVyxDQUFBQSxDQUFJbGEsQ0FBQUEsQ0FBTSxPQUFTQSxDQUFBQSxDQUFNLE9BQUEsRUFBVyxPQUFPdUQsQ0FBQUEsRUFBSyxlQUFlLENBQUEsQ0FDckUsTUFBTW1rQixDQUFBQSxDQUFJLFVBQUEsQ0FBV3hOLENBQUMsRUFDeEIsQ0FBQSxPQUFFLENBQ0FxTixFQUFBQSxDQUFVLElBQUEsQ0FDVi9sQixhQUFJLElBQUEsR0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuXG4vLyBDb21tYS1zZXBhcmF0ZWQgc3RyaW5nIOKGkiBhcnJheSB2aWEgYSBwZXItaXRlbSBwYXJzZXI7IGVtcHR5L2JsYW5rIOKGkiBbXS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFycmF5PFQ+KGl0ZW06ICh4OiB1bmtub3duKSA9PiBUKTogKHg6IHVua25vd24pID0+IFRbXSB7XG4gIHJldHVybiAoeCkgPT4ge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gXCJzdHJpbmdcIiB8fCB4LnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4geC5zcGxpdChcIixcIikubWFwKChzKSA9PiBpdGVtKHMudHJpbSgpKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cFByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJwcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pID0+IHVua25vd24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIHtcbiAgICBsb2dnZXIuZXJyb3IobXNnKTtcbiAgfSBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykge1xuICAgIGxvZ2dlci53YXJuKG1zZyk7XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjEuXG5cbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIC8vIGFwcERhdGEgKG5vdCB0aGUgcGVyLXJ1biB1c2VyLWRhdGEtZGlyKSBzbyBldmVyeSBwdXAgYXBwJ3MgZHVtcHMgYWNjdW11bGF0ZSBpbiBvbmUgc2hhcmVkLCBwZXJzaXN0ZW50IGRpci5cbiAgY29uc3QgZHVtcERpciA9IGpvaW4oYXBwLmdldFBhdGgoXCJhcHBEYXRhXCIpLCBcInB1cC1yZWNvcmRlclwiLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8QSBleHRlbmRzIHVua25vd25bXSwgUiwgRD4oZm46ICguLi5hcmdzOiBBKSA9PiBSLCBkZWZhdWx0VmFsdWU6IEQpOiAoLi4uYXJnczogQSkgPT4gUiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSkgYXMgUiB8IEQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICB9XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2lsbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBpZCA9IHByb2MucGlkO1xuICAgICAgaWYgKHBpZCkge1xuICAgICAgICB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lORE9XX1RJTUVPVVQgPSAxMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFUyA9IFtcIm91dC9odG1sLm1wNFwiLCBcIm91dC9odG1sLndlYm1cIl07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZXM6IHouYXJyYXkoei5zdHJpbmcoKSkuZGVzY3JpYmUoXCJPdXRwdXQgcGF0aHM7IGV4dGVuc2lvbiAoLm1wNC8ud2VibSkgc2VsZWN0cyBlbmNvZGVyXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG4gIGRpc2FibGVHcHU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBHUFUgcmVuZGVyaW5nLCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGJ1dCBpbmNyZWFzZSBzdGFiaWxpdHlcIiksXG4gIGRpc2FibGVId0NvZGVjOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgaGFyZHdhcmUgdmlkZW8gZW5jb2RlciAoTlZFTkMvVmlkZW9Ub29sYm94KSwgdXNlIHNvZnR3YXJlIHgyNjVcIiksXG4gIGRpc2FibGVXZWJTZWN1cml0eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEcm9wIHRoZSBzYW1lLW9yaWdpbiB3YWxsOyByZXF1aXJlZCB0byByZWNvcmQgYSBsb2NhbCBmaWxlXCIpLFxuICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogelxuICAgIC5ib29sZWFuKClcbiAgICAuZGVzY3JpYmUoXCJSZWNvcmQgb3ZlciBUTFMgdGhlIHBsYXRmb3JtIHJlamVjdHMsIGUuZy4gYSBzZWxmLXNpZ25lZCBpbnRyYW5ldCBob3N0XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbiAgc2NyZWVuc2hvdHM6IHouYXJyYXkoei5udW1iZXIoKSkuZGVzY3JpYmUoXCJTZWNvbmQgbWFya3MgdG8gZHVtcCBmcmFtZSBiaXRtYXBzIGFzIFBOR1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGVzOiBERUZBVUxUX09VVF9GSUxFUyxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICBkaXNhYmxlV2ViU2VjdXJpdHk6IGZhbHNlLFxuICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgd2luZG93VGltZW91dDogREVGQVVMVF9XSU5ET1dfVElNRU9VVCxcbiAgc2NyZWVuc2hvdHM6IFtdLFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZUFycmF5LCBwYXJzZU51bWJlciwgcGFyc2VTdHJpbmcgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlck9wdGlvbnMsIHJlbmRlclNjaGVtYSB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHtcbiAgICByZXR1cm4gcztcbiAgfVxuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSByZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1TLCAtLXNjcmVlbnNob3RzIDxzZWNvbmRzPlwiLCBzaGFwZS5zY3JlZW5zaG90cy5kZXNjcmlwdGlvbiwgXCJcIilcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGhzPlwiLCBzaGFwZS5vdXRGaWxlcy5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlcy5qb2luKFwiLFwiKSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtd2ViLXNlY3VyaXR5XCIsIHNoYXBlLmRpc2FibGVXZWJTZWN1cml0eS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlV2ViU2VjdXJpdHkpXG4gICAgLm9wdGlvbihcIi0taWdub3JlLWNlcnRpZmljYXRlLWVycm9yc1wiLCBzaGFwZS5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycy5kZXNjcmlwdGlvbiwgZC5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRpbWVvdXQgPG51bWJlcj5cIiwgc2hhcGUud2luZG93VGltZW91dC5kZXNjcmlwdGlvbiwgYCR7ZC53aW5kb3dUaW1lb3V0fWApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlczogcGFyc2VBcnJheShwYXJzZVN0cmluZykob3B0cy5vdXRGaWxlKSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgZGlzYWJsZVdlYlNlY3VyaXR5OiBvcHRzLmRpc2FibGVXZWJTZWN1cml0eSA/PyBkLmRpc2FibGVXZWJTZWN1cml0eSxcbiAgICAgICAgICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogb3B0cy5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycyA/PyBkLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzLFxuICAgICAgICAgIHdpbmRvd1RvbGVyYW50OiBvcHRzLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgICAgICAgd2luZG93VGltZW91dDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2luZG93VGltZW91dCkob3B0cy53aW5kb3dUaW1lb3V0KSxcbiAgICAgICAgICBzY3JlZW5zaG90czogcGFyc2VBcnJheShwYXJzZU51bWJlcikob3B0cy5zY3JlZW5zaG90cyksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENvbnNvbGUgPSBcImNvbnNvbGVcIixcbiAgUHJvZ3Jlc3MgPSBcInByb2dyZXNzXCIsXG4gIERvbmUgPSBcImRvbmVcIixcbiAgRXJyb3IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ2FuY2VsID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3M7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9uZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRG9uZTtcbiAgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkVycm9yO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJcGNNc2cgPSBDb25zb2xlTXNnIHwgUHJvZ3Jlc3NNc2cgfCBEb25lTXNnIHwgRXJyb3JNc2cgfCBDYW5jZWxNc2c7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRXZlbnRzIHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgY29uc29sZTogW2xldmVsOiBzdHJpbmcsIG1zZzogc3RyaW5nXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW2NvZGU6IG51bWJlciB8IG51bGxdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVDb25zb2xlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZSwgbGV2ZWwsIG1lc3NhZ2UgfSk7XG4gIH1cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkVycm9yLCBlcnJvciB9KTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkRvbmUsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmQobXNnOiBJcGNNc2cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghcHJvY2Vzcy5zZW5kKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ29uc29sZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlByb2dyZXNzOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRG9uZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FcnJvcjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4ocDogUHJvbWlzZTxUPiwgbXM6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfSB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKSwgbXMpO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gIH0pO1xufVxuXG4vLyBSZWplY3QgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMsIGVsc2Ugc2V0dGxlIHdpdGggYHBgOyBuby1vcCBwYXNzdGhyb3VnaCB3aGVuIG5vIHNpZ25hbC5cbmV4cG9ydCBmdW5jdGlvbiBhYm9ydGFibGU8VD4ocDogUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm4gcDtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpKTtcbiAgfSk7XG59XG5cbi8vIENhbGxiYWNrIG1heSByZXR1cm4gdGhlIG5leHQgaW50ZXJ2YWwgKG1zKSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBmb3IgdGhlIGZvbGxvd2luZyB0aWNrLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbmV4dCA/PyBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gTm8gc3RhcnZhdGlvbiBjYXAgKHdvdWxkIHNraXAgcGVuZGluZyB3b3JrIG5vbi1kZXRlcm1pbmlzdGljYWxseSk7IGNhcHR1cmUgc3RhcnRzIHBvc3QgZGlkLXN0b3AtbG9hZGluZywgYW5kIENEUF9USU1FT1VUX01TIHR1cm5zIGEgcmVhbCBzdGFsbCBpbnRvIGEgZmFpbGVkIHJlbmRlci5cbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZERyYXdhYmxlKHdlYjogV2ViQ29udGVudHMsIHNpemU6IFNpemUpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjZHAgPSB3ZWIuZGVidWdnZXI7XG4gICAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLmNsZWFyRGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHt9KTtcbiAgICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHtcbiAgICAgIC4uLnNpemUsXG4gICAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICAgIG1vYmlsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgd2ViLmludmFsaWRhdGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU3RoIGxpa2UgdGVhcmRvd24gZGV0YWNoIHJlamVjdHMgaW4tZmxpZ2h0IENEUCBzZW5kczsgYSBsb3N0IHJlcGFpbnQga2ljayBpcyBoYXJtbGVzcy5cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSwgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGV2YWxJbiB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcbmV4cG9ydCBjb25zdCBTVEVHT19USUNLX0NIQU5ORUwgPSBcInN0ZWdvLXRpY2tcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RlZ29IVE1MKHRhcmdldFVSTDogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gIDxzdHlsZT5cbiAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgaHRtbCwgYm9keSB7IHdpZHRoOiAke3dpZHRofXB4OyBoZWlnaHQ6ICR7aGVpZ2h0ICsgMX1weDsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICN0YXJnZXQgeyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6IDA7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGJvcmRlcjogbm9uZTsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgI3N0ZWdvIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7XG4gICAgICBoZWlnaHQ6IDFweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxpZnJhbWUgaWQ9XCJ0YXJnZXRcIiBzcmM9XCIke3RhcmdldFVSTH1cIj48L2lmcmFtZT5cbiAgPGNhbnZhcyBpZD1cInN0ZWdvXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIjFcIj48L2NhbnZhcz5cbiAgPHNjcmlwdD5cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcblxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgd2luZG93Ll9fcHVwX3N0ZWdvX3RpY2tfXygpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9kcmF3X3N0ZWdvX18gPSAobXMpID0+IHtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKG1zKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbi8vIFBhaW50cyB0aGUgc3RlZ28gcm93IGZvciBgZXhwZWN0ZWRgIG1zIHN5bmNocm9ub3VzbHk7IHRoZSBkYW1hZ2UgcmlkZXMgb3V0IG9uIHRoZSBuZXh0IGNvbXBvc2l0ZWQgZnJhbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhd1N0ZWdvKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG59XG5cbi8vIFJlc29sdmVzIHdoZW4gdGhlIHJlbmRlcmVyIGNvbW1pdHRlZCB0aGUgc3RlZ28gcm93OyBhcm0gQkVGT1JFIGRyYXdTdGVnbyB0byBhdm9pZCBtaXNzaW5nIHRoZSBhY2suXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdFN0ZWdvVGljayh3YzogV2ViQ29udGVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3dhcHBlZCA9IG5ldyBQcm9taXNlKChyKSA9PiB3Yy5pcGMub25jZShTVEVHT19USUNLX0NIQU5ORUwsIHIpKTtcbiAgYXdhaXQgd2l0aFRpbWVvdXQoc3dhcHBlZCwgNV8wMDAsIFwic3RlZ28gdGlja1wiKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkU3RlZ29IVE1MIH0gZnJvbSBcIi4vc3RlZ29cIjtcblxuY29uc3QgUFVQX1NDSEVNRSA9IFwicHVwXCI7XG5jb25zdCBGUkFNRV9TQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG4vLyByZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQgaG9ub3JzIG9ubHkgdGhlIExBU1QgY2FsbCDigJQgcmVnaXN0ZXIgZXZlcnkgY3VzdG9tIHNjaGVtZSBpbiB0aGlzIG9uZSBsaXN0IGJlbG93LlxuY29uc3QgUFJJVklMRUdFRF9QUklWSUxFR0VTID0ge1xuICBzdGFuZGFyZDogdHJ1ZSxcbiAgc2VjdXJlOiB0cnVlLFxuICAvLyBBIHBhZ2UncyBvd24gQ1NQIHdvdWxkIG90aGVyd2lzZSByZWZ1c2UgdGhlIHZpZGVvIGhvb2sncyBmZXRjaCBvZiBwdXAtZnJhbWU6Ly8gc3R1YnMgKGNvbm5lY3Qtc3JjKS5cbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQge1xuICB0eXBlIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGcmFtZSxcbiAgdHlwZSBIYXJkd2FyZUZyYW1lc0NvbnRleHQsXG4gIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbi8vIG5vZGUtYXYgNS4yLjMgY29uc3RhbnQgaXMgd3Jvbmc7IGZmbXBlZyByZWdpc3RlcnMgd2l0aCBkYXNoLlxuZXhwb3J0IGNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGh3RnJhbWVzQ3R4PzogSGFyZHdhcmVGcmFtZXNDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBjdHggaWYgYW55IHNldHRlci9vcGVuMiB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShjdHgpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIHtcbiAgICBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICB9XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICB9XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSB7XG4gICAgY3R4Lmh3RnJhbWVzQ3R4ID0gb3B0cy5od0ZyYW1lc0N0eDtcbiAgfVxuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSB7XG4gICAgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgfVxuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGcmFtZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KTogRnJhbWUge1xuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICBmcmFtZS5hbGxvYygpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZ2V0QnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgc3RhY2sudXNlKGZyYW1lKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYWNrZXQoKTogUGFja2V0IHtcbiAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICBwa3QuYWxsb2MoKTtcbiAgcmV0dXJuIHBrdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluUGFja2V0cyhjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSB7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgICAgfVxuICAgICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIHRoZSBjdHggaWYgb3BlbjIgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIHN0YWNrLnVzZShwbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgdHlwZSBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIH1cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGZyZWVzIGN0eCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIHtcbiAgICAgIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyB0aGUgZ3JhcGggaWYgZmlsdGVyIHNldHVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgc3RhY2sudXNlKGdyYXBoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgfVxuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIH1cbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNyY1tpXSEpKSB7XG4gICAgICAgIHNyY1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykge1xuICAgICAgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICB9XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gICAgfVxuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkge1xuICAgICAgICB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ29uZm9ybSBOVkVOQyBvdXRwdXQgdG8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJpdHN0cmVhbTtcbiAgfVxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgfSBlbHNlIGlmIChuYWwudHlwZSA9PT0gTkFMX1NQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBTUFNfUFRMX0JJVCk7XG4gICAgfVxuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IChzcHNfZmxhZz0wKTsgc3RScHNJZHggPSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIGludGVyIHByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICB9XG4gICAgYnIucmVhZCgxKTsgLy8gZGVsdGFfcnBzX3NpZ25cbiAgICBici5yZWFkVWUoKTsgLy8gYWJzX2RlbHRhX3Jwc19taW51czFcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBudW1EZWx0YVBvY3NTZXQwOyBqKyspIHtcbiAgICAgIGNvbnN0IHVzZWQgPSBici5yZWFkKDEpO1xuICAgICAgaWYgKCF1c2VkKSB7XG4gICAgICAgIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUGFyc2Ugc2xpY2Vfc2VnbWVudF9oZWFkZXIgdXAgdG8gYnl0ZV9hbGlnbm1lbnQuIFJldHVybnMgYml0IHBvc2l0aW9uIEIgKGVuZCBvZiBoZWFkZXIgY29udGVudCkuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclRvQWxpZ25tZW50KGJyOiBCaXRSZWFkZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBudW1iZXIge1xuICBici5yZWFkKDE2KTsgLy8gc2tpcCBOQUwgaGVhZGVyXG4gIGlmIChici5yZWFkKDEpICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgfVxuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3Qgc2xpY2VUeXBlID0gYnIucmVhZFVlKCk7XG4gIGlmICghaXNJcmFwKSB7XG4gICAgYnIucmVhZChjZmcubG9nMk1heFBvY0xzYik7IC8vIHNsaWNlX3BpY19vcmRlcl9jbnRfbHNiXG4gICAgY29uc3Qgc3RSZWZQaWNTZXRTcHNGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAoIXN0UmVmUGljU2V0U3BzRmxhZykge1xuICAgICAgcGFyc2VJbmxpbmVTdFJlZlBpY1NldChiciwgY2ZnLm51bURlbHRhUG9jc1NldDApO1xuICAgIH0gZWxzZSBpZiAoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMgPiAxKSB7XG4gICAgICBici5yZWFkKE1hdGguY2VpbChNYXRoLmxvZzIoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMpKSk7XG4gICAgfVxuICAgIGlmIChjZmcubG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGxvbmdfdGVybV9yZWZfcGljcyBwYXRoIHVuaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gICAgfVxuICB9XG4gIGlmIChjZmcuc2FvRW5hYmxlZCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19sdW1hX2ZsYWdcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fY2hyb21hX2ZsYWdcbiAgfVxuICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX1AgfHwgc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICBjb25zdCBvdmVycmlkZUZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmIChvdmVycmlkZUZsYWcpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICB9XG4gICAgaWYgKGNmZy5jYWJhY0luaXRQcmVzZW50KSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBjYWJhY19pbml0X2ZsYWdcbiAgICB9XG4gICAgYnIucmVhZFVlKCk7IC8vIGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9jYW5kXG4gIH1cbiAgcmVhZFNlKGJyKTsgLy8gc2xpY2VfcXBfZGVsdGFcbiAgaWYgKGNmZy5wcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZykge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIH1cbiAgcmV0dXJuIGJyLnBvcztcbn1cblxuLyoqXG4gKiBSZXdyaXRlIGFscGhhIHNsaWNlIGhlYWRlcjogc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS5cbiAqIFRoZSArMi1iaXQgc2hpZnQgaXMgYWJzb3JiZWQgYnkgZW1pdHRpbmcgYSBmcmVzaCBieXRlX2FsaWdubWVudCB0aGVuIGFwcGVuZGluZyB0aGVcbiAqIG9yaWdpbmFsIENBQkFDIHNsaWNlX3NlZ21lbnRfZGF0YSBieXRlcyB2ZXJiYXRpbS4gQ0FCQUMgYnl0ZSBib3VuZGFyeSBpcyBwcmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihzbGljZTogQnVmZmVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc2xpY2UpO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG5cbiAgY29uc3QgcHJvYmUgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBCID0gcGFyc2VIZWFkZXJUb0FsaWdubWVudChwcm9iZSwgbmFsVHlwZSwgY2ZnKTtcbiAgY29uc3Qgb2xkQWxpZ25CaXRzID0gQiAlIDggPT09IDAgPyA4IDogOCAtIChCICUgOCk7XG4gIGNvbnN0IHNsaWNlRGF0YUJ5dGVPZmZzZXQgPSAoQiArIG9sZEFsaWduQml0cykgLyA4O1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgfVxuICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWdcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuXG4gIGJyLnJlYWRVZSgpOyAvLyBkaXNjYXJkIG9sZCBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBidy51ZSgxKTsgLy8gbmV3IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG5cbiAgd2hpbGUgKGJyLnBvcyA8IEIpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuICB9XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBieXRlX2FsaWdubWVudDogcmJzcF9hbGlnbm1lbnRfYml0X29uZVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG5cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24oQnVmZmVyLmNvbmNhdChbcGFja0JpdHMoYncuYml0cyksIHJic3Auc3ViYXJyYXkoc2xpY2VEYXRhQnl0ZU9mZnNldCldKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IGFkZEVtdWxhdGlvblByZXZlbnRpb24sIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24gfSBmcm9tIFwiLi9uYWxcIjtcblxuaW50ZXJmYWNlIFBhcnNlZFBUTCB7XG4gIHB0bFN0YXJ0OiBudW1iZXI7XG4gIHB0bEVuZDogbnVtYmVyO1xuICBwdGxCaXRzOiBudW1iZXJbXTtcbiAgbWF4U3ViTGF5ZXJzTWludXMxOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQVEwodnBzRGF0YTogQnVmZmVyKTogUGFyc2VkUFRMIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24odnBzRGF0YSkpO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyB2cHNfaWRcbiAgYnIucmVhZCgyKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbCArIGF2YWlsYWJsZVxuICBpZiAoYnIucmVhZCg2KSA+IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIH1cbiAgY29uc3QgbWF4U3ViTGF5ZXJzTWludXMxID0gYnIucmVhZCgzKTtcbiAgYnIucmVhZCgxICsgMTYpOyAvLyB0ZW1wb3JhbF9uZXN0aW5nICsgcmVzZXJ2ZWRcblxuICBjb25zdCBwdGxTdGFydCA9IGJyLnBvcztcbiAgYnIucmVhZCg5Nik7IC8vIGdlbmVyYWwgUFRMIChwcm9maWxlX3NwYWNlICsgdGllciArIGlkYyArIGNvbXBhdCArIGNvbnN0cmFpbnRzICsgbGV2ZWwpXG4gIGlmIChtYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIH1cbiAgcmV0dXJuIHsgcHRsU3RhcnQsIHB0bEVuZDogYnIucG9zLCBwdGxCaXRzOiBici5iaXRzLCBtYXhTdWJMYXllcnNNaW51czEgfTtcbn1cblxuLyoqIFdyaXRlIGJhc2UgVlBTIGZpZWxkcyBmb3IgMi1sYXllciBhbHBoYS4gKi9cbmZ1bmN0aW9uIHdyaXRlQmFzZVZQUyhidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCkge1xuICBidy53KDB4NDAwMSwgMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LncoMCwgNCk7IC8vIHZwc19pZFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfYXZhaWxhYmxlXG4gIGJ3LncoMSwgNik7IC8vIG1heF9sYXllcnNfbWludXMxID0gMVxuICBidy53KHB0bC5tYXhTdWJMYXllcnNNaW51czEsIDMpO1xuICAvLyB0ZW1wb3JhbF9uZXN0aW5nOiB0cnVlIHdoZW4gc2luZ2xlIHN1Yi1sYXllciAoYWxsIHJlZnMgbGF5ZXIgMClcbiAgYncuZmxhZyhwdGwubWF4U3ViTGF5ZXJzTWludXMxID09PSAwKTtcbiAgYncudygweGZmZmYsIDE2KTsgLy8gcmVzZXJ2ZWRcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy5mbGFnKDEpOyAvLyBzdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhEZWNQaWNCdWZmZXJpbmcgLSAxXG4gICAgYncudWUoMik7IC8vIG51bVJlb3JkZXJQaWNzXG4gICAgYncudWUoNCk7IC8vIG1heExhdGVuY3lJbmNyZWFzZSArIDFcbiAgfVxuXG4gIGJ3LncoMSwgNik7IC8vIG1heF9udWhfbGF5ZXJfaWQgPSAxXG4gIGJ3LnVlKDEpOyAvLyBudW1fbGF5ZXJfc2V0c19taW51czEgPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzBdXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzFdXG4gIGJ3LmZsYWcoMCk7IC8vIHRpbWluZ19pbmZvX3ByZXNlbnRcbiAgYncuZmxhZygxKTsgLy8gdnBzX2V4dGVuc2lvbl9mbGFnXG4gIGJ3LmFsaWduKDEpOyAvLyBleHRlbnNpb24gYWxpZ25tZW50IGJpdHMgPSAxXG59XG5cbi8qKiBXcml0ZSBWUFMgZXh0ZW5zaW9uIG1hdGNoaW5nIHgyNjUgNC4xIEVOQUJMRV9BTFBIQS4gKi9cbmZ1bmN0aW9uIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAvLyBFeHRlbnNpb24gUFRMOiBsZXZlbF9pZGMgb25seSAocHJvZmlsZVByZXNlbnRGbGFnPTApXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxFbmQgLSA4LCA4KTtcbiAgaWYgKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICAgIGJ3LncoMCwgMik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJ3LmZsYWcoaSA9PT0gMiB8fCBpID09PSAzKTsgLy8gc2NhbGFiaWxpdHk6IHNwYXRpYWwgKyBhdXhcbiAgfVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSB7XG4gICAgcmV0dXJuIHZwc0RhdGE7XG4gIH1cblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgcmV3cml0ZUFscGhhUHBzLCByZXdyaXRlQWxwaGFTbGljZUhlYWRlciwgcmV3cml0ZUFscGhhU3BzIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9QUFMsXG4gIE5BTF9TRUlfUFJFRklYLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICB0eXBlIE5hbFVuaXQsXG4gIHJld3JpdGVOYWxMYXllcklkLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbi8vIEJHUkEgYWxwaGEg4oaSIFkgcGxhbmUgb2YgcGFja2VkIFlVVjQyMFAgKGNhbGxlciBwcmUtZmlsbHMgVVY9MTI4KTsgVWludDMyIGZhc3QgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHRyYWN0QWxwaGE6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSB7XG4gICAgICBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgY29uc3Qgcm93QmFzZSA9IHkgKiBzcmNMcyArIDM7XG4gICAgICBjb25zdCBkc3RCYXNlID0geSAqIHc7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVNwcyhkYXRhKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gTkFMX1BQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFQcHMoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gTkFMX1ZQUyA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjb25zdCBhRGF0YSA9IHJld3JpdGVBbHBoYVBhcmFtU2V0KG5hbC50eXBlLCBhbHBoYU5hbC5kYXRhKTtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhRGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfU0VJX1BSRUZJWCwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGMgKDAgPSB1bnNwZWNpZmllZC9wcmVtdWx0aXBsaWVkOyBtYXRjaGVzIHgyNjUgRU5BQkxFX0FMUEhBKVxuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIHdyaXRlQml0cygwLCAxKTtcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgTkFMX1ZQUykge1xuICAgICAgY29uc3QgZGF0YSA9IHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKG5hbC5kYXRhLCBuYWwudHlwZSwgY2ZnKTtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GLCB0eXBlIEFWUGFja2V0RmxhZyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHsgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgUGVuZGluZ1BhY2tldCB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgcHRzOiBiaWdpbnQ7XG4gIGR0czogYmlnaW50O1xuICBkdXJhdGlvbjogYmlnaW50O1xuICBmbGFnczogQVZQYWNrZXRGbGFnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1YWxMYXllck11eE9wdGlvbnMge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuLy8gRHJhaW5zIHRoZSBiYXNlICsgYWxwaGEgTlZFTkMgc2Vzc2lvbnMgYW5kIHdyaXRlcyBpbnRlcmxlYXZlZCBIRVZDLWFscGhhIGFjY2VzcyB1bml0cy5cbmV4cG9ydCBjbGFzcyBEdWFsTGF5ZXJNdXgge1xuICBwcml2YXRlIF9zOiBEdWFsTGF5ZXJNdXhPcHRpb25zO1xuICBwcml2YXRlIF9iYXNlUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICBwcml2YXRlIF9hbHBoYVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzOiBEdWFsTGF5ZXJNdXhPcHRpb25zKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCB9ID0gdGhpcy5fcztcbiAgICAvLyBEcmFpbiBlYWNoIHNlc3Npb24gZnVsbHkg4oCUIGluZGVwZW5kZW50IE5WRU5DIHNlc3Npb25zIHJ1biBhIGZyYW1lIGFwYXJ0IHRyYW5zaWVudGx5LlxuICAgIHRoaXMuX2Jhc2VRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYmFzZUN0eCwgYmFzZVBrdCwgXCJiYXNlXCIpKSk7XG4gICAgdGhpcy5fYWxwaGFRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYWxwaGFDdHgsIGFscGhhUGt0LCBcImFscGhhXCIpKSk7XG4gICAgLy8gYmY9MCDihpIgbm8gcmVvcmRlcjsgcXVldWUgaW5kZXggTiBpcyB0aGUgc2FtZSBmcmFtZSBmb3IgYm90aC4gTGVmdG92ZXIgd2FpdHMgZm9yIG5leHQgZHJhaW4uXG4gICAgd2hpbGUgKHRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGVQYWlyKHRoaXMuX2Jhc2VRdWV1ZS5zaGlmdCgpISwgdGhpcy5fYWxwaGFRdWV1ZS5zaGlmdCgpISwgbXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVucGFpcmVkIGxlZnRvdmVycyBhZnRlciBFT0YgPSB0cnVlIGJhc2UvYWxwaGEgZGVzeW5jOyByZXR1cm5zIGEgZGVzY3JpcHRpb24sIGVsc2UgdW5kZWZpbmVkLlxuICBkZXN5bmNBZnRlckVvZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiAhdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfVxuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5yZWNlaXZlUGFja2V0YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbmFwc2hvdChwa3Q6IFBhY2tldCk6IFBlbmRpbmdQYWNrZXQge1xuICAgIC8vIHBrdC5kYXRhIGlzIG5hdGl2ZSBtZW1vcnkgZnJlZWQgb24gdW5yZWYg4oCUIGNvcHkgYmVmb3JlIHF1ZXVlaW5nLlxuICAgIHJldHVybiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHBrdC5kYXRhISksIHB0czogcGt0LnB0cywgZHRzOiBwa3QuZHRzLCBkdXJhdGlvbjogcGt0LmR1cmF0aW9uLCBmbGFnczogcGt0LmZsYWdzIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlUGFpcihiYXNlOiBQZW5kaW5nUGFja2V0LCBhbHBoYTogUGVuZGluZ1BhY2tldCwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBiYXNlQ3R4LCBzdHJlYW0sIGhldmNDZmcgfSA9IHRoaXMuX3M7XG4gICAgLy8gUGF0Y2ggaW4tYmFuZCBWUFMvU1BTIFBUTCBiaXRzIGZvciBBcHBsZS1WVEIgY29tcGF0IChlbmNvZGVyIHJlcGVhdHMgaGVhZGVycyBwZXIgSURSKS5cbiAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmVBY2Nlc3NVbml0cyhzcGxpdE5hbFVuaXRzKGJhc2UuZGF0YSksIHNwbGl0TmFsVW5pdHMoYWxwaGEuZGF0YSksIGhldmNDZmcpO1xuICAgIC8vIGRhdGEgc2V0dGVyIHdpcGVzIHB0cy9kdHMvZHVyYXRpb24vZmxhZ3Mg4oCUIHJlc3RvcmU7IGZsYWdzJyBLRVkgYml0IGRyaXZlcyBtb3Ygc3Rzcy5cbiAgICBiYXNlUGt0LmRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bChpbnRlcmxlYXZlZCk7XG4gICAgYmFzZVBrdC5wdHMgPSBiYXNlLnB0cztcbiAgICBiYXNlUGt0LmR0cyA9IGJhc2UuZHRzO1xuICAgIGJhc2VQa3QuZHVyYXRpb24gPSBiYXNlLmR1cmF0aW9uID09PSAwbiA/IDFuIDogYmFzZS5kdXJhdGlvbjtcbiAgICBiYXNlUGt0LmZsYWdzID0gYmFzZS5mbGFncztcbiAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG4gICAgYmFzZVBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBQYXJzZSBOVkVOQyBTUFMvUFBTIGV4dHJhZGF0YSBhdCBlbmNvZGVyIGluaXQgdG8gZGVyaXZlIHNsaWNlLWhlYWRlciBwYXJzZXIgZmxhZ3M7IHRocm93cyBpZiBOVkVOQyBkZWZhdWx0cyBzaGlmdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBOQUxfUFBTLCBOQUxfU1BTLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnZlbmNIZXZjQ29uZmlnIHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuO1xuICBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZmFpbChmaWVsZDogc3RyaW5nLCBnb3Q6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgaGV2Y19hbHBoYTogTlZFTkMgU1BTL1BQUyB1bnN1cHBvcnRlZDogJHtmaWVsZH09JHtnb3R9LCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xufVxuXG5mdW5jdGlvbiBza2lwUHRsKGJyOiBCaXRSZWFkZXIsIG1heFN1YkxheWVyczogbnVtYmVyKTogdm9pZCB7XG4gIGJyLnJlYWQoMiArIDEgKyA1KTsgLy8gcHJvZmlsZV9zcGFjZSwgdGllciwgcHJvZmlsZV9pZGNcbiAgYnIucmVhZCgzMik7IC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnWzAuLjMxXVxuICBici5yZWFkKDQ4KTsgLy8gNCBzb3VyY2UvcGFja2VkIGZsYWdzICsgNDMgY29uc3RyYWludC9yZXNlcnZlZCArIDEgaW5ibGRcbiAgYnIucmVhZCg4KTsgLy8gbGV2ZWxfaWRjXG4gIGNvbnN0IHN1YlByb2ZpbGVQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBzdWJMZXZlbFByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBzdWJQcm9maWxlUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICAgIHN1YkxldmVsUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGlmIChtYXhTdWJMYXllcnMgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykge1xuICAgICAgYnIucmVhZCgyKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgfVxuICAgIGlmIChzdWJMZXZlbFByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3BzKHNwc1Jic3A6IEJ1ZmZlcik6IHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xufSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihzcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgbWF4U3ViTGF5ZXJzID0gYnIucmVhZCgzKTtcbiAgLy8gYWxwaGFfZGFyd2luLnJld3JpdGVBbHBoYVNwcyArIHZwcy5leHRyYWN0UFRMIGhhcmRjb2RlIDk2LWJpdCBQVEwg4oCUIG9ubHkgdmFsaWQgd2hlbiBzdWJfbGF5ZXJzPTAuXG4gIGlmIChtYXhTdWJMYXllcnMgIT09IDApIHtcbiAgICBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnXG4gIHNraXBQdGwoYnIsIG1heFN1YkxheWVycyk7XG4gIGJyLnJlYWRVZSgpOyAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgY2hyb21hRm9ybWF0ID0gYnIucmVhZFVlKCk7XG4gIGlmIChjaHJvbWFGb3JtYXQgPT09IDMpIHtcbiAgICBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXNcbiAgYnIucmVhZFVlKCk7IC8vIHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgY29uc3QgbG9nMk1heFBvY0xzYiA9IGJyLnJlYWRVZSgpICsgNDtcbiAgY29uc3Qgc3ViT3JkZXJJbmZvID0gYnIucmVhZCgxKTtcbiAgY29uc3Qgb3JkZXJDb3VudCA9IHN1Yk9yZGVySW5mbyA/IG1heFN1YkxheWVycyArIDEgOiAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyQ291bnQ7IGkrKykge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInNjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInBjbV9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIHtcbiAgICBmYWlsKFwibnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzXCIsIG51bVN0UnBzLCBcIuKJpDFcIik7XG4gIH1cbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb25nVGVybVJlZlBpY3NQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3Qgc3BzVGVtcG9yYWxNdnBFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgcmV0dXJuIHtcbiAgICBsb2cyTWF4UG9jTHNiLFxuICAgIHNhb0VuYWJsZWQsXG4gICAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtU3RScHMsXG4gICAgbnVtRGVsdGFQb2NzU2V0MCxcbiAgICBsb25nVGVybVJlZlBpY3NQcmVzZW50LFxuICAgIHNwc1RlbXBvcmFsTXZwRW5hYmxlZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIHtcbiAgICBmYWlsKFwibnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzXCIsIG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTsgLy8gY3VfcXBfZGVsdGFfZW5hYmxlZCDihpIgZGlmZl9jdV9xcF9kZWx0YV9kZXB0aFxuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJ0aWxlc19lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkVWUoKTsgLy8gYmV0YS90YyBvZmZzZXRzIChzZSB2aWEgdWUgYWR2YW5jZSlcbiAgICB9XG4gIH1cbiAgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgcHJlc2VudCBpZmYgUFBTIGFjcm9zcy1zbGljZXMgZW5hYmxlZCAmJiAhc2xpY2VfZGVibG9ja2luZ19kaXNhYmxlZC5cbiAgY29uc3QgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgPSBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCAmJiAhc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZTtcbiAgcmV0dXJuIHsgY2FiYWNJbml0UHJlc2VudCwgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnZlbmNIZXZjQ29uZmlnKGV4dHJhZGF0YTogQnVmZmVyKTogTnZlbmNIZXZjQ29uZmlnIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoZXh0cmFkYXRhKTtcbiAgY29uc3Qgc3BzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9TUFMpO1xuICBjb25zdCBwcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1BQUyk7XG4gIGlmICghc3BzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogU1BTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGlmICghcHBzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogUFBTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHMgPSBwYXJzZVNwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNwcy5kYXRhKSk7XG4gIGNvbnN0IHAgPSBwYXJzZVBwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHBwcy5kYXRhKSk7XG4gIHJldHVybiB7IC4uLnMsIC4uLnAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIC8vIHRpZXI9bWFpbiBtYXRjaGVzIEFwcGxlIFZpZGVvVG9vbGJveDsgbWFjT1MgQ2hyb21lIHJlcXVpcmVzIE1haW4gdGllciBmb3IgSEVWQyBhbHBoYSBkZWNvZGUuXG4gICAgY29uc3QgbnZlbmNPcHRzID0geyBwcmVzZXQ6IFwicDRcIiwgYmY6IFwiMFwiLCB0aWVyOiBcIm1haW5cIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3QgKE5WRU5DIGNvbnZlcnRzLCBubyBDUFUgU1dTKTsgc3RhY2sgZnJlZXMgZXZlcnkgbmF0aXZlIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3MsIG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgYmFzZUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpKTtcbiAgICBjb25zdCBhbHBoYUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKSk7XG5cbiAgICBpZiAoIWJhc2VDdHguZXh0cmFEYXRhIHx8ICFhbHBoYUN0eC5leHRyYURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm52ZW5jOiBjb2RlYyBleHRyYWRhdGEgbWlzc2luZ1wiKTtcbiAgICB9XG4gICAgY29uc3QgaGV2Y0NmZyA9IHBhcnNlTnZlbmNIZXZjQ29uZmlnKGJhc2VDdHguZXh0cmFEYXRhKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICBiYXNlRXh0cmFkYXRhOiBiYXNlQ3R4LmV4dHJhRGF0YSxcbiAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwodW5pZmllZCk7XG5cbiAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgY29uc3QgY2hyb21hU2l6ZSA9ICgod2lkdGggKyAxKSA+PiAxKSAqICgoaGVpZ2h0ICsgMSkgPj4gMSk7XG4gICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyBjaHJvbWFTaXplICogMik7XG4gICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgIGNvbnN0IGJhc2VQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IGFscGhhU3dGcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKSk7XG5cbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4LFxuICAgICAgYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0LFxuICAgICAgc3RyZWFtLFxuICAgICAgYWxwaGFTd0ZyYW1lLFxuICAgICAgYWxwaGFCdWYsXG4gICAgICBoZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSwgYWxwaGFCdWYgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBhbHBoYSBwbGFuZSBiZWZvcmUgYmFzZS5zZW5kRnJhbWUg4oCUIHRoZSBlbmNvZGVyIHVucmVmcyB0aGUgaW5wdXQgZnJhbWUuXG4gICAgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZSwgYWxwaGFCdWYpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUubWFrZVdyaXRhYmxlKCksIFwiYWxwaGFTdy5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5mcm9tQnVmZmVyKGFscGhhQnVmKSwgXCJhbHBoYVN3LmZyb21CdWZmZXJcIik7XG4gICAgYWxwaGFTd0ZyYW1lLnB0cyA9IHB0cztcbiAgICBhbHBoYVN3RnJhbWUuZHVyYXRpb24gPSAxbjtcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZShhbHBoYVN3RnJhbWUpLCBcImFscGhhLnNlbmRGcmFtZVwiKTtcblxuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5iYXNlQ3R4LCBcImJhc2VcIik7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYWxwaGFDdHgsIFwiYWxwaGFcIik7XG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgICBjb25zdCBkZXN5bmMgPSB0aGlzLl9tdXguZGVzeW5jQWZ0ZXJFb2YoKTtcbiAgICBpZiAoZGVzeW5jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogJHtkZXN5bmN9YCk7XG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCBvbiBjcmVhdGlvbi1vcmRlciBzZXNzaW9uIGZyZWUg4oCUIExJRk8gZGVzdHJveSBhdm9pZHMgaXQgKGZvcnVtIC90LzI2OTk3NCkuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBBVlBpeGVsRm9ybWF0LCBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGRpc3Bvc2VzIGN0eC9wa3QgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKSk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3duc0h3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKG9wdHM6IEh3VmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBzaGFyZWRIdyA/PyAoZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpKTtcbiAgY29uc3Qgb3duc0h3ID0gIXNoYXJlZEh3ICYmICEhaHc7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgdmlkZW8gZW5jb2RlciBpZiBDb2RlY1N0YXRlLmNyZWF0ZSB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBjb25zdCB2aWRlbyA9IHN0YWNrLnVzZShcbiAgICBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcImZhc3RcIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgICBiaXRyYXRlLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KSxcbiAgKTtcbiAgY29uc3QgY29kZWMgPSBzdGFjay51c2UoYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCkpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYywgb3duc0h3OiBmYWxzZSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIERpY3Rpb25hcnksIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFN0cmVhbSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHtcbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgLy8gK2Zhc3RzdGFydCByZWxvY2F0ZXMgbW9vdiB0byBmaWxlIGZyb250IG9uIHdyaXRlVHJhaWxlciBzbyBwbGF5ZXJzIGNhbiBiZWdpbiBwbGF5YmFjayBiZWZvcmUgZnVsbCBkb3dubG9hZC5cbiAgICB1c2luZyBvcHRzID0gRGljdGlvbmFyeS5mcm9tT2JqZWN0KHsgbW92ZmxhZ3M6IFwiK2Zhc3RzdGFydFwiIH0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIob3B0cyksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gQSBmYWlsZWQvdHJ1bmNhdGVkIHRyYWlsZXIgd3JpdGUgbXVzdCBub3QgbGVhayB0aGUgRkQuXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQWx3YXlzIGZyZWUgdGhlIG5hdGl2ZSBjb250ZXh0IOKAlCBldmVuIGEgbmV2ZXItb3BlbmVkIG11eGVyIGFsbG9jYXRlZCBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDkgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSB7XG4gICAgICByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgfVxuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSB7XG4gICAgICByZXR1cm4gXCJtcDRcIjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBkaXNwb3NlIG11eGVyL2VuY29kZXJzIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBtdXhlciA9IHN0YWNrLnVzZShuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKSk7XG4gICAgY29uc3Qgc2V0dXAgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgT3V0cHV0U2luay5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCBPdXRwdXRTaW5rLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgaWYgKHNldHVwLnZpZGVvKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAudmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuaHdWaWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmh3VmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuY29kZWMpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5jb2RlYyk7XG4gICAgfVxuICAgIC8vIE9ubHkgYSBzaW5rLW93bmVkIGh3IGRldmljZSBpcyBvdXJzIHRvIGZyZWUgaGVyZTsgYSBzaGFyZWQgZGV2aWNlIGJlbG9uZ3MgdG8gdGhlIHBpcGVsaW5lLlxuICAgIGlmIChzZXR1cC5vd25zSHcgJiYgc2V0dXAuaHcpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5odyk7XG4gICAgfVxuICAgIGNvbnN0IGF1ZGlvID0gb3B0cy53aXRoQXVkaW8gPyBhd2FpdCBPdXRwdXRTaW5rLmF1ZGlvRm9yKG9wdHMsIG11eGVyKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoYXVkaW8pIHtcbiAgICAgIHN0YWNrLnVzZShhdWRpbyk7XG4gICAgfVxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXRTaW5rKHsgbXV4ZXIsIC4uLnNldHVwLCBhdWRpbywgb3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHtcbiAgICAgICAgZGVhZGxpbmU6IFwicmVhbHRpbWVcIixcbiAgICAgICAgXCJjcHUtdXNlZFwiOiBcIjhcIixcbiAgICAgICAgXCJyb3ctbXRcIjogXCIxXCIsXG4gICAgICAgIHRocmVhZHM6IFwiMlwiLFxuICAgICAgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZGVvLFxuICAgICAgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLFxuICAgICAgb3duc0h3OiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG91dFNhbXBsZVJhdGU6IDQ4XzAwMCxcbiAgICAgICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgICAgICAgICB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIC4uLmNmZyxcbiAgICAgIGdsb2JhbEhlYWRlcjogdHJ1ZSxcbiAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBzaGFyZWRIdyArIGFueSBzaW5rcyBhbHJlYWR5IGJ1aWx0IGlmIGEgbGF0ZXIgc2luayB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaGFyZWRIdykge1xuICAgICAgc3RhY2sudXNlKHNoYXJlZEh3KTtcbiAgICB9XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHN0YWNrLnVzZShzaW5rKTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBmcm9tQnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh0aGlzLl9zLm9wdHMud2lkdGgsIHRoaXMuX3Mub3B0cy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSkpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGltYWdlOiBOYXRpdmVJbWFnZSkge1xuICBjb25zdCBzaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBpbWFnZS5pc0VtcHR5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXplRXF1YWxzKGE6IFNpemUsIGI6IFNpemUpIHtcbiAgcmV0dXJuIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wMy5cblxuY29uc3QgR1JJRCA9IDMyOyAvLyByZXNvbHV0aW9uLWluZGVwZW5kZW50IGxhdHRpY2UgZm9yIHRoZSBtb2RhbC1jb2xvciBwcmUtcGFzc1xuY29uc3QgU1RSSURFID0gNDsgLy8gbWFpbi1zY2FuIHN0ZXA7IHJvdy1zdGFnZ2VyZWQgc28gYW55IOKJpTFweCBzdHJ1Y3R1cmUgbGFuZHMgb24gYSBzYW1wbGUgd2l0aGluIDQgcm93c1xuY29uc3QgQ09OVEVOVF9ERUxUQSA9IDg7IC8vIG1heCBwZXItY2hhbm5lbCBkaXN0YW5jZSAoMC0yNTUpIHN0aWxsIGNvdW50ZWQgYXMgdGhlIGRvbWluYW50IGNvbG9yXG5jb25zdCBNSU5fQ09OVEVOVF9TQU1QTEVTID0gMTY7IC8vIHJlbmRlcmVkIGZyYW1lcyBhcmUgbm9pc2UtZnJlZSwgc28gYSBoYW5kZnVsIG9mIG9mZi1kb21pbmFudCBzYW1wbGVzIGlzIHJlYWwgY29udGVudFxuZXhwb3J0IGNvbnN0IEJMQU5LX1dBUk5fUkFUSU8gPSAwLjU7IC8vIGJsYW5rLWZyYW1lIGZyYWN0aW9uIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZFxuXG4vLyA1IGJpdHMgcGVyIGNoYW5uZWwsIGFscGhhIGluY2x1ZGVkIOKAlCB0cmFuc3BhcmVudCBzdXJmYWNlcyBjYXJyeSBjb250ZW50IGluIGNvdmVyYWdlLCBub3QgY29sb3IuXG5mdW5jdGlvbiBxdWFudGl6ZShiZ3JhOiBCdWZmZXIsIGk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgKGJncmEucmVhZFVJbnQ4KGkpID4+IDMpIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAxKSA+PiAzKSA8PCA1KSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMikgPj4gMykgPDwgMTApIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAzKSA+PiAzKSA8PCAxNSlcbiAgKTtcbn1cblxuLy8gQnl0ZSBvZmZzZXQgb2YgYSBwaXhlbCBjYXJyeWluZyB0aGUgZnJhbWUncyBkb21pbmFudCBjb2xvciAobW9kZSBvdmVyIGEgc3BhcnNlIGxhdHRpY2UpLlxuZnVuY3Rpb24gbW9kYWxQaXhlbChiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3Qgc3RlcFggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHdpZHRoIC8gR1JJRCkpO1xuICBjb25zdCBzdGVwWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gR1JJRCkpO1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBjb25zdCBmaXJzdElkeCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGxldCBiZXN0ID0gMDtcbiAgbGV0IGJlc3RDb3VudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IHN0ZXBZKSB7XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBzdGVwWCkge1xuICAgICAgY29uc3QgaSA9ICh5ICogd2lkdGggKyB4KSAqIDQ7XG4gICAgICBjb25zdCBrZXkgPSBxdWFudGl6ZShiZ3JhLCBpKTtcbiAgICAgIGNvbnN0IGNvdW50ID0gKGNvdW50cy5nZXQoa2V5KSA/PyAwKSArIDE7XG4gICAgICBjb3VudHMuc2V0KGtleSwgY291bnQpO1xuICAgICAgaWYgKCFmaXJzdElkeC5oYXMoa2V5KSkge1xuICAgICAgICBmaXJzdElkeC5zZXQoa2V5LCBpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb3VudCA+IGJlc3RDb3VudCkge1xuICAgICAgICBiZXN0Q291bnQgPSBjb3VudDtcbiAgICAgICAgYmVzdCA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpcnN0SWR4LmdldChiZXN0KSA/PyAwO1xufVxuXG4vLyBCbGFuayA9IGRvbWluYW50LWNvbG9yIGNvdmVyYWdlOiBmZXdlciB0aGFuIE1JTl9DT05URU5UX1NBTVBMRVMgc2FtcGxlcyBkZXZpYXRlIGZyb20gdGhlIG1vZGFsIGNvbG9yLlxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtGcmFtZShiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IG0gPSBtb2RhbFBpeGVsKGJncmEsIHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBtYiA9IGJncmEucmVhZFVJbnQ4KG0pO1xuICBjb25zdCBtZyA9IGJncmEucmVhZFVJbnQ4KG0gKyAxKTtcbiAgY29uc3QgbXIgPSBiZ3JhLnJlYWRVSW50OChtICsgMik7XG4gIGNvbnN0IG1hID0gYmdyYS5yZWFkVUludDgobSArIDMpO1xuICBsZXQgY29udGVudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IFNUUklERSkge1xuICAgIGNvbnN0IG9mZnNldCA9ICh5ID4+IDIpICYgKFNUUklERSAtIDEpO1xuICAgIGZvciAobGV0IHggPSBvZmZzZXQ7IHggPCB3aWR0aDsgeCArPSBTVFJJREUpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgaWYgKFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpKSAtIG1iKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDEpIC0gbWcpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMikgLSBtcikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAzKSAtIG1hKSA+IENPTlRFTlRfREVMVEFcbiAgICAgICkge1xuICAgICAgICBjb250ZW50Kys7XG4gICAgICAgIGlmIChjb250ZW50ID49IE1JTl9DT05URU5UX1NBTVBMRVMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCbGFua1N0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdGFsID0gMDtcbiAgcHJpdmF0ZSBfYmxhbmsgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBzYW1wbGUoZnJhbWU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3RvdGFsKys7XG4gICAgaWYgKGlzQmxhbmtGcmFtZShmcmFtZSwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCkpIHtcbiAgICAgIHRoaXMuX2JsYW5rKys7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJhY3Rpb24gb2Ygd3JpdHRlbiBmcmFtZXMgdGhhdCB3ZXJlIGNvbnRlbnRsZXNzICgwID0gYWxsIGhhZCBjb250ZW50LCAxID0gYWxsIGJsYW5rKS5cbiAgZmluYWxpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWwgPiAwID8gdGhpcy5fYmxhbmsgLyB0aGlzLl90b3RhbCA6IDA7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjMuXG5cbmV4cG9ydCBjb25zdCBKQU5LX1dBUk5fU0NPUkUgPSAwLjI1OyAvLyBqYW5rIHNjb3JlIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZCAofnF1YXJ0ZXIgZHJvcHBlZCBvciBhIH4wLjVzIGZyZWV6ZSlcblxuLy8gRnJhbWUtZHJvcCBxdWFsaXR5IHNjb3JlICgwID0gcGVyZmVjdCwgMSA9IHdvcnN0KTogZ2xvYmFsIGRyb3AgcmF0ZSBhbmQgbG9jYWwgYnVyc3Qgc2V2ZXJpdHkgY29tYmluZWQgdmlhIDEtKDEtZykoMS1sKS5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICBkcm9wcGVkKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRCdXJzdCArPSBjb3VudDtcbiAgfVxuXG4gIGZpbmFsaXplKCk6IERyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB0eXBlIHsgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuLy8gQSByZW5kZXIgcXVhbnR1bSBpcyAxMjggc3RlcmVvIGZsb2F0czsgYW55dGhpbmcgcGFzdCBhIHNlY29uZCBvZiBhdWRpbyBjYW1lIGZyb20gYSBwYWdlIGFidXNpbmcgdGhlIGJyaWRnZS5cbmNvbnN0IE1BWF9DSFVOS19CWVRFUyA9IDQ4XzAwMCAqIDIgKiA0O1xuY29uc3QgTUFYX1NBTVBMRV9SQVRFID0gMTkyXzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2FtcGxlUmF0ZSkgfHwgc2FtcGxlUmF0ZSA8PSAwIHx8IHNhbXBsZVJhdGUgPiBNQVhfU0FNUExFX1JBVEUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAvLyBQYWdlLXdvcmxkIGNvZGUgb3ducyB0aGlzIGNoYW5uZWwsIHNvIHRyZWF0IGl0cyBwYXlsb2FkIGFzIGlucHV0OiB3cm9uZyBzaXplIG1lYW5zIGl0IGlzIG5vdCBvdXIgd29ya2xldCdzIFBDTS5cbiAgICBjb25zdCBieXRlcyA9IEFycmF5QnVmZmVyLmlzVmlldyhidWZmZXIpID8gYnVmZmVyLmJ5dGVMZW5ndGggOiAwO1xuICAgIGlmIChieXRlcyA9PT0gMCB8fCBieXRlcyA+IE1BWF9DSFVOS19CWVRFUyB8fCBieXRlcyAlIDggIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8xNi5cblxuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBuYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5pbnRlcmZhY2UgU2NyZWVuc2hvdFRhcmdldCB7XG4gIG1zOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JlZW5zaG90T3B0aW9ucyB7XG4gIG1hcmtzOiBudW1iZXJbXTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbn1cblxuLy8gRHVtcHMgcGFpbnRlZCBCR1JBIGZyYW1lcyB0byBQTkcgYXQgcmVxdWVzdGVkIHNlY29uZCBtYXJrczsgcmVzdWx0IG9yZGVyIHRyYWNrcyBpbnB1dCBvcmRlci5cbmV4cG9ydCBjbGFzcyBTY3JlZW5zaG90VGFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nOiBTY3JlZW5zaG90VGFyZ2V0W107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvbmUgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93cml0ZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3M6IFNjcmVlbnNob3RPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyID0gZGlybmFtZShfcy5vdXRGaWxlc1swXSA/PyBcIi5cIik7XG4gICAgdGhpcy5fcGVuZGluZyA9IF9zLm1hcmtzXG4gICAgICAubWFwKChzZWMsIGluZGV4KSA9PiAoeyBtczogc2VjICogMTAwMCwgaW5kZXgsIHBhdGg6IGpvaW4oZGlyLCBgc2NyZWVuc2hvdF8ke2luZGV4fS5wbmdgKSB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm1zIC0gYi5tcyk7XG4gIH1cblxuICAvLyBEdW1wIGV2ZXJ5IG1hcmsgd2hvc2Ugc2Vjb25kIGhhcyBiZWVuIHJlYWNoZWQgYnkgdGhpcyBmcmFtZS5cbiAgY2FwdHVyZShjdXJyZW50VGltZU1zOiBudW1iZXIsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5fcGVuZGluZ1swXSEubXMgPD0gY3VycmVudFRpbWVNcykge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGJncmEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY29yZGluZyBvdmVyOiBzbmFwIGFueSBtYXJrIHBhc3QgdGhlIGxhc3QgZnJhbWUgb250byBpdCwgdGhlbiB3cml0ZSBhbGwgc2hvdHMgb3V0LlxuICBhc3luYyBmaW5pc2goZmluYWxCZ3JhPzogQnVmZmVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHdoaWxlIChmaW5hbEJncmEgJiYgdGhpcy5fcGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgZmluYWxCZ3JhKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fd3JpdGVzKTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2RvbmUuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKChbLCBwYXRoXSkgPT4gcGF0aCk7XG4gIH1cblxuICBwcml2YXRlIHRha2UodGFyZ2V0OiBTY3JlZW5zaG90VGFyZ2V0LCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcG5nID0gbmF0aXZlSW1hZ2UuY3JlYXRlRnJvbUJpdG1hcChiZ3JhLCB7IHdpZHRoLCBoZWlnaHQgfSkudG9QTkcoKTtcbiAgICB0aGlzLl9kb25lLnNldCh0YXJnZXQuaW5kZXgsIHRhcmdldC5wYXRoKTtcbiAgICB0aGlzLl93cml0ZXMucHVzaCh3cml0ZUZpbGUodGFyZ2V0LnBhdGgsIHBuZykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBBYm9ydCBiYWlscyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHJldHJ5aW5nOyBzaWduYWwgaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIHdpcmVzIGl0IChmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0Pih7XG4gIGZuLFxuICBtYXhBdHRlbXB0cyA9IDMsXG4gIHRpbWVvdXQsXG4gIHNpZ25hbCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcCgyICoqIGF0dGVtcHQgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzI3LlxuXG5leHBvcnQgdHlwZSBXb3JsZE1vZGUgPSBcInNob290XCIgfCBcInJlbmRlclwiIHwgXCJhdWRpb1wiO1xuXG4vLyBOYW1lcyB0aGUgcGFnZS13b3JsZCBidW5kbGUgaW4gdGhlIHByZWxvYWQncyBhcmd2OyBrZWVwIHRoaXMgbW9kdWxlIGRlcGVuZGVuY3ktZnJlZSwgdGhlIHByZWxvYWQgbG9hZHMgaXQgYXMtaXMuXG5leHBvcnQgY29uc3QgV09STERfQVJHID0gXCItLXB1cC13b3JsZD1cIjtcblxuLy8gUHJlc2VudCBvbmx5IHdoZW4gdGhlIHJ1biBjYXB0dXJlcyBhdWRpbywgc28gYSBwYWdlIGluIGFueSBvdGhlciBtb2RlIGhhcyBubyBjaGFubmVsIHRvIHB1c2ggUENNIHRocm91Z2guXG5leHBvcnQgY29uc3QgQVVESU9fQVJHID0gXCItLXB1cC1hdWRpb1wiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sIC8vXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuY29uc3QgdGFyZ2V0cyA9IG5ldyBTZXQobWFwLnZhbHVlcygpKTtcblxuY29uc3QgTE9DQUxfU0NIRU1FUyA9IFtcInB1cDpcIiwgXCJwdXAtZnJhbWU6XCIsIFwiZmlsZTpcIiwgXCJkYXRhOlwiLCBcImJsb2I6XCIsIFwiY2hyb21lLWV4dGVuc2lvbjpcIiwgXCJkZXZ0b29sczpcIl07XG5cbmZ1bmN0aW9uIGlzTG9jYWxTY2hlbWUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBzIG9mIExPQ0FMX1NDSEVNRVMpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgocykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUHJveHlUYXJnZXQodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSAmJiB0YXJnZXRzLmhhcyhuZXcgVVJMKHVybCkuaG9zdG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG4gIHN0dWJNZWRpYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5LCBzdHViTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIC8vIFN3YXAgbWVkaWEgZm9yIGEgZnJhbWUtc2VydmVyIHN0dWIgKHRydWUgaW50cmluc2ljIHNpemUvZHVyYXRpb24pIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuICAgIGlmIChzdHViTWVkaWEgJiYgZGV0YWlscy5yZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIiAmJiAhdXJsLnN0YXJ0c1dpdGgoXCJwdXAtZnJhbWU6XCIpKSB7XG4gICAgICBjYWxsYmFjayh7XG4gICAgICAgIHJlZGlyZWN0VVJMOiBgcHVwLWZyYW1lOi8vc3R1Yj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQodXJsKX1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNMb2NhbFNjaGVtZSh1cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyB1cmwsIHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJYLUZyYW1lLU9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgLy8gUHJveHlpbmcgcmV3cm90ZSB0aGUgb3JpZ2luLCBzbyBmb250cyBhbmQgb3RoZXIgQ09SUy1tb2RlIGZldGNoZXMgbmVlZCB0aGUgZ3JhbnQgdGhlIG9yaWdpbmFsIGhvc3Qgd291bGQgaGF2ZSBoYWQuXG4gICAgaWYgKHVzZUlubmVyUHJveHkgJiYgaXNQcm94eVRhcmdldCh1cmwpKSB7XG4gICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVyczogeyAuLi5yZXNwb25zZUhlYWRlcnMsIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI6IFtcIipcIl0gfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkNvbXBsZXRlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGNvbXBsZXRlZDpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGU6IGRldGFpbHMuc3RhdHVzQ29kZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uRXJyb3JPY2N1cnJlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgY29uc3QgeyB1cmwsIG1ldGhvZCwgZXJyb3IsIHJlc291cmNlVHlwZSB9ID0gZGV0YWlscztcbiAgICAvLyBTdHViYmVkIG1lZGlhIGRvd25ncmFkZXM6IEVSUl9BQk9SVEVEIGlzIGp1c3QgdGhlIGxvYWRlciByZXN0YXJ0aW5nIG9udG8gdGhlIGNyb3NzLXNjaGVtZSByZWRpcmVjdC5cbiAgICBjb25zdCBtZWRpYSA9IHN0dWJNZWRpYSAmJiByZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIjtcbiAgICBjb25zdCBsZXZlbCA9IG1lZGlhID8gKGVycm9yID09PSBcIm5ldDo6RVJSX0FCT1JURURcIiA/IFwiZGVidWdcIiA6IFwid2FyblwiKSA6IFwiZXJyb3JcIjtcbiAgICBsb2dnZXJbbGV2ZWxdKFRBRywgYGVycm9yOmAsIHsga2V5LCB1cmwsIG1ldGhvZCwgZXJyb3IsIHJlc291cmNlVHlwZSwgc291cmNlIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHB1cFBrZ1Jvb3QsIHB1cFByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBBVURJT19BUkcsIFdPUkxEX0FSRywgdHlwZSBXb3JsZE1vZGUgfSBmcm9tIFwiLi4vcnVudGltZS93b3JsZFwiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuY29uc3QgQ09OU09MRV9JR05PUkVTID0gW1wiTWl4ZWQgQ29udGVudDogVGhlIHBhZ2UgYXRcIl07XG5cbmludGVyZmFjZSBGaW5pc2hPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb24sIHRpbWVvdXRNcywgdG9sZXJhbnQsIHNpZ25hbCB9OiBGaW5pc2hPcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IGRvbVJlYWR5ID0gZmFsc2U7XG4gICAgLy8gVG9sZXJhbnQgcHJvY2VlZHMgb24gYSBwYXJ0aWFsIERPTSBvbmx5IGFzIGEgdGltZW91dCBmYWxsYmFjayDigJQgc3RhcnRpbmcgb24gYmFyZSBkb20tcmVhZHkgbGVhdmVzIHRoZSBsb2FkIHBlbmRpbmcgYW5kIHdlZGdlcyB2aXJ0dWFsIHRpbWUuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gZG9uZSh0b2xlcmFudCAmJiBkb21SZWFkeSA/IHVuZGVmaW5lZCA6IFRJTUVPVVRfRVJST1IpLCB0aW1lb3V0TXMpO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBkb25lKHNpZ25hbC5yZWFzb24pLCB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbVJlYWR5ID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtc3RvcC1sb2FkaW5nOlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGBkaWQtZmFpbC1sb2FkOiAke0pTT04uc3RyaW5naWZ5KHsgdXJsLCBzb3VyY2UsIGNvZGUsIGRlc2MgfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInByZWxvYWQtZXJyb3JcIiwgKF9lLCBfcGF0aCwgZXJyb3IpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGBwcmVsb2FkLWVycm9yOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pfWApO1xuICAgICAgZG9uZShlcnJvcik7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBQYWdlLXdvcmxkIGhvb2sgYnVuZGxlczsgdGhlIHByZWxvYWQgZXZhbHVhdGVzIHRoZSBuYW1lZCBvbmUgaW4gdGhlIG1haW4gd29ybGQgb2YgZXZlcnkgZnJhbWUgaXQgbGFuZHMgaW4uXG5jb25zdCBXT1JMRF9TQ1JJUFRTOiBSZWNvcmQ8V29ybGRNb2RlLCBzdHJpbmc+ID0ge1xuICBzaG9vdDogam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwic2hvb3QuZ2xvYmFsLmpzXCIpLFxuICByZW5kZXI6IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInJlbmRlci5nbG9iYWwuanNcIiksXG4gIGF1ZGlvOiBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJhdWRpby5nbG9iYWwuanNcIiksXG59O1xuXG5mdW5jdGlvbiBwaWNrV29ybGRTY3JpcHQocmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBtb2RlOiBXb3JsZE1vZGUgPSByZW5kZXJlci5kZXRlcm1pbmlzdGljID8gXCJzaG9vdFwiIDogcmVuZGVyZXIud2l0aEF1ZGlvID8gXCJhdWRpb1wiIDogXCJyZW5kZXJcIjtcbiAgcmV0dXJuIFdPUkxEX1NDUklQVFNbbW9kZV07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCB0b2xlcmFudCwgc2lnbmFsLCBvbkNyZWF0ZWQgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHVzZUlubmVyUHJveHkgfSA9IHJlbmRlcmVyO1xuICBjb25zdCBzcmMgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzb3VyY2UpIDogc291cmNlO1xuXG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWluV2lkdGg6IHdpZHRoLFxuICAgIG1pbkhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtYXhXaWR0aDogd2lkdGgsXG4gICAgbWF4SGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgbWluaW1pemFibGU6IGZhbHNlLFxuICAgIG1vdmFibGU6IGZhbHNlLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgLy8gQ2FycmllcyB0aGUgYnJpZGdlIHByZWxvYWQgaW50byB0aGUgdGFyZ2V0IGlmcmFtZTsgbm9kZSBzdGF5cyBvZmYsIGFzIG5vZGVJbnRlZ3JhdGlvbiBrZWVwcyBpdHMgZmFsc2UgZGVmYXVsdC5cbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgLy8gRWxlY3Ryb24gc2FuZGJveGVzIHByZWxvYWRzIGJ5IGRlZmF1bHQsIHdoaWNoIGJyZWFrcyB0aGVpciBidW5kbGVkIHJlcXVpcmVzOyB0aGUgT1Mgc2FuZGJveCBpcyBvZmYgcmVnYXJkbGVzcy5cbiAgICAgIHNhbmRib3g6IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6ICFyZW5kZXJlci5kaXNhYmxlV2ViU2VjdXJpdHksXG4gICAgICAvLyBUaGUgd3JhcHBlciBpcyBhIHNlY3VyZSBzY2hlbWUsIHNvIGl0IHVwZ3JhZGVzIHRoZSB0YXJnZXQgdG8gaHR0cHMgYW5kIGV2ZXJ5IGh0dHAgc3VicmVzb3VyY2UgaXQgb3ducyB0dXJucyBtaXhlZC5cbiAgICAgIGFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudDogdHJ1ZSxcbiAgICAgIGV4cGVyaW1lbnRhbEZlYXR1cmVzOiB0cnVlLFxuICAgICAgcHJlbG9hZDogcHVwUHJlbG9hZCxcbiAgICAgIGFkZGl0aW9uYWxBcmd1bWVudHM6IFtgJHtXT1JMRF9BUkd9JHtwaWNrV29ybGRTY3JpcHQocmVuZGVyZXIpfWAsIC4uLihyZW5kZXJlci53aXRoQXVkaW8gPyBbQVVESU9fQVJHXSA6IFtdKV0sXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHtcbiAgICBzb3VyY2UsXG4gICAgd2luZG93OiB3aW4sXG4gICAgdXNlSW5uZXJQcm94eSxcbiAgICBzdHViTWVkaWE6IHJlbmRlcmVyLmRldGVybWluaXN0aWMsXG4gIH0pO1xuICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuYXR0YWNoKFwiMS4zXCIpO1xuICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcImNvbnNvbGUtbWVzc2FnZVwiLCAoeyBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQgfSkgPT4ge1xuICAgIC8vIERyb3AgaGVhZGxlc3Mgbm9pc2U6IHNlY3VyaXR5IHdhcm5pbmdzIGFuZCBodHRw4oaSaHR0cHMgYXV0by11cGdyYWRlIG5vdGljZXMgZm9yIGludGVybmFsLXByb3h5IGFzc2V0cy5cbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIENPTlNPTEVfSUdOT1JFUy5maW5kKChpKSA9PiBtZXNzYWdlLnN0YXJ0c1dpdGgoaSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZ3MgPSBbVEFHLCBcImNvbnNvbGU6XCIsIHsgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQsIHNvdXJjZSB9XTtcbiAgICBsZXZlbCA9PT0gXCJlcnJvclwiID8gbG9nZ2VyLmVycm9yKC4uLm1zZ3MpIDogbG9nZ2VyLmRlYnVnKC4uLm1zZ3MpO1xuICAgIHJlbmRlcmVyLm9uQ29uc29sZShsZXZlbCwgbWVzc2FnZSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7XG4gICAgICBzb3VyY2UsXG4gICAgICB3aW4sXG4gICAgICBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksXG4gICAgICB0aW1lb3V0TXM6IHJlbmRlcmVyLndpbmRvd1RpbWVvdXQgKiAxMDAwLFxuICAgICAgdG9sZXJhbnQsXG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIHJldHVybiBvcGVuV2luZG93KHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgb25DcmVhdGVkLFxuICAgICAgc2lnbmFsLFxuICAgICAgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50LFxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcmVidWlsZERyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEJMQU5LX1dBUk5fUkFUSU8sIEJsYW5rU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2JsYW5rXCI7XG5pbXBvcnQgeyBEcm9wU3RhdHMsIEpBTktfV0FSTl9TQ09SRSB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvZHJvcFwiO1xuaW1wb3J0IHsgcGVyaW9kaWNhbCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBdWRpb0Rpc3Bvc2FsLCBhdHRhY2hBdWRpb0xpc3RlbmVycyB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVuZGVyXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RGcmFtZTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNsZWFyU3R1Y2tDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rU3RhdHMod2lkdGgsIGhlaWdodCk7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgZGlzcG9zZUF1ZGlvOiBBdWRpb0Rpc3Bvc2FsIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgYmxhbmtTdGF0cy5zYW1wbGUoZnJhbWUpO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgZW5jb2RlRXJyb3IgPz89IHNpZ25hbD8ucmVhc29uO1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG4gICAgbGFzdEZyYW1lID0gY3JvcHBlZDtcbiAgICB0YWtlci5jYXB0dXJlKGN1cnJlbnRUaW1lLCBjcm9wcGVkKTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgY2xlYXJTdHVja0NoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBpZiAoc3R1Y2sgPj0gZnBzKSB7XG4gICAgICAgICAgcmVqZWN0ZXI/LihuZXcgRXJyb3IoYHJlbmRlcmVyIHN0YWxsZWQgZm9yICR7TWF0aC5yb3VuZCgoc3R1Y2sgKiAxMDAwKSAvIGZwcyl9bXMgQCAke3dyaXR0ZW59YCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0dWNrID09PSAxIHx8IHN0dWNrID09PSBNYXRoLmZsb29yKGZwcyAvIDIpKSB7XG4gICAgICAgICAgYXdhaXQgcmVidWlsZERyYXdhYmxlKHdpbi53ZWJDb250ZW50cywgZnJhbWVTaXplKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJTdHVja0NoZWNrPy4oKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBkaXNwb3NlQXVkaW8/LigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEZyYW1lKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZHJvcHBlZCBmcmFtZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBzY3JlZW5zaG90cywgamFuayB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgYWJvcnRhYmxlIH0gZnJvbSBcIi4uLy4uL2Jhc2UvdGltaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1ZpZGVvXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VPcHRpb25zIHtcbiAgZnJhbWU6IFdlYkZyYW1lTWFpbiB8IHVuZGVmaW5lZDtcbiAgdGltZXN0YW1wTXM6IG51bWJlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8vIE9ubHkgdGhlIGRldGVybWluaXN0aWMgcmVuZGVyZXIgKHNob290KSBkcml2ZXMgdGhpczsgcmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2sgdmlhIHJBRiBpbiB0aGUgcGFnZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZHZhbmNlVmlkZW9zKHsgZnJhbWUsIHRpbWVzdGFtcE1zLCBzaWduYWwgfTogQWR2YW5jZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFmcmFtZT8udXJsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhYm9ydGFibGUoXG4gICAgICBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChcbiAgICAgICAgYHdpbmRvdy5fX3B1cF92aWRlb19fJiYoYXN5bmMoKT0+e2F3YWl0IF9fcHVwX3ZpZGVvX18ucmVhZHkoKTthd2FpdCBfX3B1cF92aWRlb19fLmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pfSkoKWAsXG4gICAgICApLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQWR2YW5jZU9wdGlvbnMsIGFkdmFuY2VWaWRlb3MgfSBmcm9tIFwiLi92aWRlby9hZHZhbmNlXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGFyZ3M6IEFkdmFuY2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgZnJhbWUsIHRpbWVzdGFtcE1zIH0gPSBhcmdzO1xuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhhcmdzKV0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yMy5cblxuaW1wb3J0IHsgRGVtdXhlciwgdHlwZSBEZW11eGVyT3B0aW9ucyB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuXG4vLyBmZm1wZWcgcmVhZC93cml0ZSBkZWFkbGluZSAowrVzKTsgYSBibG9ja2luZyBvcGVuIGlnbm9yZXMgQWJvcnRTaWduYWwsIHNvIHRoaXMgYm91bmRzIGEgc3R1Y2sgQ0ROLlxuY29uc3QgUldfVElNRU9VVF9VUyA9IFwiODAwMDAwMFwiO1xuXG4vLyBmZm1wZWcgb3BlbnMgaHR0cC9odHRwcyB3aXRoIG5hdGl2ZSBieXRlLXJhbmdlIHJlcXVlc3RzLCBzbyBvbmx5IHRoZSBkZWNvZGVkIHJhbmdlcyBkb3dubG9hZC5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuSW5wdXQoc3JjOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxEZW11eGVyPiB7XG4gIGNvbnN0IG9wdGlvbnM6IERlbXV4ZXJPcHRpb25zID0geyBzaWduYWwsIG9wdGlvbnM6IHsgcndfdGltZW91dDogUldfVElNRU9VVF9VUyB9IH07XG4gIHJldHVybiBEZW11eGVyLm9wZW4oc3JjLCBvcHRpb25zKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjUuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgRGVjb2RlciwgRmlsdGVyQVBJIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlZEZyYW1lIHtcbiAgaWR4OiBudW1iZXI7XG4gIGJ1ZjogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZUZyYW1lc09wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgbWV0YTogVmlkZW9NZXRhO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vLyBEZWNvZGUgYSBzb3VyY2UgdG8gZnBzLXJlc2FtcGxlZCwgZGlzcGxheS1zY2FsZWQsIHRpZ2h0LVJHQkEgZnJhbWVzIGluIG9yZGVyIChpZHggPSAxLWJhc2VkIGRlY29kZSBwb3NpdGlvbikuIENvbnN1bWVyIGJhY2twcmVzc3VyZSBpcyBqdXN0IHB1bGxpbmcgc2xvd2VyLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBkZWNvZGVGcmFtZXMoeyBzcmMsIG1ldGEsIHNpZ25hbCB9OiBEZWNvZGVGcmFtZXNPcHRpb25zKTogQXN5bmNHZW5lcmF0b3I8RGVjb2RlZEZyYW1lPiB7XG4gIGF3YWl0IHVzaW5nIGlucHV0ID0gYXdhaXQgb3BlbklucHV0KHNyYywgc2lnbmFsKTtcbiAgY29uc3Qgc3RyZWFtID0gaW5wdXQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwgfSk7XG4gIGNvbnN0IHsgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gbWV0YTtcbiAgY29uc3Qgc2NhbGUgPSBmcmFtZVdpZHRoICE9PSB3aWR0aCB8fCBmcmFtZUhlaWdodCAhPT0gaGVpZ2h0ID8gYHNjYWxlPSR7ZnJhbWVXaWR0aH06JHtmcmFtZUhlaWdodH0sYCA6IFwiXCI7XG4gIHVzaW5nIGZpbHRlciA9IEZpbHRlckFQSS5jcmVhdGUoYGZwcz0ke2Zwc30sJHtzY2FsZX1mb3JtYXQ9cmdiYWAsIHsgc2lnbmFsIH0pO1xuICBsZXQgayA9IDA7XG4gIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZmlsdGVyLmZyYW1lcyhkZWMuZnJhbWVzKGlucHV0LnBhY2tldHMoc3RyZWFtLmluZGV4KSkpKSB7XG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHlpZWxkIHsgaWR4OiArK2ssIGJ1ZjogcGFja1JnYmEoZnJhbWUpIH07XG4gIH1cbn1cblxuLy8gVGlnaHQgUkdCQSBjb3B5IChkcm9wIGxpYmF2IHJvdyBwYWRkaW5nKSBzbyB0aGUgcGFnZSBjYW4gd3JhcCBpdCBzdHJhaWdodCBpbnRvIEltYWdlRGF0YS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJvdyA9IGZyYW1lLndpZHRoICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzcmMuc3ViYXJyYXkoMCwgcm93ICogZnJhbWUuaGVpZ2h0KSk7XG4gIH1cbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHJvdyAqIGZyYW1lLmhlaWdodCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgZnJhbWUuaGVpZ2h0OyB5KyspIHtcbiAgICBzcmMuY29weShvdXQsIHkgKiByb3csIHkgKiBzdHJpZGUsIHkgKiBzdHJpZGUgKyByb3cpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBkZWNvZGVGcmFtZXMgfSBmcm9tIFwiLi9kZWNvZGVcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBERUNPREVfQUhFQUQgPSA0OyAvLyBkZWNvZGUgYSBmZXcgZnJhbWVzIHBhc3QgdGhlIGhpZ2hlc3QgcmVxdWVzdDsgdGhlIHBhZ2UgYWxyZWFkeSBwcmVmZXRjaGVzXG5jb25zdCBLRUVQX0JFSElORCA9IDE2OyAvLyBtaW4gZnJhbWVzIGhlbGQgYmVoaW5kIHRoZSBoZWFkOyBtdXN0IGV4Y2VlZCB0aGUgcGFnZSdzIHByZWZldGNoIGxlYWQgKEFIRUFEPTEwKVxuY29uc3QgTUVNT1JZX0JVREdFVCA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyByZXRhaW4gZGVjb2RlZCBmcmFtZXMgdXAgdG8gdGhpcyBwZXItc2Vzc2lvbiBidWRnZXQgc28gYSBzbWFsbCBsb29waW5nIHZpZGVvIHJlLXNlcnZlcyBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHJlLWRlY29kaW5nXG5jb25zdCBNQVhfUEFTU19SRVRSWSA9IDM7IC8vIHJlLW9wZW4gYSBzdHJlYW1lZCBzb3VyY2UgdGhpcyBtYW55IHRpbWVzIG9uIGEgdHJhbnNpZW50IGRlY29kZSBlcnJvciBiZWZvcmUgcmVwb3J0aW5nIGVuZC1vZi1zdHJlYW1cblxuaW50ZXJmYWNlIFdhaXRlciB7XG4gIGlkeDogbnVtYmVyO1xuICByZXNvbHZlOiAoYjogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vLyBEZW1hbmQtZHJpdmVuIGluLXByb2Nlc3MgZGVjb2RlIChEZW11eGVy4oaSRGVjb2RlcuKGkmZwcy9zY2FsZS9yZ2JhIGZpbHRlcikgc2VydmluZyBmcmFtZSBOIGFzIHRpZ2h0IFJHQkE7IGZvcndhcmQtb25seSDigJQgYSBsb29wL3Jld2luZCByZS1kZWNvZGVzIGZyb20gZnJhbWUgMSB1bmxlc3MgdGhlIHdob2xlIGNsaXAgc3RpbGwgZml0cyB0aGUgbWVtb3J5IGJ1ZGdldC5cbmV4cG9ydCBjbGFzcyBEZWNvZGVTZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYnVmID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBfcmVhZHkgPSAwO1xuICBwcml2YXRlIF93YW50ID0gMTtcbiAgcHJpdmF0ZSBfZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2VuID0gMDtcbiAgcHJpdmF0ZSBfY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfd2FpdGVycyA9IG5ldyBTZXQ8V2FpdGVyPigpO1xuICBwcml2YXRlIF9yZXN1bWU6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAvLyBMZWFkIGZyYW1lcyBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGNvbnRlbnQgaWR4IGlzIG9mZnNldCBwYXN0IHRoZW0uXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xlYWRGcmFtZXM6IG51bWJlcjtcbiAgLy8gRnJhbWVzIGtlcHQgYmVoaW5kIHRoZSBoZWFkOyBhIGNsaXAgdGhhdCBmaXRzIHRoZSBidWRnZXQgcmV0YWlucyBldmVyeSBmcmFtZSwgc28gbG9vcHMgcmUtc2VydmUgZnJvbSBtZW1vcnkuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2tlZXBDb3VudDogbnVtYmVyO1xuICAvLyBSZXNvbHZlcyB3aGVuIHB1bXAoKSBmdWxseSB1bndpbmRzIOKAlCBhd2FpdGVkIG9uIGNsb3NlIHNvIG5vZGUtYXYgZ2VuZXJhdG9ycyBmcmVlIGJlZm9yZSBwcm9jZXNzIHRlYXJkb3duLlxuICBwcml2YXRlIHJlYWRvbmx5IF9wdW1wRG9uZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHRoaXMuX3B1bXBEb25lID0gdGhpcy5wdW1wKCk7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKGlkeCA8IDEpIHtcbiAgICAgIGlkeCA9IDE7XG4gICAgfVxuICAgIGlmIChpZHggPD0gdGhpcy5fbGVhZEZyYW1lcykge1xuICAgICAgaWR4ID0gdGhpcy5fbGVhZEZyYW1lcyArIDE7IC8vIGhvbGQgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZSBhY3Jvc3MgdGhlIGxlYWRcbiAgICB9XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIH1cbiAgICBpZiAoaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIC8vIGZvcndhcmQsIG5vdCB5ZXQgZGVjb2RlZCBpbiB0aGlzIHBhc3NcbiAgICAgIGlmIChpZHggPiB0aGlzLl93YW50KSB7XG4gICAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB9XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZpY3RlZCAobG9vcC9yZXdpbmQpOiBjbGVhciByZWFkeS9kb25lIHN5bmNocm9ub3VzbHkgc28gdGhlIHdyYXAncyBwcmVmZXRjaCBidXJzdCBjb2FsZXNjZXMgaW50byBvbmUgcmVzdGFydCwgbm90IG9uZSBwZXIgZnJhbWUuXG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWl0KGlkeCk7XG4gIH1cblxuICAvLyBBd2FpdCB0aGUgcHVtcCBzbyB0aGUgbm9kZS1hdiBkZW11eGVyL2RlY29kZXIgZ2VuZXJhdG9ycyB1bndpbmQgKGNvbnRleHRzIGZyZWVkKSBiZWZvcmUgdGhlIGNhbGxlciBleGl0cy5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICB0aGlzLl9jdHJsLmFib3J0KCk7XG4gICAgdGhpcy53YWtlKCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICB3LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGVycy5jbGVhcigpO1xuICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgIGF3YWl0IHRoaXMuX3B1bXBEb25lO1xuICB9XG5cbiAgLy8gLWQtb25seSBzdWJzeXN0ZW0sIHNvIG5ldmVyIHRpbWUgb3V0OiBkcmFpbldhaXRlcnMgcmVzb2x2ZXMgb24gZGVjb2RlLCBFT0YsIG9yIGNsb3NlIOKAlCBvdXRwdXQgbmV2ZXIgZGVwZW5kcyBvbiBmZXRjaCBsYXRlbmN5LlxuICBwcml2YXRlIHdhaXQoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB0aGlzLl93YWl0ZXJzLmFkZCh7IGlkeCwgcmVzb2x2ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3VtZTtcbiAgICB0aGlzLl9yZXN1bWUgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gIH1cblxuICAvLyBJbnZhbGlkYXRlIHRoZSBydW5uaW5nIHBhc3MgKG9yIHdha2UgYSBwYXJrZWQgb25lKSBzbyBwdW1wKCkgc3RhcnRzIGEgZnJlc2ggZGVjb2RlIGZyb20gZnJhbWUgMS5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9nZW4rKztcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdGFydDtcbiAgICB0aGlzLl9yZXN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICAgIHRoaXMud2FrZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdW1wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmYWlscyA9IDA7XG4gICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQpIHtcbiAgICAgIGNvbnN0IGdlbiA9IHRoaXMuX2dlbjtcbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgICAgbGV0IGZhaWxlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIFRBRyxcbiAgICAgICAgICAgIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgcGFzcyBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICBmYWlscyA9IDA7XG4gICAgICAgIGNvbnRpbnVlOyAvLyByZXN0YXJ0IHJlcXVlc3RlZCBtaWQtcGFzc1xuICAgICAgfVxuICAgICAgLy8gQSB0aHJvd24gcGFzcyBpcyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgKGUuZy4gYSBzdHJlYW1lZCBsb29wIHJlLW9wZW4pOyByZXRyeSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBFT0YsIHdoaWNoIHdvdWxkIGJsYW5rIHRoZSBmcmFtZS5cbiAgICAgIGlmIChmYWlsZWQgJiYgKytmYWlscyA8PSBNQVhfUEFTU19SRVRSWSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZhaWxzID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIGF3YWl0IHRoaXMudW50aWxSZXN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWNvZGVQYXNzKGdlbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gZGVjb2RlRnJhbWVzKHsgc3JjOiB0aGlzLl9zcmMsIG1ldGE6IHRoaXMubWV0YSwgc2lnbmFsOiB0aGlzLl9jdHJsLnNpZ25hbCB9KTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHsgaWR4LCBidWYgfSBvZiBzdHJlYW0pIHtcbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYXQgPSB0aGlzLl9sZWFkRnJhbWVzICsgaWR4OyAvLyBtYXAgZGVjb2RlIHBvc2l0aW9uIHBhc3QgdGhlIGhlbGQgbGVhZC1nYXAgZnJhbWVzXG4gICAgICB3aGlsZSAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbiAmJiBhdCA+IHRoaXMuZGVtYW5kICsgREVDT0RFX0FIRUFEKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fYnVmLnNldChhdCwgYnVmKTtcbiAgICAgIHRoaXMuX3JlYWR5ID0gYXQ7XG4gICAgICAvLyBEcmFpbiBiZWZvcmUgZXZpY3Q6IHdpdGggd2FudCBmYXIgYWhlYWQgdGhlIGZsb29yIGNvdmVycyB0aGlzIGZyYW1lLCBhbmQgZXZpY3RpbmcgaXQgZmlyc3Qgc3RhcnZlcyBpdHMgd2FpdGVyIGZvcmV2ZXIuXG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgdGhpcy5ldmljdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhaXRlcnMgdGhhdCBzdXJ2aXZlZCBhIHJld2luZCByZXN0YXJ0IGFyZSBzdGlsbCBkZW1hbmQ7IGlnbm9yaW5nIHRoZW0gcGFya3MgdGhlIHBhc3MgYW5kIHN0YXJ2ZXMgdGhlbSBmb3JldmVyLlxuICBwcml2YXRlIGdldCBkZW1hbmQoKTogbnVtYmVyIHtcbiAgICBsZXQgZCA9IHRoaXMuX3dhbnQ7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIGlmICh3LmlkeCA+IGQpIHtcbiAgICAgICAgZCA9IHcuaWR4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfVxuXG4gIHByaXZhdGUgcGF1c2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN1bWUgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUGFyayB1bnRpbCBhIGxvb3AvYmFja3dhcmQgcmVxdWVzdCAob3IgY2xvc2UpIGNhbGxzIHJlcXVlc3RSZXN0YXJ0KCkuXG4gIHByaXZhdGUgdW50aWxSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN0YXJ0ID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLl93YW50IC0gdGhpcy5fa2VlcENvdW50O1xuICAgIGZvciAoY29uc3QgayBvZiB0aGlzLl9idWYua2V5cygpKSB7XG4gICAgICBpZiAoayA8IGZsb29yKSB7XG4gICAgICAgIHRoaXMuX2J1Zi5kZWxldGUoayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbldhaXRlcnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4udGhpcy5fd2FpdGVyc10pIHtcbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoZW50cnkuaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKGhpdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBEZWNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9iZVJlc3VsdCB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogUFRTIChzKSBvZiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBhIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBydW4gaXMgaGVsZCBvbiBpdCwgbGlrZSBDaHJvbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuLy8gTm8gd2FsbC1jbG9jayBjYXA6IG9wZW5JbnB1dCdzIHBlci1yZWFkIHJ3X3RpbWVvdXQgYm91bmRzIGEgc3R1Y2sgc291cmNlLCBhbmQgdGhlIGNhbGxlciByZXRyaWVzIG9uIHRocm93LlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICBhd2FpdCB1c2luZyBkID0gYXdhaXQgb3BlbklucHV0KHNyYyk7XG4gIGNvbnN0IHN0cmVhbSA9IGQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmU6IG5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICBjb25zdCBkdXJhdGlvbiA9IGQuZHVyYXRpb24gPiAwID8gZC5kdXJhdGlvbiA6IDA7XG4gIGNvbnN0IHRiID0gc3RyZWFtLnRpbWVCYXNlLm51bSAvIHN0cmVhbS50aW1lQmFzZS5kZW47XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyB0aHJlYWRDb3VudDogMSB9KTtcbiAgbGV0IGxlYWRHYXAgPSAwO1xuICAvLyBGaXJzdCBjbGVhbiBmcmFtZSdzIFBUUyA9IHdoZXJlIGNvbnRlbnQgYmVnaW5zOyBza2lwIGNvcnJ1cHQgZnJhbWVzIGxpa2UgYSBicm93c2VyLlxuICBvdXRlcjogZm9yIGF3YWl0ICh1c2luZyBwa3Qgb2YgZC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBkZWMuZnJhbWVzKHBrdCkpIHtcbiAgICAgICAgaWYgKGZyYW1lPy5kZWNvZGVFcnJvckZsYWdzICE9PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGVhZEdhcCA9IE1hdGgubWF4KDAsIE51bWJlcihmcmFtZS5wdHMpICogdGIpO1xuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGNvcnJ1cHQgcGFja2V0IOKAlCBza2lwIHRvIHRoZSBuZXh0XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHdpZHRoOiBzdHJlYW0uY29kZWNwYXIud2lkdGgsIGhlaWdodDogc3RyZWFtLmNvZGVjcGFyLmhlaWdodCwgZHVyYXRpb24sIGxlYWRHYXAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDYuXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0gfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb2RlYywgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDksIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3R1YkVuY29kZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuLy8gUmVhbCBwYXJzZWFibGUgbWVkaWEgd2l0aCB0aGUgc291cmNlJ3MgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbiwgc28gQmxpbmsgbGF5cyBvdXQgbGlrZSBDaHJvbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jb2RlU3R1YldlYm0oeyB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiB9OiBTdHViRW5jb2RlT3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9MSUJWUFhfVlA5KTtcbiAgaWYgKCFjb2RlYykge1xuICAgIHRocm93IG5ldyBFcnJvcihgc3R1YjogZW5jb2RlciBub3QgZm91bmQ6ICR7RkZfRU5DT0RFUl9MSUJWUFhfVlA5fWApO1xuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX3N0dWJfJHtyYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKX0ud2VibWApO1xuICB0cnkge1xuICAgIHtcbiAgICAgIGF3YWl0IHVzaW5nIG11eGVyID0gbmV3IEZvcm1hdE11eGVyKHBhdGgpO1xuICAgICAgLy8gVGltZWJhc2UgMS8xMDAwIChmcHMgcGFyYW0pIGxldHMgb25lIHBhY2tldCBjYXJyeSB0aGUgZnVsbCBzb3VyY2UgZHVyYXRpb24gaW4gbXMuXG4gICAgICB1c2luZyBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICAgIHtcbiAgICAgICAgICBjb2RlYyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgZnBzOiAxMDAwLFxuICAgICAgICAgIGJpdHJhdGU6IDEwMF8wMDAsXG4gICAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgICAgICAgICBvcHRpb25zOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdHViQ3R4Lm9wZW4yXCIsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgICB1c2luZyBzdHViID0gbmV3IFN0dWJGcmFtZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IG1zID0gQmlnSW50KE1hdGgubWF4KDEsIE1hdGgucm91bmQoZHVyYXRpb24gKiAxMDAwKSkpO1xuICAgICAgc3R1Yi5mcmFtZS5wdHMgPSAwbjtcbiAgICAgIHN0dWIuZnJhbWUuZHVyYXRpb24gPSBtcztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKHN0dWIuZnJhbWUpLCBcInN0dWJDdHguc2VuZEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCksIFwic3R1YkN0eC5mbHVzaFwiKTtcbiAgICAgIHVzaW5nIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJzdHViQ3R4LnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gbXM7XG4gICAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKHBhdGgpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuLy8gT3ducyB0aGUgYmxhY2sgcGl4ZWwgYnVmZmVyIEFORCBpdHMgemVyby1jb3B5IGZyYW1lIHZpZXcg4oCUIGB1c2luZ2AgcGlucyBib3RoIHVudGlsIGFmdGVyIGVuY29kZS5cbmNsYXNzIFN0dWJGcmFtZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBmcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZjogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgbHVtYSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIGNvbnN0IGNocm9tYSA9IE1hdGguY2VpbCh3aWR0aCAvIDIpICogTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5hbGxvYyhsdW1hICsgY2hyb21hICogMiwgMHg4MCk7XG4gICAgdGhpcy5fYnVmLmZpbGwoMCwgMCwgbHVtYSk7XG4gICAgdGhpcy5mcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcih0aGlzLl9idWYsIHsgd2lkdGgsIGhlaWdodCwgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSk7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuZnJhbWVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uLy4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwgfSBmcm9tIFwiLi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgRGVjb2RlU2Vzc2lvbiB9IGZyb20gXCIuL2RlY29kZV9zZXNzaW9uXCI7XG5pbXBvcnQgeyB0eXBlIFByb2JlUmVzdWx0LCBwcm9iZSB9IGZyb20gXCIuL3Byb2JlXCI7XG5pbXBvcnQgeyBlbmNvZGVTdHViV2VibSB9IGZyb20gXCIuL3N0dWJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBTZWNvbmRzIG9mIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBjb250ZW50IGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICAvKiogRGlzcGxheS1ib3ggcGl4ZWxzIChjYW52YXMgYmFja2luZyBzdG9yZSk7IGRlY29kZSBpcyBkb3duc2NhbGVkIHRvIGNvdmVyIHRoaXMsIG5ldmVyIHVwc2NhbGVkLiAqL1xuICBkc3RXPzogbnVtYmVyO1xuICBkc3RIPzogbnVtYmVyO1xuICAvKiogb2JqZWN0Rml0OyBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscyBzbyBpdCBza2lwcyBkb3duc2NhbGUuICovXG4gIGZpdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVudHJ5IHtcbiAgc2Vzc2lvbjogRGVjb2RlU2Vzc2lvbjtcbiAgcmVmczogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIF9zZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgcHJpdmF0ZSBfcHJvYmVzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8UHJvYmVSZXN1bHQ+PigpO1xuICBwcml2YXRlIF9zdHVicyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEJ1ZmZlcj4+KCk7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuXG4gIC8vIC1kIGRlY29kZSBieXBhc3NlcyB0aGUgd2luZG93IGludGVyY2VwdG9yLCBzbyBpdCByZW1hcHMgaG9zdHMgaXRzZWxmIHdoZW4gdGhlIGlubmVyIHByb3h5IGlzIG9uLlxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF91c2VJbm5lclByb3h5OiBib29sZWFuKSB7fVxuXG4gIC8vIGNsb3NlZC1jaGVja2VkIGFmdGVyIHByb2JlIHNvIGNsb3NlQWxsKCkgY2FuJ3QgcmFjZSBhIHNsb3cgb3BlbiBpbnRvIGEgbGVha2VkIHNlc3Npb24uXG4gIGFzeW5jIG9wZW4ob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGtleShvcHRzKTtcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdC5yZWZzKys7XG4gICAgICByZXR1cm4gaGl0LnNlc3Npb24ubWV0YTtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdGhpcy5fdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwob3B0cy5zcmMpIDogb3B0cy5zcmM7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHRoaXMucHJvYmVDYWNoZWQoc3JjKTtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgbGV0IGZyYW1lV2lkdGggPSBpbmZvLndpZHRoO1xuICAgIGxldCBmcmFtZUhlaWdodCA9IGluZm8uaGVpZ2h0O1xuICAgIC8vIERvd25zY2FsZSB0byBjb3ZlciB0aGUgZGlzcGxheSBib3ggKG5ldmVyIHVwc2NhbGUpOyBvYmplY3RGaXQgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMuXG4gICAgaWYgKG9wdHMuZHN0VyAmJiBvcHRzLmRzdEggJiYgb3B0cy5maXQgIT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5taW4oMSwgTWF0aC5tYXgob3B0cy5kc3RXIC8gaW5mby53aWR0aCwgb3B0cy5kc3RIIC8gaW5mby5oZWlnaHQpKTtcbiAgICAgIGZyYW1lV2lkdGggPSBldmVuKGluZm8ud2lkdGggKiBzKTtcbiAgICAgIGZyYW1lSGVpZ2h0ID0gZXZlbihpbmZvLmhlaWdodCAqIHMpO1xuICAgIH1cbiAgICBjb25zdCBtZXRhOiBWaWRlb01ldGEgPSB7XG4gICAgICBpZCxcbiAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgIGZyYW1lV2lkdGgsXG4gICAgICBmcmFtZUhlaWdodCxcbiAgICAgIGZwczogb3B0cy5mcHMsXG4gICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIGxlYWRHYXA6IGluZm8ubGVhZEdhcCxcbiAgICB9O1xuICAgIHRoaXMuX3Nlc3Npb25zLnNldChpZCwgeyBzZXNzaW9uOiBuZXcgRGVjb2RlU2Vzc2lvbihtZXRhLCBzcmMpLCByZWZzOiAxIH0pO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5pc3RpYyBtZWRpYSByZXF1ZXN0cyByZWRpcmVjdCBoZXJlOiByZWFsIHBhcnNlYWJsZSBieXRlcyB3aXRoIHRydWUgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbi5cbiAgc3R1YihzcmM6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWwgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzcmMpIDogc3JjO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3N0dWJzLmdldChyZWFsKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdGhpcy5wcm9iZUNhY2hlZChyZWFsKS50aGVuKChpbmZvKSA9PlxuICAgICAgZW5jb2RlU3R1YldlYm0oe1xuICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fc3R1YnMuZGVsZXRlKHJlYWwpKTtcbiAgICB0aGlzLl9zdHVicy5zZXQocmVhbCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHJldHVybiBlLnNlc3Npb24uZ2V0RnJhbWUoaWR4KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKC0tZS5yZWZzID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgIGF3YWl0IGUuc2Vzc2lvbi5jbG9zZSgpO1xuICB9XG5cbiAgLy8gRmFpbGVkIHByb2JlcyBldmljdCBzbyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgY2FuIHJldHJ5IG9uIHRoZSBuZXh0IHJlcXVlc3QuXG4gIHByaXZhdGUgcHJvYmVDYWNoZWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fcHJvYmVzLmdldChzcmMpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB1c2VSZXRyeSh7IGZuOiBwcm9iZSB9KShzcmMpO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fcHJvYmVzLmRlbGV0ZShzcmMpKTtcbiAgICB0aGlzLl9wcm9iZXMuc2V0KHNyYywgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBjbG9zZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlc3Npb25zID0gWy4uLnRoaXMuX3Nlc3Npb25zLnZhbHVlcygpXTtcbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHNlc3Npb25zLm1hcCgoZSkgPT4gZS5zZXNzaW9uLmNsb3NlKCkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBrZXkob3B0czogT3Blbk9wdGlvbnMpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAudXBkYXRlKGAke29wdHMuc3JjfXwke29wdHMuZnBzfXwke29wdHMuZHN0VyA/PyBcIlwifXwke29wdHMuZHN0SCA/PyBcIlwifXwke29wdHMuZml0ID8/IFwiXCJ9YClcbiAgICAuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vLyBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gaW50ZWdlciAo4omlMikgZm9yIHRoZSBzY2FsZXIuXG5mdW5jdGlvbiBldmVuKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4pO1xuICByZXR1cm4gTWF0aC5tYXgoMiwgciAtIChyICUgMikpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEZyYW1lU2VydmVyLCB0eXBlIFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltGcmFtZVByb3RvY29sXVwiO1xuXG4vLyBTY2hlbWUgaXMgcmVnaXN0ZXJlZCBhbG9uZ3NpZGUgYHB1cGAgaW4gcmVuZGVyZXIvcHJvdG9jb2wudHMgKHNpbmdsZSBjYWxsIG9ubHkpLlxuY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuY29uc3QgQ09SU19IRUFERVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBcIipcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1tZXRob2RzXCI6IFwiR0VULCBPUFRJT05TXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiOiBcIipcIixcbn07XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS4gRGV0ZXJtaW5pc3RpYy1vbmx5IChyZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljaywgbm8gZnJhbWUgcHJvdG9jb2wpLlxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZyYW1lUHJvdG9jb2wodXNlSW5uZXJQcm94eTogYm9vbGVhbik6IEFzeW5jRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGZzID0gbmV3IEZyYW1lU2VydmVyKHVzZUlubmVyUHJveHkpO1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgJHtyZXEubWV0aG9kfSAke3VybC5ob3N0bmFtZX0ke3VybC5zZWFyY2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmV0dXJuIGpzb25PayhcbiAgICAgICAgICAgIGF3YWl0IGZzLm9wZW4oe1xuICAgICAgICAgICAgICBzcmM6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIsXG4gICAgICAgICAgICAgIGZwczogaW50KHVybCwgXCJmcHNcIiwgMzApLFxuICAgICAgICAgICAgICBkc3RXOiBpbnQodXJsLCBcIndcIiwgMCksXG4gICAgICAgICAgICAgIGRzdEg6IGludCh1cmwsIFwiaFwiLCAwKSxcbiAgICAgICAgICAgICAgZml0OiB1cmwuc2VhcmNoUGFyYW1zLmdldChcImZpdFwiKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZnJhbWVcIjpcbiAgICAgICAgICByZXR1cm4gcmdiYU9rKGF3YWl0IGZzLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMSkpKTtcbiAgICAgICAgY2FzZSBcInN0dWJcIjpcbiAgICAgICAgICByZXR1cm4gd2VibU9rKGF3YWl0IGZzLnN0dWIodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIikpO1xuICAgICAgICBjYXNlIFwiY2xvc2VcIjpcbiAgICAgICAgICBhd2FpdCBmcy5jbG9zZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7XG4gICAgICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgICAgIGhlYWRlcnM6IENPUlNfSEVBREVSUyxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBgJHt1cmwuaG9zdG5hbWV9IGZhaWxlZCR7dXJsLnNlYXJjaH06ICR7bXNnfWApO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtc2csIHsgc3RhdHVzOiA1MDAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvdG9jb2wudW5oYW5kbGUoU0NIRU1FKTtcbiAgICAgIGF3YWl0IGZzLmNsb3NlQWxsKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuLy8gQ2FjaGVkIHN0dWIgQnVmZmVyIGlzIHNoYXJlZCBhY3Jvc3MgcmVzcG9uc2VzIOKAlCBjb3B5IHNvIGEgY29uc3VtZXIgY2FuJ3QgZGV0YWNoIGl0LlxuZnVuY3Rpb24gd2VibU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ2aWRlby93ZWJtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vLyBSYXcgUkdCQSBwaXhlbHM7IHRoZSBwYWdlIHdyYXBzIHRoZW0gaW4gSW1hZ2VEYXRhIHVzaW5nIG1ldGEud2lkdGgvaGVpZ2h0IGl0IGdvdCBmcm9tIGBvcGVuYC5cbmZ1bmN0aW9uIHJnYmFPayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQxMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICB9XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3csIE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlydHVhbFRpbWUsIHBhdXNlVmlydHVhbFRpbWUsIHJlYnVpbGREcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua1N0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9ibGFua1wiO1xuaW1wb3J0IHsgRHJvcFN0YXRzLCBKQU5LX1dBUk5fU0NPUkUgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2Ryb3BcIjtcbmltcG9ydCB7IHBlcmlvZGljYWwgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgU2NyZWVuc2hvdFRha2VyIH0gZnJvbSBcIi4vc2NyZWVuc2hvdFwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIGRyYXdTdGVnbywgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIHdhaXRTdGVnb1RpY2sgfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgdGljayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IHVzZUZyYW1lUHJvdG9jb2wgfSBmcm9tIFwiLi92aWRlby9wcm90b2NvbFwiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcbmNvbnN0IFJFTkRFUl9GUFMgPSAyNDA7XG5cbmludGVyZmFjZSBQYWludE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuLy8gUGFpbnRpbmcgc3RheXMgb24gZm9yIHRoZSB3aG9sZSBydW47IHdhaXRzIGZvciB0aGUgZnJhbWUgd2hvc2Ugc3RlZ28gcm93IG1hdGNoZXMgYG1zYCwgdW5kZWZpbmVkIG9uIHRpbWVvdXQuXG5hc3luYyBmdW5jdGlvbiBwYWludCh7IHdpbiwgZnBzLCBzaXplLCBtcyB9OiBQYWludE9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICBsZXQgY2xlYXJEaXJ0eUNoZWNrOiBWb2lkRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IHVua25vd24sIF9kOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSBmcm9tIGEgMi1yb3cgc2xpdmVyIGZpcnN0OyB0aGUgZnVsbC1mcmFtZSByZWFkYmFjayAofjhNQiBtZW1jcHkpIGlzIHBhaWQgb25seSBvbiB0aGUgbWF0Y2hpbmcgZnJhbWUuXG4gICAgICAgIGNvbnN0IHNsaXZlciA9IGltYWdlLmNyb3AoeyB4OiAwLCB5OiBmcmFtZVNpemUuaGVpZ2h0IC0gMiwgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oc2xpdmVyLnRvQml0bWFwKCksIHsgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKHRzIC0gbXMpID4gMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIGNsZWFyRGlydHlDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKHN0dWNrKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSBmcHMgKiA1KSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcGFpbnQgdGltZW91dCBAICR7bXN9YCk7XG4gICAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHVjayAlIE1hdGguZmxvb3IoZnBzIC8gMikgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwIC8gZnBzKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckRpcnR5Q2hlY2s/LigpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdChvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBhd2FpdCB1c2luZyBfID0gdXNlRnJhbWVQcm90b2NvbChvcHRpb25zLnVzZUlubmVyUHJveHkpO1xuICBjb25zdCB0SW5pdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB3aW5QID0gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMsIHNpZ25hbCB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQpIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgaGVsZCA9IDA7XG4gIGxldCBsYXN0Qml0bWFwOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBzY3JlZW5zaG90czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgYmxhbmtTdGF0cyA9IG5ldyBCbGFua1N0YXRzKHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRHJvcFN0YXRzKGZwcyk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgbWFpbiA9IHdpbi53ZWJDb250ZW50cy5tYWluRnJhbWU7XG4gIGNvbnN0IGlmcmFtZSA9IG1haW4uZnJhbWVzWzBdO1xuICB0cnkge1xuICAgIC8vIENvbXBvc2l0b3IvY2FwdHVyZSBjYWRlbmNlIGNhcCwgTk9UIG91dHB1dCBmcHM7IGZyYW1lcyBhcmUgZGFtYWdlLWRyaXZlbiBwZXIgdmlydHVhbCBzdGVwLlxuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoUkVOREVSX0ZQUyk7XG4gICAgYXdhaXQgcGF1c2VWaXJ0dWFsVGltZShjZHApO1xuXG4gICAgZm9yIChsZXQgZnJhbWUgPSAwOyBmcmFtZSA8IHRvdGFsOyBmcmFtZSsrKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBmcmFtZU1zID0gKGZyYW1lICsgMSkgKiBmcmFtZUludGVydmFsO1xuXG4gICAgICAvLyBBcm0gYmVmb3JlIGRyYXdTdGVnbyBzbyB0aGUgY29tbWl0IGFjayBjYW4ndCBiZSBtaXNzZWQ7IGJyYW5jaCBjYXRjaCBrZWVwcyBhbiBlYXJseSB0aWNrIGZhaWx1cmUgZnJvbSBvcnBoYW5pbmcgaXQuXG4gICAgICBjb25zdCBzd2FwcGVkID0gd2FpdFN0ZWdvVGljayh3aW4ud2ViQ29udGVudHMpO1xuICAgICAgc3dhcHBlZC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAvLyBJbmRlcGVuZGVudCB0YXJnZXRzIChpZnJhbWUgY2xvY2sgdnMgbWFpbi1mcmFtZSBzdGVnbyBjYW52YXMpOiBvbmUgY29uY3VycmVudCBob3AgaW5zdGVhZCBvZiB0d28gc2VyaWFsIG9uZXMuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGljayh7IGZyYW1lOiBpZnJhbWUsIHRpbWVzdGFtcE1zOiBmcmFtZU1zLCBzaWduYWwgfSksIGRyYXdTdGVnbyh3aW4ud2ViQ29udGVudHMsIGZyYW1lTXMpXSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbYWR2YW5jZVZpcnR1YWxUaW1lKGNkcCwgZnJhbWVJbnRlcnZhbCksIHN3YXBwZWRdKTtcbiAgICAgIGNvbnN0IHBhaW50ZWQgPSBhd2FpdCBwYWludCh7IHNvdXJjZSwgZnBzLCB3aW4sIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LCBtczogZnJhbWVNcyB9KTtcbiAgICAgIGlmIChwYWludGVkKSB7XG4gICAgICAgIGhlbGQgPSAwO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlbGQrKztcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBiaXRtYXAgPSBwYWludGVkID8/IGxhc3RCaXRtYXA7XG4gICAgICBpZiAoIWJpdG1hcCB8fCBoZWxkID49IGZwcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyIGV4YXVzdGVkIEAgJHtmcmFtZU1zfWApO1xuICAgICAgfVxuICAgICAgbGFzdEJpdG1hcCA9IGJpdG1hcDtcbiAgICAgIHRha2VyLmNhcHR1cmUoZnJhbWVNcywgYml0bWFwKTtcbiAgICAgIGJsYW5rU3RhdHMuc2FtcGxlKGJpdG1hcCk7XG4gICAgICAvLyBBd2FpdGVkOiB0aGUgbGltaXRlciBxdWV1ZXMgd2l0aG91dCBib3VuZCwgc28gYW4gZW5jb2RlciBzbG93ZXIgdGhhbiBjYXB0dXJlIHBpbnMgb25lIGZ1bGwgQkdSQSBmcmFtZSBwZXIgYmFja2xvZyBlbnRyeS5cbiAgICAgIGF3YWl0IHBpcGVsaW5lLmVuY29kZUJHUkEoYml0bWFwKTtcbiAgICAgIHdyaXR0ZW4rKztcblxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChuZXdQcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgICBzY3JlZW5zaG90cyA9IGF3YWl0IHRha2VyLmZpbmlzaChsYXN0Qml0bWFwKTtcbiAgfVxuXG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZnJhbWVzIGhlbGQgcGFzdCBwYWludCB0aW1lb3V0YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIG91dEZpbGVzLCBibGFuaywgamFuaywgc2NyZWVuc2hvdHMgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyB0eXBlIElwY01zZywgSXBjTXNnVHlwZSwgSXBjV3JpdGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbnByb2Nlc3MuZW52W1wiRUxFQ1RST05fRElTQUJMRV9TRUNVUklUWV9XQVJOSU5HU1wiXSA9IFwiMVwiO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5sZXQgZXhpdGluZyA9IGZhbHNlO1xuXG5zdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpO1xuTWVudS5zZXRBcHBsaWNhdGlvbk1lbnUobnVsbCk7XG5hcHAuZG9jaz8uaGlkZSgpO1xuYXBwLm9uKFwid2luZG93LWFsbC1jbG9zZWRcIiwgKCkgPT4ge30pO1xuYXBwLm9uKFwiZ3B1LWluZm8tdXBkYXRlXCIsIHByaW50RmVhdHVyZXMpO1xuYXBwLm9uKFwiYmVmb3JlLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5hcHAub24oXCJ3aWxsLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5cbm9rKHByb2Nlc3Muc2VuZCwgXCJpcGMgY2hhbm5lbCBtaXNzaW5nIOKAlCBzcGF3biB3aXRoIHN0ZGlvWzNdPSdpcGMnXCIpO1xucHJvY2Vzcy5vbmNlKFwiZGlzY29ubmVjdFwiLCAoKSA9PiBjdHJsLmFib3J0KFwiZGlzY29ubmVjdFwiKSk7XG5wcm9jZXNzLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gIGlmIChtc2cudHlwZSA9PT0gSXBjTXNnVHlwZS5DYW5jZWwpIHtcbiAgICBjdHJsLmFib3J0KG1zZy5yZWFzb24pO1xuICB9XG59KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIHJ1bjogYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGlwYyA9IG5ldyBJcGNXcml0ZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgICAgc2V0dXBQdXBQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgZm9yIChjb25zdCBvdXQgb2Ygb3B0aW9ucy5vdXRGaWxlcykge1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBjdHJsLnNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgIG9uQ29uc29sZTogKGwsIG0pID0+IGlwYy53cml0ZUNvbnNvbGUobCwgbSksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZURvbmUocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBjb25zdCBtID0gZXJyb3Iuc3RhY2sgPz8gZXJyb3IubWVzc2FnZSA/PyBTdHJpbmcoZSA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgICBhd2FpdCBpcGMud3JpdGVFcnJvcihtKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdGluZyA9IHRydWU7XG4gICAgICBhcHAuZXhpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErY2JkMDZiZTE1OWE5MGZhZS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcnVudGltZS93b3JsZC50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vb3Blbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3R1Yi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInBhcnNlQXJyYXkiLCJpdGVtIiwicyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBQcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEVTIiwicmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJhYm9ydGFibGUiLCJvbkFib3J0IiwicGVyaW9kaWNhbCIsImNhbGxiYWNrIiwidG9rZW4iLCJjbG9zZWQiLCJ0aWNrIiwiY291bnQiLCJuZXh0IiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiZXZhbEluIiwiZXhwcmVzc2lvbiIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwiXyIsInBhdXNlVmlydHVhbFRpbWUiLCJyZWJ1aWxkRHJhd2FibGUiLCJ3ZWIiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJvcGVuVmlkZW9DdHgiLCJfc3RhY2siLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJzdGFjayIsIl9fdXNpbmciLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiYnl0ZXMiLCJTY3JlZW5zaG90VGFrZXIiLCJfcyIsImRpciIsInNlYyIsImluZGV4IiwiY3VycmVudFRpbWVNcyIsImZpbmFsQmdyYSIsIm5hdGl2ZUltYWdlIiwid3JpdGVGaWxlIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJXT1JMRF9BUkciLCJBVURJT19BUkciLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwidGFyZ2V0cyIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwiaXNQcm94eVRhcmdldCIsIlVSTCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJzdHViTWVkaWEiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJfcGF0aCIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsIldPUkxEX1NDUklQVFMiLCJwaWNrV29ybGRTY3JpcHQiLCJyZW5kZXJlciIsIm1vZGUiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0YWtlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0RnJhbWUiLCJzY3JlZW5zaG90cyIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiY2xlYXJTdHVja0NoZWNrIiwiYmxhbmtTdGF0cyIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJibGFuayIsImphbmsiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsImFkdmFuY2VWaWRlb3MiLCJ0aW1lc3RhbXBNcyIsIlRJQ0tfU1lNQk9MIiwiZXhwciIsInRpY2tFdiIsIlJXX1RJTUVPVVRfVVMiLCJvcGVuSW5wdXQiLCJEZW11eGVyIiwiZGVjb2RlRnJhbWVzIiwibWV0YSIsIkFWTUVESUFfVFlQRV9WSURFTyIsImRlYyIsIkRlY29kZXIiLCJmcmFtZVdpZHRoIiwiZnJhbWVIZWlnaHQiLCJzY2FsZSIsImZpbHRlciIsIkZpbHRlckFQSSIsIl9mcmFtZSIsInBhY2tSZ2JhIiwicm93Iiwic3RyaWRlIiwiREVDT0RFX0FIRUFEIiwiS0VFUF9CRUhJTkQiLCJNRU1PUllfQlVER0VUIiwiTUFYX1BBU1NfUkVUUlkiLCJEZWNvZGVTZXNzaW9uIiwiX3NyYyIsImlkeCIsImhpdCIsImZhaWxzIiwiZ2VuIiwiZmFpbGVkIiwiYXQiLCJmbG9vciIsInRiIiwibGVhZEdhcCIsIm91dGVyIiwiX3BrdCIsImVuY29kZVN0dWJXZWJtIiwidG1wZGlyIiwicmFuZG9tQnl0ZXMiLCJzdHViIiwiU3R1YkZyYW1lIiwicmVhZEZpbGUiLCJybSIsImx1bWEiLCJjaHJvbWEiLCJGcmFtZVNlcnZlciIsIl91c2VJbm5lclByb3h5IiwiaWQiLCJldmVuIiwicmVhbCIsInNlc3Npb25zIiwiY3JlYXRlSGFzaCIsIlNDSEVNRSIsIkNPUlNfSEVBREVSUyIsInVzZUZyYW1lUHJvdG9jb2wiLCJmcyIsImpzb25PayIsImludCIsInJnYmFPayIsIndlYm1PayIsImNvcHkiLCJmYWxsYmFjayIsIlJFTkRFUl9GUFMiLCJjbGVhckRpcnR5Q2hlY2siLCJpc0ZpcnN0RnJhbWUiLCJfZCIsInNsaXZlciIsInRzIiwicmVmcmVzaEZwcyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJoZWxkIiwibWFpbiIsImlmcmFtZSIsImZyYW1lSWQiLCJmcmFtZU1zIiwicGFpbnRlZCIsInJlcGVhdCIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCJdLCJtYXBwaW5ncyI6Iml6RUFLQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2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Q0FBRyxDQUFDLENBQUEsQ0FFWCxJQUFBLElBQVN0SixFQUFJc0wsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQnRMLEVBQUksQ0FBQSxDQUFHQSxDQUFBQSxFQUFBQSxDQUMxQ3NKLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBRWIsQ0FFQUEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNULFFBQVN0SixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSSxFQUFBLENBQUlBLENBQUFBLEVBQUFBLENBQ3RCc0osQ0FBQUEsQ0FBRyxLQUFLdEosQ0FBQUEsR0FBTSxDQUFBLEVBQUtBLElBQU0sQ0FBQyxDQUFBLENBRTVCc0osRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBS2dDLENBQUFBLENBQUksT0FBQSxDQUFTQSxFQUFJLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBSSxPQUFTQSxDQUFBQSxDQUFJLFFBQVEsRUFFNURoQyxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUU1SixFQUFPLEVBQUUsQ0FBQSxDQUNkNEosRUFBRyxDQUFBLENBQUUzSixDQUFBQSxDQUFRLEVBQUUsQ0FBQSxDQUNmMkosQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FFUEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFL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Q0FBQyxDQUFBLENBQ3RDLFVBQVcsQ0FBQ29YLENBQUFBLENBQUdmLElBQU04TixDQUFBQSxDQUFJLFlBQUEsQ0FBYS9NLEVBQUdmLENBQUMsQ0FDNUMsQ0FBQyxDQUNILENBQUEsQ0FDQSxNQUFNOE4sQ0FBQUEsQ0FBSSxTQUFBLENBQVVFLENBQU0sRUFDNUIsQ0FBQSxNQUFTM2tCLENBQUFBLENBQUcsQ0FDVixJQUFNdkQsQ0FBQUEsQ0FBUXVELEVBQ1IyVyxDQUFBQSxDQUFJbGEsQ0FBQUEsQ0FBTSxPQUFTQSxDQUFBQSxDQUFNLE9BQUEsRUFBVyxPQUFPdUQsQ0FBQUEsRUFBSyxlQUFlLENBQUEsQ0FDckUsTUFBTXlrQixDQUFBQSxDQUFJLFVBQUEsQ0FBVzlOLENBQUMsRUFDeEIsQ0FBQSxPQUFFLENBQ0EyTixFQUFBQSxDQUFVLElBQUEsQ0FDVnJtQixhQUFJLElBQUEsR0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuXG4vLyBDb21tYS1zZXBhcmF0ZWQgc3RyaW5nIOKGkiBhcnJheSB2aWEgYSBwZXItaXRlbSBwYXJzZXI7IGVtcHR5L2JsYW5rIOKGkiBbXS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFycmF5PFQ+KGl0ZW06ICh4OiB1bmtub3duKSA9PiBUKTogKHg6IHVua25vd24pID0+IFRbXSB7XG4gIHJldHVybiAoeCkgPT4ge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gXCJzdHJpbmdcIiB8fCB4LnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4geC5zcGxpdChcIixcIikubWFwKChzKSA9PiBpdGVtKHMudHJpbSgpKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cFByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJwcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pID0+IHVua25vd24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIHtcbiAgICBsb2dnZXIuZXJyb3IobXNnKTtcbiAgfSBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykge1xuICAgIGxvZ2dlci53YXJuKG1zZyk7XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjEuXG5cbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIC8vIGFwcERhdGEgKG5vdCB0aGUgcGVyLXJ1biB1c2VyLWRhdGEtZGlyKSBzbyBldmVyeSBwdXAgYXBwJ3MgZHVtcHMgYWNjdW11bGF0ZSBpbiBvbmUgc2hhcmVkLCBwZXJzaXN0ZW50IGRpci5cbiAgY29uc3QgZHVtcERpciA9IGpvaW4oYXBwLmdldFBhdGgoXCJhcHBEYXRhXCIpLCBcInB1cC1yZWNvcmRlclwiLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8QSBleHRlbmRzIHVua25vd25bXSwgUiwgRD4oZm46ICguLi5hcmdzOiBBKSA9PiBSLCBkZWZhdWx0VmFsdWU6IEQpOiAoLi4uYXJnczogQSkgPT4gUiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSkgYXMgUiB8IEQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICB9XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2lsbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBpZCA9IHByb2MucGlkO1xuICAgICAgaWYgKHBpZCkge1xuICAgICAgICB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lORE9XX1RJTUVPVVQgPSAxMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFUyA9IFtcIm91dC9odG1sLm1wNFwiLCBcIm91dC9odG1sLndlYm1cIl07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZXM6IHouYXJyYXkoei5zdHJpbmcoKSkuZGVzY3JpYmUoXCJPdXRwdXQgcGF0aHM7IGV4dGVuc2lvbiAoLm1wNC8ud2VibSkgc2VsZWN0cyBlbmNvZGVyXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG4gIGRpc2FibGVHcHU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBHUFUgcmVuZGVyaW5nLCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGJ1dCBpbmNyZWFzZSBzdGFiaWxpdHlcIiksXG4gIGRpc2FibGVId0NvZGVjOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgaGFyZHdhcmUgdmlkZW8gZW5jb2RlciAoTlZFTkMvVmlkZW9Ub29sYm94KSwgdXNlIHNvZnR3YXJlIHgyNjVcIiksXG4gIGRpc2FibGVXZWJTZWN1cml0eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEcm9wIHRoZSBzYW1lLW9yaWdpbiB3YWxsOyByZXF1aXJlZCB0byByZWNvcmQgYSBsb2NhbCBmaWxlXCIpLFxuICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogelxuICAgIC5ib29sZWFuKClcbiAgICAuZGVzY3JpYmUoXCJSZWNvcmQgb3ZlciBUTFMgdGhlIHBsYXRmb3JtIHJlamVjdHMsIGUuZy4gYSBzZWxmLXNpZ25lZCBpbnRyYW5ldCBob3N0XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbiAgc2NyZWVuc2hvdHM6IHouYXJyYXkoei5udW1iZXIoKSkuZGVzY3JpYmUoXCJTZWNvbmQgbWFya3MgdG8gZHVtcCBmcmFtZSBiaXRtYXBzIGFzIFBOR1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGVzOiBERUZBVUxUX09VVF9GSUxFUyxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICBkaXNhYmxlV2ViU2VjdXJpdHk6IGZhbHNlLFxuICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgd2luZG93VGltZW91dDogREVGQVVMVF9XSU5ET1dfVElNRU9VVCxcbiAgc2NyZWVuc2hvdHM6IFtdLFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZUFycmF5LCBwYXJzZU51bWJlciwgcGFyc2VTdHJpbmcgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlck9wdGlvbnMsIHJlbmRlclNjaGVtYSB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHtcbiAgICByZXR1cm4gcztcbiAgfVxuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSByZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1TLCAtLXNjcmVlbnNob3RzIDxzZWNvbmRzPlwiLCBzaGFwZS5zY3JlZW5zaG90cy5kZXNjcmlwdGlvbiwgXCJcIilcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGhzPlwiLCBzaGFwZS5vdXRGaWxlcy5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlcy5qb2luKFwiLFwiKSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtd2ViLXNlY3VyaXR5XCIsIHNoYXBlLmRpc2FibGVXZWJTZWN1cml0eS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlV2ViU2VjdXJpdHkpXG4gICAgLm9wdGlvbihcIi0taWdub3JlLWNlcnRpZmljYXRlLWVycm9yc1wiLCBzaGFwZS5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycy5kZXNjcmlwdGlvbiwgZC5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRpbWVvdXQgPG51bWJlcj5cIiwgc2hhcGUud2luZG93VGltZW91dC5kZXNjcmlwdGlvbiwgYCR7ZC53aW5kb3dUaW1lb3V0fWApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlczogcGFyc2VBcnJheShwYXJzZVN0cmluZykob3B0cy5vdXRGaWxlKSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgZGlzYWJsZVdlYlNlY3VyaXR5OiBvcHRzLmRpc2FibGVXZWJTZWN1cml0eSA/PyBkLmRpc2FibGVXZWJTZWN1cml0eSxcbiAgICAgICAgICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogb3B0cy5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycyA/PyBkLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzLFxuICAgICAgICAgIHdpbmRvd1RvbGVyYW50OiBvcHRzLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgICAgICAgd2luZG93VGltZW91dDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2luZG93VGltZW91dCkob3B0cy53aW5kb3dUaW1lb3V0KSxcbiAgICAgICAgICBzY3JlZW5zaG90czogcGFyc2VBcnJheShwYXJzZU51bWJlcikob3B0cy5zY3JlZW5zaG90cyksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENvbnNvbGUgPSBcImNvbnNvbGVcIixcbiAgUHJvZ3Jlc3MgPSBcInByb2dyZXNzXCIsXG4gIERvbmUgPSBcImRvbmVcIixcbiAgRXJyb3IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ2FuY2VsID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3M7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9uZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRG9uZTtcbiAgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkVycm9yO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJcGNNc2cgPSBDb25zb2xlTXNnIHwgUHJvZ3Jlc3NNc2cgfCBEb25lTXNnIHwgRXJyb3JNc2cgfCBDYW5jZWxNc2c7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRXZlbnRzIHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgY29uc29sZTogW2xldmVsOiBzdHJpbmcsIG1zZzogc3RyaW5nXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW2NvZGU6IG51bWJlciB8IG51bGxdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVDb25zb2xlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZSwgbGV2ZWwsIG1lc3NhZ2UgfSk7XG4gIH1cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkVycm9yLCBlcnJvciB9KTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkRvbmUsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmQobXNnOiBJcGNNc2cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghcHJvY2Vzcy5zZW5kKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ29uc29sZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlByb2dyZXNzOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRG9uZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FcnJvcjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4ocDogUHJvbWlzZTxUPiwgbXM6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfSB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKSwgbXMpO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gIH0pO1xufVxuXG4vLyBSZWplY3QgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMsIGVsc2Ugc2V0dGxlIHdpdGggYHBgOyBuby1vcCBwYXNzdGhyb3VnaCB3aGVuIG5vIHNpZ25hbC5cbmV4cG9ydCBmdW5jdGlvbiBhYm9ydGFibGU8VD4ocDogUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm4gcDtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpKTtcbiAgfSk7XG59XG5cbi8vIENhbGxiYWNrIG1heSByZXR1cm4gdGhlIG5leHQgaW50ZXJ2YWwgKG1zKSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBmb3IgdGhlIGZvbGxvd2luZyB0aWNrLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbmV4dCA/PyBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gTm8gc3RhcnZhdGlvbiBjYXAgKHdvdWxkIHNraXAgcGVuZGluZyB3b3JrIG5vbi1kZXRlcm1pbmlzdGljYWxseSk7IGNhcHR1cmUgc3RhcnRzIHBvc3QgZGlkLXN0b3AtbG9hZGluZywgYW5kIENEUF9USU1FT1VUX01TIHR1cm5zIGEgcmVhbCBzdGFsbCBpbnRvIGEgZmFpbGVkIHJlbmRlci5cbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZERyYXdhYmxlKHdlYjogV2ViQ29udGVudHMsIHNpemU6IFNpemUpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjZHAgPSB3ZWIuZGVidWdnZXI7XG4gICAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLmNsZWFyRGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHt9KTtcbiAgICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHtcbiAgICAgIC4uLnNpemUsXG4gICAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICAgIG1vYmlsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgd2ViLmludmFsaWRhdGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU3RoIGxpa2UgdGVhcmRvd24gZGV0YWNoIHJlamVjdHMgaW4tZmxpZ2h0IENEUCBzZW5kczsgYSBsb3N0IHJlcGFpbnQga2ljayBpcyBoYXJtbGVzcy5cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSwgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGV2YWxJbiB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcbmV4cG9ydCBjb25zdCBTVEVHT19USUNLX0NIQU5ORUwgPSBcInN0ZWdvLXRpY2tcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RlZ29IVE1MKHRhcmdldFVSTDogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gIDxzdHlsZT5cbiAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgaHRtbCwgYm9keSB7IHdpZHRoOiAke3dpZHRofXB4OyBoZWlnaHQ6ICR7aGVpZ2h0ICsgMX1weDsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICN0YXJnZXQgeyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6IDA7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGJvcmRlcjogbm9uZTsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgI3N0ZWdvIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7XG4gICAgICBoZWlnaHQ6IDFweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxpZnJhbWUgaWQ9XCJ0YXJnZXRcIiBzcmM9XCIke3RhcmdldFVSTH1cIj48L2lmcmFtZT5cbiAgPGNhbnZhcyBpZD1cInN0ZWdvXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIjFcIj48L2NhbnZhcz5cbiAgPHNjcmlwdD5cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcblxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgd2luZG93Ll9fcHVwX3N0ZWdvX3RpY2tfXygpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9kcmF3X3N0ZWdvX18gPSAobXMpID0+IHtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKG1zKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbi8vIFBhaW50cyB0aGUgc3RlZ28gcm93IGZvciBgZXhwZWN0ZWRgIG1zIHN5bmNocm9ub3VzbHk7IHRoZSBkYW1hZ2UgcmlkZXMgb3V0IG9uIHRoZSBuZXh0IGNvbXBvc2l0ZWQgZnJhbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhd1N0ZWdvKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG59XG5cbi8vIFJlc29sdmVzIHdoZW4gdGhlIHJlbmRlcmVyIGNvbW1pdHRlZCB0aGUgc3RlZ28gcm93OyBhcm0gQkVGT1JFIGRyYXdTdGVnbyB0byBhdm9pZCBtaXNzaW5nIHRoZSBhY2suXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdFN0ZWdvVGljayh3YzogV2ViQ29udGVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3dhcHBlZCA9IG5ldyBQcm9taXNlKChyKSA9PiB3Yy5pcGMub25jZShTVEVHT19USUNLX0NIQU5ORUwsIHIpKTtcbiAgYXdhaXQgd2l0aFRpbWVvdXQoc3dhcHBlZCwgNV8wMDAsIFwic3RlZ28gdGlja1wiKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkU3RlZ29IVE1MIH0gZnJvbSBcIi4vc3RlZ29cIjtcblxuY29uc3QgUFVQX1NDSEVNRSA9IFwicHVwXCI7XG5jb25zdCBGUkFNRV9TQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG4vLyByZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQgaG9ub3JzIG9ubHkgdGhlIExBU1QgY2FsbCDigJQgcmVnaXN0ZXIgZXZlcnkgY3VzdG9tIHNjaGVtZSBpbiB0aGlzIG9uZSBsaXN0IGJlbG93LlxuY29uc3QgUFJJVklMRUdFRF9QUklWSUxFR0VTID0ge1xuICBzdGFuZGFyZDogdHJ1ZSxcbiAgc2VjdXJlOiB0cnVlLFxuICAvLyBBIHBhZ2UncyBvd24gQ1NQIHdvdWxkIG90aGVyd2lzZSByZWZ1c2UgdGhlIHZpZGVvIGhvb2sncyBmZXRjaCBvZiBwdXAtZnJhbWU6Ly8gc3R1YnMgKGNvbm5lY3Qtc3JjKS5cbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQge1xuICB0eXBlIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGcmFtZSxcbiAgdHlwZSBIYXJkd2FyZUZyYW1lc0NvbnRleHQsXG4gIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbi8vIG5vZGUtYXYgNS4yLjMgY29uc3RhbnQgaXMgd3Jvbmc7IGZmbXBlZyByZWdpc3RlcnMgd2l0aCBkYXNoLlxuZXhwb3J0IGNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGh3RnJhbWVzQ3R4PzogSGFyZHdhcmVGcmFtZXNDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBjdHggaWYgYW55IHNldHRlci9vcGVuMiB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShjdHgpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIHtcbiAgICBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICB9XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICB9XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSB7XG4gICAgY3R4Lmh3RnJhbWVzQ3R4ID0gb3B0cy5od0ZyYW1lc0N0eDtcbiAgfVxuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSB7XG4gICAgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgfVxuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGcmFtZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KTogRnJhbWUge1xuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICBmcmFtZS5hbGxvYygpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZ2V0QnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgc3RhY2sudXNlKGZyYW1lKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYWNrZXQoKTogUGFja2V0IHtcbiAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICBwa3QuYWxsb2MoKTtcbiAgcmV0dXJuIHBrdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluUGFja2V0cyhjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSB7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgICAgfVxuICAgICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIHRoZSBjdHggaWYgb3BlbjIgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIHN0YWNrLnVzZShwbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgdHlwZSBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIH1cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGZyZWVzIGN0eCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIHtcbiAgICAgIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyB0aGUgZ3JhcGggaWYgZmlsdGVyIHNldHVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgc3RhY2sudXNlKGdyYXBoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgfVxuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIH1cbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNyY1tpXSEpKSB7XG4gICAgICAgIHNyY1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykge1xuICAgICAgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICB9XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gICAgfVxuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkge1xuICAgICAgICB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ29uZm9ybSBOVkVOQyBvdXRwdXQgdG8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJpdHN0cmVhbTtcbiAgfVxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgfSBlbHNlIGlmIChuYWwudHlwZSA9PT0gTkFMX1NQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBTUFNfUFRMX0JJVCk7XG4gICAgfVxuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IChzcHNfZmxhZz0wKTsgc3RScHNJZHggPSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIGludGVyIHByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICB9XG4gICAgYnIucmVhZCgxKTsgLy8gZGVsdGFfcnBzX3NpZ25cbiAgICBici5yZWFkVWUoKTsgLy8gYWJzX2RlbHRhX3Jwc19taW51czFcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBudW1EZWx0YVBvY3NTZXQwOyBqKyspIHtcbiAgICAgIGNvbnN0IHVzZWQgPSBici5yZWFkKDEpO1xuICAgICAgaWYgKCF1c2VkKSB7XG4gICAgICAgIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUGFyc2Ugc2xpY2Vfc2VnbWVudF9oZWFkZXIgdXAgdG8gYnl0ZV9hbGlnbm1lbnQuIFJldHVybnMgYml0IHBvc2l0aW9uIEIgKGVuZCBvZiBoZWFkZXIgY29udGVudCkuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclRvQWxpZ25tZW50KGJyOiBCaXRSZWFkZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBudW1iZXIge1xuICBici5yZWFkKDE2KTsgLy8gc2tpcCBOQUwgaGVhZGVyXG4gIGlmIChici5yZWFkKDEpICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgfVxuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3Qgc2xpY2VUeXBlID0gYnIucmVhZFVlKCk7XG4gIGlmICghaXNJcmFwKSB7XG4gICAgYnIucmVhZChjZmcubG9nMk1heFBvY0xzYik7IC8vIHNsaWNlX3BpY19vcmRlcl9jbnRfbHNiXG4gICAgY29uc3Qgc3RSZWZQaWNTZXRTcHNGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAoIXN0UmVmUGljU2V0U3BzRmxhZykge1xuICAgICAgcGFyc2VJbmxpbmVTdFJlZlBpY1NldChiciwgY2ZnLm51bURlbHRhUG9jc1NldDApO1xuICAgIH0gZWxzZSBpZiAoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMgPiAxKSB7XG4gICAgICBici5yZWFkKE1hdGguY2VpbChNYXRoLmxvZzIoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMpKSk7XG4gICAgfVxuICAgIGlmIChjZmcubG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGxvbmdfdGVybV9yZWZfcGljcyBwYXRoIHVuaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gICAgfVxuICB9XG4gIGlmIChjZmcuc2FvRW5hYmxlZCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19sdW1hX2ZsYWdcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fY2hyb21hX2ZsYWdcbiAgfVxuICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX1AgfHwgc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICBjb25zdCBvdmVycmlkZUZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmIChvdmVycmlkZUZsYWcpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICB9XG4gICAgaWYgKGNmZy5jYWJhY0luaXRQcmVzZW50KSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBjYWJhY19pbml0X2ZsYWdcbiAgICB9XG4gICAgYnIucmVhZFVlKCk7IC8vIGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9jYW5kXG4gIH1cbiAgcmVhZFNlKGJyKTsgLy8gc2xpY2VfcXBfZGVsdGFcbiAgaWYgKGNmZy5wcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZykge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIH1cbiAgcmV0dXJuIGJyLnBvcztcbn1cblxuLyoqXG4gKiBSZXdyaXRlIGFscGhhIHNsaWNlIGhlYWRlcjogc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS5cbiAqIFRoZSArMi1iaXQgc2hpZnQgaXMgYWJzb3JiZWQgYnkgZW1pdHRpbmcgYSBmcmVzaCBieXRlX2FsaWdubWVudCB0aGVuIGFwcGVuZGluZyB0aGVcbiAqIG9yaWdpbmFsIENBQkFDIHNsaWNlX3NlZ21lbnRfZGF0YSBieXRlcyB2ZXJiYXRpbS4gQ0FCQUMgYnl0ZSBib3VuZGFyeSBpcyBwcmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihzbGljZTogQnVmZmVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc2xpY2UpO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG5cbiAgY29uc3QgcHJvYmUgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBCID0gcGFyc2VIZWFkZXJUb0FsaWdubWVudChwcm9iZSwgbmFsVHlwZSwgY2ZnKTtcbiAgY29uc3Qgb2xkQWxpZ25CaXRzID0gQiAlIDggPT09IDAgPyA4IDogOCAtIChCICUgOCk7XG4gIGNvbnN0IHNsaWNlRGF0YUJ5dGVPZmZzZXQgPSAoQiArIG9sZEFsaWduQml0cykgLyA4O1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgfVxuICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWdcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuXG4gIGJyLnJlYWRVZSgpOyAvLyBkaXNjYXJkIG9sZCBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBidy51ZSgxKTsgLy8gbmV3IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG5cbiAgd2hpbGUgKGJyLnBvcyA8IEIpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuICB9XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBieXRlX2FsaWdubWVudDogcmJzcF9hbGlnbm1lbnRfYml0X29uZVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG5cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24oQnVmZmVyLmNvbmNhdChbcGFja0JpdHMoYncuYml0cyksIHJic3Auc3ViYXJyYXkoc2xpY2VEYXRhQnl0ZU9mZnNldCldKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IGFkZEVtdWxhdGlvblByZXZlbnRpb24sIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24gfSBmcm9tIFwiLi9uYWxcIjtcblxuaW50ZXJmYWNlIFBhcnNlZFBUTCB7XG4gIHB0bFN0YXJ0OiBudW1iZXI7XG4gIHB0bEVuZDogbnVtYmVyO1xuICBwdGxCaXRzOiBudW1iZXJbXTtcbiAgbWF4U3ViTGF5ZXJzTWludXMxOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQVEwodnBzRGF0YTogQnVmZmVyKTogUGFyc2VkUFRMIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24odnBzRGF0YSkpO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyB2cHNfaWRcbiAgYnIucmVhZCgyKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbCArIGF2YWlsYWJsZVxuICBpZiAoYnIucmVhZCg2KSA+IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIH1cbiAgY29uc3QgbWF4U3ViTGF5ZXJzTWludXMxID0gYnIucmVhZCgzKTtcbiAgYnIucmVhZCgxICsgMTYpOyAvLyB0ZW1wb3JhbF9uZXN0aW5nICsgcmVzZXJ2ZWRcblxuICBjb25zdCBwdGxTdGFydCA9IGJyLnBvcztcbiAgYnIucmVhZCg5Nik7IC8vIGdlbmVyYWwgUFRMIChwcm9maWxlX3NwYWNlICsgdGllciArIGlkYyArIGNvbXBhdCArIGNvbnN0cmFpbnRzICsgbGV2ZWwpXG4gIGlmIChtYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIH1cbiAgcmV0dXJuIHsgcHRsU3RhcnQsIHB0bEVuZDogYnIucG9zLCBwdGxCaXRzOiBici5iaXRzLCBtYXhTdWJMYXllcnNNaW51czEgfTtcbn1cblxuLyoqIFdyaXRlIGJhc2UgVlBTIGZpZWxkcyBmb3IgMi1sYXllciBhbHBoYS4gKi9cbmZ1bmN0aW9uIHdyaXRlQmFzZVZQUyhidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCkge1xuICBidy53KDB4NDAwMSwgMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LncoMCwgNCk7IC8vIHZwc19pZFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfYXZhaWxhYmxlXG4gIGJ3LncoMSwgNik7IC8vIG1heF9sYXllcnNfbWludXMxID0gMVxuICBidy53KHB0bC5tYXhTdWJMYXllcnNNaW51czEsIDMpO1xuICAvLyB0ZW1wb3JhbF9uZXN0aW5nOiB0cnVlIHdoZW4gc2luZ2xlIHN1Yi1sYXllciAoYWxsIHJlZnMgbGF5ZXIgMClcbiAgYncuZmxhZyhwdGwubWF4U3ViTGF5ZXJzTWludXMxID09PSAwKTtcbiAgYncudygweGZmZmYsIDE2KTsgLy8gcmVzZXJ2ZWRcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy5mbGFnKDEpOyAvLyBzdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhEZWNQaWNCdWZmZXJpbmcgLSAxXG4gICAgYncudWUoMik7IC8vIG51bVJlb3JkZXJQaWNzXG4gICAgYncudWUoNCk7IC8vIG1heExhdGVuY3lJbmNyZWFzZSArIDFcbiAgfVxuXG4gIGJ3LncoMSwgNik7IC8vIG1heF9udWhfbGF5ZXJfaWQgPSAxXG4gIGJ3LnVlKDEpOyAvLyBudW1fbGF5ZXJfc2V0c19taW51czEgPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzBdXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzFdXG4gIGJ3LmZsYWcoMCk7IC8vIHRpbWluZ19pbmZvX3ByZXNlbnRcbiAgYncuZmxhZygxKTsgLy8gdnBzX2V4dGVuc2lvbl9mbGFnXG4gIGJ3LmFsaWduKDEpOyAvLyBleHRlbnNpb24gYWxpZ25tZW50IGJpdHMgPSAxXG59XG5cbi8qKiBXcml0ZSBWUFMgZXh0ZW5zaW9uIG1hdGNoaW5nIHgyNjUgNC4xIEVOQUJMRV9BTFBIQS4gKi9cbmZ1bmN0aW9uIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAvLyBFeHRlbnNpb24gUFRMOiBsZXZlbF9pZGMgb25seSAocHJvZmlsZVByZXNlbnRGbGFnPTApXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxFbmQgLSA4LCA4KTtcbiAgaWYgKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICAgIGJ3LncoMCwgMik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJ3LmZsYWcoaSA9PT0gMiB8fCBpID09PSAzKTsgLy8gc2NhbGFiaWxpdHk6IHNwYXRpYWwgKyBhdXhcbiAgfVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSB7XG4gICAgcmV0dXJuIHZwc0RhdGE7XG4gIH1cblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgcmV3cml0ZUFscGhhUHBzLCByZXdyaXRlQWxwaGFTbGljZUhlYWRlciwgcmV3cml0ZUFscGhhU3BzIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9QUFMsXG4gIE5BTF9TRUlfUFJFRklYLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICB0eXBlIE5hbFVuaXQsXG4gIHJld3JpdGVOYWxMYXllcklkLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbi8vIEJHUkEgYWxwaGEg4oaSIFkgcGxhbmUgb2YgcGFja2VkIFlVVjQyMFAgKGNhbGxlciBwcmUtZmlsbHMgVVY9MTI4KTsgVWludDMyIGZhc3QgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHRyYWN0QWxwaGE6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSB7XG4gICAgICBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgY29uc3Qgcm93QmFzZSA9IHkgKiBzcmNMcyArIDM7XG4gICAgICBjb25zdCBkc3RCYXNlID0geSAqIHc7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVNwcyhkYXRhKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gTkFMX1BQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFQcHMoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gTkFMX1ZQUyA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjb25zdCBhRGF0YSA9IHJld3JpdGVBbHBoYVBhcmFtU2V0KG5hbC50eXBlLCBhbHBoYU5hbC5kYXRhKTtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhRGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfU0VJX1BSRUZJWCwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGMgKDAgPSB1bnNwZWNpZmllZC9wcmVtdWx0aXBsaWVkOyBtYXRjaGVzIHgyNjUgRU5BQkxFX0FMUEhBKVxuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIHdyaXRlQml0cygwLCAxKTtcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgTkFMX1ZQUykge1xuICAgICAgY29uc3QgZGF0YSA9IHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKG5hbC5kYXRhLCBuYWwudHlwZSwgY2ZnKTtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GLCB0eXBlIEFWUGFja2V0RmxhZyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHsgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgUGVuZGluZ1BhY2tldCB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgcHRzOiBiaWdpbnQ7XG4gIGR0czogYmlnaW50O1xuICBkdXJhdGlvbjogYmlnaW50O1xuICBmbGFnczogQVZQYWNrZXRGbGFnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1YWxMYXllck11eE9wdGlvbnMge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuLy8gRHJhaW5zIHRoZSBiYXNlICsgYWxwaGEgTlZFTkMgc2Vzc2lvbnMgYW5kIHdyaXRlcyBpbnRlcmxlYXZlZCBIRVZDLWFscGhhIGFjY2VzcyB1bml0cy5cbmV4cG9ydCBjbGFzcyBEdWFsTGF5ZXJNdXgge1xuICBwcml2YXRlIF9zOiBEdWFsTGF5ZXJNdXhPcHRpb25zO1xuICBwcml2YXRlIF9iYXNlUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICBwcml2YXRlIF9hbHBoYVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzOiBEdWFsTGF5ZXJNdXhPcHRpb25zKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCB9ID0gdGhpcy5fcztcbiAgICAvLyBEcmFpbiBlYWNoIHNlc3Npb24gZnVsbHkg4oCUIGluZGVwZW5kZW50IE5WRU5DIHNlc3Npb25zIHJ1biBhIGZyYW1lIGFwYXJ0IHRyYW5zaWVudGx5LlxuICAgIHRoaXMuX2Jhc2VRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYmFzZUN0eCwgYmFzZVBrdCwgXCJiYXNlXCIpKSk7XG4gICAgdGhpcy5fYWxwaGFRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYWxwaGFDdHgsIGFscGhhUGt0LCBcImFscGhhXCIpKSk7XG4gICAgLy8gYmY9MCDihpIgbm8gcmVvcmRlcjsgcXVldWUgaW5kZXggTiBpcyB0aGUgc2FtZSBmcmFtZSBmb3IgYm90aC4gTGVmdG92ZXIgd2FpdHMgZm9yIG5leHQgZHJhaW4uXG4gICAgd2hpbGUgKHRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGVQYWlyKHRoaXMuX2Jhc2VRdWV1ZS5zaGlmdCgpISwgdGhpcy5fYWxwaGFRdWV1ZS5zaGlmdCgpISwgbXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVucGFpcmVkIGxlZnRvdmVycyBhZnRlciBFT0YgPSB0cnVlIGJhc2UvYWxwaGEgZGVzeW5jOyByZXR1cm5zIGEgZGVzY3JpcHRpb24sIGVsc2UgdW5kZWZpbmVkLlxuICBkZXN5bmNBZnRlckVvZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiAhdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfVxuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5yZWNlaXZlUGFja2V0YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbmFwc2hvdChwa3Q6IFBhY2tldCk6IFBlbmRpbmdQYWNrZXQge1xuICAgIC8vIHBrdC5kYXRhIGlzIG5hdGl2ZSBtZW1vcnkgZnJlZWQgb24gdW5yZWYg4oCUIGNvcHkgYmVmb3JlIHF1ZXVlaW5nLlxuICAgIHJldHVybiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHBrdC5kYXRhISksIHB0czogcGt0LnB0cywgZHRzOiBwa3QuZHRzLCBkdXJhdGlvbjogcGt0LmR1cmF0aW9uLCBmbGFnczogcGt0LmZsYWdzIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlUGFpcihiYXNlOiBQZW5kaW5nUGFja2V0LCBhbHBoYTogUGVuZGluZ1BhY2tldCwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBiYXNlQ3R4LCBzdHJlYW0sIGhldmNDZmcgfSA9IHRoaXMuX3M7XG4gICAgLy8gUGF0Y2ggaW4tYmFuZCBWUFMvU1BTIFBUTCBiaXRzIGZvciBBcHBsZS1WVEIgY29tcGF0IChlbmNvZGVyIHJlcGVhdHMgaGVhZGVycyBwZXIgSURSKS5cbiAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmVBY2Nlc3NVbml0cyhzcGxpdE5hbFVuaXRzKGJhc2UuZGF0YSksIHNwbGl0TmFsVW5pdHMoYWxwaGEuZGF0YSksIGhldmNDZmcpO1xuICAgIC8vIGRhdGEgc2V0dGVyIHdpcGVzIHB0cy9kdHMvZHVyYXRpb24vZmxhZ3Mg4oCUIHJlc3RvcmU7IGZsYWdzJyBLRVkgYml0IGRyaXZlcyBtb3Ygc3Rzcy5cbiAgICBiYXNlUGt0LmRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bChpbnRlcmxlYXZlZCk7XG4gICAgYmFzZVBrdC5wdHMgPSBiYXNlLnB0cztcbiAgICBiYXNlUGt0LmR0cyA9IGJhc2UuZHRzO1xuICAgIGJhc2VQa3QuZHVyYXRpb24gPSBiYXNlLmR1cmF0aW9uID09PSAwbiA/IDFuIDogYmFzZS5kdXJhdGlvbjtcbiAgICBiYXNlUGt0LmZsYWdzID0gYmFzZS5mbGFncztcbiAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG4gICAgYmFzZVBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBQYXJzZSBOVkVOQyBTUFMvUFBTIGV4dHJhZGF0YSBhdCBlbmNvZGVyIGluaXQgdG8gZGVyaXZlIHNsaWNlLWhlYWRlciBwYXJzZXIgZmxhZ3M7IHRocm93cyBpZiBOVkVOQyBkZWZhdWx0cyBzaGlmdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBOQUxfUFBTLCBOQUxfU1BTLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnZlbmNIZXZjQ29uZmlnIHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuO1xuICBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZmFpbChmaWVsZDogc3RyaW5nLCBnb3Q6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgaGV2Y19hbHBoYTogTlZFTkMgU1BTL1BQUyB1bnN1cHBvcnRlZDogJHtmaWVsZH09JHtnb3R9LCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xufVxuXG5mdW5jdGlvbiBza2lwUHRsKGJyOiBCaXRSZWFkZXIsIG1heFN1YkxheWVyczogbnVtYmVyKTogdm9pZCB7XG4gIGJyLnJlYWQoMiArIDEgKyA1KTsgLy8gcHJvZmlsZV9zcGFjZSwgdGllciwgcHJvZmlsZV9pZGNcbiAgYnIucmVhZCgzMik7IC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnWzAuLjMxXVxuICBici5yZWFkKDQ4KTsgLy8gNCBzb3VyY2UvcGFja2VkIGZsYWdzICsgNDMgY29uc3RyYWludC9yZXNlcnZlZCArIDEgaW5ibGRcbiAgYnIucmVhZCg4KTsgLy8gbGV2ZWxfaWRjXG4gIGNvbnN0IHN1YlByb2ZpbGVQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBzdWJMZXZlbFByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBzdWJQcm9maWxlUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICAgIHN1YkxldmVsUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGlmIChtYXhTdWJMYXllcnMgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykge1xuICAgICAgYnIucmVhZCgyKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgfVxuICAgIGlmIChzdWJMZXZlbFByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3BzKHNwc1Jic3A6IEJ1ZmZlcik6IHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xufSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihzcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgbWF4U3ViTGF5ZXJzID0gYnIucmVhZCgzKTtcbiAgLy8gYWxwaGFfZGFyd2luLnJld3JpdGVBbHBoYVNwcyArIHZwcy5leHRyYWN0UFRMIGhhcmRjb2RlIDk2LWJpdCBQVEwg4oCUIG9ubHkgdmFsaWQgd2hlbiBzdWJfbGF5ZXJzPTAuXG4gIGlmIChtYXhTdWJMYXllcnMgIT09IDApIHtcbiAgICBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnXG4gIHNraXBQdGwoYnIsIG1heFN1YkxheWVycyk7XG4gIGJyLnJlYWRVZSgpOyAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgY2hyb21hRm9ybWF0ID0gYnIucmVhZFVlKCk7XG4gIGlmIChjaHJvbWFGb3JtYXQgPT09IDMpIHtcbiAgICBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXNcbiAgYnIucmVhZFVlKCk7IC8vIHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgY29uc3QgbG9nMk1heFBvY0xzYiA9IGJyLnJlYWRVZSgpICsgNDtcbiAgY29uc3Qgc3ViT3JkZXJJbmZvID0gYnIucmVhZCgxKTtcbiAgY29uc3Qgb3JkZXJDb3VudCA9IHN1Yk9yZGVySW5mbyA/IG1heFN1YkxheWVycyArIDEgOiAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyQ291bnQ7IGkrKykge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInNjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInBjbV9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIHtcbiAgICBmYWlsKFwibnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzXCIsIG51bVN0UnBzLCBcIuKJpDFcIik7XG4gIH1cbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb25nVGVybVJlZlBpY3NQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3Qgc3BzVGVtcG9yYWxNdnBFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgcmV0dXJuIHtcbiAgICBsb2cyTWF4UG9jTHNiLFxuICAgIHNhb0VuYWJsZWQsXG4gICAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtU3RScHMsXG4gICAgbnVtRGVsdGFQb2NzU2V0MCxcbiAgICBsb25nVGVybVJlZlBpY3NQcmVzZW50LFxuICAgIHNwc1RlbXBvcmFsTXZwRW5hYmxlZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIHtcbiAgICBmYWlsKFwibnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzXCIsIG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTsgLy8gY3VfcXBfZGVsdGFfZW5hYmxlZCDihpIgZGlmZl9jdV9xcF9kZWx0YV9kZXB0aFxuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJ0aWxlc19lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkVWUoKTsgLy8gYmV0YS90YyBvZmZzZXRzIChzZSB2aWEgdWUgYWR2YW5jZSlcbiAgICB9XG4gIH1cbiAgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgcHJlc2VudCBpZmYgUFBTIGFjcm9zcy1zbGljZXMgZW5hYmxlZCAmJiAhc2xpY2VfZGVibG9ja2luZ19kaXNhYmxlZC5cbiAgY29uc3QgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgPSBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCAmJiAhc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZTtcbiAgcmV0dXJuIHsgY2FiYWNJbml0UHJlc2VudCwgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnZlbmNIZXZjQ29uZmlnKGV4dHJhZGF0YTogQnVmZmVyKTogTnZlbmNIZXZjQ29uZmlnIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoZXh0cmFkYXRhKTtcbiAgY29uc3Qgc3BzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9TUFMpO1xuICBjb25zdCBwcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1BQUyk7XG4gIGlmICghc3BzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogU1BTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGlmICghcHBzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogUFBTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHMgPSBwYXJzZVNwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNwcy5kYXRhKSk7XG4gIGNvbnN0IHAgPSBwYXJzZVBwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHBwcy5kYXRhKSk7XG4gIHJldHVybiB7IC4uLnMsIC4uLnAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIC8vIHRpZXI9bWFpbiBtYXRjaGVzIEFwcGxlIFZpZGVvVG9vbGJveDsgbWFjT1MgQ2hyb21lIHJlcXVpcmVzIE1haW4gdGllciBmb3IgSEVWQyBhbHBoYSBkZWNvZGUuXG4gICAgY29uc3QgbnZlbmNPcHRzID0geyBwcmVzZXQ6IFwicDRcIiwgYmY6IFwiMFwiLCB0aWVyOiBcIm1haW5cIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3QgKE5WRU5DIGNvbnZlcnRzLCBubyBDUFUgU1dTKTsgc3RhY2sgZnJlZXMgZXZlcnkgbmF0aXZlIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3MsIG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgYmFzZUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpKTtcbiAgICBjb25zdCBhbHBoYUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKSk7XG5cbiAgICBpZiAoIWJhc2VDdHguZXh0cmFEYXRhIHx8ICFhbHBoYUN0eC5leHRyYURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm52ZW5jOiBjb2RlYyBleHRyYWRhdGEgbWlzc2luZ1wiKTtcbiAgICB9XG4gICAgY29uc3QgaGV2Y0NmZyA9IHBhcnNlTnZlbmNIZXZjQ29uZmlnKGJhc2VDdHguZXh0cmFEYXRhKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICBiYXNlRXh0cmFkYXRhOiBiYXNlQ3R4LmV4dHJhRGF0YSxcbiAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwodW5pZmllZCk7XG5cbiAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgY29uc3QgY2hyb21hU2l6ZSA9ICgod2lkdGggKyAxKSA+PiAxKSAqICgoaGVpZ2h0ICsgMSkgPj4gMSk7XG4gICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyBjaHJvbWFTaXplICogMik7XG4gICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgIGNvbnN0IGJhc2VQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IGFscGhhU3dGcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKSk7XG5cbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4LFxuICAgICAgYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0LFxuICAgICAgc3RyZWFtLFxuICAgICAgYWxwaGFTd0ZyYW1lLFxuICAgICAgYWxwaGFCdWYsXG4gICAgICBoZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSwgYWxwaGFCdWYgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBhbHBoYSBwbGFuZSBiZWZvcmUgYmFzZS5zZW5kRnJhbWUg4oCUIHRoZSBlbmNvZGVyIHVucmVmcyB0aGUgaW5wdXQgZnJhbWUuXG4gICAgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZSwgYWxwaGFCdWYpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUubWFrZVdyaXRhYmxlKCksIFwiYWxwaGFTdy5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5mcm9tQnVmZmVyKGFscGhhQnVmKSwgXCJhbHBoYVN3LmZyb21CdWZmZXJcIik7XG4gICAgYWxwaGFTd0ZyYW1lLnB0cyA9IHB0cztcbiAgICBhbHBoYVN3RnJhbWUuZHVyYXRpb24gPSAxbjtcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZShhbHBoYVN3RnJhbWUpLCBcImFscGhhLnNlbmRGcmFtZVwiKTtcblxuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5iYXNlQ3R4LCBcImJhc2VcIik7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYWxwaGFDdHgsIFwiYWxwaGFcIik7XG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgICBjb25zdCBkZXN5bmMgPSB0aGlzLl9tdXguZGVzeW5jQWZ0ZXJFb2YoKTtcbiAgICBpZiAoZGVzeW5jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogJHtkZXN5bmN9YCk7XG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCBvbiBjcmVhdGlvbi1vcmRlciBzZXNzaW9uIGZyZWUg4oCUIExJRk8gZGVzdHJveSBhdm9pZHMgaXQgKGZvcnVtIC90LzI2OTk3NCkuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBBVlBpeGVsRm9ybWF0LCBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGRpc3Bvc2VzIGN0eC9wa3QgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKSk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3duc0h3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKG9wdHM6IEh3VmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBzaGFyZWRIdyA/PyAoZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpKTtcbiAgY29uc3Qgb3duc0h3ID0gIXNoYXJlZEh3ICYmICEhaHc7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgdmlkZW8gZW5jb2RlciBpZiBDb2RlY1N0YXRlLmNyZWF0ZSB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBjb25zdCB2aWRlbyA9IHN0YWNrLnVzZShcbiAgICBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcImZhc3RcIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgICBiaXRyYXRlLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KSxcbiAgKTtcbiAgY29uc3QgY29kZWMgPSBzdGFjay51c2UoYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCkpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYywgb3duc0h3OiBmYWxzZSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIERpY3Rpb25hcnksIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFN0cmVhbSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHtcbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgLy8gK2Zhc3RzdGFydCByZWxvY2F0ZXMgbW9vdiB0byBmaWxlIGZyb250IG9uIHdyaXRlVHJhaWxlciBzbyBwbGF5ZXJzIGNhbiBiZWdpbiBwbGF5YmFjayBiZWZvcmUgZnVsbCBkb3dubG9hZC5cbiAgICB1c2luZyBvcHRzID0gRGljdGlvbmFyeS5mcm9tT2JqZWN0KHsgbW92ZmxhZ3M6IFwiK2Zhc3RzdGFydFwiIH0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIob3B0cyksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gQSBmYWlsZWQvdHJ1bmNhdGVkIHRyYWlsZXIgd3JpdGUgbXVzdCBub3QgbGVhayB0aGUgRkQuXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQWx3YXlzIGZyZWUgdGhlIG5hdGl2ZSBjb250ZXh0IOKAlCBldmVuIGEgbmV2ZXItb3BlbmVkIG11eGVyIGFsbG9jYXRlZCBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDkgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSB7XG4gICAgICByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgfVxuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSB7XG4gICAgICByZXR1cm4gXCJtcDRcIjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBkaXNwb3NlIG11eGVyL2VuY29kZXJzIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBtdXhlciA9IHN0YWNrLnVzZShuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKSk7XG4gICAgY29uc3Qgc2V0dXAgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgT3V0cHV0U2luay5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCBPdXRwdXRTaW5rLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgaWYgKHNldHVwLnZpZGVvKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAudmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuaHdWaWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmh3VmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuY29kZWMpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5jb2RlYyk7XG4gICAgfVxuICAgIC8vIE9ubHkgYSBzaW5rLW93bmVkIGh3IGRldmljZSBpcyBvdXJzIHRvIGZyZWUgaGVyZTsgYSBzaGFyZWQgZGV2aWNlIGJlbG9uZ3MgdG8gdGhlIHBpcGVsaW5lLlxuICAgIGlmIChzZXR1cC5vd25zSHcgJiYgc2V0dXAuaHcpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5odyk7XG4gICAgfVxuICAgIGNvbnN0IGF1ZGlvID0gb3B0cy53aXRoQXVkaW8gPyBhd2FpdCBPdXRwdXRTaW5rLmF1ZGlvRm9yKG9wdHMsIG11eGVyKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoYXVkaW8pIHtcbiAgICAgIHN0YWNrLnVzZShhdWRpbyk7XG4gICAgfVxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXRTaW5rKHsgbXV4ZXIsIC4uLnNldHVwLCBhdWRpbywgb3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHtcbiAgICAgICAgZGVhZGxpbmU6IFwicmVhbHRpbWVcIixcbiAgICAgICAgXCJjcHUtdXNlZFwiOiBcIjhcIixcbiAgICAgICAgXCJyb3ctbXRcIjogXCIxXCIsXG4gICAgICAgIHRocmVhZHM6IFwiMlwiLFxuICAgICAgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZGVvLFxuICAgICAgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLFxuICAgICAgb3duc0h3OiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG91dFNhbXBsZVJhdGU6IDQ4XzAwMCxcbiAgICAgICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgICAgICAgICB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIC4uLmNmZyxcbiAgICAgIGdsb2JhbEhlYWRlcjogdHJ1ZSxcbiAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBzaGFyZWRIdyArIGFueSBzaW5rcyBhbHJlYWR5IGJ1aWx0IGlmIGEgbGF0ZXIgc2luayB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaGFyZWRIdykge1xuICAgICAgc3RhY2sudXNlKHNoYXJlZEh3KTtcbiAgICB9XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHN0YWNrLnVzZShzaW5rKTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBmcm9tQnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh0aGlzLl9zLm9wdHMud2lkdGgsIHRoaXMuX3Mub3B0cy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSkpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGltYWdlOiBOYXRpdmVJbWFnZSkge1xuICBjb25zdCBzaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBpbWFnZS5pc0VtcHR5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXplRXF1YWxzKGE6IFNpemUsIGI6IFNpemUpIHtcbiAgcmV0dXJuIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wMy5cblxuY29uc3QgR1JJRCA9IDMyOyAvLyByZXNvbHV0aW9uLWluZGVwZW5kZW50IGxhdHRpY2UgZm9yIHRoZSBtb2RhbC1jb2xvciBwcmUtcGFzc1xuY29uc3QgU1RSSURFID0gNDsgLy8gbWFpbi1zY2FuIHN0ZXA7IHJvdy1zdGFnZ2VyZWQgc28gYW55IOKJpTFweCBzdHJ1Y3R1cmUgbGFuZHMgb24gYSBzYW1wbGUgd2l0aGluIDQgcm93c1xuY29uc3QgQ09OVEVOVF9ERUxUQSA9IDg7IC8vIG1heCBwZXItY2hhbm5lbCBkaXN0YW5jZSAoMC0yNTUpIHN0aWxsIGNvdW50ZWQgYXMgdGhlIGRvbWluYW50IGNvbG9yXG5jb25zdCBNSU5fQ09OVEVOVF9TQU1QTEVTID0gMTY7IC8vIHJlbmRlcmVkIGZyYW1lcyBhcmUgbm9pc2UtZnJlZSwgc28gYSBoYW5kZnVsIG9mIG9mZi1kb21pbmFudCBzYW1wbGVzIGlzIHJlYWwgY29udGVudFxuZXhwb3J0IGNvbnN0IEJMQU5LX1dBUk5fUkFUSU8gPSAwLjU7IC8vIGJsYW5rLWZyYW1lIGZyYWN0aW9uIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZFxuXG4vLyA1IGJpdHMgcGVyIGNoYW5uZWwsIGFscGhhIGluY2x1ZGVkIOKAlCB0cmFuc3BhcmVudCBzdXJmYWNlcyBjYXJyeSBjb250ZW50IGluIGNvdmVyYWdlLCBub3QgY29sb3IuXG5mdW5jdGlvbiBxdWFudGl6ZShiZ3JhOiBCdWZmZXIsIGk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgKGJncmEucmVhZFVJbnQ4KGkpID4+IDMpIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAxKSA+PiAzKSA8PCA1KSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMikgPj4gMykgPDwgMTApIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAzKSA+PiAzKSA8PCAxNSlcbiAgKTtcbn1cblxuLy8gQnl0ZSBvZmZzZXQgb2YgYSBwaXhlbCBjYXJyeWluZyB0aGUgZnJhbWUncyBkb21pbmFudCBjb2xvciAobW9kZSBvdmVyIGEgc3BhcnNlIGxhdHRpY2UpLlxuZnVuY3Rpb24gbW9kYWxQaXhlbChiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3Qgc3RlcFggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHdpZHRoIC8gR1JJRCkpO1xuICBjb25zdCBzdGVwWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gR1JJRCkpO1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBjb25zdCBmaXJzdElkeCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGxldCBiZXN0ID0gMDtcbiAgbGV0IGJlc3RDb3VudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IHN0ZXBZKSB7XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBzdGVwWCkge1xuICAgICAgY29uc3QgaSA9ICh5ICogd2lkdGggKyB4KSAqIDQ7XG4gICAgICBjb25zdCBrZXkgPSBxdWFudGl6ZShiZ3JhLCBpKTtcbiAgICAgIGNvbnN0IGNvdW50ID0gKGNvdW50cy5nZXQoa2V5KSA/PyAwKSArIDE7XG4gICAgICBjb3VudHMuc2V0KGtleSwgY291bnQpO1xuICAgICAgaWYgKCFmaXJzdElkeC5oYXMoa2V5KSkge1xuICAgICAgICBmaXJzdElkeC5zZXQoa2V5LCBpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb3VudCA+IGJlc3RDb3VudCkge1xuICAgICAgICBiZXN0Q291bnQgPSBjb3VudDtcbiAgICAgICAgYmVzdCA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpcnN0SWR4LmdldChiZXN0KSA/PyAwO1xufVxuXG4vLyBCbGFuayA9IGRvbWluYW50LWNvbG9yIGNvdmVyYWdlOiBmZXdlciB0aGFuIE1JTl9DT05URU5UX1NBTVBMRVMgc2FtcGxlcyBkZXZpYXRlIGZyb20gdGhlIG1vZGFsIGNvbG9yLlxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtGcmFtZShiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IG0gPSBtb2RhbFBpeGVsKGJncmEsIHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBtYiA9IGJncmEucmVhZFVJbnQ4KG0pO1xuICBjb25zdCBtZyA9IGJncmEucmVhZFVJbnQ4KG0gKyAxKTtcbiAgY29uc3QgbXIgPSBiZ3JhLnJlYWRVSW50OChtICsgMik7XG4gIGNvbnN0IG1hID0gYmdyYS5yZWFkVUludDgobSArIDMpO1xuICBsZXQgY29udGVudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IFNUUklERSkge1xuICAgIGNvbnN0IG9mZnNldCA9ICh5ID4+IDIpICYgKFNUUklERSAtIDEpO1xuICAgIGZvciAobGV0IHggPSBvZmZzZXQ7IHggPCB3aWR0aDsgeCArPSBTVFJJREUpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgaWYgKFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpKSAtIG1iKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDEpIC0gbWcpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMikgLSBtcikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAzKSAtIG1hKSA+IENPTlRFTlRfREVMVEFcbiAgICAgICkge1xuICAgICAgICBjb250ZW50Kys7XG4gICAgICAgIGlmIChjb250ZW50ID49IE1JTl9DT05URU5UX1NBTVBMRVMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCbGFua1N0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdGFsID0gMDtcbiAgcHJpdmF0ZSBfYmxhbmsgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBzYW1wbGUoZnJhbWU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3RvdGFsKys7XG4gICAgaWYgKGlzQmxhbmtGcmFtZShmcmFtZSwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCkpIHtcbiAgICAgIHRoaXMuX2JsYW5rKys7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJhY3Rpb24gb2Ygd3JpdHRlbiBmcmFtZXMgdGhhdCB3ZXJlIGNvbnRlbnRsZXNzICgwID0gYWxsIGhhZCBjb250ZW50LCAxID0gYWxsIGJsYW5rKS5cbiAgZmluYWxpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWwgPiAwID8gdGhpcy5fYmxhbmsgLyB0aGlzLl90b3RhbCA6IDA7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjMuXG5cbmV4cG9ydCBjb25zdCBKQU5LX1dBUk5fU0NPUkUgPSAwLjI1OyAvLyBqYW5rIHNjb3JlIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZCAofnF1YXJ0ZXIgZHJvcHBlZCBvciBhIH4wLjVzIGZyZWV6ZSlcblxuLy8gRnJhbWUtZHJvcCBxdWFsaXR5IHNjb3JlICgwID0gcGVyZmVjdCwgMSA9IHdvcnN0KTogZ2xvYmFsIGRyb3AgcmF0ZSBhbmQgbG9jYWwgYnVyc3Qgc2V2ZXJpdHkgY29tYmluZWQgdmlhIDEtKDEtZykoMS1sKS5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICBkcm9wcGVkKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRCdXJzdCArPSBjb3VudDtcbiAgfVxuXG4gIGZpbmFsaXplKCk6IERyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB0eXBlIHsgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuLy8gQSByZW5kZXIgcXVhbnR1bSBpcyAxMjggc3RlcmVvIGZsb2F0czsgYW55dGhpbmcgcGFzdCBhIHNlY29uZCBvZiBhdWRpbyBjYW1lIGZyb20gYSBwYWdlIGFidXNpbmcgdGhlIGJyaWRnZS5cbmNvbnN0IE1BWF9DSFVOS19CWVRFUyA9IDQ4XzAwMCAqIDIgKiA0O1xuY29uc3QgTUFYX1NBTVBMRV9SQVRFID0gMTkyXzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2FtcGxlUmF0ZSkgfHwgc2FtcGxlUmF0ZSA8PSAwIHx8IHNhbXBsZVJhdGUgPiBNQVhfU0FNUExFX1JBVEUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAvLyBQYWdlLXdvcmxkIGNvZGUgb3ducyB0aGlzIGNoYW5uZWwsIHNvIHRyZWF0IGl0cyBwYXlsb2FkIGFzIGlucHV0OiB3cm9uZyBzaXplIG1lYW5zIGl0IGlzIG5vdCBvdXIgd29ya2xldCdzIFBDTS5cbiAgICBjb25zdCBieXRlcyA9IEFycmF5QnVmZmVyLmlzVmlldyhidWZmZXIpID8gYnVmZmVyLmJ5dGVMZW5ndGggOiAwO1xuICAgIGlmIChieXRlcyA9PT0gMCB8fCBieXRlcyA+IE1BWF9DSFVOS19CWVRFUyB8fCBieXRlcyAlIDggIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8xNi5cblxuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBuYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5pbnRlcmZhY2UgU2NyZWVuc2hvdFRhcmdldCB7XG4gIG1zOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JlZW5zaG90T3B0aW9ucyB7XG4gIG1hcmtzOiBudW1iZXJbXTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbn1cblxuLy8gRHVtcHMgcGFpbnRlZCBCR1JBIGZyYW1lcyB0byBQTkcgYXQgcmVxdWVzdGVkIHNlY29uZCBtYXJrczsgcmVzdWx0IG9yZGVyIHRyYWNrcyBpbnB1dCBvcmRlci5cbmV4cG9ydCBjbGFzcyBTY3JlZW5zaG90VGFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nOiBTY3JlZW5zaG90VGFyZ2V0W107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvbmUgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93cml0ZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3M6IFNjcmVlbnNob3RPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyID0gZGlybmFtZShfcy5vdXRGaWxlc1swXSA/PyBcIi5cIik7XG4gICAgdGhpcy5fcGVuZGluZyA9IF9zLm1hcmtzXG4gICAgICAubWFwKChzZWMsIGluZGV4KSA9PiAoeyBtczogc2VjICogMTAwMCwgaW5kZXgsIHBhdGg6IGpvaW4oZGlyLCBgc2NyZWVuc2hvdF8ke2luZGV4fS5wbmdgKSB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm1zIC0gYi5tcyk7XG4gIH1cblxuICAvLyBEdW1wIGV2ZXJ5IG1hcmsgd2hvc2Ugc2Vjb25kIGhhcyBiZWVuIHJlYWNoZWQgYnkgdGhpcyBmcmFtZS5cbiAgY2FwdHVyZShjdXJyZW50VGltZU1zOiBudW1iZXIsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5fcGVuZGluZ1swXSEubXMgPD0gY3VycmVudFRpbWVNcykge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGJncmEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY29yZGluZyBvdmVyOiBzbmFwIGFueSBtYXJrIHBhc3QgdGhlIGxhc3QgZnJhbWUgb250byBpdCwgdGhlbiB3cml0ZSBhbGwgc2hvdHMgb3V0LlxuICBhc3luYyBmaW5pc2goZmluYWxCZ3JhPzogQnVmZmVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHdoaWxlIChmaW5hbEJncmEgJiYgdGhpcy5fcGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgZmluYWxCZ3JhKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fd3JpdGVzKTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2RvbmUuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKChbLCBwYXRoXSkgPT4gcGF0aCk7XG4gIH1cblxuICBwcml2YXRlIHRha2UodGFyZ2V0OiBTY3JlZW5zaG90VGFyZ2V0LCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcG5nID0gbmF0aXZlSW1hZ2UuY3JlYXRlRnJvbUJpdG1hcChiZ3JhLCB7IHdpZHRoLCBoZWlnaHQgfSkudG9QTkcoKTtcbiAgICB0aGlzLl9kb25lLnNldCh0YXJnZXQuaW5kZXgsIHRhcmdldC5wYXRoKTtcbiAgICB0aGlzLl93cml0ZXMucHVzaCh3cml0ZUZpbGUodGFyZ2V0LnBhdGgsIHBuZykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBBYm9ydCBiYWlscyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHJldHJ5aW5nOyBzaWduYWwgaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIHdpcmVzIGl0IChmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0Pih7XG4gIGZuLFxuICBtYXhBdHRlbXB0cyA9IDMsXG4gIHRpbWVvdXQsXG4gIHNpZ25hbCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcCgyICoqIGF0dGVtcHQgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzI3LlxuXG5leHBvcnQgdHlwZSBXb3JsZE1vZGUgPSBcInNob290XCIgfCBcInJlbmRlclwiIHwgXCJhdWRpb1wiO1xuXG4vLyBOYW1lcyB0aGUgcGFnZS13b3JsZCBidW5kbGUgaW4gdGhlIHByZWxvYWQncyBhcmd2OyBrZWVwIHRoaXMgbW9kdWxlIGRlcGVuZGVuY3ktZnJlZSwgdGhlIHByZWxvYWQgbG9hZHMgaXQgYXMtaXMuXG5leHBvcnQgY29uc3QgV09STERfQVJHID0gXCItLXB1cC13b3JsZD1cIjtcblxuLy8gUHJlc2VudCBvbmx5IHdoZW4gdGhlIHJ1biBjYXB0dXJlcyBhdWRpbywgc28gYSBwYWdlIGluIGFueSBvdGhlciBtb2RlIGhhcyBubyBjaGFubmVsIHRvIHB1c2ggUENNIHRocm91Z2guXG5leHBvcnQgY29uc3QgQVVESU9fQVJHID0gXCItLXB1cC1hdWRpb1wiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sIC8vXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuY29uc3QgdGFyZ2V0cyA9IG5ldyBTZXQobWFwLnZhbHVlcygpKTtcblxuY29uc3QgTE9DQUxfU0NIRU1FUyA9IFtcInB1cDpcIiwgXCJwdXAtZnJhbWU6XCIsIFwiZmlsZTpcIiwgXCJkYXRhOlwiLCBcImJsb2I6XCIsIFwiY2hyb21lLWV4dGVuc2lvbjpcIiwgXCJkZXZ0b29sczpcIl07XG5cbmZ1bmN0aW9uIGlzTG9jYWxTY2hlbWUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBzIG9mIExPQ0FMX1NDSEVNRVMpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgocykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUHJveHlUYXJnZXQodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSAmJiB0YXJnZXRzLmhhcyhuZXcgVVJMKHVybCkuaG9zdG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG4gIHN0dWJNZWRpYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5LCBzdHViTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIC8vIFN3YXAgbWVkaWEgZm9yIGEgZnJhbWUtc2VydmVyIHN0dWIgKHRydWUgaW50cmluc2ljIHNpemUvZHVyYXRpb24pIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuICAgIGlmIChzdHViTWVkaWEgJiYgZGV0YWlscy5yZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIiAmJiAhdXJsLnN0YXJ0c1dpdGgoXCJwdXAtZnJhbWU6XCIpKSB7XG4gICAgICBjYWxsYmFjayh7XG4gICAgICAgIHJlZGlyZWN0VVJMOiBgcHVwLWZyYW1lOi8vc3R1Yj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQodXJsKX1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNMb2NhbFNjaGVtZSh1cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyB1cmwsIHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJYLUZyYW1lLU9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgLy8gUHJveHlpbmcgcmV3cm90ZSB0aGUgb3JpZ2luLCBzbyBmb250cyBhbmQgb3RoZXIgQ09SUy1tb2RlIGZldGNoZXMgbmVlZCB0aGUgZ3JhbnQgdGhlIG9yaWdpbmFsIGhvc3Qgd291bGQgaGF2ZSBoYWQuXG4gICAgaWYgKHVzZUlubmVyUHJveHkgJiYgaXNQcm94eVRhcmdldCh1cmwpKSB7XG4gICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVyczogeyAuLi5yZXNwb25zZUhlYWRlcnMsIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI6IFtcIipcIl0gfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkNvbXBsZXRlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGNvbXBsZXRlZDpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGU6IGRldGFpbHMuc3RhdHVzQ29kZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uRXJyb3JPY2N1cnJlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgY29uc3QgeyB1cmwsIG1ldGhvZCwgZXJyb3IsIHJlc291cmNlVHlwZSB9ID0gZGV0YWlscztcbiAgICAvLyBTdHViYmVkIG1lZGlhIGRvd25ncmFkZXM6IEVSUl9BQk9SVEVEIGlzIGp1c3QgdGhlIGxvYWRlciByZXN0YXJ0aW5nIG9udG8gdGhlIGNyb3NzLXNjaGVtZSByZWRpcmVjdC5cbiAgICBjb25zdCBtZWRpYSA9IHN0dWJNZWRpYSAmJiByZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIjtcbiAgICBjb25zdCBsZXZlbCA9IG1lZGlhID8gKGVycm9yID09PSBcIm5ldDo6RVJSX0FCT1JURURcIiA/IFwiZGVidWdcIiA6IFwid2FyblwiKSA6IFwiZXJyb3JcIjtcbiAgICBsb2dnZXJbbGV2ZWxdKFRBRywgYGVycm9yOmAsIHsga2V5LCB1cmwsIG1ldGhvZCwgZXJyb3IsIHJlc291cmNlVHlwZSwgc291cmNlIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHB1cFBrZ1Jvb3QsIHB1cFByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBBVURJT19BUkcsIFdPUkxEX0FSRywgdHlwZSBXb3JsZE1vZGUgfSBmcm9tIFwiLi4vcnVudGltZS93b3JsZFwiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuY29uc3QgQ09OU09MRV9JR05PUkVTID0gW1wiTWl4ZWQgQ29udGVudDogVGhlIHBhZ2UgYXRcIl07XG5cbmludGVyZmFjZSBGaW5pc2hPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb24sIHRpbWVvdXRNcywgdG9sZXJhbnQsIHNpZ25hbCB9OiBGaW5pc2hPcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IGRvbVJlYWR5ID0gZmFsc2U7XG4gICAgLy8gVG9sZXJhbnQgcHJvY2VlZHMgb24gYSBwYXJ0aWFsIERPTSBvbmx5IGFzIGEgdGltZW91dCBmYWxsYmFjayDigJQgc3RhcnRpbmcgb24gYmFyZSBkb20tcmVhZHkgbGVhdmVzIHRoZSBsb2FkIHBlbmRpbmcgYW5kIHdlZGdlcyB2aXJ0dWFsIHRpbWUuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gZG9uZSh0b2xlcmFudCAmJiBkb21SZWFkeSA/IHVuZGVmaW5lZCA6IFRJTUVPVVRfRVJST1IpLCB0aW1lb3V0TXMpO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBkb25lKHNpZ25hbC5yZWFzb24pLCB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbVJlYWR5ID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtc3RvcC1sb2FkaW5nOlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGBkaWQtZmFpbC1sb2FkOiAke0pTT04uc3RyaW5naWZ5KHsgdXJsLCBzb3VyY2UsIGNvZGUsIGRlc2MgfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInByZWxvYWQtZXJyb3JcIiwgKF9lLCBfcGF0aCwgZXJyb3IpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGBwcmVsb2FkLWVycm9yOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pfWApO1xuICAgICAgZG9uZShlcnJvcik7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBQYWdlLXdvcmxkIGhvb2sgYnVuZGxlczsgdGhlIHByZWxvYWQgZXZhbHVhdGVzIHRoZSBuYW1lZCBvbmUgaW4gdGhlIG1haW4gd29ybGQgb2YgZXZlcnkgZnJhbWUgaXQgbGFuZHMgaW4uXG5jb25zdCBXT1JMRF9TQ1JJUFRTOiBSZWNvcmQ8V29ybGRNb2RlLCBzdHJpbmc+ID0ge1xuICBzaG9vdDogam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwic2hvb3QuZ2xvYmFsLmpzXCIpLFxuICByZW5kZXI6IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInJlbmRlci5nbG9iYWwuanNcIiksXG4gIGF1ZGlvOiBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJhdWRpby5nbG9iYWwuanNcIiksXG59O1xuXG5mdW5jdGlvbiBwaWNrV29ybGRTY3JpcHQocmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBtb2RlOiBXb3JsZE1vZGUgPSByZW5kZXJlci5kZXRlcm1pbmlzdGljID8gXCJzaG9vdFwiIDogcmVuZGVyZXIud2l0aEF1ZGlvID8gXCJhdWRpb1wiIDogXCJyZW5kZXJcIjtcbiAgcmV0dXJuIFdPUkxEX1NDUklQVFNbbW9kZV07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCB0b2xlcmFudCwgc2lnbmFsLCBvbkNyZWF0ZWQgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHVzZUlubmVyUHJveHkgfSA9IHJlbmRlcmVyO1xuICBjb25zdCBzcmMgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzb3VyY2UpIDogc291cmNlO1xuXG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWluV2lkdGg6IHdpZHRoLFxuICAgIG1pbkhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtYXhXaWR0aDogd2lkdGgsXG4gICAgbWF4SGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgbWluaW1pemFibGU6IGZhbHNlLFxuICAgIG1vdmFibGU6IGZhbHNlLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgLy8gQ2FycmllcyB0aGUgYnJpZGdlIHByZWxvYWQgaW50byB0aGUgdGFyZ2V0IGlmcmFtZTsgbm9kZSBzdGF5cyBvZmYsIGFzIG5vZGVJbnRlZ3JhdGlvbiBrZWVwcyBpdHMgZmFsc2UgZGVmYXVsdC5cbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgLy8gRWxlY3Ryb24gc2FuZGJveGVzIHByZWxvYWRzIGJ5IGRlZmF1bHQsIHdoaWNoIGJyZWFrcyB0aGVpciBidW5kbGVkIHJlcXVpcmVzOyB0aGUgT1Mgc2FuZGJveCBpcyBvZmYgcmVnYXJkbGVzcy5cbiAgICAgIHNhbmRib3g6IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6ICFyZW5kZXJlci5kaXNhYmxlV2ViU2VjdXJpdHksXG4gICAgICAvLyBUaGUgd3JhcHBlciBpcyBhIHNlY3VyZSBzY2hlbWUsIHNvIGl0IHVwZ3JhZGVzIHRoZSB0YXJnZXQgdG8gaHR0cHMgYW5kIGV2ZXJ5IGh0dHAgc3VicmVzb3VyY2UgaXQgb3ducyB0dXJucyBtaXhlZC5cbiAgICAgIGFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudDogdHJ1ZSxcbiAgICAgIGV4cGVyaW1lbnRhbEZlYXR1cmVzOiB0cnVlLFxuICAgICAgcHJlbG9hZDogcHVwUHJlbG9hZCxcbiAgICAgIGFkZGl0aW9uYWxBcmd1bWVudHM6IFtgJHtXT1JMRF9BUkd9JHtwaWNrV29ybGRTY3JpcHQocmVuZGVyZXIpfWAsIC4uLihyZW5kZXJlci53aXRoQXVkaW8gPyBbQVVESU9fQVJHXSA6IFtdKV0sXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHtcbiAgICBzb3VyY2UsXG4gICAgd2luZG93OiB3aW4sXG4gICAgdXNlSW5uZXJQcm94eSxcbiAgICBzdHViTWVkaWE6IHJlbmRlcmVyLmRldGVybWluaXN0aWMsXG4gIH0pO1xuICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuYXR0YWNoKFwiMS4zXCIpO1xuICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcImNvbnNvbGUtbWVzc2FnZVwiLCAoeyBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQgfSkgPT4ge1xuICAgIC8vIERyb3AgaGVhZGxlc3Mgbm9pc2U6IHNlY3VyaXR5IHdhcm5pbmdzIGFuZCBodHRw4oaSaHR0cHMgYXV0by11cGdyYWRlIG5vdGljZXMgZm9yIGludGVybmFsLXByb3h5IGFzc2V0cy5cbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIENPTlNPTEVfSUdOT1JFUy5maW5kKChpKSA9PiBtZXNzYWdlLnN0YXJ0c1dpdGgoaSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZ3MgPSBbVEFHLCBcImNvbnNvbGU6XCIsIHsgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQsIHNvdXJjZSB9XTtcbiAgICBsZXZlbCA9PT0gXCJlcnJvclwiID8gbG9nZ2VyLmVycm9yKC4uLm1zZ3MpIDogbG9nZ2VyLmRlYnVnKC4uLm1zZ3MpO1xuICAgIHJlbmRlcmVyLm9uQ29uc29sZShsZXZlbCwgbWVzc2FnZSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7XG4gICAgICBzb3VyY2UsXG4gICAgICB3aW4sXG4gICAgICBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksXG4gICAgICB0aW1lb3V0TXM6IHJlbmRlcmVyLndpbmRvd1RpbWVvdXQgKiAxMDAwLFxuICAgICAgdG9sZXJhbnQsXG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIHJldHVybiBvcGVuV2luZG93KHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgb25DcmVhdGVkLFxuICAgICAgc2lnbmFsLFxuICAgICAgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50LFxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcmVidWlsZERyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEJMQU5LX1dBUk5fUkFUSU8sIEJsYW5rU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2JsYW5rXCI7XG5pbXBvcnQgeyBEcm9wU3RhdHMsIEpBTktfV0FSTl9TQ09SRSB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvZHJvcFwiO1xuaW1wb3J0IHsgcGVyaW9kaWNhbCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBdWRpb0Rpc3Bvc2FsLCBhdHRhY2hBdWRpb0xpc3RlbmVycyB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVuZGVyXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RGcmFtZTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNsZWFyU3R1Y2tDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rU3RhdHMod2lkdGgsIGhlaWdodCk7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgZGlzcG9zZUF1ZGlvOiBBdWRpb0Rpc3Bvc2FsIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgYmxhbmtTdGF0cy5zYW1wbGUoZnJhbWUpO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgZW5jb2RlRXJyb3IgPz89IHNpZ25hbD8ucmVhc29uO1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG4gICAgbGFzdEZyYW1lID0gY3JvcHBlZDtcbiAgICB0YWtlci5jYXB0dXJlKGN1cnJlbnRUaW1lLCBjcm9wcGVkKTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgY2xlYXJTdHVja0NoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBpZiAoc3R1Y2sgPj0gZnBzKSB7XG4gICAgICAgICAgcmVqZWN0ZXI/LihuZXcgRXJyb3IoYHJlbmRlcmVyIHN0YWxsZWQgZm9yICR7TWF0aC5yb3VuZCgoc3R1Y2sgKiAxMDAwKSAvIGZwcyl9bXMgQCAke3dyaXR0ZW59YCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0dWNrID09PSAxIHx8IHN0dWNrID09PSBNYXRoLmZsb29yKGZwcyAvIDIpKSB7XG4gICAgICAgICAgYXdhaXQgcmVidWlsZERyYXdhYmxlKHdpbi53ZWJDb250ZW50cywgZnJhbWVTaXplKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJTdHVja0NoZWNrPy4oKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBkaXNwb3NlQXVkaW8/LigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEZyYW1lKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZHJvcHBlZCBmcmFtZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBzY3JlZW5zaG90cywgamFuayB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEx1IEFvIChsdWFvQGJpbGliaWxpLmNvbSkgb24gMjAyNi8wOC8yMS5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG4vLyBBbnkgcmVuZGVyIGZhaWx1cmUgZWFybnMgYSBmcmVzaCB3aW5kb3crY29tcG9zaXRvciBhdHRlbXB0OyBhYm9ydHMgc3RpbGwgc3RvcCB0aGUgbG9vcC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoUmVyZW5kZXI8VD4oc2lnbmFsOiBBYm9ydFNpZ25hbCwgYWN0aW9uOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGxldCBsYXN0RXJyOiB1bmtub3duO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgbGFzdEVyciA9IGU7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGByZXRyeSAke2F0dGVtcHR9LyR7TUFYX1JFTkRFUl9BVFRFTVBUU306ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIHRocm93IGxhc3RFcnI7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgYWJvcnRhYmxlIH0gZnJvbSBcIi4uLy4uL2Jhc2UvdGltaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1ZpZGVvXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VPcHRpb25zIHtcbiAgZnJhbWU6IFdlYkZyYW1lTWFpbiB8IHVuZGVmaW5lZDtcbiAgdGltZXN0YW1wTXM6IG51bWJlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8vIE9ubHkgdGhlIGRldGVybWluaXN0aWMgcmVuZGVyZXIgKHNob290KSBkcml2ZXMgdGhpczsgcmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2sgdmlhIHJBRiBpbiB0aGUgcGFnZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZHZhbmNlVmlkZW9zKHsgZnJhbWUsIHRpbWVzdGFtcE1zLCBzaWduYWwgfTogQWR2YW5jZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFmcmFtZT8udXJsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhYm9ydGFibGUoXG4gICAgICBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChcbiAgICAgICAgYHdpbmRvdy5fX3B1cF92aWRlb19fJiYoYXN5bmMoKT0+e2F3YWl0IF9fcHVwX3ZpZGVvX18ucmVhZHkoKTthd2FpdCBfX3B1cF92aWRlb19fLmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pfSkoKWAsXG4gICAgICApLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQWR2YW5jZU9wdGlvbnMsIGFkdmFuY2VWaWRlb3MgfSBmcm9tIFwiLi92aWRlby9hZHZhbmNlXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGFyZ3M6IEFkdmFuY2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgZnJhbWUsIHRpbWVzdGFtcE1zIH0gPSBhcmdzO1xuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhhcmdzKV0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yMy5cblxuaW1wb3J0IHsgRGVtdXhlciwgdHlwZSBEZW11eGVyT3B0aW9ucyB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuXG4vLyBmZm1wZWcgcmVhZC93cml0ZSBkZWFkbGluZSAowrVzKTsgYSBibG9ja2luZyBvcGVuIGlnbm9yZXMgQWJvcnRTaWduYWwsIHNvIHRoaXMgYm91bmRzIGEgc3R1Y2sgQ0ROLlxuY29uc3QgUldfVElNRU9VVF9VUyA9IFwiODAwMDAwMFwiO1xuXG4vLyBmZm1wZWcgb3BlbnMgaHR0cC9odHRwcyB3aXRoIG5hdGl2ZSBieXRlLXJhbmdlIHJlcXVlc3RzLCBzbyBvbmx5IHRoZSBkZWNvZGVkIHJhbmdlcyBkb3dubG9hZC5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuSW5wdXQoc3JjOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxEZW11eGVyPiB7XG4gIGNvbnN0IG9wdGlvbnM6IERlbXV4ZXJPcHRpb25zID0geyBzaWduYWwsIG9wdGlvbnM6IHsgcndfdGltZW91dDogUldfVElNRU9VVF9VUyB9IH07XG4gIHJldHVybiBEZW11eGVyLm9wZW4oc3JjLCBvcHRpb25zKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjUuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgRGVjb2RlciwgRmlsdGVyQVBJIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlZEZyYW1lIHtcbiAgaWR4OiBudW1iZXI7XG4gIGJ1ZjogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZUZyYW1lc09wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgbWV0YTogVmlkZW9NZXRhO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vLyBEZWNvZGUgYSBzb3VyY2UgdG8gZnBzLXJlc2FtcGxlZCwgZGlzcGxheS1zY2FsZWQsIHRpZ2h0LVJHQkEgZnJhbWVzIGluIG9yZGVyIChpZHggPSAxLWJhc2VkIGRlY29kZSBwb3NpdGlvbikuIENvbnN1bWVyIGJhY2twcmVzc3VyZSBpcyBqdXN0IHB1bGxpbmcgc2xvd2VyLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBkZWNvZGVGcmFtZXMoeyBzcmMsIG1ldGEsIHNpZ25hbCB9OiBEZWNvZGVGcmFtZXNPcHRpb25zKTogQXN5bmNHZW5lcmF0b3I8RGVjb2RlZEZyYW1lPiB7XG4gIGF3YWl0IHVzaW5nIGlucHV0ID0gYXdhaXQgb3BlbklucHV0KHNyYywgc2lnbmFsKTtcbiAgY29uc3Qgc3RyZWFtID0gaW5wdXQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwgfSk7XG4gIGNvbnN0IHsgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gbWV0YTtcbiAgY29uc3Qgc2NhbGUgPSBmcmFtZVdpZHRoICE9PSB3aWR0aCB8fCBmcmFtZUhlaWdodCAhPT0gaGVpZ2h0ID8gYHNjYWxlPSR7ZnJhbWVXaWR0aH06JHtmcmFtZUhlaWdodH0sYCA6IFwiXCI7XG4gIHVzaW5nIGZpbHRlciA9IEZpbHRlckFQSS5jcmVhdGUoYGZwcz0ke2Zwc30sJHtzY2FsZX1mb3JtYXQ9cmdiYWAsIHsgc2lnbmFsIH0pO1xuICBsZXQgayA9IDA7XG4gIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZmlsdGVyLmZyYW1lcyhkZWMuZnJhbWVzKGlucHV0LnBhY2tldHMoc3RyZWFtLmluZGV4KSkpKSB7XG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHlpZWxkIHsgaWR4OiArK2ssIGJ1ZjogcGFja1JnYmEoZnJhbWUpIH07XG4gIH1cbn1cblxuLy8gVGlnaHQgUkdCQSBjb3B5IChkcm9wIGxpYmF2IHJvdyBwYWRkaW5nKSBzbyB0aGUgcGFnZSBjYW4gd3JhcCBpdCBzdHJhaWdodCBpbnRvIEltYWdlRGF0YS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJvdyA9IGZyYW1lLndpZHRoICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzcmMuc3ViYXJyYXkoMCwgcm93ICogZnJhbWUuaGVpZ2h0KSk7XG4gIH1cbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHJvdyAqIGZyYW1lLmhlaWdodCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgZnJhbWUuaGVpZ2h0OyB5KyspIHtcbiAgICBzcmMuY29weShvdXQsIHkgKiByb3csIHkgKiBzdHJpZGUsIHkgKiBzdHJpZGUgKyByb3cpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBkZWNvZGVGcmFtZXMgfSBmcm9tIFwiLi9kZWNvZGVcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBERUNPREVfQUhFQUQgPSA0OyAvLyBkZWNvZGUgYSBmZXcgZnJhbWVzIHBhc3QgdGhlIGhpZ2hlc3QgcmVxdWVzdDsgdGhlIHBhZ2UgYWxyZWFkeSBwcmVmZXRjaGVzXG5jb25zdCBLRUVQX0JFSElORCA9IDE2OyAvLyBtaW4gZnJhbWVzIGhlbGQgYmVoaW5kIHRoZSBoZWFkOyBtdXN0IGV4Y2VlZCB0aGUgcGFnZSdzIHByZWZldGNoIGxlYWQgKEFIRUFEPTEwKVxuY29uc3QgTUVNT1JZX0JVREdFVCA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyByZXRhaW4gZGVjb2RlZCBmcmFtZXMgdXAgdG8gdGhpcyBwZXItc2Vzc2lvbiBidWRnZXQgc28gYSBzbWFsbCBsb29waW5nIHZpZGVvIHJlLXNlcnZlcyBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHJlLWRlY29kaW5nXG5jb25zdCBNQVhfUEFTU19SRVRSWSA9IDM7IC8vIHJlLW9wZW4gYSBzdHJlYW1lZCBzb3VyY2UgdGhpcyBtYW55IHRpbWVzIG9uIGEgdHJhbnNpZW50IGRlY29kZSBlcnJvciBiZWZvcmUgcmVwb3J0aW5nIGVuZC1vZi1zdHJlYW1cblxuaW50ZXJmYWNlIFdhaXRlciB7XG4gIGlkeDogbnVtYmVyO1xuICByZXNvbHZlOiAoYjogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vLyBEZW1hbmQtZHJpdmVuIGluLXByb2Nlc3MgZGVjb2RlIChEZW11eGVy4oaSRGVjb2RlcuKGkmZwcy9zY2FsZS9yZ2JhIGZpbHRlcikgc2VydmluZyBmcmFtZSBOIGFzIHRpZ2h0IFJHQkE7IGZvcndhcmQtb25seSDigJQgYSBsb29wL3Jld2luZCByZS1kZWNvZGVzIGZyb20gZnJhbWUgMSB1bmxlc3MgdGhlIHdob2xlIGNsaXAgc3RpbGwgZml0cyB0aGUgbWVtb3J5IGJ1ZGdldC5cbmV4cG9ydCBjbGFzcyBEZWNvZGVTZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYnVmID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBfcmVhZHkgPSAwO1xuICBwcml2YXRlIF93YW50ID0gMTtcbiAgcHJpdmF0ZSBfZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2VuID0gMDtcbiAgcHJpdmF0ZSBfY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfd2FpdGVycyA9IG5ldyBTZXQ8V2FpdGVyPigpO1xuICBwcml2YXRlIF9yZXN1bWU6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAvLyBMZWFkIGZyYW1lcyBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGNvbnRlbnQgaWR4IGlzIG9mZnNldCBwYXN0IHRoZW0uXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xlYWRGcmFtZXM6IG51bWJlcjtcbiAgLy8gRnJhbWVzIGtlcHQgYmVoaW5kIHRoZSBoZWFkOyBhIGNsaXAgdGhhdCBmaXRzIHRoZSBidWRnZXQgcmV0YWlucyBldmVyeSBmcmFtZSwgc28gbG9vcHMgcmUtc2VydmUgZnJvbSBtZW1vcnkuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2tlZXBDb3VudDogbnVtYmVyO1xuICAvLyBSZXNvbHZlcyB3aGVuIHB1bXAoKSBmdWxseSB1bndpbmRzIOKAlCBhd2FpdGVkIG9uIGNsb3NlIHNvIG5vZGUtYXYgZ2VuZXJhdG9ycyBmcmVlIGJlZm9yZSBwcm9jZXNzIHRlYXJkb3duLlxuICBwcml2YXRlIHJlYWRvbmx5IF9wdW1wRG9uZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHRoaXMuX3B1bXBEb25lID0gdGhpcy5wdW1wKCk7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKGlkeCA8IDEpIHtcbiAgICAgIGlkeCA9IDE7XG4gICAgfVxuICAgIGlmIChpZHggPD0gdGhpcy5fbGVhZEZyYW1lcykge1xuICAgICAgaWR4ID0gdGhpcy5fbGVhZEZyYW1lcyArIDE7IC8vIGhvbGQgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZSBhY3Jvc3MgdGhlIGxlYWRcbiAgICB9XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIH1cbiAgICBpZiAoaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIC8vIGZvcndhcmQsIG5vdCB5ZXQgZGVjb2RlZCBpbiB0aGlzIHBhc3NcbiAgICAgIGlmIChpZHggPiB0aGlzLl93YW50KSB7XG4gICAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB9XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZpY3RlZCAobG9vcC9yZXdpbmQpOiBjbGVhciByZWFkeS9kb25lIHN5bmNocm9ub3VzbHkgc28gdGhlIHdyYXAncyBwcmVmZXRjaCBidXJzdCBjb2FsZXNjZXMgaW50byBvbmUgcmVzdGFydCwgbm90IG9uZSBwZXIgZnJhbWUuXG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWl0KGlkeCk7XG4gIH1cblxuICAvLyBBd2FpdCB0aGUgcHVtcCBzbyB0aGUgbm9kZS1hdiBkZW11eGVyL2RlY29kZXIgZ2VuZXJhdG9ycyB1bndpbmQgKGNvbnRleHRzIGZyZWVkKSBiZWZvcmUgdGhlIGNhbGxlciBleGl0cy5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICB0aGlzLl9jdHJsLmFib3J0KCk7XG4gICAgdGhpcy53YWtlKCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICB3LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGVycy5jbGVhcigpO1xuICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgIGF3YWl0IHRoaXMuX3B1bXBEb25lO1xuICB9XG5cbiAgLy8gLWQtb25seSBzdWJzeXN0ZW0sIHNvIG5ldmVyIHRpbWUgb3V0OiBkcmFpbldhaXRlcnMgcmVzb2x2ZXMgb24gZGVjb2RlLCBFT0YsIG9yIGNsb3NlIOKAlCBvdXRwdXQgbmV2ZXIgZGVwZW5kcyBvbiBmZXRjaCBsYXRlbmN5LlxuICBwcml2YXRlIHdhaXQoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB0aGlzLl93YWl0ZXJzLmFkZCh7IGlkeCwgcmVzb2x2ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3VtZTtcbiAgICB0aGlzLl9yZXN1bWUgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gIH1cblxuICAvLyBJbnZhbGlkYXRlIHRoZSBydW5uaW5nIHBhc3MgKG9yIHdha2UgYSBwYXJrZWQgb25lKSBzbyBwdW1wKCkgc3RhcnRzIGEgZnJlc2ggZGVjb2RlIGZyb20gZnJhbWUgMS5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9nZW4rKztcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdGFydDtcbiAgICB0aGlzLl9yZXN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICAgIHRoaXMud2FrZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdW1wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmYWlscyA9IDA7XG4gICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQpIHtcbiAgICAgIGNvbnN0IGdlbiA9IHRoaXMuX2dlbjtcbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgICAgbGV0IGZhaWxlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIFRBRyxcbiAgICAgICAgICAgIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgcGFzcyBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICBmYWlscyA9IDA7XG4gICAgICAgIGNvbnRpbnVlOyAvLyByZXN0YXJ0IHJlcXVlc3RlZCBtaWQtcGFzc1xuICAgICAgfVxuICAgICAgLy8gQSB0aHJvd24gcGFzcyBpcyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgKGUuZy4gYSBzdHJlYW1lZCBsb29wIHJlLW9wZW4pOyByZXRyeSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBFT0YsIHdoaWNoIHdvdWxkIGJsYW5rIHRoZSBmcmFtZS5cbiAgICAgIGlmIChmYWlsZWQgJiYgKytmYWlscyA8PSBNQVhfUEFTU19SRVRSWSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZhaWxzID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIGF3YWl0IHRoaXMudW50aWxSZXN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWNvZGVQYXNzKGdlbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gZGVjb2RlRnJhbWVzKHsgc3JjOiB0aGlzLl9zcmMsIG1ldGE6IHRoaXMubWV0YSwgc2lnbmFsOiB0aGlzLl9jdHJsLnNpZ25hbCB9KTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHsgaWR4LCBidWYgfSBvZiBzdHJlYW0pIHtcbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYXQgPSB0aGlzLl9sZWFkRnJhbWVzICsgaWR4OyAvLyBtYXAgZGVjb2RlIHBvc2l0aW9uIHBhc3QgdGhlIGhlbGQgbGVhZC1nYXAgZnJhbWVzXG4gICAgICB3aGlsZSAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbiAmJiBhdCA+IHRoaXMuZGVtYW5kICsgREVDT0RFX0FIRUFEKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fYnVmLnNldChhdCwgYnVmKTtcbiAgICAgIHRoaXMuX3JlYWR5ID0gYXQ7XG4gICAgICAvLyBEcmFpbiBiZWZvcmUgZXZpY3Q6IHdpdGggd2FudCBmYXIgYWhlYWQgdGhlIGZsb29yIGNvdmVycyB0aGlzIGZyYW1lLCBhbmQgZXZpY3RpbmcgaXQgZmlyc3Qgc3RhcnZlcyBpdHMgd2FpdGVyIGZvcmV2ZXIuXG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgdGhpcy5ldmljdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhaXRlcnMgdGhhdCBzdXJ2aXZlZCBhIHJld2luZCByZXN0YXJ0IGFyZSBzdGlsbCBkZW1hbmQ7IGlnbm9yaW5nIHRoZW0gcGFya3MgdGhlIHBhc3MgYW5kIHN0YXJ2ZXMgdGhlbSBmb3JldmVyLlxuICBwcml2YXRlIGdldCBkZW1hbmQoKTogbnVtYmVyIHtcbiAgICBsZXQgZCA9IHRoaXMuX3dhbnQ7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIGlmICh3LmlkeCA+IGQpIHtcbiAgICAgICAgZCA9IHcuaWR4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfVxuXG4gIHByaXZhdGUgcGF1c2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN1bWUgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUGFyayB1bnRpbCBhIGxvb3AvYmFja3dhcmQgcmVxdWVzdCAob3IgY2xvc2UpIGNhbGxzIHJlcXVlc3RSZXN0YXJ0KCkuXG4gIHByaXZhdGUgdW50aWxSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN0YXJ0ID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLl93YW50IC0gdGhpcy5fa2VlcENvdW50O1xuICAgIGZvciAoY29uc3QgayBvZiB0aGlzLl9idWYua2V5cygpKSB7XG4gICAgICBpZiAoayA8IGZsb29yKSB7XG4gICAgICAgIHRoaXMuX2J1Zi5kZWxldGUoayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbldhaXRlcnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4udGhpcy5fd2FpdGVyc10pIHtcbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoZW50cnkuaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKGhpdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBEZWNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9iZVJlc3VsdCB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogUFRTIChzKSBvZiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBhIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBydW4gaXMgaGVsZCBvbiBpdCwgbGlrZSBDaHJvbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuLy8gTm8gd2FsbC1jbG9jayBjYXA6IG9wZW5JbnB1dCdzIHBlci1yZWFkIHJ3X3RpbWVvdXQgYm91bmRzIGEgc3R1Y2sgc291cmNlLCBhbmQgdGhlIGNhbGxlciByZXRyaWVzIG9uIHRocm93LlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICBhd2FpdCB1c2luZyBkID0gYXdhaXQgb3BlbklucHV0KHNyYyk7XG4gIGNvbnN0IHN0cmVhbSA9IGQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmU6IG5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICBjb25zdCBkdXJhdGlvbiA9IGQuZHVyYXRpb24gPiAwID8gZC5kdXJhdGlvbiA6IDA7XG4gIGNvbnN0IHRiID0gc3RyZWFtLnRpbWVCYXNlLm51bSAvIHN0cmVhbS50aW1lQmFzZS5kZW47XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyB0aHJlYWRDb3VudDogMSB9KTtcbiAgbGV0IGxlYWRHYXAgPSAwO1xuICAvLyBGaXJzdCBjbGVhbiBmcmFtZSdzIFBUUyA9IHdoZXJlIGNvbnRlbnQgYmVnaW5zOyBza2lwIGNvcnJ1cHQgZnJhbWVzIGxpa2UgYSBicm93c2VyLlxuICBvdXRlcjogZm9yIGF3YWl0ICh1c2luZyBwa3Qgb2YgZC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBkZWMuZnJhbWVzKHBrdCkpIHtcbiAgICAgICAgaWYgKGZyYW1lPy5kZWNvZGVFcnJvckZsYWdzICE9PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGVhZEdhcCA9IE1hdGgubWF4KDAsIE51bWJlcihmcmFtZS5wdHMpICogdGIpO1xuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGNvcnJ1cHQgcGFja2V0IOKAlCBza2lwIHRvIHRoZSBuZXh0XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHdpZHRoOiBzdHJlYW0uY29kZWNwYXIud2lkdGgsIGhlaWdodDogc3RyZWFtLmNvZGVjcGFyLmhlaWdodCwgZHVyYXRpb24sIGxlYWRHYXAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDYuXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0gfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb2RlYywgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDksIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3R1YkVuY29kZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuLy8gUmVhbCBwYXJzZWFibGUgbWVkaWEgd2l0aCB0aGUgc291cmNlJ3MgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbiwgc28gQmxpbmsgbGF5cyBvdXQgbGlrZSBDaHJvbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jb2RlU3R1YldlYm0oeyB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiB9OiBTdHViRW5jb2RlT3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9MSUJWUFhfVlA5KTtcbiAgaWYgKCFjb2RlYykge1xuICAgIHRocm93IG5ldyBFcnJvcihgc3R1YjogZW5jb2RlciBub3QgZm91bmQ6ICR7RkZfRU5DT0RFUl9MSUJWUFhfVlA5fWApO1xuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX3N0dWJfJHtyYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKX0ud2VibWApO1xuICB0cnkge1xuICAgIHtcbiAgICAgIGF3YWl0IHVzaW5nIG11eGVyID0gbmV3IEZvcm1hdE11eGVyKHBhdGgpO1xuICAgICAgLy8gVGltZWJhc2UgMS8xMDAwIChmcHMgcGFyYW0pIGxldHMgb25lIHBhY2tldCBjYXJyeSB0aGUgZnVsbCBzb3VyY2UgZHVyYXRpb24gaW4gbXMuXG4gICAgICB1c2luZyBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICAgIHtcbiAgICAgICAgICBjb2RlYyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgZnBzOiAxMDAwLFxuICAgICAgICAgIGJpdHJhdGU6IDEwMF8wMDAsXG4gICAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgICAgICAgICBvcHRpb25zOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdHViQ3R4Lm9wZW4yXCIsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgICB1c2luZyBzdHViID0gbmV3IFN0dWJGcmFtZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IG1zID0gQmlnSW50KE1hdGgubWF4KDEsIE1hdGgucm91bmQoZHVyYXRpb24gKiAxMDAwKSkpO1xuICAgICAgc3R1Yi5mcmFtZS5wdHMgPSAwbjtcbiAgICAgIHN0dWIuZnJhbWUuZHVyYXRpb24gPSBtcztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKHN0dWIuZnJhbWUpLCBcInN0dWJDdHguc2VuZEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCksIFwic3R1YkN0eC5mbHVzaFwiKTtcbiAgICAgIHVzaW5nIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJzdHViQ3R4LnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gbXM7XG4gICAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKHBhdGgpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuLy8gT3ducyB0aGUgYmxhY2sgcGl4ZWwgYnVmZmVyIEFORCBpdHMgemVyby1jb3B5IGZyYW1lIHZpZXcg4oCUIGB1c2luZ2AgcGlucyBib3RoIHVudGlsIGFmdGVyIGVuY29kZS5cbmNsYXNzIFN0dWJGcmFtZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBmcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZjogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgbHVtYSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIGNvbnN0IGNocm9tYSA9IE1hdGguY2VpbCh3aWR0aCAvIDIpICogTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5hbGxvYyhsdW1hICsgY2hyb21hICogMiwgMHg4MCk7XG4gICAgdGhpcy5fYnVmLmZpbGwoMCwgMCwgbHVtYSk7XG4gICAgdGhpcy5mcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcih0aGlzLl9idWYsIHsgd2lkdGgsIGhlaWdodCwgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSk7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuZnJhbWVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uLy4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwgfSBmcm9tIFwiLi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgRGVjb2RlU2Vzc2lvbiB9IGZyb20gXCIuL2RlY29kZV9zZXNzaW9uXCI7XG5pbXBvcnQgeyB0eXBlIFByb2JlUmVzdWx0LCBwcm9iZSB9IGZyb20gXCIuL3Byb2JlXCI7XG5pbXBvcnQgeyBlbmNvZGVTdHViV2VibSB9IGZyb20gXCIuL3N0dWJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBTZWNvbmRzIG9mIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBjb250ZW50IGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICAvKiogRGlzcGxheS1ib3ggcGl4ZWxzIChjYW52YXMgYmFja2luZyBzdG9yZSk7IGRlY29kZSBpcyBkb3duc2NhbGVkIHRvIGNvdmVyIHRoaXMsIG5ldmVyIHVwc2NhbGVkLiAqL1xuICBkc3RXPzogbnVtYmVyO1xuICBkc3RIPzogbnVtYmVyO1xuICAvKiogb2JqZWN0Rml0OyBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscyBzbyBpdCBza2lwcyBkb3duc2NhbGUuICovXG4gIGZpdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVudHJ5IHtcbiAgc2Vzc2lvbjogRGVjb2RlU2Vzc2lvbjtcbiAgcmVmczogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIF9zZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgcHJpdmF0ZSBfcHJvYmVzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8UHJvYmVSZXN1bHQ+PigpO1xuICBwcml2YXRlIF9zdHVicyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEJ1ZmZlcj4+KCk7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuXG4gIC8vIC1kIGRlY29kZSBieXBhc3NlcyB0aGUgd2luZG93IGludGVyY2VwdG9yLCBzbyBpdCByZW1hcHMgaG9zdHMgaXRzZWxmIHdoZW4gdGhlIGlubmVyIHByb3h5IGlzIG9uLlxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF91c2VJbm5lclByb3h5OiBib29sZWFuKSB7fVxuXG4gIC8vIGNsb3NlZC1jaGVja2VkIGFmdGVyIHByb2JlIHNvIGNsb3NlQWxsKCkgY2FuJ3QgcmFjZSBhIHNsb3cgb3BlbiBpbnRvIGEgbGVha2VkIHNlc3Npb24uXG4gIGFzeW5jIG9wZW4ob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGtleShvcHRzKTtcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdC5yZWZzKys7XG4gICAgICByZXR1cm4gaGl0LnNlc3Npb24ubWV0YTtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdGhpcy5fdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwob3B0cy5zcmMpIDogb3B0cy5zcmM7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHRoaXMucHJvYmVDYWNoZWQoc3JjKTtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgbGV0IGZyYW1lV2lkdGggPSBpbmZvLndpZHRoO1xuICAgIGxldCBmcmFtZUhlaWdodCA9IGluZm8uaGVpZ2h0O1xuICAgIC8vIERvd25zY2FsZSB0byBjb3ZlciB0aGUgZGlzcGxheSBib3ggKG5ldmVyIHVwc2NhbGUpOyBvYmplY3RGaXQgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMuXG4gICAgaWYgKG9wdHMuZHN0VyAmJiBvcHRzLmRzdEggJiYgb3B0cy5maXQgIT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5taW4oMSwgTWF0aC5tYXgob3B0cy5kc3RXIC8gaW5mby53aWR0aCwgb3B0cy5kc3RIIC8gaW5mby5oZWlnaHQpKTtcbiAgICAgIGZyYW1lV2lkdGggPSBldmVuKGluZm8ud2lkdGggKiBzKTtcbiAgICAgIGZyYW1lSGVpZ2h0ID0gZXZlbihpbmZvLmhlaWdodCAqIHMpO1xuICAgIH1cbiAgICBjb25zdCBtZXRhOiBWaWRlb01ldGEgPSB7XG4gICAgICBpZCxcbiAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgIGZyYW1lV2lkdGgsXG4gICAgICBmcmFtZUhlaWdodCxcbiAgICAgIGZwczogb3B0cy5mcHMsXG4gICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIGxlYWRHYXA6IGluZm8ubGVhZEdhcCxcbiAgICB9O1xuICAgIHRoaXMuX3Nlc3Npb25zLnNldChpZCwgeyBzZXNzaW9uOiBuZXcgRGVjb2RlU2Vzc2lvbihtZXRhLCBzcmMpLCByZWZzOiAxIH0pO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5pc3RpYyBtZWRpYSByZXF1ZXN0cyByZWRpcmVjdCBoZXJlOiByZWFsIHBhcnNlYWJsZSBieXRlcyB3aXRoIHRydWUgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbi5cbiAgc3R1YihzcmM6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWwgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzcmMpIDogc3JjO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3N0dWJzLmdldChyZWFsKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdGhpcy5wcm9iZUNhY2hlZChyZWFsKS50aGVuKChpbmZvKSA9PlxuICAgICAgZW5jb2RlU3R1YldlYm0oe1xuICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fc3R1YnMuZGVsZXRlKHJlYWwpKTtcbiAgICB0aGlzLl9zdHVicy5zZXQocmVhbCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHJldHVybiBlLnNlc3Npb24uZ2V0RnJhbWUoaWR4KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKC0tZS5yZWZzID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgIGF3YWl0IGUuc2Vzc2lvbi5jbG9zZSgpO1xuICB9XG5cbiAgLy8gRmFpbGVkIHByb2JlcyBldmljdCBzbyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgY2FuIHJldHJ5IG9uIHRoZSBuZXh0IHJlcXVlc3QuXG4gIHByaXZhdGUgcHJvYmVDYWNoZWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fcHJvYmVzLmdldChzcmMpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB1c2VSZXRyeSh7IGZuOiBwcm9iZSB9KShzcmMpO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fcHJvYmVzLmRlbGV0ZShzcmMpKTtcbiAgICB0aGlzLl9wcm9iZXMuc2V0KHNyYywgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBjbG9zZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlc3Npb25zID0gWy4uLnRoaXMuX3Nlc3Npb25zLnZhbHVlcygpXTtcbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHNlc3Npb25zLm1hcCgoZSkgPT4gZS5zZXNzaW9uLmNsb3NlKCkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBrZXkob3B0czogT3Blbk9wdGlvbnMpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAudXBkYXRlKGAke29wdHMuc3JjfXwke29wdHMuZnBzfXwke29wdHMuZHN0VyA/PyBcIlwifXwke29wdHMuZHN0SCA/PyBcIlwifXwke29wdHMuZml0ID8/IFwiXCJ9YClcbiAgICAuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vLyBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gaW50ZWdlciAo4omlMikgZm9yIHRoZSBzY2FsZXIuXG5mdW5jdGlvbiBldmVuKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4pO1xuICByZXR1cm4gTWF0aC5tYXgoMiwgciAtIChyICUgMikpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEZyYW1lU2VydmVyLCB0eXBlIFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltGcmFtZVByb3RvY29sXVwiO1xuXG4vLyBTY2hlbWUgaXMgcmVnaXN0ZXJlZCBhbG9uZ3NpZGUgYHB1cGAgaW4gcmVuZGVyZXIvcHJvdG9jb2wudHMgKHNpbmdsZSBjYWxsIG9ubHkpLlxuY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuY29uc3QgQ09SU19IRUFERVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBcIipcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1tZXRob2RzXCI6IFwiR0VULCBPUFRJT05TXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiOiBcIipcIixcbn07XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS4gRGV0ZXJtaW5pc3RpYy1vbmx5IChyZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljaywgbm8gZnJhbWUgcHJvdG9jb2wpLlxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZyYW1lUHJvdG9jb2wodXNlSW5uZXJQcm94eTogYm9vbGVhbik6IEFzeW5jRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGZzID0gbmV3IEZyYW1lU2VydmVyKHVzZUlubmVyUHJveHkpO1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgJHtyZXEubWV0aG9kfSAke3VybC5ob3N0bmFtZX0ke3VybC5zZWFyY2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmV0dXJuIGpzb25PayhcbiAgICAgICAgICAgIGF3YWl0IGZzLm9wZW4oe1xuICAgICAgICAgICAgICBzcmM6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIsXG4gICAgICAgICAgICAgIGZwczogaW50KHVybCwgXCJmcHNcIiwgMzApLFxuICAgICAgICAgICAgICBkc3RXOiBpbnQodXJsLCBcIndcIiwgMCksXG4gICAgICAgICAgICAgIGRzdEg6IGludCh1cmwsIFwiaFwiLCAwKSxcbiAgICAgICAgICAgICAgZml0OiB1cmwuc2VhcmNoUGFyYW1zLmdldChcImZpdFwiKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZnJhbWVcIjpcbiAgICAgICAgICByZXR1cm4gcmdiYU9rKGF3YWl0IGZzLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMSkpKTtcbiAgICAgICAgY2FzZSBcInN0dWJcIjpcbiAgICAgICAgICByZXR1cm4gd2VibU9rKGF3YWl0IGZzLnN0dWIodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIikpO1xuICAgICAgICBjYXNlIFwiY2xvc2VcIjpcbiAgICAgICAgICBhd2FpdCBmcy5jbG9zZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7XG4gICAgICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgICAgIGhlYWRlcnM6IENPUlNfSEVBREVSUyxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBgJHt1cmwuaG9zdG5hbWV9IGZhaWxlZCR7dXJsLnNlYXJjaH06ICR7bXNnfWApO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtc2csIHsgc3RhdHVzOiA1MDAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvdG9jb2wudW5oYW5kbGUoU0NIRU1FKTtcbiAgICAgIGF3YWl0IGZzLmNsb3NlQWxsKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuLy8gQ2FjaGVkIHN0dWIgQnVmZmVyIGlzIHNoYXJlZCBhY3Jvc3MgcmVzcG9uc2VzIOKAlCBjb3B5IHNvIGEgY29uc3VtZXIgY2FuJ3QgZGV0YWNoIGl0LlxuZnVuY3Rpb24gd2VibU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ2aWRlby93ZWJtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vLyBSYXcgUkdCQSBwaXhlbHM7IHRoZSBwYWdlIHdyYXBzIHRoZW0gaW4gSW1hZ2VEYXRhIHVzaW5nIG1ldGEud2lkdGgvaGVpZ2h0IGl0IGdvdCBmcm9tIGBvcGVuYC5cbmZ1bmN0aW9uIHJnYmFPayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQxMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICB9XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3csIE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlydHVhbFRpbWUsIHBhdXNlVmlydHVhbFRpbWUsIHJlYnVpbGREcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua1N0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9ibGFua1wiO1xuaW1wb3J0IHsgRHJvcFN0YXRzLCBKQU5LX1dBUk5fU0NPUkUgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2Ryb3BcIjtcbmltcG9ydCB7IHBlcmlvZGljYWwgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgU2NyZWVuc2hvdFRha2VyIH0gZnJvbSBcIi4vc2NyZWVuc2hvdFwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIGRyYXdTdGVnbywgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIHdhaXRTdGVnb1RpY2sgfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgdGljayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IHVzZUZyYW1lUHJvdG9jb2wgfSBmcm9tIFwiLi92aWRlby9wcm90b2NvbFwiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcbmNvbnN0IFJFTkRFUl9GUFMgPSAyNDA7XG5cbmludGVyZmFjZSBQYWludE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEZyYW1lIHtcbiAgcGl4OiBCdWZmZXI7XG4gIHRzOiBudW1iZXI7XG59XG5cbi8vIFBhaW50aW5nIHN0YXlzIG9uIGZvciB0aGUgd2hvbGUgcnVuOyB3YWl0cyBmb3IgdGhlIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIGBtc2AsIHVuZGVmaW5lZCBvbiB0aW1lb3V0LlxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyB3aW4sIGZwcywgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxGcmFtZSB8IHVuZGVmaW5lZD4ge1xuICBsZXQgY2xlYXJEaXJ0eUNoZWNrOiBWb2lkRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIGNvbnN0IGlzRmlyc3RGcmFtZSA9IE1hdGguYWJzKDEwMDAgLyBmcHMgLSBtcykgPCAxO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxGcmFtZSB8IHVuZGVmaW5lZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IHVua25vd24sIF9kOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSBmcm9tIGEgMi1yb3cgc2xpdmVyIGZpcnN0OyB0aGUgZnVsbC1mcmFtZSByZWFkYmFjayAofjhNQiBtZW1jcHkpIGlzIHBhaWQgb25seSBvbiB0aGUgbWF0Y2hpbmcgZnJhbWUuXG4gICAgICAgIGNvbnN0IHNsaXZlciA9IGltYWdlLmNyb3AoeyB4OiAwLCB5OiBmcmFtZVNpemUuaGVpZ2h0IC0gMiwgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oc2xpdmVyLnRvQml0bWFwKCksIHsgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IG1zIC0gdHMgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSh7IHRzLCBwaXg6IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBzaXplLmhlaWdodCAqIHNpemUud2lkdGggKiA0KSB9KTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBpc0ZpcnN0RnJhbWUgPyBmcHMgKiAxMCA6IGZwcyAqIDU7XG4gICAgICBjb25zdCByZWZyZXNoRnBzID0gTWF0aC5mbG9vcihpc0ZpcnN0RnJhbWUgPyBmcHMgOiBmcHMgLyAyKTtcbiAgICAgIGNsZWFyRGlydHlDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKHN0dWNrKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSB0aW1lb3V0KSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcGFpbnQgdGltZW91dCBAICR7bXN9YCk7XG4gICAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHVjayAlIHJlZnJlc2hGcHMgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwIC8gZnBzKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckRpcnR5Q2hlY2s/LigpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdChvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBhd2FpdCB1c2luZyBfID0gdXNlRnJhbWVQcm90b2NvbChvcHRpb25zLnVzZUlubmVyUHJveHkpO1xuICBjb25zdCB0SW5pdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB3aW5QID0gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMsIHNpZ25hbCB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQpIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgaGVsZCA9IDA7XG4gIGxldCBsYXN0RnJhbWU6IEZyYW1lIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IERyb3BTdGF0cyhmcHMpO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICAvLyBDb21wb3NpdG9yL2NhcHR1cmUgY2FkZW5jZSBjYXAsIE5PVCBvdXRwdXQgZnBzOyBmcmFtZXMgYXJlIGRhbWFnZS1kcml2ZW4gcGVyIHZpcnR1YWwgc3RlcC5cbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKFJFTkRFUl9GUFMpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lSWQgPSAwOyBmcmFtZUlkIDwgdG90YWw7IGZyYW1lSWQrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZUlkICsgMSkgKiBmcmFtZUludGVydmFsO1xuXG4gICAgICAvLyBBcm0gYmVmb3JlIGRyYXdTdGVnbyBzbyB0aGUgY29tbWl0IGFjayBjYW4ndCBiZSBtaXNzZWQ7IGJyYW5jaCBjYXRjaCBrZWVwcyBhbiBlYXJseSB0aWNrIGZhaWx1cmUgZnJvbSBvcnBoYW5pbmcgaXQuXG4gICAgICBjb25zdCBzd2FwcGVkID0gd2FpdFN0ZWdvVGljayh3aW4ud2ViQ29udGVudHMpO1xuICAgICAgc3dhcHBlZC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAvLyBJbmRlcGVuZGVudCB0YXJnZXRzIChpZnJhbWUgY2xvY2sgdnMgbWFpbi1mcmFtZSBzdGVnbyBjYW52YXMpOiBvbmUgY29uY3VycmVudCBob3AgaW5zdGVhZCBvZiB0d28gc2VyaWFsIG9uZXMuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGljayh7IGZyYW1lOiBpZnJhbWUsIHRpbWVzdGFtcE1zOiBmcmFtZU1zLCBzaWduYWwgfSksIGRyYXdTdGVnbyh3aW4ud2ViQ29udGVudHMsIGZyYW1lTXMpXSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbYWR2YW5jZVZpcnR1YWxUaW1lKGNkcCwgZnJhbWVJbnRlcnZhbCksIHN3YXBwZWRdKTtcbiAgICAgIGNvbnN0IHBhaW50ZWQgPSBhd2FpdCBwYWludCh7IHNvdXJjZSwgZnBzLCB3aW4sIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LCBtczogZnJhbWVNcyB9KTtcbiAgICAgIGlmIChwYWludGVkKSB7XG4gICAgICAgIGhlbGQgPSAwO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlbGQrKztcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBmcmFtZSA9IHBhaW50ZWQgPz8gbGFzdEZyYW1lO1xuICAgICAgaWYgKCFmcmFtZSB8fCBoZWxkID49IGZwcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyIGV4YXVzdGVkIEAgJHtmcmFtZU1zfWApO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNvbXBvc2l0b3IgbWF5IHBhaW50IHF1aWNrZXIgdGhhbiB1cywgb3Igc3R1Y2ssIHNvIHdlIGF0IGxlYXN0IHBhaW50IG9uY2VcbiAgICAgIGNvbnN0IHJlcGVhdCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChmcmFtZS50cyAvIGZyYW1lSW50ZXJ2YWwgLSBmcmFtZUlkKSk7XG4gICAgICBsYXN0RnJhbWUgPSBmcmFtZTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwZWF0OyBpKyspIHtcbiAgICAgICAgdGFrZXIuY2FwdHVyZShmcmFtZU1zLCBmcmFtZS5waXgpO1xuICAgICAgICBibGFua1N0YXRzLnNhbXBsZShmcmFtZS5waXgpO1xuICAgICAgICAvLyBBd2FpdGVkOiB0aGUgbGltaXRlciBxdWV1ZXMgd2l0aG91dCBib3VuZCwgc28gYW4gZW5jb2RlciBzbG93ZXIgdGhhbiBjYXB0dXJlIHBpbnMgb25lIGZ1bGwgQkdSQSBmcmFtZSBwZXIgYmFja2xvZyBlbnRyeS5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmUuZW5jb2RlQkdSQShmcmFtZS5waXgpO1xuICAgICAgICB3cml0dGVuKys7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIGF3YWl0IHBpcGVsaW5lLmZpbmlzaCgpO1xuICAgIHNjcmVlbnNob3RzID0gYXdhaXQgdGFrZXIuZmluaXNoKGxhc3RGcmFtZT8ucGl4KTtcbiAgfVxuXG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZnJhbWVzIGhlbGQgcGFzdCBwYWludCB0aW1lb3V0YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIG91dEZpbGVzLCBibGFuaywgamFuaywgc2NyZWVuc2hvdHMgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyB0eXBlIElwY01zZywgSXBjTXNnVHlwZSwgSXBjV3JpdGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgd2l0aFJlcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVyZW5kZXJcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5wcm9jZXNzLmVudltcIkVMRUNUUk9OX0RJU0FCTEVfU0VDVVJJVFlfV0FSTklOR1NcIl0gPSBcIjFcIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ2FuY2VsKSB7XG4gICAgY3RybC5hYm9ydChtc2cucmVhc29uKTtcbiAgfVxufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICAgIGZvciAoY29uc3Qgb3V0IG9mIG9wdGlvbnMub3V0RmlsZXMpIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXQpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgY3RybC5zaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhSZXJlbmRlcihjdHJsLnNpZ25hbCwgKCkgPT5cbiAgICAgICAgYWN0aW9uKHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICAgIG9uUHJvZ3Jlc3M6IChwKSA9PiBpcGMud3JpdGVQcm9ncmVzcyhwKSxcbiAgICAgICAgICBvbkNvbnNvbGU6IChsLCBtKSA9PiBpcGMud3JpdGVDb25zb2xlKGwsIG0pLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBpcGMud3JpdGVEb25lKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgY29uc3QgbSA9IGVycm9yLnN0YWNrID8/IGVycm9yLm1lc3NhZ2UgPz8gU3RyaW5nKGUgPz8gXCJ1bmtub3duIGVycm9yXCIpO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRXJyb3IobSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRpbmcgPSB0cnVlO1xuICAgICAgYXBwLmV4aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
|