pup-recorder 0.4.8 → 0.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';require('source-map-support/register.js');var assert=require('assert'),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 F=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 F__default=/*#__PURE__*/_interopDefault(F);var bo=Object.create;var ut=Object.defineProperty;var xo=Object.getOwnPropertyDescriptor;var Oe=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),Q=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=>[,,,bo(null)],Gt=["class","method","getter","setter","accessor","field","value","get","set"],Ee=r=>r!==void 0&&typeof r!="function"?Q("Function expected"):r,vo=(r,e,t,o,n)=>({kind:Gt[r],name:e,metadata:o,addInitializer:i=>t._?Q("Already initialized"):n.push(Ee(i||null))}),pt=(r,e)=>Wt(e,Oe("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},se=(r,e,t,o,n,i)=>{var a,c,d,p,u=e&7,f=false,m=false,h=2,b=Gt[u+5],E=r[h]||(r[h]=[]),P=((n=n.prototype),xo(n,t));for(var v=o.length-1;v>=0;v--)d=vo(u,t,c={},r[3],E),(d.static=f,d.private=m,p=d.access={has:y=>t in y},(p.get=y=>y[t]),u>2),a=(0, o[v])(P[b],d),c._=1,Ee(a)&&(P[b]=a);return P&&ut(n,t,P),n},jt=(r,e,t)=>Wt(r,e+"",t);var _=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&Q("Object expected");var o,n;t&&(o=e[Oe("asyncDispose")]),o===void 0&&(o=e[Oe("dispose")],t&&(n=o)),typeof o!="function"&&Q("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 Eo=()=>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,l=Eo();function qt(r,e,t){try{return e(process.env[r])}catch{return t}}function V(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 Xt(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 Fo=module$1.createRequire(l),Yt=qt("PUP_LOG_LEVEL",V,2),Ne=path.dirname(Fo.resolve("pup-recorder/package.json"));path.join(Ne,"dist","app.cjs");var Kt=path.join(Ne,"dist","runtime","audio_preload.cjs"),Jt=path.join(Ne,"dist","runtime","shoot_preload.cjs"),Qt=path.join(Ne,"dist","runtime","render_preload.cjs");var ft="<pup@debug>",ht="<pup@info>",wt="<pup@warn>",gt="<pup@error>",_t="<pup@fatal>";function Se(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Zt,er,tr,rr,or,Z;or=[Se],rr=[Se],tr=[Se],er=[Se],Zt=[Se];var H=class{constructor(e=Yt){this._level=e;zt(Z,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);});})}};Z=$t(),se(Z,1,"debug",or,H),se(Z,1,"info",rr,H),se(Z,1,"warn",tr,H),se(Z,1,"error",er,H),se(Z,1,"fatal",Zt,H),pt(Z,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 Mo="[Crash]";function ir(){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(Mo,"set dump to",r);}function ae(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 sr(){let r=process.argv,e=r.find(o=>o.startsWith(Oo));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 Do=1920,No=1080,Lo=30,Vo=5,Ho=10,Uo=["out/html.mp4","out/html.webm"],ar=F__default.default.object({duration:F__default.default.number().describe("Duration in seconds"),width:F__default.default.number().describe("Video width"),height:F__default.default.number().describe("Video height"),fps:F__default.default.number().describe("Frames per second"),withAudio:F__default.default.boolean().describe("Capture and encode audio"),outFiles:F__default.default.array(F__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:F__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:F__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:F__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:F__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:F__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:F__default.default.number().describe("Window load timeout in seconds"),screenshots:F__default.default.array(F__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),cr={width:Do,height:No,fps:Lo,duration:Vo,outFiles:Uo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:Ho,screenshots:[]};function Go(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 ur(r){let e=ar.shape,t=cr;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("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run(Go(o),{width:ae(V,t.width)(n.width),height:ae(V,t.height)(n.height),fps:ae(V,t.fps)(n.fps),duration:ae(V,t.duration)(n.duration),outFiles:lt(Xt)(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,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:ae(V,t.windowTimeout)(n.windowTimeout),screenshots:lt(V)(n.screenshots)});}catch(i){w.fatal(i);}}),await commander.program.parseAsync(sr());}var Le=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 Ve(r){return new Promise(e=>setTimeout(e,r))}function ee(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 bt(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}var He=5e3;function Ue(r,e,t){return ee(r.sendCommand(e,t),He,`cdp.${e}`)}function xt(r,e){return ee(Ue(r,"Runtime.evaluate",{expression:e}),He,"evalIn")}function pr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${He}ms`));},He),i=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Ue(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function mr(r){await Ue(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function We(r,e){await Ue(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var ce=32;var lr="stego-tick";function fr(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=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var wo=Object.create;var ut=Object.defineProperty;var go=Object.getOwnPropertyDescriptor;var Oe=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),J=r=>{throw TypeError(r)};var $t=(r,e,t)=>e in r?ut(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Gt=r=>[,,,wo(null)],zt=["class","method","getter","setter","accessor","field","value","get","set"],Ce=r=>r!==void 0&&typeof r!="function"?J("Function expected"):r,_o=(r,e,t,o,n)=>({kind:zt[r],name:e,metadata:o,addInitializer:i=>t._?J("Already initialized"):n.push(Ce(i||null))}),pt=(r,e)=>$t(e,Oe("metadata"),r[3]),jt=(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},de=(r,e,t,o,n,i)=>{var a,c,d,p,u=e&7,l=false,m=false,h=2,_=zt[u+5],E=r[h]||(r[h]=[]),v=((n=n.prototype),go(n,t));for(var y=o.length-1;y>=0;y--)d=_o(u,t,c={},r[3],E),(d.static=l,d.private=m,p=d.access={has:P=>t in P},(p.get=P=>P[t]),u>2),a=(0, o[y])(v[_],d),c._=1,Ce(a)&&(v[_]=a);return v&&ut(n,t,v),n},qt=(r,e,t)=>$t(r,e+"",t);var w=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&J("Object expected");var o,n;t&&(o=e[Oe("asyncDispose")]),o===void 0&&(o=e[Oe("dispose")],t&&(n=o)),typeof o!="function"&&J("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 yo=()=>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=yo();function Yt(r,e,t){try{return e(process.env[r])}catch{return t}}function L(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 Xt(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 Eo=module$1.createRequire(f),Kt=Yt("PUP_LOG_LEVEL",L,2),Le=path.dirname(Eo.resolve("pup-recorder/package.json"));path.join(Le,"dist","app.cjs");var Qt=path.join(Le,"dist","runtime","audio_preload.cjs"),Jt=path.join(Le,"dist","runtime","shoot_preload.cjs"),Zt=path.join(Le,"dist","runtime","render_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 er,tr,rr,or,nr,Z;nr=[ke],or=[ke],rr=[ke],tr=[ke],er=[ke];var N=class{constructor(e=Kt){this._level=e;jt(Z,5,this);qt(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);});})}};Z=Gt(),de(Z,1,"debug",nr,N),de(Z,1,"info",or,N),de(Z,1,"warn",rr,N),de(Z,1,"error",tr,N),de(Z,1,"fatal",er,N),pt(Z,N);var b=new N;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?b.error(t):r<=constants.AV_LOG_WARNING&&b.warn(t));});var Ro="[Crash]";function sr(){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}),b.debug(Ro,"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 Io="--pup-priv-args";function ar(){let r=process.argv,e=r.find(o=>o.startsWith(Io));if(!e)return b.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)),b.debug("pupargs",t),t}var Bo=1920,Mo=1080,Oo=30,Do=5,Lo=10,No=["out/html.mp4","out/html.webm"],cr=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"),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")}),dr={width:Bo,height:Mo,fps:Oo,duration:Do,outFiles:No,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:Lo,screenshots:[]};function Uo(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 pr(r){let e=cr.shape,t=dr;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("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run(Uo(o),{width:ue(L,t.width)(n.width),height:ue(L,t.height)(n.height),fps:ue(L,t.fps)(n.fps),duration:ue(L,t.duration)(n.duration),outFiles:lt(Xt)(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,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:ue(L,t.windowTimeout)(n.windowTimeout),screenshots:lt(L)(n.screenshots)});}catch(i){b.fatal(i);}}),await commander.program.parseAsync(ar());}var Ne=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 Ve(r){return new Promise(e=>setTimeout(e,r))}function ee(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 bt(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 He(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 Ue=5e3;function We(r,e,t){return ee(r.sendCommand(e,t),Ue,`cdp.${e}`)}function xt(r,e){return ee(We(r,"Runtime.evaluate",{expression:e}),Ue,"evalIn")}function mr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${Ue}ms`));},Ue),i=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),We(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function lr(r){await We(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function $e(r,e){await We(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var pe=32;var fr="stego-tick";function hr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -32,7 +32,7 @@
32
32
  (function() {
33
33
  const { ipcRenderer } = require('electron');
34
34
  const WIDTH = ${t};
35
- const MARKER_WIDTH = ${ce};
35
+ const MARKER_WIDTH = ${pe};
36
36
  const canvas = document.getElementById('stego');
37
37
  const ctx = canvas.getContext('2d', { willReadFrequently: true });
38
38
  let startTime = null;
@@ -63,7 +63,7 @@
63
63
  }
64
64
 
65
65
  ctx.putImageData(imageData, 0, 0);
66
- ipcRenderer.send('${lr}');
66
+ ipcRenderer.send('${fr}');
67
67
  }
68
68
 
69
69
  function updateLoop() {
@@ -92,6 +92,6 @@
92
92
  })();
93
93
  </script>
94
94
  </body>
95
- </html>`}function $e(r,e){let{width:t,height:o}=e;if(t<ce||o<2)return;let n=o-1,i=0;for(let s=0;s<ce;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 hr(r){return xt(r,"__pup_start_stego__()")}async function wr(r,e){await xt(r.debugger,`__pup_draw_stego__(${e})`);}async function gr(r){let e=new Promise(t=>r.ipc.once(lr,t));await ee(e,5e3,"stego tick");}var vt="pup",zo="pup-frame",_r={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:vt,privileges:_r},{scheme:zo,privileges:_r}]);function xr(){electron.protocol.handle(vt,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=fr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function vr(r,e){let t=new URL(`${vt}://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()}function jo(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=255,s=0,a=255,c=0,d=255,p=0;for(let u=0;u<t;u+=n)for(let f=0;f<e;f+=o){let m=(u*e+f)*4,h=r.readUInt8(m),b=r.readUInt8(m+1),g=r.readUInt8(m+2);i=Math.min(i,g),s=Math.max(s,g),a=Math.min(a,b),c=Math.max(c,b),d=Math.min(d,h),p=Math.max(p,h);}return Math.max(s-i,c-a,p-d)<=8}var de=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,jo(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var ue=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 Ce="libvpx-vp9";async function U(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=_(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 te(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=_(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 A(){let r=new nodeAv.Packet;return r.alloc(),r}async function pe(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 W=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=te(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=te(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=A();}async png(){var o=[];try{let e=_(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=_(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 hn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Ge=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=A(),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=_(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 f=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=_(f,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=hn[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,b=true;}finally{x(f,h,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=_(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 pe(this._ctx,this._pkt,this._stream,e)}};function G(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 $=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 z=Buffer.from([0,0,0,1]);var Et=16;var St=23,le=32,fe=33,ze=34,Ar=39;function Tr(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 Ct(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function D(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}=Tr(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function Ft(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Tr(t[0],t[1]),[i,s]=Ct(o,e,n);return t[0]=i,t[1]=s,t}function N(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 re(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 wn=48,Br=24,gn=2,_n=10,kt=0,bn=1;function Rr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Ir(r,e){let t=N(r);return Rr(t,e+gn,0),Rr(t,e+_n,1),re(t)}function je(r){let e=D(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===le?n=Ir(o.data,wn):o.type===fe&&(n=Ir(o.data,Br)),t.push(z,n);}return Buffer.concat(t)}function xn(r,e,t){let o=N(r),n=new B(o),i=new $;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 re(G(i.bits))}function vn(r,e,t,o){let n=N(r),i=new B(n),s=new $;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 re(G(s.bits))}function Mr(r){let e=Br+96;return xn(r,e,1)}function Or(r){return vn(r,16,1,1)}function yn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function Pn(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 En(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>=Et&&e<=St;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))):Pn(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===bn||n===kt)&&(r.read(1)&&(r.readUe(),n===kt&&r.readUe()),n===kt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),yn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Dr(r,e,t){let o=N(r),n=new B(o),i=new B(o),s=En(i,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new $;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Et&&e<=St&&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 re(Buffer.concat([G(d.bits),o.subarray(c)]))}function Sn(r){let e=new B(N(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 Cn(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 Fn(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 Nr(r,e,t){let o=Sn(r);if(!o)return r;let n=new $;return Cn(n,o),Fn(n,o,e,t),n.bits.push(1),n.align(0),re(G(n.bits))}function Lr(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 kn(r,e){return r===fe?Mr(e):r===ze?Or(e):e}function Vr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=D(e),n=D(t),i=new Map;for(let c of n){if(c.type===le)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===le?Nr(c.data,r.width,r.height):c.data;if(s.push(z,d),!a.has(c.type)){a.add(c.type);for(let p of i.get(c.type)??[]){let u=kn(c.type,p.data);s.push(z,Ft(u,1));}}}return s.push(An()),Buffer.concat(s)}function An(){let[t,o]=Ct(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([z,Buffer.from([t,o]),Buffer.from([165,4]),G(n),Buffer.from([128])])}function Hr(r,e,t){let o=[];for(let n of r)o.push(z,n.data);for(let n of e)if(n.type<le){let i=Dr(n.data,n.type,t);o.push(z,Ft(i,1));}return Buffer.concat(o)}var qe=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=Hr(D(e.data),D(t.data),a);n.data=je(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 j(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Bn(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 Mn(r){let e=new B(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&j("sps_max_sub_layers_minus1",t,"0"),e.read(1),Bn(e,t),e.readUe();let o=e.readUe();o===3&&j("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let f=0;f<s;f++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&j("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&j("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&j("num_short_term_ref_pic_sets",c,"\u22641");let d=0;if(c===1){let f=e.readUe(),m=e.readUe();d=f+m;for(let h=0;h<f;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&&j("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 On(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&&j("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)&&j("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=D(r),t=e.find(s=>s.type===fe),o=e.find(s=>s.type===ze);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=Mn(N(t.data)),i=On(N(o.data));return {...n,...i}}var Xe=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new qe({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var k=[];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=_(k,new DisposableStack);let u=p.use(await U({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let f=p.use(await U({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!f.extraData)throw new Error("nvenc: codec extradata missing");let m=Ur(u.extraData);let h=s.addStream(u,"hvc1");let b=Vr({baseExtradata:u.extraData,alphaExtradata:f.extraData,width:t,height:o});h.codecpar.extradata=je(b);let g=t*o;let E=(t+1>>1)*(o+1>>1);let P=Buffer.alloc(g+E*2);P.fill(128,g);let v=p.use(A());let y=p.use(A());let S=p.use(te(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:f,basePkt:v,alphaPkt:y,stream:h,alphaSwFrame:S,alphaBuf:P,hevcCfg:m})}catch(C){var T=C,M=true;}finally{x(k,T,M);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,a=this._pts++;Lr(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 he=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 f=[];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=_(f,new DisposableStack);let d=c.use(await U({codec:a,...s,codecTag:o,options:n},"videoCtx.open2"));let p=c.use(A());let u=i.addStream(d,o);c.move();return new r(d,p,u)}catch(m){var h=m,b=true;}finally{x(f,h,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 pe(this._ctx,this._pkt,this._stream,e)}};var Ye=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 U({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=_(m,new DisposableStack);p.use(d);let u=p.use(A());let f=a.addStream(d,"hvc1");p.move();return new r(d,u,f)}catch(h){var b=h,g=true;}finally{x(m,b,g);}}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 pe(this._ctx,this._pkt,this._stream,e)}};var Ke="[Encoder]";async function $r(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(Ke,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ye.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(Ke,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Xe.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d}}catch(E){w.warn(Ke,"Hardware codec session limits reached, use software encoder",E),d&&c?.dispose();}w.debug(Ke,"using software libx265 HEVC alpha encoder");let p=_(m,new DisposableStack);let u=p.use(await he.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 f=p.use(await W.create(t,o));p.move();return {video:u,codec:f,ownsHw:!1}}catch(h){var b=h,g=true;}finally{x(m,b,g);}}var we=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=_(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 Ae=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=_(s,new AsyncDisposableStack,!0);let o=t.use(new we(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 $r({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 he.create({width:o,height:n,fps:i,codecName:Ce,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await W.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 Ge.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 ge=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(v=>Ae.kindFromPath(v));let d=!a&&c.includes("mp4");let p=_(h,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let f=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let m=[];for(let v=0;v<i.length;v++){let y=await Ae.create({outFile:i[v],kind:c[v],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[v]==="mp4"&&f?u:void 0});p.use(y),m.push(y);}p.move();return new r({sinks:m,sharedHw:u,limiter:new ue(1),outFiles:i,opts:e})}catch(b){var g=b,E=true;}finally{var P=x(h,g,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=_(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 W.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=_(n,new DisposableStack);let o=t.use(te(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);}}};var Je=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}}};function Qe(r,e){return r.width===e.width&&r.height===e.height}var zr="audio-meta",jr="audio-chunk";function qr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,a)=>{let c=a.sampleRate,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)=>{try{await e.encodeAudio(a);}catch(c){o(c);}};return r.ipc.on(zr,n),r.ipc.on(jr,i),()=>{r.ipc.removeListener(zr,n),r.ipc.removeListener(jr,i);}}var _e=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 Ve(2**s*100+Math.random()*100);}}}}var At=["file:","http:","https:","data:"],hi=/^(file:|https?:|data:)/;function Xr(r){if(hi.test(r))return;let e=`${r.split(":")[0]}:`,t=At.includes(e)?`unsupported protocol: ${e}, expected ${At.join(", ")}`:`invalid source format, expected ${At.join(", ")}`;throw new Error(t)}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]",gi=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),_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 be(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=gi.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Yr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new ue(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 f=t?be(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return w.debug(tt,"start:",{key:m,url:u,proxied:f,method:d.method,source:r,stats:i.stats}),p(f===u?{cancel:false}:{cancel:false,redirectURL:f}),bi(u)?Promise.resolve():a(m,()=>{w.warn(tt,"maybe timeout:",{key:m,url:u,proxied:f,method:d.method,source:r});})});}),n.onHeadersReceived(({responseHeaders:d},p)=>{delete d?.["x-frame-options"],delete d?.["X-Frame-Options"],delete d?.["content-security-policy"],delete d?.["Content-Security-Policy"],p({cancel:false,responseHeaders:d});}),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:f,error:m,resourceType:h}=d;w[o&&h==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](tt,"error:",{key:p,url:u,method:f,error:m,resourceType:h,source:r});});}function Tt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var oe="[Window]",Kr=new Error("window timeout"),vi=["%cElectron Security Warning","Mixed Content: The page at"];function yi({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:Kr),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(oe,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{w.debug(oe,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,f,m,h)=>{let b=`did-fail-load: ${JSON.stringify({url:h,source:r,code:f,desc:m})}`;w.error(oe,b),p(new Error(b));}),e.webContents.once("render-process-gone",(u,{exitCode:f,reason:m})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:f,reason:m})}`;w.error(oe,h),p(new Error(h));}),t();})}function xe(r){return new Promise(e=>{Tt(r);let t=setTimeout(()=>{try{w.warn(oe,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function Pi(r){return r.deterministic?Jt:r.withAudio?Kt:Qt}async function Jr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:a}=e,c=a?be(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,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:Pi(e)}});Yr({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:f,sourceId:m})=>{if(p==="warning"&&vi.find(b=>u.startsWith(b)))return;let h=[oe,"console:",{message:u,lineNumber:f,sourceId:m,source:r}];p==="error"?w.error(...h):w.debug(...h),e.onConsole(p,u);});try{let p=vr(c,{width:i,height:s});await yi({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await xe(d),p}return d}var Ei=Ze({fn:Jr,maxAttempts:2});async function rt({source:r,renderer:e,onCreated:t,signal:o}){Xr(r),o?.throwIfAborted();let n,i;try{n=await Ei({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>Jr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Kr)return w.warn(oe,`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(),Tt(n),await Ve(2e3),await xe(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 Qr="[Render]";async function Zr(r){var ve=[];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=_(ve,await ge.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let f=new _e({marks:r.screenshots,width:o,height:n,outFiles:a});let m=Math.ceil(t*i);let h=1e3/t;let b={width:o,height:n+1};let g=0;let E;let P=[];let v;let y=0;let S;let k;let C;let T;let M=new Je(t);let Re=new de(o,n);let Ie;let Y=R=>{g++,Re.sample(R),u.encodeBGRA(R).catch(I=>S??=I);};let Be=(R,I,ye)=>{if(S??=d?.reason,S){C?.(S);return}let J=ye.getSize();if(!Qe(J,b)){We(Me,b);return}let dt=ye.toBitmap(),ie=$e(dt,J);if(ie===void 0){S??=new Error(`no timestamp @ ${g}`);return}if(v!==void 0&&ie-v<h*.8)return;let Pe=Buffer.from(dt.buffer,dt.byteOffset,n*o*4);if(E=Pe,f.capture(ie,Pe),v===void 0)Y(Pe),M.wrote();else {let Dt=ie-v;if(Dt<=h*1.2)Y(Pe),M.wrote();else {let Nt=Math.round(Dt/h);M.dropped(Nt-1),M.wrote();for(let Lt=0;Lt<Nt&&g<m;Lt++)Y(Pe);}}v=ie;let Ot=Math.floor(g/m*100);Ot!==y&&(y=Ot,p(y));let _o=i*1e3;(ie>=_o-h*.5||g>=m)&&k?.();};let O=await rt({source:e,renderer:r,signal:d,onCreated:R=>{s&&(Ie=qr({wc:R.webContents,encoder:u,getVideoTimeMs:()=>v??0,onError:I=>S??=I}));}});let Me=O.webContents.debugger;try{O.webContents.stopPainting(),O.webContents.setFrameRate(t),O.webContents.on("paint",Be),O.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>C?.(d.reason),{once:!0}),await hr(Me),await new Promise((R,I)=>{[k,C]=[R,I];let ye=0,J=0;T=setInterval(()=>{if(g!==ye){ye=g,J=0;return}if(J>=3){C?.(new Error("drawable timeout"));return}w.warn(Qr,`${e} render is extremely slow, written=${g} stuck=${J}`),J++,O.webContents.invalidate();},1e3);});}finally{clearInterval(T),O.webContents.off("paint",Be),await xe(O),Ie?.(),await u.finish(),P=await f.finish(E);}if(S||g===0)throw S??new Error("no frames captured");else {let R=M.finalize(),I=Re.finalize();return I>=.5&&w.warn(Qr,`${e} blank-frame ratio ${Math.round(I*100)}% \u2014 possible white/blank screen`),{written:g,jank:R.jank,outFiles:a,blank:I,screenshots:P}}}catch(L){var ne=L,ct=true;}finally{var K=x(ve,ne,ct);K&&await K;}}var Si="[Rerender]",eo=3;async function to(r,e){let t;for(let o=0;o<eo;o++)try{return await e()}catch(n){if(r.aborted)throw n;t=n,w.warn(Si,`retry ${o+1}/${eo}: ${n.message}`);}throw t}var Ci="[Video]";async function ro({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await bt(r.executeJavaScript("window.__pup_video__&&window.__pup_video__.ready()"),t),await bt(r.executeJavaScript(`window.__pup_video__&&window.__pup_video__.advance(${e})`),t);}catch(o){t?.throwIfAborted(),w.warn(Ci,`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([ee(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 v=[];try{let o=_(v,await ot(r,t),!0);let n=o.streams?.find(T=>T.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=_(v,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 f=_(v,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let m=0;for await(var h of f.frames(i.frames(o.packets(n.index)))){var b=[];try{let T=_(b,h);T&&(yield {idx:++m,buf:Ii(T)});}catch(g){var E=g,P=!0;}finally{x(b,E,P);}}}catch(y){var S=y,k=true;}finally{var C=x(v,S,k);C&&await C;}}function Ii(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 Bi="[DecodeSession]",Mi=4,Oi=16,Di=256*1024*1024,Ni=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(Bi,`[${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<=Ni||(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+Mi;)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 E=[];try{let e=_(E,await ot(r),!0);let t=e.streams?.find(k=>k.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=_(E,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var f of e.packets(t.index)){var m=[];try{let k=_(m,f);try{for await(var a of i.frames(k)){var c=[];try{let C=_(c,a);if(C?.decodeErrorFlags===0){s=Math.max(0,Number(C.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(c,p,u);}}}catch{}}catch(h){var b=h,g=!0;}finally{x(m,b,g);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(P){var v=P,y=true;}finally{var S=x(E,v,y);S&&await S;}}async function co({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Ce);if(!o)throw new Error(`stub: encoder not found: ${Ce}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=_(i,new we(n),!0);let u=_(i,await U({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 f=p.addStream(u);await p.open();let m=_(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 b=_(i,A());for(;;){let g=await u.receivePacket(b);if(g===constants.AVERROR_EAGAIN||g===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(g,"stubCtx.receivePacket"),b.streamIndex=f.index,b.duration=h,b.rescaleTs(u.timeBase,f.timeBase),await p.writePacket(b),b.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=Ki(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?be(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?be(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 Ki(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 Ji(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 Zi(await e.getFrame(o.searchParams.get("id")??"",st(o,"idx",1)));case "stub":return Qi(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 Ji(r){return new Response(JSON.stringify(r),{headers:{...q,"content-type":"application/json"}})}function Qi(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 Zi(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 at="[Shoot]",ho=240;async function es({source:r,win:e,size:t,ms:o}){let n,i=0,s,a,c=()=>{clearTimeout(a),clearInterval(s);},d=e.webContents.debugger,p={width:t.width,height:t.height+1};try{return await new Promise((u,f)=>{s=setInterval(()=>{if(i>=3){f(new Error("drawable timeout"));return}i++,w.warn(at,`${r} render is extremely slow @ ${o}, current: ${n} with ${i} repeats`),e.webContents.invalidate();},1e3);let m=(h,b,g)=>{let E=g.getSize();if(!Qe(E,p)){We(d,p);return}let P=g.crop({x:0,y:p.height-2,width:ce,height:2}),v=$e(P.toBitmap(),{width:ce,height:2});if(v===void 0||Math.abs(v-o)>1){n=v;return}c();let y=g.toBitmap();e.webContents.off("paint",m),u(Buffer.from(y.buffer,y.byteOffset,t.height*t.width*4));};e.webContents.on("paint",m),a=setTimeout(()=>e.webContents.invalidate(),1e3/ho);})}finally{c();}}async function wo(r){var Y=[];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(at,"audio will be ignored on this mode");let u=new _e({marks:r.screenshots,width:o,height:n,outFiles:a});let f=_(Y,fo(r.useInnerProxy),!0);let m=performance.now();let h=rt({source:e,renderer:r,signal:d});let b=_(Y,await ge.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let g=await h;w.debug(at,"init done:",{source:e,cost:performance.now()-m});let E=Math.ceil(t*i);let P=1e3/t;let v=0;let y=0;let S;let k=[];let C;let T=new de(o,n);let M=g.webContents.debugger;let Re=g.webContents.mainFrame;let Ie=Re.frames[0];try{g.webContents.setFrameRate(ho),await mr(M);for(let L=0;L<E;L++){d?.throwIfAborted();let ne=(L+1)*P,ct=gr(g.webContents);await Promise.all([no({frame:Ie,timestampMs:ne,signal:d}),wr(g.webContents,ne)]),await Promise.all([pr(M,P),ct]);let K=await es({source:e,win:g,size:{width:o,height:n},ms:ne});if(S=K,u.capture(ne,K),T.sample(K),b.encodeBGRA(K).catch(I=>C??=I),v++,C)throw C;let R=Math.floor(v/E*100);R!==y&&(y=R,p(y));}}finally{await xe(g),await b.finish(),k=await u.finish(S);}if(C)throw C;if(v===0)throw new Error("no frames captured");else {let L=T.finalize();return L>=.5&&w.warn(at,`${e} blank-frame ratio ${Math.round(L*100)}% \u2014 possible white/blank screen`),{written:v,jank:0,outFiles:a,blank:L,screenshots:k}}}catch(Be){var O=Be,Me=true;}finally{var ve=x(Y,O,Me);ve&&await ve;}}var is="[App]";function go(){w.debug(is,"gpu features:",electron.app.getGPUFeatureStatus());}var Te=new AbortController,Mt=false;ir();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",go);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",()=>Te.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&Te.abort(e.reason);});ur({name:"app",run:async(r,e)=>{let t=new Le;try{await electron.app.whenReady(),xr(),go();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?wo:Zr;Te.signal.throwIfAborted();let n=await to(Te.signal,()=>o({source:r,...e,signal:Te.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
+ </html>`}function Ge(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 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 wr(r){return xt(r,"__pup_start_stego__()")}async function gr(r,e){await xt(r.debugger,`__pup_draw_stego__(${e})`);}async function _r(r){let e=new Promise(t=>r.ipc.once(fr,t));await ee(e,5e3,"stego tick");}var yt="pup",Wo="pup-frame",br={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:yt,privileges:br},{scheme:Wo,privileges:br}]);function yr(){electron.protocol.handle(yt,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=hr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function vr(r,e){let t=new URL(`${yt}://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()}function $o(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=255,s=0,a=255,c=0,d=255,p=0;for(let u=0;u<t;u+=n)for(let l=0;l<e;l+=o){let m=(u*e+l)*4,h=r.readUInt8(m),_=r.readUInt8(m+1),g=r.readUInt8(m+2);i=Math.min(i,g),s=Math.max(s,g),a=Math.min(a,_),c=Math.max(c,_),d=Math.min(d,h),p=Math.max(p,h);}return Math.max(s-i,c-a,p-d)<=8}var me=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,$o(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var le=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 Ae="libvpx-vp9";async function V(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=w(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 te(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=w(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 T(){let r=new nodeAv.Packet;return r.alloc(),r}async function fe(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 U=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=te(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=te(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=T();}async png(){var o=[];try{let e=w(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=w(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 mn={[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=T(),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=w(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=w(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=mn[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=w(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 fe(this._ctx,this._pkt,this._stream,e)}};function $(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 W=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]);}},I=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 G=Buffer.from([0,0,0,1]);var Et=16;var St=23,we=32,ge=33,je=34,Tr=39;function Rr(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 Ft(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function M(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}=Rr(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}=Rr(t[0],t[1]),[i,s]=Ft(o,e,n);return t[0]=i,t[1]=s,t}function O(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 re(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 ln=48,Mr=24,fn=2,hn=10,kt=0,wn=1;function Ir(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Br(r,e){let t=O(r);return Ir(t,e+fn,0),Ir(t,e+hn,1),re(t)}function qe(r){let e=M(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===we?n=Br(o.data,ln):o.type===ge&&(n=Br(o.data,Mr)),t.push(G,n);}return Buffer.concat(t)}function gn(r,e,t){let o=O(r),n=new I(o),i=new W;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 re($(i.bits))}function _n(r,e,t,o){let n=O(r),i=new I(n),s=new W;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 re($(s.bits))}function Or(r){let e=Mr+96;return gn(r,e,1)}function Dr(r){return _n(r,16,1,1)}function bn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function xn(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 yn(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>=Et&&e<=St;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))):xn(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===wn||n===kt)&&(r.read(1)&&(r.readUe(),n===kt&&r.readUe()),n===kt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),bn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Lr(r,e,t){let o=O(r),n=new I(o),i=new I(o),s=yn(i,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new W;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Et&&e<=St&&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 re(Buffer.concat([$(d.bits),o.subarray(c)]))}function vn(r){let e=new I(O(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 Pn(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 En(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 Nr(r,e,t){let o=vn(r);if(!o)return r;let n=new W;return Pn(n,o),En(n,o,e,t),n.bits.push(1),n.align(0),re($(n.bits))}function Vr(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 Sn(r,e){return r===ge?Or(e):r===je?Dr(e):e}function Hr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=M(e),n=M(t),i=new Map;for(let c of n){if(c.type===we)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===we?Nr(c.data,r.width,r.height):c.data;if(s.push(G,d),!a.has(c.type)){a.add(c.type);for(let p of i.get(c.type)??[]){let u=Sn(c.type,p.data);s.push(G,Ct(u,1));}}}return s.push(Fn()),Buffer.concat(s)}function Fn(){let[t,o]=Ft(Tr,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([G,Buffer.from([t,o]),Buffer.from([165,4]),$(n),Buffer.from([128])])}function Ur(r,e,t){let o=[];for(let n of r)o.push(G,n.data);for(let n of e)if(n.type<we){let i=Lr(n.data,n.type,t);o.push(G,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=Ur(M(e.data),M(t.data),a);n.data=qe(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 z(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Tn(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 Rn(r){let e=new I(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&z("sps_max_sub_layers_minus1",t,"0"),e.read(1),Tn(e,t),e.readUe();let o=e.readUe();o===3&&z("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)&&z("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&z("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&z("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&&z("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 In(r){let e=new I(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&z("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)&&z("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 Wr(r){let e=M(r),t=e.find(s=>s.type===ge),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=Rn(O(t.data)),i=In(O(o.data));return {...n,...i}}var Xe=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 k=[];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=w(k,new DisposableStack);let u=p.use(await V({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let l=p.use(await V({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!l.extraData)throw new Error("nvenc: codec extradata missing");let m=Wr(u.extraData);let h=s.addStream(u,"hvc1");let _=Hr({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});h.codecpar.extradata=qe(_);let g=t*o;let E=(t+1>>1)*(o+1>>1);let v=Buffer.alloc(g+E*2);v.fill(128,g);let y=p.use(T());let P=p.use(T());let S=p.use(te(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:y,alphaPkt:P,stream:h,alphaSwFrame:S,alphaBuf:v,hevcCfg:m})}catch(F){var R=F,Y=true;}finally{x(k,R,Y);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,a=this._pts++;Vr(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 _e=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=w(l,new DisposableStack);let d=c.use(await V({codec:a,...s,codecTag:o,options:n},"videoCtx.open2"));let p=c.use(T());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 fe(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 V({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=w(m,new DisposableStack);p.use(d);let u=p.use(T());let l=a.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(h){var _=h,g=true;}finally{x(m,_,g);}}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 fe(this._ctx,this._pkt,this._stream,e)}};var Qe="[Encoder]";async function Gr(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 b.debug(Qe,"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 b.debug(Qe,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Xe.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d}}catch(E){b.warn(Qe,"Hardware codec session limits reached, use software encoder",E),d&&c?.dispose();}b.debug(Qe,"using software libx265 HEVC alpha encoder");let p=w(m,new DisposableStack);let u=p.use(await _e.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 U.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(h){var _=h,g=true;}finally{x(m,_,g);}}var be=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=w(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 Ie=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=w(s,new AsyncDisposableStack,!0);let o=t.use(new be(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 Gr({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 _e.create({width:o,height:n,fps:i,codecName:Ae,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await U.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 xe=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=>Ie.kindFromPath(y));let d=!a&&c.includes("mp4");let p=w(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 P=await Ie.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(P),m.push(P);}p.move();return new r({sinks:m,sharedHw:u,limiter:new le(1),outFiles:i,opts:e})}catch(_){var g=_,E=true;}finally{var v=x(h,g,E);v&&await v;}}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=w(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 U.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=w(n,new DisposableStack);let o=t.use(te(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);}}};var Je=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}}};function Ze(r,e){return r.width===e.width&&r.height===e.height}var jr="audio-meta",qr="audio-chunk";function Yr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,a)=>{let c=a.sampleRate,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)=>{try{await e.encodeAudio(a);}catch(c){o(c);}};return r.ipc.on(jr,n),r.ipc.on(qr,i),()=>{r.ipc.removeListener(jr,n),r.ipc.removeListener(qr,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 et({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 Ve(2**s*100+Math.random()*100);}}}}var At=["file:","http:","https:","data:"],mi=/^(file:|https?:|data:)/;function Xr(r){if(mi.test(r))return;let e=`${r.split(":")[0]}:`,t=At.includes(e)?`unsupported protocol: ${e}, expected ${At.join(", ")}`:`invalid source format, expected ${At.join(", ")}`;throw new Error(t)}var tt=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 rt="[Network]",fi=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),hi=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function wi(r){for(let e of hi)if(r.startsWith(e))return true;return false}function ve(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=fi.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Kr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new le(256),s=new Map;async function a(d,p){let u=new tt;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 b.debug(rt,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),wi(u)?Promise.resolve():a(m,()=>{b.warn(rt,"maybe timeout:",{key:m,url:u,proxied:l,method:d.method,source:r});})});}),n.onHeadersReceived(({responseHeaders:d},p)=>{delete d?.["x-frame-options"],delete d?.["X-Frame-Options"],delete d?.["content-security-policy"],delete d?.["Content-Security-Policy"],p({cancel:false,responseHeaders:d});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;c(p),b.debug(rt,"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;b[o&&h==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](rt,"error:",{key:p,url:u,method:l,error:m,resourceType:h,source:r});});}function Tt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var oe="[Window]",Qr=new Error("window timeout"),_i=["%cElectron Security Warning","Mixed Content: The page at"];function bi({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",()=>{b.debug(oe,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{b.debug(oe,"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})}`;b.error(oe,_),p(new Error(_));}),e.webContents.once("render-process-gone",(u,{exitCode:l,reason:m})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;b.error(oe,h),p(new Error(h));}),t();})}function Pe(r){return new Promise(e=>{Tt(r);let t=setTimeout(()=>{try{b.warn(oe,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function xi(r){return r.deterministic?Jt:r.withAudio?Qt:Zt}async function Jr({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,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:xi(e)}});Kr({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"&&_i.find(_=>u.startsWith(_)))return;let h=[oe,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?b.error(...h):b.debug(...h),e.onConsole(p,u);});try{let p=vr(c,{width:i,height:s});await bi({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 yi=et({fn:Jr,maxAttempts:2});async function ot({source:r,renderer:e,onCreated:t,signal:o}){Xr(r),o?.throwIfAborted();let n,i;try{n=await yi({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>Jr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Qr)return b.warn(oe,`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(),Tt(n),await Ve(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 vi="[Render]";async function Zr(r){var Se=[];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=w(Se,await xe.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 g=0;let E;let v=[];let y;let P=0;let S;let k;let F;let R;let Y=new me(o,n);let X=new Je(t);let Be;let K=A=>{g++,Y.sample(A),u.encodeBGRA(A).catch(H=>S??=H);};let Ee=(A,H,ie)=>{if(S??=d?.reason,S){F?.(S);return}let se=ie.getSize();if(!Ze(se,_)){$e(Me,_);return}let ae=ie.toBitmap(),ce=Ge(ae,se);if(ce===void 0){S??=new Error(`no timestamp @ ${g}`);return}if(y!==void 0&&ce-y<h*.8)return;let Fe=Buffer.from(ae.buffer,ae.byteOffset,n*o*4);if(E=Fe,l.capture(ce,Fe),y===void 0)K(Fe),X.wrote();else {let Lt=ce-y;if(Lt<=h*1.2)K(Fe),X.wrote();else {let Nt=Math.round(Lt/h);X.dropped(Nt-1),X.wrote();for(let Vt=0;Vt<Nt&&g<m;Vt++)K(Fe);}}y=ce;let Dt=Math.floor(g/m*100);Dt!==P&&(P=Dt,p(P));let ho=i*1e3;(ce>=ho-h*.5||g>=m)&&k?.();};let B=await ot({source:e,renderer:r,signal:d,onCreated:A=>{s&&(Be=Yr({wc:A.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:H=>S??=H}));}});let Me=B.webContents.debugger;try{B.webContents.stopPainting(),B.webContents.setFrameRate(t),B.webContents.on("paint",Ee),B.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>F?.(d.reason),{once:!0}),await wr(Me),await new Promise((A,H)=>{[k,F]=[A,H];let ie=0,se=0;R=He(async()=>{if(g!==ie){ie=g,se=0;return}if(se>=3){F?.(new Error(`renderer timeout @ ${g} lastTs ${ie}`));return}se++;let ae=await B.webContents.capturePage().catch(()=>null);ae&&!B.isDestroyed()&&Ee(void 0,void 0,ae);},1e3/t);});}finally{R?.(),B.webContents.off("paint",Ee),await Pe(B),Be?.(),await u.finish(),v=await l.finish(E);}if(S||g===0)throw S??new Error("no frames captured");else {let A=Y.finalize();return A>=.5&&b.warn(vi,`${e} blank-frame ratio ${Math.round(A*100)}% \u2014 possible white/blank screen`),{written:g,outFiles:a,blank:A,screenshots:v,jank:X.finalize().jank}}}catch(D){var ne=D,dt=true;}finally{var Q=x(Se,ne,dt);Q&&await Q;}}var Pi="[Video]";async function eo({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await bt(r.executeJavaScript("window.__pup_video__&&window.__pup_video__.ready()"),t),await bt(r.executeJavaScript(`window.__pup_video__&&window.__pup_video__.advance(${e})`),t);}catch(o){t?.throwIfAborted(),b.warn(Pi,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var to="__pup_tick__";async function ro(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${to}&&window.${to}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([ee(n,5e3,"tick.executeJavaScript"),eo(r)]);}var Si="8000000";function nt(r,e){let t={signal:e,options:{rw_timeout:Si}};return api.Demuxer.open(r,t)}async function*oo({src:r,meta:e,signal:t}){var y=[];try{let o=w(y,await nt(r,t),!0);let n=o.streams?.find(R=>R.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=w(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=w(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 R=w(_,h);R&&(yield {idx:++m,buf:Ai(R)});}catch(g){var E=g,v=!0;}finally{x(_,E,v);}}}catch(P){var S=P,k=true;}finally{var F=x(y,S,k);F&&await F;}}function Ai(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 Ti="[DecodeSession]",Ri=4,Ii=16,Bi=256*1024*1024,Mi=3,it=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Ii,Math.floor(Bi/(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,b.warn(Ti,`[${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<=Mi||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=oo({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+Ri;)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 no(r){var E=[];try{let e=w(E,await nt(r),!0);let t=e.streams?.find(k=>k.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=w(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 k=w(m,l);try{for await(var a of i.frames(k)){var c=[];try{let F=w(c,a);if(F?.decodeErrorFlags===0){s=Math.max(0,Number(F.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(c,p,u);}}}catch{}}catch(h){var _=h,g=!0;}finally{x(m,_,g);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(v){var y=v,P=true;}finally{var S=x(E,y,P);S&&await S;}}async function so({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Ae);if(!o)throw new Error(`stub: encoder not found: ${Ae}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=w(i,new be(n),!0);let u=w(i,await V({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=w(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 _=w(i,T());for(;;){let g=await u.receivePacket(_);if(g===constants.AVERROR_EAGAIN||g===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(g,"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 st=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=qi(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=ao(i.width*d),a=ao(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 it(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=>so({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=et({fn:no})(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 qi(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function ao(r){let e=Math.round(r);return Math.max(2,e-e%2)}var uo="[FrameProtocol]",po="pup-frame",j={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function mo(r){let e=new st(r);return electron.protocol.handle(po,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:j});let o=new URL(t.url);b.debug(uo,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return Yi(await e.open({src:o.searchParams.get("src")??"",fps:at(o,"fps",30),dstW:at(o,"w",0),dstH:at(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return Ki(await e.getFrame(o.searchParams.get("id")??"",at(o,"idx",1)));case "stub":return Xi(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 b.error(uo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:j})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(po),await e.closeAll();}}}function Yi(r){return new Response(JSON.stringify(r),{headers:{...j,"content-type":"application/json"}})}function Xi(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 Ki(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 at(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Mt="[Shoot]",Qi=240,Ji=10;async function Zi({win:r,fps:e,size:t,ms:o}){let n,i=0,s,a=r.webContents.debugger,c={width:t.width,height:t.height+1};try{return await new Promise((d,p)=>{let u=(l,m,h)=>{let _=h.getSize();if(!Ze(_,c)){$e(a,c);return}let g=h.crop({x:0,y:c.height-2,width:pe,height:2}),E=Ge(g.toBitmap(),{width:pe,height:2});if(E===void 0||Math.abs(E-o)>1){n=E;return}let v=h.toBitmap();r.webContents.off("paint",u),d(Buffer.from(v.buffer,v.byteOffset,t.height*t.width*4));};r.webContents.on("paint",u),s=He(async()=>{i>=Ji&&p(new Error(`renderer timeout @ ${o} lastTs ${n}`)),i++;let l=await r.webContents.capturePage().catch(()=>null);l&&!r.isDestroyed()&&u(void 0,void 0,l);},1e3/e);})}finally{s?.();}}async function lo(r){var K=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;s&&b.warn(Mt,"audio will be ignored on this mode");let u=new ye({marks:r.screenshots,width:o,height:n,outFiles:a});let l=w(K,mo(r.useInnerProxy),!0);let m=performance.now();let h=ot({source:e,renderer:r,signal:d});let _=w(K,await xe.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let g=await h;b.debug(Mt,"init done:",{source:e,cost:performance.now()-m});let E=Math.ceil(t*i);let v=1e3/t;let y=0;let P=0;let S;let k=[];let F;let R=new me(o,n);let Y=g.webContents.debugger;let X=g.webContents.mainFrame;let Be=X.frames[0];try{g.webContents.setFrameRate(Qi),await lr(Y);for(let D=0;D<E;D++){d?.throwIfAborted();let ne=(D+1)*v,dt=_r(g.webContents);await Promise.all([ro({frame:Be,timestampMs:ne,signal:d}),gr(g.webContents,ne)]),await Promise.all([mr(Y,v),dt]);let Q=await Zi({source:e,fps:t,win:g,size:{width:o,height:n},ms:ne});if(S=Q,u.capture(ne,Q),R.sample(Q),_.encodeBGRA(Q).catch(H=>F??=H),y++,F)throw F;let A=Math.floor(y/E*100);A!==P&&(P=A,p(P));}}finally{await Pe(g),await _.finish(),k=await u.finish(S);}if(F)throw F;if(y===0)throw new Error("no frames captured");else {let D=R.finalize();return D>=.5&&b.warn(Mt,`${e} blank-frame ratio ${Math.round(D*100)}% \u2014 possible white/blank screen`),{written:y,outFiles:a,blank:D,jank:0,screenshots:k}}}catch(Ee){var B=Ee,Me=true;}finally{var Se=x(K,B,Me);Se&&await Se;}}var ns="[App]";function fo(){b.debug(ns,"gpu features:",electron.app.getGPUFeatureStatus());}var ct=new AbortController,Ot=false;sr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",fo);electron.app.on("before-quit",r=>!Ot&&r.preventDefault());electron.app.on("will-quit",r=>!Ot&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>ct.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&ct.abort(e.reason);});pr({name:"app",run:async(r,e)=>{let t=new Ne;try{await electron.app.whenReady(),yr(),fo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?lo:Zr;ct.signal.throwIfAborted();let n=await o({source:r,...e,signal:ct.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{Ot=true,electron.app.exit();}}});
96
96
  //# sourceMappingURL=app.cjs.map
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErYTI3MDY0MzQ3NGU3MzE4ZC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvYmxhbmtfZnJhbWUudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NpbmsudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjcmVlbnNob3QudHMiLCIuLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uL3NyYy9yZW5kZXJlci9odG1sX2NoZWNrLnRzIiwiLi4vc3JjL2Jhc2Uvd2FpdGFibGVfZXZlbnQudHMiLCIuLi9zcmMvcmVuZGVyZXIvbmV0d29yay50cyIsIi4uL3NyYy9yZW5kZXJlci93aW5kb3cudHMiLCIuLi9zcmMvcmVuZGVyZXIvcmVuZGVyLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlcmVuZGVyLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2FkdmFuY2UudHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9vcGVuLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGVfc2Vzc2lvbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm9iZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9zdHViLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2ZyYW1lX3NlcnZlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm90b2NvbC50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VBcnJheSIsIml0ZW0iLCJzIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJwdXBMb2dMZXZlbCIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwiam9pbiIsInB1cEF1ZGlvUHJlbG9hZCIsInB1cFNob290UHJlbG9hZCIsInB1cFJlbmRlclByZWxvYWQiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIlRBRyIsInN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIiwiZHVtcERpciIsImFwcCIsIm1rZGlyU3luYyIsImNyYXNoUmVwb3J0ZXIiLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX1dJTkRPV19USU1FT1VUIiwiREVGQVVMVF9PVVRfRklMRVMiLCJyZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJub3JtYWxpemVTb3VyY2UiLCJhYnMiLCJyZWFscGF0aFN5bmMiLCJtYWtlQ0xJIiwib3B0aW9ucyIsInNoYXBlIiwiZCIsInByb2dyYW0iLCJzb3VyY2UiLCJvcHRzIiwiZSIsIklwY1dyaXRlciIsInBheWxvYWQiLCJzbGVlcCIsIm1zIiwid2l0aFRpbWVvdXQiLCJwIiwibGFiZWwiLCJ0aW1lciIsImFib3J0YWJsZSIsIm9uQWJvcnQiLCJDRFBfVElNRU9VVF9NUyIsInNlbmQiLCJjZHAiLCJtZXRob2QiLCJwYXJhbXMiLCJldmFsSW4iLCJleHByZXNzaW9uIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwidGltZW91dCIsImhhbmRsZXIiLCJfIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlc2l6ZURyYXdhYmxlIiwic2l6ZSIsIkZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIiwiU1RFR09fVElDS19DSEFOTkVMIiwiYnVpbGRTdGVnb0hUTUwiLCJ0YXJnZXRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsImRyYXdTdGVnbyIsIndjIiwiZXhwZWN0ZWQiLCJ3YWl0U3RlZ29UaWNrIiwic3dhcHBlZCIsInIiLCJQVVBfU0NIRU1FIiwiRlJBTUVfU0NIRU1FIiwiUFJJVklMRUdFRF9QUklWSUxFR0VTIiwicHJvdG9jb2wiLCJzZXR1cFB1cFByb3RvY29sIiwicmVxIiwidXJsIiwic3JjIiwiaHRtbCIsImNyZWF0ZVN0ZWdvVVJMIiwiaXNCbGFua0ZyYW1lIiwiYmdyYSIsInN0ZXBYIiwic3RlcFkiLCJyTWluIiwick1heCIsImdNaW4iLCJnTWF4IiwiYk1pbiIsImJNYXgiLCJ5IiwiYiIsImciLCJCbGFua0ZyYW1lU3RhdHMiLCJmcmFtZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwidiIsImtlZXAiLCJlbnRyeSIsIkZGX0VOQ09ERVJfTElCVlBYX1ZQOSIsIm9wZW5WaWRlb0N0eCIsIl9zdGFjayIsImN0eCIsIkNvZGVjQ29udGV4dCIsInN0YWNrIiwiX191c2luZyIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiayIsIkZGbXBlZ0Vycm9yIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsIm1ha2VGcmFtZSIsInBpeEZtdCIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJCaXRXcml0ZXIiLCJ2YWwiLCJuIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJ6ZXJvcyIsIkFOTkVYX0JfU1RBUlRfQ09ERSIsIk5BTF9CTEFfV19MUCIsIk5BTF9SU1ZfSVJBUF9WQ0wyMyIsIk5BTF9WUFMiLCJOQUxfU1BTIiwiTkFMX1BQUyIsIk5BTF9TRUlfUFJFRklYIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiVlBTX1BUTF9CSVQiLCJTUFNfUFRMX0JJVCIsIlBUTF9USUVSX0JJVCIsIlBUTF9DT01QQVQyX0JJVCIsIlNMSUNFX1RZUEVfQiIsIlNMSUNFX1RZUEVfUCIsInNldEJpdCIsImJpdE9mZnNldCIsIm1hc2siLCJjdXIiLCJwYXRjaFB0bCIsIm5hbERhdGEiLCJwdGxTdGFydEJpdCIsInJic3AiLCJwYXRjaEhldmNBbHBoYVB0bCIsImNodW5rcyIsInJld3JpdGVPbmVVZSIsIm5hbEluIiwibmV3VmFsIiwiYnIiLCJidyIsInJld3JpdGVUd29VZSIsIm5ld1ZhbDEiLCJuZXdWYWwyIiwicmV3cml0ZUFscGhhU3BzIiwic3BzIiwiU1BTX1NFUV9JRF9CSVQiLCJyZXdyaXRlQWxwaGFQcHMiLCJwcHMiLCJyZWFkU2UiLCJ1ZSIsInBhcnNlSW5saW5lU3RSZWZQaWNTZXQiLCJudW1EZWx0YVBvY3NTZXQwIiwiZGVsdGFJZHhNaW51czEiLCJudW1OZWciLCJudW1Qb3MiLCJwYXJzZUhlYWRlclRvQWxpZ25tZW50IiwibmFsVHlwZSIsImNmZyIsImlzSXJhcCIsInNsaWNlVHlwZSIsInJld3JpdGVBbHBoYVNsaWNlSGVhZGVyIiwic2xpY2UiLCJwcm9iZSIsIkIiLCJvbGRBbGlnbkJpdHMiLCJzbGljZURhdGFCeXRlT2Zmc2V0IiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwicm93QmFzZSIsImRzdEJhc2UiLCJyZXdyaXRlQWxwaGFQYXJhbVNldCIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJhRGF0YSIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJEdWFsTGF5ZXJNdXgiLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJ0YWciLCJiYXNlIiwiYWxwaGEiLCJoZXZjQ2ZnIiwiaW50ZXJsZWF2ZWQiLCJmYWlsIiwiZmllbGQiLCJnb3QiLCJza2lwUHRsIiwibWF4U3ViTGF5ZXJzIiwic3ViUHJvZmlsZVByZXNlbnQiLCJzdWJMZXZlbFByZXNlbnQiLCJwYXJzZVNwcyIsInNwc1Jic3AiLCJjaHJvbWFGb3JtYXQiLCJsb2cyTWF4UG9jTHNiIiwib3JkZXJDb3VudCIsInNhb0VuYWJsZWQiLCJudW1TdFJwcyIsImxvbmdUZXJtUmVmUGljc1ByZXNlbnQiLCJzcHNUZW1wb3JhbE12cEVuYWJsZWQiLCJwYXJzZVBwcyIsInBwc1Jic3AiLCJudW1FeHRyYVNsaWNlSGVhZGVyQml0cyIsImNhYmFjSW5pdFByZXNlbnQiLCJwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCIsImRlYmxvY2tpbmdDb250cm9sUHJlc2VudCIsInNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUiLCJwYXJzZU52ZW5jSGV2Y0NvbmZpZyIsImV4dHJhZGF0YSIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwibnZlbmNPcHRzIiwiY29tbW9uIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidW5pZmllZCIsImNocm9tYVNpemUiLCJhbHBoYUJ1ZiIsImFscGhhU3dGcmFtZSIsInB0cyIsImRlc3luYyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsInZpZGVvIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiRm9ybWF0TXV4ZXIiLCJvdXRQYXRoIiwiZm9ybWF0TmFtZSIsIkZvcm1hdENvbnRleHQiLCJjb2RlY0N0eCIsIkRpY3Rpb25hcnkiLCJPdXRwdXRTaW5rIiwiX091dHB1dFNpbmsiLCJwYXRoIiwibG93ZXIiLCJzZXR1cCIsImF1ZGlvIiwiX3Byb21pc2UiLCJGRl9FTkNPREVSX0FBQyIsIkZGX0VOQ09ERVJfTElCT1BVUyIsInNhbXBsZVJhdGUiLCJod1ZpZGVvIiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIm91dEZpbGVzIiwid2l0aEF1ZGlvIiwia2luZHMiLCJuZWVkc01wNEh3IiwiaXNId0FscGhhQ2FwYWJsZSIsInNpbmtzIiwic2luayIsImlucHV0IiwiRnJhbWVEcm9wU3RhdHMiLCJjb3VudCIsInRvdGFsRHJvcHBlZCIsImxvY2FsU3VtIiwibWF4QnVyc3QiLCJidXJzdCIsInBlcmNlcHRpYmxlIiwibCIsInNjb3JlIiwic2l6ZUVxdWFscyIsImEiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiU2NyZWVuc2hvdFRha2VyIiwiX3MiLCJkaXIiLCJzZWMiLCJpbmRleCIsImN1cnJlbnRUaW1lTXMiLCJmaW5hbEJncmEiLCJuYXRpdmVJbWFnZSIsIndyaXRlRmlsZSIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiU1VQUE9SVEVEX1BST1RPQ09MUyIsIlNPVVJDRV9QQVRURVJOIiwiY2hlY2tIVE1MIiwiV2FpdGFibGVFdmVudCIsIm1hcCIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsInN0dWJNZWRpYSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwia2V5Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwicmVzb3VyY2VUeXBlIiwidW5zZXRJbnRlcmNlcHRvciIsIlRJTUVPVVRfRVJST1IiLCJDT05TT0xFX0lHTk9SRVMiLCJ3YWl0Rm9yRmluaXNoIiwid2luIiwiYWN0aW9uIiwidGltZW91dE1zIiwidG9sZXJhbnQiLCJkb21SZWFkeSIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJkaXNwb3NlV2luZG93IiwicGlja1ByZWxvYWQiLCJyZW5kZXJlciIsIm9wZW5XaW5kb3ciLCJvbkNyZWF0ZWQiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsIm9wZW5XaW5kb3dXaXRoUmV0cnkiLCJsb2FkV2luZG93Iiwid2FybXVwIiwib3BlbiIsInJlbmRlciIsImR1cmF0aW9uIiwib25Qcm9ncmVzcyIsInRha2VyIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwiZnJhbWVTaXplIiwid3JpdHRlbiIsImxhc3RGcmFtZSIsInNjcmVlbnNob3RzIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJlbmNvZGVFcnJvciIsInJlc29sdmVyIiwicmVqZWN0ZXIiLCJpbnRlcnZhbCIsImRyb3BTdGF0cyIsImJsYW5rU3RhdHMiLCJkaXNwb3NlQXVkaW8iLCJzY2hlZHVsZUZyYW1lIiwicGFpbnQiLCJfciIsImltYWdlIiwiaW1hZ2VTaXplIiwiY3VycmVudFRpbWUiLCJjcm9wcGVkIiwidGltZURlbHRhIiwiZnJhbWVzVG9JbnNlcnQiLCJuZXdQcm9ncmVzcyIsImR1cmF0aW9uTXMiLCJsYXN0V3JpdHRlbiIsInN0dWNrIiwiZHJvcFNjb3JlIiwiYmxhbmsiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsImFkdmFuY2VWaWRlb3MiLCJ0aW1lc3RhbXBNcyIsIlRJQ0tfU1lNQk9MIiwidGljayIsImV4cHIiLCJ0aWNrRXYiLCJSV19USU1FT1VUX1VTIiwib3BlbklucHV0IiwiRGVtdXhlciIsImRlY29kZUZyYW1lcyIsIm1ldGEiLCJBVk1FRElBX1RZUEVfVklERU8iLCJkZWMiLCJEZWNvZGVyIiwiZnJhbWVXaWR0aCIsImZyYW1lSGVpZ2h0Iiwic2NhbGUiLCJmaWx0ZXIiLCJGaWx0ZXJBUEkiLCJfZnJhbWUiLCJwYWNrUmdiYSIsInJvdyIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJpZHgiLCJoaXQiLCJmYWlscyIsImdlbiIsImZhaWxlZCIsImF0IiwiZmxvb3IiLCJ0YiIsImxlYWRHYXAiLCJvdXRlciIsIl9wa3QiLCJlbmNvZGVTdHViV2VibSIsInRtcGRpciIsInJhbmRvbUJ5dGVzIiwic3R1YiIsIlN0dWJGcmFtZSIsInJlYWRGaWxlIiwicm0iLCJsdW1hIiwiY2hyb21hIiwiRnJhbWVTZXJ2ZXIiLCJfdXNlSW5uZXJQcm94eSIsImlkIiwiZXZlbiIsInJlYWwiLCJzZXNzaW9ucyIsImNyZWF0ZUhhc2giLCJTQ0hFTUUiLCJDT1JTX0hFQURFUlMiLCJ1c2VGcmFtZVByb3RvY29sIiwiZnMiLCJqc29uT2siLCJpbnQiLCJyZ2JhT2siLCJ3ZWJtT2siLCJieXRlcyIsImNvcHkiLCJmYWxsYmFjayIsIlJFTkRFUl9GUFMiLCJsYXN0VHMiLCJzdHVja1NoZWNrIiwibWFya0RpcnR5IiwiZGVmZXIiLCJfZCIsInNsaXZlciIsInRzIiwic2hvb3QiLCJ0SW5pdCIsIndpblAiLCJwaXBlbGluZSIsImxhc3RCaXRtYXAiLCJtYWluIiwiaWZyYW1lIiwiZnJhbWVNcyIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCIsIm0iXSwibWFwcGluZ3MiOiIweUVBS0EsSUFBTUEsRUFBQUEsQ0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsSUFDaEIsSUFBSSxHQUFBLENBQUksQ0FBQSxLQUFBLEVBQVEsVUFBVSxDQUFBLENBQUUsQ0FBQSxDQUFFLEtBQzdCLFFBQUEsQ0FBUyxhQUFBLEVBQWlCLFNBQVMsYUFBQSxDQUFjLE9BQUEsQ0FBUSxhQUFZLEdBQU0sUUFBQSxDQUMxRSxRQUFBLENBQVMsYUFBQSxDQUFjLEdBQUEsQ0FDdkIsSUFBSSxJQUFJLFNBQUEsQ0FBVyxRQUFBLENBQVMsT0FBTyxDQUFBLENBQUUsSUFBQSxDQUVoQ0MsRUFBZ0NELEVBQUFBLEVBQWlCLENDTnZELFNBQVNFLEVBQUFBLENBQVFDLENBQUFBLENBQWNDLENBQUFBLENBQXNCQyxDQUFBQSxDQUFpQyxDQUMzRixHQUFJLENBQ0YsT0FBT0QsQ0FBQUEsQ0FBTyxPQUFBLENBQVEsR0FBQSxDQUFJRCxDQUFJLENBQUMsQ0FDakMsQ0FBQSxLQUFRLENBQ04sT0FBT0UsQ0FDVCxDQUNGLENDVk8sU0FBU0MsQ0FBQUEsQ0FBWUMsRUFBb0IsQ0FDOUMsR0FBSSxPQUFPQSxDQUFBQSxFQUFNLFFBQUEsQ0FDZixPQUFPQSxDQUFBQSxDQUVULElBQU1DLENBQUFBLENBQU0sT0FBT0QsQ0FBQyxDQUFBLENBQ3BCLEdBQUksTUFBQSxDQUFPLEtBQUEsQ0FBTUMsQ0FBRyxDQUFBLENBQ2xCLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSxNQUFBLEVBQVNELENBQUMsd0JBQXdCLENBQUEsQ0FFcEQsT0FBT0MsQ0FDVCxDQUVPLFNBQVNDLEdBQVlGLENBQUFBLENBQW9CLENBQzlDLE9BQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQ1JBLEVBRUYsTUFBQSxDQUFPQSxDQUFDLENBQ2pCLENBR08sU0FBU0csRUFBQUEsQ0FBY0MsRUFBOEMsQ0FDMUUsT0FBUUosQ0FBQUEsRUFDRixPQUFPQSxDQUFBQSxFQUFNLFFBQUEsRUFBWUEsRUFBRSxJQUFBLEVBQUssR0FBTSxHQUNqQyxFQUFDLENBRUhBLEVBQUUsS0FBQSxDQUFNLEdBQUcsQ0FBQSxDQUFFLEdBQUEsQ0FBS0ssQ0FBQUEsRUFBTUQsQ0FBQUEsQ0FBS0MsRUFBRSxJQUFBLEVBQU0sQ0FBQyxDQUVqRCxDQ3JCQSxJQUFNQyxHQUFVQyxzQkFBQUEsQ0FBY2IsQ0FBZSxDQUFBLENBRWhDYyxFQUFBQSxDQUFjYixFQUFBQSxDQUFLLGVBQUEsQ0FBaUJJLEVBQWEsQ0FBQyxDQUFBLENBRWxEVSxHQUFhQyxZQUFBQSxDQUFRSixFQUFBQSxDQUFRLFFBQVEsMkJBQTJCLENBQUMsQ0FBQSxDQUN4REssU0FBQUEsQ0FBS0YsRUFBQUEsQ0FBWSxPQUFRLFNBQVMsQ0FBQSxLQUMzQ0csRUFBQUEsQ0FBa0JELFNBQUFBLENBQUtGLEVBQUFBLENBQVksTUFBQSxDQUFRLFVBQVcsbUJBQW1CLENBQUEsQ0FDekVJLEVBQUFBLENBQWtCRixTQUFBQSxDQUFLRixFQUFBQSxDQUFZLE1BQUEsQ0FBUSxVQUFXLG1CQUFtQixDQUFBLENBQ3pFSyxHQUFtQkgsU0FBQUEsQ0FBS0YsRUFBQUEsQ0FBWSxPQUFRLFNBQUEsQ0FBVyxvQkFBb0IsRUNFeEYsSUFBTU0sRUFBQUEsQ0FBUSxhQUFBLENBQ1JDLEdBQU8sWUFBQSxDQUNQQyxFQUFBQSxDQUFPLGFBQ1BDLEVBQUFBLENBQVEsYUFBQSxDQUNSQyxHQUFRLGFBQUEsQ0FFZCxTQUFTQyxFQUFBQSxDQUFVQyxDQUFBQSxDQUE2Q0MsQ0FBQUEsQ0FBdUMsQ0FDckcsT0FBTyxTQUFBLEdBQTJCQyxDQUFBQSxDQUFxQixDQUNyRCxJQUFNQyxDQUFBQSxDQUFZRCxFQUFTLEdBQUEsQ0FBS0UsQ0FBQUEsRUFDdkJBLENBQUFBLFlBQWUsS0FBQSxDQUFTQSxDQUFBQSxDQUFJLEtBQUEsRUFBUyxPQUFPQSxDQUFHLENBQUEsQ0FBS0EsQ0FDNUQsQ0FBQSxDQUNELE9BQU9KLENBQUFBLENBQU8sS0FBSyxJQUFBLENBQU0sR0FBR0csQ0FBUyxDQUN2QyxDQUNGLENBOUJBLElBQUFFLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEdBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEVBa0VFRCxFQUFBQSxDQUFBLENBQUNWLEVBQUFBLENBQUFBLENBS0RTLEVBQUFBLENBQUEsQ0FBQ1QsRUFBQUEsQ0FBQUEsQ0FLRFEsR0FBQSxDQUFDUixFQUFBQSxDQUFBQSxDQUtETyxFQUFBQSxDQUFBLENBQUNQLEVBQUFBLENBQUFBLENBS0RNLEVBQUFBLENBQUEsQ0FBQ04sRUFBQUEsQ0FBQUEsQ0F0REksSUFBTVksQ0FBQUEsQ0FBTixLQUFtQyxDQThCeEMsV0FBQSxDQUFvQkMsRUFBaUJ6QixFQUFBQSxDQUFhLENBQTlCLFlBQUF5QixDQUFBQSxDQTlCZkMsRUFBQUEsQ0FBQUgsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQ0xJLEVBQUFBLENBQUEsSUFBQSxDQUFRLE9BQUEsQ0FBQSxDQThCTixJQUFBLENBQUssSUFBQSxDQUFPLFFBQ2QsQ0FGb0IsTUFBQSxDQTNCcEIsSUFBSSxLQUFBLEVBQWdCLENBQ2xCLE9BQU8sS0FBSyxNQUNkLENBRUEsSUFBSSxLQUFBLENBQU1DLENBQUFBLENBQWUsQ0FDdkIsS0FBSyxNQUFBLENBQVNBLENBQUFBLENBQ2QsS0FBSyxJQUFBLENBQU8sSUFBQSxDQUFLLE9BQVMsUUFDNUIsQ0FFQSxJQUFJLElBQUEsRUFBK0IsQ0FDakMsT0FBTyxLQUFLLEtBQ2QsQ0FFQSxJQUFJLElBQUEsQ0FBS0EsQ0FBQUEsQ0FBbUIsQ0FDMUIsSUFBTUMsQ0FBQUEsQ0FBUUQsQ0FBQUEsQ0FBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLEtBQUEsQ0FDL0JFLEVBQU9GLENBQUFBLENBQU0sSUFBQSxFQUFRLFFBQVEsSUFBQSxDQUM3QkcsQ0FBQUEsQ0FBT0gsRUFBTSxJQUFBLEVBQVEsT0FBQSxDQUFRLElBQUEsQ0FDN0JJLENBQUFBLENBQVFKLENBQUFBLENBQU0sS0FBQSxFQUFTLFFBQVEsS0FBQSxDQUMvQkssQ0FBQUEsQ0FBSyxJQUFBLENBQUssTUFBQSxDQUNoQixJQUFBLENBQUssS0FBQSxDQUFRLENBQ1gsS0FBQSxDQUFPQSxDQUFBQSxFQUFNLENBQUEsQ0FBSUosQ0FBQUEsQ0FBUSxNQUFBLENBQ3pCLElBQUEsQ0FBTUksR0FBTSxDQUFBLENBQUlILENBQUFBLENBQU8sT0FDdkIsSUFBQSxDQUFNRyxDQUFBQSxFQUFNLEVBQUlGLENBQUFBLENBQU8sTUFBQSxDQUN2QixLQUFBLENBQU9FLENBQUFBLEVBQU0sQ0FBQSxDQUFJRCxDQUFBQSxDQUFRLE1BQzNCLEVBQ0YsQ0FPQSxLQUFBLENBQUEsR0FBU2pCLENBQUFBLENBQTJCLENBQ2xDLElBQUEsQ0FBSyxNQUFNLEtBQUEsR0FBUVIsRUFBQUEsQ0FBTyxHQUFHUSxDQUFRLEVBQ3ZDLENBR0EsUUFBUUEsQ0FBQUEsQ0FBMkIsQ0FDakMsS0FBSyxJQUFBLEVBQU0sSUFBQSxHQUFPUCxHQUFNLEdBQUdPLENBQVEsRUFDckMsQ0FHQSxJQUFBLENBQUEsR0FBUUEsQ0FBQUEsQ0FBMkIsQ0FDakMsSUFBQSxDQUFLLElBQUEsRUFBTSxJQUFBLEdBQU9OLEVBQUFBLENBQU0sR0FBR00sQ0FBUSxFQUNyQyxDQUdBLEtBQUEsQ0FBQSxHQUFTQSxDQUFBQSxDQUEyQixDQUNsQyxJQUFBLENBQUssSUFBQSxFQUFNLFFBQVFMLEVBQUFBLENBQU8sR0FBR0ssQ0FBUSxFQUN2QyxDQUdBLFNBQVNBLENBQUFBLENBQTJCLENBQ2xDLElBQUEsQ0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRSixFQUFBQSxDQUFPLEdBQUdJLENBQVEsQ0FBQSxDQUNyQyxRQUFRLElBQUEsQ0FBSyxDQUFDLEVBQ2hCLENBRVEsUUFBQSxDQUFTbUIsQ0FBQUEsQ0FBaUIsQ0FDaEMsSUFBTWpCLENBQUFBLENBQU1pQixFQUFRLE9BQUEsRUFBUSxDQUN4QmpCLEVBQUksVUFBQSxDQUFXVixFQUFLLEVBQ3RCLElBQUEsQ0FBSyxLQUFBLENBQU1VLENBQUFBLENBQUksS0FBQSxDQUFNVixFQUFBQSxDQUFNLE1BQUEsQ0FBUyxDQUFDLENBQUMsQ0FBQSxDQUM3QlUsQ0FBQUEsQ0FBSSxVQUFBLENBQVdULEVBQUksQ0FBQSxDQUM1QixLQUFLLElBQUEsQ0FBS1MsQ0FBQUEsQ0FBSSxLQUFBLENBQU1ULEVBQUFBLENBQUssTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzNCUyxDQUFBQSxDQUFJLFdBQVdSLEVBQUksQ0FBQSxDQUM1QixLQUFLLElBQUEsQ0FBS1EsQ0FBQUEsQ0FBSSxLQUFBLENBQU1SLEVBQUFBLENBQUssTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzNCUSxDQUFBQSxDQUFJLFVBQUEsQ0FBV1AsRUFBSyxDQUFBLENBQzdCLElBQUEsQ0FBSyxNQUFNTyxDQUFBQSxDQUFJLEtBQUEsQ0FBTVAsRUFBQUEsQ0FBTSxNQUFBLENBQVMsQ0FBQyxDQUFDLEVBRXRDLElBQUEsQ0FBSyxJQUFBLENBQUtPLENBQUcsRUFFakIsQ0FFQSxPQUFPa0IsQ0FBQUEsQ0FBb0IvQyxDQUFBQSxDQUFjLENBQ3ZDLE9BQU8sSUFBSSxPQUFBLENBQWMsQ0FBQ2dELENBQUFBLENBQVNDLENBQUFBLEdBQVcsQ0FDNUMsSUFBQSxDQUFLLEtBQUEsQ0FBTSxDQUFBLEVBQUdqRCxDQUFJLENBQUEsT0FBQSxDQUFTLENBQUEsQ0FDM0IsSUFBSWtELENBQUFBLENBQWdCLEVBQUEsQ0FDZEMsQ0FBQUEsQ0FBWUMsR0FBaUIsQ0FDakMsSUFBTU4sRUFBVU0sQ0FBQUEsQ0FBSyxRQUFBLEdBQ2pCTixDQUFBQSxDQUFRLFVBQUEsQ0FBV3ZCLEVBQUssQ0FBQSxDQUMxQjJCLENBQUFBLEVBQVNKLENBQUFBLENBQVEsTUFBTXZCLEVBQUFBLENBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQSxDQUV2QyxJQUFBLENBQUssU0FBU3VCLENBQU8sRUFFekIsQ0FBQSxDQUNBQyxDQUFBQSxDQUFLLE1BQUEsRUFBUSxFQUFBLENBQUcsT0FBUUksQ0FBUSxDQUFBLENBQ2hDSixFQUFLLE1BQUEsRUFBUSxFQUFBLENBQUcsT0FBUUksQ0FBUSxDQUFBLENBQ2hDSixDQUFBQSxDQUNHLEVBQUEsQ0FBRyxPQUFBLENBQVVNLENBQUFBLEVBQVEsQ0FDcEJILENBQUFBLEVBQVNHLENBQUFBLENBQUksT0FBQSxDQUNiTixDQUFBQSxDQUFLLElBQUEsR0FDUCxDQUFDLENBQUEsQ0FDQSxJQUFBLENBQUssT0FBQSxDQUFTLENBQUNPLENBQUFBLENBQU1DLENBQUFBLEdBQVcsQ0FDM0JELENBQUFBLEVBQVFDLENBQUFBLEVBQVVMLEdBQ3BCQSxDQUFBQSxHQUFVLENBQUEsZ0JBQUEsRUFBbUJILEVBQUssU0FBQSxDQUFVLElBQUEsQ0FBSyxHQUFHLENBQUMsQ0FBQSxDQUFBLENBQ3JELElBQUEsQ0FBSyxNQUFNLENBQUEsRUFBRy9DLENBQUksQ0FBQSxNQUFBLENBQUEsQ0FBVSxDQUFFLElBQUEsQ0FBQXNELENBQUFBLENBQU0sT0FBQUMsQ0FBQUEsQ0FBUSxLQUFBLENBQUFMLENBQU0sQ0FBQyxDQUFBLENBQ25ERCxDQUFBQSxDQUFPLElBQUksS0FBQSxDQUFNQyxDQUFLLENBQUMsQ0FBQSxHQUV2QixJQUFBLENBQUssTUFBTSxDQUFBLEVBQUdsRCxDQUFJLENBQUEsTUFBQSxDQUFRLENBQUEsQ0FDMUJnRCxDQUFBQSxFQUFRLEVBRVosQ0FBQyxDQUFBLENBQ0EsRUFBQSxDQUFHLG9CQUFBLENBQXVCUSxDQUFBQSxFQUFXLENBQ3BDLElBQUEsQ0FBSyxNQUFNLENBQUEsRUFBR3hELENBQUksQ0FBQSxVQUFBLENBQUEsQ0FBY3dELENBQU0sRUFDeEMsQ0FBQyxFQUNBLEVBQUEsQ0FBRywwQkFBQSxDQUE2QkgsR0FBUSxDQUN2QyxJQUFBLENBQUssTUFBTSxDQUFBLEVBQUdyRCxDQUFJLENBQUEsVUFBQSxDQUFBLENBQWNxRCxDQUFHLEVBQ3JDLENBQUMsRUFDTCxDQUFDLENBQ0gsQ0FDRixDQUFBLENBaEhPbEIsQ0FBQUEsQ0FBQXNCLEdBQUEsQ0FBQSxDQW1DTEMsRUFBQUEsQ0FBQXZCLENBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUQsRUFBQUEsQ0FsQ1dFLENBQUFBLENBQUFBLENBd0NYc0IsR0FBQXZCLENBQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FEQUYsR0F2Q1dHLENBQUFBLENBQUFBLENBNkNYc0IsRUFBQUEsQ0FBQXZCLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FEQUgsRUFBQUEsQ0E1Q1dJLENBQUFBLENBQUFBLENBa0RYc0IsRUFBQUEsQ0FBQXZCLENBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUosR0FqRFdLLENBQUFBLENBQUFBLENBdURYc0IsRUFBQUEsQ0FBQXZCLENBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUwsRUFBQUEsQ0F0RFdNLENBQUFBLENBQUFBLENBQU51QixHQUFBeEIsQ0FBQUEsQ0FBTUMsQ0FBQUEsQ0FBQUEsQ0FrSGIsSUFBTXdCLENBQUFBLENBQVMsSUFBSXhCLENBQUFBLENBR25CeUIsV0FBSSxXQUFBLENBQVksQ0FBQ0MsRUFBT2hCLENBQUFBLEdBQVksQ0FDbEMsSUFBTWpCLENBQUFBLENBQU1pQixDQUFBQSxDQUFRLE9BQUEsRUFBUSxDQUN2QmpCLENBQUFBLEdBR0RpQyxDQUFBQSxFQUFTQyx1QkFDWEgsQ0FBQUEsQ0FBTyxLQUFBLENBQU0vQixDQUFHLENBQUEsQ0FDUGlDLENBQUFBLEVBQVNFLHdCQUFBQSxFQUNsQkosRUFBTyxJQUFBLENBQUsvQixDQUFHLENBQUEsRUFFbkIsQ0FBQyxDQUFBLENDeEpELElBQU1vQyxHQUFNLFNBQUEsQ0FFTCxTQUFTQyxJQUE2QixDQUUzQyxJQUFNQyxFQUFVcEQsU0FBQUEsQ0FBS3FELFlBQUFBLENBQUksT0FBQSxDQUFRLFNBQVMsQ0FBQSxDQUFHLGNBQUEsQ0FBZ0IsU0FBUyxDQUFBLENBQ3RFQyxZQUFBQSxDQUFVRixDQUFBQSxDQUFTLENBQUUsU0FBQSxDQUFXLElBQUssQ0FBQyxDQUFBLENBQ3RDQyxZQUFBQSxDQUFJLE9BQUEsQ0FBUSxZQUFBLENBQWNELENBQU8sQ0FBQSxDQUNqQ0csdUJBQWMsS0FBQSxDQUFNLENBQ2xCLFlBQWEsY0FBQSxDQUNiLGNBQUEsQ0FBZ0IsTUFDaEIsUUFBQSxDQUFVLEtBQUEsQ0FDVix3QkFBQSxDQUEwQixJQUM1QixDQUFDLENBQUEsQ0FDRFYsRUFBTyxLQUFBLENBQU1LLEVBQUFBLENBQUssY0FBZUUsQ0FBTyxFQUMxQyxDQ25CTyxTQUFTSSxFQUFBQSxDQUFpQ0MsQ0FBQUEsQ0FBdUJ0RSxDQUFBQSxDQUF3QyxDQUM5RyxPQUFPLENBQUEsR0FBSXVFLElBQVMsQ0FDbEIsR0FBSSxDQUNGLElBQU1DLENBQUFBLENBQU1GLENBQUFBLENBQUcsR0FBR0MsQ0FBSSxDQUFBLENBQ3RCLE9BQUlDLENBQUFBLFlBQWUsT0FBQSxDQUNWQSxDQUFBQSxDQUFJLE1BQU0sSUFBTXhFLENBQVksRUFFOUJ3RSxDQUNULENBQUEsS0FBUSxDQUNOLE9BQU94RSxDQUNULENBQ0YsQ0FDRixDQ1JPLElBQU15RSxHQUFlLGlCQUFBLENBRXJCLFNBQVNDLEVBQUFBLEVBQVEsQ0FDdEIsSUFBTUMsQ0FBQUEsQ0FBTyxRQUFRLElBQUEsQ0FDakJDLENBQUFBLENBQU9ELEVBQUssSUFBQSxDQUFNRSxDQUFBQSxFQUFRQSxFQUFJLFVBQUEsQ0FBV0osRUFBWSxDQUFDLENBQUEsQ0FDMUQsR0FBSSxDQUFDRyxFQUNILE9BQUFsQixDQUFBQSxDQUFPLEtBQUEsQ0FBTSxVQUFBLENBQVlpQixDQUFJLENBQUEsQ0FDdEIsUUFBUSxJQUFBLENBRWpCLElBQU1KLENBQUFBLENBQU8sQ0FBQyxNQUFBLENBQVEsR0FBR0ksRUFBSyxLQUFBLENBQU0sRUFBRSxDQUFDLENBQUEsQ0FDdkMsT0FBQUMsRUFBTyxNQUFBLENBQU8sSUFBQSxDQUFLQSxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FBRSxDQUFDLENBQUEsQ0FBSSxRQUFRLEVBQUUsUUFBQSxFQUFTLENBQzNETCxFQUFLLElBQUEsQ0FBSyxHQUFHLElBQUEsQ0FBSyxLQUFBLENBQU1LLENBQUksQ0FBQyxFQUM3QmxCLENBQUFBLENBQU8sS0FBQSxDQUFNLFVBQVdhLENBQUksQ0FBQSxDQUNyQkEsQ0FDVCxDQ2hCTyxJQUFNTyxFQUFBQSxDQUFnQixLQUNoQkMsRUFBQUEsQ0FBaUIsSUFBQSxDQUNqQkMsRUFBQUEsQ0FBYyxFQUFBLENBQ2RDLEVBQUFBLENBQW1CLENBQUEsQ0FDbkJDLEdBQXlCLEVBQUEsQ0FDekJDLEVBQUFBLENBQW9CLENBQUMsY0FBQSxDQUFnQixlQUFlLENBQUEsQ0FFcERDLEdBQWVDLGtCQUFBQSxDQUFFLE1BQUEsQ0FBTyxDQUNuQyxRQUFBLENBQVVBLGtCQUFBQSxDQUFFLFFBQU8sQ0FBRSxRQUFBLENBQVMscUJBQXFCLENBQUEsQ0FDbkQsS0FBQSxDQUFPQSxrQkFBQUEsQ0FBRSxRQUFPLENBQUUsUUFBQSxDQUFTLGFBQWEsQ0FBQSxDQUN4QyxNQUFBLENBQVFBLGtCQUFBQSxDQUFFLFFBQU8sQ0FBRSxRQUFBLENBQVMsY0FBYyxDQUFBLENBQzFDLEdBQUEsQ0FBS0Esa0JBQUFBLENBQUUsUUFBTyxDQUFFLFFBQUEsQ0FBUyxtQkFBbUIsQ0FBQSxDQUM1QyxTQUFBLENBQVdBLG1CQUFFLE9BQUEsRUFBUSxDQUFFLFFBQUEsQ0FBUywwQkFBMEIsQ0FBQSxDQUMxRCxRQUFBLENBQVVBLG1CQUFFLEtBQUEsQ0FBTUEsa0JBQUFBLENBQUUsTUFBQSxFQUFRLENBQUEsQ0FBRSxRQUFBLENBQVMsc0RBQXNELENBQUEsQ0FDN0YsYUFBQSxDQUFlQSxrQkFBQUEsQ0FBRSxPQUFBLEVBQVEsQ0FBRSxRQUFBLENBQVMsOENBQThDLENBQUEsQ0FDbEYsYUFBQSxDQUFlQSxtQkFBRSxPQUFBLEVBQVEsQ0FBRSxTQUFTLHVDQUF1QyxDQUFBLENBQzNFLFVBQUEsQ0FBWUEsa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsU0FBUyxzRUFBc0UsQ0FBQSxDQUN2RyxlQUFnQkEsa0JBQUFBLENBQUUsT0FBQSxHQUFVLFFBQUEsQ0FBUyx3RUFBd0UsQ0FBQSxDQUM3RyxjQUFBLENBQWdCQSxrQkFBQUEsQ0FBRSxPQUFBLEdBQVUsUUFBQSxDQUFTLGlEQUFpRCxFQUN0RixhQUFBLENBQWVBLGtCQUFBQSxDQUFFLFFBQU8sQ0FBRSxRQUFBLENBQVMsZ0NBQWdDLENBQUEsQ0FDbkUsV0FBQSxDQUFhQSxrQkFBQUEsQ0FBRSxNQUFNQSxrQkFBQUEsQ0FBRSxNQUFBLEVBQVEsQ0FBQSxDQUFFLFFBQUEsQ0FBUywyQ0FBMkMsQ0FDdkYsQ0FBQyxDQUFBLENBd0JZQyxFQUFBQSxDQUFzQyxDQUNqRCxLQUFBLENBQU9SLEVBQUFBLENBQ1AsT0FBUUMsRUFBQUEsQ0FDUixHQUFBLENBQUtDLEdBQ0wsUUFBQSxDQUFVQyxFQUFBQSxDQUNWLFNBQVVFLEVBQUFBLENBQ1YsU0FBQSxDQUFXLEtBQUEsQ0FDWCxhQUFBLENBQWUsS0FBQSxDQUNmLGFBQUEsQ0FBZSxNQUNmLFVBQUEsQ0FBWSxLQUFBLENBQ1osY0FBQSxDQUFnQixLQUFBLENBQ2hCLGNBQUEsQ0FBZ0IsS0FBQSxDQUNoQixjQUFlRCxFQUFBQSxDQUNmLFdBQUEsQ0FBYSxFQUNmLENBQUEsQ0NuREEsU0FBU0ssR0FBZ0JoRixDQUFBQSxDQUFtQixDQUMxQyxHQUFJQSxDQUFBQSxDQUFFLFFBQUEsQ0FBUyxLQUFLLENBQUEsRUFBS0EsQ0FBQUEsQ0FBRSxVQUFBLENBQVcsT0FBTyxDQUFBLENBQzNDLE9BQU9BLEVBRVQsSUFBSWlGLENBQUFBLENBQ0osR0FBSSxDQUNGQSxDQUFBQSxDQUFNQyxlQUFBQSxDQUFhbEYsQ0FBQyxFQUN0QixDQUFBLEtBQVEsQ0FDTmlGLENBQUFBLENBQU0xQyxZQUFBQSxDQUFRdkMsQ0FBQyxFQUNqQixDQUNBLE9BQU8sVUFBVWlGLENBQUcsQ0FBQSxDQUN0QixDQU9BLGVBQXNCRSxFQUFBQSxDQUFRQyxDQUFBQSxDQUFxQixDQUNqRCxJQUFNQyxDQUFBQSxDQUFRUixHQUFhLEtBQUEsQ0FDckJTLENBQUFBLENBQUlQLEdBQ1ZRLGlCQUFBQSxDQUNHLElBQUEsQ0FBS0gsRUFBUSxJQUFJLENBQUEsQ0FDakIsUUFBQSxDQUFTLFVBQUEsQ0FBWSxvREFBb0QsQ0FBQSxDQUN6RSxPQUFPLHNCQUFBLENBQXdCQyxDQUFBQSxDQUFNLE1BQU0sV0FBQSxDQUFhLENBQUEsRUFBR0MsRUFBRSxLQUFLLENBQUEsQ0FBRSxDQUFBLENBQ3BFLE1BQUEsQ0FBTyx1QkFBQSxDQUF5QkQsQ0FBQUEsQ0FBTSxPQUFPLFdBQUEsQ0FBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUUsQ0FBQSxDQUN2RSxPQUFPLDZCQUFBLENBQStCRCxDQUFBQSxDQUFNLFdBQUEsQ0FBWSxXQUFBLENBQWEsRUFBRSxDQUFBLENBQ3ZFLE9BQU8sb0JBQUEsQ0FBc0JBLENBQUFBLENBQU0sSUFBSSxXQUFBLENBQWEsQ0FBQSxFQUFHQyxFQUFFLEdBQUcsQ0FBQSxDQUFFLENBQUEsQ0FDOUQsTUFBQSxDQUFPLHlCQUFBLENBQTJCRCxDQUFBQSxDQUFNLFNBQVMsV0FBQSxDQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxRQUFRLENBQUEsQ0FBRSxDQUFBLENBQzdFLE9BQU8sd0JBQUEsQ0FBMEJELENBQUFBLENBQU0sUUFBQSxDQUFTLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxRQUFBLENBQVMsS0FBSyxHQUFHLENBQUMsRUFDakYsTUFBQSxDQUFPLGtCQUFBLENBQW9CRCxFQUFNLFNBQUEsQ0FBVSxXQUFBLENBQWFDLENBQUFBLENBQUUsU0FBUyxDQUFBLENBQ25FLE1BQUEsQ0FBTyxzQkFBdUJELENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxhQUFhLENBQUEsQ0FDOUUsT0FBTyxtQkFBQSxDQUFxQkQsQ0FBQUEsQ0FBTSxhQUFBLENBQWMsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLGFBQWEsRUFDNUUsTUFBQSxDQUFPLGVBQUEsQ0FBaUJELEVBQU0sVUFBQSxDQUFXLFdBQUEsQ0FBYUMsRUFBRSxVQUFVLENBQUEsQ0FDbEUsTUFBQSxDQUFPLG9CQUFBLENBQXNCRCxDQUFBQSxDQUFNLGNBQUEsQ0FBZSxZQUFhQyxDQUFBQSxDQUFFLGNBQWMsRUFDL0UsTUFBQSxDQUFPLG1CQUFBLENBQXFCRCxFQUFNLGNBQUEsQ0FBZSxXQUFBLENBQWFDLENBQUFBLENBQUUsY0FBYyxDQUFBLENBQzlFLE1BQUEsQ0FBTyw0QkFBNkJELENBQUFBLENBQU0sYUFBQSxDQUFjLFlBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLGFBQWEsQ0FBQSxDQUFFLENBQUEsQ0FDekYsTUFBQSxDQUFPLE1BQU9FLENBQUFBLENBQWdCQyxDQUFBQSxHQUFTLENBQ3RDLEdBQUksQ0FDRixNQUFNTCxDQUFBQSxDQUFRLEdBQUEsQ0FBSUosRUFBQUEsQ0FBZ0JRLENBQU0sQ0FBQSxDQUFHLENBQ3pDLEtBQUEsQ0FBTzFCLEVBQUFBLENBQU1wRSxDQUFBQSxDQUFhNEYsQ0FBQUEsQ0FBRSxLQUFLLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxLQUFLLENBQUEsQ0FDN0MsTUFBQSxDQUFRM0IsR0FBTXBFLENBQUFBLENBQWE0RixDQUFBQSxDQUFFLE1BQU0sQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLE1BQU0sRUFDaEQsR0FBQSxDQUFLM0IsRUFBQUEsQ0FBTXBFLENBQUFBLENBQWE0RixDQUFBQSxDQUFFLEdBQUcsQ0FBQSxDQUFFRyxFQUFLLEdBQUcsQ0FBQSxDQUN2QyxRQUFBLENBQVUzQixFQUFBQSxDQUFNcEUsQ0FBQUEsQ0FBYTRGLENBQUFBLENBQUUsUUFBUSxDQUFBLENBQUVHLENBQUFBLENBQUssUUFBUSxDQUFBLENBQ3RELFFBQUEsQ0FBVTNGLEdBQVdELEVBQVcsQ0FBQSxDQUFFNEYsQ0FBQUEsQ0FBSyxPQUFPLENBQUEsQ0FDOUMsU0FBQSxDQUFXQSxFQUFLLFNBQUEsRUFBYUgsQ0FBQUEsQ0FBRSxTQUFBLENBQy9CLGFBQUEsQ0FBZUcsQ0FBQUEsQ0FBSyxhQUFBLEVBQWlCSCxFQUFFLGFBQUEsQ0FDdkMsYUFBQSxDQUFlRyxDQUFBQSxDQUFLLGFBQUEsRUFBaUJILENBQUFBLENBQUUsYUFBQSxDQUN2QyxXQUFZRyxDQUFBQSxDQUFLLFVBQUEsRUFBY0gsRUFBRSxVQUFBLENBQ2pDLGNBQUEsQ0FBZ0JHLEVBQUssY0FBQSxFQUFrQkgsQ0FBQUEsQ0FBRSxjQUFBLENBQ3pDLGNBQUEsQ0FBZ0JHLENBQUFBLENBQUssY0FBQSxFQUFrQkgsRUFBRSxjQUFBLENBQ3pDLGFBQUEsQ0FBZXhCLEdBQU1wRSxDQUFBQSxDQUFhNEYsQ0FBQUEsQ0FBRSxhQUFhLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxhQUFhLENBQUEsQ0FDckUsV0FBQSxDQUFhM0YsRUFBQUEsQ0FBV0osQ0FBVyxDQUFBLENBQUUrRixDQUFBQSxDQUFLLFdBQVcsQ0FDdkQsQ0FBQyxFQUNILENBQUEsTUFBU0MsQ0FBQUEsQ0FBRyxDQUNWdkMsQ0FBQUEsQ0FBTyxLQUFBLENBQU11QyxDQUFDLEVBQ2hCLENBQ0YsQ0FBQyxDQUFBLENBQ0gsTUFBTUgsaUJBQUFBLENBQVEsVUFBQSxDQUFXcEIsSUFBTyxFQUNsQyxDQ1pPLElBQU13QixFQUFBQSxDQUFOLEtBQWdCLENBQ3JCLFlBQUEsQ0FBYXRDLEVBQWVoQixDQUFBQSxDQUFpQixDQUMzQyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUUsSUFBQSxDQUFNLFVBQW9CLEtBQUEsQ0FBQWdCLENBQUFBLENBQU8sT0FBQSxDQUFBaEIsQ0FBUSxDQUFDLEVBQ3hELENBRUEsYUFBQSxDQUFjTixDQUFBQSxDQUFxQixDQUNqQyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUUsS0FBTSxVQUFBLENBQXFCLEtBQUEsQ0FBQUEsQ0FBTSxDQUFDLEVBQ2hELENBRUEsVUFBQSxDQUFXSSxDQUFBQSxDQUE4QixDQUN2QyxPQUFPLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBRSxJQUFBLENBQU0sT0FBQSxDQUFrQixLQUFBLENBQUFBLENBQU0sQ0FBQyxDQUNwRCxDQUVBLFNBQUEsQ0FBVXlELENBQUFBLENBQXdDLENBQ2hELE9BQU8sSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBTSxNQUFBLENBQWlCLFFBQUFBLENBQVEsQ0FBQyxDQUNyRCxDQUVRLElBQUEsQ0FBS3hFLENBQUFBLENBQTRCLENBQ3ZDLE9BQU8sSUFBSSxRQUFTbUIsQ0FBQUEsRUFBWSxDQUM5QixHQUFJLENBQUMsT0FBQSxDQUFRLEtBQ1gsT0FBT0EsQ0FBQUEsRUFBUSxDQUVqQixPQUFBLENBQVEsSUFBQSxDQUFLbkIsQ0FBQUEsQ0FBSyxJQUFNbUIsQ0FBQUEsRUFBUyxFQUNuQyxDQUFDLENBQ0gsQ0FDRixDQUFBLENDbEZPLFNBQVNzRCxHQUFNQyxDQUFBQSxDQUFZLENBQ2hDLE9BQU8sSUFBSSxPQUFBLENBQWV2RCxDQUFBQSxFQUFZLFdBQVdBLENBQUFBLENBQVN1RCxDQUFFLENBQUMsQ0FDL0QsQ0FFTyxTQUFTQyxHQUFlQyxDQUFBQSxDQUFlRixDQUFBQSxDQUFZRyxFQUEyQixDQUNuRixPQUFPLElBQUksT0FBQSxDQUFRLENBQUMxRCxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU0wRCxFQUFRLFVBQUEsQ0FBVyxJQUFNMUQsQ0FBQUEsQ0FBTyxJQUFJLEtBQUEsQ0FBTSxDQUFBLEVBQUd5RCxDQUFLLENBQUEsaUJBQUEsRUFBb0JILENBQUUsQ0FBQSxFQUFBLENBQUksQ0FBQyxDQUFBLENBQUdBLENBQUUsRUFDeEZFLENBQUFBLENBQUUsSUFBQSxDQUFLekQsRUFBU0MsQ0FBTSxDQUFBLENBQUUsUUFBUSxJQUFNLFlBQUEsQ0FBYTBELENBQUssQ0FBQyxFQUMzRCxDQUFDLENBQ0gsQ0FHTyxTQUFTQyxFQUFBQSxDQUFhSCxDQUFBQSxDQUFlbEQsQ0FBQUEsQ0FBa0MsQ0FDNUUsT0FBS0EsQ0FBQUEsQ0FHRSxJQUFJLE9BQUEsQ0FBVyxDQUFDUCxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3pDLElBQU00RCxDQUFBQSxDQUFVLElBQU01RCxDQUFBQSxDQUFPTSxDQUFBQSxDQUFPLE1BQU0sQ0FBQSxDQUMxQ0EsQ0FBQUEsQ0FBTyxnQkFBQSxDQUFpQixPQUFBLENBQVNzRCxDQUFBQSxDQUFTLENBQUUsS0FBTSxJQUFLLENBQUMsRUFDeERKLENBQUFBLENBQUUsSUFBQSxDQUFLekQsRUFBU0MsQ0FBTSxDQUFBLENBQUUsT0FBQSxDQUFRLElBQU1NLENBQUFBLENBQU8sbUJBQUEsQ0FBb0IsUUFBU3NELENBQU8sQ0FBQyxFQUNwRixDQUFDLENBQUEsQ0FOUUosQ0FPWCxDQ2xCQSxJQUFNSyxFQUFBQSxDQUFpQixHQUFBLENBRWhCLFNBQVNDLEVBQUFBLENBQUtDLEVBQWVDLENBQUFBLENBQWdCQyxDQUFBQSxDQUFtQyxDQUNyRixPQUFPVixFQUFBQSxDQUFZUSxDQUFBQSxDQUFJLFlBQVlDLENBQUFBLENBQVFDLENBQU0sQ0FBQSxDQUFHSixFQUFBQSxDQUFnQixDQUFBLElBQUEsRUFBT0csQ0FBTSxFQUFFLENBQ3JGLENBRU8sU0FBU0UsRUFBQUEsQ0FBT0gsQ0FBQUEsQ0FBZUksRUFBc0MsQ0FDMUUsT0FBT1osRUFBQUEsQ0FBWU8sRUFBQUEsQ0FBS0MsQ0FBQUEsQ0FBSyxrQkFBQSxDQUFvQixDQUFFLFVBQUEsQ0FBQUksQ0FBVyxDQUFDLENBQUEsQ0FBR04sRUFBQUEsQ0FBZ0IsUUFBUSxDQUM1RixDQUVPLFNBQVNPLEVBQUFBLENBQW1CTCxDQUFBQSxDQUFlTSxDQUFBQSxDQUErQixDQUMvRSxPQUFPLElBQUksT0FBQSxDQUFRLENBQUN0RSxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU1zRSxDQUFBQSxDQUFVLFVBQUEsQ0FBVyxJQUFNLENBQy9CUCxDQUFBQSxDQUFJLElBQUksU0FBQSxDQUFXUSxDQUFPLENBQUEsQ0FDMUJ2RSxDQUFBQSxDQUFPLElBQUksS0FBQSxDQUFNLHNDQUFzQzZELEVBQWMsQ0FBQSxFQUFBLENBQUksQ0FBQyxFQUM1RSxDQUFBLENBQUdBLEVBQWMsRUFFWFUsQ0FBQUEsQ0FBVSxDQUFDQyxFQUFtQlIsQ0FBQUEsR0FBbUIsQ0FDakRBLElBQVcsb0NBQUEsR0FDYixZQUFBLENBQWFNLENBQU8sQ0FBQSxDQUNwQlAsQ0FBQUEsQ0FBSSxHQUFBLENBQUksVUFBV1EsQ0FBTyxDQUFBLENBQzFCeEUsR0FBUSxFQUVaLENBQUEsQ0FDQWdFLEVBQUksRUFBQSxDQUFHLFNBQUEsQ0FBV1EsQ0FBTyxDQUFBLENBRXpCVCxFQUFBQSxDQUFLQyxDQUFBQSxDQUFLLGlDQUFrQyxDQUMxQyxNQUFBLENBQVEsVUFDUixNQUFBLENBQUFNLENBQ0YsQ0FBQyxDQUFBLENBQUUsS0FBQSxDQUFPbkIsQ0FBQUEsRUFBTSxDQUNkLFlBQUEsQ0FBYW9CLENBQU8sRUFDcEJQLENBQUFBLENBQUksR0FBQSxDQUFJLFNBQUEsQ0FBV1EsQ0FBTyxDQUFBLENBQzFCdkUsQ0FBQUEsQ0FBT2tELENBQUMsRUFDVixDQUFDLEVBQ0gsQ0FBQyxDQUNILENBRUEsZUFBc0J1QixFQUFBQSxDQUFpQlYsQ0FBQUEsQ0FBOEIsQ0FDbkUsTUFBTUQsRUFBQUEsQ0FBS0MsRUFBSyxnQ0FBQSxDQUFrQyxDQUFFLE1BQUEsQ0FBUSxPQUFRLENBQUMsRUFDdkUsQ0FFQSxlQUFzQlcsRUFBQUEsQ0FBZVgsQ0FBQUEsQ0FBZVksQ0FBQUEsQ0FBWSxDQUM5RCxNQUFNYixHQUFLQyxDQUFBQSxDQUFLLG9DQUFBLENBQXNDLENBQ3BELEdBQUdZLENBQUFBLENBQ0gsaUJBQUEsQ0FBbUIsRUFDbkIsTUFBQSxDQUFRLEtBQ1YsQ0FBQyxFQUNILENDOUNPLElBQU1DLEVBQUFBLENBQTBCLEVBQUEsQ0FFaEMsSUFBTUMsRUFBQUEsQ0FBcUIsWUFBQSxDQUUzQixTQUFTQyxHQUFlQyxDQUFBQSxDQUFtQkosQ0FBQUEsQ0FBb0IsQ0FDcEUsR0FBTSxDQUFFLEtBQUEsQ0FBQUssRUFBTyxNQUFBLENBQUFDLENBQU8sQ0FBQSxDQUFJTixDQUFBQSxDQUMxQixPQUFPLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0JBQUEsRUFNaUJLLENBQUssQ0FBQSxZQUFBLEVBQWVDLENBQUFBLENBQVMsQ0FBQyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUFBLEVBS3pDRCxDQUFLLENBQUE7QUFBQSxjQUFBLEVBQ0pDLENBQU0sQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBLEVBTVRBLENBQU0sQ0FBQTtBQUFBO0FBQUEsYUFBQSxFQUVKRCxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQUFBLEVBUVNELENBQVMsQ0FBQTtBQUFBLDRCQUFBLEVBQ1JDLENBQUssQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUFBLEVBSWJBLENBQUssQ0FBQTtBQUFBLDJCQUFBLEVBQ0VKLEVBQXVCLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsMEJBQUEsRUErQnhCQyxFQUFrQixDQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUEsQ0E4QjlDLENBRU8sU0FBU0ssRUFBQUEsQ0FBWUMsQ0FBQUEsQ0FBZ0JSLEVBQWdDLENBQzFFLEdBQU0sQ0FBRSxLQUFBLENBQUFLLENBQUFBLENBQU8sT0FBQUMsQ0FBTyxDQUFBLENBQUlOLEVBQzFCLEdBQUlLLENBQUFBLENBQVFKLElBQTJCSyxDQUFBQSxDQUFTLENBQUEsQ0FDOUMsT0FHRixJQUFNRyxDQUFBQSxDQUFZSCxFQUFTLENBQUEsQ0FFdkJJLENBQUFBLENBQVksRUFDaEIsSUFBQSxJQUFTQyxDQUFBQSxDQUFJLEVBQUdBLENBQUFBLENBQUlWLEVBQUFBLENBQXlCVSxJQUFLLENBQ2hELElBQU1DLEdBQVlILENBQUFBLENBQVlKLENBQUFBLENBQVFNLEdBQUssQ0FBQSxDQUVyQ0UsQ0FBQUEsQ0FBQUEsQ0FESUwsRUFBT0ksQ0FBUSxDQUFBLEVBQUssQ0FBQSxFQUNkLEdBQUEsQ0FBTSxDQUFBLENBQUksQ0FBQSxDQUMxQkYsRUFBYUEsQ0FBQUEsRUFBYSxDQUFBLENBQUtHLEVBQ2pDLENBSUEsR0FGQUgsRUFBWUEsQ0FBQUEsR0FBYyxDQUFBLENBRXRCLEdBQUMsTUFBQSxDQUFPLFFBQUEsQ0FBU0EsQ0FBUyxDQUFBLEVBQUtBLENBQUFBLENBQVksR0FBS0EsQ0FBQUEsQ0FBWSxHQUFBLENBQUEsQ0FJaEUsT0FBT0EsQ0FDVCxDQUVPLFNBQVNJLEVBQUFBLENBQVcxQixDQUFBQSxDQUFlLENBQ3hDLE9BQU9HLEVBQUFBLENBQU9ILEVBQUssdUJBQXVCLENBQzVDLENBT0EsZUFBc0IyQixFQUFBQSxDQUFVQyxFQUFpQkMsQ0FBQUEsQ0FBaUMsQ0FDaEYsTUFBTTFCLEVBQUFBLENBQU95QixDQUFBQSxDQUFHLFNBQVUsQ0FBQSxtQkFBQSxFQUFzQkMsQ0FBUSxHQUFHLEVBQzdELENBR0EsZUFBc0JDLEVBQUFBLENBQWNGLENBQUFBLENBQWdDLENBQ2xFLElBQU1HLENBQUFBLENBQVUsSUFBSSxRQUFTQyxDQUFBQSxFQUFNSixDQUFBQSxDQUFHLElBQUksSUFBQSxDQUFLZCxFQUFBQSxDQUFvQmtCLENBQUMsQ0FBQyxDQUFBLENBQ3JFLE1BQU14QyxFQUFBQSxDQUFZdUMsQ0FBQUEsQ0FBUyxJQUFPLFlBQVksRUFDaEQsQ0NqSkEsSUFBTUUsRUFBQUEsQ0FBYSxNQUNiQyxFQUFBQSxDQUFlLFdBQUEsQ0FHZkMsR0FBd0IsQ0FDNUIsUUFBQSxDQUFVLEtBQ1YsTUFBQSxDQUFRLElBQUEsQ0FDUixVQUFXLElBQUEsQ0FDWCxtQkFBQSxDQUFxQixLQUNyQixlQUFBLENBQWlCLElBQUEsQ0FDakIsWUFBYSxJQUFBLENBQ2IsTUFBQSxDQUFRLEtBQ1IsU0FBQSxDQUFXLElBQ2IsRUFHQUMsaUJBQUFBLENBQVMsMkJBQUEsQ0FBNEIsQ0FDbkMsQ0FBRSxNQUFBLENBQVFILEVBQUFBLENBQVksV0FBWUUsRUFBc0IsQ0FBQSxDQUN4RCxDQUFFLE1BQUEsQ0FBUUQsRUFBQUEsQ0FBYyxXQUFZQyxFQUFzQixDQUM1RCxDQUFDLENBQUEsQ0FHTSxTQUFTRSxJQUF5QixDQUN2Q0QsaUJBQUFBLENBQVMsT0FBT0gsRUFBQUEsQ0FBYUssQ0FBQUEsRUFBUSxDQUNuQyxJQUFNQyxDQUFBQSxDQUFNLElBQUksR0FBQSxDQUFJRCxDQUFBQSxDQUFJLEdBQUcsRUFDckJFLENBQUFBLENBQU1ELENBQUFBLENBQUksYUFBYSxHQUFBLENBQUksS0FBSyxHQUFLLEVBQUEsQ0FDckN0QixDQUFBQSxDQUFRLFNBQVNzQixDQUFBQSxDQUFJLFlBQUEsQ0FBYSxJQUFJLEdBQUcsQ0FBQSxFQUFLLElBQUssRUFBRSxDQUFBLENBQ3JEckIsRUFBUyxRQUFBLENBQVNxQixDQUFBQSxDQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksR0FBRyxDQUFBLEVBQUssSUFBSyxFQUFFLENBQUEsQ0FDdERFLEVBQU8xQixFQUFBQSxDQUFleUIsQ0FBQUEsQ0FBSyxDQUFFLEtBQUEsQ0FBQXZCLENBQUFBLENBQU8sT0FBQUMsQ0FBTyxDQUFDLEVBQ2xELE9BQU8sSUFBSSxTQUFTdUIsQ0FBQUEsQ0FBTSxDQUFFLFFBQVMsQ0FBRSxjQUFBLENBQWdCLFdBQVksQ0FBRSxDQUFDLENBQ3hFLENBQUMsRUFDSCxDQUVPLFNBQVNDLEVBQUFBLENBQWVGLEVBQWE1QixDQUFBQSxDQUFvQixDQUM5RCxJQUFNMkIsQ0FBQUEsQ0FBTSxJQUFJLElBQUksQ0FBQSxFQUFHTixFQUFVLFVBQVUsQ0FBQSxDQUMzQyxPQUFBTSxFQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksS0FBQSxDQUFPQyxDQUFBQSxDQUFJLE9BQUEsQ0FBUSxTQUFBLENBQVcsVUFBVSxDQUFDLENBQUEsQ0FDOURELEVBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxJQUFLLE1BQUEsQ0FBTzNCLENBQUFBLENBQUssS0FBSyxDQUFDLENBQUEsQ0FDNUMyQixFQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksSUFBSyxNQUFBLENBQU8zQixDQUFBQSxDQUFLLE1BQU0sQ0FBQyxDQUFBLENBQ3RDMkIsRUFBSSxRQUFBLEVBQ2IsQ0N0Q08sU0FBU0ksRUFBQUEsQ0FBYUMsRUFBYzNCLENBQUFBLENBQWVDLENBQUFBLENBQXlCLENBQ2pGLElBQU0yQixDQUFBQSxDQUFRLEtBQUssR0FBQSxDQUFJLENBQUEsQ0FBRyxLQUFLLEtBQUEsQ0FBTTVCLENBQUFBLENBQVEsRUFBSSxDQUFDLENBQUEsQ0FDNUM2QixFQUFRLElBQUEsQ0FBSyxHQUFBLENBQUksQ0FBQSxDQUFHLElBQUEsQ0FBSyxLQUFBLENBQU01QixDQUFBQSxDQUFTLEVBQUksQ0FBQyxDQUFBLENBQy9DNkIsRUFBTyxHQUFBLENBQ1BDLENBQUFBLENBQU8sRUFDUEMsQ0FBQUEsQ0FBTyxHQUFBLENBQ1BDLEVBQU8sQ0FBQSxDQUNQQyxDQUFBQSxDQUFPLElBQ1BDLENBQUFBLENBQU8sQ0FBQSxDQUNYLFFBQVNDLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJbkMsQ0FBQUEsQ0FBUW1DLENBQUFBLEVBQUtQLEVBQy9CLElBQUEsSUFBUzFKLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSTZILENBQUFBLENBQU83SCxHQUFLeUosQ0FBQUEsQ0FBTyxDQUNyQyxJQUFNdEIsQ0FBQUEsQ0FBQUEsQ0FBSzhCLENBQUFBLENBQUlwQyxFQUFRN0gsQ0FBQUEsRUFBSyxDQUFBLENBQ3RCa0ssRUFBSVYsQ0FBQUEsQ0FBSyxTQUFBLENBQVVyQixDQUFDLENBQUEsQ0FDcEJnQyxDQUFBQSxDQUFJWCxFQUFLLFNBQUEsQ0FBVXJCLENBQUFBLENBQUksQ0FBQyxDQUFBLENBQ3hCUyxDQUFBQSxDQUFJWSxDQUFBQSxDQUFLLFVBQVVyQixDQUFBQSxDQUFJLENBQUMsRUFDOUJ3QixDQUFBQSxDQUFPLElBQUEsQ0FBSyxJQUFJQSxDQUFBQSxDQUFNZixDQUFDLEVBQ3ZCZ0IsQ0FBQUEsQ0FBTyxJQUFBLENBQUssSUFBSUEsQ0FBQUEsQ0FBTWhCLENBQUMsRUFDdkJpQixDQUFBQSxDQUFPLElBQUEsQ0FBSyxJQUFJQSxDQUFBQSxDQUFNTSxDQUFDLENBQUEsQ0FDdkJMLENBQUFBLENBQU8sSUFBQSxDQUFLLEdBQUEsQ0FBSUEsRUFBTUssQ0FBQyxDQUFBLENBQ3ZCSixFQUFPLElBQUEsQ0FBSyxHQUFBLENBQUlBLEVBQU1HLENBQUMsQ0FBQSxDQUN2QkYsRUFBTyxJQUFBLENBQUssR0FBQSxDQUFJQSxFQUFNRSxDQUFDLEVBQ3pCLENBRUYsT0FBTyxJQUFBLENBQUssSUFBSU4sQ0FBQUEsQ0FBT0QsQ0FBQUEsQ0FBTUcsQ0FBQUEsQ0FBT0QsQ0FBQUEsQ0FBTUcsQ0FBQUEsQ0FBT0QsQ0FBSSxHQUFLLENBQzVELENBRU8sSUFBTUssRUFBQUEsQ0FBTixLQUFzQixDQUNWLE1BQUEsQ0FDQSxPQUFBLENBQ1QsT0FBUyxDQUFBLENBQ1QsTUFBQSxDQUFTLEVBRWpCLFdBQUEsQ0FBWXZDLENBQUFBLENBQWVDLEVBQWdCLENBQ3pDLElBQUEsQ0FBSyxPQUFTRCxDQUFBQSxDQUNkLElBQUEsQ0FBSyxRQUFVQyxFQUNqQixDQUVBLE9BQU91QyxDQUFBQSxDQUFxQixDQUMxQixLQUFLLE1BQUEsRUFBQSxDQUNEZCxFQUFBQSxDQUFhYyxFQUFPLElBQUEsQ0FBSyxNQUFBLENBQVEsS0FBSyxPQUFPLENBQUEsRUFDL0MsS0FBSyxNQUFBLEdBRVQsQ0FHQSxVQUFtQixDQUNqQixPQUFPLEtBQUssTUFBQSxDQUFTLENBQUEsQ0FBSSxJQUFBLENBQUssTUFBQSxDQUFTLElBQUEsQ0FBSyxNQUFBLENBQVMsQ0FDdkQsQ0FDRixDQUFBLENDL0NPLElBQU1DLEVBQUFBLENBQU4sS0FBeUIsQ0FNOUIsV0FBQSxDQUFxQkMsRUFBd0IsQ0FBeEIsSUFBQSxDQUFBLGNBQUEsQ0FBQUEsRUFBeUIsQ0FBekIsY0FBQSxDQUxiLFFBQVUsQ0FBQSxDQUNWLE1BQUEsQ0FBdUIsRUFBQyxDQUN4QixRQUFBLENBQVcsSUFBSSxPQUFBLENBQ2YsUUFBQSxDQUlSLElBQUksTUFBQSxFQUFpQixDQUNuQixPQUFPLElBQUEsQ0FBSyxPQUNkLENBRUEsSUFBSSxPQUFBLEVBQWtCLENBQ3BCLE9BQU8sSUFBQSxDQUFLLE1BQUEsQ0FBTyxNQUNyQixDQUVBLElBQUksT0FBZ0IsQ0FDbEIsT0FBTyxXQUFXLElBQUEsQ0FBSyxNQUFNLGNBQWMsSUFBQSxDQUFLLE9BQU8sRUFDekQsQ0FFQSxNQUFNLFNBQVluRyxDQUFBQSxDQUFzQmpCLENBQUFBLENBQWtDLENBQ3hFLE9BQUFBLENBQUFBLEVBQVEsZ0JBQWUsQ0FFbkJBLENBQUFBLEVBQVUsQ0FBQyxJQUFBLENBQUssUUFBQSxDQUFTLElBQUlBLENBQU0sQ0FBQSxHQUNyQyxLQUFLLFFBQUEsQ0FBUyxHQUFBLENBQUlBLENBQU0sQ0FBQSxDQUN4QkEsQ0FBQUEsQ0FBTyxpQkFBaUIsT0FBQSxDQUFTLElBQU0sS0FBSyxLQUFBLENBQU1BLENBQU0sQ0FBQSxDQUFHLENBQUUsSUFBQSxDQUFNLElBQUssQ0FBQyxDQUFBLENBQUEsQ0FHcEUsSUFBSSxRQUFXLENBQUNQLENBQUFBLENBQVNDLElBQVcsQ0FDekMsSUFBQSxDQUFLLE9BQU8sSUFBQSxDQUFLLENBQ2YsSUFBSyxJQUFNLENBQ1QsR0FBSU0sQ0FBQUEsRUFBUSxPQUFBLENBQVMsQ0FDbkJOLENBQUFBLENBQU9NLENBQUFBLENBQU8sTUFBTSxDQUFBLENBQ3BCLElBQUEsQ0FBSyxJQUFBLEdBQ0wsTUFDRixDQUNBLEtBQUssT0FBQSxFQUFBLENBQ0xpQixDQUFBQSxHQUNHLElBQUEsQ0FBTW9HLENBQUFBLEVBQU0sQ0FDWCxJQUFBLENBQUssT0FBQSxFQUFBLENBQ0w1SCxFQUFRNEgsQ0FBQyxDQUFBLENBQ1QsS0FBSyxJQUFBLEdBQ1AsQ0FBQyxDQUFBLENBQ0EsS0FBQSxDQUFPekUsQ0FBQUEsRUFBTSxDQUNaLElBQUEsQ0FBSyxPQUFBLEVBQUEsQ0FDTGxELEVBQU9rRCxDQUFDLENBQUEsQ0FDUixLQUFLLElBQUEsR0FDUCxDQUFDLEVBQ0wsQ0FBQSxDQUNBLE9BQUFsRCxDQUFBQSxDQUNBLE1BQUEsQ0FBQU0sQ0FDRixDQUFDLENBQUEsQ0FDRCxLQUFLLElBQUEsR0FDUCxDQUFDLENBQ0gsQ0FFQSxNQUFNLEtBQUEsRUFBdUIsQ0FDM0IsR0FBSSxFQUFBLElBQUEsQ0FBSyxPQUFBLEdBQVksR0FBSyxJQUFBLENBQUssT0FBQSxHQUFZLEdBRzNDLE9BQU8sSUFBSSxRQUFTeUYsQ0FBQUEsRUFBTyxJQUFBLENBQUssU0FBV0EsQ0FBRSxDQUMvQyxDQUVRLEtBQUEsQ0FBTXpGLENBQUFBLENBQXFCLENBQ2pDLElBQU1zSCxDQUFBQSxDQUFxQixFQUFDLENBQzVCLElBQUEsSUFBV0MsQ0FBQUEsSUFBUyxLQUFLLE1BQUEsQ0FDbkJBLENBQUFBLENBQU0sU0FBV3ZILENBQUFBLENBQ25CdUgsQ0FBQUEsQ0FBTSxPQUFPdkgsQ0FBQUEsQ0FBTyxNQUFNLEVBRTFCc0gsQ0FBQUEsQ0FBSyxJQUFBLENBQUtDLENBQUssQ0FBQSxDQUduQixJQUFBLENBQUssT0FBU0QsQ0FBQUEsQ0FDZCxJQUFBLENBQUssT0FDUCxDQUVRLElBQUEsRUFBTyxDQUNiLEdBQUksSUFBQSxDQUFLLFVBQVksQ0FBQSxFQUFLLElBQUEsQ0FBSyxVQUFZLENBQUEsQ0FBRyxDQUM1QyxLQUFLLFFBQUEsSUFBVyxDQUNoQixLQUFLLFFBQUEsQ0FBVyxNQUFBLENBQ2hCLE1BQ0YsQ0FDSSxJQUFBLENBQUssUUFBVSxJQUFBLENBQUssY0FBQSxFQUN0QixLQUFLLE1BQUEsQ0FBTyxLQUFBLEVBQU0sRUFBRyxHQUFBLEdBRXpCLENBQ0YsRUN2RU8sSUFBTUUsRUFBQUEsQ0FBd0IsWUFBQSxDQWVyQyxlQUFzQkMsQ0FBQUEsQ0FBYTlFLENBQUFBLENBQXVCUSxFQUFzQyxDQUk5RixJQUFBdUUsRUFBQSxFQUFBLENBQUEsR0FBQSxDQUhBLElBQU1DLEVBQU0sSUFBSUMsbUJBQUFBLENBQ2hCRCxFQUFJLGFBQUEsQ0FBY2hGLENBQUFBLENBQUssS0FBSyxDQUFBLENBRTVCLElBQU1rRixFQUFRQyxDQUFBQSxDQUFBSixDQUFBQSxDQUFBLElBQUksZUFBQSxDQUFBLENBQ2xCRyxDQUFBQSxDQUFNLEdBQUEsQ0FBSUYsQ0FBRyxDQUFBLENBQ2JBLENBQUFBLENBQUksUUFBVWhGLENBQUFBLENBQUssS0FBQSxDQUFNLEdBQ3pCZ0YsQ0FBQUEsQ0FBSSxLQUFBLENBQVFoRixFQUFLLEtBQUEsQ0FDakJnRixDQUFBQSxDQUFJLE9BQVNoRixDQUFBQSxDQUFLLE1BQUEsQ0FDbEJnRixFQUFJLFdBQUEsQ0FBY2hGLENBQUFBLENBQUssWUFDdkJnRixDQUFBQSxDQUFJLFFBQUEsQ0FBVyxJQUFJSSxlQUFBQSxDQUFTLENBQUEsQ0FBR3BGLENBQUFBLENBQUssR0FBRyxDQUFBLENBQ3ZDZ0YsQ0FBQUEsQ0FBSSxVQUFZLElBQUlJLGVBQUFBLENBQVNwRixFQUFLLEdBQUEsQ0FBSyxDQUFDLEVBQ3hDZ0YsQ0FBQUEsQ0FBSSxPQUFBLENBQVVoRixFQUFLLEdBQUEsQ0FBTSxDQUFBLENBQ3pCZ0YsRUFBSSxPQUFBLENBQVUsTUFBQSxDQUFPaEYsRUFBSyxPQUFPLENBQUEsQ0FDakNnRixFQUFJLFFBQUEsQ0FBU0sscUNBQTJCLEVBQ3BDckYsQ0FBQUEsQ0FBSyxRQUFBLEdBQ1BnRixFQUFJLFFBQUEsQ0FBV2hGLENBQUFBLENBQUssVUFFbEJBLENBQUFBLENBQUssVUFBQSxHQUFlLFNBQ3RCZ0YsQ0FBQUEsQ0FBSSxVQUFBLENBQWFoRixFQUFLLFVBQUEsQ0FBQSxDQUVwQkEsQ0FBQUEsQ0FBSyxjQUNQZ0YsQ0FBQUEsQ0FBSSxXQUFBLENBQWNoRixFQUFLLFdBQUEsQ0FBQSxDQUV6QixJQUFBLEdBQVcsQ0FBQ3NGLENBQUFBLENBQUdaLENBQUMsQ0FBQSxHQUFLLE1BQUEsQ0FBTyxPQUFBLENBQVExRSxDQUFBQSxDQUFLLFNBQVcsRUFBRSxFQUNwRGdGLENBQUFBLENBQUksU0FBQSxDQUFVTSxFQUFHWixDQUFDLENBQUEsQ0FFcEJhLG1CQUFZLFlBQUEsQ0FBYSxNQUFNUCxFQUFJLEtBQUEsQ0FBTWhGLENBQUFBLENBQUssTUFBTyxJQUFJLENBQUEsQ0FBR1EsQ0FBSyxDQUFBLENBQ2pFMEUsQ0FBQUEsQ0FBTSxNQUFLLENBQ1gsT0FBT0YsUUF6QlB6RCxDQUFBQSxDQUFBLENBQUEsSUFBQWlFLEVBQUFqRSxDQUFBQSxDQUFBa0UsQ0FBQUEsQ0FBQSxjQUFBQyxDQUFBQSxDQUFBWCxDQUFBQSxDQUFBUyxFQUFBQyxDQUFBQSxFQUFBQSxDQTBCRixDQUVPLFNBQVNFLEVBQUFBLENBQVU1RCxDQUFBQSxDQUFlQyxFQUFnQjRELENBQUFBLENBQThCLENBSXJGLElBQUFiLENBQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FIQSxJQUFNUixDQUFBQSxDQUFRLElBQUlzQixZQUFBQSxDQUNsQnRCLEVBQU0sS0FBQSxFQUFNLENBRVosSUFBTVcsQ0FBQUEsQ0FBUUMsQ0FBQUEsQ0FBQUosRUFBQSxJQUFJLGVBQUEsQ0FBQSxDQUNsQkcsRUFBTSxHQUFBLENBQUlYLENBQUssRUFDZkEsQ0FBQUEsQ0FBTSxNQUFBLENBQVNxQixFQUNmckIsQ0FBQUEsQ0FBTSxLQUFBLENBQVF4QyxFQUNkd0MsQ0FBQUEsQ0FBTSxNQUFBLENBQVN2QyxFQUNmdUQsa0JBQUFBLENBQVksWUFBQSxDQUFhaEIsRUFBTSxTQUFBLENBQVUsQ0FBQyxFQUFHLGlCQUFpQixDQUFBLENBQzlEVyxFQUFNLElBQUEsRUFBSyxDQUNYLE9BQU9YLENBQUFBLENBQUFBLE1BUFBoRCxDQUFBQSxDQUFBLEtBQUFpRSxDQUFBQSxDQUFBakUsQ0FBQUEsQ0FBQWtFLEVBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVgsRUFBQVMsQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0FRRixDQUVPLFNBQVNLLENBQUFBLEVBQXFCLENBQ25DLElBQU1DLENBQUFBLENBQU0sSUFBSUMsY0FDaEIsT0FBQUQsQ0FBQUEsQ0FBSSxPQUFNLENBQ0hBLENBQ1QsQ0FFQSxlQUFzQkUsRUFBQUEsQ0FBYWpCLEVBQW1CZSxDQUFBQSxDQUFhRyxDQUFBQSxDQUFnQkMsRUFBbUMsQ0FDcEgsT0FBYSxDQUNYLElBQU1yRCxDQUFBQSxDQUFJLE1BQU1rQyxDQUFBQSxDQUFJLGFBQUEsQ0FBY2UsQ0FBRyxFQUNyQyxHQUFJakQsQ0FBQUEsR0FBTXNELDBCQUFrQnRELENBQUFBLEdBQU11RCxxQkFBQUEsQ0FDaEMsTUFFRixHQUFJLENBQ0ZkLG1CQUFZLFlBQUEsQ0FBYXpDLENBQUFBLENBQUcsZUFBZSxDQUFBLENBQzNDaUQsQ0FBQUEsQ0FBSSxZQUFjRyxDQUFBQSxDQUFPLEtBQUEsQ0FDckJILEVBQUksUUFBQSxHQUFhLEVBQUEsR0FDbkJBLENBQUFBLENBQUksUUFBQSxDQUFXLEVBQUEsQ0FBQSxDQUVqQkEsQ0FBQUEsQ0FBSSxVQUFVZixDQUFBQSxDQUFJLFFBQUEsQ0FBVWtCLEVBQU8sUUFBUSxDQUFBLENBQzNDLE1BQU1DLENBQUFBLENBQU0sV0FBQSxDQUFZSixDQUFHLEVBQzdCLENBQUEsT0FBRSxDQUNBQSxDQUFBQSxDQUFJLEtBQUEsR0FDTixDQUNGLENBQ0YsQ0MxRk8sSUFBTU8sQ0FBQUEsQ0FBTixNQUFNQyxDQUFpQyxDQUNuQyxJQUNBLEdBQUEsQ0FDQSxHQUFBLENBQ0QsS0FDQSxJQUFBLENBRVIsYUFBYSxPQUFPeEUsQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBZ0IsQ0FDakQsSUFBTXdFLENBQUFBLENBQVFDLGFBQU0saUJBQUEsQ0FBa0JDLHFCQUFjLEVBQ3BELE9BQUFDLFNBQUFBLENBQUdILEVBQU8seUJBQXlCLENBQUEsQ0FDNUIsSUFBSUQsQ0FBQUEsQ0FBV3hFLENBQUFBLENBQU9DLENBQUFBLENBQVF3RSxDQUFLLENBQzVDLENBRVEsWUFBWXpFLENBQUFBLENBQWVDLENBQUFBLENBQWdCNEUsRUFBWSxDQUM3RCxJQUFBLENBQUssS0FBT0EsQ0FBQUEsQ0FDWixJQUFBLENBQUssSUFBTWpCLEVBQUFBLENBQVU1RCxDQUFBQSxDQUFPQyxFQUFRNkUsc0JBQWUsQ0FBQSxDQUNuRCxLQUFLLEdBQUEsQ0FBTWxCLEVBQUFBLENBQVU1RCxDQUFBQSxDQUFPQyxDQUFBQSxDQUFROEUsMEJBQW1CLENBQUEsQ0FDdkQsS0FBSyxHQUFBLENBQU1oQixDQUFBQSxHQUNiLENBT0EsTUFBTSxLQUE2QixDQUVqQyxJQUFBZixFQUFBLEVBQUEsQ0FBQSxHQUFBLENBQUEsSUFBTUcsQ0FBQUEsQ0FBUUMsRUFBQUosQ0FBQUEsQ0FBQSxJQUFJLGlCQUNsQixJQUFNNkIsQ0FBQUEsQ0FBTSxJQUFJM0IsbUJBQUFBLENBQ2hCMkIsQ0FBQUEsQ0FBSSxhQUFBLENBQWMsSUFBQSxDQUFLLElBQUksQ0FBQSxDQUMzQjFCLEVBQU0sR0FBQSxDQUFJMEIsQ0FBRyxFQUNickIsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1xQixDQUFBQSxDQUFJLEtBQUEsQ0FBTSxLQUFLLElBQUksQ0FBQSxDQUFHLGtCQUFrQixDQUFBLENBQ3ZFMUIsQ0FBQUEsQ0FBTSxNQUFLLENBQ1gsT0FBTzBCLFFBTlByRixDQUFBQSxDQUFBLENBQUEsSUFBQWlFLEVBQUFqRSxDQUFBQSxDQUFBa0UsQ0FBQUEsQ0FBQSxjQUFBQyxDQUFBQSxDQUFBWCxDQUFBQSxDQUFBUyxFQUFBQyxDQUFBQSxFQUFBQSxDQU9GLENBRUEsTUFBTSxTQUFBLENBQVVzQixDQUFBQSxDQUFpQyxDQUMvQyxJQUFBaEMsQ0FBQUEsQ0FBQSxXQUFNNkIsQ0FBQUEsQ0FBTXpCLENBQUFBLENBQUFKLEVBQUEsTUFBTSxJQUFBLENBQUssS0FBSSxDQUFBLENBQzNCLElBQUEsQ0FBSyxHQUFBLENBQUksSUFBQSxDQUFPZ0MsQ0FBQUEsQ0FDaEJ4QixrQkFBQUEsQ0FBWSxhQUFhLE1BQU1xQixDQUFBQSxDQUFJLFdBQVcsSUFBQSxDQUFLLEdBQUcsRUFBRyx1QkFBdUIsQ0FBQSxDQUNoRixLQUFLLEdBQUEsQ0FBSSxLQUFBLEdBQ1RyQixrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTXFCLENBQUFBLENBQUksWUFBQSxDQUFhLEtBQUssR0FBRyxDQUFBLENBQUcseUJBQXlCLENBQUEsQ0FDcEYsT0FBTyxJQUFBLENBQUssVUFMWnJGLENBQUFBLENBQUEsQ0FBQSxJQUFBaUUsRUFBQWpFLENBQUFBLENBQUFrRSxDQUFBQSxDQUFBLGNBQUFDLENBQUFBLENBQUFYLENBQUFBLENBQUFTLEVBQUFDLENBQUFBLEVBQUFBLENBTUYsQ0FFQSxJQUFJLEdBQUEsRUFBTSxDQUNSLEdBQUksQ0FBQyxJQUFBLENBQUssS0FBTSxDQUNkLElBQU11QixDQUFBQSxDQUFNLElBQUlDLDJCQUFBQSxDQUNWQyxDQUFBQSxDQUFNLEtBQUssR0FBQSxDQUFJLE1BQUEsQ0FDckJGLEVBQUksVUFBQSxDQUNGLElBQUEsQ0FBSyxJQUFJLEtBQUEsQ0FDVCxJQUFBLENBQUssSUFBSSxNQUFBLENBQ1RFLENBQUFBLENBQ0EsS0FBSyxHQUFBLENBQUksS0FBQSxDQUNULEtBQUssR0FBQSxDQUFJLE1BQUEsQ0FDVEosMkJBQ0FLLG1CQUNGLENBQUEsQ0FDQSxLQUFLLElBQUEsQ0FBT0gsRUFDZCxDQUNBLE9BQU8sSUFBQSxDQUFLLElBQ2QsQ0FFQSxDQUFDLE9BQU8sT0FBTyxDQUFBLEVBQVUsQ0FDdkIsSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUFPLE9BQU8sQ0FBQSxHQUN2QixJQUFBLENBQUssR0FBQSxDQUFJLE9BQU8sT0FBTyxDQUFBLEVBQUUsQ0FDekIsSUFBQSxDQUFLLEdBQUEsQ0FBSSxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUUsQ0FDekIsS0FBSyxJQUFBLEdBQU8sTUFBQSxDQUFPLE9BQU8sQ0FBQSxHQUM1QixDQUNGLENBQUEsQ0M1REEsSUFBTUksR0FBbUQsQ0FBRSxDQUFDQywyQkFBaUIsRUFBRyxLQUFBLENBQU8sQ0FBQ0MsNEJBQWtCLEVBQUcsTUFBTyxDQUFBLENBV3ZHQyxFQUFBQSxDQUFOLE1BQU1DLENBQW1DLENBQ3RDLEtBQ0EsT0FBQSxDQUNBLElBQUEsQ0FDQSxTQUNBLE9BQUEsQ0FDQSxVQUFBLENBQ0EsYUFDQSxNQUFBLENBQ0EsT0FBQSxDQUNBLFNBQ0EsT0FBQSxDQUNBLElBQUEsQ0FBTyxHQUVQLFdBQUEsQ0FBWXhDLENBQUFBLENBQW1Ca0IsQ0FBQUEsQ0FBZ0J1QixDQUFBQSxDQUE4RCxDQUNuSCxJQUFBLENBQUssS0FBT3pDLENBQUFBLENBQ1osSUFBQSxDQUFLLFFBQVVrQixDQUFBQSxDQUNmLElBQUEsQ0FBSyxTQUFXbEIsQ0FBQUEsQ0FBSSxVQUFBLENBQ3BCLEtBQUssT0FBQSxDQUFVeUMsQ0FBQUEsQ0FDZixLQUFLLFVBQUEsQ0FBYXpDLENBQUFBLENBQUksVUFDdEIsSUFBQSxDQUFLLElBQUEsQ0FBT2MsR0FBVyxDQUN2QixJQUFBLENBQUssWUFBQSxDQUFlLElBQUlELFlBQUFBLENBQ3hCLElBQUEsQ0FBSyxhQUFhLEtBQUEsR0FDcEIsQ0FFQSxhQUFhLE1BQUEsQ0FBTzdGLEVBQWtELENBTXBFLElBQUErRSxFQUFBLEVBQUEsQ0FBQSxHQUFBLENBTEEsSUFBTXlCLEVBQVFDLFlBQUFBLENBQU0saUJBQUEsQ0FBa0J6RyxFQUFLLFNBQVMsQ0FBQSxDQUNwRCxHQUFJLENBQUN3RyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSx5QkFBQSxFQUE0QnhHLEVBQUssU0FBUyxDQUFBLENBQUUsRUFHOUQsSUFBTWtGLENBQUFBLENBQVFDLEVBQUFKLENBQUFBLENBQUEsSUFBSSxpQkFDbEIsSUFBTUMsQ0FBQUEsQ0FBTSxJQUFJQyxtQkFBQUEsQ0FDaEJELENBQUFBLENBQUksY0FBY3dCLENBQUssQ0FBQSxDQUN2QnRCLEVBQU0sR0FBQSxDQUFJRixDQUFHLEVBQ2JBLENBQUFBLENBQUksT0FBQSxDQUFVd0IsRUFBTSxFQUFBLENBQ3BCeEIsQ0FBQUEsQ0FBSSxhQUFlaEYsQ0FBQUEsQ0FBSyxZQUFBLENBQ3hCZ0YsRUFBSSxVQUFBLENBQWFoRixDQUFBQSxDQUFLLGNBQ3RCZ0YsQ0FBQUEsQ0FBSSxhQUFBLENBQWdCMEMsbUNBQ3BCMUMsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsSUFBSUksZUFBQUEsQ0FBUyxDQUFBLENBQUdwRixFQUFLLGFBQWEsQ0FBQSxDQUNqRGdGLENBQUFBLENBQUksT0FBQSxDQUFVLE1BQUEsQ0FBT2hGLENBQUFBLENBQUssT0FBTyxDQUFBLENBQzdCQSxDQUFBQSxDQUFLLGNBQ1BnRixDQUFBQSxDQUFJLFFBQUEsQ0FBU0sscUNBQTJCLENBQUEsQ0FFMUNFLGtCQUFBQSxDQUFZLGFBQWEsTUFBTVAsQ0FBQUEsQ0FBSSxNQUFNd0IsQ0FBQUEsQ0FBTyxJQUFJLEVBQUcsZ0JBQWdCLENBQUEsQ0FDdkUsSUFBTU4sQ0FBQUEsQ0FBU2xHLENBQUFBLENBQUssS0FBQSxDQUFNLFNBQUEsQ0FBVWdGLENBQUcsQ0FBQSxDQUN2Q0UsRUFBTSxJQUFBLEVBQUssQ0FDWCxPQUFPLElBQUlzQyxDQUFBQSxDQUFheEMsRUFBS2tCLENBQUFBLENBQVFsRyxDQUFBQSxDQUFLLFlBQVksQ0FBQSxDQUFBLE1BaEJ0RHVCLENBQUFBLENBQUEsS0FBQWlFLENBQUFBLENBQUFqRSxDQUFBQSxDQUFBa0UsRUFBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxDQUFBQSxDQUFBWCxFQUFBUyxDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQWlCRixDQUVBLFlBQUEsQ0FBYWtDLENBQUFBLENBQTRCLENBSXZDLElBQUE1QyxDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBSEEsS0FBSyxNQUFBLEdBQVMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQzlCLEtBQUssT0FBQSxDQUFVNEMsQ0FBQUEsQ0FFZixJQUFNekMsQ0FBQUEsQ0FBUUMsQ0FBQUEsQ0FBQUosRUFBQSxJQUFJLGVBQUEsQ0FBQSxDQUNsQixJQUFNNkMsQ0FBQUEsQ0FBUSxJQUFJQyxtQkFDbEJELENBQUFBLENBQU0sS0FBQSxHQUNOMUMsQ0FBQUEsQ0FBTSxHQUFBLENBQUkwQyxDQUFLLENBQUEsQ0FDZixJQUFNRSxFQUFVQyxhQUFBQSxDQUFPLFNBQUEsQ0FBVSxTQUFTLENBQUEsQ0FDMUMsSUFBTUMsRUFBU0osQ0FBQUEsQ0FBTSxZQUFBLENBQ25CRSxFQUNBLEtBQUEsQ0FDQSxDQUFBLFlBQUEsRUFBZUgsQ0FBWSxDQUFBLGtEQUFBLEVBQXFEQSxDQUFZLENBQUEsQ0FDOUYsQ0FBQSxDQUNBLEdBQUksQ0FBQ0ssRUFDSCxNQUFNLElBQUksTUFBTSwwQkFBMEIsQ0FBQSxDQUU1QyxJQUFNQyxDQUFBQSxDQUFjRixhQUFBQSxDQUFPLFVBQVUsYUFBYSxDQUFBLENBQ2xELElBQU1HLENBQUFBLENBQVVOLENBQUFBLENBQU0sYUFBYUssQ0FBQUEsQ0FBYSxNQUFNLEVBQ3RELEdBQUksQ0FBQ0MsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDhCQUE4QixDQUFBLENBRWhELElBQU1DLEVBQVVmLEVBQUFBLENBQWdCLElBQUEsQ0FBSyxPQUFPLENBQUEsRUFBSyxLQUFBLENBQ2pELElBQU1nQixDQUFBQSxDQUFhLENBQUEsb0JBQUEsRUFBdUJELENBQU8sQ0FBQSxjQUFBLEVBQWlCLElBQUEsQ0FBSyxRQUFRLENBQUEsdUNBQUEsRUFBMEMsSUFBQSxDQUFLLFVBQVUsQ0FBQSxJQUFBLENBQUEsQ0FDeEksSUFBTUUsQ0FBQUEsQ0FBVUMsa0JBQUFBLENBQVksVUFBQSxDQUFXLENBQUMsQ0FBRSxJQUFBLENBQU0sSUFBQSxDQUFNLFVBQVdOLENBQUFBLENBQVEsTUFBQSxDQUFRLENBQUUsQ0FBQyxDQUFDLEVBQ3JGLElBQU1PLENBQUFBLENBQVNELG1CQUFZLFVBQUEsQ0FBVyxDQUFDLENBQUUsSUFBQSxDQUFNLEtBQUEsQ0FBTyxVQUFXSixDQUFBQSxDQUFTLE1BQUEsQ0FBUSxDQUFFLENBQUMsQ0FBQyxFQUN0RjNDLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYXFDLEVBQU0sUUFBQSxDQUFTUSxDQUFBQSxDQUFZRyxFQUFRRixDQUFPLENBQUEsQ0FBRyxnQkFBZ0IsQ0FBQSxDQUN0RjlDLGtCQUFBQSxDQUFZLGFBQWFxQyxDQUFBQSxDQUFNLFVBQUEsR0FBYyxjQUFjLENBQUEsQ0FDM0QxQyxFQUFNLElBQUEsRUFBSyxDQUNYLElBQUEsQ0FBSyxNQUFBLENBQVMwQyxDQUFBQSxDQUNkLElBQUEsQ0FBSyxRQUFVSSxDQUFBQSxDQUNmLElBQUEsQ0FBSyxTQUFXRSxFQUFBQSxDQUFBQSxNQTNCaEIzRyxDQUFBQSxDQUFBLEtBQUFpRSxDQUFBQSxDQUFBakUsQ0FBQUEsQ0FBQWtFLEVBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVgsRUFBQVMsQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0E0QkYsQ0FFQSxNQUFNLE1BQUEsQ0FBTytDLEVBQWFyQyxDQUFBQSxDQUFtQyxDQVczRCxJQUFBcEIsQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQVZBLEdBQUksQ0FBQyxJQUFBLENBQUssU0FBVyxDQUFDLElBQUEsQ0FBSyxRQUN6QixPQUVGLElBQU16QixFQUFNLElBQUksWUFBQSxDQUFha0YsRUFBSSxNQUFBLENBQVFBLENBQUFBLENBQUksV0FBWUEsQ0FBQUEsQ0FBSSxVQUFBLENBQWEsQ0FBQyxDQUFBLENBQzNFLElBQUEsSUFBU25HLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJaUIsQ0FBQUEsQ0FBSSxPQUFRakIsQ0FBQUEsRUFBQUEsQ0FDekIsTUFBQSxDQUFPLFNBQVNpQixDQUFBQSxDQUFJakIsQ0FBQyxDQUFFLENBQUEsR0FDMUJpQixDQUFBQSxDQUFJakIsQ0FBQyxDQUFBLENBQUksQ0FBQSxDQUFBLENBR2IsSUFBTW9HLENBQUFBLENBQVduRixDQUFBQSxDQUFJLFFBQVUsQ0FBQSxDQUMvQixJQUFNaUIsRUFBUVksQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQWMsYUFBTSxlQUFBLENBQWdCLE1BQUEsQ0FBTyxLQUFLdkMsQ0FBQUEsQ0FBSSxNQUFBLENBQVFBLEVBQUksVUFBQSxDQUFZQSxDQUFBQSxDQUFJLFVBQVUsQ0FBQSxDQUFHLENBQzNGLFVBQVdtRixDQUFBQSxDQUNYLE1BQUEsQ0FBUXBCLDRCQUNSLFVBQUEsQ0FBWSxJQUFBLENBQUssUUFDakIsYUFBQSxDQUFlSyxrQ0FBQUEsQ0FDZixJQUFLLElBQUEsQ0FBSyxJQUFBLENBQ1YsUUFBQSxDQUFVLENBQUUsR0FBQSxDQUFLLENBQUEsQ0FBRyxJQUFLLElBQUEsQ0FBSyxPQUFRLENBQ3hDLENBQUMsQ0FBQSxDQUFBLENBQ0QsS0FBSyxJQUFBLEVBQVEsTUFBQSxDQUFPZSxDQUFRLENBQUEsQ0FDNUJsRCxrQkFBQUEsQ0FBWSxhQUFhLE1BQU0sSUFBQSxDQUFLLFFBQVEsaUJBQUEsQ0FBa0JoQixDQUFLLEVBQUcsbUJBQW1CLENBQUEsQ0FDekYsTUFBTSxJQUFBLENBQUssS0FBQSxDQUFNNEIsQ0FBSyxTQVZ0QjVFLENBQUFBLENBQUEsQ0FBQSxJQUFBaUUsRUFBQWpFLENBQUFBLENBQUFrRSxDQUFBQSxDQUFBLGNBQUFDLENBQUFBLENBQUFYLENBQUFBLENBQUFTLEVBQUFDLENBQUFBLEVBQUFBLENBV0YsQ0FFQSxNQUFNLEtBQUEsQ0FBTVUsQ0FBQUEsQ0FBbUMsQ0FDekMsSUFBQSxDQUFLLE9BQUEsR0FDUCxNQUFNLElBQUEsQ0FBSyxPQUFBLENBQVEsaUJBQUEsQ0FBa0IsSUFBSSxDQUFBLENBQ3pDLE1BQU0sS0FBSyxLQUFBLENBQU1BLENBQUssR0FFeEIsTUFBTSxJQUFBLENBQUssS0FBSyxTQUFBLENBQVUsSUFBSSxFQUM5QixNQUFNLElBQUEsQ0FBSyxXQUFXQSxDQUFLLEVBQzdCLENBRUEsQ0FBQyxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQVUsQ0FDdkIsS0FBSyxJQUFBLENBQUssSUFBQSxHQUNWLElBQUEsQ0FBSyxZQUFBLENBQWEsTUFBSyxDQUN2QixJQUFBLENBQUssU0FBUyxNQUFBLENBQU8sT0FBTyxHQUFFLENBQzlCLElBQUEsQ0FBSyxLQUFLLFdBQUEsR0FDWixDQUVBLE1BQWMsS0FBQSxDQUFNQSxFQUFtQyxDQUNyRCxPQUFhLENBQ1gsSUFBTXJELENBQUFBLENBQUksTUFBTSxLQUFLLFFBQUEsQ0FBVSxrQkFBQSxDQUFtQixLQUFLLFlBQVksQ0FBQSxDQUNuRSxHQUFJQSxDQUFBQSxHQUFNc0Qsd0JBQUFBLEVBQWtCdEQsSUFBTXVELHFCQUFBQSxDQUNoQyxNQUVGLEdBQUksQ0FDRmQsa0JBQUFBLENBQVksYUFBYXpDLENBQUFBLENBQUcsb0JBQW9CLEVBQ2hEeUMsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxTQUFBLENBQVUsS0FBSyxZQUFZLENBQUEsQ0FBRyxvQkFBb0IsQ0FBQSxDQUMzRixNQUFNLEtBQUssVUFBQSxDQUFXWSxDQUFLLEVBQzdCLENBQUEsT0FBRSxDQUNBLEtBQUssWUFBQSxDQUFhLEtBQUEsR0FDcEIsQ0FDRixDQUNGLENBRVEsVUFBQSxDQUFXQSxDQUFBQSxDQUFtQyxDQUNwRCxPQUFPRixFQUFBQSxDQUFhLElBQUEsQ0FBSyxLQUFNLElBQUEsQ0FBSyxJQUFBLENBQU0sS0FBSyxPQUFBLENBQVNFLENBQUssQ0FDL0QsQ0FDRixDQUFBLENDbkxPLFNBQVN1QyxFQUFTQyxDQUFBQSxDQUF3QixDQUMvQyxJQUFNQyxDQUFBQSxDQUFNLE1BQUEsQ0FBTyxLQUFBLENBQU1ELEVBQUssTUFBQSxFQUFVLENBQUMsRUFDekMsSUFBQSxJQUFTdEcsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJdUcsQ0FBQUEsQ0FBSSxPQUFRdkcsQ0FBQUEsRUFBQUEsQ0FBSyxDQUNuQyxJQUFJd0csQ0FBQUEsQ0FBTyxDQUFBLENBQ1gsUUFBU3pFLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsRUFBQUEsQ0FDckJ5RSxDQUFBQSxDQUFRQSxDQUFBQSxFQUFRLENBQUEsQ0FBS0YsQ0FBQUEsQ0FBS3RHLEVBQUksQ0FBQSxDQUFJK0IsQ0FBQyxFQUVyQ3dFLENBQUFBLENBQUl2RyxDQUFDLEVBQUl3RyxFQUNYLENBQ0EsT0FBT0QsQ0FDVCxDQUVPLElBQU1FLENBQUFBLENBQU4sS0FBZ0IsQ0FDckIsSUFBQSxDQUFpQixHQUNqQixDQUFBLENBQUVDLENBQUFBLENBQWFDLENBQUFBLENBQVcsQ0FDeEIsSUFBQSxJQUFTM0csQ0FBQUEsQ0FBSTJHLEVBQUksQ0FBQSxDQUFHM0csQ0FBQUEsRUFBSyxFQUFHQSxDQUFBQSxFQUFBQSxDQUMxQixJQUFBLENBQUssS0FBSyxJQUFBLENBQU0wRyxDQUFBQSxFQUFPMUcsRUFBSyxDQUFDLEVBRWpDLENBQ0EsSUFBQSxDQUFLMEcsQ0FBQUEsQ0FBdUIsQ0FDMUIsSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFLQSxDQUFBQSxDQUFNLENBQUEsQ0FBSSxDQUFDLEVBQzVCLENBQ0EsR0FBR0EsQ0FBQUEsQ0FBYSxDQUNkLElBQU1yRSxDQUFBQSxDQUFJcUUsQ0FBQUEsQ0FBTSxFQUNWRSxDQUFBQSxDQUFNLEVBQUEsQ0FBSyxLQUFLLEtBQUEsQ0FBTXZFLENBQUMsRUFDN0IsSUFBQSxJQUFTckMsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJNEcsQ0FBQUEsQ0FBTSxFQUFHNUcsQ0FBQUEsRUFBQUEsQ0FDM0IsSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRWxCLFFBQVNBLENBQUFBLENBQUk0RyxDQUFBQSxDQUFNLEVBQUc1RyxDQUFBQSxFQUFLLENBQUEsQ0FBR0EsSUFDNUIsSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFNcUMsQ0FBQUEsRUFBS3JDLENBQUFBLENBQUssQ0FBQyxFQUUvQixDQUNBLE1BQU02RyxDQUFBQSxDQUFhLENBQ2pCLEtBQU8sSUFBQSxDQUFLLElBQUEsQ0FBSyxPQUFTLENBQUEsR0FBTSxDQUFBLEVBQzlCLEtBQUssSUFBQSxDQUFLLElBQUEsQ0FBS0EsQ0FBRyxFQUV0QixDQUNBLEtBQUs1RixDQUFBQSxDQUFlNkYsQ0FBQUEsQ0FBZUYsRUFBYSxDQUM5QyxJQUFBLElBQVM1RyxFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSTRHLEVBQUs1RyxDQUFBQSxFQUFBQSxDQUN2QixJQUFBLENBQUssS0FBSyxJQUFBLENBQUtpQixDQUFBQSxDQUFJNkYsQ0FBQUEsQ0FBUTlHLENBQUMsQ0FBRSxFQUVsQyxDQUNGLENBQUEsQ0FFYStHLENBQUFBLENBQU4sS0FBZ0IsQ0FDYixLQUFBLENBQ1IsSUFBTSxDQUFBLENBQ04sV0FBQSxDQUFZbE0sRUFBYyxDQUN4QixJQUFBLENBQUssTUFBUSxFQUFDLENBQ2QsUUFBU21GLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJbkYsQ0FBQUEsQ0FBSyxNQUFBLENBQVFtRixJQUMvQixJQUFBLElBQVMrQixDQUFBQSxDQUFJLEVBQUdBLENBQUFBLEVBQUssQ0FBQSxDQUFHQSxJQUN0QixJQUFBLENBQUssS0FBQSxDQUFNLEtBQU1sSCxDQUFBQSxDQUFLbUYsQ0FBQyxHQUFNK0IsQ0FBQUEsQ0FBSyxDQUFDLEVBR3pDLENBQ0EsSUFBSSxNQUFPLENBQ1QsT0FBTyxLQUFLLEtBQ2QsQ0FDQSxJQUFBLENBQUs0RSxDQUFBQSxDQUFtQixDQUN0QixJQUFJRCxFQUFNLENBQUEsQ0FDVixJQUFBLElBQVMxRyxFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSTJHLEVBQUczRyxDQUFBQSxFQUFBQSxDQUNyQjBHLENBQUFBLENBQU9BLEdBQU8sQ0FBQSxDQUFLLElBQUEsQ0FBSyxNQUFNLElBQUEsQ0FBSyxHQUFBLEVBQUssRUFFMUMsT0FBT0EsQ0FDVCxDQUNBLE1BQUEsRUFBaUIsQ0FDZixJQUFJTSxDQUFBQSxDQUFRLENBQUEsQ0FDWixLQUFPLEtBQUssS0FBQSxDQUFNLElBQUEsQ0FBSyxHQUFHLENBQUEsR0FBTSxDQUFBLEVBQzlCQSxJQUNBLElBQUEsQ0FBSyxHQUFBLEVBQUEsQ0FFUCxLQUFLLEdBQUEsRUFBQSxDQUNMLElBQUlOLEVBQU0sQ0FBQSxDQUNWLElBQUEsSUFBUzFHLEVBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJZ0gsRUFBT2hILENBQUFBLEVBQUFBLENBQ3pCMEcsQ0FBQUEsQ0FBT0EsQ0FBQUEsRUFBTyxDQUFBLENBQUssSUFBQSxDQUFLLEtBQUEsQ0FBTSxLQUFLLEdBQUEsRUFBSyxDQUFBLENBRTFDLE9BQU9BLENBQUFBLENBQU0sQ0FDZixDQUNGLENBQUEsQ0M3RUEsSUFBTU8sRUFBcUIsTUFBQSxDQUFPLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FBTSxDQUFBLENBQU0sRUFBTSxDQUFJLENBQUMsRUFLeEQsSUFBTUMsRUFBQUEsQ0FBZSxHQUdyQixJQUFNQyxFQUFBQSxDQUFxQixHQUNyQkMsRUFBQUEsQ0FBVSxFQUFBLENBQ1ZDLEdBQVUsRUFBQSxDQUNWQyxFQUFBQSxDQUFVLEdBQ1ZDLEVBQUFBLENBQWlCLEVBQUEsQ0FTOUIsU0FBU0MsRUFBQUEsQ0FBYUMsQ0FBQUEsQ0FBaUJDLEVBQXdFLENBQzdHLElBQU1DLEVBQVFGLENBQUFBLEVBQVcsQ0FBQSxDQUFLLEdBQ3hCRyxDQUFBQSxDQUFBQSxDQUFZSCxDQUFBQSxDQUFVLENBQUEsR0FBTSxDQUFBLENBQU9DLENBQUFBLEVBQVcsQ0FBQSxDQUFLLEdBQ25ERyxDQUFBQSxDQUFhSCxDQUFBQSxDQUFVLEVBQzdCLE9BQU8sQ0FBRSxLQUFBQyxDQUFBQSxDQUFNLE9BQUEsQ0FBQUMsRUFBUyxVQUFBLENBQUFDLENBQVcsQ0FDckMsQ0FFTyxTQUFTQyxHQUFnQkgsQ0FBQUEsQ0FBY0MsQ0FBQUEsQ0FBaUJDLEVBQXNDLENBQ25HLElBQU1FLENBQUFBLENBQUFBLENBQVVKLENBQUFBLENBQU8sRUFBQSxHQUFTLENBQUEsQ0FBT0MsR0FBVyxDQUFBLENBQUssQ0FBQSxDQUNqREksR0FBVUosQ0FBQUEsQ0FBVSxFQUFBLEdBQVMsRUFBTUMsQ0FBQUEsQ0FBYSxDQUFBLENBQ3RELE9BQU8sQ0FBQ0UsQ0FBQUEsQ0FBT0MsQ0FBSyxDQUN0QixDQUdPLFNBQVNDLENBQUFBLENBQWNDLENBQUFBLENBQThCLENBQzFELElBQU1DLENBQUFBLENBQWtCLEVBQUMsQ0FDckJuSSxDQUFBQSxDQUFJLENBQUEsQ0FFUixLQUFPQSxDQUFBQSxDQUFJa0ksQ0FBQUEsQ0FBVSxRQUFRLENBQzNCLElBQUlFLEVBQVEsQ0FBQSxDQUNaLEdBQUlwSSxFQUFJLENBQUEsQ0FBSWtJLENBQUFBLENBQVUsUUFBVUEsQ0FBQUEsQ0FBVWxJLENBQUMsSUFBTSxDQUFBLEVBQUtrSSxDQUFBQSxDQUFVbEksRUFBSSxDQUFDLENBQUEsR0FBTSxHQUFLa0ksQ0FBQUEsQ0FBVWxJLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxDQUNuR29JLEVBQVEsQ0FBQSxDQUFBLEtBQUEsR0FFUnBJLENBQUFBLENBQUksRUFBSWtJLENBQUFBLENBQVUsTUFBQSxFQUNsQkEsRUFBVWxJLENBQUMsQ0FBQSxHQUFNLEdBQ2pCa0ksQ0FBQUEsQ0FBVWxJLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUNyQmtJLEVBQVVsSSxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDckJrSSxDQUFBQSxDQUFVbEksQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLENBRXJCb0ksRUFBUSxDQUFBLENBQUEsS0FDSCxDQUNMcEksSUFDQSxRQUNGLENBRUEsSUFBTXFJLENBQUFBLENBQVdySSxDQUFBQSxDQUFJb0ksRUFDckIsR0FBSUMsQ0FBQUEsQ0FBVyxFQUFrQkgsQ0FBQUEsQ0FBVSxNQUFBLENBQ3pDLE1BR0YsSUFBSUksQ0FBQUEsQ0FBU0osQ0FBQUEsQ0FBVSxNQUFBLENBQ3ZCLElBQUEsSUFBU0ssQ0FBQUEsQ0FBSUYsRUFBVyxDQUFBLENBQWlCRSxDQUFBQSxDQUFJTCxFQUFVLE1BQUEsQ0FBUyxDQUFBLENBQUdLLElBQ2pFLEdBQ0VMLENBQUFBLENBQVVLLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDakJMLEVBQVVLLENBQUFBLENBQUksQ0FBQyxJQUFNLENBQUEsR0FDcEJMLENBQUFBLENBQVVLLEVBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUFNQSxDQUFBQSxDQUFJLENBQUEsQ0FBSUwsQ0FBQUEsQ0FBVSxRQUFVQSxDQUFBQSxDQUFVSyxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFBS0wsRUFBVUssQ0FBQUEsQ0FBSSxDQUFDLElBQU0sQ0FBQSxDQUFBLENBQ3ZHLENBQ0FELEVBQVNDLENBQUFBLENBQ1QsS0FDRixDQUdGLEdBQU0sQ0FBRSxLQUFBWixDQUFBQSxDQUFNLE9BQUEsQ0FBQUMsQ0FBUSxDQUFBLENBQUlKLEVBQUFBLENBQWFVLEVBQVVHLENBQVEsQ0FBQSxDQUFJSCxFQUFVRyxDQUFBQSxDQUFXLENBQUMsQ0FBRSxDQUFBLENBQ3JGRixDQUFBQSxDQUFLLEtBQUssQ0FBRSxJQUFBLENBQUFSLEVBQU0sT0FBQSxDQUFBQyxDQUFBQSxDQUFTLEtBQU1NLENBQUFBLENBQVUsUUFBQSxDQUFTRyxFQUFVQyxDQUFNLENBQUUsQ0FBQyxDQUFBLENBQ3ZFdEksQ0FBQUEsQ0FBSXNJLEVBQ04sQ0FFQSxPQUFPSCxDQUNULENBR08sU0FBU0ssRUFBQUEsQ0FBa0JDLEVBQWFiLENBQUFBLENBQXlCLENBQ3RFLElBQU1jLENBQUFBLENBQU0sTUFBQSxDQUFPLEtBQUtELENBQUcsQ0FBQSxDQUNyQixDQUFFLElBQUEsQ0FBQWQsQ0FBQUEsQ0FBTSxXQUFBRSxDQUFXLENBQUEsQ0FBSUwsR0FBYWtCLENBQUFBLENBQUksQ0FBQyxFQUFJQSxDQUFBQSxDQUFJLENBQUMsQ0FBRSxDQUFBLENBQ3BELENBQUNDLEVBQUlDLENBQUUsQ0FBQSxDQUFJZCxHQUFnQkgsQ0FBQUEsQ0FBTUMsQ0FBQUEsQ0FBU0MsQ0FBVSxDQUFBLENBQzFELE9BQUFhLEVBQUksQ0FBQyxDQUFBLENBQUlDLEVBQ1RELENBQUFBLENBQUksQ0FBQyxDQUFBLENBQUlFLENBQUFBLENBQ0ZGLENBQ1QsQ0FhTyxTQUFTRyxDQUFBQSxDQUEwQmhPLENBQUFBLENBQXNCLENBQzlELElBQU02TixDQUFBQSxDQUFnQixFQUFDLENBQ3ZCLElBQUEsSUFBUzFJLEVBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJbkYsRUFBSyxNQUFBLENBQVFtRixDQUFBQSxFQUFBQSxDQUMzQkEsRUFBSSxDQUFBLENBQUluRixDQUFBQSxDQUFLLFFBQVVBLENBQUFBLENBQUttRixDQUFDLElBQU0sQ0FBQSxFQUFLbkYsQ0FBQUEsQ0FBS21GLEVBQUksQ0FBQyxDQUFBLEdBQU0sR0FBS25GLENBQUFBLENBQUttRixDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDL0UwSSxFQUFJLElBQUEsQ0FBSyxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2IxSSxDQUFBQSxFQUFLLEdBRUwwSSxDQUFBQSxDQUFJLElBQUEsQ0FBSzdOLEVBQUttRixDQUFDLENBQUUsQ0FBQSxDQUdyQixPQUFPLE1BQUEsQ0FBTyxJQUFBLENBQUswSSxDQUFHLENBQ3hCLENBR08sU0FBU0ksRUFBQUEsQ0FBdUJMLENBQUFBLENBQXFCLENBQzFELElBQU1DLENBQUFBLENBQWdCLEVBQUMsQ0FDdkJBLENBQUFBLENBQUksS0FBS0QsQ0FBQUEsQ0FBSSxDQUFDLEVBQUlBLENBQUFBLENBQUksQ0FBQyxDQUFFLENBQUEsQ0FDekIsSUFBSXpCLENBQUFBLENBQVEsQ0FBQSxDQUNaLElBQUEsSUFBU2hILENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSXlJLENBQUFBLENBQUksT0FBUXpJLENBQUFBLEVBQUFBLENBQzFCZ0gsQ0FBQUEsR0FBVSxHQUFLeUIsQ0FBQUEsQ0FBSXpJLENBQUMsR0FBTSxDQUFBLEdBQzVCMEksQ0FBQUEsQ0FBSSxLQUFLLENBQUMsQ0FBQSxDQUNWMUIsRUFBUSxDQUFBLENBQUEsQ0FFTnlCLENBQUFBLENBQUl6SSxDQUFDLENBQUEsR0FBTSxDQUFBLENBQ2JnSCxDQUFBQSxFQUFBQSxDQUVBQSxDQUFBQSxDQUFRLENBQUEsQ0FFVjBCLENBQUFBLENBQUksS0FBS0QsQ0FBQUEsQ0FBSXpJLENBQUMsQ0FBRSxDQUFBLENBRWxCLE9BQU8sT0FBTyxJQUFBLENBQUswSSxDQUFHLENBQ3hCLENDeEhBLElBQU1LLEdBQWMsRUFBQSxDQUNkQyxFQUFBQSxDQUFjLEdBQ2RDLEVBQUFBLENBQWUsQ0FBQSxDQUNmQyxHQUFrQixFQUFBLENBQ2xCQyxFQUFBQSxDQUFlLEVBQ2ZDLEVBQUFBLENBQWUsQ0FBQSxDQUVyQixTQUFTQyxFQUFBQSxDQUFPOUMsQ0FBQUEsQ0FBYStDLEVBQW1CclAsQ0FBQUEsQ0FBb0IsQ0FDbEUsSUFBTXVNLENBQUFBLENBQU84QyxDQUFBQSxFQUFhLEVBQ3BCQyxDQUFBQSxDQUFPLENBQUEsRUFBTSxHQUFLRCxDQUFBQSxDQUFZLENBQUEsQ0FBQSxDQUM5QkUsRUFBTWpELENBQUFBLENBQUlDLENBQUksR0FBSyxDQUFBLENBQ3pCRCxDQUFBQSxDQUFJQyxDQUFJLENBQUEsQ0FBSXZNLENBQUFBLENBQVF1UCxDQUFBQSxDQUFNRCxFQUFPQyxDQUFBQSxDQUFNLENBQUNELEVBQzFDLENBRUEsU0FBU0UsR0FBU0MsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQTZCLENBQzlELElBQU1DLENBQUFBLENBQU9mLEVBQTBCYSxDQUFPLENBQUEsQ0FDOUMsT0FBQUwsRUFBQUEsQ0FBT08sQ0FBQUEsQ0FBTUQsRUFBY1YsRUFBQUEsQ0FBYyxDQUFDLENBQUEsQ0FDMUNJLEVBQUFBLENBQU9PLENBQUFBLENBQU1ELENBQUFBLENBQWNULEdBQWlCLENBQUMsQ0FBQSxDQUN0Q0osR0FBdUJjLENBQUksQ0FDcEMsQ0FHTyxTQUFTQyxFQUFBQSxDQUFrQjNCLEVBQTJCLENBQzNELElBQU1DLEVBQU9GLENBQUFBLENBQWNDLENBQVMsRUFDcEMsR0FBSUMsQ0FBQUEsQ0FBSyxTQUFXLENBQUEsQ0FDbEIsT0FBT0QsQ0FBQUEsQ0FFVCxJQUFNNEIsQ0FBQUEsQ0FBbUIsR0FDekIsSUFBQSxJQUFXckIsQ0FBQUEsSUFBT04sRUFBTSxDQUN0QixJQUFJdE4sRUFBTzROLENBQUFBLENBQUksSUFBQSxDQUNYQSxFQUFJLElBQUEsR0FBU3JCLEVBQUFBLENBQ2Z2TSxFQUFPNE8sRUFBQUEsQ0FBU2hCLENBQUFBLENBQUksS0FBTU0sRUFBVyxDQUFBLENBQzVCTixFQUFJLElBQUEsR0FBU3BCLEVBQUFBLEdBQ3RCeE0sRUFBTzRPLEVBQUFBLENBQVNoQixDQUFBQSxDQUFJLEtBQU1PLEVBQVcsQ0FBQSxDQUFBLENBRXZDYyxFQUFPLElBQUEsQ0FBSzdDLENBQUFBLENBQW9CcE0sQ0FBSSxFQUN0QyxDQUNBLE9BQU8sTUFBQSxDQUFPLE1BQUEsQ0FBT2lQLENBQU0sQ0FDN0IsQ0FJQSxTQUFTQyxFQUFBQSxDQUFhQyxDQUFBQSxDQUFlVixFQUFtQlcsQ0FBQUEsQ0FBd0IsQ0FDOUUsSUFBTUwsQ0FBQUEsQ0FBT2YsQ0FBQUEsQ0FBMEJtQixDQUFLLEVBQ3RDRSxDQUFBQSxDQUFLLElBQUluRCxFQUFVNkMsQ0FBSSxDQUFBLENBQ3ZCTyxFQUFLLElBQUkxRCxDQUFBQSxDQUNmLFFBQVN6RyxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSXNKLENBQUFBLENBQVd0SixDQUFBQSxFQUFBQSxDQUM3Qm1LLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBS0QsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FJekIsSUFGQUEsQ0FBQUEsQ0FBRyxRQUFPLENBQ1ZDLENBQUFBLENBQUcsR0FBR0YsQ0FBTSxDQUFBLENBQ0xDLEVBQUcsR0FBQSxDQUFNQSxDQUFBQSxDQUFHLEtBQUssTUFBQSxFQUN0QkMsQ0FBQUEsQ0FBRyxLQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQyxFQUV6QixLQUFPQyxDQUFBQSxDQUFHLElBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQSxHQUFNLENBQUEsRUFDNUJBLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFaEIsT0FBT3JCLEdBQXVCekMsQ0FBQUEsQ0FBUzhELENBQUFBLENBQUcsSUFBSSxDQUFDLENBQ2pELENBRUEsU0FBU0MsRUFBQUEsQ0FBYUosRUFBZVYsQ0FBQUEsQ0FBbUJlLENBQUFBLENBQWlCQyxFQUF5QixDQUNoRyxJQUFNVixFQUFPZixDQUFBQSxDQUEwQm1CLENBQUssRUFDdENFLENBQUFBLENBQUssSUFBSW5ELEVBQVU2QyxDQUFJLENBQUEsQ0FDdkJPLEVBQUssSUFBSTFELENBQUFBLENBQ2YsUUFBU3pHLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJc0osQ0FBQUEsQ0FBV3RKLENBQUFBLEVBQUFBLENBQzdCbUssRUFBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQU16QixJQUpBQSxDQUFBQSxDQUFHLFFBQU8sQ0FDVkEsQ0FBQUEsQ0FBRyxRQUFPLENBQ1ZDLENBQUFBLENBQUcsR0FBR0UsQ0FBTyxDQUFBLENBQ2JGLEVBQUcsRUFBQSxDQUFHRyxDQUFPLEVBQ05KLENBQUFBLENBQUcsR0FBQSxDQUFNQSxFQUFHLElBQUEsQ0FBSyxNQUFBLEVBQ3RCQyxFQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBRXpCLEtBQU9DLEVBQUcsSUFBQSxDQUFLLE1BQUEsQ0FBUyxJQUFNLENBQUEsRUFDNUJBLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUssQ0FBQyxFQUVoQixPQUFPckIsRUFBQUEsQ0FBdUJ6QyxFQUFTOEQsQ0FBQUEsQ0FBRyxJQUFJLENBQUMsQ0FDakQsQ0FHTyxTQUFTSSxFQUFBQSxDQUFnQkMsQ0FBQUEsQ0FBcUIsQ0FDbkQsSUFBTUMsQ0FBQUEsQ0FBaUJ6QixFQUFBQSxDQUFjLEdBQ3JDLE9BQU9lLEVBQUFBLENBQWFTLEVBQUtDLENBQUFBLENBQWdCLENBQUMsQ0FDNUMsQ0FHTyxTQUFTQyxHQUFnQkMsQ0FBQUEsQ0FBcUIsQ0FDbkQsT0FBT1AsRUFBQUEsQ0FBYU8sQ0FBQUEsQ0FBSyxHQUEyQixDQUFBLENBQUcsQ0FBQyxDQUMxRCxDQUlBLFNBQVNDLEdBQU9WLENBQUFBLENBQXVCLENBQ3JDLElBQU1XLENBQUFBLENBQUtYLENBQUFBLENBQUcsUUFBTyxDQUNyQixPQUFPVyxFQUFLLENBQUEsQ0FBS0EsQ0FBQUEsQ0FBSyxHQUFNLENBQUEsQ0FBSSxFQUFFQSxHQUFNLENBQUEsQ0FDMUMsQ0FHQSxTQUFTQyxFQUFBQSxDQUF1QlosQ0FBQUEsQ0FBZWEsQ0FBQUEsQ0FBZ0MsQ0FFN0UsR0FEa0JiLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDWixDQUNiLElBQU1jLENBQUFBLENBQWlCZCxFQUFHLE1BQUEsRUFBTyxDQUNqQyxHQUFJYyxDQUFBQSxHQUFtQixDQUFBLENBQ3JCLE1BQU0sSUFBSSxLQUFBLENBQU0sNENBQTRDQSxDQUFjLENBQUEsQ0FBRSxFQUU5RWQsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsTUFBQSxHQUNILElBQUEsSUFBUzNCLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsRUFBS3dDLENBQUFBLENBQWtCeEMsSUFDeEIyQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsRUFFcEJBLENBQUFBLENBQUcsS0FBSyxDQUFDLEVBR2YsTUFBTyxDQUNMLElBQU1lLEVBQVNmLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQ25CZ0IsQ0FBQUEsQ0FBU2hCLENBQUFBLENBQUcsTUFBQSxHQUNsQixJQUFBLElBQVMsQ0FBQSxDQUFJLEVBQUcsQ0FBQSxDQUFJZSxDQUFBQSxDQUFRLElBQzFCZixDQUFBQSxDQUFHLE1BQUEsR0FDSEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRVgsSUFBQSxJQUFTLEVBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSWdCLEVBQVEsQ0FBQSxFQUFBLENBQzFCaEIsQ0FBQUEsQ0FBRyxRQUFPLENBQ1ZBLENBQUFBLENBQUcsS0FBSyxDQUFDLEVBRWIsQ0FDRixDQUdBLFNBQVNpQixHQUF1QmpCLENBQUFBLENBQWVrQixDQUFBQSxDQUFpQkMsRUFBOEIsQ0FFNUYsR0FEQW5CLEVBQUcsSUFBQSxDQUFLLEVBQUUsRUFDTkEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLEdBQU0sQ0FBQSxDQUNqQixNQUFNLElBQUksS0FBQSxDQUFNLHlEQUF5RCxFQUUzRSxJQUFNb0IsQ0FBQUEsQ0FBU0YsR0FBV2xFLEVBQUFBLEVBQWdCa0UsQ0FBQUEsRUFBV2pFLEdBQ2pEbUUsQ0FBQUEsRUFDRnBCLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FFWEEsRUFBRyxNQUFBLEVBQU8sQ0FDVixJQUFNcUIsQ0FBQUEsQ0FBWXJCLENBQUFBLENBQUcsUUFBTyxDQUM1QixHQUFJLENBQUNvQixDQUFBQSxDQUFRLENBUVgsR0FQQXBCLEVBQUcsSUFBQSxDQUFLbUIsQ0FBQUEsQ0FBSSxhQUFhLENBQUEsQ0FDRW5CLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FHekJtQixFQUFJLHNCQUFBLENBQXlCLENBQUEsRUFDdENuQixFQUFHLElBQUEsQ0FBSyxJQUFBLENBQUssS0FBSyxJQUFBLENBQUssSUFBQSxDQUFLbUIsRUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUEsQ0FGeERQLEVBQUFBLENBQXVCWixDQUFBQSxDQUFJbUIsRUFBSSxnQkFBZ0IsQ0FBQSxDQUk3Q0EsRUFBSSxzQkFBQSxDQUNOLE1BQU0sSUFBSSxLQUFBLENBQU0sb0RBQW9ELEVBRWxFQSxDQUFBQSxDQUFJLHFCQUFBLEVBQ05uQixFQUFHLElBQUEsQ0FBSyxDQUFDLEVBRWIsQ0FDQSxPQUFJbUIsRUFBSSxVQUFBLEdBQ05uQixDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsSUFFUHFCLENBQUFBLEdBQWNuQyxFQUFBQSxFQUFnQm1DLElBQWNwQyxFQUFBQSxJQUN6QmUsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxHQUU1QkEsRUFBRyxNQUFBLEVBQU8sQ0FDTnFCLElBQWNwQyxFQUFBQSxFQUNoQmUsQ0FBQUEsQ0FBRyxRQUFPLENBQUEsQ0FHVnFCLENBQUFBLEdBQWNwQyxFQUFBQSxFQUNoQmUsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUVQbUIsQ0FBQUEsQ0FBSSxnQkFBQSxFQUNObkIsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUVYQSxDQUFBQSxDQUFHLE1BQUEsSUFFTFUsRUFBQUEsQ0FBT1YsQ0FBRSxFQUNMbUIsQ0FBQUEsQ0FBSSxnQ0FBQSxFQUNObkIsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUVKQSxDQUFBQSxDQUFHLEdBQ1osQ0FPTyxTQUFTc0IsRUFBQUEsQ0FBd0JDLENBQUFBLENBQWVMLEVBQWlCQyxDQUFBQSxDQUE4QixDQUNwRyxJQUFNekIsQ0FBQUEsQ0FBT2YsQ0FBQUEsQ0FBMEI0QyxDQUFLLENBQUEsQ0FDdEN2QixDQUFBQSxDQUFLLElBQUluRCxDQUFBQSxDQUFVNkMsQ0FBSSxFQUV2QjhCLENBQUFBLENBQVEsSUFBSTNFLEVBQVU2QyxDQUFJLENBQUEsQ0FDMUIrQixFQUFJUixFQUFBQSxDQUF1Qk8sQ0FBQUEsQ0FBT04sQ0FBQUEsQ0FBU0MsQ0FBRyxDQUFBLENBQzlDTyxDQUFBQSxDQUFlRCxFQUFJLENBQUEsR0FBTSxDQUFBLENBQUksRUFBSSxDQUFBLENBQUtBLENBQUFBLENBQUksRUFDMUNFLENBQUFBLENBQUFBLENBQXVCRixDQUFBQSxDQUFJQyxHQUFnQixDQUFBLENBRTNDekIsQ0FBQUEsQ0FBSyxJQUFJMUQsQ0FBQUEsQ0FDZixJQUFBLElBQVN6RyxFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSSxHQUFJQSxDQUFBQSxFQUFBQSxDQUN0Qm1LLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUtELENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUMsRUFXekIsSUFUQUMsQ0FBQUEsQ0FBRyxLQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQyxFQUNSa0IsQ0FBQUEsRUFBV2xFLEVBQUFBLEVBQWdCa0UsR0FBV2pFLEVBQUFBLEVBRW5EZ0QsQ0FBQUEsQ0FBRyxLQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FHekJBLEVBQUcsTUFBQSxFQUFPLENBQ1ZDLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFFQUQsQ0FBQUEsQ0FBRyxHQUFBLENBQU15QixHQUNkeEIsQ0FBQUEsQ0FBRyxJQUFBLENBQUssS0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FJekIsSUFEQUMsQ0FBQUEsQ0FBRyxJQUFBLENBQUssS0FBSyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxJQUFBLENBQUssTUFBQSxDQUFTLElBQU0sQ0FBQSxFQUM1QkEsQ0FBQUEsQ0FBRyxLQUFLLElBQUEsQ0FBSyxDQUFDLEVBR2hCLE9BQU9yQixFQUFBQSxDQUF1QixPQUFPLE1BQUEsQ0FBTyxDQUFDekMsRUFBUzhELENBQUFBLENBQUcsSUFBSSxFQUFHUCxDQUFBQSxDQUFLLFFBQUEsQ0FBU2lDLENBQW1CLENBQUMsQ0FBQyxDQUFDLENBQ3RHLENDL05BLFNBQVNDLEdBQVdDLENBQUFBLENBQXdDLENBQzFELElBQU03QixDQUFBQSxDQUFLLElBQUluRCxFQUFVOEIsQ0FBQUEsQ0FBMEJrRCxDQUFPLENBQUMsQ0FBQSxDQUkzRCxHQUhBN0IsRUFBRyxJQUFBLENBQUssRUFBRSxFQUNWQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNMQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQUksQ0FBQSxDQUNmLE9BRUYsSUFBTThCLENBQUFBLENBQXFCOUIsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNwQ0EsRUFBRyxJQUFBLENBQUssRUFBTSxFQUVkLElBQU0rQixDQUFBQSxDQUFXL0IsQ0FBQUEsQ0FBRyxHQUFBLENBQ3BCLE9BQUFBLENBQUFBLENBQUcsS0FBSyxFQUFFLENBQUEsQ0FDTjhCLEVBQXFCLENBQUEsRUFDdkI5QixDQUFBQSxDQUFHLEtBQUs4QixDQUFBQSxDQUFxQixDQUFBLENBQUEsQ0FBSyxFQUFJQSxDQUFBQSxFQUFzQixDQUFDLEVBRXhELENBQUUsUUFBQSxDQUFBQyxFQUFVLE1BQUEsQ0FBUS9CLENBQUFBLENBQUcsSUFBSyxPQUFBLENBQVNBLENBQUFBLENBQUcsSUFBQSxDQUFNLGtCQUFBLENBQUE4QixDQUFtQixDQUMxRSxDQUdBLFNBQVNFLEVBQUFBLENBQWEvQixFQUFlZ0MsQ0FBQUEsQ0FBZ0IsQ0FDbkRoQyxFQUFHLENBQUEsQ0FBRSxLQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRWdDLEVBQUksa0JBQUEsQ0FBb0IsQ0FBQyxFQUU5QmhDLENBQUFBLENBQUcsSUFBQSxDQUFLZ0MsRUFBSSxrQkFBQSxHQUF1QixDQUFDLEVBQ3BDaEMsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsTUFBUSxFQUFFLENBQUEsQ0FDZkEsRUFBRyxJQUFBLENBQUtnQyxDQUFBQSxDQUFJLFFBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxFQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURoQyxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1QsUUFBU25LLENBQUFBLENBQUksQ0FBQSxDQUFHQSxHQUFLbU0sQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQm5NLElBQzNDbUssQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBR1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEtBQUEsQ0FBTSxDQUFDLEVBQ1osQ0FHQSxTQUFTaUMsR0FBa0JqQyxDQUFBQSxDQUFlZ0MsQ0FBQUEsQ0FBZ0J6TSxFQUFlQyxDQUFBQSxDQUFnQixDQUd2RixHQURBd0ssQ0FBQUEsQ0FBRyxJQUFBLENBQUtnQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxNQUFBLENBQVMsRUFBRyxDQUFDLENBQUEsQ0FDbENBLEVBQUksa0JBQUEsQ0FBcUIsQ0FBQSxDQUFHLENBQzlCLElBQUEsSUFBU25NLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSW1NLENBQUFBLENBQUksbUJBQW9Cbk0sQ0FBQUEsRUFBQUEsQ0FDMUNtSyxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFFWCxJQUFBLElBQVNuSyxDQUFBQSxDQUFJbU0sRUFBSSxrQkFBQSxDQUFvQm5NLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsRUFBQUEsQ0FDMUNtSyxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFFYixDQUVBQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1QsUUFBU25LLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJLEVBQUEsQ0FBSUEsQ0FBQUEsRUFBQUEsQ0FDdEJtSyxFQUFHLElBQUEsQ0FBS25LLENBQUFBLEdBQU0sQ0FBQSxFQUFLQSxDQUFBQSxHQUFNLENBQUMsQ0FBQSxDQUU1Qm1LLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FFVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUdUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBS2dDLENBQUFBLENBQUksUUFBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLEVBQUksTUFBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQVEsQ0FBQSxDQUU1RGhDLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FFVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFekssQ0FBQUEsQ0FB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QUFNdkQsQ0FBQUEsQ0FBUXVELENBQUFBLENBQ1IwakIsRUFBSWpuQixDQUFBQSxDQUFNLEtBQUEsRUFBU0EsRUFBTSxPQUFBLEVBQVcsTUFBQSxDQUFPdUQsR0FBSyxlQUFlLENBQUEsQ0FDckUsTUFBTXVqQixDQUFBQSxDQUFJLFVBQUEsQ0FBV0csQ0FBQyxFQUN4QixDQUFBLE9BQUUsQ0FDQU4sRUFBQUEsQ0FBVSxJQUFBLENBQ1ZubEIsYUFBSSxJQUFBLEdBQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cblxuLy8gQ29tbWEtc2VwYXJhdGVkIHN0cmluZyDihpIgYXJyYXkgdmlhIGEgcGVyLWl0ZW0gcGFyc2VyOyBlbXB0eS9ibGFuayDihpIgW10uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJheTxUPihpdGVtOiAoeDogdW5rbm93bikgPT4gVCk6ICh4OiB1bmtub3duKSA9PiBUW10ge1xuICByZXR1cm4gKHgpID0+IHtcbiAgICBpZiAodHlwZW9mIHggIT09IFwic3RyaW5nXCIgfHwgeC50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHguc3BsaXQoXCIsXCIpLm1hcCgocykgPT4gaXRlbShzLnRyaW0oKSkpO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBBdWRpb1ByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJhdWRpb19wcmVsb2FkLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBTaG9vdFByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJzaG9vdF9wcmVsb2FkLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBSZW5kZXJQcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwicmVuZGVyX3ByZWxvYWQuY2pzXCIpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiAoLi4ubWVzc2FnZXM6IHVua25vd25bXSkgPT4gdW5rbm93biwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikge1xuICAgIGxvZ2dlci5lcnJvcihtc2cpO1xuICB9IGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSB7XG4gICAgbG9nZ2VyLndhcm4obXNnKTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yMS5cblxuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbQ3Jhc2hdXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpIHtcbiAgLy8gYXBwRGF0YSAobm90IHRoZSBwZXItcnVuIHVzZXItZGF0YS1kaXIpIHNvIGV2ZXJ5IHB1cCBhcHAncyBkdW1wcyBhY2N1bXVsYXRlIGluIG9uZSBzaGFyZWQsIHBlcnNpc3RlbnQgZGlyLlxuICBjb25zdCBkdW1wRGlyID0gam9pbihhcHAuZ2V0UGF0aChcImFwcERhdGFcIiksIFwicHVwLXJlY29yZGVyXCIsIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxBIGV4dGVuZHMgdW5rbm93bltdLCBSLCBEPihmbjogKC4uLmFyZ3M6IEEpID0+IFIsIGRlZmF1bHRWYWx1ZTogRCk6ICguLi5hcmdzOiBBKSA9PiBSIHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKSBhcyBSIHwgRDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucywgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAgZ2V0IGtpbGxlZCgpOiBib29sZWFuO1xuICBraWxsKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIH1cbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIGxldCBraWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzOiBwcm9jLFxuICAgIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCksXG4gICAgZ2V0IGtpbGxlZCgpIHtcbiAgICAgIHJldHVybiBraWxsZWQ7XG4gICAgfSxcbiAgICBraWxsKCkge1xuICAgICAgaWYgKGtpbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB7XG4gICAgICAgIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9XSU5ET1dfVElNRU9VVCA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEVTID0gW1wib3V0L2h0bWwubXA0XCIsIFwib3V0L2h0bWwud2VibVwiXTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlczogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZShcIk91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG4gIHdpbmRvd1RpbWVvdXQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJXaW5kb3cgbG9hZCB0aW1lb3V0IGluIHNlY29uZHNcIiksXG4gIHNjcmVlbnNob3RzOiB6LmFycmF5KHoubnVtYmVyKCkpLmRlc2NyaWJlKFwiU2Vjb25kIG1hcmtzIHRvIGR1bXAgZnJhbWUgYml0bWFwcyBhcyBQTkdcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIHJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBzY3JlZW5zaG90czogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlczogREVGQVVMVF9PVVRfRklMRVMsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IGZhbHNlLFxuICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgZGlzYWJsZUdwdTogZmFsc2UsXG4gIGRpc2FibGVId0NvZGVjOiBmYWxzZSxcbiAgd2luZG93VG9sZXJhbnQ6IGZhbHNlLFxuICB3aW5kb3dUaW1lb3V0OiBERUZBVUxUX1dJTkRPV19USU1FT1VULFxuICBzY3JlZW5zaG90czogW10sXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlQXJyYXksIHBhcnNlTnVtYmVyLCBwYXJzZVN0cmluZyB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMsIHR5cGUgUmVuZGVyT3B0aW9ucywgcmVuZGVyU2NoZW1hIH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbi8vIFNjaGVtZWQgVVJJcyBwYXNzIHRocm91Z2g7IGJhcmUgcGF0aHMgZ2V0IGNhbm9uaWNhbGl6ZWQgYW5kIHdyYXBwZWQgYXMgZmlsZTovLy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNvdXJjZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocy5pbmNsdWRlcyhcIjovL1wiKSB8fCBzLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkge1xuICAgIHJldHVybiBzO1xuICB9XG4gIGxldCBhYnM6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBhYnMgPSByZWFscGF0aFN5bmMocyk7XG4gIH0gY2F0Y2gge1xuICAgIGFicyA9IHJlc29sdmUocyk7XG4gIH1cbiAgcmV0dXJuIGBmaWxlOi8vJHthYnN9YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IHJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgZGF0YTogVVJJLCBvciBmaWxlc3lzdGVtIHBhdGhcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLVMsIC0tc2NyZWVuc2hvdHMgPHNlY29uZHM+XCIsIHNoYXBlLnNjcmVlbnNob3RzLmRlc2NyaXB0aW9uLCBcIlwiKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aHM+XCIsIHNoYXBlLm91dEZpbGVzLmRlc2NyaXB0aW9uLCBkLm91dEZpbGVzLmpvaW4oXCIsXCIpKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi1kLCAtLWRldGVybWluaXN0aWNcIiwgc2hhcGUuZGV0ZXJtaW5pc3RpYy5kZXNjcmlwdGlvbiwgZC5kZXRlcm1pbmlzdGljKVxuICAgIC5vcHRpb24oXCItLXVzZS1pbm5lci1wcm94eVwiLCBzaGFwZS51c2VJbm5lclByb3h5LmRlc2NyaXB0aW9uLCBkLnVzZUlubmVyUHJveHkpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ncHVcIiwgc2hhcGUuZGlzYWJsZUdwdS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlR3B1KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtaHctY29kZWNcIiwgc2hhcGUuZGlzYWJsZUh3Q29kZWMuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUh3Q29kZWMpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRvbGVyYW50XCIsIHNoYXBlLndpbmRvd1RvbGVyYW50LmRlc2NyaXB0aW9uLCBkLndpbmRvd1RvbGVyYW50KVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10aW1lb3V0IDxudW1iZXI+XCIsIHNoYXBlLndpbmRvd1RpbWVvdXQuZGVzY3JpcHRpb24sIGAke2Qud2luZG93VGltZW91dH1gKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcHRpb25zLnJ1bihub3JtYWxpemVTb3VyY2Uoc291cmNlKSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZXM6IHBhcnNlQXJyYXkocGFyc2VTdHJpbmcpKG9wdHMub3V0RmlsZSksXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgICAgICAgIGRldGVybWluaXN0aWM6IG9wdHMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgICAgICAgZGlzYWJsZUdwdTogb3B0cy5kaXNhYmxlR3B1ID8/IGQuZGlzYWJsZUdwdSxcbiAgICAgICAgICBkaXNhYmxlSHdDb2RlYzogb3B0cy5kaXNhYmxlSHdDb2RlYyA/PyBkLmRpc2FibGVId0NvZGVjLFxuICAgICAgICAgIHdpbmRvd1RvbGVyYW50OiBvcHRzLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgICAgICAgd2luZG93VGltZW91dDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2luZG93VGltZW91dCkob3B0cy53aW5kb3dUaW1lb3V0KSxcbiAgICAgICAgICBzY3JlZW5zaG90czogcGFyc2VBcnJheShwYXJzZU51bWJlcikob3B0cy5zY3JlZW5zaG90cyksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENvbnNvbGUgPSBcImNvbnNvbGVcIixcbiAgUHJvZ3Jlc3MgPSBcInByb2dyZXNzXCIsXG4gIERvbmUgPSBcImRvbmVcIixcbiAgRXJyb3IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ2FuY2VsID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3M7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9uZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRG9uZTtcbiAgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkVycm9yO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJcGNNc2cgPSBDb25zb2xlTXNnIHwgUHJvZ3Jlc3NNc2cgfCBEb25lTXNnIHwgRXJyb3JNc2cgfCBDYW5jZWxNc2c7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRXZlbnRzIHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgY29uc29sZTogW2xldmVsOiBzdHJpbmcsIG1zZzogc3RyaW5nXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW2NvZGU6IG51bWJlciB8IG51bGxdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVDb25zb2xlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZSwgbGV2ZWwsIG1lc3NhZ2UgfSk7XG4gIH1cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkVycm9yLCBlcnJvciB9KTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkRvbmUsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmQobXNnOiBJcGNNc2cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghcHJvY2Vzcy5zZW5kKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ29uc29sZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlByb2dyZXNzOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRG9uZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FcnJvcjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4ocDogUHJvbWlzZTxUPiwgbXM6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfSB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKSwgbXMpO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gIH0pO1xufVxuXG4vLyBSZWplY3QgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMsIGVsc2Ugc2V0dGxlIHdpdGggYHBgOyBuby1vcCBwYXNzdGhyb3VnaCB3aGVuIG5vIHNpZ25hbC5cbmV4cG9ydCBmdW5jdGlvbiBhYm9ydGFibGU8VD4ocDogUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm4gcDtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpKTtcbiAgfSk7XG59XG5cbi8vIENhbGxiYWNrIG1heSByZXR1cm4gdGhlIG5leHQgaW50ZXJ2YWwgKG1zKSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBmb3IgdGhlIGZvbGxvd2luZyB0aWNrLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbmV4dCA/PyBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5jb25zdCBDRFBfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VuZChjZHA6IERlYnVnZ2VyLCBtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogb2JqZWN0KTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChjZHAuc2VuZENvbW1hbmQobWV0aG9kLCBwYXJhbXMpLCBDRFBfVElNRU9VVF9NUywgYGNkcC4ke21ldGhvZH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbihjZHA6IERlYnVnZ2VyLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uIH0pLCBDRFBfVElNRU9VVF9NUywgXCJldmFsSW5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlciwgYnVkZ2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYGFkdmFuY2VWaXJ0dWFsVGltZSB0aW1lZCBvdXQgYWZ0ZXIgJHtDRFBfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBDRFBfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAvLyBObyBzdGFydmF0aW9uIGNhcCAod291bGQgc2tpcCBwZW5kaW5nIHdvcmsgbm9uLWRldGVybWluaXN0aWNhbGx5KTsgY2FwdHVyZSBzdGFydHMgcG9zdCBkaWQtc3RvcC1sb2FkaW5nLCBhbmQgQ0RQX1RJTUVPVVRfTVMgdHVybnMgYSByZWFsIHN0YWxsIGludG8gYSBmYWlsZWQgcmVuZGVyLlxuICAgIHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNpemVEcmF3YWJsZShjZHA6IERlYnVnZ2VyLCBzaXplOiBTaXplKSB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgIC4uLnNpemUsXG4gICAgZGV2aWNlU2NhbGVGYWN0b3I6IDEsXG4gICAgbW9iaWxlOiBmYWxzZSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcblxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnJHtTVEVHT19USUNLX0NIQU5ORUx9Jyk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX2RyYXdfc3RlZ29fXyA9IChtcykgPT4ge1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAobXMpO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdGFydF9zdGVnb19fKClgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RvcF9zdGVnb19fKClgKTtcbn1cblxuLy8gUGFpbnRzIHRoZSBzdGVnbyByb3cgZm9yIGBleHBlY3RlZGAgbXMgc3luY2hyb25vdXNseTsgdGhlIGRhbWFnZSByaWRlcyBvdXQgb24gdGhlIG5leHQgY29tcG9zaXRlZCBmcmFtZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmF3U3RlZ28od2M6IFdlYkNvbnRlbnRzLCBleHBlY3RlZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV2YWxJbih3Yy5kZWJ1Z2dlciwgYF9fcHVwX2RyYXdfc3RlZ29fXygke2V4cGVjdGVkfSlgKTtcbn1cblxuLy8gUmVzb2x2ZXMgd2hlbiB0aGUgcmVuZGVyZXIgY29tbWl0dGVkIHRoZSBzdGVnbyByb3c7IGFybSBCRUZPUkUgZHJhd1N0ZWdvIHRvIGF2b2lkIG1pc3NpbmcgdGhlIGFjay5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0U3RlZ29UaWNrKHdjOiBXZWJDb250ZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzdGVnbyB0aWNrXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIHJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZCBob25vcnMgb25seSB0aGUgTEFTVCBjYWxsIOKAlCByZWdpc3RlciBldmVyeSBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIGxpc3QgYmVsb3cuXG5jb25zdCBQUklWSUxFR0VEX1BSSVZJTEVHRVMgPSB7XG4gIHN0YW5kYXJkOiB0cnVlLFxuICBzZWN1cmU6IHRydWUsXG4gIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgYWxsb3dTZXJ2aWNlV29ya2VyczogdHJ1ZSxcbiAgc3VwcG9ydEZldGNoQVBJOiB0cnVlLFxuICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgc3RyZWFtOiB0cnVlLFxuICBjb2RlQ2FjaGU6IHRydWUsXG59IGFzIGNvbnN0O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGJlZm9yZSBhcHAgaXMgcmVhZHkuXG5wcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQoW1xuICB7IHNjaGVtZTogUFVQX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG4gIHsgc2NoZW1lOiBGUkFNRV9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjLnJlcGxhY2UoXCJodHRwOi8vXCIsIFwiaHR0cHM6Ly9cIikpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcIndcIiwgU3RyaW5nKHNpemUud2lkdGgpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJoXCIsIFN0cmluZyhzaXplLmhlaWdodCkpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzAzLlxuXG5jb25zdCBHUklEID0gMzI7IC8vIHJlc29sdXRpb24taW5kZXBlbmRlbnQgMzLDlzMyIHNhbXBsZSBsYXR0aWNlXG5jb25zdCBCTEFOS19SQU5HRSA9IDg7IC8vIG1heCBwZXItY2hhbm5lbCBzcGF0aWFsIHNwcmVhZCAoMC0yNTUpIHRvIHRyZWF0IGEgZnJhbWUgYXMgY29udGVudGxlc3NcbmV4cG9ydCBjb25zdCBCTEFOS19XQVJOX1JBVElPID0gMC41OyAvLyBibGFuay1mcmFtZSBmcmFjdGlvbiBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmRcblxuLy8gQmxhbmsgPSBuZWFyLXVuaWZvcm06IHBlci1jaGFubmVsIHNwYXRpYWwgcmFuZ2UgYmVsb3cgdGhyZXNob2xkID0gbm90aGluZyByZW5kZXJlZCAod2hpdGUvYmxhY2svYW55IHNvbGlkIHNjcmVlbikuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua0ZyYW1lKGJncmE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgc3RlcFggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHdpZHRoIC8gR1JJRCkpO1xuICBjb25zdCBzdGVwWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gR1JJRCkpO1xuICBsZXQgck1pbiA9IDI1NTtcbiAgbGV0IHJNYXggPSAwO1xuICBsZXQgZ01pbiA9IDI1NTtcbiAgbGV0IGdNYXggPSAwO1xuICBsZXQgYk1pbiA9IDI1NTtcbiAgbGV0IGJNYXggPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBzdGVwWSkge1xuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gc3RlcFgpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgY29uc3QgYiA9IGJncmEucmVhZFVJbnQ4KGkpO1xuICAgICAgY29uc3QgZyA9IGJncmEucmVhZFVJbnQ4KGkgKyAxKTtcbiAgICAgIGNvbnN0IHIgPSBiZ3JhLnJlYWRVSW50OChpICsgMik7XG4gICAgICByTWluID0gTWF0aC5taW4ock1pbiwgcik7XG4gICAgICByTWF4ID0gTWF0aC5tYXgock1heCwgcik7XG4gICAgICBnTWluID0gTWF0aC5taW4oZ01pbiwgZyk7XG4gICAgICBnTWF4ID0gTWF0aC5tYXgoZ01heCwgZyk7XG4gICAgICBiTWluID0gTWF0aC5taW4oYk1pbiwgYik7XG4gICAgICBiTWF4ID0gTWF0aC5tYXgoYk1heCwgYik7XG4gICAgfVxuICB9XG4gIHJldHVybiBNYXRoLm1heChyTWF4IC0gck1pbiwgZ01heCAtIGdNaW4sIGJNYXggLSBiTWluKSA8PSBCTEFOS19SQU5HRTtcbn1cblxuZXhwb3J0IGNsYXNzIEJsYW5rRnJhbWVTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF90b3RhbCA9IDA7XG4gIHByaXZhdGUgX2JsYW5rID0gMDtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgc2FtcGxlKGZyYW1lOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90b3RhbCsrO1xuICAgIGlmIChpc0JsYW5rRnJhbWUoZnJhbWUsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpKSB7XG4gICAgICB0aGlzLl9ibGFuaysrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyYWN0aW9uIG9mIHdyaXR0ZW4gZnJhbWVzIHRoYXQgd2VyZSBjb250ZW50bGVzcyAoMCA9IGFsbCBoYWQgY29udGVudCwgMSA9IGFsbCBibGFuaykuXG4gIGZpbmFsaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsID4gMCA/IHRoaXMuX2JsYW5rIC8gdGhpcy5fdG90YWwgOiAwO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHtcbiAgdHlwZSBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRnJhbWUsXG4gIHR5cGUgSGFyZHdhcmVGcmFtZXNDb250ZXh0LFxuICBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmV4cG9ydCBjb25zdCBGRl9FTkNPREVSX0xJQlZQWF9WUDkgPSBcImxpYnZweC12cDlcIiBhcyBGRlZpZGVvRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgY3R4IGlmIGFueSBzZXR0ZXIvb3BlbjIgdGhyb3dzIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBzdGFjay51c2UoY3R4KTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSB7XG4gICAgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgfVxuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgfVxuICBpZiAob3B0cy5od0ZyYW1lc0N0eCkge1xuICAgIGN0eC5od0ZyYW1lc0N0eCA9IG9wdHMuaHdGcmFtZXNDdHg7XG4gIH1cbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkge1xuICAgIGN0eC5zZXRPcHRpb24oaywgdik7XG4gIH1cbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIGZyYW1lIGlmIGdldEJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShmcmFtZSk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInJlY2VpdmVQYWNrZXRcIik7XG4gICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikge1xuICAgICAgICBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICAgIH1cbiAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgY3R4IGlmIG9wZW4yIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBzdGFjay51c2UocG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIHR5cGUgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICB9XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyBjdHggaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIHN0YWNrLnVzZShjdHgpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSB7XG4gICAgICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICB9XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZnJlZXMgdGhlIGdyYXBoIGlmIGZpbHRlciBzZXR1cCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIHN0YWNrLnVzZShncmFwaCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICB9XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzcmNbaV0hKSkge1xuICAgICAgICBzcmNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIHtcbiAgICAgIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgfVxuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgZmxhZyh2YWw6IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICB0aGlzLmJpdHMucHVzaCh2YWwgPyAxIDogMCk7XG4gIH1cbiAgdWUodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCB2ID0gdmFsICsgMTtcbiAgICBjb25zdCBsZW4gPSAzMiAtIE1hdGguY2x6MzIodik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKDApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gICAgfVxuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChwYWQpO1xuICAgIH1cbiAgfVxuICBjb3B5KHNyYzogbnVtYmVyW10sIHN0YXJ0OiBudW1iZXIsIGxlbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goc3JjW3N0YXJ0ICsgaV0hKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHtcbiAgICAgICAgdGhpcy5fYml0cy5wdXNoKChkYXRhW2ldISA+PiBiKSAmIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgYml0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYml0cztcbiAgfVxuICByZWFkKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB7XG4gICAgICB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgfVxuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuLy8gSEVWQyBOQUwgdW5pdCB0eXBlcyAoVC1SRUMtSC4yNjUgVGFibGUgNy0xKVxuZXhwb3J0IGNvbnN0IE5BTF9CTEFfV19MUCA9IDE2O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfV19SQURMID0gMTk7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9OX0xQID0gMjA7XG5leHBvcnQgY29uc3QgTkFMX1JTVl9JUkFQX1ZDTDIzID0gMjM7XG5leHBvcnQgY29uc3QgTkFMX1ZQUyA9IDMyO1xuZXhwb3J0IGNvbnN0IE5BTF9TUFMgPSAzMztcbmV4cG9ydCBjb25zdCBOQUxfUFBTID0gMzQ7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9QUkVGSVggPSAzOTtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1NVRkZJWCA9IDQwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBuYWxFbmQgPSBiaXRzdHJlYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGogPSBuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRTsgaiA8IGJpdHN0cmVhbS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgYml0c3RyZWFtW2pdID09PSAwICYmXG4gICAgICAgIGJpdHN0cmVhbVtqICsgMV0gPT09IDAgJiZcbiAgICAgICAgKGJpdHN0cmVhbVtqICsgMl0gPT09IDEgfHwgKGogKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baiArIDJdID09PSAwICYmIGJpdHN0cmVhbVtqICsgM10gPT09IDEpKVxuICAgICAgKSB7XG4gICAgICAgIG5hbEVuZCA9IGo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdHlwZSwgbGF5ZXJJZCB9ID0gcGFyc2VOYWxUeXBlKGJpdHN0cmVhbVtuYWxTdGFydF0hLCBiaXRzdHJlYW1bbmFsU3RhcnQgKyAxXSEpO1xuICAgIG5hbHMucHVzaCh7IHR5cGUsIGxheWVySWQsIGRhdGE6IGJpdHN0cmVhbS5zdWJhcnJheShuYWxTdGFydCwgbmFsRW5kKSB9KTtcbiAgICBpID0gbmFsRW5kO1xuICB9XG5cbiAgcmV0dXJuIG5hbHM7XG59XG5cbi8qKiBSZXdyaXRlIG51aF9sYXllcl9pZCBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxMYXllcklkKG5hbDogQnVmZmVyLCBsYXllcklkOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IHR5cGUsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIodHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJld3JpdGUgbmFsX3VuaXRfdHlwZSBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxUeXBlKG5hbDogQnVmZmVyLCBuZXdUeXBlOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IGxheWVySWQsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIobmV3VHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJlbW92ZSBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMg4oaSIDAwIDAwKSBmcm9tIFJCU1AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICsgMiA8IGRhdGEubGVuZ3RoICYmIGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDMpIHtcbiAgICAgIG91dC5wdXNoKDAsIDApO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChkYXRhW2ldISk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKiogSW5zZXJ0IGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMykgZm9yIEFubmV4IEIgY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKG5hbDogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBvdXQucHVzaChuYWxbMF0hLCBuYWxbMV0hKTtcbiAgbGV0IHplcm9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBuYWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoemVyb3MgPT09IDIgJiYgbmFsW2ldISA8PSAzKSB7XG4gICAgICBvdXQucHVzaCgzKTtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgaWYgKG5hbFtpXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBvdXQucHVzaChuYWxbaV0hKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cbiIsIi8vIENvbmZvcm0gTlZFTkMgb3V0cHV0IHRvIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9hdi1mb3VuZGF0aW9uL0hFVkMtVmlkZW8td2l0aC1BbHBoYS1JbnRlcm9wZXJhYmlsaXR5LVByb2ZpbGUucGRmXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBOQUxfQkxBX1dfTFAsXG4gIE5BTF9SU1ZfSVJBUF9WQ0wyMyxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbixcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG4vLyBQVEwgYml0IG9mZnNldHMgd2l0aGluIGVtdWxhdGlvbi1wcmV2ZW50aW9uLXN0cmlwcGVkIE5BTCAoTkFMIGhlYWRlciBpbmNsdWRlZCkuXG5jb25zdCBWUFNfUFRMX0JJVCA9IDQ4OyAvLyAxNiAoTkFMIGhkcikgKyAzMiAoVlBTIHByZWZpeClcbmNvbnN0IFNQU19QVExfQklUID0gMjQ7IC8vIDE2IChOQUwgaGRyKSArIDggKFNQUyBwcmVmaXgpXG5jb25zdCBQVExfVElFUl9CSVQgPSAyO1xuY29uc3QgUFRMX0NPTVBBVDJfQklUID0gMTA7IC8vIHByb2ZpbGVfc3BhY2UoMikgKyB0aWVyKDEpICsgaWRjKDUpICsgY29tcGF0WzAsMV0oMilcbmNvbnN0IFNMSUNFX1RZUEVfQiA9IDA7XG5jb25zdCBTTElDRV9UWVBFX1AgPSAxO1xuXG5mdW5jdGlvbiBzZXRCaXQoYnVmOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCB2YWx1ZTogMCB8IDEpOiB2b2lkIHtcbiAgY29uc3QgYnl0ZSA9IGJpdE9mZnNldCA+PiAzO1xuICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIChiaXRPZmZzZXQgJiA3KSk7XG4gIGNvbnN0IGN1ciA9IGJ1ZltieXRlXSA/PyAwO1xuICBidWZbYnl0ZV0gPSB2YWx1ZSA/IGN1ciB8IG1hc2sgOiBjdXIgJiB+bWFzaztcbn1cblxuZnVuY3Rpb24gcGF0Y2hQdGwobmFsRGF0YTogQnVmZmVyLCBwdGxTdGFydEJpdDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsRGF0YSk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9USUVSX0JJVCwgMCk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9DT01QQVQyX0JJVCwgMSk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHJic3ApO1xufVxuXG4vKiogUGF0Y2ggZXZlcnkgVlBTL1NQUyBOQUwgaW4gYW4gQW5uZXggQiBiaXRzdHJlYW0gc28gUFRMIG1hdGNoZXMgQXBwbGUveDI2NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEhldmNBbHBoYVB0bChiaXRzdHJlYW06IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbSk7XG4gIGlmIChuYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBiaXRzdHJlYW07XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBuYWxzKSB7XG4gICAgbGV0IGRhdGEgPSBuYWwuZGF0YTtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgVlBTX1BUTF9CSVQpO1xuICAgIH0gZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8vIOKUgOKUgOKUgCB1ZSh2KSByZXdyaXRlIGhlbHBlcnMgKFNQUy9QUFMg4oCUIFJCU1AgY2FuIGdyb3cgZnJlZWx5LCBubyBDQUJBQyB0cmFpbGluZykg4pSA4pSAXG5cbmZ1bmN0aW9uIHJld3JpdGVPbmVVZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbCk7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVR3b1VlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWwxOiBudW1iZXIsIG5ld1ZhbDI6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbDEpO1xuICBidy51ZShuZXdWYWwyKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG4vKiogQWxwaGEgU1BTOiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTcHMoc3BzOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBTUFNfU0VRX0lEX0JJVCA9IFNQU19QVExfQklUICsgOTY7IC8vIFBUTCBpcyA5NiBiaXRzIGZvciBvdXIgcHJvZmlsZSBjb25maWdcbiAgcmV0dXJuIHJld3JpdGVPbmVVZShzcHMsIFNQU19TRVFfSURfQklULCAxKTtcbn1cblxuLyoqIEFscGhhIFBQUzogcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEsIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVBwcyhwcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiByZXdyaXRlVHdvVWUocHBzLCAxNiAvKiBhZnRlciBOQUwgaGVhZGVyICovLCAxLCAxKTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWNlIGhlYWRlciByZXdyaXRlIChtdXN0IHByZXNlcnZlIENBQkFDIGJ5dGUgYWxpZ25tZW50KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcmVhZFNlKGJyOiBCaXRSZWFkZXIpOiBudW1iZXIge1xuICBjb25zdCB1ZSA9IGJyLnJlYWRVZSgpO1xuICByZXR1cm4gdWUgJiAxID8gKHVlICsgMSkgPj4gMSA6IC0odWUgPj4gMSk7XG59XG5cbi8vIElubGluZSBzdF9yZWZfcGljX3NldCAoc3BzX2ZsYWc9MCk7IHN0UnBzSWR4ID0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBpbnRlciBwcmVkaWN0aW9uIG1heSB1c2UgcHJldiBzZXQuXG5mdW5jdGlvbiBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyOiBCaXRSZWFkZXIsIG51bURlbHRhUG9jc1NldDA6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBpbnRlckZsYWcgPSBici5yZWFkKDEpOyAvLyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWdcbiAgaWYgKGludGVyRmxhZykge1xuICAgIGNvbnN0IGRlbHRhSWR4TWludXMxID0gYnIucmVhZFVlKCk7IC8vIHN0UnBzSWR4ID09IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgcHJlc2VudFxuICAgIGlmIChkZWx0YUlkeE1pbnVzMSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcHBsZV9hbHBoYTogdW5leHBlY3RlZCBkZWx0YV9pZHhfbWludXMxPSR7ZGVsdGFJZHhNaW51czF9YCk7XG4gICAgfVxuICAgIGJyLnJlYWQoMSk7IC8vIGRlbHRhX3Jwc19zaWduXG4gICAgYnIucmVhZFVlKCk7IC8vIGFic19kZWx0YV9ycHNfbWludXMxXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPD0gbnVtRGVsdGFQb2NzU2V0MDsgaisrKSB7XG4gICAgICBjb25zdCB1c2VkID0gYnIucmVhZCgxKTtcbiAgICAgIGlmICghdXNlZCkge1xuICAgICAgICBici5yZWFkKDEpOyAvLyB1c2VfZGVsdGFfZmxhZ1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBleHBlY3RlZCBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnPTFcIik7XG4gIH1cbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBici5yZWFkKDEpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHtcbiAgICAgIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICB9IGVsc2UgaWYgKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzID4gMSkge1xuICAgICAgYnIucmVhZChNYXRoLmNlaWwoTWF0aC5sb2cyKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzKSkpO1xuICAgIH1cbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY2ZnLnNwc1RlbXBvcmFsTXZwRW5hYmxlZCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZ1xuICAgIH1cbiAgfVxuICBpZiAoY2ZnLnNhb0VuYWJsZWQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fbHVtYV9mbGFnXG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2Nocm9tYV9mbGFnXG4gIH1cbiAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9QIHx8IHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAob3ZlcnJpZGVGbGFnKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgICAgICBici5yZWFkVWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBtdmRfbDFfemVyb19mbGFnXG4gICAgfVxuICAgIGlmIChjZmcuY2FiYWNJbml0UHJlc2VudCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gY2FiYWNfaW5pdF9mbGFnXG4gICAgfVxuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZ1xuICB9XG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBOQUwgaGVhZGVyXG4gIH1cbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBjb3B5IHJlc3Qgb2YgaGVhZGVyIGJpdHNcbiAgfVxuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICB9XG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICB9XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykge1xuICAgICAgYncudygwLCAyKTtcbiAgICB9XG4gIH1cblxuICBidy5mbGFnKDApOyAvLyBzcGxpdHRpbmdfZmxhZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIH1cbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblswXSA9IDFcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblsxXSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbnVoX2xheWVyX2lkX3ByZXNlbnRcbiAgYncudygxLCA2KTsgLy8gbGF5ZXJfaWRfaW5fbnVoWzFdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVsxXSA9IEFVWF9BTFBIQVxuICBidy53KDAsIDQpOyAvLyB2aWV3X2lkX2xlbiA9IDBcblxuICBidy5mbGFnKDApOyAvLyBkaXJlY3RfZGVwZW5kZW5jeV9mbGFnWzFdWzBdXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX2xheWVyX3NldHNcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyc19tYXhfbWludXMxX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gbWF4X3RpZF9yZWZfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X3JlZl9sYXllcnNfYWN0aXZlXG5cbiAgLy8gRkZtcGVnIGxvb3BzIGZyb20gaW5kZXggMiB0byBuYl9wdGwtMSwgc28gbnB0bF9tMT0yIOKGkiAxIGVudHJ5IGF0IGluZGV4IDJcbiAgYncudWUoMik7IC8vIHZwc19udW1fcHJvZmlsZV90aWVyX2xldmVsX21pbnVzMVxuICBidy5mbGFnKDEpOyAvLyBwcm9maWxlX3ByZXNlbnRfZmxhZ1syXVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX29sc3NcbiAgYncudygwLCAyKTsgLy8gZGVmYXVsdF9vdXRwdXRfbGF5ZXJfaWRjXG4gIGJ3LncoMSwgMik7IC8vIHB0bF9pZHhbMV1bMF0gPSAxIChjZWlsX2xvZzIoMykgPSAyIGJpdHMpXG4gIGJ3LncoMiwgMik7IC8vIHB0bF9pZHhbMV1bMV0gPSAyXG5cbiAgYncudWUoMCk7IC8vIHZwc19udW1fcmVwX2Zvcm1hdHNfbWludXMxXG4gIGJ3Lncod2lkdGgsIDE2KTtcbiAgYncudyhoZWlnaHQsIDE2KTtcbiAgYncuZmxhZygxKTsgLy8gY2hyb21hX2FuZF9iaXRfZGVwdGhfdnBzX3ByZXNlbnRcbiAgYncudygxLCAyKTsgLy8gY2hyb21hX2Zvcm1hdF9pZGMgPSA0OjI6MFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgYncuZmxhZygwKTsgLy8gY29uZm9ybWFuY2Vfd2luZG93X3Zwc19mbGFnXG5cbiAgYncuZmxhZygxKTsgLy8gbWF4X29uZV9hY3RpdmVfcmVmX2xheWVyXG4gIGJ3LmZsYWcoMCk7IC8vIHBvY19sc2JfYWxpZ25lZFxuICBidy5mbGFnKDEpOyAvLyBwb2NfbHNiX25vdF9wcmVzZW50XG5cbiAgLy8gRFBCIGZvciBPTFMgMSAoMiBsYXllcnMsIDEgc3ViLWxheWVyKVxuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJfZmxhZ19pbmZvX3ByZXNlbnRcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMClcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMSlcbiAgYncudWUoMCk7IC8vIG1heF9udW1fcmVvcmRlcl9waWNzXG4gIGJ3LnVlKDApOyAvLyBtYXhfbGF0ZW5jeV9pbmNyZWFzZVxuXG4gIGJ3LnVlKDApOyAvLyBkaXJlY3RfZGVwX3R5cGVfbGVuX21pbnVzMlxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X2RpcmVjdF9kZXBlbmRlbmN5X2ZsYWdcbiAgYncudWUoMCk7IC8vIG5vbl92dWlfZXh0ZW5zaW9uX2xlbmd0aFxuICBidy5mbGFnKDApOyAvLyB2cHNfdnVpX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gdnBzX2V4dGVuc2lvbjJfZmxhZ1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGxldGUgYWxwaGEgVlBTIGZyb20gc2NyYXRjaCwgdXNpbmcgdGhlIG9yaWdpbmFsIE5WRU5DIFZQU1xuICogb25seSBhcyBhIHNvdXJjZSBmb3IgdGhlIFBUTCAocHJvZmlsZS90aWVyL2xldmVsKSBieXRlcy5cbiAqIE1hdGNoZXMgeDI2NSA0LjEgRU5BQkxFX0FMUEhBIFZQUyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhVlBTKHZwc0RhdGE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBwdGwgPSBleHRyYWN0UFRMKHZwc0RhdGEpO1xuICBpZiAoIXB0bCkge1xuICAgIHJldHVybiB2cHNEYXRhO1xuICB9XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIHdyaXRlQmFzZVZQUyhidywgcHRsKTtcbiAgd3JpdGVWUFNFeHRlbnNpb24oYncsIHB0bCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBSQlNQIHN0b3AgYml0XG4gIGJ3LmFsaWduKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHJld3JpdGVBbHBoYVBwcywgcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIsIHJld3JpdGVBbHBoYVNwcyB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgZW5jb2RlTmFsSGVhZGVyLFxuICBOQUxfUFBTLFxuICBOQUxfU0VJX1BSRUZJWCxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgdHlwZSBOYWxVbml0LFxuICByZXdyaXRlTmFsTGF5ZXJJZCxcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG4vLyBCR1JBIGFscGhhIOKGkiBZIHBsYW5lIG9mIHBhY2tlZCBZVVY0MjBQIChjYWxsZXIgcHJlLWZpbGxzIFVWPTEyOCk7IFVpbnQzMiBmYXN0IHBhdGg6IEJHUkEgTEUgdTMyID4+PiAyNCA9IEEgYnl0ZS5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lOiBGcmFtZSwgYnVmOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgaWYgKCFzcmMgfHwgIXNyY0xzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZXh0cmFjdEFscGhhOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgfVxuICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgaWYgKHNyYy5ieXRlT2Zmc2V0ICUgNCA9PT0gMCAmJiBzcmNMcyA9PT0gdyAqIDQpIHtcbiAgICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgeVNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNpemU7IGkrKykge1xuICAgICAgYnVmW2ldID0gc3JjMzJbaV0hID4+PiAyNDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIGNvbnN0IHJvd0Jhc2UgPSB5ICogc3JjTHMgKyAzO1xuICAgICAgY29uc3QgZHN0QmFzZSA9IHkgKiB3O1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIHtcbiAgICAgICAgYnVmW2RzdEJhc2UgKyB4XSA9IHNyY1tyb3dCYXNlICsgeCAqIDRdITtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIEFwcGxlIEhFVkMgQWxwaGEgUHJvZmlsZTogYWxwaGEgU1BTIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZD0xLCBhbHBoYSBQUFMgcGljK3NlcSBpZD0xLlxuZnVuY3Rpb24gcmV3cml0ZUFscGhhUGFyYW1TZXQodHlwZTogbnVtYmVyLCBkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAodHlwZSA9PT0gTkFMX1NQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFTcHMoZGF0YSk7XG4gIH1cbiAgaWYgKHR5cGUgPT09IE5BTF9QUFMpIHtcbiAgICByZXR1cm4gcmV3cml0ZUFscGhhUHBzKGRhdGEpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IE5BTF9WUFMgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY29uc3QgYURhdGEgPSByZXdyaXRlQWxwaGFQYXJhbVNldChuYWwudHlwZSwgYWxwaGFOYWwuZGF0YSk7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYURhdGEsIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaHVua3MucHVzaChidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTogQnVmZmVyIHtcbiAgY29uc3QgcGF5bG9hZFR5cGUgPSAxNjU7XG4gIGNvbnN0IHBheWxvYWRTaXplID0gNDtcbiAgY29uc3QgW2gwLCBoMV0gPSBlbmNvZGVOYWxIZWFkZXIoTkFMX1NFSV9QUkVGSVgsIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjICgwID0gdW5zcGVjaWZpZWQvcHJlbXVsdGlwbGllZDsgbWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICB3cml0ZUJpdHMoMCwgMSk7XG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10sIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IE5BTF9WUFMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihuYWwuZGF0YSwgbmFsLnR5cGUsIGNmZyk7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiwgdHlwZSBBVlBhY2tldEZsYWcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB7IGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQYWNrZXQge1xuICBkYXRhOiBCdWZmZXI7XG4gIHB0czogYmlnaW50O1xuICBkdHM6IGJpZ2ludDtcbiAgZHVyYXRpb246IGJpZ2ludDtcbiAgZmxhZ3M6IEFWUGFja2V0RmxhZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdWFsTGF5ZXJNdXhPcHRpb25zIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbi8vIERyYWlucyB0aGUgYmFzZSArIGFscGhhIE5WRU5DIHNlc3Npb25zIGFuZCB3cml0ZXMgaW50ZXJsZWF2ZWQgSEVWQy1hbHBoYSBhY2Nlc3MgdW5pdHMuXG5leHBvcnQgY2xhc3MgRHVhbExheWVyTXV4IHtcbiAgcHJpdmF0ZSBfczogRHVhbExheWVyTXV4T3B0aW9ucztcbiAgcHJpdmF0ZSBfYmFzZVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxwaGFRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoczogRHVhbExheWVyTXV4T3B0aW9ucykge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QgfSA9IHRoaXMuX3M7XG4gICAgLy8gRHJhaW4gZWFjaCBzZXNzaW9uIGZ1bGx5IOKAlCBpbmRlcGVuZGVudCBOVkVOQyBzZXNzaW9ucyBydW4gYSBmcmFtZSBhcGFydCB0cmFuc2llbnRseS5cbiAgICB0aGlzLl9iYXNlUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGJhc2VDdHgsIGJhc2VQa3QsIFwiYmFzZVwiKSkpO1xuICAgIHRoaXMuX2FscGhhUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGFscGhhQ3R4LCBhbHBoYVBrdCwgXCJhbHBoYVwiKSkpO1xuICAgIC8vIGJmPTAg4oaSIG5vIHJlb3JkZXI7IHF1ZXVlIGluZGV4IE4gaXMgdGhlIHNhbWUgZnJhbWUgZm9yIGJvdGguIExlZnRvdmVyIHdhaXRzIGZvciBuZXh0IGRyYWluLlxuICAgIHdoaWxlICh0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmIHRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlUGFpcih0aGlzLl9iYXNlUXVldWUuc2hpZnQoKSEsIHRoaXMuX2FscGhhUXVldWUuc2hpZnQoKSEsIG11eGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnBhaXJlZCBsZWZ0b3ZlcnMgYWZ0ZXIgRU9GID0gdHJ1ZSBiYXNlL2FscGhhIGRlc3luYzsgcmV0dXJucyBhIGRlc2NyaXB0aW9uLCBlbHNlIHVuZGVmaW5lZC5cbiAgZGVzeW5jQWZ0ZXJFb2YoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgIXRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gYGJhc2U9JHt0aGlzLl9iYXNlUXVldWUubGVuZ3RofSwgYWxwaGE9JHt0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aH0gdW5wYWlyZWRgO1xuICB9XG5cbiAgLy8gRUFHQUlOL0VPRiA9IG5vcm1hbCBzdG9wOyBhbnkgb3RoZXIgbmVnYXRpdmUgaXMgYSByZWFsIGZhdWx0LCBub3QgXCJkcmFpbmVkXCIuXG4gIHByaXZhdGUgYXN5bmMgcmVjZWl2ZUFsbChjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxQZW5kaW5nUGFja2V0W10+IHtcbiAgICBjb25zdCBvdXQ6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByZXQgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgaWYgKHJldCA+PSAwKSB7XG4gICAgICAgIG91dC5wdXNoKHRoaXMuc25hcHNob3QocGt0KSk7XG4gICAgICAgIHBrdC51bnJlZigpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXQgPT09IEFWRVJST1JfRUFHQUlOIHx8IHJldCA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30ucmVjZWl2ZVBhY2tldGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc25hcHNob3QocGt0OiBQYWNrZXQpOiBQZW5kaW5nUGFja2V0IHtcbiAgICAvLyBwa3QuZGF0YSBpcyBuYXRpdmUgbWVtb3J5IGZyZWVkIG9uIHVucmVmIOKAlCBjb3B5IGJlZm9yZSBxdWV1ZWluZy5cbiAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuZnJvbShwa3QuZGF0YSEpLCBwdHM6IHBrdC5wdHMsIGR0czogcGt0LmR0cywgZHVyYXRpb246IHBrdC5kdXJhdGlvbiwgZmxhZ3M6IHBrdC5mbGFncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZVBhaXIoYmFzZTogUGVuZGluZ1BhY2tldCwgYWxwaGE6IFBlbmRpbmdQYWNrZXQsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYmFzZUN0eCwgc3RyZWFtLCBoZXZjQ2ZnIH0gPSB0aGlzLl9zO1xuICAgIC8vIFBhdGNoIGluLWJhbmQgVlBTL1NQUyBQVEwgYml0cyBmb3IgQXBwbGUtVlRCIGNvbXBhdCAoZW5jb2RlciByZXBlYXRzIGhlYWRlcnMgcGVyIElEUikuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlLmRhdGEpLCBzcGxpdE5hbFVuaXRzKGFscGhhLmRhdGEpLCBoZXZjQ2ZnKTtcbiAgICAvLyBkYXRhIHNldHRlciB3aXBlcyBwdHMvZHRzL2R1cmF0aW9uL2ZsYWdzIOKAlCByZXN0b3JlOyBmbGFncycgS0VZIGJpdCBkcml2ZXMgbW92IHN0c3MuXG4gICAgYmFzZVBrdC5kYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpO1xuICAgIGJhc2VQa3QucHRzID0gYmFzZS5wdHM7XG4gICAgYmFzZVBrdC5kdHMgPSBiYXNlLmR0cztcbiAgICBiYXNlUGt0LmR1cmF0aW9uID0gYmFzZS5kdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGJhc2UuZHVyYXRpb247XG4gICAgYmFzZVBrdC5mbGFncyA9IGJhc2UuZmxhZ3M7XG4gICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gUGFyc2UgTlZFTkMgU1BTL1BQUyBleHRyYWRhdGEgYXQgZW5jb2RlciBpbml0IHRvIGRlcml2ZSBzbGljZS1oZWFkZXIgcGFyc2VyIGZsYWdzOyB0aHJvd3MgaWYgTlZFTkMgZGVmYXVsdHMgc2hpZnQuXG5cbmltcG9ydCB7IEJpdFJlYWRlciB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgTkFMX1BQUywgTkFMX1NQUywgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjtcbiAgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZhaWwoZmllbGQ6IHN0cmluZywgZ290OiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYGhldmNfYWxwaGE6IE5WRU5DIFNQUy9QUFMgdW5zdXBwb3J0ZWQ6ICR7ZmllbGR9PSR7Z290fSwgZXhwZWN0ZWQgJHtleHBlY3RlZH1gKTtcbn1cblxuZnVuY3Rpb24gc2tpcFB0bChicjogQml0UmVhZGVyLCBtYXhTdWJMYXllcnM6IG51bWJlcik6IHZvaWQge1xuICBici5yZWFkKDIgKyAxICsgNSk7IC8vIHByb2ZpbGVfc3BhY2UsIHRpZXIsIHByb2ZpbGVfaWRjXG4gIGJyLnJlYWQoMzIpOyAvLyBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ1swLi4zMV1cbiAgYnIucmVhZCg0OCk7IC8vIDQgc291cmNlL3BhY2tlZCBmbGFncyArIDQzIGNvbnN0cmFpbnQvcmVzZXJ2ZWQgKyAxIGluYmxkXG4gIGJyLnJlYWQoOCk7IC8vIGxldmVsX2lkY1xuICBjb25zdCBzdWJQcm9maWxlUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc3ViTGV2ZWxQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgc3ViUHJvZmlsZVByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgICBzdWJMZXZlbFByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBpZiAobWF4U3ViTGF5ZXJzID4gMCkge1xuICAgIGZvciAobGV0IGkgPSBtYXhTdWJMYXllcnM7IGkgPCA4OyBpKyspIHtcbiAgICAgIGJyLnJlYWQoMik7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBpZiAoc3ViUHJvZmlsZVByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCArIDMyICsgNDgpO1xuICAgIH1cbiAgICBpZiAoc3ViTGV2ZWxQcmVzZW50W2ldKSB7XG4gICAgICBici5yZWFkKDgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNwcyhzcHNSYnNwOiBCdWZmZXIpOiB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIoc3BzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IG1heFN1YkxheWVycyA9IGJyLnJlYWQoMyk7XG4gIC8vIGFscGhhX2Rhcndpbi5yZXdyaXRlQWxwaGFTcHMgKyB2cHMuZXh0cmFjdFBUTCBoYXJkY29kZSA5Ni1iaXQgUFRMIOKAlCBvbmx5IHZhbGlkIHdoZW4gc3ViX2xheWVycz0wLlxuICBpZiAobWF4U3ViTGF5ZXJzICE9PSAwKSB7XG4gICAgZmFpbChcInNwc19tYXhfc3ViX2xheWVyc19taW51czFcIiwgbWF4U3ViTGF5ZXJzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZ1xuICBza2lwUHRsKGJyLCBtYXhTdWJMYXllcnMpO1xuICBici5yZWFkVWUoKTsgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IGNocm9tYUZvcm1hdCA9IGJyLnJlYWRVZSgpO1xuICBpZiAoY2hyb21hRm9ybWF0ID09PSAzKSB7XG4gICAgZmFpbChcImNocm9tYV9mb3JtYXRfaWRjXCIsIGNocm9tYUZvcm1hdCwgXCLiiaAzXCIpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzXG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlc1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGNvbnN0IGxvZzJNYXhQb2NMc2IgPSBici5yZWFkVWUoKSArIDQ7XG4gIGNvbnN0IHN1Yk9yZGVySW5mbyA9IGJyLnJlYWQoMSk7XG4gIGNvbnN0IG9yZGVyQ291bnQgPSBzdWJPcmRlckluZm8gPyBtYXhTdWJMYXllcnMgKyAxIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckNvdW50OyBpKyspIHtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJzY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBhbXBfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHNhb0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJwY21fZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBjb25zdCBudW1TdFJwcyA9IGJyLnJlYWRVZSgpO1xuICBpZiAobnVtU3RScHMgPiAxKSB7XG4gICAgZmFpbChcIm51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0c1wiLCBudW1TdFJwcywgXCLiiaQxXCIpO1xuICB9XG4gIGxldCBudW1EZWx0YVBvY3NTZXQwID0gMDtcbiAgaWYgKG51bVN0UnBzID09PSAxKSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgbnVtRGVsdGFQb2NzU2V0MCA9IG51bU5lZyArIG51bVBvcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChsb25nVGVybVJlZlBpY3NQcmVzZW50KSB7XG4gICAgZmFpbChcImxvbmdfdGVybV9yZWZfcGljc19wcmVzZW50X2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IHNwc1RlbXBvcmFsTXZwRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIHJldHVybiB7XG4gICAgbG9nMk1heFBvY0xzYixcbiAgICBzYW9FbmFibGVkLFxuICAgIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bVN0UnBzLFxuICAgIG51bURlbHRhUG9jc1NldDAsXG4gICAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCxcbiAgICBzcHNUZW1wb3JhbE12cEVuYWJsZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHBzKHBwc1Jic3A6IEJ1ZmZlcik6IHsgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjsgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihwcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19waWNfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkVWUoKTsgLy8gcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWQoMSk7IC8vIGRlcGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gb3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFnXG4gIGNvbnN0IG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzID0gYnIucmVhZCgzKTtcbiAgaWYgKG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzICE9PSAwKSB7XG4gICAgZmFpbChcIm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0c1wiLCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cywgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIHNpZ25fZGF0YV9oaWRpbmdfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IGNhYmFjSW5pdFByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIGluaXRfcXBfbWludXMyNiAoc2UsIGJ1dCB1ZSBwYXJzZXIgZmluZSB0byBhZHZhbmNlKVxuICBici5yZWFkKDEpOyAvLyBjb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7IC8vIGN1X3FwX2RlbHRhX2VuYWJsZWQg4oaSIGRpZmZfY3VfcXBfZGVsdGFfZGVwdGhcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NiX3FwX29mZnNldFxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NyX3FwX29mZnNldFxuICBici5yZWFkKDEpOyAvLyBwcHNfc2xpY2VfY2hyb21hX3FwX29mZnNldHNfcHJlc2VudF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9iaXByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc3F1YW50X2J5cGFzc19lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwidGlsZXNfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBlbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGNvbnN0IGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCA9IGJyLnJlYWQoMSk7XG4gIGxldCBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gZmFsc2U7XG4gIGlmIChkZWJsb2NraW5nQ29udHJvbFByZXNlbnQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWdcbiAgICBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gYnIucmVhZCgxKSA9PT0gMTsgLy8gcHBzX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2FibGVkX2ZsYWdcbiAgICBpZiAoIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZFVlKCk7IC8vIGJldGEvdGMgb2Zmc2V0cyAoc2UgdmlhIHVlIGFkdmFuY2UpXG4gICAgfVxuICB9XG4gIC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIHByZXNlbnQgaWZmIFBQUyBhY3Jvc3Mtc2xpY2VzIGVuYWJsZWQgJiYgIXNsaWNlX2RlYmxvY2tpbmdfZGlzYWJsZWQuXG4gIGNvbnN0IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnID0gcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgJiYgIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGU7XG4gIHJldHVybiB7IGNhYmFjSW5pdFByZXNlbnQsIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhleHRyYWRhdGE6IEJ1ZmZlcik6IE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGV4dHJhZGF0YSk7XG4gIGNvbnN0IHNwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfU1BTKTtcbiAgY29uc3QgcHBzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9QUFMpO1xuICBpZiAoIXNwcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFNQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgfVxuICBpZiAoIXBwcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFBQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgfVxuICBjb25zdCBzID0gcGFyc2VTcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzcHMuZGF0YSkpO1xuICBjb25zdCBwID0gcGFyc2VQcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihwcHMuZGF0YSkpO1xuICByZXR1cm4geyAuLi5zLCAuLi5wIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgRkZfRU5DT0RFUl9IRVZDX05WRU5DLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4uL3ZpZGVvdG9vbGJveFwiO1xuaW1wb3J0IHsgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IER1YWxMYXllck11eCB9IGZyb20gXCIuL2R1YWxfbGF5ZXJfbXV4XCI7XG5pbXBvcnQgeyB0eXBlIE52ZW5jSGV2Y0NvbmZpZywgcGFyc2VOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIE52ZW5jU3RhdGUge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGFscGhhU3dGcmFtZTogRnJhbWU7XG4gIGFscGhhQnVmOiBCdWZmZXI7XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9tdXg6IER1YWxMYXllck11eDtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fbXV4ID0gbmV3IER1YWxMYXllck11eCh7XG4gICAgICBiYXNlQ3R4OiBzLmJhc2VDdHgsXG4gICAgICBhbHBoYUN0eDogcy5hbHBoYUN0eCxcbiAgICAgIGJhc2VQa3Q6IHMuYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0OiBzLmFscGhhUGt0LFxuICAgICAgc3RyZWFtOiBzLnN0cmVhbSxcbiAgICAgIGhldmNDZmc6IHMuaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICAvLyB0aWVyPW1haW4gbWF0Y2hlcyBBcHBsZSBWaWRlb1Rvb2xib3g7IG1hY09TIENocm9tZSByZXF1aXJlcyBNYWluIHRpZXIgZm9yIEhFVkMgYWxwaGEgZGVjb2RlLlxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiwgdGllcjogXCJtYWluXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IChOVkVOQyBjb252ZXJ0cywgbm8gQ1BVIFNXUyk7IHN0YWNrIGZyZWVzIGV2ZXJ5IG5hdGl2ZSBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzLCBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGJhc2VDdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKSk7XG4gICAgY29uc3QgYWxwaGFDdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIikpO1xuXG4gICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgfVxuICAgIGNvbnN0IGhldmNDZmcgPSBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhiYXNlQ3R4LmV4dHJhRGF0YSk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgIGNvbnN0IHVuaWZpZWQgPSBidWlsZFVuaWZpZWRFeHRyYWRhdGEoe1xuICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUN0eC5leHRyYURhdGEsXG4gICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG4gICAgLy8gQXBwbGUtVlRCIGNvbXBhdDogcmV3cml0ZSBWUFMrU1BTIFBUTCBiaXRzIHRvIG1hdGNoIHgyNjUvVlRCIG91dHB1dCAodGllcj1NYWluLCBjb21wYXRbMl09MSkuXG4gICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKHVuaWZpZWQpO1xuXG4gICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAvLyBZVVY0MjBQIGNocm9tYSBwbGFuZXMgYXJlIGNlaWwody8yKcOXY2VpbChoLzIpOyBmbG9vciB1bmRlcmZsb3dzIG9uIG9kZCBkaW1lbnNpb25zLlxuICAgIGNvbnN0IGNocm9tYVNpemUgPSAoKHdpZHRoICsgMSkgPj4gMSkgKiAoKGhlaWdodCArIDEpID4+IDEpO1xuICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgY2hyb21hU2l6ZSAqIDIpO1xuICAgIGFscGhhQnVmLmZpbGwoMTI4LCB5U2l6ZSk7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3QgYWxwaGFQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVN3RnJhbWUgPSBzdGFjay51c2UobWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCkpO1xuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgIGJhc2VDdHgsXG4gICAgICBhbHBoYUN0eCxcbiAgICAgIGJhc2VQa3QsXG4gICAgICBhbHBoYVBrdCxcbiAgICAgIHN0cmVhbSxcbiAgICAgIGFscGhhU3dGcmFtZSxcbiAgICAgIGFscGhhQnVmLFxuICAgICAgaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUsIGFscGhhQnVmIH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuX3B0cysrO1xuXG4gICAgLy8gRXh0cmFjdCB0aGUgYWxwaGEgcGxhbmUgYmVmb3JlIGJhc2Uuc2VuZEZyYW1lIOKAlCB0aGUgZW5jb2RlciB1bnJlZnMgdGhlIGlucHV0IGZyYW1lLlxuICAgIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWUsIGFscGhhQnVmKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLm1ha2VXcml0YWJsZSgpLCBcImFscGhhU3cubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUuZnJvbUJ1ZmZlcihhbHBoYUJ1ZiksIFwiYWxwaGFTdy5mcm9tQnVmZmVyXCIpO1xuICAgIGFscGhhU3dGcmFtZS5wdHMgPSBwdHM7XG4gICAgYWxwaGFTd0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYmFzZUN0eCwgXCJiYXNlXCIpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmFscGhhQ3R4LCBcImFscGhhXCIpO1xuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gICAgY29uc3QgZGVzeW5jID0gdGhpcy5fbXV4LmRlc3luY0FmdGVyRW9mKCk7XG4gICAgaWYgKGRlc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6ICR7ZGVzeW5jfWApO1xuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgb24gY3JlYXRpb24tb3JkZXIgc2Vzc2lvbiBmcmVlIOKAlCBMSUZPIGRlc3Ryb3kgYXZvaWRzIGl0IChmb3J1bSAvdC8yNjk5NzQpLlxuICAgIGFscGhhQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgLy8gRU9GIGZsdXNoOyBFQUdBSU4vRU9GIHJldHVybnMgYXJlIGJlbmlnbiAoYWxyZWFkeS1kcmFpbmluZyBlbmNvZGVyKS5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRW9mKGN0eDogQ29kZWNDb250ZXh0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9PSBBVkVSUk9SX0VBR0FJTiAmJiByZXQgIT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnNlbmRGcmFtZShudWxsKWApO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgQVZQaXhlbEZvcm1hdCwgRkZWaWRlb0VuY29kZXIgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IGNvZGVjTmFtZSwgY29kZWNUYWcsIGNvZGVjT3B0cywgbXV4ZXIsIC4uLnJlc3QgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKGNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBWaWRlbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtjb2RlY05hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgY3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIikpO1xuICAgIGNvbnN0IHBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZDT0xfUkFOR0VfSlBFRyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGh3OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ub29sYm94RW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb1Rvb2xib3hFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX3ZpZGVvdG9vbGJveCBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZGlzcG9zZXMgY3R4L3BrdCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIHN0YWNrLnVzZShjdHgpO1xuICAgIGNvbnN0IHBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIHZpZGVvIGVuY29kZXIgaWYgQ29kZWNTdGF0ZS5jcmVhdGUgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgY29uc3QgdmlkZW8gPSBzdGFjay51c2UoXG4gICAgYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgICAgYml0cmF0ZSxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSksXG4gICk7XG4gIGNvbnN0IGNvZGVjID0gc3RhY2sudXNlKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4geyB2aWRlbywgY29kZWMsIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBEaWN0aW9uYXJ5LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBTdHJlYW0ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIC8vICtmYXN0c3RhcnQgcmVsb2NhdGVzIG1vb3YgdG8gZmlsZSBmcm9udCBvbiB3cml0ZVRyYWlsZXIgc28gcGxheWVycyBjYW4gYmVnaW4gcGxheWJhY2sgYmVmb3JlIGZ1bGwgZG93bmxvYWQuXG4gICAgdXNpbmcgb3B0cyA9IERpY3Rpb25hcnkuZnJvbU9iamVjdCh7IG1vdmZsYWdzOiBcIitmYXN0c3RhcnRcIiB9KTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG9wdHMpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZELlxuICAgICAgICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEFsd2F5cyBmcmVlIHRoZSBuYXRpdmUgY29udGV4dCDigJQgZXZlbiBhIG5ldmVyLW9wZW5lZCBtdXhlciBhbGxvY2F0ZWQgb25lIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yNC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUh3VmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciwgdHlwZSBWaWRlb1NldHVwIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkge1xuICAgICAgcmV0dXJuIFwid2VibVwiO1xuICAgIH1cbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIubXA0XCIpIHx8IGxvd2VyLmVuZHNXaXRoKFwiLm1vdlwiKSkge1xuICAgICAgcmV0dXJuIFwibXA0XCI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBtdXhlci9lbmNvZGVycyBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgbXV4ZXIgPSBzdGFjay51c2UobmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSkpO1xuICAgIGNvbnN0IHNldHVwID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIiA/IGF3YWl0IE91dHB1dFNpbmsubXA0VmlkZW8ob3B0cywgbXV4ZXIpIDogYXdhaXQgT3V0cHV0U2luay53ZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGlmIChzZXR1cC52aWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLnZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmh3VmlkZW8pIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5od1ZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmNvZGVjKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuY29kZWMpO1xuICAgIH1cbiAgICAvLyBPbmx5IGEgc2luay1vd25lZCBodyBkZXZpY2UgaXMgb3VycyB0byBmcmVlIGhlcmU7IGEgc2hhcmVkIGRldmljZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS5cbiAgICBpZiAoc2V0dXAub3duc0h3ICYmIHNldHVwLmh3KSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuaHcpO1xuICAgIH1cbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgT3V0cHV0U2luay5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGF1ZGlvKSB7XG4gICAgICBzdGFjay51c2UoYXVkaW8pO1xuICAgIH1cbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi5zZXR1cCwgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7XG4gICAgICAgIGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsXG4gICAgICAgIFwiY3B1LXVzZWRcIjogXCI4XCIsXG4gICAgICAgIFwicm93LW10XCI6IFwiMVwiLFxuICAgICAgICB0aHJlYWRzOiBcIjJcIixcbiAgICAgIH0sXG4gICAgICBiaXRyYXRlOiA0XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB2aWRlbyxcbiAgICAgIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSxcbiAgICAgIG93bnNIdzogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGF1ZGlvRm9yKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIC8vIE9wdXMgcmVqZWN0cyA0NC4xay5cbiAgICBjb25zdCBjZmcgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLFxuICAgICAgICAgICAgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQk9QVVMsXG4gICAgICAgICAgfTtcbiAgICByZXR1cm4gQXVkaW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICAuLi5jZmcsXG4gICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICBiaXRyYXRlOiAxMjhfMDAwLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKHNyYyk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYXVkaW8/LmVuY29kZShwY20sIHRoaXMuX3MubXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgYXVkaW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgb3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZXMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGRpc3Bvc2Ugc2hhcmVkSHcgKyBhbnkgc2lua3MgYWxyZWFkeSBidWlsdCBpZiBhIGxhdGVyIHNpbmsgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc2hhcmVkSHcpIHtcbiAgICAgIHN0YWNrLnVzZShzaGFyZWRIdyk7XG4gICAgfVxuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzdGFjay51c2Uoc2luayk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zLnNpbmtzLm1hcCgoc2luaykgPT4gc2luay5lbmNvZGVCR1JBKGZyYW1lKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3Mub3B0cztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgICAgYXdhaXQgc2luay5lbmNvZGVBdWRpbyhwY20pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZnJvbUJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBmcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMy5cblxuLyoqXG4gKiBGcmFtZSBkcm9wIHF1YWxpdHkgc2NvcmUgKDAgPSBwZXJmZWN0LCAxID0gd29yc3QpLlxuICpcbiAqIENvbWJpbmVzIHR3byBkaW1lbnNpb25zOlxuICogLSBHbG9iYWw6IG92ZXJhbGwgZHJvcCByYXRlIGFjcm9zcyB0aGUgdGltZWxpbmVcbiAqIC0gTG9jYWw6IHBlcmNlcHR1YWwgc2V2ZXJpdHkgb2YgY29uc2VjdXRpdmUgZHJvcHMgKGJ1cnN0cylcbiAqXG4gKiBVc2VzIGNvbXBsZW1lbnRhcnkgbXVsdGlwbGljYXRpb246IHNjb3JlID0gMSAtICgxLWcpKDEtbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcmFtZURyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gdGhlIGVuY29kZXIuICovXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGRyb3BwZWQuICovXG4gIGRyb3BwZWQoY291bnQgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudEJ1cnN0ICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIEZpbmFsaXplIGFuZCByZXR1cm4gdGhlIHNjb3JlLiAqL1xuICBmaW5hbGl6ZSgpOiBGcmFtZURyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVFcXVhbHMoYTogU2l6ZSwgYjogU2l6ZSkge1xuICByZXR1cm4gYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgdHlwZSB7IFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8xNi5cblxuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBuYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5pbnRlcmZhY2UgU2NyZWVuc2hvdFRhcmdldCB7XG4gIG1zOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JlZW5zaG90T3B0aW9ucyB7XG4gIG1hcmtzOiBudW1iZXJbXTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbn1cblxuLy8gRHVtcHMgcGFpbnRlZCBCR1JBIGZyYW1lcyB0byBQTkcgYXQgcmVxdWVzdGVkIHNlY29uZCBtYXJrczsgcmVzdWx0IG9yZGVyIHRyYWNrcyBpbnB1dCBvcmRlci5cbmV4cG9ydCBjbGFzcyBTY3JlZW5zaG90VGFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nOiBTY3JlZW5zaG90VGFyZ2V0W107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvbmUgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93cml0ZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3M6IFNjcmVlbnNob3RPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyID0gZGlybmFtZShfcy5vdXRGaWxlc1swXSA/PyBcIi5cIik7XG4gICAgdGhpcy5fcGVuZGluZyA9IF9zLm1hcmtzXG4gICAgICAubWFwKChzZWMsIGluZGV4KSA9PiAoeyBtczogc2VjICogMTAwMCwgaW5kZXgsIHBhdGg6IGpvaW4oZGlyLCBgc2NyZWVuc2hvdF8ke2luZGV4fS5wbmdgKSB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm1zIC0gYi5tcyk7XG4gIH1cblxuICAvLyBEdW1wIGV2ZXJ5IG1hcmsgd2hvc2Ugc2Vjb25kIGhhcyBiZWVuIHJlYWNoZWQgYnkgdGhpcyBmcmFtZS5cbiAgY2FwdHVyZShjdXJyZW50VGltZU1zOiBudW1iZXIsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5fcGVuZGluZ1swXSEubXMgPD0gY3VycmVudFRpbWVNcykge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGJncmEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY29yZGluZyBvdmVyOiBzbmFwIGFueSBtYXJrIHBhc3QgdGhlIGxhc3QgZnJhbWUgb250byBpdCwgdGhlbiB3cml0ZSBhbGwgc2hvdHMgb3V0LlxuICBhc3luYyBmaW5pc2goZmluYWxCZ3JhPzogQnVmZmVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHdoaWxlIChmaW5hbEJncmEgJiYgdGhpcy5fcGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgZmluYWxCZ3JhKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fd3JpdGVzKTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2RvbmUuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKChbLCBwYXRoXSkgPT4gcGF0aCk7XG4gIH1cblxuICBwcml2YXRlIHRha2UodGFyZ2V0OiBTY3JlZW5zaG90VGFyZ2V0LCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcG5nID0gbmF0aXZlSW1hZ2UuY3JlYXRlRnJvbUJpdG1hcChiZ3JhLCB7IHdpZHRoLCBoZWlnaHQgfSkudG9QTkcoKTtcbiAgICB0aGlzLl9kb25lLnNldCh0YXJnZXQuaW5kZXgsIHRhcmdldC5wYXRoKTtcbiAgICB0aGlzLl93cml0ZXMucHVzaCh3cml0ZUZpbGUodGFyZ2V0LnBhdGgsIHBuZykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBBYm9ydCBiYWlscyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHJldHJ5aW5nOyBzaWduYWwgaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIHdpcmVzIGl0IChmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0Pih7XG4gIGZuLFxuICBtYXhBdHRlbXB0cyA9IDMsXG4gIHRpbWVvdXQsXG4gIHNpZ25hbCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcCgyICoqIGF0dGVtcHQgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNPVVJDRV9QQVRURVJOLnRlc3Qoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3RvY29sID0gYCR7c291cmNlLnNwbGl0KFwiOlwiKVswXX06YDtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IFVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vYmFzZS9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4uL2Jhc2Uvd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5jb25zdCBMT0NBTF9TQ0hFTUVTID0gW1wicHVwOlwiLCBcInB1cC1mcmFtZTpcIiwgXCJmaWxlOlwiLCBcImRhdGE6XCIsIFwiYmxvYjpcIiwgXCJjaHJvbWUtZXh0ZW5zaW9uOlwiLCBcImRldnRvb2xzOlwiXTtcblxuZnVuY3Rpb24gaXNMb2NhbFNjaGVtZSh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHMgb2YgTE9DQUxfU0NIRU1FUykge1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aChzKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xuICBzdHViTWVkaWE/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSwgc3R1Yk1lZGlhIH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDI1Nik7XG4gIGNvbnN0IGV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBXYWl0YWJsZUV2ZW50PigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHdhaXQoa2V5OiBzdHJpbmcsIG9uVGltZW91dD86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBXYWl0YWJsZUV2ZW50KCk7XG4gICAgZXZlbnRzLnNldChrZXksIGV2ZW50KTtcbiAgICBhd2FpdCBldmVudC53YWl0KHsgdGltZW91dDogNV8wMDAsIG9uVGltZW91dCB9KS5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICAvLyBTd2FwIG1lZGlhIGZvciBhIGZyYW1lLXNlcnZlciBzdHViICh0cnVlIGludHJpbnNpYyBzaXplL2R1cmF0aW9uKSBzbyBCbGluayBsYXlzIG91dCBsaWtlIENocm9tZS5cbiAgICBpZiAoc3R1Yk1lZGlhICYmIGRldGFpbHMucmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCIgJiYgIXVybC5zdGFydHNXaXRoKFwicHVwLWZyYW1lOlwiKSkge1xuICAgICAgY2FsbGJhY2soe1xuICAgICAgICByZWRpcmVjdFVSTDogYHB1cC1mcmFtZTovL3N0dWI/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTG9jYWxTY2hlbWUodXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2FpdChrZXksICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgcmVzcG9uc2VIZWFkZXJzIH0sIGNhbGxiYWNrKSA9PiB7XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uQ29tcGxldGVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY29tcGxldGVkOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgc3RhdHVzQ29kZTogZGV0YWlscy5zdGF0dXNDb2RlLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcblxuICByZXEub25FcnJvck9jY3VycmVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBjb25zdCB7IHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlIH0gPSBkZXRhaWxzO1xuICAgIC8vIFN0dWJiZWQgbWVkaWEgZG93bmdyYWRlczogRVJSX0FCT1JURUQgaXMganVzdCB0aGUgbG9hZGVyIHJlc3RhcnRpbmcgb250byB0aGUgY3Jvc3Mtc2NoZW1lIHJlZGlyZWN0LlxuICAgIGNvbnN0IG1lZGlhID0gc3R1Yk1lZGlhICYmIHJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiO1xuICAgIGNvbnN0IGxldmVsID0gbWVkaWEgPyAoZXJyb3IgPT09IFwibmV0OjpFUlJfQUJPUlRFRFwiID8gXCJkZWJ1Z1wiIDogXCJ3YXJuXCIpIDogXCJlcnJvclwiO1xuICAgIGxvZ2dlcltsZXZlbF0oVEFHLCBgZXJyb3I6YCwgeyBrZXksIHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlLCBzb3VyY2UgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwdXBBdWRpb1ByZWxvYWQsIHB1cFJlbmRlclByZWxvYWQsIHB1cFNob290UHJlbG9hZCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcbmNvbnN0IENPTlNPTEVfSUdOT1JFUyA9IFtgJWNFbGVjdHJvbiBTZWN1cml0eSBXYXJuaW5nYCwgXCJNaXhlZCBDb250ZW50OiBUaGUgcGFnZSBhdFwiXTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbiwgdGltZW91dE1zLCB0b2xlcmFudCwgc2lnbmFsIH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgZG9tUmVhZHkgPSBmYWxzZTtcbiAgICAvLyBUb2xlcmFudCBwcm9jZWVkcyBvbiBhIHBhcnRpYWwgRE9NIG9ubHkgYXMgYSB0aW1lb3V0IGZhbGxiYWNrIOKAlCBzdGFydGluZyBvbiBiYXJlIGRvbS1yZWFkeSBsZWF2ZXMgdGhlIGxvYWQgcGVuZGluZyBhbmQgd2VkZ2VzIHZpcnR1YWwgdGltZS5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKHRvbGVyYW50ICYmIGRvbVJlYWR5ID8gdW5kZWZpbmVkIDogVElNRU9VVF9FUlJPUiksIHRpbWVvdXRNcyk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiB1bmtub3duKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGRvbmUoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkb20tcmVhZHk6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9tUmVhZHkgPSB0cnVlO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1zdG9wLWxvYWRpbmc6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYGRpZC1mYWlsLWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoeyB1cmwsIHNvdXJjZSwgY29kZSwgZGVzYyB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgcmVuZGVyLXByb2Nlc3MtZ29uZTogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgZXhpdENvZGUsIHJlYXNvbiB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VXaW5kb3cod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBcImZvcmNlIGNsb3NlXCIpO1xuICAgICAgICB3aW4uZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgZG9uZSgpO1xuICAgIH0sIDEwMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5kZXRhY2goKTtcbiAgICB3aW4ub25jZShcImNsb3NlZFwiLCBkb25lKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFdpbmRvd0NyZWF0ZWRDYWxsYmFjayA9ICh3aW5kb3c6IEJyb3dzZXJXaW5kb3cpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgcmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnM7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgb25DcmVhdGVkPzogV2luZG93Q3JlYXRlZENhbGxiYWNrO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZnVuY3Rpb24gcGlja1ByZWxvYWQocmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocmVuZGVyZXIuZGV0ZXJtaW5pc3RpYykge1xuICAgIHJldHVybiBwdXBTaG9vdFByZWxvYWQ7XG4gIH1cbiAgaWYgKHJlbmRlcmVyLndpdGhBdWRpbykge1xuICAgIHJldHVybiBwdXBBdWRpb1ByZWxvYWQ7XG4gIH1cbiAgcmV0dXJuIHB1cFJlbmRlclByZWxvYWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCB0b2xlcmFudCwgc2lnbmFsLCBvbkNyZWF0ZWQgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHVzZUlubmVyUHJveHkgfSA9IHJlbmRlcmVyO1xuICBjb25zdCBzcmMgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzb3VyY2UpIDogc291cmNlO1xuXG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWluV2lkdGg6IHdpZHRoLFxuICAgIG1pbkhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtYXhXaWR0aDogd2lkdGgsXG4gICAgbWF4SGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgbWluaW1pemFibGU6IGZhbHNlLFxuICAgIG1vdmFibGU6IGZhbHNlLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5TdWJGcmFtZXM6IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JbldvcmtlcjogdHJ1ZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6IGZhbHNlLFxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgICBwcmVsb2FkOiBwaWNrUHJlbG9hZChyZW5kZXJlciksXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHtcbiAgICBzb3VyY2UsXG4gICAgd2luZG93OiB3aW4sXG4gICAgdXNlSW5uZXJQcm94eSxcbiAgICBzdHViTWVkaWE6IHJlbmRlcmVyLmRldGVybWluaXN0aWMsXG4gIH0pO1xuICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuYXR0YWNoKFwiMS4zXCIpO1xuICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcImNvbnNvbGUtbWVzc2FnZVwiLCAoeyBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQgfSkgPT4ge1xuICAgIC8vIERyb3AgaGVhZGxlc3Mgbm9pc2U6IHNlY3VyaXR5IHdhcm5pbmdzIGFuZCBodHRw4oaSaHR0cHMgYXV0by11cGdyYWRlIG5vdGljZXMgZm9yIGludGVybmFsLXByb3h5IGFzc2V0cy5cbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIENPTlNPTEVfSUdOT1JFUy5maW5kKChpKSA9PiBtZXNzYWdlLnN0YXJ0c1dpdGgoaSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZ3MgPSBbVEFHLCBcImNvbnNvbGU6XCIsIHsgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQsIHNvdXJjZSB9XTtcbiAgICBsZXZlbCA9PT0gXCJlcnJvclwiID8gbG9nZ2VyLmVycm9yKC4uLm1zZ3MpIDogbG9nZ2VyLmRlYnVnKC4uLm1zZ3MpO1xuICAgIHJlbmRlcmVyLm9uQ29uc29sZShsZXZlbCwgbWVzc2FnZSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7XG4gICAgICBzb3VyY2UsXG4gICAgICB3aW4sXG4gICAgICBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksXG4gICAgICB0aW1lb3V0TXM6IHJlbmRlcmVyLndpbmRvd1RpbWVvdXQgKiAxMDAwLFxuICAgICAgdG9sZXJhbnQsXG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIHJldHVybiBvcGVuV2luZG93KHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgb25DcmVhdGVkLFxuICAgICAgc2lnbmFsLFxuICAgICAgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50LFxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtGcmFtZVN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvYmxhbmtfZnJhbWVcIjtcbmltcG9ydCB7IHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBGcmFtZURyb3BTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2ZyYW1lX2Ryb3BcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdHlwZSBBdWRpb0Rpc3Bvc2FsLCBhdHRhY2hBdWRpb0xpc3RlbmVycyB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVuZGVyXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RGcmFtZTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IEZyYW1lRHJvcFN0YXRzKGZwcyk7XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtGcmFtZVN0YXRzKHdpZHRoLCBoZWlnaHQpO1xuXG4gIGxldCBkaXNwb3NlQXVkaW86IEF1ZGlvRGlzcG9zYWwgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNjaGVkdWxlRnJhbWUgPSAoZnJhbWU6IEJ1ZmZlcikgPT4ge1xuICAgIHdyaXR0ZW4rKztcbiAgICBibGFua1N0YXRzLnNhbXBsZShmcmFtZSk7XG4gICAgZW5jb2Rlci5lbmNvZGVCR1JBKGZyYW1lKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gIH07XG5cbiAgY29uc3QgcGFpbnQgPSAoX2U6IHVua25vd24sIF9yOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICBlbmNvZGVFcnJvciA/Pz0gc2lnbmFsPy5yZWFzb247XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWNvZGUgc3RlZ28gdGltZXN0YW1wIGZyb20gdGhlIGJvdHRvbSBwaXhlbCByb3cgd2l0aG91dCBmdWxsIGJpdG1hcCBjb3B5XG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RlRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgZnJhbWVzIHRoYXQgYXJyaXZlIHRvbyBzb29uICg8IDgwJSBvZiBmcmFtZSBpbnRlcnZhbClcbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lICE9PSB1bmRlZmluZWQgJiYgY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWUgPCBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiB3aWR0aCAqIDQpO1xuICAgIGxhc3RGcmFtZSA9IGNyb3BwZWQ7XG4gICAgdGFrZXIuY2FwdHVyZShjdXJyZW50VGltZSwgY3JvcHBlZCk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZURlbHRhIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0V3JpdHRlblRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3csIHdyaXR0ZW49JHt3cml0dGVufSBzdHVjaz0ke3N0dWNrfWApO1xuICAgICAgICBzdHVjaysrO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICAgIHNjcmVlbnNob3RzID0gYXdhaXQgdGFrZXIuZmluaXNoKGxhc3RGcmFtZSk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IgfHwgd3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IGVuY29kZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkcm9wU2NvcmUgPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IGRyb3BTY29yZS5qYW5rLCBvdXRGaWxlcywgYmxhbmssIHNjcmVlbnNob3RzIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbUmVyZW5kZXJdXCI7XG5cbmV4cG9ydCBjb25zdCBNQVhfUkVOREVSX0FUVEVNUFRTID0gMztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhSZXJlbmRlcjxUPihzaWduYWw6IEFib3J0U2lnbmFsLCBhY3Rpb246ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgbGV0IGxhc3RFcnI6IHVua25vd247XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgTUFYX1JFTkRFUl9BVFRFTVBUUzsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxhc3RFcnIgPSBlO1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcmV0cnkgJHthdHRlbXB0ICsgMX0vJHtNQVhfUkVOREVSX0FUVEVNUFRTfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbGFzdEVycjtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBhYm9ydGFibGUgfSBmcm9tIFwiLi4vLi4vYmFzZS90aW1pbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9dXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZU9wdGlvbnMge1xuICBmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkO1xuICB0aW1lc3RhbXBNczogbnVtYmVyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gT25seSB0aGUgZGV0ZXJtaW5pc3RpYyByZW5kZXJlciAoc2hvb3QpIGRyaXZlcyB0aGlzOyByZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljayB2aWEgckFGIGluIHRoZSBwYWdlLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkdmFuY2VWaWRlb3MoeyBmcmFtZSwgdGltZXN0YW1wTXMsIHNpZ25hbCB9OiBBZHZhbmNlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWZyYW1lPy51cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB0cnkge1xuICAgIC8vIFNvdXJjZSBvcGVucyBhcmUgd2FsbC10aW1lIGFzeW5jOyBzZXR0bGUgdGhlbSBmaXJzdCBzbyB2aXJ0dWFsIHRpbWUgY2FuJ3Qgc3RlcCBvbnRvIGEgYmxhbmssIG5vdC15ZXQtb3BlbmVkIDx2aWRlbz4uXG4gICAgYXdhaXQgYWJvcnRhYmxlKGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGB3aW5kb3cuX19wdXBfdmlkZW9fXyYmd2luZG93Ll9fcHVwX3ZpZGVvX18ucmVhZHkoKWApLCBzaWduYWwpO1xuICAgIC8vIE5vIHdhbGwtY2xvY2sgY2FwOiBhIHNsb3cgZmV0Y2ggZGVsYXlzIHRoZSBmcmFtZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIGl0LCBrZWVwaW5nIC1kIG91dHB1dCBkZXRlcm1pbmlzdGljLlxuICAgIGF3YWl0IGFib3J0YWJsZShcbiAgICAgIGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGB3aW5kb3cuX19wdXBfdmlkZW9fXyYmd2luZG93Ll9fcHVwX3ZpZGVvX18uYWR2YW5jZSgke3RpbWVzdGFtcE1zfSlgKSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGxvZ2dlci53YXJuKFRBRywgYGFkdmFuY2Ugc2tpcHBlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyB0eXBlIEFkdmFuY2VPcHRpb25zLCBhZHZhbmNlVmlkZW9zIH0gZnJvbSBcIi4vdmlkZW8vYWR2YW5jZVwiO1xuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGljayhhcmdzOiBBZHZhbmNlT3B0aW9ucykge1xuICBjb25zdCB7IGZyYW1lLCB0aW1lc3RhbXBNcyB9ID0gYXJncztcbiAgaWYgKCFmcmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBleHByID0gYHdpbmRvdy4ke1RJQ0tfU1lNQk9MfSYmd2luZG93LiR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYDtcbiAgY29uc3QgdGlja0V2ID0gZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoZXhwcik7XG4gIGF3YWl0IFByb21pc2UuYWxsKFt3aXRoVGltZW91dCh0aWNrRXYsIDVfMDAwLCBcInRpY2suZXhlY3V0ZUphdmFTY3JpcHRcIiksIGFkdmFuY2VWaWRlb3MoYXJncyldKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjMuXG5cbmltcG9ydCB7IERlbXV4ZXIsIHR5cGUgRGVtdXhlck9wdGlvbnMgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcblxuLy8gZmZtcGVnIHJlYWQvd3JpdGUgZGVhZGxpbmUgKMK1cyk7IGEgYmxvY2tpbmcgb3BlbiBpZ25vcmVzIEFib3J0U2lnbmFsLCBzbyB0aGlzIGJvdW5kcyBhIHN0dWNrIENETi5cbmNvbnN0IFJXX1RJTUVPVVRfVVMgPSBcIjgwMDAwMDBcIjtcblxuLy8gZmZtcGVnIG9wZW5zIGh0dHAvaHR0cHMgd2l0aCBuYXRpdmUgYnl0ZS1yYW5nZSByZXF1ZXN0cywgc28gb25seSB0aGUgZGVjb2RlZCByYW5nZXMgZG93bmxvYWQuXG5leHBvcnQgZnVuY3Rpb24gb3BlbklucHV0KHNyYzogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8RGVtdXhlcj4ge1xuICBjb25zdCBvcHRpb25zOiBEZW11eGVyT3B0aW9ucyA9IHsgc2lnbmFsLCBvcHRpb25zOiB7IHJ3X3RpbWVvdXQ6IFJXX1RJTUVPVVRfVVMgfSB9O1xuICByZXR1cm4gRGVtdXhlci5vcGVuKHNyYywgb3B0aW9ucyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzI1LlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IERlY29kZXIsIEZpbHRlckFQSSB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuaW1wb3J0IHsgb3BlbklucHV0IH0gZnJvbSBcIi4vb3BlblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZWRGcmFtZSB7XG4gIGlkeDogbnVtYmVyO1xuICBidWY6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVGcmFtZXNPcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIG1ldGE6IFZpZGVvTWV0YTtcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gRGVjb2RlIGEgc291cmNlIHRvIGZwcy1yZXNhbXBsZWQsIGRpc3BsYXktc2NhbGVkLCB0aWdodC1SR0JBIGZyYW1lcyBpbiBvcmRlciAoaWR4ID0gMS1iYXNlZCBkZWNvZGUgcG9zaXRpb24pLiBDb25zdW1lciBiYWNrcHJlc3N1cmUgaXMganVzdCBwdWxsaW5nIHNsb3dlci5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZGVjb2RlRnJhbWVzKHsgc3JjLCBtZXRhLCBzaWduYWwgfTogRGVjb2RlRnJhbWVzT3B0aW9ucyk6IEFzeW5jR2VuZXJhdG9yPERlY29kZWRGcmFtZT4ge1xuICBhd2FpdCB1c2luZyBpbnB1dCA9IGF3YWl0IG9wZW5JbnB1dChzcmMsIHNpZ25hbCk7XG4gIGNvbnN0IHN0cmVhbSA9IGlucHV0LnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgc2lnbmFsIH0pO1xuICBjb25zdCB7IGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG1ldGE7XG4gIGNvbnN0IHNjYWxlID0gZnJhbWVXaWR0aCAhPT0gd2lkdGggfHwgZnJhbWVIZWlnaHQgIT09IGhlaWdodCA/IGBzY2FsZT0ke2ZyYW1lV2lkdGh9OiR7ZnJhbWVIZWlnaHR9LGAgOiBcIlwiO1xuICB1c2luZyBmaWx0ZXIgPSBGaWx0ZXJBUEkuY3JlYXRlKGBmcHM9JHtmcHN9LCR7c2NhbGV9Zm9ybWF0PXJnYmFgLCB7IHNpZ25hbCB9KTtcbiAgbGV0IGsgPSAwO1xuICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGZpbHRlci5mcmFtZXMoZGVjLmZyYW1lcyhpbnB1dC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpKSkge1xuICAgIGlmICghZnJhbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB5aWVsZCB7IGlkeDogKytrLCBidWY6IHBhY2tSZ2JhKGZyYW1lKSB9O1xuICB9XG59XG5cbi8vIFRpZ2h0IFJHQkEgY29weSAoZHJvcCBsaWJhdiByb3cgcGFkZGluZykgc28gdGhlIHBhZ2UgY2FuIHdyYXAgaXQgc3RyYWlnaHQgaW50byBJbWFnZURhdGEuXG5mdW5jdGlvbiBwYWNrUmdiYShmcmFtZTogRnJhbWUpOiBCdWZmZXIge1xuICBjb25zdCByb3cgPSBmcmFtZS53aWR0aCAqIDQ7XG4gIGNvbnN0IHN0cmlkZSA9IGZyYW1lLmxpbmVzaXplWzBdITtcbiAgY29uc3Qgc3JjID0gZnJhbWUuZGF0YSFbMF0hO1xuICBpZiAoc3RyaWRlID09PSByb3cpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3JjLnN1YmFycmF5KDAsIHJvdyAqIGZyYW1lLmhlaWdodCkpO1xuICB9XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShyb3cgKiBmcmFtZS5oZWlnaHQpO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGZyYW1lLmhlaWdodDsgeSsrKSB7XG4gICAgc3JjLmNvcHkob3V0LCB5ICogcm93LCB5ICogc3RyaWRlLCB5ICogc3RyaWRlICsgcm93KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZGVjb2RlRnJhbWVzIH0gZnJvbSBcIi4vZGVjb2RlXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltEZWNvZGVTZXNzaW9uXVwiO1xuY29uc3QgREVDT0RFX0FIRUFEID0gNDsgLy8gZGVjb2RlIGEgZmV3IGZyYW1lcyBwYXN0IHRoZSBoaWdoZXN0IHJlcXVlc3Q7IHRoZSBwYWdlIGFscmVhZHkgcHJlZmV0Y2hlc1xuY29uc3QgS0VFUF9CRUhJTkQgPSAxNjsgLy8gbWluIGZyYW1lcyBoZWxkIGJlaGluZCB0aGUgaGVhZDsgbXVzdCBleGNlZWQgdGhlIHBhZ2UncyBwcmVmZXRjaCBsZWFkIChBSEVBRD0xMClcbmNvbnN0IE1FTU9SWV9CVURHRVQgPSAyNTYgKiAxMDI0ICogMTAyNDsgLy8gcmV0YWluIGRlY29kZWQgZnJhbWVzIHVwIHRvIHRoaXMgcGVyLXNlc3Npb24gYnVkZ2V0IHNvIGEgc21hbGwgbG9vcGluZyB2aWRlbyByZS1zZXJ2ZXMgZnJvbSBtZW1vcnkgaW5zdGVhZCBvZiByZS1kZWNvZGluZ1xuY29uc3QgTUFYX1BBU1NfUkVUUlkgPSAzOyAvLyByZS1vcGVuIGEgc3RyZWFtZWQgc291cmNlIHRoaXMgbWFueSB0aW1lcyBvbiBhIHRyYW5zaWVudCBkZWNvZGUgZXJyb3IgYmVmb3JlIHJlcG9ydGluZyBlbmQtb2Ytc3RyZWFtXG5cbmludGVyZmFjZSBXYWl0ZXIge1xuICBpZHg6IG51bWJlcjtcbiAgcmVzb2x2ZTogKGI6IEJ1ZmZlcikgPT4gdm9pZDtcbn1cblxuLy8gRGVtYW5kLWRyaXZlbiBpbi1wcm9jZXNzIGRlY29kZSAoRGVtdXhlcuKGkkRlY29kZXLihpJmcHMvc2NhbGUvcmdiYSBmaWx0ZXIpIHNlcnZpbmcgZnJhbWUgTiBhcyB0aWdodCBSR0JBOyBmb3J3YXJkLW9ubHkg4oCUIGEgbG9vcC9yZXdpbmQgcmUtZGVjb2RlcyBmcm9tIGZyYW1lIDEgdW5sZXNzIHRoZSB3aG9sZSBjbGlwIHN0aWxsIGZpdHMgdGhlIG1lbW9yeSBidWRnZXQuXG5leHBvcnQgY2xhc3MgRGVjb2RlU2Vzc2lvbiB7XG4gIHByaXZhdGUgX2J1ZiA9IG5ldyBNYXA8bnVtYmVyLCBCdWZmZXI+KCk7XG4gIHByaXZhdGUgX3JlYWR5ID0gMDtcbiAgcHJpdmF0ZSBfd2FudCA9IDE7XG4gIHByaXZhdGUgX2RvbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG4gIHByaXZhdGUgX2dlbiA9IDA7XG4gIHByaXZhdGUgX2N0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHByaXZhdGUgX3dhaXRlcnMgPSBuZXcgU2V0PFdhaXRlcj4oKTtcbiAgcHJpdmF0ZSBfcmVzdW1lOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3Jlc3RhcnQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgLy8gTGVhZCBmcmFtZXMgaGVsZCBvbiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBjb250ZW50IGlkeCBpcyBvZmZzZXQgcGFzdCB0aGVtLlxuICBwcml2YXRlIHJlYWRvbmx5IF9sZWFkRnJhbWVzOiBudW1iZXI7XG4gIC8vIEZyYW1lcyBrZXB0IGJlaGluZCB0aGUgaGVhZDsgYSBjbGlwIHRoYXQgZml0cyB0aGUgYnVkZ2V0IHJldGFpbnMgZXZlcnkgZnJhbWUsIHNvIGxvb3BzIHJlLXNlcnZlIGZyb20gbWVtb3J5LlxuICBwcml2YXRlIHJlYWRvbmx5IF9rZWVwQ291bnQ6IG51bWJlcjtcbiAgLy8gUmVzb2x2ZXMgd2hlbiBwdW1wKCkgZnVsbHkgdW53aW5kcyDigJQgYXdhaXRlZCBvbiBjbG9zZSBzbyBub2RlLWF2IGdlbmVyYXRvcnMgZnJlZSBiZWZvcmUgcHJvY2VzcyB0ZWFyZG93bi5cbiAgcHJpdmF0ZSByZWFkb25seSBfcHVtcERvbmU6IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgbWV0YTogVmlkZW9NZXRhLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NyYzogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLl9sZWFkRnJhbWVzID0gTWF0aC5yb3VuZChtZXRhLmxlYWRHYXAgKiBtZXRhLmZwcyk7XG4gICAgdGhpcy5fa2VlcENvdW50ID0gTWF0aC5tYXgoS0VFUF9CRUhJTkQsIE1hdGguZmxvb3IoTUVNT1JZX0JVREdFVCAvIChtZXRhLmZyYW1lV2lkdGggKiBtZXRhLmZyYW1lSGVpZ2h0ICogNCkpKTtcbiAgICB0aGlzLl9wdW1wRG9uZSA9IHRoaXMucHVtcCgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RnJhbWUoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmIChpZHggPCAxKSB7XG4gICAgICBpZHggPSAxO1xuICAgIH1cbiAgICBpZiAoaWR4IDw9IHRoaXMuX2xlYWRGcmFtZXMpIHtcbiAgICAgIGlkeCA9IHRoaXMuX2xlYWRGcmFtZXMgKyAxOyAvLyBob2xkIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWUgYWNyb3NzIHRoZSBsZWFkXG4gICAgfVxuICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoaWR4KTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBpZiAodGhpcy5fZG9uZSAmJiBpZHggPiB0aGlzLl9yZWFkeSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTsgLy8gYmV5b25kIGVuZCBvZiBzdHJlYW1cbiAgICB9XG4gICAgaWYgKGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICAvLyBmb3J3YXJkLCBub3QgeWV0IGRlY29kZWQgaW4gdGhpcyBwYXNzXG4gICAgICBpZiAoaWR4ID4gdGhpcy5fd2FudCkge1xuICAgICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgfVxuICAgICAgdGhpcy53YWtlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV2aWN0ZWQgKGxvb3AvcmV3aW5kKTogY2xlYXIgcmVhZHkvZG9uZSBzeW5jaHJvbm91c2x5IHNvIHRoZSB3cmFwJ3MgcHJlZmV0Y2ggYnVyc3QgY29hbGVzY2VzIGludG8gb25lIHJlc3RhcnQsIG5vdCBvbmUgcGVyIGZyYW1lLlxuICAgICAgdGhpcy5fcmVhZHkgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fd2FudCA9IGlkeDtcbiAgICAgIHRoaXMucmVxdWVzdFJlc3RhcnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2FpdChpZHgpO1xuICB9XG5cbiAgLy8gQXdhaXQgdGhlIHB1bXAgc28gdGhlIG5vZGUtYXYgZGVtdXhlci9kZWNvZGVyIGdlbmVyYXRvcnMgdW53aW5kIChjb250ZXh0cyBmcmVlZCkgYmVmb3JlIHRoZSBjYWxsZXIgZXhpdHMuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgdGhpcy5fY3RybC5hYm9ydCgpO1xuICAgIHRoaXMud2FrZSgpO1xuICAgIHRoaXMucmVxdWVzdFJlc3RhcnQoKTtcbiAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5fd2FpdGVycykge1xuICAgICAgdy5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHRoaXMuX3dhaXRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLl9idWYuY2xlYXIoKTtcbiAgICBhd2FpdCB0aGlzLl9wdW1wRG9uZTtcbiAgfVxuXG4gIC8vIC1kLW9ubHkgc3Vic3lzdGVtLCBzbyBuZXZlciB0aW1lIG91dDogZHJhaW5XYWl0ZXJzIHJlc29sdmVzIG9uIGRlY29kZSwgRU9GLCBvciBjbG9zZSDigJQgb3V0cHV0IG5ldmVyIGRlcGVuZHMgb24gZmV0Y2ggbGF0ZW5jeS5cbiAgcHJpdmF0ZSB3YWl0KGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSkgPT4gdGhpcy5fd2FpdGVycy5hZGQoeyBpZHgsIHJlc29sdmUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWtlKCk6IHZvaWQge1xuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN1bWU7XG4gICAgdGhpcy5fcmVzdW1lID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICB9XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgcnVubmluZyBwYXNzIChvciB3YWtlIGEgcGFya2VkIG9uZSkgc28gcHVtcCgpIHN0YXJ0cyBhIGZyZXNoIGRlY29kZSBmcm9tIGZyYW1lIDEuXG4gIHByaXZhdGUgcmVxdWVzdFJlc3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2VuKys7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3RhcnQ7XG4gICAgdGhpcy5fcmVzdGFydCA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgICB0aGlzLndha2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHVtcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZmFpbHMgPSAwO1xuICAgIHdoaWxlICghdGhpcy5fY2xvc2VkKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzLl9nZW47XG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl9idWYuY2xlYXIoKTtcbiAgICAgIGxldCBmYWlsZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVjb2RlUGFzcyhnZW4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbikge1xuICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBUQUcsXG4gICAgICAgICAgICBgWyR7dGhpcy5tZXRhLmlkLnNsaWNlKDAsIDgpfV0gZGVjb2RlIHBhc3MgZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgZmFpbHMgPSAwO1xuICAgICAgICBjb250aW51ZTsgLy8gcmVzdGFydCByZXF1ZXN0ZWQgbWlkLXBhc3NcbiAgICAgIH1cbiAgICAgIC8vIEEgdGhyb3duIHBhc3MgaXMgYSB0cmFuc2llbnQgc291cmNlIGVycm9yIChlLmcuIGEgc3RyZWFtZWQgbG9vcCByZS1vcGVuKTsgcmV0cnkgaW5zdGVhZCBvZiByZXBvcnRpbmcgRU9GLCB3aGljaCB3b3VsZCBibGFuayB0aGUgZnJhbWUuXG4gICAgICBpZiAoZmFpbGVkICYmICsrZmFpbHMgPD0gTUFYX1BBU1NfUkVUUlkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmYWlscyA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJhaW5XYWl0ZXJzKCk7XG4gICAgICBhd2FpdCB0aGlzLnVudGlsUmVzdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVjb2RlUGFzcyhnZW46IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IGRlY29kZUZyYW1lcyh7IHNyYzogdGhpcy5fc3JjLCBtZXRhOiB0aGlzLm1ldGEsIHNpZ25hbDogdGhpcy5fY3RybC5zaWduYWwgfSk7XG4gICAgZm9yIGF3YWl0IChjb25zdCB7IGlkeCwgYnVmIH0gb2Ygc3RyZWFtKSB7XG4gICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0ID0gdGhpcy5fbGVhZEZyYW1lcyArIGlkeDsgLy8gbWFwIGRlY29kZSBwb3NpdGlvbiBwYXN0IHRoZSBoZWxkIGxlYWQtZ2FwIGZyYW1lc1xuICAgICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQgJiYgdGhpcy5fZ2VuID09PSBnZW4gJiYgYXQgPiB0aGlzLmRlbWFuZCArIERFQ09ERV9BSEVBRCkge1xuICAgICAgICBhd2FpdCB0aGlzLnBhdXNlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1Zi5zZXQoYXQsIGJ1Zik7XG4gICAgICB0aGlzLl9yZWFkeSA9IGF0O1xuICAgICAgLy8gRHJhaW4gYmVmb3JlIGV2aWN0OiB3aXRoIHdhbnQgZmFyIGFoZWFkIHRoZSBmbG9vciBjb3ZlcnMgdGhpcyBmcmFtZSwgYW5kIGV2aWN0aW5nIGl0IGZpcnN0IHN0YXJ2ZXMgaXRzIHdhaXRlciBmb3JldmVyLlxuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIHRoaXMuZXZpY3QoKTtcbiAgICB9XG4gIH1cblxuICAvLyBXYWl0ZXJzIHRoYXQgc3Vydml2ZWQgYSByZXdpbmQgcmVzdGFydCBhcmUgc3RpbGwgZGVtYW5kOyBpZ25vcmluZyB0aGVtIHBhcmtzIHRoZSBwYXNzIGFuZCBzdGFydmVzIHRoZW0gZm9yZXZlci5cbiAgcHJpdmF0ZSBnZXQgZGVtYW5kKCk6IG51bWJlciB7XG4gICAgbGV0IGQgPSB0aGlzLl93YW50O1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICBpZiAody5pZHggPiBkKSB7XG4gICAgICAgIGQgPSB3LmlkeDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICBwcml2YXRlIHBhdXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdW1lID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBhcmsgdW50aWwgYSBsb29wL2JhY2t3YXJkIHJlcXVlc3QgKG9yIGNsb3NlKSBjYWxscyByZXF1ZXN0UmVzdGFydCgpLlxuICBwcml2YXRlIHVudGlsUmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdGFydCA9IHI7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2aWN0KCk6IHZvaWQge1xuICAgIGNvbnN0IGZsb29yID0gdGhpcy5fd2FudCAtIHRoaXMuX2tlZXBDb3VudDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5fYnVmLmtleXMoKSkge1xuICAgICAgaWYgKGsgPCBmbG9vcikge1xuICAgICAgICB0aGlzLl9idWYuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5XYWl0ZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnRoaXMuX3dhaXRlcnNdKSB7XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLl9idWYuZ2V0KGVudHJ5LmlkeCk7XG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIHRoaXMuX3dhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgZW50cnkucmVzb2x2ZShoaXQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICAgIHRoaXMuX3dhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgZW50cnkucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgRGVjb2RlciB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVSZXN1bHQge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqIFBUUyAocykgb2YgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZTsgYSBjb3JydXB0L2VtcHR5IGxlYWRpbmcgcnVuIGlzIGhlbGQgb24gaXQsIGxpa2UgQ2hyb21lLiAqL1xuICBsZWFkR2FwOiBudW1iZXI7XG59XG5cbi8vIE5vIHdhbGwtY2xvY2sgY2FwOiBvcGVuSW5wdXQncyBwZXItcmVhZCByd190aW1lb3V0IGJvdW5kcyBhIHN0dWNrIHNvdXJjZSwgYW5kIHRoZSBjYWxsZXIgcmV0cmllcyBvbiB0aHJvdy5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZShzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgYXdhaXQgdXNpbmcgZCA9IGF3YWl0IG9wZW5JbnB1dChzcmMpO1xuICBjb25zdCBzdHJlYW0gPSBkLnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInByb2JlOiBubyB2aWRlbyBzdHJlYW1cIik7XG4gIH1cbiAgY29uc3QgZHVyYXRpb24gPSBkLmR1cmF0aW9uID4gMCA/IGQuZHVyYXRpb24gOiAwO1xuICBjb25zdCB0YiA9IHN0cmVhbS50aW1lQmFzZS5udW0gLyBzdHJlYW0udGltZUJhc2UuZGVuO1xuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgdGhyZWFkQ291bnQ6IDEgfSk7XG4gIGxldCBsZWFkR2FwID0gMDtcbiAgLy8gRmlyc3QgY2xlYW4gZnJhbWUncyBQVFMgPSB3aGVyZSBjb250ZW50IGJlZ2luczsgc2tpcCBjb3JydXB0IGZyYW1lcyBsaWtlIGEgYnJvd3Nlci5cbiAgb3V0ZXI6IGZvciBhd2FpdCAodXNpbmcgcGt0IG9mIGQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZGVjLmZyYW1lcyhwa3QpKSB7XG4gICAgICAgIGlmIChmcmFtZT8uZGVjb2RlRXJyb3JGbGFncyAhPT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxlYWRHYXAgPSBNYXRoLm1heCgwLCBOdW1iZXIoZnJhbWUucHRzKSAqIHRiKTtcbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBjb3JydXB0IHBhY2tldCDigJQgc2tpcCB0byB0aGUgbmV4dFxuICAgIH1cbiAgfVxuICByZXR1cm4geyB3aWR0aDogc3RyZWFtLmNvZGVjcGFyLndpZHRoLCBoZWlnaHQ6IHN0cmVhbS5jb2RlY3Bhci5oZWlnaHQsIGR1cmF0aW9uLCBsZWFkR2FwIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzA2LlxuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29kZWMsIEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX1lVVjQyMFAsIEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5LCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL21pc2NcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvZW5jb2Rlci9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0dWJFbmNvZGVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbi8vIFJlYWwgcGFyc2VhYmxlIG1lZGlhIHdpdGggdGhlIHNvdXJjZSdzIGludHJpbnNpYyBzaXplICsgZHVyYXRpb24sIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY29kZVN0dWJXZWJtKHsgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24gfTogU3R1YkVuY29kZU9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfTElCVlBYX1ZQOSk7XG4gIGlmICghY29kZWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHN0dWI6IGVuY29kZXIgbm90IGZvdW5kOiAke0ZGX0VOQ09ERVJfTElCVlBYX1ZQOX1gKTtcbiAgfVxuICBjb25zdCBwYXRoID0gam9pbih0bXBkaXIoKSwgYHB1cF9zdHViXyR7cmFuZG9tQnl0ZXMoOCkudG9TdHJpbmcoXCJoZXhcIil9LndlYm1gKTtcbiAgdHJ5IHtcbiAgICB7XG4gICAgICBhd2FpdCB1c2luZyBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihwYXRoKTtcbiAgICAgIC8vIFRpbWViYXNlIDEvMTAwMCAoZnBzIHBhcmFtKSBsZXRzIG9uZSBwYWNrZXQgY2FycnkgdGhlIGZ1bGwgc291cmNlIGR1cmF0aW9uIGluIG1zLlxuICAgICAgdXNpbmcgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAgICB7XG4gICAgICAgICAgY29kZWMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGZwczogMTAwMCxcbiAgICAgICAgICBiaXRyYXRlOiAxMDBfMDAwLFxuICAgICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gICAgICAgICAgb3B0aW9uczogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFwic3R1YkN0eC5vcGVuMlwiLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgICAgdXNpbmcgc3R1YiA9IG5ldyBTdHViRnJhbWUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBtcyA9IEJpZ0ludChNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGR1cmF0aW9uICogMTAwMCkpKTtcbiAgICAgIHN0dWIuZnJhbWUucHRzID0gMG47XG4gICAgICBzdHViLmZyYW1lLmR1cmF0aW9uID0gbXM7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4LnNlbmRGcmFtZShzdHViLmZyYW1lKSwgXCJzdHViQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpLCBcInN0dWJDdHguZmx1c2hcIik7XG4gICAgICB1c2luZyBwa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwic3R1YkN0eC5yZWNlaXZlUGFja2V0XCIpO1xuICAgICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IG1zO1xuICAgICAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZWFkRmlsZShwYXRoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8vIE93bnMgdGhlIGJsYWNrIHBpeGVsIGJ1ZmZlciBBTkQgaXRzIHplcm8tY29weSBmcmFtZSB2aWV3IOKAlCBgdXNpbmdgIHBpbnMgYm90aCB1bnRpbCBhZnRlciBlbmNvZGUuXG5jbGFzcyBTdHViRnJhbWUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgZnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWY6IEJ1ZmZlcjtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGx1bWEgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCBjaHJvbWEgPSBNYXRoLmNlaWwod2lkdGggLyAyKSAqIE1hdGguY2VpbChoZWlnaHQgLyAyKTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuYWxsb2MobHVtYSArIGNocm9tYSAqIDIsIDB4ODApO1xuICAgIHRoaXMuX2J1Zi5maWxsKDAsIDAsIGx1bWEpO1xuICAgIHRoaXMuZnJhbWUgPSBGcmFtZS5mcm9tVmlkZW9CdWZmZXIodGhpcy5fYnVmLCB7IHdpZHRoLCBoZWlnaHQsIGZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0pO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLmZyYW1lW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi8uLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsIH0gZnJvbSBcIi4uL25ldHdvcmtcIjtcbmltcG9ydCB7IERlY29kZVNlc3Npb24gfSBmcm9tIFwiLi9kZWNvZGVfc2Vzc2lvblwiO1xuaW1wb3J0IHsgdHlwZSBQcm9iZVJlc3VsdCwgcHJvYmUgfSBmcm9tIFwiLi9wcm9iZVwiO1xuaW1wb3J0IHsgZW5jb2RlU3R1YldlYm0gfSBmcm9tIFwiLi9zdHViXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqIEludHJpbnNpYyBzb3VyY2UgZGltZW5zaW9ucyAocmVwb3J0ZWQgYXMgdmlkZW9XaWR0aC92aWRlb0hlaWdodCkuICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICAvKiogRGVjb2RlZCtzY2FsZWQgZnJhbWUgZGltZW5zaW9ucyBhY3R1YWxseSBzZXJ2ZWQgKOKJpCBzb3VyY2U7IGNhcHBlZCB0byB0aGUgZGlzcGxheSBib3gpLiAqL1xuICBmcmFtZVdpZHRoOiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogU2Vjb25kcyBvZiBjb3JydXB0L2VtcHR5IGxlYWRpbmcgY29udGVudCBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbiAgLyoqIERpc3BsYXktYm94IHBpeGVscyAoY2FudmFzIGJhY2tpbmcgc3RvcmUpOyBkZWNvZGUgaXMgZG93bnNjYWxlZCB0byBjb3ZlciB0aGlzLCBuZXZlciB1cHNjYWxlZC4gKi9cbiAgZHN0Vz86IG51bWJlcjtcbiAgZHN0SD86IG51bWJlcjtcbiAgLyoqIG9iamVjdEZpdDsgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMgc28gaXQgc2tpcHMgZG93bnNjYWxlLiAqL1xuICBmaXQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBFbnRyeSB7XG4gIHNlc3Npb246IERlY29kZVNlc3Npb247XG4gIHJlZnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYW1lU2VydmVyIHtcbiAgcHJpdmF0ZSBfc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgRW50cnk+KCk7XG4gIHByaXZhdGUgX3Byb2JlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPFByb2JlUmVzdWx0Pj4oKTtcbiAgcHJpdmF0ZSBfc3R1YnMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxCdWZmZXI+PigpO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcblxuICAvLyAtZCBkZWNvZGUgYnlwYXNzZXMgdGhlIHdpbmRvdyBpbnRlcmNlcHRvciwgc28gaXQgcmVtYXBzIGhvc3RzIGl0c2VsZiB3aGVuIHRoZSBpbm5lciBwcm94eSBpcyBvbi5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfdXNlSW5uZXJQcm94eTogYm9vbGVhbikge31cblxuICAvLyBjbG9zZWQtY2hlY2tlZCBhZnRlciBwcm9iZSBzbyBjbG9zZUFsbCgpIGNhbid0IHJhY2UgYSBzbG93IG9wZW4gaW50byBhIGxlYWtlZCBzZXNzaW9uLlxuICBhc3luYyBvcGVuKG9wdHM6IE9wZW5PcHRpb25zKTogUHJvbWlzZTxWaWRlb01ldGE+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBrZXkob3B0cyk7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICBoaXQucmVmcysrO1xuICAgICAgcmV0dXJuIGhpdC5zZXNzaW9uLm1ldGE7XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IHRoaXMuX3VzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKG9wdHMuc3JjKSA6IG9wdHMuc3JjO1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCB0aGlzLnByb2JlQ2FjaGVkKHNyYyk7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGxldCBmcmFtZVdpZHRoID0gaW5mby53aWR0aDtcbiAgICBsZXQgZnJhbWVIZWlnaHQgPSBpbmZvLmhlaWdodDtcbiAgICAvLyBEb3duc2NhbGUgdG8gY292ZXIgdGhlIGRpc3BsYXkgYm94IChuZXZlciB1cHNjYWxlKTsgb2JqZWN0Rml0IFwibm9uZVwiIG5lZWRzIDE6MSBuYXRpdmUgcGl4ZWxzLlxuICAgIGlmIChvcHRzLmRzdFcgJiYgb3B0cy5kc3RIICYmIG9wdHMuZml0ICE9PSBcIm5vbmVcIikge1xuICAgICAgY29uc3QgcyA9IE1hdGgubWluKDEsIE1hdGgubWF4KG9wdHMuZHN0VyAvIGluZm8ud2lkdGgsIG9wdHMuZHN0SCAvIGluZm8uaGVpZ2h0KSk7XG4gICAgICBmcmFtZVdpZHRoID0gZXZlbihpbmZvLndpZHRoICogcyk7XG4gICAgICBmcmFtZUhlaWdodCA9IGV2ZW4oaW5mby5oZWlnaHQgKiBzKTtcbiAgICB9XG4gICAgY29uc3QgbWV0YTogVmlkZW9NZXRhID0ge1xuICAgICAgaWQsXG4gICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgIGhlaWdodDogaW5mby5oZWlnaHQsXG4gICAgICBmcmFtZVdpZHRoLFxuICAgICAgZnJhbWVIZWlnaHQsXG4gICAgICBmcHM6IG9wdHMuZnBzLFxuICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICBsZWFkR2FwOiBpbmZvLmxlYWRHYXAsXG4gICAgfTtcbiAgICB0aGlzLl9zZXNzaW9ucy5zZXQoaWQsIHsgc2Vzc2lvbjogbmV3IERlY29kZVNlc3Npb24obWV0YSwgc3JjKSwgcmVmczogMSB9KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIC8vIERldGVybWluaXN0aWMgbWVkaWEgcmVxdWVzdHMgcmVkaXJlY3QgaGVyZTogcmVhbCBwYXJzZWFibGUgYnl0ZXMgd2l0aCB0cnVlIGludHJpbnNpYyBzaXplICsgZHVyYXRpb24uXG4gIHN0dWIoc3JjOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCByZWFsID0gdGhpcy5fdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc3JjKSA6IHNyYztcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9zdHVicy5nZXQocmVhbCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgY29uc3QgcCA9IHRoaXMucHJvYmVDYWNoZWQocmVhbCkudGhlbigoaW5mbykgPT5cbiAgICAgIGVuY29kZVN0dWJXZWJtKHtcbiAgICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICAgIGhlaWdodDogaW5mby5oZWlnaHQsXG4gICAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBwLmNhdGNoKCgpID0+IHRoaXMuX3N0dWJzLmRlbGV0ZShyZWFsKSk7XG4gICAgdGhpcy5fc3R1YnMuc2V0KHJlYWwsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgZ2V0RnJhbWUoaWQ6IHN0cmluZywgaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgIH1cbiAgICByZXR1cm4gZS5zZXNzaW9uLmdldEZyYW1lKGlkeCk7XG4gIH1cblxuICBhc3luYyBjbG9zZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgtLWUucmVmcyA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2Vzc2lvbnMuZGVsZXRlKGlkKTtcbiAgICBhd2FpdCBlLnNlc3Npb24uY2xvc2UoKTtcbiAgfVxuXG4gIC8vIEZhaWxlZCBwcm9iZXMgZXZpY3Qgc28gYSB0cmFuc2llbnQgc291cmNlIGVycm9yIGNhbiByZXRyeSBvbiB0aGUgbmV4dCByZXF1ZXN0LlxuICBwcml2YXRlIHByb2JlQ2FjaGVkKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3Byb2Jlcy5nZXQoc3JjKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdXNlUmV0cnkoeyBmbjogcHJvYmUgfSkoc3JjKTtcbiAgICBwLmNhdGNoKCgpID0+IHRoaXMuX3Byb2Jlcy5kZWxldGUoc3JjKSk7XG4gICAgdGhpcy5fcHJvYmVzLnNldChzcmMsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCBzZXNzaW9ucyA9IFsuLi50aGlzLl9zZXNzaW9ucy52YWx1ZXMoKV07XG4gICAgdGhpcy5fc2Vzc2lvbnMuY2xlYXIoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChzZXNzaW9ucy5tYXAoKGUpID0+IGUuc2Vzc2lvbi5jbG9zZSgpKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24ga2V5KG9wdHM6IE9wZW5PcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGExXCIpXG4gICAgLnVwZGF0ZShgJHtvcHRzLnNyY318JHtvcHRzLmZwc318JHtvcHRzLmRzdFcgPz8gXCJcIn18JHtvcHRzLmRzdEggPz8gXCJcIn18JHtvcHRzLmZpdCA/PyBcIlwifWApXG4gICAgLmRpZ2VzdChcImhleFwiKTtcbn1cblxuLy8gUm91bmQgZG93biB0byBhbiBldmVuIGludGVnZXIgKOKJpTIpIGZvciB0aGUgc2NhbGVyLlxuZnVuY3Rpb24gZXZlbihuOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCByID0gTWF0aC5yb3VuZChuKTtcbiAgcmV0dXJuIE1hdGgubWF4KDIsIHIgLSAociAlIDIpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBGcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuIERldGVybWluaXN0aWMtb25seSAocmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2ssIG5vIGZyYW1lIHByb3RvY29sKS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGcmFtZVByb3RvY29sKHVzZUlubmVyUHJveHk6IGJvb2xlYW4pOiBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBmcyA9IG5ldyBGcmFtZVNlcnZlcih1c2VJbm5lclByb3h5KTtcbiAgcHJvdG9jb2wuaGFuZGxlKFNDSEVNRSwgYXN5bmMgKHJlcSkgPT4ge1xuICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYCR7cmVxLm1ldGhvZH0gJHt1cmwuaG9zdG5hbWV9JHt1cmwuc2VhcmNofWApO1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKHVybC5ob3N0bmFtZSkge1xuICAgICAgICBjYXNlIFwib3BlblwiOlxuICAgICAgICAgIHJldHVybiBqc29uT2soXG4gICAgICAgICAgICBhd2FpdCBmcy5vcGVuKHtcbiAgICAgICAgICAgICAgc3JjOiB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiLFxuICAgICAgICAgICAgICBmcHM6IGludCh1cmwsIFwiZnBzXCIsIDMwKSxcbiAgICAgICAgICAgICAgZHN0VzogaW50KHVybCwgXCJ3XCIsIDApLFxuICAgICAgICAgICAgICBkc3RIOiBpbnQodXJsLCBcImhcIiwgMCksXG4gICAgICAgICAgICAgIGZpdDogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJmaXRcIikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImZyYW1lXCI6XG4gICAgICAgICAgcmV0dXJuIHJnYmFPayhhd2FpdCBmcy5nZXRGcmFtZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIsIGludCh1cmwsIFwiaWR4XCIsIDEpKSk7XG4gICAgICAgIGNhc2UgXCJzdHViXCI6XG4gICAgICAgICAgcmV0dXJuIHdlYm1Payhhd2FpdCBmcy5zdHViKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIpKTtcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgICAgYXdhaXQgZnMuY2xvc2UodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGB1bmtub3duIGFjdGlvbjogJHt1cmwuaG9zdG5hbWV9YCwge1xuICAgICAgICAgICAgc3RhdHVzOiA0MDQsXG4gICAgICAgICAgICBoZWFkZXJzOiBDT1JTX0hFQURFUlMsXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgYCR7dXJsLmhvc3RuYW1lfSBmYWlsZWQke3VybC5zZWFyY2h9OiAke21zZ31gKTtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobXNnLCB7IHN0YXR1czogNTAwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IHtcbiAgICAgIHByb3RvY29sLnVuaGFuZGxlKFNDSEVNRSk7XG4gICAgICBhd2FpdCBmcy5jbG9zZUFsbCgpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGpzb25PayhtZXRhOiBWaWRlb01ldGEpOiBSZXNwb25zZSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkobWV0YSksIHtcbiAgICBoZWFkZXJzOiB7IC4uLkNPUlNfSEVBREVSUywgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgfSk7XG59XG5cbi8vIENhY2hlZCBzdHViIEJ1ZmZlciBpcyBzaGFyZWQgYWNyb3NzIHJlc3BvbnNlcyDigJQgY29weSBzbyBhIGNvbnN1bWVyIGNhbid0IGRldGFjaCBpdC5cbmZ1bmN0aW9uIHdlYm1PayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkNPUlNfSEVBREVSUyxcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwidmlkZW8vd2VibVwiLFxuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICB9LFxuICB9KTtcbn1cblxuLy8gUmF3IFJHQkEgcGl4ZWxzOyB0aGUgcGFnZSB3cmFwcyB0aGVtIGluIEltYWdlRGF0YSB1c2luZyBtZXRhLndpZHRoL2hlaWdodCBpdCBnb3QgZnJvbSBgb3BlbmAuXG5mdW5jdGlvbiByZ2JhT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiA0MTAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgfVxuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkNPUlNfSEVBREVSUyxcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnQodXJsOiBVUkwsIGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgdiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG4gIGNvbnN0IG4gPSB2ID8gcGFyc2VJbnQodiwgMTApIDogTmFOO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IGZhbGxiYWNrO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93LCBFdmVudCwgTmF0aXZlSW1hZ2UsIFJlY3RhbmdsZSwgU2l6ZSwgV2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua0ZyYW1lU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9ibGFua19mcmFtZVwiO1xuaW1wb3J0IHsgYWR2YW5jZVZpcnR1YWxUaW1lLCBwYXVzZVZpcnR1YWxUaW1lLCByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBkcmF3U3RlZ28sIEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCB3YWl0U3RlZ29UaWNrIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IHRpY2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyB1c2VGcmFtZVByb3RvY29sIH0gZnJvbSBcIi4vdmlkZW8vcHJvdG9jb2xcIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbU2hvb3RdXCI7XG5jb25zdCBSRU5ERVJfRlBTID0gMjQwO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuLy8gUGFpbnRpbmcgc3RheXMgb24gZm9yIHRoZSB3aG9sZSBydW47IHRoaXMgb25seSB3YWl0cyBmb3IgdGhlIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIGBtc2AuXG5hc3luYyBmdW5jdGlvbiBwYWludCh7IHNvdXJjZSwgd2luLCBzaXplLCBtcyB9OiBQYWludE9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsZXQgbGFzdFRzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBzdHVjayA9IDA7XG4gIGxldCBzdHVja1NoZWNrOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgbGV0IG1hcmtEaXJ0eTogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlZmVyID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dChtYXJrRGlydHkpO1xuICAgIGNsZWFySW50ZXJ2YWwoc3R1Y2tTaGVjayk7XG4gIH07XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCArIDEgfTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHVja1NoZWNrID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJkcmF3YWJsZSB0aW1lb3V0XCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3R1Y2srKztcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IHJlbmRlciBpcyBleHRyZW1lbHkgc2xvdyBAICR7bXN9LCBjdXJyZW50OiAke2xhc3RUc30gd2l0aCAke3N0dWNrfSByZXBlYXRzYCk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5pbnZhbGlkYXRlKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IEV2ZW50PFdlYkNvbnRlbnRzUGFpbnRFdmVudFBhcmFtcz4sIF9kOiBSZWN0YW5nbGUsIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVjb2RlIGZyb20gYSAyLXJvdyBzbGl2ZXIgZmlyc3Q7IHRoZSBmdWxsLWZyYW1lIHJlYWRiYWNrICh+OE1CIG1lbWNweSkgaXMgcGFpZCBvbmx5IG9uIHRoZSBtYXRjaGluZyBmcmFtZS5cbiAgICAgICAgY29uc3Qgc2xpdmVyID0gaW1hZ2UuY3JvcCh7IHg6IDAsIHk6IGZyYW1lU2l6ZS5oZWlnaHQgLSAyLCB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhzbGl2ZXIudG9CaXRtYXAoKSwgeyB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgTWF0aC5hYnModHMgLSBtcykgPiAxKSB7XG4gICAgICAgICAgbGFzdFRzID0gdHM7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlZmVyKCk7XG4gICAgICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZShCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgc2l6ZS5oZWlnaHQgKiBzaXplLndpZHRoICogNCkpO1xuICAgICAgfTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgbWFya0RpcnR5ID0gc2V0VGltZW91dCgoKSA9PiB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpLCAxMDAwIC8gUkVOREVSX0ZQUyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgZGVmZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZXMsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG4gIGlmICh3aXRoQXVkaW8pIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiYXVkaW8gd2lsbCBiZSBpZ25vcmVkIG9uIHRoaXMgbW9kZVwiKTtcbiAgfVxuICBjb25zdCB0YWtlciA9IG5ldyBTY3JlZW5zaG90VGFrZXIoeyBtYXJrczogb3B0aW9ucy5zY3JlZW5zaG90cywgd2lkdGgsIGhlaWdodCwgb3V0RmlsZXMgfSk7XG5cbiAgYXdhaXQgdXNpbmcgXyA9IHVzZUZyYW1lUHJvdG9jb2wob3B0aW9ucy51c2VJbm5lclByb3h5KTtcbiAgY29uc3QgdEluaXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3Qgd2luUCA9IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zLCBzaWduYWwgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZXMsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHdpbiA9IGF3YWl0IHdpblA7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiaW5pdCBkb25lOlwiLCB7IHNvdXJjZSwgY29zdDogcGVyZm9ybWFuY2Uubm93KCkgLSB0SW5pdCB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGxhc3RCaXRtYXA6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHNjcmVlbnNob3RzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rRnJhbWVTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgLy8gQ29tcG9zaXRvci9jYXB0dXJlIGNhZGVuY2UgY2FwLCBOT1Qgb3V0cHV0IGZwczsgZnJhbWVzIGFyZSBkYW1hZ2UtZHJpdmVuIHBlciB2aXJ0dWFsIHN0ZXAuXG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShSRU5ERVJfRlBTKTtcbiAgICBhd2FpdCBwYXVzZVZpcnR1YWxUaW1lKGNkcCk7XG5cbiAgICBmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgdG90YWw7IGZyYW1lKyspIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWUgKyAxKSAqIGZyYW1lSW50ZXJ2YWw7XG5cbiAgICAgIGNvbnN0IHN3YXBwZWQgPSB3YWl0U3RlZ29UaWNrKHdpbi53ZWJDb250ZW50cyk7XG4gICAgICAvLyBJbmRlcGVuZGVudCB0YXJnZXRzIChpZnJhbWUgY2xvY2sgdnMgbWFpbi1mcmFtZSBzdGVnbyBjYW52YXMpOiBvbmUgY29uY3VycmVudCBob3AgaW5zdGVhZCBvZiB0d28gc2VyaWFsIG9uZXMuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGljayh7IGZyYW1lOiBpZnJhbWUsIHRpbWVzdGFtcE1zOiBmcmFtZU1zLCBzaWduYWwgfSksIGRyYXdTdGVnbyh3aW4ud2ViQ29udGVudHMsIGZyYW1lTXMpXSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbYWR2YW5jZVZpcnR1YWxUaW1lKGNkcCwgZnJhbWVJbnRlcnZhbCksIHN3YXBwZWRdKTtcbiAgICAgIGNvbnN0IGJpdG1hcCA9IGF3YWl0IHBhaW50KHsgc291cmNlLCB3aW4sIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LCBtczogZnJhbWVNcyB9KTtcbiAgICAgIGxhc3RCaXRtYXAgPSBiaXRtYXA7XG4gICAgICB0YWtlci5jYXB0dXJlKGZyYW1lTXMsIGJpdG1hcCk7XG4gICAgICBibGFua1N0YXRzLnNhbXBsZShiaXRtYXApO1xuICAgICAgLy8gRW5jb2RlIHdpdGhvdXQgYXdhaXRpbmcgKGxpbWl0ZXIgc2VyaWFsaXplcyksIHNvIGl0IG92ZXJsYXBzIHRoZSBuZXh0IGZyYW1lJ3MgQ0RQL3BhaW50IHNldHVwLlxuICAgICAgcGlwZWxpbmUuZW5jb2RlQkdSQShiaXRtYXApLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgICAgIHdyaXR0ZW4rKztcbiAgICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgICB0aHJvdyBlbmNvZGVFcnJvcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChuZXdQcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgICBzY3JlZW5zaG90cyA9IGF3YWl0IHRha2VyLmZpbmlzaChsYXN0Qml0bWFwKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvcikge1xuICAgIHRocm93IGVuY29kZUVycm9yO1xuICB9XG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogMCwgb3V0RmlsZXMsIGJsYW5rLCBzY3JlZW5zaG90cyB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgTWVudSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiLi9iYXNlL2NyYXNoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IHR5cGUgSXBjTXNnLCBJcGNNc2dUeXBlLCBJcGNXcml0ZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IHNldHVwUHVwUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci9wcm90b2NvbFwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVuZGVyXCI7XG5pbXBvcnQgeyB3aXRoUmVyZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZXJlbmRlclwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuY29uc3QgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbmxldCBleGl0aW5nID0gZmFsc2U7XG5cbnN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCk7XG5NZW51LnNldEFwcGxpY2F0aW9uTWVudShudWxsKTtcbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5hcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG5hcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcbmFwcC5vbihcIndpbGwtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxub2socHJvY2Vzcy5zZW5kLCBcImlwYyBjaGFubmVsIG1pc3Npbmcg4oCUIHNwYXduIHdpdGggc3RkaW9bM109J2lwYydcIik7XG5wcm9jZXNzLm9uY2UoXCJkaXNjb25uZWN0XCIsICgpID0+IGN0cmwuYWJvcnQoXCJkaXNjb25uZWN0XCIpKTtcbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgaWYgKG1zZy50eXBlID09PSBJcGNNc2dUeXBlLkNhbmNlbCkge1xuICAgIGN0cmwuYWJvcnQobXNnLnJlYXNvbik7XG4gIH1cbn0pO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJhcHBcIixcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaXBjID0gbmV3IElwY1dyaXRlcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dCBvZiBvcHRpb25zLm91dEZpbGVzKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb25zLmRldGVybWluaXN0aWMgPyBzaG9vdCA6IHJlbmRlcjtcbiAgICAgIGN0cmwuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoUmVyZW5kZXIoY3RybC5zaWduYWwsICgpID0+XG4gICAgICAgIGFjdGlvbih7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgc2lnbmFsOiBjdHJsLnNpZ25hbCxcbiAgICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgICAgb25Db25zb2xlOiAobCwgbSkgPT4gaXBjLndyaXRlQ29uc29sZShsLCBtKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRG9uZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGl0aW5nID0gdHJ1ZTtcbiAgICAgIGFwcC5leGl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErYTI3MDY0MzQ3NGU3MzE4ZC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvYmxhbmtfZnJhbWUudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NpbmsudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjcmVlbnNob3QudHMiLCIuLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uL3NyYy9yZW5kZXJlci9odG1sX2NoZWNrLnRzIiwiLi4vc3JjL2Jhc2Uvd2FpdGFibGVfZXZlbnQudHMiLCIuLi9zcmMvcmVuZGVyZXIvbmV0d29yay50cyIsIi4uL3NyYy9yZW5kZXJlci93aW5kb3cudHMiLCIuLi9zcmMvcmVuZGVyZXIvcmVuZGVyLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2FkdmFuY2UudHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9vcGVuLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGVfc2Vzc2lvbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm9iZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9zdHViLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2ZyYW1lX3NlcnZlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm90b2NvbC50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VBcnJheSIsIml0ZW0iLCJzIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJwdXBMb2dMZXZlbCIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwiam9pbiIsInB1cEF1ZGlvUHJlbG9hZCIsInB1cFNob290UHJlbG9hZCIsInB1cFJlbmRlclByZWxvYWQiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIlRBRyIsInN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIiwiZHVtcERpciIsImFwcCIsIm1rZGlyU3luYyIsImNyYXNoUmVwb3J0ZXIiLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX1dJTkRPV19USU1FT1VUIiwiREVGQVVMVF9PVVRfRklMRVMiLCJyZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJub3JtYWxpemVTb3VyY2UiLCJhYnMiLCJyZWFscGF0aFN5bmMiLCJtYWtlQ0xJIiwib3B0aW9ucyIsInNoYXBlIiwiZCIsInByb2dyYW0iLCJzb3VyY2UiLCJvcHRzIiwiZSIsIklwY1dyaXRlciIsInBheWxvYWQiLCJzbGVlcCIsIm1zIiwid2l0aFRpbWVvdXQiLCJwIiwibGFiZWwiLCJ0aW1lciIsImFib3J0YWJsZSIsIm9uQWJvcnQiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsIm5leHQiLCJDRFBfVElNRU9VVF9NUyIsInNlbmQiLCJjZHAiLCJtZXRob2QiLCJwYXJhbXMiLCJldmFsSW4iLCJleHByZXNzaW9uIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwidGltZW91dCIsImhhbmRsZXIiLCJfIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlc2l6ZURyYXdhYmxlIiwic2l6ZSIsIkZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIiwiU1RFR09fVElDS19DSEFOTkVMIiwiYnVpbGRTdGVnb0hUTUwiLCJ0YXJnZXRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsImRyYXdTdGVnbyIsIndjIiwiZXhwZWN0ZWQiLCJ3YWl0U3RlZ29UaWNrIiwic3dhcHBlZCIsInIiLCJQVVBfU0NIRU1FIiwiRlJBTUVfU0NIRU1FIiwiUFJJVklMRUdFRF9QUklWSUxFR0VTIiwicHJvdG9jb2wiLCJzZXR1cFB1cFByb3RvY29sIiwicmVxIiwidXJsIiwic3JjIiwiaHRtbCIsImNyZWF0ZVN0ZWdvVVJMIiwiaXNCbGFua0ZyYW1lIiwiYmdyYSIsInN0ZXBYIiwic3RlcFkiLCJyTWluIiwick1heCIsImdNaW4iLCJnTWF4IiwiYk1pbiIsImJNYXgiLCJ5IiwiYiIsImciLCJCbGFua0ZyYW1lU3RhdHMiLCJmcmFtZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwidiIsImtlZXAiLCJlbnRyeSIsIkZGX0VOQ09ERVJfTElCVlBYX1ZQOSIsIm9wZW5WaWRlb0N0eCIsIl9zdGFjayIsImN0eCIsIkNvZGVjQ29udGV4dCIsInN0YWNrIiwiX191c2luZyIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiayIsIkZGbXBlZ0Vycm9yIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsIm1ha2VGcmFtZSIsInBpeEZtdCIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJCaXRXcml0ZXIiLCJ2YWwiLCJuIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJ6ZXJvcyIsIkFOTkVYX0JfU1RBUlRfQ09ERSIsIk5BTF9CTEFfV19MUCIsIk5BTF9SU1ZfSVJBUF9WQ0wyMyIsIk5BTF9WUFMiLCJOQUxfU1BTIiwiTkFMX1BQUyIsIk5BTF9TRUlfUFJFRklYIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiVlBTX1BUTF9CSVQiLCJTUFNfUFRMX0JJVCIsIlBUTF9USUVSX0JJVCIsIlBUTF9DT01QQVQyX0JJVCIsIlNMSUNFX1RZUEVfQiIsIlNMSUNFX1RZUEVfUCIsInNldEJpdCIsImJpdE9mZnNldCIsIm1hc2siLCJjdXIiLCJwYXRjaFB0bCIsIm5hbERhdGEiLCJwdGxTdGFydEJpdCIsInJic3AiLCJwYXRjaEhldmNBbHBoYVB0bCIsImNodW5rcyIsInJld3JpdGVPbmVVZSIsIm5hbEluIiwibmV3VmFsIiwiYnIiLCJidyIsInJld3JpdGVUd29VZSIsIm5ld1ZhbDEiLCJuZXdWYWwyIiwicmV3cml0ZUFscGhhU3BzIiwic3BzIiwiU1BTX1NFUV9JRF9CSVQiLCJyZXdyaXRlQWxwaGFQcHMiLCJwcHMiLCJyZWFkU2UiLCJ1ZSIsInBhcnNlSW5saW5lU3RSZWZQaWNTZXQiLCJudW1EZWx0YVBvY3NTZXQwIiwiZGVsdGFJZHhNaW51czEiLCJudW1OZWciLCJudW1Qb3MiLCJwYXJzZUhlYWRlclRvQWxpZ25tZW50IiwibmFsVHlwZSIsImNmZyIsImlzSXJhcCIsInNsaWNlVHlwZSIsInJld3JpdGVBbHBoYVNsaWNlSGVhZGVyIiwic2xpY2UiLCJwcm9iZSIsIkIiLCJvbGRBbGlnbkJpdHMiLCJzbGljZURhdGFCeXRlT2Zmc2V0IiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwicm93QmFzZSIsImRzdEJhc2UiLCJyZXdyaXRlQWxwaGFQYXJhbVNldCIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJhRGF0YSIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJEdWFsTGF5ZXJNdXgiLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJ0YWciLCJiYXNlIiwiYWxwaGEiLCJoZXZjQ2ZnIiwiaW50ZXJsZWF2ZWQiLCJmYWlsIiwiZmllbGQiLCJnb3QiLCJza2lwUHRsIiwibWF4U3ViTGF5ZXJzIiwic3ViUHJvZmlsZVByZXNlbnQiLCJzdWJMZXZlbFByZXNlbnQiLCJwYXJzZVNwcyIsInNwc1Jic3AiLCJjaHJvbWFGb3JtYXQiLCJsb2cyTWF4UG9jTHNiIiwib3JkZXJDb3VudCIsInNhb0VuYWJsZWQiLCJudW1TdFJwcyIsImxvbmdUZXJtUmVmUGljc1ByZXNlbnQiLCJzcHNUZW1wb3JhbE12cEVuYWJsZWQiLCJwYXJzZVBwcyIsInBwc1Jic3AiLCJudW1FeHRyYVNsaWNlSGVhZGVyQml0cyIsImNhYmFjSW5pdFByZXNlbnQiLCJwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCIsImRlYmxvY2tpbmdDb250cm9sUHJlc2VudCIsInNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUiLCJwYXJzZU52ZW5jSGV2Y0NvbmZpZyIsImV4dHJhZGF0YSIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwibnZlbmNPcHRzIiwiY29tbW9uIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidW5pZmllZCIsImNocm9tYVNpemUiLCJhbHBoYUJ1ZiIsImFscGhhU3dGcmFtZSIsInB0cyIsImRlc3luYyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsInZpZGVvIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiRm9ybWF0TXV4ZXIiLCJvdXRQYXRoIiwiZm9ybWF0TmFtZSIsIkZvcm1hdENvbnRleHQiLCJjb2RlY0N0eCIsIkRpY3Rpb25hcnkiLCJPdXRwdXRTaW5rIiwiX091dHB1dFNpbmsiLCJwYXRoIiwibG93ZXIiLCJzZXR1cCIsImF1ZGlvIiwiX3Byb21pc2UiLCJGRl9FTkNPREVSX0FBQyIsIkZGX0VOQ09ERVJfTElCT1BVUyIsInNhbXBsZVJhdGUiLCJod1ZpZGVvIiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIm91dEZpbGVzIiwid2l0aEF1ZGlvIiwia2luZHMiLCJuZWVkc01wNEh3IiwiaXNId0FscGhhQ2FwYWJsZSIsInNpbmtzIiwic2luayIsImlucHV0IiwiRnJhbWVEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImwiLCJzY29yZSIsInNpemVFcXVhbHMiLCJhIiwiQVVESU9fTUVUQV9DSEFOTkVMIiwiQVVESU9fQ0hVTktfQ0hBTk5FTCIsImF0dGFjaEF1ZGlvTGlzdGVuZXJzIiwiZW5jb2RlciIsImdldFZpZGVvVGltZU1zIiwib25FcnJvciIsIm9uTWV0YSIsIl9lIiwic3RhcnRNcyIsInNpbGVuY2VTYW1wbGVzIiwib25DaHVuayIsImJ1ZmZlciIsIlNjcmVlbnNob3RUYWtlciIsIl9zIiwiZGlyIiwic2VjIiwiaW5kZXgiLCJjdXJyZW50VGltZU1zIiwiZmluYWxCZ3JhIiwibmF0aXZlSW1hZ2UiLCJ3cml0ZUZpbGUiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dEVycm9yIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsIldhaXRhYmxlRXZlbnQiLCJtYXAiLCJMT0NBTF9TQ0hFTUVTIiwiaXNMb2NhbFNjaGVtZSIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJVUkwiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJzdHViTWVkaWEiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsImtleSIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJleGl0Q29kZSIsImRpc3Bvc2VXaW5kb3ciLCJwaWNrUHJlbG9hZCIsInJlbmRlcmVyIiwib3BlbldpbmRvdyIsIm9uQ3JlYXRlZCIsIkJyb3dzZXJXaW5kb3ciLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJtc2dzIiwib3BlbldpbmRvd1dpdGhSZXRyeSIsImxvYWRXaW5kb3ciLCJ3YXJtdXAiLCJvcGVuIiwicmVuZGVyIiwiZHVyYXRpb24iLCJvblByb2dyZXNzIiwidGFrZXIiLCJ0b3RhbCIsImZyYW1lSW50ZXJ2YWwiLCJmcmFtZVNpemUiLCJ3cml0dGVuIiwibGFzdEZyYW1lIiwic2NyZWVuc2hvdHMiLCJsYXN0V3JpdHRlblRpbWUiLCJwcm9ncmVzcyIsImVuY29kZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsImNsZWFyU3R1Y2tDaGVjayIsImJsYW5rU3RhdHMiLCJkcm9wU3RhdHMiLCJkaXNwb3NlQXVkaW8iLCJzY2hlZHVsZUZyYW1lIiwicGFpbnQiLCJfciIsImltYWdlIiwiaW1hZ2VTaXplIiwiY3VycmVudFRpbWUiLCJjcm9wcGVkIiwidGltZURlbHRhIiwiZnJhbWVzVG9JbnNlcnQiLCJuZXdQcm9ncmVzcyIsImR1cmF0aW9uTXMiLCJsYXN0V3JpdHRlbiIsInN0dWNrIiwiYm1wIiwiYmxhbmsiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJUSUNLX1NZTUJPTCIsImV4cHIiLCJ0aWNrRXYiLCJSV19USU1FT1VUX1VTIiwib3BlbklucHV0IiwiRGVtdXhlciIsImRlY29kZUZyYW1lcyIsIm1ldGEiLCJBVk1FRElBX1RZUEVfVklERU8iLCJkZWMiLCJEZWNvZGVyIiwiZnJhbWVXaWR0aCIsImZyYW1lSGVpZ2h0Iiwic2NhbGUiLCJmaWx0ZXIiLCJGaWx0ZXJBUEkiLCJfZnJhbWUiLCJwYWNrUmdiYSIsInJvdyIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJpZHgiLCJoaXQiLCJmYWlscyIsImdlbiIsImZhaWxlZCIsImF0IiwiZmxvb3IiLCJ0YiIsImxlYWRHYXAiLCJvdXRlciIsIl9wa3QiLCJlbmNvZGVTdHViV2VibSIsInRtcGRpciIsInJhbmRvbUJ5dGVzIiwic3R1YiIsIlN0dWJGcmFtZSIsInJlYWRGaWxlIiwicm0iLCJsdW1hIiwiY2hyb21hIiwiRnJhbWVTZXJ2ZXIiLCJfdXNlSW5uZXJQcm94eSIsImlkIiwiZXZlbiIsInJlYWwiLCJzZXNzaW9ucyIsImNyZWF0ZUhhc2giLCJTQ0hFTUUiLCJDT1JTX0hFQURFUlMiLCJ1c2VGcmFtZVByb3RvY29sIiwiZnMiLCJqc29uT2siLCJpbnQiLCJyZ2JhT2siLCJ3ZWJtT2siLCJieXRlcyIsImNvcHkiLCJmYWxsYmFjayIsIlJFTkRFUl9GUFMiLCJSRU5ERVJfVE9MRVJBTkNFIiwibGFzdFRzIiwiY2xlYXJEaXJ0eUNoZWNrIiwiX2QiLCJzbGl2ZXIiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJsYXN0Qml0bWFwIiwibWFpbiIsImlmcmFtZSIsImZyYW1lTXMiLCJwcmludEZlYXR1cmVzIiwiY3RybCIsImV4aXRpbmciLCJNZW51IiwicmF3IiwiaXBjIiwibWtkaXIiLCJyZXN1bHQiLCJtIl0sIm1hcHBpbmdzIjoiMHlFQUtBLElBQU1BLEVBQUFBLENBQW1CLElBQ3ZCLE9BQU8sUUFBQSxDQUFhLElBQ2hCLElBQUksR0FBQSxDQUFJLENBQUEsS0FBQSxFQUFRLFVBQVUsQ0FBQSxDQUFFLENBQUEsQ0FBRSxLQUM3QixRQUFBLENBQVMsYUFBQSxFQUFpQixRQUFBLENBQVMsYUFBQSxDQUFjLE9BQUEsQ0FBUSxXQUFBLEtBQWtCLFFBQUEsQ0FDMUUsUUFBQSxDQUFTLGFBQUEsQ0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFVBQVcsUUFBQSxDQUFTLE9BQU8sQ0FBQSxDQUFFLElBQUEsQ0FFaENDLENBQUFBLENBQWdDRCxFQUFBQSxHQ050QyxTQUFTRSxFQUFBQSxDQUFRQyxFQUFjQyxDQUFBQSxDQUFzQkMsQ0FBQUEsQ0FBaUMsQ0FDM0YsR0FBSSxDQUNGLE9BQU9ELEVBQU8sT0FBQSxDQUFRLEdBQUEsQ0FBSUQsQ0FBSSxDQUFDLENBQ2pDLENBQUEsS0FBUSxDQUNOLE9BQU9FLENBQ1QsQ0FDRixDQ1ZPLFNBQVNDLENBQUFBLENBQVlDLEVBQW9CLENBQzlDLEdBQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQ2YsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFNQyxDQUFBQSxDQUFNLE1BQUEsQ0FBT0QsQ0FBQyxDQUFBLENBQ3BCLEdBQUksTUFBQSxDQUFPLEtBQUEsQ0FBTUMsQ0FBRyxDQUFBLENBQ2xCLE1BQU0sSUFBSSxNQUFNLENBQUEsTUFBQSxFQUFTRCxDQUFDLENBQUEsc0JBQUEsQ0FBd0IsQ0FBQSxDQUVwRCxPQUFPQyxDQUNULENBRU8sU0FBU0MsRUFBQUEsQ0FBWUYsQ0FBQUEsQ0FBb0IsQ0FDOUMsT0FBSSxPQUFPQSxHQUFNLFFBQUEsQ0FDUkEsQ0FBQUEsQ0FFRixNQUFBLENBQU9BLENBQUMsQ0FDakIsQ0FHTyxTQUFTRyxFQUFBQSxDQUFjQyxDQUFBQSxDQUE4QyxDQUMxRSxPQUFRSixDQUFBQSxFQUNGLE9BQU9BLEdBQU0sUUFBQSxFQUFZQSxDQUFBQSxDQUFFLElBQUEsRUFBSyxHQUFNLEVBQUEsQ0FDakMsR0FFRkEsQ0FBQUEsQ0FBRSxLQUFBLENBQU0sR0FBRyxDQUFBLENBQUUsR0FBQSxDQUFLSyxHQUFNRCxDQUFBQSxDQUFLQyxDQUFBQSxDQUFFLElBQUEsRUFBTSxDQUFDLENBRWpELENDckJBLElBQU1DLEVBQUFBLENBQVVDLHNCQUFBQSxDQUFjYixDQUFlLENBQUEsQ0FFaENjLEVBQUFBLENBQWNiLEdBQUssZUFBQSxDQUFpQkksQ0FBQUEsQ0FBYSxDQUFDLENBQUEsQ0FFbERVLEVBQUFBLENBQWFDLFlBQUFBLENBQVFKLEdBQVEsT0FBQSxDQUFRLDJCQUEyQixDQUFDLENBQUEsQ0FDeERLLFNBQUFBLENBQUtGLEdBQVksTUFBQSxDQUFRLFNBQVMsQ0FBQSxLQUMzQ0csRUFBQUEsQ0FBa0JELFNBQUFBLENBQUtGLEVBQUFBLENBQVksT0FBUSxTQUFBLENBQVcsbUJBQW1CLENBQUEsQ0FDekVJLEVBQUFBLENBQWtCRixTQUFBQSxDQUFLRixFQUFBQSxDQUFZLE9BQVEsU0FBQSxDQUFXLG1CQUFtQixDQUFBLENBQ3pFSyxFQUFBQSxDQUFtQkgsU0FBQUEsQ0FBS0YsRUFBQUEsQ0FBWSxPQUFRLFNBQUEsQ0FBVyxvQkFBb0IsRUNFeEYsSUFBTU0sRUFBQUEsQ0FBUSxjQUNSQyxFQUFBQSxDQUFPLFlBQUEsQ0FDUEMsRUFBQUEsQ0FBTyxZQUFBLENBQ1BDLEVBQUFBLENBQVEsYUFBQSxDQUNSQyxHQUFRLGFBQUEsQ0FFZCxTQUFTQyxFQUFBQSxDQUFVQyxDQUFBQSxDQUE2Q0MsQ0FBQUEsQ0FBdUMsQ0FDckcsT0FBTyxTQUFBLEdBQTJCQyxDQUFBQSxDQUFxQixDQUNyRCxJQUFNQyxDQUFBQSxDQUFZRCxDQUFBQSxDQUFTLElBQUtFLENBQUFBLEVBQ3ZCQSxDQUFBQSxZQUFlLEtBQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxLQUFBLEVBQVMsTUFBQSxDQUFPQSxDQUFHLENBQUEsQ0FBS0EsQ0FDNUQsQ0FBQSxDQUNELE9BQU9KLENBQUFBLENBQU8sSUFBQSxDQUFLLEtBQU0sR0FBR0csQ0FBUyxDQUN2QyxDQUNGLENBOUJBLElBQUFFLEdBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLENBQUFBLENBa0VFRCxFQUFBQSxDQUFBLENBQUNWLEVBQUFBLENBQUFBLENBS0RTLEVBQUFBLENBQUEsQ0FBQ1QsRUFBQUEsQ0FBQUEsQ0FLRFEsRUFBQUEsQ0FBQSxDQUFDUixFQUFBQSxDQUFBQSxDQUtETyxFQUFBQSxDQUFBLENBQUNQLEVBQUFBLENBQUFBLENBS0RNLEVBQUFBLENBQUEsQ0FBQ04sSUF0REksSUFBTVksQ0FBQUEsQ0FBTixLQUFtQyxDQThCeEMsV0FBQSxDQUFvQkMsQ0FBQUEsQ0FBaUJ6QixHQUFhLENBQTlCLElBQUEsQ0FBQSxNQUFBLENBQUF5QixDQUFBQSxDQTlCZkMsRUFBQUEsQ0FBQUgsQ0FBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQ0xJLEdBQUEsSUFBQSxDQUFRLE9BQUEsQ0FBQSxDQThCTixJQUFBLENBQUssSUFBQSxDQUFPLFFBQ2QsQ0FGb0IsT0EzQnBCLElBQUksS0FBQSxFQUFnQixDQUNsQixPQUFPLElBQUEsQ0FBSyxNQUNkLENBRUEsSUFBSSxLQUFBLENBQU1DLENBQUFBLENBQWUsQ0FDdkIsSUFBQSxDQUFLLE1BQUEsQ0FBU0EsRUFDZCxJQUFBLENBQUssSUFBQSxDQUFPLElBQUEsQ0FBSyxLQUFBLEVBQVMsUUFDNUIsQ0FFQSxJQUFJLElBQUEsRUFBK0IsQ0FDakMsT0FBTyxJQUFBLENBQUssS0FDZCxDQUVBLElBQUksSUFBQSxDQUFLQSxDQUFBQSxDQUFtQixDQUMxQixJQUFNQyxDQUFBQSxDQUFRRCxFQUFNLEtBQUEsRUFBUyxPQUFBLENBQVEsS0FBQSxDQUMvQkUsQ0FBQUEsQ0FBT0YsQ0FBQUEsQ0FBTSxJQUFBLEVBQVEsUUFBUSxJQUFBLENBQzdCRyxDQUFBQSxDQUFPSCxDQUFBQSxDQUFNLElBQUEsRUFBUSxPQUFBLENBQVEsSUFBQSxDQUM3QkksRUFBUUosQ0FBQUEsQ0FBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLEtBQUEsQ0FDL0JLLENBQUFBLENBQUssSUFBQSxDQUFLLE9BQ2hCLElBQUEsQ0FBSyxLQUFBLENBQVEsQ0FDWCxLQUFBLENBQU9BLENBQUFBLEVBQU0sQ0FBQSxDQUFJSixFQUFRLE1BQUEsQ0FDekIsSUFBQSxDQUFNSSxDQUFBQSxFQUFNLENBQUEsQ0FBSUgsQ0FBQUEsQ0FBTyxNQUFBLENBQ3ZCLEtBQU1HLENBQUFBLEVBQU0sQ0FBQSxDQUFJRixDQUFBQSxDQUFPLE1BQUEsQ0FDdkIsS0FBQSxDQUFPRSxDQUFBQSxFQUFNLEVBQUlELENBQUFBLENBQVEsTUFDM0IsRUFDRixDQU9BLEtBQUEsQ0FBQSxHQUFTakIsRUFBMkIsQ0FDbEMsSUFBQSxDQUFLLElBQUEsRUFBTSxLQUFBLEdBQVFSLEVBQUFBLENBQU8sR0FBR1EsQ0FBUSxFQUN2QyxDQUdBLElBQUEsQ0FBQSxHQUFRQSxDQUFBQSxDQUEyQixDQUNqQyxJQUFBLENBQUssTUFBTSxJQUFBLEdBQU9QLEVBQUFBLENBQU0sR0FBR08sQ0FBUSxFQUNyQyxDQUdBLFFBQVFBLENBQUFBLENBQTJCLENBQ2pDLElBQUEsQ0FBSyxJQUFBLEVBQU0sSUFBQSxHQUFPTixFQUFBQSxDQUFNLEdBQUdNLENBQVEsRUFDckMsQ0FHQSxLQUFBLENBQUEsR0FBU0EsQ0FBQUEsQ0FBMkIsQ0FDbEMsS0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRTCxFQUFBQSxDQUFPLEdBQUdLLENBQVEsRUFDdkMsQ0FHQSxLQUFBLENBQUEsR0FBU0EsQ0FBQUEsQ0FBMkIsQ0FDbEMsSUFBQSxDQUFLLElBQUEsRUFBTSxLQUFBLEdBQVFKLEdBQU8sR0FBR0ksQ0FBUSxFQUNyQyxPQUFBLENBQVEsSUFBQSxDQUFLLENBQUMsRUFDaEIsQ0FFUSxRQUFBLENBQVNtQixDQUFBQSxDQUFpQixDQUNoQyxJQUFNakIsRUFBTWlCLENBQUFBLENBQVEsT0FBQSxFQUFRLENBQ3hCakIsQ0FBQUEsQ0FBSSxVQUFBLENBQVdWLEVBQUssRUFDdEIsSUFBQSxDQUFLLEtBQUEsQ0FBTVUsQ0FBQUEsQ0FBSSxLQUFBLENBQU1WLEVBQUFBLENBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzdCVSxDQUFBQSxDQUFJLFVBQUEsQ0FBV1QsRUFBSSxDQUFBLENBQzVCLEtBQUssSUFBQSxDQUFLUyxDQUFBQSxDQUFJLEtBQUEsQ0FBTVQsRUFBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQyxDQUFDLENBQUEsQ0FDM0JTLENBQUFBLENBQUksVUFBQSxDQUFXUixFQUFJLENBQUEsQ0FDNUIsSUFBQSxDQUFLLEtBQUtRLENBQUFBLENBQUksS0FBQSxDQUFNUixFQUFBQSxDQUFLLE1BQUEsQ0FBUyxDQUFDLENBQUMsRUFDM0JRLENBQUFBLENBQUksVUFBQSxDQUFXUCxFQUFLLENBQUEsQ0FDN0IsSUFBQSxDQUFLLE1BQU1PLENBQUFBLENBQUksS0FBQSxDQUFNUCxFQUFBQSxDQUFNLE1BQUEsQ0FBUyxDQUFDLENBQUMsRUFFdEMsSUFBQSxDQUFLLElBQUEsQ0FBS08sQ0FBRyxFQUVqQixDQUVBLE1BQUEsQ0FBT2tCLEVBQW9CL0MsQ0FBQUEsQ0FBYyxDQUN2QyxPQUFPLElBQUksT0FBQSxDQUFjLENBQUNnRCxFQUFTQyxDQUFBQSxHQUFXLENBQzVDLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHakQsQ0FBSSxTQUFTLENBQUEsQ0FDM0IsSUFBSWtELENBQUFBLENBQWdCLEVBQUEsQ0FDZEMsQ0FBQUEsQ0FBWUMsQ0FBQUEsRUFBaUIsQ0FDakMsSUFBTU4sQ0FBQUEsQ0FBVU0sQ0FBQUEsQ0FBSyxRQUFBLEVBQVMsQ0FDMUJOLENBQUFBLENBQVEsV0FBV3ZCLEVBQUssQ0FBQSxDQUMxQjJCLENBQUFBLEVBQVNKLENBQUFBLENBQVEsS0FBQSxDQUFNdkIsRUFBQUEsQ0FBTSxPQUFTLENBQUMsQ0FBQSxDQUV2QyxLQUFLLFFBQUEsQ0FBU3VCLENBQU8sRUFFekIsQ0FBQSxDQUNBQyxDQUFBQSxDQUFLLE1BQUEsRUFBUSxFQUFBLENBQUcsTUFBQSxDQUFRSSxDQUFRLEVBQ2hDSixDQUFBQSxDQUFLLE1BQUEsRUFBUSxFQUFBLENBQUcsTUFBQSxDQUFRSSxDQUFRLENBQUEsQ0FDaENKLEVBQ0csRUFBQSxDQUFHLE9BQUEsQ0FBVU0sQ0FBQUEsRUFBUSxDQUNwQkgsQ0FBQUEsRUFBU0csQ0FBQUEsQ0FBSSxRQUNiTixDQUFBQSxDQUFLLElBQUEsR0FDUCxDQUFDLENBQUEsQ0FDQSxJQUFBLENBQUssUUFBUyxDQUFDTyxDQUFBQSxDQUFNQyxDQUFBQSxHQUFXLENBQzNCRCxDQUFBQSxFQUFRQyxDQUFBQSxFQUFVTCxHQUNwQkEsQ0FBQUEsR0FBVSxDQUFBLGdCQUFBLEVBQW1CSCxDQUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FBQSxDQUNyRCxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBRy9DLENBQUksQ0FBQSxNQUFBLENBQUEsQ0FBVSxDQUFFLElBQUEsQ0FBQXNELENBQUFBLENBQU0sT0FBQUMsQ0FBQUEsQ0FBUSxLQUFBLENBQUFMLENBQU0sQ0FBQyxDQUFBLENBQ25ERCxDQUFBQSxDQUFPLElBQUksS0FBQSxDQUFNQyxDQUFLLENBQUMsQ0FBQSxHQUV2QixJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR2xELENBQUksQ0FBQSxNQUFBLENBQVEsRUFDMUJnRCxDQUFBQSxFQUFRLEVBRVosQ0FBQyxDQUFBLENBQ0EsRUFBQSxDQUFHLG9CQUFBLENBQXVCUSxHQUFXLENBQ3BDLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHeEQsQ0FBSSxDQUFBLFVBQUEsQ0FBQSxDQUFjd0QsQ0FBTSxFQUN4QyxDQUFDLENBQUEsQ0FDQSxFQUFBLENBQUcsMEJBQUEsQ0FBNkJILENBQUFBLEVBQVEsQ0FDdkMsSUFBQSxDQUFLLEtBQUEsQ0FBTSxDQUFBLEVBQUdyRCxDQUFJLENBQUEsVUFBQSxDQUFBLENBQWNxRCxDQUFHLEVBQ3JDLENBQUMsRUFDTCxDQUFDLENBQ0gsQ0FDRixDQUFBLENBaEhPbEIsRUFBQXNCLEVBQUFBLENBQUEsQ0FBQSxDQW1DTEMsR0FBQXZCLENBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUQsR0FsQ1dFLENBQUFBLENBQUFBLENBd0NYc0IsRUFBQUEsQ0FBQXZCLENBQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FEQUYsRUFBQUEsQ0F2Q1dHLENBQUFBLENBQUFBLENBNkNYc0IsR0FBQXZCLENBQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FEQUgsRUFBQUEsQ0E1Q1dJLENBQUFBLENBQUFBLENBa0RYc0IsRUFBQUEsQ0FBQXZCLENBQUFBLENBQUEsVUFEQUosRUFBQUEsQ0FqRFdLLENBQUFBLENBQUFBLENBdURYc0IsRUFBQUEsQ0FBQXZCLENBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUwsRUFBQUEsQ0F0RFdNLEdBQU51QixFQUFBQSxDQUFBeEIsQ0FBQUEsQ0FBTUMsQ0FBQUEsQ0FBQUEsQ0FrSGIsSUFBTXdCLENBQUFBLENBQVMsSUFBSXhCLEVBR25CeUIsVUFBQUEsQ0FBSSxXQUFBLENBQVksQ0FBQ0MsQ0FBQUEsQ0FBT2hCLENBQUFBLEdBQVksQ0FDbEMsSUFBTWpCLENBQUFBLENBQU1pQixDQUFBQSxDQUFRLE9BQUEsRUFBUSxDQUN2QmpCLENBQUFBLEdBR0RpQyxDQUFBQSxFQUFTQyx1QkFDWEgsQ0FBQUEsQ0FBTyxLQUFBLENBQU0vQixDQUFHLENBQUEsQ0FDUGlDLENBQUFBLEVBQVNFLHdCQUFBQSxFQUNsQkosRUFBTyxJQUFBLENBQUsvQixDQUFHLEdBRW5CLENBQUMsQ0FBQSxDQ3hKRCxJQUFNb0MsRUFBQUEsQ0FBTSxTQUFBLENBRUwsU0FBU0MsRUFBQUEsRUFBNkIsQ0FFM0MsSUFBTUMsRUFBVXBELFNBQUFBLENBQUtxRCxZQUFBQSxDQUFJLE9BQUEsQ0FBUSxTQUFTLENBQUEsQ0FBRyxjQUFBLENBQWdCLFNBQVMsQ0FBQSxDQUN0RUMsWUFBQUEsQ0FBVUYsQ0FBQUEsQ0FBUyxDQUFFLFNBQUEsQ0FBVyxJQUFLLENBQUMsQ0FBQSxDQUN0Q0MsWUFBQUEsQ0FBSSxPQUFBLENBQVEsWUFBQSxDQUFjRCxDQUFPLENBQUEsQ0FDakNHLHVCQUFjLEtBQUEsQ0FBTSxDQUNsQixXQUFBLENBQWEsY0FBQSxDQUNiLGNBQUEsQ0FBZ0IsS0FBQSxDQUNoQixTQUFVLEtBQUEsQ0FDVix3QkFBQSxDQUEwQixJQUM1QixDQUFDLENBQUEsQ0FDRFYsQ0FBQUEsQ0FBTyxNQUFNSyxFQUFBQSxDQUFLLGFBQUEsQ0FBZUUsQ0FBTyxFQUMxQyxDQ25CTyxTQUFTSSxFQUFBQSxDQUFpQ0MsRUFBdUJ0RSxDQUFBQSxDQUF3QyxDQUM5RyxPQUFPLENBQUEsR0FBSXVFLENBQUFBLEdBQVMsQ0FDbEIsR0FBSSxDQUNGLElBQU1DLENBQUFBLENBQU1GLENBQUFBLENBQUcsR0FBR0MsQ0FBSSxFQUN0QixPQUFJQyxDQUFBQSxZQUFlLE9BQUEsQ0FDVkEsQ0FBQUEsQ0FBSSxLQUFBLENBQU0sSUFBTXhFLENBQVksQ0FBQSxDQUU5QndFLENBQ1QsQ0FBQSxLQUFRLENBQ04sT0FBT3hFLENBQ1QsQ0FDRixDQUNGLENDUk8sSUFBTXlFLEVBQUFBLENBQWUsaUJBQUEsQ0FFckIsU0FBU0MsSUFBUSxDQUN0QixJQUFNQyxFQUFPLE9BQUEsQ0FBUSxJQUFBLENBQ2pCQyxFQUFPRCxDQUFBQSxDQUFLLElBQUEsQ0FBTUUsQ0FBQUEsRUFBUUEsQ0FBQUEsQ0FBSSxVQUFBLENBQVdKLEVBQVksQ0FBQyxDQUFBLENBQzFELEdBQUksQ0FBQ0csQ0FBQUEsQ0FDSCxPQUFBbEIsQ0FBQUEsQ0FBTyxNQUFNLFVBQUEsQ0FBWWlCLENBQUksQ0FBQSxDQUN0QixPQUFBLENBQVEsSUFBQSxDQUVqQixJQUFNSixFQUFPLENBQUMsTUFBQSxDQUFRLEdBQUdJLENBQUFBLENBQUssS0FBQSxDQUFNLEVBQUUsQ0FBQyxDQUFBLENBQ3ZDLE9BQUFDLENBQUFBLENBQU8sTUFBQSxDQUFPLElBQUEsQ0FBS0EsQ0FBQUEsQ0FBSyxNQUFNLEdBQUcsQ0FBQSxDQUFFLENBQUMsQ0FBQSxDQUFJLFFBQVEsQ0FBQSxDQUFFLFVBQVMsQ0FDM0RMLENBQUFBLENBQUssSUFBQSxDQUFLLEdBQUcsSUFBQSxDQUFLLEtBQUEsQ0FBTUssQ0FBSSxDQUFDLENBQUEsQ0FDN0JsQixFQUFPLEtBQUEsQ0FBTSxTQUFBLENBQVdhLENBQUksQ0FBQSxDQUNyQkEsQ0FDVCxDQ2hCTyxJQUFNTyxFQUFBQSxDQUFnQixJQUFBLENBQ2hCQyxFQUFBQSxDQUFpQixJQUFBLENBQ2pCQyxFQUFBQSxDQUFjLEVBQUEsQ0FDZEMsR0FBbUIsQ0FBQSxDQUNuQkMsRUFBQUEsQ0FBeUIsRUFBQSxDQUN6QkMsRUFBQUEsQ0FBb0IsQ0FBQyxjQUFBLENBQWdCLGVBQWUsQ0FBQSxDQUVwREMsRUFBQUEsQ0FBZUMsa0JBQUFBLENBQUUsTUFBQSxDQUFPLENBQ25DLFFBQUEsQ0FBVUEsbUJBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLHFCQUFxQixDQUFBLENBQ25ELEtBQUEsQ0FBT0EsbUJBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLGFBQWEsQ0FBQSxDQUN4QyxNQUFBLENBQVFBLG1CQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxjQUFjLENBQUEsQ0FDMUMsR0FBQSxDQUFLQSxtQkFBRSxNQUFBLEVBQU8sQ0FBRSxTQUFTLG1CQUFtQixDQUFBLENBQzVDLFVBQVdBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFFBQUEsQ0FBUywwQkFBMEIsQ0FBQSxDQUMxRCxTQUFVQSxrQkFBQUEsQ0FBRSxLQUFBLENBQU1BLGtCQUFBQSxDQUFFLE1BQUEsRUFBUSxDQUFBLENBQUUsU0FBUyxzREFBc0QsQ0FBQSxDQUM3RixhQUFBLENBQWVBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFNBQVMsOENBQThDLENBQUEsQ0FDbEYsYUFBQSxDQUFlQSxrQkFBQUEsQ0FBRSxPQUFBLEVBQVEsQ0FBRSxTQUFTLHVDQUF1QyxDQUFBLENBQzNFLFVBQUEsQ0FBWUEsa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsU0FBUyxzRUFBc0UsQ0FBQSxDQUN2RyxjQUFBLENBQWdCQSxrQkFBQUEsQ0FBRSxPQUFBLEVBQVEsQ0FBRSxTQUFTLHdFQUF3RSxDQUFBLENBQzdHLGNBQUEsQ0FBZ0JBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFNBQVMsaURBQWlELENBQUEsQ0FDdEYsY0FBZUEsa0JBQUFBLENBQUUsTUFBQSxHQUFTLFFBQUEsQ0FBUyxnQ0FBZ0MsQ0FBQSxDQUNuRSxXQUFBLENBQWFBLGtCQUFBQSxDQUFFLEtBQUEsQ0FBTUEsbUJBQUUsTUFBQSxFQUFRLENBQUEsQ0FBRSxRQUFBLENBQVMsMkNBQTJDLENBQ3ZGLENBQUMsQ0FBQSxDQXdCWUMsRUFBQUEsQ0FBc0MsQ0FDakQsS0FBQSxDQUFPUixFQUFBQSxDQUNQLE1BQUEsQ0FBUUMsR0FDUixHQUFBLENBQUtDLEVBQUFBLENBQ0wsUUFBQSxDQUFVQyxFQUFBQSxDQUNWLFFBQUEsQ0FBVUUsRUFBQUEsQ0FDVixVQUFXLEtBQUEsQ0FDWCxhQUFBLENBQWUsS0FBQSxDQUNmLGFBQUEsQ0FBZSxLQUFBLENBQ2YsVUFBQSxDQUFZLE1BQ1osY0FBQSxDQUFnQixLQUFBLENBQ2hCLGNBQUEsQ0FBZ0IsS0FBQSxDQUNoQixhQUFBLENBQWVELEVBQUFBLENBQ2YsWUFBYSxFQUNmLENBQUEsQ0NuREEsU0FBU0ssRUFBQUEsQ0FBZ0JoRixDQUFBQSxDQUFtQixDQUMxQyxHQUFJQSxDQUFBQSxDQUFFLFNBQVMsS0FBSyxDQUFBLEVBQUtBLEVBQUUsVUFBQSxDQUFXLE9BQU8sQ0FBQSxDQUMzQyxPQUFPQSxDQUFBQSxDQUVULElBQUlpRixFQUNKLEdBQUksQ0FDRkEsQ0FBQUEsQ0FBTUMsZUFBQUEsQ0FBYWxGLENBQUMsRUFDdEIsTUFBUSxDQUNOaUYsQ0FBQUEsQ0FBTTFDLFlBQUFBLENBQVF2QyxDQUFDLEVBQ2pCLENBQ0EsT0FBTyxDQUFBLE9BQUEsRUFBVWlGLENBQUcsQ0FBQSxDQUN0QixDQU9BLGVBQXNCRSxFQUFBQSxDQUFRQyxFQUFxQixDQUNqRCxJQUFNQyxDQUFBQSxDQUFRUixFQUFBQSxDQUFhLEtBQUEsQ0FDckJTLENBQUFBLENBQUlQLEdBQ1ZRLGlCQUFBQSxDQUNHLElBQUEsQ0FBS0gsQ0FBQUEsQ0FBUSxJQUFJLENBQUEsQ0FDakIsUUFBQSxDQUFTLFdBQVksb0RBQW9ELENBQUEsQ0FDekUsTUFBQSxDQUFPLHNCQUFBLENBQXdCQyxDQUFBQSxDQUFNLEtBQUEsQ0FBTSxZQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxLQUFLLENBQUEsQ0FBRSxDQUFBLENBQ3BFLE9BQU8sdUJBQUEsQ0FBeUJELENBQUFBLENBQU0sTUFBQSxDQUFPLFdBQUEsQ0FBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUUsQ0FBQSxDQUN2RSxNQUFBLENBQU8sNkJBQUEsQ0FBK0JELENBQUFBLENBQU0sV0FBQSxDQUFZLFlBQWEsRUFBRSxDQUFBLENBQ3ZFLE1BQUEsQ0FBTyxvQkFBQSxDQUFzQkEsQ0FBQUEsQ0FBTSxHQUFBLENBQUksWUFBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsR0FBRyxDQUFBLENBQUUsQ0FBQSxDQUM5RCxNQUFBLENBQU8sMEJBQTJCRCxDQUFBQSxDQUFNLFFBQUEsQ0FBUyxXQUFBLENBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLFFBQVEsRUFBRSxDQUFBLENBQzdFLE1BQUEsQ0FBTyx3QkFBQSxDQUEwQkQsQ0FBQUEsQ0FBTSxRQUFBLENBQVMsV0FBQSxDQUFhQyxFQUFFLFFBQUEsQ0FBUyxJQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FDakYsTUFBQSxDQUFPLG1CQUFvQkQsQ0FBQUEsQ0FBTSxTQUFBLENBQVUsWUFBYUMsQ0FBQUEsQ0FBRSxTQUFTLEVBQ25FLE1BQUEsQ0FBTyxxQkFBQSxDQUF1QkQsQ0FBQUEsQ0FBTSxhQUFBLENBQWMsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLGFBQWEsQ0FBQSxDQUM5RSxNQUFBLENBQU8sbUJBQUEsQ0FBcUJELENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYUMsRUFBRSxhQUFhLENBQUEsQ0FDNUUsTUFBQSxDQUFPLGVBQUEsQ0FBaUJELENBQUFBLENBQU0sVUFBQSxDQUFXLFlBQWFDLENBQUFBLENBQUUsVUFBVSxDQUFBLENBQ2xFLE1BQUEsQ0FBTyxvQkFBQSxDQUFzQkQsQ0FBQUEsQ0FBTSxlQUFlLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxjQUFjLENBQUEsQ0FDL0UsTUFBQSxDQUFPLG1CQUFBLENBQXFCRCxFQUFNLGNBQUEsQ0FBZSxXQUFBLENBQWFDLENBQUFBLENBQUUsY0FBYyxDQUFBLENBQzlFLE1BQUEsQ0FBTyw0QkFBNkJELENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsYUFBYSxFQUFFLENBQUEsQ0FDekYsTUFBQSxDQUFPLE1BQU9FLENBQUFBLENBQWdCQyxDQUFBQSxHQUFTLENBQ3RDLEdBQUksQ0FDRixNQUFNTCxDQUFBQSxDQUFRLEdBQUEsQ0FBSUosRUFBQUEsQ0FBZ0JRLENBQU0sQ0FBQSxDQUFHLENBQ3pDLEtBQUEsQ0FBTzFCLEVBQUFBLENBQU1wRSxDQUFBQSxDQUFhNEYsQ0FBQUEsQ0FBRSxLQUFLLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxLQUFLLENBQUEsQ0FDN0MsTUFBQSxDQUFRM0IsRUFBQUEsQ0FBTXBFLEVBQWE0RixDQUFBQSxDQUFFLE1BQU0sQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLE1BQU0sQ0FBQSxDQUNoRCxJQUFLM0IsRUFBQUEsQ0FBTXBFLENBQUFBLENBQWE0RixDQUFBQSxDQUFFLEdBQUcsQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUN2QyxRQUFBLENBQVUzQixFQUFBQSxDQUFNcEUsQ0FBQUEsQ0FBYTRGLENBQUFBLENBQUUsUUFBUSxFQUFFRyxDQUFBQSxDQUFLLFFBQVEsQ0FBQSxDQUN0RCxRQUFBLENBQVUzRixFQUFBQSxDQUFXRCxFQUFXLEVBQUU0RixDQUFBQSxDQUFLLE9BQU8sRUFDOUMsU0FBQSxDQUFXQSxDQUFBQSxDQUFLLFdBQWFILENBQUFBLENBQUUsU0FBQSxDQUMvQixhQUFBLENBQWVHLENBQUFBLENBQUssYUFBQSxFQUFpQkgsQ0FBQUEsQ0FBRSxjQUN2QyxhQUFBLENBQWVHLENBQUFBLENBQUssYUFBQSxFQUFpQkgsQ0FBQUEsQ0FBRSxhQUFBLENBQ3ZDLFVBQUEsQ0FBWUcsRUFBSyxVQUFBLEVBQWNILENBQUFBLENBQUUsVUFBQSxDQUNqQyxjQUFBLENBQWdCRyxDQUFBQSxDQUFLLGNBQUEsRUFBa0JILEVBQUUsY0FBQSxDQUN6QyxjQUFBLENBQWdCRyxDQUFBQSxDQUFLLGNBQUEsRUFBa0JILENBQUFBLENBQUUsY0FBQSxDQUN6QyxjQUFleEIsRUFBQUEsQ0FBTXBFLENBQUFBLENBQWE0RixDQUFBQSxDQUFFLGFBQWEsQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLGFBQWEsQ0FBQSxDQUNyRSxXQUFBLENBQWEzRixFQUFBQSxDQUFXSixDQUFXLENBQUEsQ0FBRStGLENBQUFBLENBQUssV0FBVyxDQUN2RCxDQUFDLEVBQ0gsQ0FBQSxNQUFTQyxDQUFBQSxDQUFHLENBQ1Z2QyxFQUFPLEtBQUEsQ0FBTXVDLENBQUMsRUFDaEIsQ0FDRixDQUFDLEVBQ0gsTUFBTUgsaUJBQUFBLENBQVEsVUFBQSxDQUFXcEIsRUFBQUEsRUFBTyxFQUNsQyxDQ1pPLElBQU13QixFQUFBQSxDQUFOLEtBQWdCLENBQ3JCLFlBQUEsQ0FBYXRDLENBQUFBLENBQWVoQixDQUFBQSxDQUFpQixDQUMzQyxJQUFBLENBQUssS0FBSyxDQUFFLElBQUEsQ0FBTSxTQUFBLENBQW9CLEtBQUEsQ0FBQWdCLENBQUFBLENBQU8sT0FBQSxDQUFBaEIsQ0FBUSxDQUFDLEVBQ3hELENBRUEsYUFBQSxDQUFjTixDQUFBQSxDQUFxQixDQUNqQyxLQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBTSxVQUFBLENBQXFCLEtBQUEsQ0FBQUEsQ0FBTSxDQUFDLEVBQ2hELENBRUEsVUFBQSxDQUFXSSxDQUFBQSxDQUE4QixDQUN2QyxPQUFPLEtBQUssSUFBQSxDQUFLLENBQUUsS0FBTSxPQUFBLENBQWtCLEtBQUEsQ0FBQUEsQ0FBTSxDQUFDLENBQ3BELENBRUEsU0FBQSxDQUFVeUQsQ0FBQUEsQ0FBd0MsQ0FDaEQsT0FBTyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUUsSUFBQSxDQUFNLE1BQUEsQ0FBaUIsT0FBQSxDQUFBQSxDQUFRLENBQUMsQ0FDckQsQ0FFUSxJQUFBLENBQUt4RSxDQUFBQSxDQUE0QixDQUN2QyxPQUFPLElBQUksT0FBQSxDQUFTbUIsQ0FBQUEsRUFBWSxDQUM5QixHQUFJLENBQUMsUUFBUSxJQUFBLENBQ1gsT0FBT0EsQ0FBQUEsRUFBUSxDQUVqQixPQUFBLENBQVEsSUFBQSxDQUFLbkIsRUFBSyxJQUFNbUIsQ0FBQUEsRUFBUyxFQUNuQyxDQUFDLENBQ0gsQ0FDRixDQUFBLENDbEZPLFNBQVNzRCxHQUFNQyxDQUFBQSxDQUFZLENBQ2hDLE9BQU8sSUFBSSxPQUFBLENBQWV2RCxHQUFZLFVBQUEsQ0FBV0EsQ0FBQUEsQ0FBU3VELENBQUUsQ0FBQyxDQUMvRCxDQUVPLFNBQVNDLEVBQUFBLENBQWVDLENBQUFBLENBQWVGLENBQUFBLENBQVlHLENBQUFBLENBQTJCLENBQ25GLE9BQU8sSUFBSSxPQUFBLENBQVEsQ0FBQzFELENBQUFBLENBQVNDLENBQUFBLEdBQVcsQ0FDdEMsSUFBTTBELEVBQVEsVUFBQSxDQUFXLElBQU0xRCxDQUFBQSxDQUFPLElBQUksS0FBQSxDQUFNLENBQUEsRUFBR3lELENBQUssQ0FBQSxpQkFBQSxFQUFvQkgsQ0FBRSxDQUFBLEVBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBR0EsQ0FBRSxFQUN4RkUsQ0FBQUEsQ0FBRSxJQUFBLENBQUt6RCxDQUFBQSxDQUFTQyxDQUFNLENBQUEsQ0FBRSxPQUFBLENBQVEsSUFBTSxZQUFBLENBQWEwRCxDQUFLLENBQUMsRUFDM0QsQ0FBQyxDQUNILENBR08sU0FBU0MsRUFBQUEsQ0FBYUgsRUFBZWxELENBQUFBLENBQWtDLENBQzVFLE9BQUtBLENBQUFBLENBR0UsSUFBSSxPQUFBLENBQVcsQ0FBQ1AsQ0FBQUEsQ0FBU0MsQ0FBQUEsR0FBVyxDQUN6QyxJQUFNNEQsQ0FBQUEsQ0FBVSxJQUFNNUQsQ0FBQUEsQ0FBT00sQ0FBQUEsQ0FBTyxNQUFNLEVBQzFDQSxDQUFBQSxDQUFPLGdCQUFBLENBQWlCLE9BQUEsQ0FBU3NELENBQUFBLENBQVMsQ0FBRSxJQUFBLENBQU0sSUFBSyxDQUFDLENBQUEsQ0FDeERKLENBQUFBLENBQUUsSUFBQSxDQUFLekQsQ0FBQUEsQ0FBU0MsQ0FBTSxFQUFFLE9BQUEsQ0FBUSxJQUFNTSxDQUFBQSxDQUFPLG1CQUFBLENBQW9CLE9BQUEsQ0FBU3NELENBQU8sQ0FBQyxFQUNwRixDQUFDLENBQUEsQ0FOUUosQ0FPWCxDQUdPLFNBQVNLLEdBQVdDLENBQUFBLENBQXNFUixDQUFBQSxDQUFZLENBQzNHLElBQUlTLENBQUFBLENBQ0FDLENBQUFBLENBQVMsTUFDYixlQUFlQyxDQUFBQSxDQUFLQyxFQUFlLENBQ2pDLElBQU1DLEVBQU8sTUFBTUwsQ0FBQUEsQ0FBU0ksQ0FBSyxDQUFBLENBQzdCRixDQUFBQSxHQUdKRCxDQUFBQSxDQUFRLFdBQVcsSUFBTUUsQ0FBQUEsQ0FBS0MsQ0FBQUEsQ0FBUSxDQUFDLENBQUEsQ0FBR0MsQ0FBQUEsRUFBUWIsQ0FBRSxDQUFBLEVBQ3RELENBQ0EsT0FBQVMsQ0FBQUEsQ0FBUSxVQUFBLENBQVcsSUFBTUUsRUFBSyxDQUFDLENBQUEsQ0FBR1gsQ0FBRSxDQUFBLENBQzdCLElBQU0sQ0FDWFUsRUFBUyxJQUFBLENBQ1QsWUFBQSxDQUFhRCxDQUFLLEVBQ3BCLENBQ0YsQ0NwQ0EsSUFBTUssRUFBQUEsQ0FBaUIsR0FBQSxDQUVoQixTQUFTQyxFQUFBQSxDQUFLQyxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQkMsRUFBbUMsQ0FDckYsT0FBT2pCLEVBQUFBLENBQVllLENBQUFBLENBQUksV0FBQSxDQUFZQyxDQUFBQSxDQUFRQyxDQUFNLENBQUEsQ0FBR0osRUFBQUEsQ0FBZ0IsT0FBT0csQ0FBTSxDQUFBLENBQUUsQ0FDckYsQ0FFTyxTQUFTRSxFQUFBQSxDQUFPSCxDQUFBQSxDQUFlSSxDQUFBQSxDQUFzQyxDQUMxRSxPQUFPbkIsRUFBQUEsQ0FBWWMsRUFBQUEsQ0FBS0MsQ0FBQUEsQ0FBSyxrQkFBQSxDQUFvQixDQUFFLFVBQUEsQ0FBQUksQ0FBVyxDQUFDLENBQUEsQ0FBR04sRUFBQUEsQ0FBZ0IsUUFBUSxDQUM1RixDQUVPLFNBQVNPLEVBQUFBLENBQW1CTCxDQUFBQSxDQUFlTSxDQUFBQSxDQUErQixDQUMvRSxPQUFPLElBQUksUUFBUSxDQUFDN0UsQ0FBQUEsQ0FBU0MsQ0FBQUEsR0FBVyxDQUN0QyxJQUFNNkUsQ0FBQUEsQ0FBVSxXQUFXLElBQU0sQ0FDL0JQLENBQUFBLENBQUksR0FBQSxDQUFJLFNBQUEsQ0FBV1EsQ0FBTyxFQUMxQjlFLENBQUFBLENBQU8sSUFBSSxLQUFBLENBQU0sQ0FBQSxtQ0FBQSxFQUFzQ29FLEVBQWMsQ0FBQSxFQUFBLENBQUksQ0FBQyxFQUM1RSxDQUFBLENBQUdBLEVBQWMsQ0FBQSxDQUVYVSxDQUFBQSxDQUFVLENBQUNDLENBQUFBLENBQW1CUixDQUFBQSxHQUFtQixDQUNqREEsQ0FBQUEsR0FBVyxvQ0FBQSxHQUNiLFlBQUEsQ0FBYU0sQ0FBTyxDQUFBLENBQ3BCUCxDQUFBQSxDQUFJLEdBQUEsQ0FBSSxTQUFBLENBQVdRLENBQU8sQ0FBQSxDQUMxQi9FLEdBQVEsRUFFWixDQUFBLENBQ0F1RSxDQUFBQSxDQUFJLEVBQUEsQ0FBRyxTQUFBLENBQVdRLENBQU8sRUFFekJULEVBQUFBLENBQUtDLENBQUFBLENBQUssZ0NBQUEsQ0FBa0MsQ0FDMUMsTUFBQSxDQUFRLFNBQUEsQ0FDUixPQUFBTSxDQUNGLENBQUMsQ0FBQSxDQUFFLEtBQUEsQ0FBTzFCLENBQUFBLEVBQU0sQ0FDZCxhQUFhMkIsQ0FBTyxDQUFBLENBQ3BCUCxDQUFBQSxDQUFJLEdBQUEsQ0FBSSxTQUFBLENBQVdRLENBQU8sRUFDMUI5RSxDQUFBQSxDQUFPa0QsQ0FBQyxFQUNWLENBQUMsRUFDSCxDQUFDLENBQ0gsQ0FFQSxlQUFzQjhCLEVBQUFBLENBQWlCVixDQUFBQSxDQUE4QixDQUNuRSxNQUFNRCxHQUFLQyxDQUFBQSxDQUFLLGdDQUFBLENBQWtDLENBQUUsTUFBQSxDQUFRLE9BQVEsQ0FBQyxFQUN2RSxDQUVBLGVBQXNCVyxFQUFBQSxDQUFlWCxDQUFBQSxDQUFlWSxDQUFBQSxDQUFZLENBQzlELE1BQU1iLEVBQUFBLENBQUtDLENBQUFBLENBQUssb0NBQUEsQ0FBc0MsQ0FDcEQsR0FBR1ksQ0FBQUEsQ0FDSCxrQkFBbUIsQ0FBQSxDQUNuQixNQUFBLENBQVEsS0FDVixDQUFDLEVBQ0gsQ0M5Q08sSUFBTUMsRUFBQUEsQ0FBMEIsRUFBQSxDQUVoQyxJQUFNQyxFQUFBQSxDQUFxQixZQUFBLENBRTNCLFNBQVNDLEdBQWVDLENBQUFBLENBQW1CSixDQUFBQSxDQUFvQixDQUNwRSxHQUFNLENBQUUsS0FBQSxDQUFBSyxFQUFPLE1BQUEsQ0FBQUMsQ0FBTyxDQUFBLENBQUlOLENBQUFBLENBQzFCLE9BQU8sQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx3QkFBQSxFQU1pQkssQ0FBSyxDQUFBLFlBQUEsRUFBZUMsQ0FBQUEsQ0FBUyxDQUFDLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQUEsRUFLekNELENBQUssQ0FBQTtBQUFBLGNBQUEsRUFDSkMsQ0FBTSxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQUEsRUFNVEEsQ0FBTSxDQUFBO0FBQUE7QUFBQSxhQUFBLEVBRUpELENBQUssQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMkJBQUEsRUFRU0QsQ0FBUyxDQUFBO0FBQUEsNEJBQUEsRUFDUkMsQ0FBSyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBQUEsRUFJYkEsQ0FBSyxDQUFBO0FBQUEsMkJBQUEsRUFDRUosRUFBdUIsQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSwwQkFBQSxFQStCeEJDLEVBQWtCLENBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQSxDQThCOUMsQ0FFTyxTQUFTSyxFQUFBQSxDQUFZQyxDQUFBQSxDQUFnQlIsRUFBZ0MsQ0FDMUUsR0FBTSxDQUFFLEtBQUEsQ0FBQUssQ0FBQUEsQ0FBTyxPQUFBQyxDQUFPLENBQUEsQ0FBSU4sRUFDMUIsR0FBSUssQ0FBQUEsQ0FBUUosSUFBMkJLLENBQUFBLENBQVMsQ0FBQSxDQUM5QyxPQUdGLElBQU1HLENBQUFBLENBQVlILEVBQVMsQ0FBQSxDQUV2QkksQ0FBQUEsQ0FBWSxFQUNoQixJQUFBLElBQVNDLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSVYsRUFBQUEsQ0FBeUJVLElBQUssQ0FDaEQsSUFBTUMsR0FBWUgsQ0FBQUEsQ0FBWUosQ0FBQUEsQ0FBUU0sR0FBSyxDQUFBLENBRXJDRSxDQUFBQSxDQUFBQSxDQURJTCxFQUFPSSxDQUFRLENBQUEsRUFBSyxDQUFBLEVBQ2QsR0FBQSxDQUFNLENBQUEsQ0FBSSxDQUFBLENBQzFCRixFQUFhQSxDQUFBQSxFQUFhLENBQUEsQ0FBS0csRUFDakMsQ0FJQSxHQUZBSCxFQUFZQSxDQUFBQSxHQUFjLENBQUEsQ0FFdEIsR0FBQyxNQUFBLENBQU8sUUFBQSxDQUFTQSxDQUFTLENBQUEsRUFBS0EsQ0FBQUEsQ0FBWSxHQUFLQSxDQUFBQSxDQUFZLEdBQUEsQ0FBQSxDQUloRSxPQUFPQSxDQUNULENBRU8sU0FBU0ksRUFBQUEsQ0FBVzFCLENBQUFBLENBQWUsQ0FDeEMsT0FBT0csRUFBQUEsQ0FBT0gsRUFBSyx1QkFBdUIsQ0FDNUMsQ0FPQSxlQUFzQjJCLEVBQUFBLENBQVVDLEVBQWlCQyxDQUFBQSxDQUFpQyxDQUNoRixNQUFNMUIsRUFBQUEsQ0FBT3lCLENBQUFBLENBQUcsU0FBVSxDQUFBLG1CQUFBLEVBQXNCQyxDQUFRLEdBQUcsRUFDN0QsQ0FHQSxlQUFzQkMsRUFBQUEsQ0FBY0YsQ0FBQUEsQ0FBZ0MsQ0FDbEUsSUFBTUcsQ0FBQUEsQ0FBVSxJQUFJLFFBQVNDLENBQUFBLEVBQU1KLENBQUFBLENBQUcsSUFBSSxJQUFBLENBQUtkLEVBQUFBLENBQW9Ca0IsQ0FBQyxDQUFDLENBQUEsQ0FDckUsTUFBTS9DLEVBQUFBLENBQVk4QyxDQUFBQSxDQUFTLElBQU8sWUFBWSxFQUNoRCxDQ2pKQSxJQUFNRSxFQUFBQSxDQUFhLE1BQ2JDLEVBQUFBLENBQWUsV0FBQSxDQUdmQyxHQUF3QixDQUM1QixRQUFBLENBQVUsS0FDVixNQUFBLENBQVEsSUFBQSxDQUNSLFVBQVcsSUFBQSxDQUNYLG1CQUFBLENBQXFCLEtBQ3JCLGVBQUEsQ0FBaUIsSUFBQSxDQUNqQixZQUFhLElBQUEsQ0FDYixNQUFBLENBQVEsS0FDUixTQUFBLENBQVcsSUFDYixFQUdBQyxpQkFBQUEsQ0FBUywyQkFBQSxDQUE0QixDQUNuQyxDQUFFLE1BQUEsQ0FBUUgsRUFBQUEsQ0FBWSxXQUFZRSxFQUFzQixDQUFBLENBQ3hELENBQUUsTUFBQSxDQUFRRCxFQUFBQSxDQUFjLFdBQVlDLEVBQXNCLENBQzVELENBQUMsQ0FBQSxDQUdNLFNBQVNFLElBQXlCLENBQ3ZDRCxpQkFBQUEsQ0FBUyxPQUFPSCxFQUFBQSxDQUFhSyxDQUFBQSxFQUFRLENBQ25DLElBQU1DLENBQUFBLENBQU0sSUFBSSxHQUFBLENBQUlELENBQUFBLENBQUksR0FBRyxDQUFBLENBQ3JCRSxDQUFBQSxDQUFNRCxFQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksS0FBSyxDQUFBLEVBQUssRUFBQSxDQUNyQ3RCLEVBQVEsUUFBQSxDQUFTc0IsQ0FBQUEsQ0FBSSxhQUFhLEdBQUEsQ0FBSSxHQUFHLEdBQUssR0FBQSxDQUFLLEVBQUUsRUFDckRyQixDQUFBQSxDQUFTLFFBQUEsQ0FBU3FCLENBQUFBLENBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxHQUFHLEdBQUssR0FBQSxDQUFLLEVBQUUsRUFDdERFLENBQUFBLENBQU8xQixFQUFBQSxDQUFleUIsRUFBSyxDQUFFLEtBQUEsQ0FBQXZCLEVBQU8sTUFBQSxDQUFBQyxDQUFPLENBQUMsQ0FBQSxDQUNsRCxPQUFPLElBQUksUUFBQSxDQUFTdUIsQ0FBQUEsQ0FBTSxDQUFFLE9BQUEsQ0FBUyxDQUFFLGVBQWdCLFdBQVksQ0FBRSxDQUFDLENBQ3hFLENBQUMsRUFDSCxDQUVPLFNBQVNDLEdBQWVGLENBQUFBLENBQWE1QixDQUFBQSxDQUFvQixDQUM5RCxJQUFNMkIsQ0FBQUEsQ0FBTSxJQUFJLEdBQUEsQ0FBSSxDQUFBLEVBQUdOLEVBQVUsQ0FBQSxRQUFBLENBQVUsQ0FBQSxDQUMzQyxPQUFBTSxDQUFBQSxDQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksS0FBQSxDQUFPQyxDQUFBQSxDQUFJLE9BQUEsQ0FBUSxVQUFXLFVBQVUsQ0FBQyxFQUM5REQsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsSUFBSSxHQUFBLENBQUssTUFBQSxDQUFPM0IsRUFBSyxLQUFLLENBQUMsRUFDNUMyQixDQUFBQSxDQUFJLFlBQUEsQ0FBYSxJQUFJLEdBQUEsQ0FBSyxNQUFBLENBQU8zQixFQUFLLE1BQU0sQ0FBQyxFQUN0QzJCLENBQUFBLENBQUksUUFBQSxFQUNiLENDdENPLFNBQVNJLEdBQWFDLENBQUFBLENBQWMzQixDQUFBQSxDQUFlQyxFQUF5QixDQUNqRixJQUFNMkIsRUFBUSxJQUFBLENBQUssR0FBQSxDQUFJLEVBQUcsSUFBQSxDQUFLLEtBQUEsQ0FBTTVCLEVBQVEsRUFBSSxDQUFDLEVBQzVDNkIsQ0FBQUEsQ0FBUSxJQUFBLENBQUssR0FBQSxDQUFJLENBQUEsQ0FBRyxJQUFBLENBQUssS0FBQSxDQUFNNUIsRUFBUyxFQUFJLENBQUMsRUFDL0M2QixDQUFBQSxDQUFPLEdBQUEsQ0FDUEMsRUFBTyxDQUFBLENBQ1BDLENBQUFBLENBQU8sSUFDUEMsQ0FBQUEsQ0FBTyxDQUFBLENBQ1BDLEVBQU8sR0FBQSxDQUNQQyxDQUFBQSxDQUFPLEVBQ1gsSUFBQSxJQUFTQyxDQUFBQSxDQUFJLEVBQUdBLENBQUFBLENBQUluQyxDQUFBQSxDQUFRbUMsR0FBS1AsQ0FBQUEsQ0FDL0IsSUFBQSxJQUFTakssRUFBSSxDQUFBLENBQUdBLENBQUFBLENBQUlvSSxFQUFPcEksQ0FBQUEsRUFBS2dLLENBQUFBLENBQU8sQ0FDckMsSUFBTXRCLENBQUFBLENBQUFBLENBQUs4QixFQUFJcEMsQ0FBQUEsQ0FBUXBJLENBQUFBLEVBQUssRUFDdEJ5SyxDQUFBQSxDQUFJVixDQUFBQSxDQUFLLFVBQVVyQixDQUFDLENBQUEsQ0FDcEJnQyxFQUFJWCxDQUFBQSxDQUFLLFNBQUEsQ0FBVXJCLENBQUFBLENBQUksQ0FBQyxDQUFBLENBQ3hCUyxDQUFBQSxDQUFJWSxFQUFLLFNBQUEsQ0FBVXJCLENBQUFBLENBQUksQ0FBQyxDQUFBLENBQzlCd0IsQ0FBQUEsQ0FBTyxLQUFLLEdBQUEsQ0FBSUEsQ0FBQUEsQ0FBTWYsQ0FBQyxDQUFBLENBQ3ZCZ0IsQ0FBQUEsQ0FBTyxLQUFLLEdBQUEsQ0FBSUEsQ0FBQUEsQ0FBTWhCLENBQUMsQ0FBQSxDQUN2QmlCLENBQUFBLENBQU8sS0FBSyxHQUFBLENBQUlBLENBQUFBLENBQU1NLENBQUMsQ0FBQSxDQUN2QkwsQ0FBQUEsQ0FBTyxJQUFBLENBQUssSUFBSUEsQ0FBQUEsQ0FBTUssQ0FBQyxFQUN2QkosQ0FBQUEsQ0FBTyxJQUFBLENBQUssSUFBSUEsQ0FBQUEsQ0FBTUcsQ0FBQyxFQUN2QkYsQ0FBQUEsQ0FBTyxJQUFBLENBQUssSUFBSUEsQ0FBQUEsQ0FBTUUsQ0FBQyxFQUN6QixDQUVGLE9BQU8sS0FBSyxHQUFBLENBQUlOLENBQUFBLENBQU9ELENBQUFBLENBQU1HLENBQUFBLENBQU9ELENBQUFBLENBQU1HLENBQUFBLENBQU9ELENBQUksQ0FBQSxFQUFLLENBQzVELENBRU8sSUFBTUssRUFBQUEsQ0FBTixLQUFzQixDQUNWLE1BQUEsQ0FDQSxRQUNULE1BQUEsQ0FBUyxDQUFBLENBQ1QsT0FBUyxDQUFBLENBRWpCLFdBQUEsQ0FBWXZDLEVBQWVDLENBQUFBLENBQWdCLENBQ3pDLEtBQUssTUFBQSxDQUFTRCxDQUFBQSxDQUNkLEtBQUssT0FBQSxDQUFVQyxFQUNqQixDQUVBLE1BQUEsQ0FBT3VDLENBQUFBLENBQXFCLENBQzFCLElBQUEsQ0FBSyxNQUFBLEVBQUEsQ0FDRGQsR0FBYWMsQ0FBQUEsQ0FBTyxJQUFBLENBQUssT0FBUSxJQUFBLENBQUssT0FBTyxHQUMvQyxJQUFBLENBQUssTUFBQSxHQUVULENBR0EsUUFBQSxFQUFtQixDQUNqQixPQUFPLElBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQSxDQUFJLElBQUEsQ0FBSyxNQUFBLENBQVMsSUFBQSxDQUFLLE9BQVMsQ0FDdkQsQ0FDRixFQy9DTyxJQUFNQyxHQUFOLEtBQXlCLENBTTlCLFlBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixvQkFBQUEsRUFBeUIsQ0FBekIsZUFMYixPQUFBLENBQVUsQ0FBQSxDQUNWLE9BQXVCLEVBQUMsQ0FDeEIsU0FBVyxJQUFJLE9BQUEsQ0FDZixTQUlSLElBQUksTUFBQSxFQUFpQixDQUNuQixPQUFPLElBQUEsQ0FBSyxPQUNkLENBRUEsSUFBSSxPQUFBLEVBQWtCLENBQ3BCLE9BQU8sSUFBQSxDQUFLLE9BQU8sTUFDckIsQ0FFQSxJQUFJLEtBQUEsRUFBZ0IsQ0FDbEIsT0FBTyxDQUFBLFFBQUEsRUFBVyxJQUFBLENBQUssTUFBTSxDQUFBLFdBQUEsRUFBYyxJQUFBLENBQUssT0FBTyxDQUFBLENBQ3pELENBRUEsTUFBTSxRQUFBLENBQVkxRyxDQUFBQSxDQUFzQmpCLEVBQWtDLENBQ3hFLE9BQUFBLEdBQVEsY0FBQSxFQUFlLENBRW5CQSxHQUFVLENBQUMsSUFBQSxDQUFLLFNBQVMsR0FBQSxDQUFJQSxDQUFNLElBQ3JDLElBQUEsQ0FBSyxRQUFBLENBQVMsSUFBSUEsQ0FBTSxDQUFBLENBQ3hCQSxFQUFPLGdCQUFBLENBQWlCLE9BQUEsQ0FBUyxJQUFNLElBQUEsQ0FBSyxLQUFBLENBQU1BLENBQU0sQ0FBQSxDQUFHLENBQUUsSUFBQSxDQUFNLElBQUssQ0FBQyxDQUFBLENBQUEsQ0FHcEUsSUFBSSxPQUFBLENBQVcsQ0FBQ1AsRUFBU0MsQ0FBQUEsR0FBVyxDQUN6QyxLQUFLLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FDZixHQUFBLENBQUssSUFBTSxDQUNULEdBQUlNLENBQUFBLEVBQVEsUUFBUyxDQUNuQk4sQ0FBQUEsQ0FBT00sRUFBTyxNQUFNLENBQUEsQ0FDcEIsS0FBSyxJQUFBLEVBQUssQ0FDVixNQUNGLENBQ0EsSUFBQSxDQUFLLFVBQ0xpQixDQUFBQSxFQUFHLENBQ0EsS0FBTTJHLENBQUFBLEVBQU0sQ0FDWCxLQUFLLE9BQUEsRUFBQSxDQUNMbkksQ0FBQUEsQ0FBUW1JLENBQUMsQ0FBQSxDQUNULElBQUEsQ0FBSyxPQUNQLENBQUMsQ0FBQSxDQUNBLEtBQUEsQ0FBT2hGLENBQUFBLEVBQU0sQ0FDWixLQUFLLE9BQUEsRUFBQSxDQUNMbEQsQ0FBQUEsQ0FBT2tELENBQUMsQ0FBQSxDQUNSLElBQUEsQ0FBSyxPQUNQLENBQUMsRUFDTCxDQUFBLENBQ0EsTUFBQSxDQUFBbEQsRUFDQSxNQUFBLENBQUFNLENBQ0YsQ0FBQyxDQUFBLENBQ0QsSUFBQSxDQUFLLE9BQ1AsQ0FBQyxDQUNILENBRUEsTUFBTSxPQUF1QixDQUMzQixHQUFJLE9BQUssT0FBQSxHQUFZLENBQUEsRUFBSyxLQUFLLE9BQUEsR0FBWSxDQUFBLENBQUEsQ0FHM0MsT0FBTyxJQUFJLE9BQUEsQ0FBU2dHLEdBQU8sSUFBQSxDQUFLLFFBQUEsQ0FBV0EsQ0FBRSxDQUMvQyxDQUVRLE1BQU1oRyxDQUFBQSxDQUFxQixDQUNqQyxJQUFNNkgsQ0FBQUEsQ0FBcUIsRUFBQyxDQUM1QixRQUFXQyxDQUFBQSxJQUFTLElBQUEsQ0FBSyxPQUNuQkEsQ0FBQUEsQ0FBTSxNQUFBLEdBQVc5SCxFQUNuQjhILENBQUFBLENBQU0sTUFBQSxDQUFPOUgsRUFBTyxNQUFNLENBQUEsQ0FFMUI2SCxFQUFLLElBQUEsQ0FBS0MsQ0FBSyxFQUduQixJQUFBLENBQUssTUFBQSxDQUFTRCxFQUNkLElBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FFUSxJQUFBLEVBQU8sQ0FDYixHQUFJLElBQUEsQ0FBSyxVQUFZLENBQUEsRUFBSyxJQUFBLENBQUssVUFBWSxDQUFBLENBQUcsQ0FDNUMsS0FBSyxRQUFBLElBQVcsQ0FDaEIsS0FBSyxRQUFBLENBQVcsTUFBQSxDQUNoQixNQUNGLENBQ0ksSUFBQSxDQUFLLFFBQVUsSUFBQSxDQUFLLGNBQUEsRUFDdEIsSUFBQSxDQUFLLE1BQUEsQ0FBTyxLQUFBLEVBQU0sRUFBRyxNQUV6QixDQUNGLEVDdkVPLElBQU1FLEVBQUFBLENBQXdCLFlBQUEsQ0FlckMsZUFBc0JDLENBQUFBLENBQWFyRixDQUFBQSxDQUF1QlEsRUFBc0MsQ0FJOUYsSUFBQThFLEVBQUEsRUFBQSxDQUFBLEdBQUEsQ0FIQSxJQUFNQyxFQUFNLElBQUlDLG1CQUFBQSxDQUNoQkQsRUFBSSxhQUFBLENBQWN2RixDQUFBQSxDQUFLLEtBQUssQ0FBQSxDQUU1QixJQUFNeUYsRUFBUUMsQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQSxJQUFJLGVBQUEsQ0FBQSxDQUNsQkcsQ0FBQUEsQ0FBTSxHQUFBLENBQUlGLENBQUcsQ0FBQSxDQUNiQSxDQUFBQSxDQUFJLFFBQVV2RixDQUFBQSxDQUFLLEtBQUEsQ0FBTSxHQUN6QnVGLENBQUFBLENBQUksS0FBQSxDQUFRdkYsRUFBSyxLQUFBLENBQ2pCdUYsQ0FBQUEsQ0FBSSxPQUFTdkYsQ0FBQUEsQ0FBSyxNQUFBLENBQ2xCdUYsRUFBSSxXQUFBLENBQWN2RixDQUFBQSxDQUFLLFlBQ3ZCdUYsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsSUFBSUksZUFBQUEsQ0FBUyxDQUFBLENBQUczRixDQUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUN2Q3VGLENBQUFBLENBQUksVUFBWSxJQUFJSSxlQUFBQSxDQUFTM0YsRUFBSyxHQUFBLENBQUssQ0FBQyxFQUN4Q3VGLENBQUFBLENBQUksT0FBQSxDQUFVdkYsRUFBSyxHQUFBLENBQU0sQ0FBQSxDQUN6QnVGLEVBQUksT0FBQSxDQUFVLE1BQUEsQ0FBT3ZGLEVBQUssT0FBTyxDQUFBLENBQ2pDdUYsRUFBSSxRQUFBLENBQVNLLHFDQUEyQixFQUNwQzVGLENBQUFBLENBQUssUUFBQSxHQUNQdUYsRUFBSSxRQUFBLENBQVd2RixDQUFBQSxDQUFLLFVBRWxCQSxDQUFBQSxDQUFLLFVBQUEsR0FBZSxTQUN0QnVGLENBQUFBLENBQUksVUFBQSxDQUFhdkYsRUFBSyxVQUFBLENBQUEsQ0FFcEJBLENBQUFBLENBQUssY0FDUHVGLENBQUFBLENBQUksV0FBQSxDQUFjdkYsRUFBSyxXQUFBLENBQUEsQ0FFekIsSUFBQSxHQUFXLENBQUM2RixDQUFBQSxDQUFHWixDQUFDLENBQUEsR0FBSyxPQUFPLE9BQUEsQ0FBUWpGLENBQUFBLENBQUssU0FBVyxFQUFFLEVBQ3BEdUYsQ0FBQUEsQ0FBSSxTQUFBLENBQVVNLEVBQUdaLENBQUMsQ0FBQSxDQUVwQmEsbUJBQVksWUFBQSxDQUFhLE1BQU1QLEVBQUksS0FBQSxDQUFNdkYsQ0FBQUEsQ0FBSyxNQUFPLElBQUksQ0FBQSxDQUFHUSxDQUFLLENBQUEsQ0FDakVpRixDQUFBQSxDQUFNLE1BQUssQ0FDWCxPQUFPRixRQXpCUHpELENBQUFBLENBQUEsQ0FBQSxJQUFBaUUsRUFBQWpFLENBQUFBLENBQUFrRSxDQUFBQSxDQUFBLGNBQUFDLENBQUFBLENBQUFYLENBQUFBLENBQUFTLEVBQUFDLENBQUFBLEVBQUFBLENBMEJGLENBRU8sU0FBU0UsRUFBQUEsQ0FBVTVELENBQUFBLENBQWVDLEVBQWdCNEQsQ0FBQUEsQ0FBOEIsQ0FJckYsSUFBQWIsQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUhBLElBQU1SLEVBQVEsSUFBSXNCLFlBQUFBLENBQ2xCdEIsRUFBTSxLQUFBLEVBQU0sQ0FFWixJQUFNVyxDQUFBQSxDQUFRQyxDQUFBQSxDQUFBSixFQUFBLElBQUksZUFBQSxDQUFBLENBQ2xCRyxFQUFNLEdBQUEsQ0FBSVgsQ0FBSyxFQUNmQSxDQUFBQSxDQUFNLE1BQUEsQ0FBU3FCLEVBQ2ZyQixDQUFBQSxDQUFNLEtBQUEsQ0FBUXhDLEVBQ2R3QyxDQUFBQSxDQUFNLE1BQUEsQ0FBU3ZDLEVBQ2Z1RCxrQkFBQUEsQ0FBWSxZQUFBLENBQWFoQixFQUFNLFNBQUEsQ0FBVSxDQUFDLEVBQUcsaUJBQWlCLENBQUEsQ0FDOURXLEVBQU0sSUFBQSxFQUFLLENBQ1gsT0FBT1gsQ0FBQUEsQ0FBQUEsTUFQUGhELENBQUFBLENBQUEsS0FBQWlFLENBQUFBLENBQUFqRSxDQUFBQSxDQUFBa0UsRUFBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxDQUFBQSxDQUFBWCxDQUFBQSxDQUFBUyxDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQVFGLENBRU8sU0FBU0ssQ0FBQUEsRUFBcUIsQ0FDbkMsSUFBTUMsQ0FBQUEsQ0FBTSxJQUFJQyxjQUNoQixPQUFBRCxDQUFBQSxDQUFJLE9BQU0sQ0FDSEEsQ0FDVCxDQUVBLGVBQXNCRSxFQUFBQSxDQUFhakIsRUFBbUJlLENBQUFBLENBQWFHLENBQUFBLENBQWdCQyxFQUFtQyxDQUNwSCxPQUFhLENBQ1gsSUFBTXJELENBQUFBLENBQUksTUFBTWtDLENBQUFBLENBQUksYUFBQSxDQUFjZSxDQUFHLENBQUEsQ0FDckMsR0FBSWpELElBQU1zRCx3QkFBQUEsRUFBa0J0RCxDQUFBQSxHQUFNdUQsc0JBQ2hDLE1BRUYsR0FBSSxDQUNGZCxrQkFBQUEsQ0FBWSxZQUFBLENBQWF6QyxFQUFHLGVBQWUsQ0FBQSxDQUMzQ2lELEVBQUksV0FBQSxDQUFjRyxDQUFBQSxDQUFPLEtBQUEsQ0FDckJILENBQUFBLENBQUksUUFBQSxHQUFhLEVBQUEsR0FDbkJBLEVBQUksUUFBQSxDQUFXLEVBQUEsQ0FBQSxDQUVqQkEsRUFBSSxTQUFBLENBQVVmLENBQUFBLENBQUksU0FBVWtCLENBQUFBLENBQU8sUUFBUSxFQUMzQyxNQUFNQyxDQUFBQSxDQUFNLFlBQVlKLENBQUcsRUFDN0IsUUFBRSxDQUNBQSxDQUFBQSxDQUFJLFFBQ04sQ0FDRixDQUNGLENDMUZPLElBQU1PLEVBQU4sTUFBTUMsQ0FBaUMsQ0FDbkMsR0FBQSxDQUNBLEdBQUEsQ0FDQSxJQUNELElBQUEsQ0FDQSxJQUFBLENBRVIsYUFBYSxNQUFBLENBQU94RSxDQUFBQSxDQUFlQyxFQUFnQixDQUNqRCxJQUFNd0UsRUFBUUMsWUFBQUEsQ0FBTSxpQkFBQSxDQUFrQkMscUJBQWMsQ0FBQSxDQUNwRCxPQUFBQyxTQUFBQSxDQUFHSCxDQUFBQSxDQUFPLHlCQUF5QixDQUFBLENBQzVCLElBQUlELENBQUFBLENBQVd4RSxDQUFBQSxDQUFPQyxFQUFRd0UsQ0FBSyxDQUM1QyxDQUVRLFdBQUEsQ0FBWXpFLENBQUFBLENBQWVDLEVBQWdCNEUsQ0FBQUEsQ0FBWSxDQUM3RCxLQUFLLElBQUEsQ0FBT0EsQ0FBQUEsQ0FDWixLQUFLLEdBQUEsQ0FBTWpCLEVBQUFBLENBQVU1RCxFQUFPQyxDQUFBQSxDQUFRNkUsc0JBQWUsRUFDbkQsSUFBQSxDQUFLLEdBQUEsQ0FBTWxCLEdBQVU1RCxDQUFBQSxDQUFPQyxDQUFBQSxDQUFROEUsMEJBQW1CLENBQUEsQ0FDdkQsSUFBQSxDQUFLLElBQU1oQixDQUFBQSxHQUNiLENBT0EsTUFBTSxHQUFBLEVBQTZCLENBRWpDLElBQUFmLENBQUFBLENBQUEsV0FBTUcsQ0FBQUEsQ0FBUUMsQ0FBQUEsQ0FBQUosRUFBQSxJQUFJLGVBQUEsQ0FBQSxDQUNsQixJQUFNNkIsQ0FBQUEsQ0FBTSxJQUFJM0IsbUJBQUFBLENBQ2hCMkIsRUFBSSxhQUFBLENBQWMsSUFBQSxDQUFLLElBQUksQ0FBQSxDQUMzQjFCLENBQUFBLENBQU0sSUFBSTBCLENBQUcsQ0FBQSxDQUNickIsbUJBQVksWUFBQSxDQUFhLE1BQU1xQixFQUFJLEtBQUEsQ0FBTSxJQUFBLENBQUssSUFBSSxDQUFBLENBQUcsa0JBQWtCLEVBQ3ZFMUIsQ0FBQUEsQ0FBTSxJQUFBLEdBQ04sT0FBTzBCLENBQUFBLENBQUFBLE1BTlByRixFQUFBLENBQUEsSUFBQWlFLENBQUFBLENBQUFqRSxFQUFBa0UsQ0FBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxFQUFBWCxDQUFBQSxDQUFBUyxDQUFBQSxDQUFBQyxJQU9GLENBRUEsTUFBTSxVQUFVc0IsQ0FBQUEsQ0FBaUMsQ0FDL0MsSUFBQWhDLENBQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FBQSxJQUFNNkIsRUFBTXpCLENBQUFBLENBQUFKLENBQUFBLENBQUEsTUFBTSxJQUFBLENBQUssR0FBQSxFQUFJLENBQUEsQ0FDM0IsS0FBSyxHQUFBLENBQUksSUFBQSxDQUFPZ0MsRUFDaEJ4QixrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTXFCLENBQUFBLENBQUksVUFBQSxDQUFXLEtBQUssR0FBRyxDQUFBLENBQUcsdUJBQXVCLENBQUEsQ0FDaEYsSUFBQSxDQUFLLElBQUksS0FBQSxFQUFNLENBQ2ZyQixtQkFBWSxZQUFBLENBQWEsTUFBTXFCLENBQUFBLENBQUksWUFBQSxDQUFhLElBQUEsQ0FBSyxHQUFHLEVBQUcseUJBQXlCLENBQUEsQ0FDcEYsT0FBTyxJQUFBLENBQUssR0FBQSxDQUFBLE1BTFpyRixFQUFBLENBQUEsSUFBQWlFLENBQUFBLENBQUFqRSxFQUFBa0UsQ0FBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxFQUFBWCxDQUFBQSxDQUFBUyxDQUFBQSxDQUFBQyxJQU1GLENBRUEsSUFBSSxLQUFNLENBQ1IsR0FBSSxDQUFDLElBQUEsQ0FBSyxJQUFBLENBQU0sQ0FDZCxJQUFNdUIsQ0FBQUEsQ0FBTSxJQUFJQyw0QkFDVkMsQ0FBQUEsQ0FBTSxJQUFBLENBQUssSUFBSSxNQUFBLENBQ3JCRixDQUFBQSxDQUFJLFdBQ0YsSUFBQSxDQUFLLEdBQUEsQ0FBSSxNQUNULElBQUEsQ0FBSyxHQUFBLENBQUksT0FDVEUsQ0FBQUEsQ0FDQSxJQUFBLENBQUssSUFBSSxLQUFBLENBQ1QsSUFBQSxDQUFLLElBQUksTUFBQSxDQUNUSiwwQkFBQUEsQ0FDQUssbUJBQ0YsQ0FBQSxDQUNBLElBQUEsQ0FBSyxLQUFPSCxFQUNkLENBQ0EsT0FBTyxJQUFBLENBQUssSUFDZCxDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFVLENBQ3ZCLEtBQUssR0FBQSxDQUFJLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBRSxDQUN6QixJQUFBLENBQUssR0FBQSxDQUFJLE1BQUEsQ0FBTyxPQUFPLEdBQUUsQ0FDekIsSUFBQSxDQUFLLElBQUksTUFBQSxDQUFPLE9BQU8sR0FBRSxDQUN6QixJQUFBLENBQUssT0FBTyxNQUFBLENBQU8sT0FBTyxJQUM1QixDQUNGLEVDNURBLElBQU1JLEVBQUFBLENBQW1ELENBQUUsQ0FBQ0MsMkJBQWlCLEVBQUcsS0FBQSxDQUFPLENBQUNDLDRCQUFrQixFQUFHLE1BQU8sRUFXdkdDLEVBQUFBLENBQU4sTUFBTUMsQ0FBbUMsQ0FDdEMsSUFBQSxDQUNBLFFBQ0EsSUFBQSxDQUNBLFFBQUEsQ0FDQSxRQUNBLFVBQUEsQ0FDQSxZQUFBLENBQ0EsT0FDQSxPQUFBLENBQ0EsUUFBQSxDQUNBLE9BQUEsQ0FDQSxJQUFBLENBQU8sRUFBQSxDQUVQLFdBQUEsQ0FBWXhDLEVBQW1Ca0IsQ0FBQUEsQ0FBZ0J1QixDQUFBQSxDQUE4RCxDQUNuSCxJQUFBLENBQUssSUFBQSxDQUFPekMsRUFDWixJQUFBLENBQUssT0FBQSxDQUFVa0IsRUFDZixJQUFBLENBQUssUUFBQSxDQUFXbEIsRUFBSSxVQUFBLENBQ3BCLElBQUEsQ0FBSyxRQUFVeUMsQ0FBQUEsQ0FDZixJQUFBLENBQUssV0FBYXpDLENBQUFBLENBQUksU0FBQSxDQUN0QixLQUFLLElBQUEsQ0FBT2MsQ0FBQUEsR0FDWixJQUFBLENBQUssWUFBQSxDQUFlLElBQUlELFlBQUFBLENBQ3hCLElBQUEsQ0FBSyxhQUFhLEtBQUEsR0FDcEIsQ0FFQSxhQUFhLE1BQUEsQ0FBT3BHLEVBQWtELENBTXBFLElBQUFzRixFQUFBLEVBQUEsQ0FBQSxHQUFBLENBTEEsSUFBTXlCLEVBQVFDLFlBQUFBLENBQU0saUJBQUEsQ0FBa0JoSCxDQUFBQSxDQUFLLFNBQVMsQ0FBQSxDQUNwRCxHQUFJLENBQUMrRyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSx5QkFBQSxFQUE0Qi9HLEVBQUssU0FBUyxDQUFBLENBQUUsRUFHOUQsSUFBTXlGLENBQUFBLENBQVFDLEVBQUFKLENBQUFBLENBQUEsSUFBSSxpQkFDbEIsSUFBTUMsQ0FBQUEsQ0FBTSxJQUFJQyxtQkFBQUEsQ0FDaEJELENBQUFBLENBQUksY0FBY3dCLENBQUssQ0FBQSxDQUN2QnRCLEVBQU0sR0FBQSxDQUFJRixDQUFHLEVBQ2JBLENBQUFBLENBQUksT0FBQSxDQUFVd0IsRUFBTSxFQUFBLENBQ3BCeEIsQ0FBQUEsQ0FBSSxhQUFldkYsQ0FBQUEsQ0FBSyxZQUFBLENBQ3hCdUYsRUFBSSxVQUFBLENBQWF2RixDQUFBQSxDQUFLLGNBQ3RCdUYsQ0FBQUEsQ0FBSSxhQUFBLENBQWdCMEMsbUNBQ3BCMUMsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsSUFBSUksZUFBQUEsQ0FBUyxDQUFBLENBQUczRixDQUFBQSxDQUFLLGFBQWEsQ0FBQSxDQUNqRHVGLENBQUFBLENBQUksUUFBVSxNQUFBLENBQU92RixDQUFBQSxDQUFLLE9BQU8sQ0FBQSxDQUM3QkEsQ0FBQUEsQ0FBSyxjQUNQdUYsQ0FBQUEsQ0FBSSxRQUFBLENBQVNLLHFDQUEyQixDQUFBLENBRTFDRSxrQkFBQUEsQ0FBWSxhQUFhLE1BQU1QLENBQUFBLENBQUksTUFBTXdCLENBQUFBLENBQU8sSUFBSSxFQUFHLGdCQUFnQixDQUFBLENBQ3ZFLElBQU1OLENBQUFBLENBQVN6RyxDQUFBQSxDQUFLLE1BQU0sU0FBQSxDQUFVdUYsQ0FBRyxFQUN2Q0UsQ0FBQUEsQ0FBTSxJQUFBLEdBQ04sT0FBTyxJQUFJc0MsRUFBYXhDLENBQUFBLENBQUtrQixDQUFBQSxDQUFRekcsRUFBSyxZQUFZLENBQUEsQ0FBQSxNQWhCdEQ4QixFQUFBLENBQUEsSUFBQWlFLENBQUFBLENBQUFqRSxDQUFBQSxDQUFBa0UsQ0FBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxDQUFBQSxDQUFBWCxFQUFBUyxDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQWlCRixDQUVBLFlBQUEsQ0FBYWtDLENBQUFBLENBQTRCLENBSXZDLElBQUE1QyxDQUFBQSxDQUFBLE9BSEEsSUFBQSxDQUFLLE1BQUEsR0FBUyxPQUFPLE9BQU8sQ0FBQSxHQUM1QixJQUFBLENBQUssT0FBQSxDQUFVNEMsRUFFZixJQUFNekMsQ0FBQUEsQ0FBUUMsRUFBQUosQ0FBQUEsQ0FBQSxJQUFJLGlCQUNsQixJQUFNNkMsQ0FBQUEsQ0FBUSxJQUFJQyxrQkFBQUEsQ0FDbEJELENBQUFBLENBQU0sT0FBTSxDQUNaMUMsQ0FBQUEsQ0FBTSxJQUFJMEMsQ0FBSyxDQUFBLENBQ2YsSUFBTUUsQ0FBQUEsQ0FBVUMsYUFBQUEsQ0FBTyxVQUFVLFNBQVMsQ0FBQSxDQUMxQyxJQUFNQyxDQUFBQSxDQUFTSixDQUFBQSxDQUFNLFlBQUEsQ0FDbkJFLENBQUFBLENBQ0EsS0FBQSxDQUNBLENBQUEsWUFBQSxFQUFlSCxDQUFZLENBQUEsa0RBQUEsRUFBcURBLENBQVksRUFDOUYsQ0FBQSxDQUNBLEdBQUksQ0FBQ0ssQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDBCQUEwQixFQUU1QyxJQUFNQyxDQUFBQSxDQUFjRixjQUFPLFNBQUEsQ0FBVSxhQUFhLEVBQ2xELElBQU1HLENBQUFBLENBQVVOLENBQUFBLENBQU0sWUFBQSxDQUFhSyxDQUFBQSxDQUFhLE1BQU0sRUFDdEQsR0FBSSxDQUFDQyxFQUNILE1BQU0sSUFBSSxNQUFNLDhCQUE4QixDQUFBLENBRWhELElBQU1DLENBQUFBLENBQVVmLEVBQUFBLENBQWdCLEtBQUssT0FBTyxDQUFBLEVBQUssTUFDakQsSUFBTWdCLENBQUFBLENBQWEsdUJBQXVCRCxDQUFPLENBQUEsY0FBQSxFQUFpQixJQUFBLENBQUssUUFBUSxDQUFBLHVDQUFBLEVBQTBDLElBQUEsQ0FBSyxVQUFVLENBQUEsSUFBQSxDQUFBLENBQ3hJLElBQU1FLEVBQVVDLGtCQUFBQSxDQUFZLFVBQUEsQ0FBVyxDQUFDLENBQUUsSUFBQSxDQUFNLEtBQU0sU0FBQSxDQUFXTixDQUFBQSxDQUFRLE9BQVEsQ0FBRSxDQUFDLENBQUMsQ0FBQSxDQUNyRixJQUFNTyxFQUFTRCxrQkFBQUEsQ0FBWSxVQUFBLENBQVcsQ0FBQyxDQUFFLElBQUEsQ0FBTSxNQUFPLFNBQUEsQ0FBV0osQ0FBQUEsQ0FBUyxPQUFRLENBQUUsQ0FBQyxDQUFDLENBQUEsQ0FDdEYzQyxrQkFBQUEsQ0FBWSxhQUFhcUMsQ0FBQUEsQ0FBTSxRQUFBLENBQVNRLEVBQVlHLENBQUFBLENBQVFGLENBQU8sRUFBRyxnQkFBZ0IsQ0FBQSxDQUN0RjlDLG1CQUFZLFlBQUEsQ0FBYXFDLENBQUFBLENBQU0sVUFBQSxFQUFXLENBQUcsY0FBYyxDQUFBLENBQzNEMUMsRUFBTSxJQUFBLEVBQUssQ0FDWCxLQUFLLE1BQUEsQ0FBUzBDLENBQUFBLENBQ2QsS0FBSyxPQUFBLENBQVVJLENBQUFBLENBQ2YsS0FBSyxRQUFBLENBQVdFLEVBQUFBLENBQUFBLE1BM0JoQjNHLEVBQUEsQ0FBQSxJQUFBaUUsQ0FBQUEsQ0FBQWpFLEVBQUFrRSxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLEVBQUFYLENBQUFBLENBQUFTLENBQUFBLENBQUFDLElBNEJGLENBRUEsTUFBTSxPQUFPK0MsQ0FBQUEsQ0FBYXJDLENBQUFBLENBQW1DLENBVzNELElBQUFwQixDQUFBQSxDQUFBLE9BVkEsR0FBSSxDQUFDLEtBQUssT0FBQSxFQUFXLENBQUMsS0FBSyxPQUFBLENBQ3pCLE9BRUYsSUFBTXpCLENBQUFBLENBQU0sSUFBSSxhQUFha0YsQ0FBQUEsQ0FBSSxNQUFBLENBQVFBLENBQUFBLENBQUksVUFBQSxDQUFZQSxDQUFBQSxDQUFJLFVBQUEsQ0FBYSxDQUFDLENBQUEsQ0FDM0UsSUFBQSxJQUFTbkcsRUFBSSxDQUFBLENBQUdBLENBQUFBLENBQUlpQixFQUFJLE1BQUEsQ0FBUWpCLENBQUFBLEVBQUFBLENBQ3pCLE9BQU8sUUFBQSxDQUFTaUIsQ0FBQUEsQ0FBSWpCLENBQUMsQ0FBRSxDQUFBLEdBQzFCaUIsRUFBSWpCLENBQUMsQ0FBQSxDQUFJLEdBR2IsSUFBTW9HLENBQUFBLENBQVduRixFQUFJLE1BQUEsRUFBVSxDQUFBLENBQy9CLElBQU1pQixDQUFBQSxDQUFRWSxDQUFBQSxDQUFBSixFQUFBYyxZQUFBQSxDQUFNLGVBQUEsQ0FBZ0IsT0FBTyxJQUFBLENBQUt2QyxDQUFBQSxDQUFJLE9BQVFBLENBQUFBLENBQUksVUFBQSxDQUFZQSxFQUFJLFVBQVUsQ0FBQSxDQUFHLENBQzNGLFNBQUEsQ0FBV21GLENBQUFBLENBQ1gsT0FBUXBCLDJCQUFBQSxDQUNSLFVBQUEsQ0FBWSxJQUFBLENBQUssT0FBQSxDQUNqQixhQUFBLENBQWVLLGtDQUFBQSxDQUNmLElBQUssSUFBQSxDQUFLLElBQUEsQ0FDVixTQUFVLENBQUUsR0FBQSxDQUFLLEVBQUcsR0FBQSxDQUFLLElBQUEsQ0FBSyxPQUFRLENBQ3hDLENBQUMsR0FDRCxJQUFBLENBQUssSUFBQSxFQUFRLE9BQU9lLENBQVEsQ0FBQSxDQUM1QmxELG1CQUFZLFlBQUEsQ0FBYSxNQUFNLEtBQUssT0FBQSxDQUFRLGlCQUFBLENBQWtCaEIsQ0FBSyxDQUFBLENBQUcsbUJBQW1CLEVBQ3pGLE1BQU0sSUFBQSxDQUFLLE1BQU00QixDQUFLLEVBQUEsQ0FBQSxNQVZ0QjVFLEVBQUEsQ0FBQSxJQUFBaUUsQ0FBQUEsQ0FBQWpFLEVBQUFrRSxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLEVBQUFYLENBQUFBLENBQUFTLENBQUFBLENBQUFDLElBV0YsQ0FFQSxNQUFNLEtBQUEsQ0FBTVUsQ0FBQUEsQ0FBbUMsQ0FDekMsSUFBQSxDQUFLLFVBQ1AsTUFBTSxJQUFBLENBQUssUUFBUSxpQkFBQSxDQUFrQixJQUFJLEVBQ3pDLE1BQU0sSUFBQSxDQUFLLE1BQU1BLENBQUssQ0FBQSxDQUFBLENBRXhCLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxVQUFVLElBQUksQ0FBQSxDQUM5QixNQUFNLElBQUEsQ0FBSyxVQUFBLENBQVdBLENBQUssRUFDN0IsQ0FFQSxDQUFDLE1BQUEsQ0FBTyxPQUFPLEdBQVUsQ0FDdkIsSUFBQSxDQUFLLEtBQUssSUFBQSxFQUFLLENBQ2YsS0FBSyxZQUFBLENBQWEsSUFBQSxHQUNsQixJQUFBLENBQUssTUFBQSxHQUFTLE9BQU8sT0FBTyxDQUFBLEdBQzVCLElBQUEsQ0FBSyxJQUFBLENBQUssV0FBQSxHQUNaLENBRUEsTUFBYyxNQUFNQSxDQUFBQSxDQUFtQyxDQUNyRCxPQUFhLENBQ1gsSUFBTXJELEVBQUksTUFBTSxJQUFBLENBQUssU0FBVSxrQkFBQSxDQUFtQixJQUFBLENBQUssWUFBWSxDQUFBLENBQ25FLEdBQUlBLElBQU1zRCx3QkFBQUEsRUFBa0J0RCxDQUFBQSxHQUFNdUQsc0JBQ2hDLE1BRUYsR0FBSSxDQUNGZCxrQkFBQUEsQ0FBWSxZQUFBLENBQWF6QyxFQUFHLG9CQUFvQixDQUFBLENBQ2hEeUMsbUJBQVksWUFBQSxDQUFhLE1BQU0sS0FBSyxJQUFBLENBQUssU0FBQSxDQUFVLEtBQUssWUFBWSxDQUFBLENBQUcsb0JBQW9CLENBQUEsQ0FDM0YsTUFBTSxLQUFLLFVBQUEsQ0FBV1ksQ0FBSyxFQUM3QixDQUFBLE9BQUUsQ0FDQSxJQUFBLENBQUssWUFBQSxDQUFhLEtBQUEsR0FDcEIsQ0FDRixDQUNGLENBRVEsV0FBV0EsQ0FBQUEsQ0FBbUMsQ0FDcEQsT0FBT0YsRUFBQUEsQ0FBYSxJQUFBLENBQUssS0FBTSxJQUFBLENBQUssSUFBQSxDQUFNLEtBQUssT0FBQSxDQUFTRSxDQUFLLENBQy9ELENBQ0YsQ0FBQSxDQ25MTyxTQUFTdUMsQ0FBQUEsQ0FBU0MsRUFBd0IsQ0FDL0MsSUFBTUMsRUFBTSxNQUFBLENBQU8sS0FBQSxDQUFNRCxFQUFLLE1BQUEsRUFBVSxDQUFDLEVBQ3pDLElBQUEsSUFBU3RHLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSXVHLENBQUFBLENBQUksT0FBUXZHLENBQUFBLEVBQUFBLENBQUssQ0FDbkMsSUFBSXdHLENBQUFBLENBQU8sQ0FBQSxDQUNYLElBQUEsSUFBU3pFLEVBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJLEVBQUdBLENBQUFBLEVBQUFBLENBQ3JCeUUsQ0FBQUEsQ0FBUUEsR0FBUSxDQUFBLENBQUtGLENBQUFBLENBQUt0RyxFQUFJLENBQUEsQ0FBSStCLENBQUMsRUFFckN3RSxDQUFBQSxDQUFJdkcsQ0FBQyxFQUFJd0csRUFDWCxDQUNBLE9BQU9ELENBQ1QsQ0FFTyxJQUFNRSxDQUFBQSxDQUFOLEtBQWdCLENBQ3JCLEtBQWlCLEVBQUMsQ0FDbEIsRUFBRUMsQ0FBQUEsQ0FBYUMsQ0FBQUEsQ0FBVyxDQUN4QixJQUFBLElBQVMzRyxDQUFBQSxDQUFJMkcsRUFBSSxDQUFBLENBQUczRyxDQUFBQSxFQUFLLEVBQUdBLENBQUFBLEVBQUFBLENBQzFCLElBQUEsQ0FBSyxLQUFLLElBQUEsQ0FBTTBHLENBQUFBLEVBQU8xRyxFQUFLLENBQUMsRUFFakMsQ0FDQSxJQUFBLENBQUswRyxDQUFBQSxDQUF1QixDQUMxQixJQUFBLENBQUssSUFBQSxDQUFLLEtBQUtBLENBQUFBLENBQU0sQ0FBQSxDQUFJLENBQUMsRUFDNUIsQ0FDQSxHQUFHQSxDQUFBQSxDQUFhLENBQ2QsSUFBTXJFLENBQUFBLENBQUlxRSxDQUFBQSxDQUFNLEVBQ1ZFLENBQUFBLENBQU0sRUFBQSxDQUFLLEtBQUssS0FBQSxDQUFNdkUsQ0FBQyxDQUFBLENBQzdCLElBQUEsSUFBU3JDLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJNEcsQ0FBQUEsQ0FBTSxDQUFBLENBQUc1RyxJQUMzQixJQUFBLENBQUssSUFBQSxDQUFLLEtBQUssQ0FBQyxDQUFBLENBRWxCLFFBQVNBLENBQUFBLENBQUk0RyxDQUFBQSxDQUFNLEVBQUc1RyxDQUFBQSxFQUFLLENBQUEsQ0FBR0EsSUFDNUIsSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFNcUMsQ0FBQUEsRUFBS3JDLENBQUFBLENBQUssQ0FBQyxFQUUvQixDQUNBLE1BQU02RyxDQUFBQSxDQUFhLENBQ2pCLEtBQU8sSUFBQSxDQUFLLElBQUEsQ0FBSyxPQUFTLENBQUEsR0FBTSxDQUFBLEVBQzlCLEtBQUssSUFBQSxDQUFLLElBQUEsQ0FBS0EsQ0FBRyxFQUV0QixDQUNBLEtBQUs1RixDQUFBQSxDQUFlNkYsQ0FBQUEsQ0FBZUYsRUFBYSxDQUM5QyxJQUFBLElBQVM1RyxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSTRHLENBQUFBLENBQUs1RyxJQUN2QixJQUFBLENBQUssSUFBQSxDQUFLLEtBQUtpQixDQUFBQSxDQUFJNkYsQ0FBQUEsQ0FBUTlHLENBQUMsQ0FBRSxFQUVsQyxDQUNGLENBQUEsQ0FFYStHLENBQUFBLENBQU4sS0FBZ0IsQ0FDYixLQUFBLENBQ1IsSUFBTSxDQUFBLENBQ04sV0FBQSxDQUFZek0sRUFBYyxDQUN4QixJQUFBLENBQUssTUFBUSxFQUFDLENBQ2QsUUFBUzBGLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJMUYsQ0FBQUEsQ0FBSyxNQUFBLENBQVEwRixJQUMvQixJQUFBLElBQVMrQixDQUFBQSxDQUFJLEVBQUdBLENBQUFBLEVBQUssQ0FBQSxDQUFHQSxJQUN0QixJQUFBLENBQUssS0FBQSxDQUFNLEtBQU16SCxDQUFBQSxDQUFLMEYsQ0FBQyxHQUFNK0IsQ0FBQUEsQ0FBSyxDQUFDLEVBR3pDLENBQ0EsSUFBSSxJQUFBLEVBQU8sQ0FDVCxPQUFPLElBQUEsQ0FBSyxLQUNkLENBQ0EsSUFBQSxDQUFLNEUsRUFBbUIsQ0FDdEIsSUFBSUQsRUFBTSxDQUFBLENBQ1YsSUFBQSxJQUFTMUcsRUFBSSxDQUFBLENBQUdBLENBQUFBLENBQUkyRyxFQUFHM0csQ0FBQUEsRUFBQUEsQ0FDckIwRyxDQUFBQSxDQUFPQSxHQUFPLENBQUEsQ0FBSyxJQUFBLENBQUssTUFBTSxJQUFBLENBQUssR0FBQSxFQUFLLEVBRTFDLE9BQU9BLENBQ1QsQ0FDQSxNQUFBLEVBQWlCLENBQ2YsSUFBSU0sQ0FBQUEsQ0FBUSxDQUFBLENBQ1osS0FBTyxJQUFBLENBQUssS0FBQSxDQUFNLEtBQUssR0FBRyxDQUFBLEdBQU0sR0FDOUJBLENBQUFBLEVBQUFBLENBQ0EsSUFBQSxDQUFLLE1BRVAsSUFBQSxDQUFLLEdBQUEsRUFBQSxDQUNMLElBQUlOLENBQUFBLENBQU0sQ0FBQSxDQUNWLElBQUEsSUFBUzFHLEVBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJZ0gsRUFBT2hILENBQUFBLEVBQUFBLENBQ3pCMEcsQ0FBQUEsQ0FBT0EsR0FBTyxDQUFBLENBQUssSUFBQSxDQUFLLE1BQU0sSUFBQSxDQUFLLEdBQUEsRUFBSyxFQUUxQyxPQUFPQSxDQUFBQSxDQUFNLENBQ2YsQ0FDRixDQUFBLENDN0VBLElBQU1PLENBQUFBLENBQXFCLE1BQUEsQ0FBTyxLQUFLLENBQUMsQ0FBQSxDQUFNLEVBQU0sQ0FBQSxDQUFNLENBQUksQ0FBQyxDQUFBLENBS3hELElBQU1DLEdBQWUsRUFBQSxDQUdyQixJQUFNQyxHQUFxQixFQUFBLENBQ3JCQyxFQUFBQSxDQUFVLEdBQ1ZDLEVBQUFBLENBQVUsRUFBQSxDQUNWQyxHQUFVLEVBQUEsQ0FDVkMsRUFBQUEsQ0FBaUIsR0FTOUIsU0FBU0MsRUFBQUEsQ0FBYUMsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQXdFLENBQzdHLElBQU1DLEVBQVFGLENBQUFBLEVBQVcsQ0FBQSxDQUFLLEdBQ3hCRyxDQUFBQSxDQUFBQSxDQUFZSCxDQUFBQSxDQUFVLElBQU0sQ0FBQSxDQUFPQyxDQUFBQSxFQUFXLEVBQUssRUFBQSxDQUNuREcsQ0FBQUEsQ0FBYUgsRUFBVSxDQUFBLENBQzdCLE9BQU8sQ0FBRSxJQUFBLENBQUFDLENBQUFBLENBQU0sUUFBQUMsQ0FBQUEsQ0FBUyxVQUFBLENBQUFDLENBQVcsQ0FDckMsQ0FFTyxTQUFTQyxFQUFBQSxDQUFnQkgsQ0FBQUEsQ0FBY0MsRUFBaUJDLENBQUFBLENBQXNDLENBQ25HLElBQU1FLENBQUFBLENBQUFBLENBQVVKLENBQUFBLENBQU8sS0FBUyxDQUFBLENBQU9DLENBQUFBLEVBQVcsRUFBSyxDQUFBLENBQ2pESSxDQUFBQSxDQUFBQSxDQUFVSixFQUFVLEVBQUEsR0FBUyxDQUFBLENBQU1DLEVBQWEsQ0FBQSxDQUN0RCxPQUFPLENBQUNFLENBQUFBLENBQU9DLENBQUssQ0FDdEIsQ0FHTyxTQUFTQyxDQUFBQSxDQUFjQyxFQUE4QixDQUMxRCxJQUFNQyxFQUFrQixFQUFDLENBQ3JCbkksRUFBSSxDQUFBLENBRVIsS0FBT0EsRUFBSWtJLENBQUFBLENBQVUsTUFBQSxFQUFRLENBQzNCLElBQUlFLENBQUFBLENBQVEsRUFDWixHQUFJcEksQ0FBQUEsQ0FBSSxFQUFJa0ksQ0FBQUEsQ0FBVSxNQUFBLEVBQVVBLEVBQVVsSSxDQUFDLENBQUEsR0FBTSxHQUFLa0ksQ0FBQUEsQ0FBVWxJLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUFLa0ksRUFBVWxJLENBQUFBLENBQUksQ0FBQyxJQUFNLENBQUEsQ0FDbkdvSSxDQUFBQSxDQUFRLFVBRVJwSSxDQUFBQSxDQUFJLENBQUEsQ0FBSWtJLEVBQVUsTUFBQSxFQUNsQkEsQ0FBQUEsQ0FBVWxJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDakJrSSxDQUFBQSxDQUFVbEksRUFBSSxDQUFDLENBQUEsR0FBTSxHQUNyQmtJLENBQUFBLENBQVVsSSxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDckJrSSxFQUFVbEksQ0FBQUEsQ0FBSSxDQUFDLElBQU0sQ0FBQSxDQUVyQm9JLENBQUFBLENBQVEsT0FDSCxDQUNMcEksQ0FBQUEsRUFBQUEsQ0FDQSxRQUNGLENBRUEsSUFBTXFJLENBQUFBLENBQVdySSxDQUFBQSxDQUFJb0ksQ0FBQUEsQ0FDckIsR0FBSUMsRUFBVyxDQUFBLENBQWtCSCxDQUFBQSxDQUFVLE9BQ3pDLE1BR0YsSUFBSUksRUFBU0osQ0FBQUEsQ0FBVSxNQUFBLENBQ3ZCLFFBQVNLLENBQUFBLENBQUlGLENBQUFBLENBQVcsRUFBaUJFLENBQUFBLENBQUlMLENBQUFBLENBQVUsT0FBUyxDQUFBLENBQUdLLENBQUFBLEVBQUFBLENBQ2pFLEdBQ0VMLENBQUFBLENBQVVLLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDakJMLENBQUFBLENBQVVLLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxHQUNwQkwsRUFBVUssQ0FBQUEsQ0FBSSxDQUFDLElBQU0sQ0FBQSxFQUFNQSxDQUFBQSxDQUFJLEVBQUlMLENBQUFBLENBQVUsTUFBQSxFQUFVQSxFQUFVSyxDQUFBQSxDQUFJLENBQUMsSUFBTSxDQUFBLEVBQUtMLENBQUFBLENBQVVLLEVBQUksQ0FBQyxDQUFBLEdBQU0sR0FDdkcsQ0FDQUQsQ0FBQUEsQ0FBU0MsRUFDVCxLQUNGLENBR0YsR0FBTSxDQUFFLElBQUEsQ0FBQVosRUFBTSxPQUFBLENBQUFDLENBQVEsRUFBSUosRUFBQUEsQ0FBYVUsQ0FBQUEsQ0FBVUcsQ0FBUSxDQUFBLENBQUlILENBQUFBLENBQVVHLEVBQVcsQ0FBQyxDQUFFLEVBQ3JGRixDQUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBQVIsQ0FBQUEsQ0FBTSxPQUFBLENBQUFDLEVBQVMsSUFBQSxDQUFNTSxDQUFBQSxDQUFVLFNBQVNHLENBQUFBLENBQVVDLENBQU0sQ0FBRSxDQUFDLENBQUEsQ0FDdkV0SSxFQUFJc0ksRUFDTixDQUVBLE9BQU9ILENBQ1QsQ0FHTyxTQUFTSyxFQUFBQSxDQUFrQkMsQ0FBQUEsQ0FBYWIsRUFBeUIsQ0FDdEUsSUFBTWMsRUFBTSxNQUFBLENBQU8sSUFBQSxDQUFLRCxDQUFHLENBQUEsQ0FDckIsQ0FBRSxLQUFBZCxDQUFBQSxDQUFNLFVBQUEsQ0FBQUUsQ0FBVyxDQUFBLENBQUlMLEVBQUFBLENBQWFrQixFQUFJLENBQUMsQ0FBQSxDQUFJQSxFQUFJLENBQUMsQ0FBRSxFQUNwRCxDQUFDQyxDQUFBQSxDQUFJQyxDQUFFLENBQUEsQ0FBSWQsRUFBQUEsQ0FBZ0JILENBQUFBLENBQU1DLENBQUFBLENBQVNDLENBQVUsQ0FBQSxDQUMxRCxPQUFBYSxDQUFBQSxDQUFJLENBQUMsRUFBSUMsQ0FBQUEsQ0FDVEQsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBSUUsQ0FBQUEsQ0FDRkYsQ0FDVCxDQWFPLFNBQVNHLEVBQTBCdk8sQ0FBQUEsQ0FBc0IsQ0FDOUQsSUFBTW9PLENBQUFBLENBQWdCLEdBQ3RCLElBQUEsSUFBUzFJLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSTFGLENBQUFBLENBQUssT0FBUTBGLENBQUFBLEVBQUFBLENBQzNCQSxDQUFBQSxDQUFJLEVBQUkxRixDQUFBQSxDQUFLLE1BQUEsRUFBVUEsRUFBSzBGLENBQUMsQ0FBQSxHQUFNLEdBQUsxRixDQUFBQSxDQUFLMEYsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQUsxRixFQUFLMEYsQ0FBQUEsQ0FBSSxDQUFDLElBQU0sQ0FBQSxFQUMvRTBJLENBQUFBLENBQUksSUFBQSxDQUFLLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDYjFJLEdBQUssQ0FBQSxFQUVMMEksQ0FBQUEsQ0FBSSxLQUFLcE8sQ0FBQUEsQ0FBSzBGLENBQUMsQ0FBRSxDQUFBLENBR3JCLE9BQU8sT0FBTyxJQUFBLENBQUswSSxDQUFHLENBQ3hCLENBR08sU0FBU0ksR0FBdUJMLENBQUFBLENBQXFCLENBQzFELElBQU1DLENBQUFBLENBQWdCLEdBQ3RCQSxDQUFBQSxDQUFJLElBQUEsQ0FBS0QsRUFBSSxDQUFDLENBQUEsQ0FBSUEsRUFBSSxDQUFDLENBQUUsRUFDekIsSUFBSXpCLENBQUFBLENBQVEsRUFDWixJQUFBLElBQVNoSCxDQUFBQSxDQUFJLEVBQUdBLENBQUFBLENBQUl5SSxDQUFBQSxDQUFJLE9BQVF6SSxDQUFBQSxFQUFBQSxDQUMxQmdILENBQUFBLEdBQVUsR0FBS3lCLENBQUFBLENBQUl6SSxDQUFDLENBQUEsRUFBTSxDQUFBLEdBQzVCMEksQ0FBQUEsQ0FBSSxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1YxQixDQUFBQSxDQUFRLEdBRU55QixDQUFBQSxDQUFJekksQ0FBQyxJQUFNLENBQUEsQ0FDYmdILENBQUFBLEVBQUFBLENBRUFBLEVBQVEsQ0FBQSxDQUVWMEIsQ0FBQUEsQ0FBSSxLQUFLRCxDQUFBQSxDQUFJekksQ0FBQyxDQUFFLENBQUEsQ0FFbEIsT0FBTyxPQUFPLElBQUEsQ0FBSzBJLENBQUcsQ0FDeEIsQ0N4SEEsSUFBTUssR0FBYyxFQUFBLENBQ2RDLEVBQUFBLENBQWMsR0FDZEMsRUFBQUEsQ0FBZSxDQUFBLENBQ2ZDLEdBQWtCLEVBQUEsQ0FDbEJDLEVBQUFBLENBQWUsRUFDZkMsRUFBQUEsQ0FBZSxDQUFBLENBRXJCLFNBQVNDLEVBQUFBLENBQU85QyxDQUFBQSxDQUFhK0MsRUFBbUI1UCxDQUFBQSxDQUFvQixDQUNsRSxJQUFNOE0sQ0FBQUEsQ0FBTzhDLENBQUFBLEVBQWEsQ0FBQSxDQUNwQkMsQ0FBQUEsQ0FBTyxDQUFBLEVBQU0sQ0FBQSxFQUFLRCxFQUFZLENBQUEsQ0FBQSxDQUM5QkUsQ0FBQUEsQ0FBTWpELEVBQUlDLENBQUksQ0FBQSxFQUFLLEVBQ3pCRCxDQUFBQSxDQUFJQyxDQUFJLEVBQUk5TSxDQUFBQSxDQUFROFAsQ0FBQUEsQ0FBTUQsRUFBT0MsQ0FBQUEsQ0FBTSxDQUFDRCxFQUMxQyxDQUVBLFNBQVNFLEdBQVNDLENBQUFBLENBQWlCQyxDQUFBQSxDQUE2QixDQUM5RCxJQUFNQyxDQUFBQSxDQUFPZixFQUEwQmEsQ0FBTyxDQUFBLENBQzlDLE9BQUFMLEVBQUFBLENBQU9PLENBQUFBLENBQU1ELEVBQWNWLEVBQUFBLENBQWMsQ0FBQyxFQUMxQ0ksRUFBQUEsQ0FBT08sQ0FBQUEsQ0FBTUQsRUFBY1QsRUFBQUEsQ0FBaUIsQ0FBQyxFQUN0Q0osRUFBQUEsQ0FBdUJjLENBQUksQ0FDcEMsQ0FHTyxTQUFTQyxFQUFBQSxDQUFrQjNCLENBQUFBLENBQTJCLENBQzNELElBQU1DLEVBQU9GLENBQUFBLENBQWNDLENBQVMsRUFDcEMsR0FBSUMsQ0FBQUEsQ0FBSyxTQUFXLENBQUEsQ0FDbEIsT0FBT0QsRUFFVCxJQUFNNEIsQ0FBQUEsQ0FBbUIsRUFBQyxDQUMxQixJQUFBLElBQVdyQixLQUFPTixDQUFBQSxDQUFNLENBQ3RCLElBQUk3TixDQUFBQSxDQUFPbU8sQ0FBQUEsQ0FBSSxLQUNYQSxDQUFBQSxDQUFJLElBQUEsR0FBU3JCLEdBQ2Y5TSxDQUFBQSxDQUFPbVAsRUFBQUEsQ0FBU2hCLEVBQUksSUFBQSxDQUFNTSxFQUFXLEVBQzVCTixDQUFBQSxDQUFJLElBQUEsR0FBU3BCLEtBQ3RCL00sQ0FBQUEsQ0FBT21QLEVBQUFBLENBQVNoQixFQUFJLElBQUEsQ0FBTU8sRUFBVyxHQUV2Q2MsQ0FBQUEsQ0FBTyxJQUFBLENBQUs3QyxFQUFvQjNNLENBQUksRUFDdEMsQ0FDQSxPQUFPLE1BQUEsQ0FBTyxNQUFBLENBQU93UCxDQUFNLENBQzdCLENBSUEsU0FBU0MsRUFBQUEsQ0FBYUMsQ0FBQUEsQ0FBZVYsRUFBbUJXLENBQUFBLENBQXdCLENBQzlFLElBQU1MLENBQUFBLENBQU9mLENBQUFBLENBQTBCbUIsQ0FBSyxDQUFBLENBQ3RDRSxDQUFBQSxDQUFLLElBQUluRCxDQUFBQSxDQUFVNkMsQ0FBSSxFQUN2Qk8sQ0FBQUEsQ0FBSyxJQUFJMUQsQ0FBQUEsQ0FDZixJQUFBLElBQVN6RyxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSXNKLENBQUFBLENBQVd0SixDQUFBQSxFQUFBQSxDQUM3Qm1LLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBS0QsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FJekIsSUFGQUEsRUFBRyxNQUFBLEVBQU8sQ0FDVkMsRUFBRyxFQUFBLENBQUdGLENBQU0sRUFDTEMsQ0FBQUEsQ0FBRyxHQUFBLENBQU1BLENBQUFBLENBQUcsSUFBQSxDQUFLLE1BQUEsRUFDdEJDLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUtELENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUMsRUFFekIsS0FBT0MsQ0FBQUEsQ0FBRyxLQUFLLE1BQUEsQ0FBUyxDQUFBLEdBQU0sR0FDNUJBLENBQUFBLENBQUcsSUFBQSxDQUFLLEtBQUssQ0FBQyxDQUFBLENBRWhCLE9BQU9yQixFQUFBQSxDQUF1QnpDLENBQUFBLENBQVM4RCxFQUFHLElBQUksQ0FBQyxDQUNqRCxDQUVBLFNBQVNDLEdBQWFKLENBQUFBLENBQWVWLENBQUFBLENBQW1CZSxFQUFpQkMsQ0FBQUEsQ0FBeUIsQ0FDaEcsSUFBTVYsQ0FBQUEsQ0FBT2YsQ0FBQUEsQ0FBMEJtQixDQUFLLENBQUEsQ0FDdENFLENBQUFBLENBQUssSUFBSW5ELENBQUFBLENBQVU2QyxDQUFJLEVBQ3ZCTyxDQUFBQSxDQUFLLElBQUkxRCxDQUFBQSxDQUNmLElBQUEsSUFBU3pHLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJc0osQ0FBQUEsQ0FBV3RKLENBQUFBLEVBQUFBLENBQzdCbUssRUFBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQU16QixJQUpBQSxFQUFHLE1BQUEsRUFBTyxDQUNWQSxFQUFHLE1BQUEsRUFBTyxDQUNWQyxFQUFHLEVBQUEsQ0FBR0UsQ0FBTyxFQUNiRixDQUFBQSxDQUFHLEVBQUEsQ0FBR0csQ0FBTyxDQUFBLENBQ05KLENBQUFBLENBQUcsSUFBTUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssUUFDdEJDLENBQUFBLENBQUcsSUFBQSxDQUFLLEtBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBRXpCLEtBQU9DLENBQUFBLENBQUcsSUFBQSxDQUFLLE9BQVMsQ0FBQSxHQUFNLENBQUEsRUFDNUJBLENBQUFBLENBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLEVBRWhCLE9BQU9yQixFQUFBQSxDQUF1QnpDLEVBQVM4RCxDQUFBQSxDQUFHLElBQUksQ0FBQyxDQUNqRCxDQUdPLFNBQVNJLEVBQUFBLENBQWdCQyxDQUFBQSxDQUFxQixDQUNuRCxJQUFNQyxDQUFBQSxDQUFpQnpCLEdBQWMsRUFBQSxDQUNyQyxPQUFPZSxHQUFhUyxDQUFBQSxDQUFLQyxDQUFBQSxDQUFnQixDQUFDLENBQzVDLENBR08sU0FBU0MsRUFBQUEsQ0FBZ0JDLENBQUFBLENBQXFCLENBQ25ELE9BQU9QLEVBQUFBLENBQWFPLEVBQUssRUFBQSxDQUEyQixDQUFBLENBQUcsQ0FBQyxDQUMxRCxDQUlBLFNBQVNDLEVBQUFBLENBQU9WLENBQUFBLENBQXVCLENBQ3JDLElBQU1XLENBQUFBLENBQUtYLEVBQUcsTUFBQSxFQUFPLENBQ3JCLE9BQU9XLENBQUFBLENBQUssQ0FBQSxDQUFLQSxDQUFBQSxDQUFLLEdBQU0sQ0FBQSxDQUFJLEVBQUVBLEdBQU0sQ0FBQSxDQUMxQyxDQUdBLFNBQVNDLEVBQUFBLENBQXVCWixDQUFBQSxDQUFlYSxFQUFnQyxDQUU3RSxHQURrQmIsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNaLENBQ2IsSUFBTWMsRUFBaUJkLENBQUFBLENBQUcsTUFBQSxHQUMxQixHQUFJYyxDQUFBQSxHQUFtQixFQUNyQixNQUFNLElBQUksTUFBTSxDQUFBLHlDQUFBLEVBQTRDQSxDQUFjLEVBQUUsQ0FBQSxDQUU5RWQsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLE1BQUEsRUFBTyxDQUNWLFFBQVMzQixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsR0FBS3dDLENBQUFBLENBQWtCeEMsQ0FBQUEsRUFBQUEsQ0FDeEIyQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsRUFFcEJBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFHZixDQUFBLEtBQU8sQ0FDTCxJQUFNZSxDQUFBQSxDQUFTZixDQUFBQSxDQUFHLFFBQU8sQ0FDbkJnQixDQUFBQSxDQUFTaEIsRUFBRyxNQUFBLEVBQU8sQ0FDekIsUUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLEVBQUllLENBQUFBLENBQVEsQ0FBQSxFQUFBLENBQzFCZixFQUFHLE1BQUEsRUFBTyxDQUNWQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBRVgsSUFBQSxJQUFTLENBQUEsQ0FBSSxFQUFHLENBQUEsQ0FBSWdCLENBQUFBLENBQVEsSUFDMUJoQixDQUFBQSxDQUFHLE1BQUEsR0FDSEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUViLENBQ0YsQ0FHQSxTQUFTaUIsRUFBQUEsQ0FBdUJqQixDQUFBQSxDQUFla0IsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQThCLENBRTVGLEdBREFuQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxFQUFFLENBQUEsQ0FDTkEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxHQUFNLEVBQ2pCLE1BQU0sSUFBSSxNQUFNLHlEQUF5RCxDQUFBLENBRTNFLElBQU1vQixDQUFBQSxDQUFTRixDQUFBQSxFQUFXbEUsSUFBZ0JrRSxDQUFBQSxFQUFXakUsRUFBQUEsQ0FDakRtRSxHQUNGcEIsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRVhBLENBQUFBLENBQUcsUUFBTyxDQUNWLElBQU1xQixFQUFZckIsQ0FBQUEsQ0FBRyxNQUFBLEdBQ3JCLEdBQUksQ0FBQ29CLEVBQVEsQ0FRWCxHQVBBcEIsRUFBRyxJQUFBLENBQUttQixDQUFBQSxDQUFJLGFBQWEsQ0FBQSxDQUNFbkIsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR3pCbUIsQ0FBQUEsQ0FBSSx1QkFBeUIsQ0FBQSxFQUN0Q25CLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUssSUFBQSxDQUFLLEtBQUssSUFBQSxDQUFLbUIsQ0FBQUEsQ0FBSSxzQkFBc0IsQ0FBQyxDQUFDLEVBRnhEUCxFQUFBQSxDQUF1QlosQ0FBQUEsQ0FBSW1CLEVBQUksZ0JBQWdCLENBQUEsQ0FJN0NBLEVBQUksc0JBQUEsQ0FDTixNQUFNLElBQUksS0FBQSxDQUFNLG9EQUFvRCxFQUVsRUEsQ0FBQUEsQ0FBSSxxQkFBQSxFQUNObkIsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUViLENBQ0EsT0FBSW1CLEVBQUksVUFBQSxHQUNObkIsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLElBRVBxQixDQUFBQSxHQUFjbkMsRUFBQUEsRUFBZ0JtQyxDQUFBQSxHQUFjcEMsRUFBQUEsSUFDekJlLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxHQUU1QkEsQ0FBQUEsQ0FBRyxRQUFPLENBQ05xQixDQUFBQSxHQUFjcEMsSUFDaEJlLENBQUFBLENBQUcsTUFBQSxJQUdIcUIsQ0FBQUEsR0FBY3BDLEVBQUFBLEVBQ2hCZSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBRVBtQixDQUFBQSxDQUFJLGdCQUFBLEVBQ05uQixFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFWEEsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FBQSxDQUVaVSxHQUFPVixDQUFFLENBQUEsQ0FDTG1CLEVBQUksZ0NBQUEsRUFDTm5CLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FFSkEsRUFBRyxHQUNaLENBT08sU0FBU3NCLEVBQUFBLENBQXdCQyxDQUFBQSxDQUFlTCxFQUFpQkMsQ0FBQUEsQ0FBOEIsQ0FDcEcsSUFBTXpCLENBQUFBLENBQU9mLENBQUFBLENBQTBCNEMsQ0FBSyxDQUFBLENBQ3RDdkIsQ0FBQUEsQ0FBSyxJQUFJbkQsRUFBVTZDLENBQUksQ0FBQSxDQUV2QjhCLEVBQVEsSUFBSTNFLENBQUFBLENBQVU2QyxDQUFJLENBQUEsQ0FDMUIrQixDQUFBQSxDQUFJUixHQUF1Qk8sQ0FBQUEsQ0FBT04sQ0FBQUEsQ0FBU0MsQ0FBRyxDQUFBLENBQzlDTyxDQUFBQSxDQUFlRCxFQUFJLENBQUEsR0FBTSxDQUFBLENBQUksRUFBSSxDQUFBLENBQUtBLENBQUFBLENBQUksRUFDMUNFLENBQUFBLENBQUFBLENBQXVCRixDQUFBQSxDQUFJQyxHQUFnQixDQUFBLENBRTNDekIsQ0FBQUEsQ0FBSyxJQUFJMUQsQ0FBQUEsQ0FDZixJQUFBLElBQVN6RyxFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSSxHQUFJQSxDQUFBQSxFQUFBQSxDQUN0Qm1LLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUtELENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUMsRUFXekIsSUFUQUMsQ0FBQUEsQ0FBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQUNSa0IsR0FBV2xFLEVBQUFBLEVBQWdCa0UsQ0FBQUEsRUFBV2pFLElBRW5EZ0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssS0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FHekJBLEVBQUcsTUFBQSxFQUFPLENBQ1ZDLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFFQUQsQ0FBQUEsQ0FBRyxHQUFBLENBQU15QixHQUNkeEIsQ0FBQUEsQ0FBRyxJQUFBLENBQUssS0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FJekIsSUFEQUMsQ0FBQUEsQ0FBRyxJQUFBLENBQUssS0FBSyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxJQUFBLENBQUssTUFBQSxDQUFTLElBQU0sQ0FBQSxFQUM1QkEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUdoQixPQUFPckIsRUFBQUEsQ0FBdUIsTUFBQSxDQUFPLE9BQU8sQ0FBQ3pDLENBQUFBLENBQVM4RCxFQUFHLElBQUksQ0FBQSxDQUFHUCxFQUFLLFFBQUEsQ0FBU2lDLENBQW1CLENBQUMsQ0FBQyxDQUFDLENBQ3RHLENDL05BLFNBQVNDLEdBQVdDLENBQUFBLENBQXdDLENBQzFELElBQU03QixDQUFBQSxDQUFLLElBQUluRCxFQUFVOEIsQ0FBQUEsQ0FBMEJrRCxDQUFPLENBQUMsQ0FBQSxDQUkzRCxHQUhBN0IsRUFBRyxJQUFBLENBQUssRUFBRSxFQUNWQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNMQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FBSSxDQUFBLENBQ2YsT0FFRixJQUFNOEIsRUFBcUI5QixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDcENBLENBQUFBLENBQUcsS0FBSyxFQUFNLENBQUEsQ0FFZCxJQUFNK0IsQ0FBQUEsQ0FBVy9CLENBQUFBLENBQUcsSUFDcEIsT0FBQUEsQ0FBQUEsQ0FBRyxLQUFLLEVBQUUsQ0FBQSxDQUNOOEIsRUFBcUIsQ0FBQSxFQUN2QjlCLENBQUFBLENBQUcsS0FBSzhCLENBQUFBLENBQXFCLENBQUEsQ0FBQSxDQUFLLEVBQUlBLENBQUFBLEVBQXNCLENBQUMsRUFFeEQsQ0FBRSxRQUFBLENBQUFDLEVBQVUsTUFBQSxDQUFRL0IsQ0FBQUEsQ0FBRyxJQUFLLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBRyxLQUFNLGtCQUFBLENBQUE4QixDQUFtQixDQUMxRSxDQUdBLFNBQVNFLEdBQWEvQixDQUFBQSxDQUFlZ0MsQ0FBQUEsQ0FBZ0IsQ0FDbkRoQyxDQUFBQSxDQUFHLENBQUEsQ0FBRSxLQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRWdDLENBQUFBLENBQUksa0JBQUEsQ0FBb0IsQ0FBQyxDQUFBLENBRTlCaEMsQ0FBQUEsQ0FBRyxLQUFLZ0MsQ0FBQUEsQ0FBSSxrQkFBQSxHQUF1QixDQUFDLENBQUEsQ0FDcENoQyxDQUFBQSxDQUFHLEVBQUUsS0FBQSxDQUFRLEVBQUUsRUFDZkEsQ0FBQUEsQ0FBRyxJQUFBLENBQUtnQyxFQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxTQUFVQSxDQUFBQSxDQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURoQyxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1QsUUFBU25LLENBQUFBLENBQUksQ0FBQSxDQUFHQSxHQUFLbU0sQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQm5NLElBQzNDbUssQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUdUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBQSxDQUFNLENBQUMsRUFDWixDQUdBLFNBQVNpQyxFQUFBQSxDQUFrQmpDLENBQUFBLENBQWVnQyxFQUFnQnpNLENBQUFBLENBQWVDLENBQUFBLENBQWdCLENBR3ZGLEdBREF3SyxDQUFBQSxDQUFHLEtBQUtnQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsRUFBSSxNQUFBLENBQVMsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNsQ0EsQ0FBQUEsQ0FBSSxtQkFBcUIsQ0FBQSxDQUFHLENBQzlCLFFBQVNuTSxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSW1NLENBQUFBLENBQUksa0JBQUEsQ0FBb0JuTSxJQUMxQ21LLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBRVgsUUFBU25LLENBQUFBLENBQUltTSxDQUFBQSxDQUFJLG1CQUFvQm5NLENBQUFBLENBQUksQ0FBQSxDQUFHQSxJQUMxQ21LLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBRWIsQ0FFQUEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNULElBQUEsSUFBU25LLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSSxFQUFBLENBQUlBLElBQ3RCbUssQ0FBQUEsQ0FBRyxJQUFBLENBQUtuSyxJQUFNLENBQUEsRUFBS0EsQ0FBQUEsR0FBTSxDQUFDLENBQUEsQ0FFNUJtSyxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUdUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUtnQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsRUFBSSxRQUFBLENBQVVBLENBQUFBLENBQUksT0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLEVBRTVEaEMsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBRXpLLENBQUFBLENBQU8sRUFBRSxFQUNkeUssQ0FBQUEsQ0FBRyxDQUFBLENBQUV4SyxFQUFRLEVBQUUsQ0FBQSxDQUNmd0ssRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUdUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMs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QUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cblxuLy8gQ29tbWEtc2VwYXJhdGVkIHN0cmluZyDihpIgYXJyYXkgdmlhIGEgcGVyLWl0ZW0gcGFyc2VyOyBlbXB0eS9ibGFuayDihpIgW10uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJheTxUPihpdGVtOiAoeDogdW5rbm93bikgPT4gVCk6ICh4OiB1bmtub3duKSA9PiBUW10ge1xuICByZXR1cm4gKHgpID0+IHtcbiAgICBpZiAodHlwZW9mIHggIT09IFwic3RyaW5nXCIgfHwgeC50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHguc3BsaXQoXCIsXCIpLm1hcCgocykgPT4gaXRlbShzLnRyaW0oKSkpO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBBdWRpb1ByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJhdWRpb19wcmVsb2FkLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBTaG9vdFByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJzaG9vdF9wcmVsb2FkLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBSZW5kZXJQcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwicmVuZGVyX3ByZWxvYWQuY2pzXCIpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiAoLi4ubWVzc2FnZXM6IHVua25vd25bXSkgPT4gdW5rbm93biwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikge1xuICAgIGxvZ2dlci5lcnJvcihtc2cpO1xuICB9IGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSB7XG4gICAgbG9nZ2VyLndhcm4obXNnKTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yMS5cblxuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbQ3Jhc2hdXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpIHtcbiAgLy8gYXBwRGF0YSAobm90IHRoZSBwZXItcnVuIHVzZXItZGF0YS1kaXIpIHNvIGV2ZXJ5IHB1cCBhcHAncyBkdW1wcyBhY2N1bXVsYXRlIGluIG9uZSBzaGFyZWQsIHBlcnNpc3RlbnQgZGlyLlxuICBjb25zdCBkdW1wRGlyID0gam9pbihhcHAuZ2V0UGF0aChcImFwcERhdGFcIiksIFwicHVwLXJlY29yZGVyXCIsIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxBIGV4dGVuZHMgdW5rbm93bltdLCBSLCBEPihmbjogKC4uLmFyZ3M6IEEpID0+IFIsIGRlZmF1bHRWYWx1ZTogRCk6ICguLi5hcmdzOiBBKSA9PiBSIHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKSBhcyBSIHwgRDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucywgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAgZ2V0IGtpbGxlZCgpOiBib29sZWFuO1xuICBraWxsKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIH1cbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIGxldCBraWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzOiBwcm9jLFxuICAgIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCksXG4gICAgZ2V0IGtpbGxlZCgpIHtcbiAgICAgIHJldHVybiBraWxsZWQ7XG4gICAgfSxcbiAgICBraWxsKCkge1xuICAgICAgaWYgKGtpbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB7XG4gICAgICAgIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9XSU5ET1dfVElNRU9VVCA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEVTID0gW1wib3V0L2h0bWwubXA0XCIsIFwib3V0L2h0bWwud2VibVwiXTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlczogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZShcIk91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG4gIHdpbmRvd1RpbWVvdXQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJXaW5kb3cgbG9hZCB0aW1lb3V0IGluIHNlY29uZHNcIiksXG4gIHNjcmVlbnNob3RzOiB6LmFycmF5KHoubnVtYmVyKCkpLmRlc2NyaWJlKFwiU2Vjb25kIG1hcmtzIHRvIGR1bXAgZnJhbWUgYml0bWFwcyBhcyBQTkdcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIHJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgYmxhbms6IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBzY3JlZW5zaG90czogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlczogREVGQVVMVF9PVVRfRklMRVMsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IGZhbHNlLFxuICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgZGlzYWJsZUdwdTogZmFsc2UsXG4gIGRpc2FibGVId0NvZGVjOiBmYWxzZSxcbiAgd2luZG93VG9sZXJhbnQ6IGZhbHNlLFxuICB3aW5kb3dUaW1lb3V0OiBERUZBVUxUX1dJTkRPV19USU1FT1VULFxuICBzY3JlZW5zaG90czogW10sXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlQXJyYXksIHBhcnNlTnVtYmVyLCBwYXJzZVN0cmluZyB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMsIHR5cGUgUmVuZGVyT3B0aW9ucywgcmVuZGVyU2NoZW1hIH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbi8vIFNjaGVtZWQgVVJJcyBwYXNzIHRocm91Z2g7IGJhcmUgcGF0aHMgZ2V0IGNhbm9uaWNhbGl6ZWQgYW5kIHdyYXBwZWQgYXMgZmlsZTovLy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNvdXJjZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocy5pbmNsdWRlcyhcIjovL1wiKSB8fCBzLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkge1xuICAgIHJldHVybiBzO1xuICB9XG4gIGxldCBhYnM6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBhYnMgPSByZWFscGF0aFN5bmMocyk7XG4gIH0gY2F0Y2gge1xuICAgIGFicyA9IHJlc29sdmUocyk7XG4gIH1cbiAgcmV0dXJuIGBmaWxlOi8vJHthYnN9YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IHJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgZGF0YTogVVJJLCBvciBmaWxlc3lzdGVtIHBhdGhcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLVMsIC0tc2NyZWVuc2hvdHMgPHNlY29uZHM+XCIsIHNoYXBlLnNjcmVlbnNob3RzLmRlc2NyaXB0aW9uLCBcIlwiKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aHM+XCIsIHNoYXBlLm91dEZpbGVzLmRlc2NyaXB0aW9uLCBkLm91dEZpbGVzLmpvaW4oXCIsXCIpKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi1kLCAtLWRldGVybWluaXN0aWNcIiwgc2hhcGUuZGV0ZXJtaW5pc3RpYy5kZXNjcmlwdGlvbiwgZC5kZXRlcm1pbmlzdGljKVxuICAgIC5vcHRpb24oXCItLXVzZS1pbm5lci1wcm94eVwiLCBzaGFwZS51c2VJbm5lclByb3h5LmRlc2NyaXB0aW9uLCBkLnVzZUlubmVyUHJveHkpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ncHVcIiwgc2hhcGUuZGlzYWJsZUdwdS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlR3B1KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtaHctY29kZWNcIiwgc2hhcGUuZGlzYWJsZUh3Q29kZWMuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUh3Q29kZWMpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRvbGVyYW50XCIsIHNoYXBlLndpbmRvd1RvbGVyYW50LmRlc2NyaXB0aW9uLCBkLndpbmRvd1RvbGVyYW50KVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10aW1lb3V0IDxudW1iZXI+XCIsIHNoYXBlLndpbmRvd1RpbWVvdXQuZGVzY3JpcHRpb24sIGAke2Qud2luZG93VGltZW91dH1gKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcHRpb25zLnJ1bihub3JtYWxpemVTb3VyY2Uoc291cmNlKSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZXM6IHBhcnNlQXJyYXkocGFyc2VTdHJpbmcpKG9wdHMub3V0RmlsZSksXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgICAgICAgIGRldGVybWluaXN0aWM6IG9wdHMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgICAgICAgZGlzYWJsZUdwdTogb3B0cy5kaXNhYmxlR3B1ID8/IGQuZGlzYWJsZUdwdSxcbiAgICAgICAgICBkaXNhYmxlSHdDb2RlYzogb3B0cy5kaXNhYmxlSHdDb2RlYyA/PyBkLmRpc2FibGVId0NvZGVjLFxuICAgICAgICAgIHdpbmRvd1RvbGVyYW50OiBvcHRzLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgICAgICAgd2luZG93VGltZW91dDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2luZG93VGltZW91dCkob3B0cy53aW5kb3dUaW1lb3V0KSxcbiAgICAgICAgICBzY3JlZW5zaG90czogcGFyc2VBcnJheShwYXJzZU51bWJlcikob3B0cy5zY3JlZW5zaG90cyksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENvbnNvbGUgPSBcImNvbnNvbGVcIixcbiAgUHJvZ3Jlc3MgPSBcInByb2dyZXNzXCIsXG4gIERvbmUgPSBcImRvbmVcIixcbiAgRXJyb3IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ2FuY2VsID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3M7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9uZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRG9uZTtcbiAgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkVycm9yO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJcGNNc2cgPSBDb25zb2xlTXNnIHwgUHJvZ3Jlc3NNc2cgfCBEb25lTXNnIHwgRXJyb3JNc2cgfCBDYW5jZWxNc2c7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRXZlbnRzIHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgY29uc29sZTogW2xldmVsOiBzdHJpbmcsIG1zZzogc3RyaW5nXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW2NvZGU6IG51bWJlciB8IG51bGxdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVDb25zb2xlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZSwgbGV2ZWwsIG1lc3NhZ2UgfSk7XG4gIH1cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkVycm9yLCBlcnJvciB9KTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkRvbmUsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmQobXNnOiBJcGNNc2cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghcHJvY2Vzcy5zZW5kKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ29uc29sZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlByb2dyZXNzOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRG9uZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FcnJvcjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4ocDogUHJvbWlzZTxUPiwgbXM6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfSB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKSwgbXMpO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gIH0pO1xufVxuXG4vLyBSZWplY3QgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMsIGVsc2Ugc2V0dGxlIHdpdGggYHBgOyBuby1vcCBwYXNzdGhyb3VnaCB3aGVuIG5vIHNpZ25hbC5cbmV4cG9ydCBmdW5jdGlvbiBhYm9ydGFibGU8VD4ocDogUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm4gcDtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpKTtcbiAgfSk7XG59XG5cbi8vIENhbGxiYWNrIG1heSByZXR1cm4gdGhlIG5leHQgaW50ZXJ2YWwgKG1zKSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBmb3IgdGhlIGZvbGxvd2luZyB0aWNrLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbmV4dCA/PyBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5jb25zdCBDRFBfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VuZChjZHA6IERlYnVnZ2VyLCBtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogb2JqZWN0KTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChjZHAuc2VuZENvbW1hbmQobWV0aG9kLCBwYXJhbXMpLCBDRFBfVElNRU9VVF9NUywgYGNkcC4ke21ldGhvZH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbihjZHA6IERlYnVnZ2VyLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uIH0pLCBDRFBfVElNRU9VVF9NUywgXCJldmFsSW5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlciwgYnVkZ2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYGFkdmFuY2VWaXJ0dWFsVGltZSB0aW1lZCBvdXQgYWZ0ZXIgJHtDRFBfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBDRFBfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAvLyBObyBzdGFydmF0aW9uIGNhcCAod291bGQgc2tpcCBwZW5kaW5nIHdvcmsgbm9uLWRldGVybWluaXN0aWNhbGx5KTsgY2FwdHVyZSBzdGFydHMgcG9zdCBkaWQtc3RvcC1sb2FkaW5nLCBhbmQgQ0RQX1RJTUVPVVRfTVMgdHVybnMgYSByZWFsIHN0YWxsIGludG8gYSBmYWlsZWQgcmVuZGVyLlxuICAgIHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNpemVEcmF3YWJsZShjZHA6IERlYnVnZ2VyLCBzaXplOiBTaXplKSB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgIC4uLnNpemUsXG4gICAgZGV2aWNlU2NhbGVGYWN0b3I6IDEsXG4gICAgbW9iaWxlOiBmYWxzZSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcblxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnJHtTVEVHT19USUNLX0NIQU5ORUx9Jyk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX2RyYXdfc3RlZ29fXyA9IChtcykgPT4ge1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAobXMpO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdGFydF9zdGVnb19fKClgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RvcF9zdGVnb19fKClgKTtcbn1cblxuLy8gUGFpbnRzIHRoZSBzdGVnbyByb3cgZm9yIGBleHBlY3RlZGAgbXMgc3luY2hyb25vdXNseTsgdGhlIGRhbWFnZSByaWRlcyBvdXQgb24gdGhlIG5leHQgY29tcG9zaXRlZCBmcmFtZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmF3U3RlZ28od2M6IFdlYkNvbnRlbnRzLCBleHBlY3RlZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV2YWxJbih3Yy5kZWJ1Z2dlciwgYF9fcHVwX2RyYXdfc3RlZ29fXygke2V4cGVjdGVkfSlgKTtcbn1cblxuLy8gUmVzb2x2ZXMgd2hlbiB0aGUgcmVuZGVyZXIgY29tbWl0dGVkIHRoZSBzdGVnbyByb3c7IGFybSBCRUZPUkUgZHJhd1N0ZWdvIHRvIGF2b2lkIG1pc3NpbmcgdGhlIGFjay5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0U3RlZ29UaWNrKHdjOiBXZWJDb250ZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzdGVnbyB0aWNrXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIHJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZCBob25vcnMgb25seSB0aGUgTEFTVCBjYWxsIOKAlCByZWdpc3RlciBldmVyeSBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIGxpc3QgYmVsb3cuXG5jb25zdCBQUklWSUxFR0VEX1BSSVZJTEVHRVMgPSB7XG4gIHN0YW5kYXJkOiB0cnVlLFxuICBzZWN1cmU6IHRydWUsXG4gIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgYWxsb3dTZXJ2aWNlV29ya2VyczogdHJ1ZSxcbiAgc3VwcG9ydEZldGNoQVBJOiB0cnVlLFxuICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgc3RyZWFtOiB0cnVlLFxuICBjb2RlQ2FjaGU6IHRydWUsXG59IGFzIGNvbnN0O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGJlZm9yZSBhcHAgaXMgcmVhZHkuXG5wcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQoW1xuICB7IHNjaGVtZTogUFVQX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG4gIHsgc2NoZW1lOiBGUkFNRV9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjLnJlcGxhY2UoXCJodHRwOi8vXCIsIFwiaHR0cHM6Ly9cIikpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcIndcIiwgU3RyaW5nKHNpemUud2lkdGgpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJoXCIsIFN0cmluZyhzaXplLmhlaWdodCkpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzAzLlxuXG5jb25zdCBHUklEID0gMzI7IC8vIHJlc29sdXRpb24taW5kZXBlbmRlbnQgMzLDlzMyIHNhbXBsZSBsYXR0aWNlXG5jb25zdCBCTEFOS19SQU5HRSA9IDg7IC8vIG1heCBwZXItY2hhbm5lbCBzcGF0aWFsIHNwcmVhZCAoMC0yNTUpIHRvIHRyZWF0IGEgZnJhbWUgYXMgY29udGVudGxlc3NcbmV4cG9ydCBjb25zdCBCTEFOS19XQVJOX1JBVElPID0gMC41OyAvLyBibGFuay1mcmFtZSBmcmFjdGlvbiBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmRcblxuLy8gQmxhbmsgPSBuZWFyLXVuaWZvcm06IHBlci1jaGFubmVsIHNwYXRpYWwgcmFuZ2UgYmVsb3cgdGhyZXNob2xkID0gbm90aGluZyByZW5kZXJlZCAod2hpdGUvYmxhY2svYW55IHNvbGlkIHNjcmVlbikuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua0ZyYW1lKGJncmE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgc3RlcFggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHdpZHRoIC8gR1JJRCkpO1xuICBjb25zdCBzdGVwWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gR1JJRCkpO1xuICBsZXQgck1pbiA9IDI1NTtcbiAgbGV0IHJNYXggPSAwO1xuICBsZXQgZ01pbiA9IDI1NTtcbiAgbGV0IGdNYXggPSAwO1xuICBsZXQgYk1pbiA9IDI1NTtcbiAgbGV0IGJNYXggPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBzdGVwWSkge1xuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gc3RlcFgpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgY29uc3QgYiA9IGJncmEucmVhZFVJbnQ4KGkpO1xuICAgICAgY29uc3QgZyA9IGJncmEucmVhZFVJbnQ4KGkgKyAxKTtcbiAgICAgIGNvbnN0IHIgPSBiZ3JhLnJlYWRVSW50OChpICsgMik7XG4gICAgICByTWluID0gTWF0aC5taW4ock1pbiwgcik7XG4gICAgICByTWF4ID0gTWF0aC5tYXgock1heCwgcik7XG4gICAgICBnTWluID0gTWF0aC5taW4oZ01pbiwgZyk7XG4gICAgICBnTWF4ID0gTWF0aC5tYXgoZ01heCwgZyk7XG4gICAgICBiTWluID0gTWF0aC5taW4oYk1pbiwgYik7XG4gICAgICBiTWF4ID0gTWF0aC5tYXgoYk1heCwgYik7XG4gICAgfVxuICB9XG4gIHJldHVybiBNYXRoLm1heChyTWF4IC0gck1pbiwgZ01heCAtIGdNaW4sIGJNYXggLSBiTWluKSA8PSBCTEFOS19SQU5HRTtcbn1cblxuZXhwb3J0IGNsYXNzIEJsYW5rRnJhbWVTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF90b3RhbCA9IDA7XG4gIHByaXZhdGUgX2JsYW5rID0gMDtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgc2FtcGxlKGZyYW1lOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90b3RhbCsrO1xuICAgIGlmIChpc0JsYW5rRnJhbWUoZnJhbWUsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpKSB7XG4gICAgICB0aGlzLl9ibGFuaysrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyYWN0aW9uIG9mIHdyaXR0ZW4gZnJhbWVzIHRoYXQgd2VyZSBjb250ZW50bGVzcyAoMCA9IGFsbCBoYWQgY29udGVudCwgMSA9IGFsbCBibGFuaykuXG4gIGZpbmFsaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsID4gMCA/IHRoaXMuX2JsYW5rIC8gdGhpcy5fdG90YWwgOiAwO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHtcbiAgdHlwZSBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRnJhbWUsXG4gIHR5cGUgSGFyZHdhcmVGcmFtZXNDb250ZXh0LFxuICBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmV4cG9ydCBjb25zdCBGRl9FTkNPREVSX0xJQlZQWF9WUDkgPSBcImxpYnZweC12cDlcIiBhcyBGRlZpZGVvRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgY3R4IGlmIGFueSBzZXR0ZXIvb3BlbjIgdGhyb3dzIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBzdGFjay51c2UoY3R4KTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSB7XG4gICAgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgfVxuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgfVxuICBpZiAob3B0cy5od0ZyYW1lc0N0eCkge1xuICAgIGN0eC5od0ZyYW1lc0N0eCA9IG9wdHMuaHdGcmFtZXNDdHg7XG4gIH1cbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkge1xuICAgIGN0eC5zZXRPcHRpb24oaywgdik7XG4gIH1cbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIGZyYW1lIGlmIGdldEJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShmcmFtZSk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInJlY2VpdmVQYWNrZXRcIik7XG4gICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikge1xuICAgICAgICBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICAgIH1cbiAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgY3R4IGlmIG9wZW4yIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBzdGFjay51c2UocG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIHR5cGUgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICB9XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyBjdHggaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIHN0YWNrLnVzZShjdHgpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSB7XG4gICAgICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICB9XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZnJlZXMgdGhlIGdyYXBoIGlmIGZpbHRlciBzZXR1cCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIHN0YWNrLnVzZShncmFwaCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICB9XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzcmNbaV0hKSkge1xuICAgICAgICBzcmNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIHtcbiAgICAgIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgfVxuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgZmxhZyh2YWw6IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICB0aGlzLmJpdHMucHVzaCh2YWwgPyAxIDogMCk7XG4gIH1cbiAgdWUodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCB2ID0gdmFsICsgMTtcbiAgICBjb25zdCBsZW4gPSAzMiAtIE1hdGguY2x6MzIodik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKDApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gICAgfVxuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChwYWQpO1xuICAgIH1cbiAgfVxuICBjb3B5KHNyYzogbnVtYmVyW10sIHN0YXJ0OiBudW1iZXIsIGxlbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goc3JjW3N0YXJ0ICsgaV0hKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHtcbiAgICAgICAgdGhpcy5fYml0cy5wdXNoKChkYXRhW2ldISA+PiBiKSAmIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgYml0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYml0cztcbiAgfVxuICByZWFkKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB7XG4gICAgICB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgfVxuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuLy8gSEVWQyBOQUwgdW5pdCB0eXBlcyAoVC1SRUMtSC4yNjUgVGFibGUgNy0xKVxuZXhwb3J0IGNvbnN0IE5BTF9CTEFfV19MUCA9IDE2O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfV19SQURMID0gMTk7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9OX0xQID0gMjA7XG5leHBvcnQgY29uc3QgTkFMX1JTVl9JUkFQX1ZDTDIzID0gMjM7XG5leHBvcnQgY29uc3QgTkFMX1ZQUyA9IDMyO1xuZXhwb3J0IGNvbnN0IE5BTF9TUFMgPSAzMztcbmV4cG9ydCBjb25zdCBOQUxfUFBTID0gMzQ7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9QUkVGSVggPSAzOTtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1NVRkZJWCA9IDQwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBuYWxFbmQgPSBiaXRzdHJlYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGogPSBuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRTsgaiA8IGJpdHN0cmVhbS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgYml0c3RyZWFtW2pdID09PSAwICYmXG4gICAgICAgIGJpdHN0cmVhbVtqICsgMV0gPT09IDAgJiZcbiAgICAgICAgKGJpdHN0cmVhbVtqICsgMl0gPT09IDEgfHwgKGogKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baiArIDJdID09PSAwICYmIGJpdHN0cmVhbVtqICsgM10gPT09IDEpKVxuICAgICAgKSB7XG4gICAgICAgIG5hbEVuZCA9IGo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdHlwZSwgbGF5ZXJJZCB9ID0gcGFyc2VOYWxUeXBlKGJpdHN0cmVhbVtuYWxTdGFydF0hLCBiaXRzdHJlYW1bbmFsU3RhcnQgKyAxXSEpO1xuICAgIG5hbHMucHVzaCh7IHR5cGUsIGxheWVySWQsIGRhdGE6IGJpdHN0cmVhbS5zdWJhcnJheShuYWxTdGFydCwgbmFsRW5kKSB9KTtcbiAgICBpID0gbmFsRW5kO1xuICB9XG5cbiAgcmV0dXJuIG5hbHM7XG59XG5cbi8qKiBSZXdyaXRlIG51aF9sYXllcl9pZCBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxMYXllcklkKG5hbDogQnVmZmVyLCBsYXllcklkOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IHR5cGUsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIodHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJld3JpdGUgbmFsX3VuaXRfdHlwZSBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxUeXBlKG5hbDogQnVmZmVyLCBuZXdUeXBlOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IGxheWVySWQsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIobmV3VHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJlbW92ZSBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMg4oaSIDAwIDAwKSBmcm9tIFJCU1AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICsgMiA8IGRhdGEubGVuZ3RoICYmIGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDMpIHtcbiAgICAgIG91dC5wdXNoKDAsIDApO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChkYXRhW2ldISk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKiogSW5zZXJ0IGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMykgZm9yIEFubmV4IEIgY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKG5hbDogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBvdXQucHVzaChuYWxbMF0hLCBuYWxbMV0hKTtcbiAgbGV0IHplcm9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBuYWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoemVyb3MgPT09IDIgJiYgbmFsW2ldISA8PSAzKSB7XG4gICAgICBvdXQucHVzaCgzKTtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgaWYgKG5hbFtpXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBvdXQucHVzaChuYWxbaV0hKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cbiIsIi8vIENvbmZvcm0gTlZFTkMgb3V0cHV0IHRvIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9hdi1mb3VuZGF0aW9uL0hFVkMtVmlkZW8td2l0aC1BbHBoYS1JbnRlcm9wZXJhYmlsaXR5LVByb2ZpbGUucGRmXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBOQUxfQkxBX1dfTFAsXG4gIE5BTF9SU1ZfSVJBUF9WQ0wyMyxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbixcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG4vLyBQVEwgYml0IG9mZnNldHMgd2l0aGluIGVtdWxhdGlvbi1wcmV2ZW50aW9uLXN0cmlwcGVkIE5BTCAoTkFMIGhlYWRlciBpbmNsdWRlZCkuXG5jb25zdCBWUFNfUFRMX0JJVCA9IDQ4OyAvLyAxNiAoTkFMIGhkcikgKyAzMiAoVlBTIHByZWZpeClcbmNvbnN0IFNQU19QVExfQklUID0gMjQ7IC8vIDE2IChOQUwgaGRyKSArIDggKFNQUyBwcmVmaXgpXG5jb25zdCBQVExfVElFUl9CSVQgPSAyO1xuY29uc3QgUFRMX0NPTVBBVDJfQklUID0gMTA7IC8vIHByb2ZpbGVfc3BhY2UoMikgKyB0aWVyKDEpICsgaWRjKDUpICsgY29tcGF0WzAsMV0oMilcbmNvbnN0IFNMSUNFX1RZUEVfQiA9IDA7XG5jb25zdCBTTElDRV9UWVBFX1AgPSAxO1xuXG5mdW5jdGlvbiBzZXRCaXQoYnVmOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCB2YWx1ZTogMCB8IDEpOiB2b2lkIHtcbiAgY29uc3QgYnl0ZSA9IGJpdE9mZnNldCA+PiAzO1xuICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIChiaXRPZmZzZXQgJiA3KSk7XG4gIGNvbnN0IGN1ciA9IGJ1ZltieXRlXSA/PyAwO1xuICBidWZbYnl0ZV0gPSB2YWx1ZSA/IGN1ciB8IG1hc2sgOiBjdXIgJiB+bWFzaztcbn1cblxuZnVuY3Rpb24gcGF0Y2hQdGwobmFsRGF0YTogQnVmZmVyLCBwdGxTdGFydEJpdDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsRGF0YSk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9USUVSX0JJVCwgMCk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9DT01QQVQyX0JJVCwgMSk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHJic3ApO1xufVxuXG4vKiogUGF0Y2ggZXZlcnkgVlBTL1NQUyBOQUwgaW4gYW4gQW5uZXggQiBiaXRzdHJlYW0gc28gUFRMIG1hdGNoZXMgQXBwbGUveDI2NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEhldmNBbHBoYVB0bChiaXRzdHJlYW06IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbSk7XG4gIGlmIChuYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBiaXRzdHJlYW07XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBuYWxzKSB7XG4gICAgbGV0IGRhdGEgPSBuYWwuZGF0YTtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgVlBTX1BUTF9CSVQpO1xuICAgIH0gZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8vIOKUgOKUgOKUgCB1ZSh2KSByZXdyaXRlIGhlbHBlcnMgKFNQUy9QUFMg4oCUIFJCU1AgY2FuIGdyb3cgZnJlZWx5LCBubyBDQUJBQyB0cmFpbGluZykg4pSA4pSAXG5cbmZ1bmN0aW9uIHJld3JpdGVPbmVVZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbCk7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVR3b1VlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWwxOiBudW1iZXIsIG5ld1ZhbDI6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbDEpO1xuICBidy51ZShuZXdWYWwyKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG4vKiogQWxwaGEgU1BTOiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTcHMoc3BzOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBTUFNfU0VRX0lEX0JJVCA9IFNQU19QVExfQklUICsgOTY7IC8vIFBUTCBpcyA5NiBiaXRzIGZvciBvdXIgcHJvZmlsZSBjb25maWdcbiAgcmV0dXJuIHJld3JpdGVPbmVVZShzcHMsIFNQU19TRVFfSURfQklULCAxKTtcbn1cblxuLyoqIEFscGhhIFBQUzogcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEsIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVBwcyhwcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiByZXdyaXRlVHdvVWUocHBzLCAxNiAvKiBhZnRlciBOQUwgaGVhZGVyICovLCAxLCAxKTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWNlIGhlYWRlciByZXdyaXRlIChtdXN0IHByZXNlcnZlIENBQkFDIGJ5dGUgYWxpZ25tZW50KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcmVhZFNlKGJyOiBCaXRSZWFkZXIpOiBudW1iZXIge1xuICBjb25zdCB1ZSA9IGJyLnJlYWRVZSgpO1xuICByZXR1cm4gdWUgJiAxID8gKHVlICsgMSkgPj4gMSA6IC0odWUgPj4gMSk7XG59XG5cbi8vIElubGluZSBzdF9yZWZfcGljX3NldCAoc3BzX2ZsYWc9MCk7IHN0UnBzSWR4ID0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBpbnRlciBwcmVkaWN0aW9uIG1heSB1c2UgcHJldiBzZXQuXG5mdW5jdGlvbiBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyOiBCaXRSZWFkZXIsIG51bURlbHRhUG9jc1NldDA6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBpbnRlckZsYWcgPSBici5yZWFkKDEpOyAvLyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWdcbiAgaWYgKGludGVyRmxhZykge1xuICAgIGNvbnN0IGRlbHRhSWR4TWludXMxID0gYnIucmVhZFVlKCk7IC8vIHN0UnBzSWR4ID09IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgcHJlc2VudFxuICAgIGlmIChkZWx0YUlkeE1pbnVzMSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcHBsZV9hbHBoYTogdW5leHBlY3RlZCBkZWx0YV9pZHhfbWludXMxPSR7ZGVsdGFJZHhNaW51czF9YCk7XG4gICAgfVxuICAgIGJyLnJlYWQoMSk7IC8vIGRlbHRhX3Jwc19zaWduXG4gICAgYnIucmVhZFVlKCk7IC8vIGFic19kZWx0YV9ycHNfbWludXMxXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPD0gbnVtRGVsdGFQb2NzU2V0MDsgaisrKSB7XG4gICAgICBjb25zdCB1c2VkID0gYnIucmVhZCgxKTtcbiAgICAgIGlmICghdXNlZCkge1xuICAgICAgICBici5yZWFkKDEpOyAvLyB1c2VfZGVsdGFfZmxhZ1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBleHBlY3RlZCBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnPTFcIik7XG4gIH1cbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBici5yZWFkKDEpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHtcbiAgICAgIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICB9IGVsc2UgaWYgKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzID4gMSkge1xuICAgICAgYnIucmVhZChNYXRoLmNlaWwoTWF0aC5sb2cyKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzKSkpO1xuICAgIH1cbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY2ZnLnNwc1RlbXBvcmFsTXZwRW5hYmxlZCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZ1xuICAgIH1cbiAgfVxuICBpZiAoY2ZnLnNhb0VuYWJsZWQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fbHVtYV9mbGFnXG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2Nocm9tYV9mbGFnXG4gIH1cbiAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9QIHx8IHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAob3ZlcnJpZGVGbGFnKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgICAgICBici5yZWFkVWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBtdmRfbDFfemVyb19mbGFnXG4gICAgfVxuICAgIGlmIChjZmcuY2FiYWNJbml0UHJlc2VudCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gY2FiYWNfaW5pdF9mbGFnXG4gICAgfVxuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZ1xuICB9XG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBOQUwgaGVhZGVyXG4gIH1cbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBjb3B5IHJlc3Qgb2YgaGVhZGVyIGJpdHNcbiAgfVxuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICB9XG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICB9XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykge1xuICAgICAgYncudygwLCAyKTtcbiAgICB9XG4gIH1cblxuICBidy5mbGFnKDApOyAvLyBzcGxpdHRpbmdfZmxhZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIH1cbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblswXSA9IDFcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblsxXSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbnVoX2xheWVyX2lkX3ByZXNlbnRcbiAgYncudygxLCA2KTsgLy8gbGF5ZXJfaWRfaW5fbnVoWzFdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVsxXSA9IEFVWF9BTFBIQVxuICBidy53KDAsIDQpOyAvLyB2aWV3X2lkX2xlbiA9IDBcblxuICBidy5mbGFnKDApOyAvLyBkaXJlY3RfZGVwZW5kZW5jeV9mbGFnWzFdWzBdXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX2xheWVyX3NldHNcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyc19tYXhfbWludXMxX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gbWF4X3RpZF9yZWZfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X3JlZl9sYXllcnNfYWN0aXZlXG5cbiAgLy8gRkZtcGVnIGxvb3BzIGZyb20gaW5kZXggMiB0byBuYl9wdGwtMSwgc28gbnB0bF9tMT0yIOKGkiAxIGVudHJ5IGF0IGluZGV4IDJcbiAgYncudWUoMik7IC8vIHZwc19udW1fcHJvZmlsZV90aWVyX2xldmVsX21pbnVzMVxuICBidy5mbGFnKDEpOyAvLyBwcm9maWxlX3ByZXNlbnRfZmxhZ1syXVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX29sc3NcbiAgYncudygwLCAyKTsgLy8gZGVmYXVsdF9vdXRwdXRfbGF5ZXJfaWRjXG4gIGJ3LncoMSwgMik7IC8vIHB0bF9pZHhbMV1bMF0gPSAxIChjZWlsX2xvZzIoMykgPSAyIGJpdHMpXG4gIGJ3LncoMiwgMik7IC8vIHB0bF9pZHhbMV1bMV0gPSAyXG5cbiAgYncudWUoMCk7IC8vIHZwc19udW1fcmVwX2Zvcm1hdHNfbWludXMxXG4gIGJ3Lncod2lkdGgsIDE2KTtcbiAgYncudyhoZWlnaHQsIDE2KTtcbiAgYncuZmxhZygxKTsgLy8gY2hyb21hX2FuZF9iaXRfZGVwdGhfdnBzX3ByZXNlbnRcbiAgYncudygxLCAyKTsgLy8gY2hyb21hX2Zvcm1hdF9pZGMgPSA0OjI6MFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgYncuZmxhZygwKTsgLy8gY29uZm9ybWFuY2Vfd2luZG93X3Zwc19mbGFnXG5cbiAgYncuZmxhZygxKTsgLy8gbWF4X29uZV9hY3RpdmVfcmVmX2xheWVyXG4gIGJ3LmZsYWcoMCk7IC8vIHBvY19sc2JfYWxpZ25lZFxuICBidy5mbGFnKDEpOyAvLyBwb2NfbHNiX25vdF9wcmVzZW50XG5cbiAgLy8gRFBCIGZvciBPTFMgMSAoMiBsYXllcnMsIDEgc3ViLWxheWVyKVxuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJfZmxhZ19pbmZvX3ByZXNlbnRcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMClcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMSlcbiAgYncudWUoMCk7IC8vIG1heF9udW1fcmVvcmRlcl9waWNzXG4gIGJ3LnVlKDApOyAvLyBtYXhfbGF0ZW5jeV9pbmNyZWFzZVxuXG4gIGJ3LnVlKDApOyAvLyBkaXJlY3RfZGVwX3R5cGVfbGVuX21pbnVzMlxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X2RpcmVjdF9kZXBlbmRlbmN5X2ZsYWdcbiAgYncudWUoMCk7IC8vIG5vbl92dWlfZXh0ZW5zaW9uX2xlbmd0aFxuICBidy5mbGFnKDApOyAvLyB2cHNfdnVpX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gdnBzX2V4dGVuc2lvbjJfZmxhZ1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGxldGUgYWxwaGEgVlBTIGZyb20gc2NyYXRjaCwgdXNpbmcgdGhlIG9yaWdpbmFsIE5WRU5DIFZQU1xuICogb25seSBhcyBhIHNvdXJjZSBmb3IgdGhlIFBUTCAocHJvZmlsZS90aWVyL2xldmVsKSBieXRlcy5cbiAqIE1hdGNoZXMgeDI2NSA0LjEgRU5BQkxFX0FMUEhBIFZQUyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhVlBTKHZwc0RhdGE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBwdGwgPSBleHRyYWN0UFRMKHZwc0RhdGEpO1xuICBpZiAoIXB0bCkge1xuICAgIHJldHVybiB2cHNEYXRhO1xuICB9XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIHdyaXRlQmFzZVZQUyhidywgcHRsKTtcbiAgd3JpdGVWUFNFeHRlbnNpb24oYncsIHB0bCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBSQlNQIHN0b3AgYml0XG4gIGJ3LmFsaWduKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHJld3JpdGVBbHBoYVBwcywgcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIsIHJld3JpdGVBbHBoYVNwcyB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgZW5jb2RlTmFsSGVhZGVyLFxuICBOQUxfUFBTLFxuICBOQUxfU0VJX1BSRUZJWCxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgdHlwZSBOYWxVbml0LFxuICByZXdyaXRlTmFsTGF5ZXJJZCxcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG4vLyBCR1JBIGFscGhhIOKGkiBZIHBsYW5lIG9mIHBhY2tlZCBZVVY0MjBQIChjYWxsZXIgcHJlLWZpbGxzIFVWPTEyOCk7IFVpbnQzMiBmYXN0IHBhdGg6IEJHUkEgTEUgdTMyID4+PiAyNCA9IEEgYnl0ZS5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lOiBGcmFtZSwgYnVmOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgaWYgKCFzcmMgfHwgIXNyY0xzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZXh0cmFjdEFscGhhOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgfVxuICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgaWYgKHNyYy5ieXRlT2Zmc2V0ICUgNCA9PT0gMCAmJiBzcmNMcyA9PT0gdyAqIDQpIHtcbiAgICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgeVNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNpemU7IGkrKykge1xuICAgICAgYnVmW2ldID0gc3JjMzJbaV0hID4+PiAyNDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIGNvbnN0IHJvd0Jhc2UgPSB5ICogc3JjTHMgKyAzO1xuICAgICAgY29uc3QgZHN0QmFzZSA9IHkgKiB3O1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIHtcbiAgICAgICAgYnVmW2RzdEJhc2UgKyB4XSA9IHNyY1tyb3dCYXNlICsgeCAqIDRdITtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIEFwcGxlIEhFVkMgQWxwaGEgUHJvZmlsZTogYWxwaGEgU1BTIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZD0xLCBhbHBoYSBQUFMgcGljK3NlcSBpZD0xLlxuZnVuY3Rpb24gcmV3cml0ZUFscGhhUGFyYW1TZXQodHlwZTogbnVtYmVyLCBkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAodHlwZSA9PT0gTkFMX1NQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFTcHMoZGF0YSk7XG4gIH1cbiAgaWYgKHR5cGUgPT09IE5BTF9QUFMpIHtcbiAgICByZXR1cm4gcmV3cml0ZUFscGhhUHBzKGRhdGEpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IE5BTF9WUFMgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY29uc3QgYURhdGEgPSByZXdyaXRlQWxwaGFQYXJhbVNldChuYWwudHlwZSwgYWxwaGFOYWwuZGF0YSk7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYURhdGEsIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaHVua3MucHVzaChidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTogQnVmZmVyIHtcbiAgY29uc3QgcGF5bG9hZFR5cGUgPSAxNjU7XG4gIGNvbnN0IHBheWxvYWRTaXplID0gNDtcbiAgY29uc3QgW2gwLCBoMV0gPSBlbmNvZGVOYWxIZWFkZXIoTkFMX1NFSV9QUkVGSVgsIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjICgwID0gdW5zcGVjaWZpZWQvcHJlbXVsdGlwbGllZDsgbWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICB3cml0ZUJpdHMoMCwgMSk7XG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10sIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IE5BTF9WUFMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihuYWwuZGF0YSwgbmFsLnR5cGUsIGNmZyk7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiwgdHlwZSBBVlBhY2tldEZsYWcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB7IGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQYWNrZXQge1xuICBkYXRhOiBCdWZmZXI7XG4gIHB0czogYmlnaW50O1xuICBkdHM6IGJpZ2ludDtcbiAgZHVyYXRpb246IGJpZ2ludDtcbiAgZmxhZ3M6IEFWUGFja2V0RmxhZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdWFsTGF5ZXJNdXhPcHRpb25zIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbi8vIERyYWlucyB0aGUgYmFzZSArIGFscGhhIE5WRU5DIHNlc3Npb25zIGFuZCB3cml0ZXMgaW50ZXJsZWF2ZWQgSEVWQy1hbHBoYSBhY2Nlc3MgdW5pdHMuXG5leHBvcnQgY2xhc3MgRHVhbExheWVyTXV4IHtcbiAgcHJpdmF0ZSBfczogRHVhbExheWVyTXV4T3B0aW9ucztcbiAgcHJpdmF0ZSBfYmFzZVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxwaGFRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoczogRHVhbExheWVyTXV4T3B0aW9ucykge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QgfSA9IHRoaXMuX3M7XG4gICAgLy8gRHJhaW4gZWFjaCBzZXNzaW9uIGZ1bGx5IOKAlCBpbmRlcGVuZGVudCBOVkVOQyBzZXNzaW9ucyBydW4gYSBmcmFtZSBhcGFydCB0cmFuc2llbnRseS5cbiAgICB0aGlzLl9iYXNlUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGJhc2VDdHgsIGJhc2VQa3QsIFwiYmFzZVwiKSkpO1xuICAgIHRoaXMuX2FscGhhUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGFscGhhQ3R4LCBhbHBoYVBrdCwgXCJhbHBoYVwiKSkpO1xuICAgIC8vIGJmPTAg4oaSIG5vIHJlb3JkZXI7IHF1ZXVlIGluZGV4IE4gaXMgdGhlIHNhbWUgZnJhbWUgZm9yIGJvdGguIExlZnRvdmVyIHdhaXRzIGZvciBuZXh0IGRyYWluLlxuICAgIHdoaWxlICh0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmIHRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlUGFpcih0aGlzLl9iYXNlUXVldWUuc2hpZnQoKSEsIHRoaXMuX2FscGhhUXVldWUuc2hpZnQoKSEsIG11eGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnBhaXJlZCBsZWZ0b3ZlcnMgYWZ0ZXIgRU9GID0gdHJ1ZSBiYXNlL2FscGhhIGRlc3luYzsgcmV0dXJucyBhIGRlc2NyaXB0aW9uLCBlbHNlIHVuZGVmaW5lZC5cbiAgZGVzeW5jQWZ0ZXJFb2YoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgIXRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gYGJhc2U9JHt0aGlzLl9iYXNlUXVldWUubGVuZ3RofSwgYWxwaGE9JHt0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aH0gdW5wYWlyZWRgO1xuICB9XG5cbiAgLy8gRUFHQUlOL0VPRiA9IG5vcm1hbCBzdG9wOyBhbnkgb3RoZXIgbmVnYXRpdmUgaXMgYSByZWFsIGZhdWx0LCBub3QgXCJkcmFpbmVkXCIuXG4gIHByaXZhdGUgYXN5bmMgcmVjZWl2ZUFsbChjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxQZW5kaW5nUGFja2V0W10+IHtcbiAgICBjb25zdCBvdXQ6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByZXQgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgaWYgKHJldCA+PSAwKSB7XG4gICAgICAgIG91dC5wdXNoKHRoaXMuc25hcHNob3QocGt0KSk7XG4gICAgICAgIHBrdC51bnJlZigpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXQgPT09IEFWRVJST1JfRUFHQUlOIHx8IHJldCA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30ucmVjZWl2ZVBhY2tldGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc25hcHNob3QocGt0OiBQYWNrZXQpOiBQZW5kaW5nUGFja2V0IHtcbiAgICAvLyBwa3QuZGF0YSBpcyBuYXRpdmUgbWVtb3J5IGZyZWVkIG9uIHVucmVmIOKAlCBjb3B5IGJlZm9yZSBxdWV1ZWluZy5cbiAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuZnJvbShwa3QuZGF0YSEpLCBwdHM6IHBrdC5wdHMsIGR0czogcGt0LmR0cywgZHVyYXRpb246IHBrdC5kdXJhdGlvbiwgZmxhZ3M6IHBrdC5mbGFncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZVBhaXIoYmFzZTogUGVuZGluZ1BhY2tldCwgYWxwaGE6IFBlbmRpbmdQYWNrZXQsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYmFzZUN0eCwgc3RyZWFtLCBoZXZjQ2ZnIH0gPSB0aGlzLl9zO1xuICAgIC8vIFBhdGNoIGluLWJhbmQgVlBTL1NQUyBQVEwgYml0cyBmb3IgQXBwbGUtVlRCIGNvbXBhdCAoZW5jb2RlciByZXBlYXRzIGhlYWRlcnMgcGVyIElEUikuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlLmRhdGEpLCBzcGxpdE5hbFVuaXRzKGFscGhhLmRhdGEpLCBoZXZjQ2ZnKTtcbiAgICAvLyBkYXRhIHNldHRlciB3aXBlcyBwdHMvZHRzL2R1cmF0aW9uL2ZsYWdzIOKAlCByZXN0b3JlOyBmbGFncycgS0VZIGJpdCBkcml2ZXMgbW92IHN0c3MuXG4gICAgYmFzZVBrdC5kYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpO1xuICAgIGJhc2VQa3QucHRzID0gYmFzZS5wdHM7XG4gICAgYmFzZVBrdC5kdHMgPSBiYXNlLmR0cztcbiAgICBiYXNlUGt0LmR1cmF0aW9uID0gYmFzZS5kdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGJhc2UuZHVyYXRpb247XG4gICAgYmFzZVBrdC5mbGFncyA9IGJhc2UuZmxhZ3M7XG4gICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gUGFyc2UgTlZFTkMgU1BTL1BQUyBleHRyYWRhdGEgYXQgZW5jb2RlciBpbml0IHRvIGRlcml2ZSBzbGljZS1oZWFkZXIgcGFyc2VyIGZsYWdzOyB0aHJvd3MgaWYgTlZFTkMgZGVmYXVsdHMgc2hpZnQuXG5cbmltcG9ydCB7IEJpdFJlYWRlciB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgTkFMX1BQUywgTkFMX1NQUywgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjtcbiAgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZhaWwoZmllbGQ6IHN0cmluZywgZ290OiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYGhldmNfYWxwaGE6IE5WRU5DIFNQUy9QUFMgdW5zdXBwb3J0ZWQ6ICR7ZmllbGR9PSR7Z290fSwgZXhwZWN0ZWQgJHtleHBlY3RlZH1gKTtcbn1cblxuZnVuY3Rpb24gc2tpcFB0bChicjogQml0UmVhZGVyLCBtYXhTdWJMYXllcnM6IG51bWJlcik6IHZvaWQge1xuICBici5yZWFkKDIgKyAxICsgNSk7IC8vIHByb2ZpbGVfc3BhY2UsIHRpZXIsIHByb2ZpbGVfaWRjXG4gIGJyLnJlYWQoMzIpOyAvLyBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ1swLi4zMV1cbiAgYnIucmVhZCg0OCk7IC8vIDQgc291cmNlL3BhY2tlZCBmbGFncyArIDQzIGNvbnN0cmFpbnQvcmVzZXJ2ZWQgKyAxIGluYmxkXG4gIGJyLnJlYWQoOCk7IC8vIGxldmVsX2lkY1xuICBjb25zdCBzdWJQcm9maWxlUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc3ViTGV2ZWxQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgc3ViUHJvZmlsZVByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgICBzdWJMZXZlbFByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBpZiAobWF4U3ViTGF5ZXJzID4gMCkge1xuICAgIGZvciAobGV0IGkgPSBtYXhTdWJMYXllcnM7IGkgPCA4OyBpKyspIHtcbiAgICAgIGJyLnJlYWQoMik7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBpZiAoc3ViUHJvZmlsZVByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCArIDMyICsgNDgpO1xuICAgIH1cbiAgICBpZiAoc3ViTGV2ZWxQcmVzZW50W2ldKSB7XG4gICAgICBici5yZWFkKDgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNwcyhzcHNSYnNwOiBCdWZmZXIpOiB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIoc3BzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IG1heFN1YkxheWVycyA9IGJyLnJlYWQoMyk7XG4gIC8vIGFscGhhX2Rhcndpbi5yZXdyaXRlQWxwaGFTcHMgKyB2cHMuZXh0cmFjdFBUTCBoYXJkY29kZSA5Ni1iaXQgUFRMIOKAlCBvbmx5IHZhbGlkIHdoZW4gc3ViX2xheWVycz0wLlxuICBpZiAobWF4U3ViTGF5ZXJzICE9PSAwKSB7XG4gICAgZmFpbChcInNwc19tYXhfc3ViX2xheWVyc19taW51czFcIiwgbWF4U3ViTGF5ZXJzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZ1xuICBza2lwUHRsKGJyLCBtYXhTdWJMYXllcnMpO1xuICBici5yZWFkVWUoKTsgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IGNocm9tYUZvcm1hdCA9IGJyLnJlYWRVZSgpO1xuICBpZiAoY2hyb21hRm9ybWF0ID09PSAzKSB7XG4gICAgZmFpbChcImNocm9tYV9mb3JtYXRfaWRjXCIsIGNocm9tYUZvcm1hdCwgXCLiiaAzXCIpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzXG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlc1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGNvbnN0IGxvZzJNYXhQb2NMc2IgPSBici5yZWFkVWUoKSArIDQ7XG4gIGNvbnN0IHN1Yk9yZGVySW5mbyA9IGJyLnJlYWQoMSk7XG4gIGNvbnN0IG9yZGVyQ291bnQgPSBzdWJPcmRlckluZm8gPyBtYXhTdWJMYXllcnMgKyAxIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckNvdW50OyBpKyspIHtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJzY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBhbXBfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHNhb0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJwY21fZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBjb25zdCBudW1TdFJwcyA9IGJyLnJlYWRVZSgpO1xuICBpZiAobnVtU3RScHMgPiAxKSB7XG4gICAgZmFpbChcIm51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0c1wiLCBudW1TdFJwcywgXCLiiaQxXCIpO1xuICB9XG4gIGxldCBudW1EZWx0YVBvY3NTZXQwID0gMDtcbiAgaWYgKG51bVN0UnBzID09PSAxKSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgbnVtRGVsdGFQb2NzU2V0MCA9IG51bU5lZyArIG51bVBvcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChsb25nVGVybVJlZlBpY3NQcmVzZW50KSB7XG4gICAgZmFpbChcImxvbmdfdGVybV9yZWZfcGljc19wcmVzZW50X2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IHNwc1RlbXBvcmFsTXZwRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIHJldHVybiB7XG4gICAgbG9nMk1heFBvY0xzYixcbiAgICBzYW9FbmFibGVkLFxuICAgIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bVN0UnBzLFxuICAgIG51bURlbHRhUG9jc1NldDAsXG4gICAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCxcbiAgICBzcHNUZW1wb3JhbE12cEVuYWJsZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHBzKHBwc1Jic3A6IEJ1ZmZlcik6IHsgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjsgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihwcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19waWNfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkVWUoKTsgLy8gcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWQoMSk7IC8vIGRlcGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gb3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFnXG4gIGNvbnN0IG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzID0gYnIucmVhZCgzKTtcbiAgaWYgKG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzICE9PSAwKSB7XG4gICAgZmFpbChcIm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0c1wiLCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cywgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIHNpZ25fZGF0YV9oaWRpbmdfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IGNhYmFjSW5pdFByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIGluaXRfcXBfbWludXMyNiAoc2UsIGJ1dCB1ZSBwYXJzZXIgZmluZSB0byBhZHZhbmNlKVxuICBici5yZWFkKDEpOyAvLyBjb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7IC8vIGN1X3FwX2RlbHRhX2VuYWJsZWQg4oaSIGRpZmZfY3VfcXBfZGVsdGFfZGVwdGhcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NiX3FwX29mZnNldFxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NyX3FwX29mZnNldFxuICBici5yZWFkKDEpOyAvLyBwcHNfc2xpY2VfY2hyb21hX3FwX29mZnNldHNfcHJlc2VudF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9iaXByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc3F1YW50X2J5cGFzc19lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwidGlsZXNfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBlbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGNvbnN0IGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCA9IGJyLnJlYWQoMSk7XG4gIGxldCBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gZmFsc2U7XG4gIGlmIChkZWJsb2NraW5nQ29udHJvbFByZXNlbnQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWdcbiAgICBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gYnIucmVhZCgxKSA9PT0gMTsgLy8gcHBzX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2FibGVkX2ZsYWdcbiAgICBpZiAoIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZFVlKCk7IC8vIGJldGEvdGMgb2Zmc2V0cyAoc2UgdmlhIHVlIGFkdmFuY2UpXG4gICAgfVxuICB9XG4gIC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIHByZXNlbnQgaWZmIFBQUyBhY3Jvc3Mtc2xpY2VzIGVuYWJsZWQgJiYgIXNsaWNlX2RlYmxvY2tpbmdfZGlzYWJsZWQuXG4gIGNvbnN0IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnID0gcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgJiYgIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGU7XG4gIHJldHVybiB7IGNhYmFjSW5pdFByZXNlbnQsIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhleHRyYWRhdGE6IEJ1ZmZlcik6IE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGV4dHJhZGF0YSk7XG4gIGNvbnN0IHNwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfU1BTKTtcbiAgY29uc3QgcHBzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9QUFMpO1xuICBpZiAoIXNwcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFNQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgfVxuICBpZiAoIXBwcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFBQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgfVxuICBjb25zdCBzID0gcGFyc2VTcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzcHMuZGF0YSkpO1xuICBjb25zdCBwID0gcGFyc2VQcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihwcHMuZGF0YSkpO1xuICByZXR1cm4geyAuLi5zLCAuLi5wIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgRkZfRU5DT0RFUl9IRVZDX05WRU5DLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4uL3ZpZGVvdG9vbGJveFwiO1xuaW1wb3J0IHsgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IER1YWxMYXllck11eCB9IGZyb20gXCIuL2R1YWxfbGF5ZXJfbXV4XCI7XG5pbXBvcnQgeyB0eXBlIE52ZW5jSGV2Y0NvbmZpZywgcGFyc2VOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIE52ZW5jU3RhdGUge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGFscGhhU3dGcmFtZTogRnJhbWU7XG4gIGFscGhhQnVmOiBCdWZmZXI7XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9tdXg6IER1YWxMYXllck11eDtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fbXV4ID0gbmV3IER1YWxMYXllck11eCh7XG4gICAgICBiYXNlQ3R4OiBzLmJhc2VDdHgsXG4gICAgICBhbHBoYUN0eDogcy5hbHBoYUN0eCxcbiAgICAgIGJhc2VQa3Q6IHMuYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0OiBzLmFscGhhUGt0LFxuICAgICAgc3RyZWFtOiBzLnN0cmVhbSxcbiAgICAgIGhldmNDZmc6IHMuaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICAvLyB0aWVyPW1haW4gbWF0Y2hlcyBBcHBsZSBWaWRlb1Rvb2xib3g7IG1hY09TIENocm9tZSByZXF1aXJlcyBNYWluIHRpZXIgZm9yIEhFVkMgYWxwaGEgZGVjb2RlLlxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiwgdGllcjogXCJtYWluXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IChOVkVOQyBjb252ZXJ0cywgbm8gQ1BVIFNXUyk7IHN0YWNrIGZyZWVzIGV2ZXJ5IG5hdGl2ZSBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzLCBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGJhc2VDdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKSk7XG4gICAgY29uc3QgYWxwaGFDdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIikpO1xuXG4gICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgfVxuICAgIGNvbnN0IGhldmNDZmcgPSBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhiYXNlQ3R4LmV4dHJhRGF0YSk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgIGNvbnN0IHVuaWZpZWQgPSBidWlsZFVuaWZpZWRFeHRyYWRhdGEoe1xuICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUN0eC5leHRyYURhdGEsXG4gICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG4gICAgLy8gQXBwbGUtVlRCIGNvbXBhdDogcmV3cml0ZSBWUFMrU1BTIFBUTCBiaXRzIHRvIG1hdGNoIHgyNjUvVlRCIG91dHB1dCAodGllcj1NYWluLCBjb21wYXRbMl09MSkuXG4gICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKHVuaWZpZWQpO1xuXG4gICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAvLyBZVVY0MjBQIGNocm9tYSBwbGFuZXMgYXJlIGNlaWwody8yKcOXY2VpbChoLzIpOyBmbG9vciB1bmRlcmZsb3dzIG9uIG9kZCBkaW1lbnNpb25zLlxuICAgIGNvbnN0IGNocm9tYVNpemUgPSAoKHdpZHRoICsgMSkgPj4gMSkgKiAoKGhlaWdodCArIDEpID4+IDEpO1xuICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgY2hyb21hU2l6ZSAqIDIpO1xuICAgIGFscGhhQnVmLmZpbGwoMTI4LCB5U2l6ZSk7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3QgYWxwaGFQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVN3RnJhbWUgPSBzdGFjay51c2UobWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCkpO1xuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgIGJhc2VDdHgsXG4gICAgICBhbHBoYUN0eCxcbiAgICAgIGJhc2VQa3QsXG4gICAgICBhbHBoYVBrdCxcbiAgICAgIHN0cmVhbSxcbiAgICAgIGFscGhhU3dGcmFtZSxcbiAgICAgIGFscGhhQnVmLFxuICAgICAgaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUsIGFscGhhQnVmIH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuX3B0cysrO1xuXG4gICAgLy8gRXh0cmFjdCB0aGUgYWxwaGEgcGxhbmUgYmVmb3JlIGJhc2Uuc2VuZEZyYW1lIOKAlCB0aGUgZW5jb2RlciB1bnJlZnMgdGhlIGlucHV0IGZyYW1lLlxuICAgIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWUsIGFscGhhQnVmKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLm1ha2VXcml0YWJsZSgpLCBcImFscGhhU3cubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUuZnJvbUJ1ZmZlcihhbHBoYUJ1ZiksIFwiYWxwaGFTdy5mcm9tQnVmZmVyXCIpO1xuICAgIGFscGhhU3dGcmFtZS5wdHMgPSBwdHM7XG4gICAgYWxwaGFTd0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYmFzZUN0eCwgXCJiYXNlXCIpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmFscGhhQ3R4LCBcImFscGhhXCIpO1xuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gICAgY29uc3QgZGVzeW5jID0gdGhpcy5fbXV4LmRlc3luY0FmdGVyRW9mKCk7XG4gICAgaWYgKGRlc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6ICR7ZGVzeW5jfWApO1xuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgb24gY3JlYXRpb24tb3JkZXIgc2Vzc2lvbiBmcmVlIOKAlCBMSUZPIGRlc3Ryb3kgYXZvaWRzIGl0IChmb3J1bSAvdC8yNjk5NzQpLlxuICAgIGFscGhhQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgLy8gRU9GIGZsdXNoOyBFQUdBSU4vRU9GIHJldHVybnMgYXJlIGJlbmlnbiAoYWxyZWFkeS1kcmFpbmluZyBlbmNvZGVyKS5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRW9mKGN0eDogQ29kZWNDb250ZXh0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9PSBBVkVSUk9SX0VBR0FJTiAmJiByZXQgIT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnNlbmRGcmFtZShudWxsKWApO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgQVZQaXhlbEZvcm1hdCwgRkZWaWRlb0VuY29kZXIgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IGNvZGVjTmFtZSwgY29kZWNUYWcsIGNvZGVjT3B0cywgbXV4ZXIsIC4uLnJlc3QgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKGNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBWaWRlbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtjb2RlY05hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgY3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIikpO1xuICAgIGNvbnN0IHBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZDT0xfUkFOR0VfSlBFRyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGh3OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ub29sYm94RW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb1Rvb2xib3hFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX3ZpZGVvdG9vbGJveCBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZGlzcG9zZXMgY3R4L3BrdCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIHN0YWNrLnVzZShjdHgpO1xuICAgIGNvbnN0IHBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIHZpZGVvIGVuY29kZXIgaWYgQ29kZWNTdGF0ZS5jcmVhdGUgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgY29uc3QgdmlkZW8gPSBzdGFjay51c2UoXG4gICAgYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgICAgYml0cmF0ZSxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSksXG4gICk7XG4gIGNvbnN0IGNvZGVjID0gc3RhY2sudXNlKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4geyB2aWRlbywgY29kZWMsIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBEaWN0aW9uYXJ5LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBTdHJlYW0ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIC8vICtmYXN0c3RhcnQgcmVsb2NhdGVzIG1vb3YgdG8gZmlsZSBmcm9udCBvbiB3cml0ZVRyYWlsZXIgc28gcGxheWVycyBjYW4gYmVnaW4gcGxheWJhY2sgYmVmb3JlIGZ1bGwgZG93bmxvYWQuXG4gICAgdXNpbmcgb3B0cyA9IERpY3Rpb25hcnkuZnJvbU9iamVjdCh7IG1vdmZsYWdzOiBcIitmYXN0c3RhcnRcIiB9KTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG9wdHMpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZELlxuICAgICAgICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEFsd2F5cyBmcmVlIHRoZSBuYXRpdmUgY29udGV4dCDigJQgZXZlbiBhIG5ldmVyLW9wZW5lZCBtdXhlciBhbGxvY2F0ZWQgb25lIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yNC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUh3VmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciwgdHlwZSBWaWRlb1NldHVwIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkge1xuICAgICAgcmV0dXJuIFwid2VibVwiO1xuICAgIH1cbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIubXA0XCIpIHx8IGxvd2VyLmVuZHNXaXRoKFwiLm1vdlwiKSkge1xuICAgICAgcmV0dXJuIFwibXA0XCI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBtdXhlci9lbmNvZGVycyBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgbXV4ZXIgPSBzdGFjay51c2UobmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSkpO1xuICAgIGNvbnN0IHNldHVwID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIiA/IGF3YWl0IE91dHB1dFNpbmsubXA0VmlkZW8ob3B0cywgbXV4ZXIpIDogYXdhaXQgT3V0cHV0U2luay53ZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGlmIChzZXR1cC52aWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLnZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmh3VmlkZW8pIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5od1ZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmNvZGVjKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuY29kZWMpO1xuICAgIH1cbiAgICAvLyBPbmx5IGEgc2luay1vd25lZCBodyBkZXZpY2UgaXMgb3VycyB0byBmcmVlIGhlcmU7IGEgc2hhcmVkIGRldmljZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS5cbiAgICBpZiAoc2V0dXAub3duc0h3ICYmIHNldHVwLmh3KSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuaHcpO1xuICAgIH1cbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgT3V0cHV0U2luay5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGF1ZGlvKSB7XG4gICAgICBzdGFjay51c2UoYXVkaW8pO1xuICAgIH1cbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi5zZXR1cCwgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7XG4gICAgICAgIGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsXG4gICAgICAgIFwiY3B1LXVzZWRcIjogXCI4XCIsXG4gICAgICAgIFwicm93LW10XCI6IFwiMVwiLFxuICAgICAgICB0aHJlYWRzOiBcIjJcIixcbiAgICAgIH0sXG4gICAgICBiaXRyYXRlOiA0XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB2aWRlbyxcbiAgICAgIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSxcbiAgICAgIG93bnNIdzogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGF1ZGlvRm9yKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIC8vIE9wdXMgcmVqZWN0cyA0NC4xay5cbiAgICBjb25zdCBjZmcgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLFxuICAgICAgICAgICAgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQk9QVVMsXG4gICAgICAgICAgfTtcbiAgICByZXR1cm4gQXVkaW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICAuLi5jZmcsXG4gICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICBiaXRyYXRlOiAxMjhfMDAwLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKHNyYyk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYXVkaW8/LmVuY29kZShwY20sIHRoaXMuX3MubXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgYXVkaW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgb3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZXMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGRpc3Bvc2Ugc2hhcmVkSHcgKyBhbnkgc2lua3MgYWxyZWFkeSBidWlsdCBpZiBhIGxhdGVyIHNpbmsgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc2hhcmVkSHcpIHtcbiAgICAgIHN0YWNrLnVzZShzaGFyZWRIdyk7XG4gICAgfVxuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzdGFjay51c2Uoc2luayk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zLnNpbmtzLm1hcCgoc2luaykgPT4gc2luay5lbmNvZGVCR1JBKGZyYW1lKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3Mub3B0cztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgICAgYXdhaXQgc2luay5lbmNvZGVBdWRpbyhwY20pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZnJvbUJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBmcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMy5cblxuLy8gRnJhbWUtZHJvcCBxdWFsaXR5IHNjb3JlICgwID0gcGVyZmVjdCwgMSA9IHdvcnN0KTogZ2xvYmFsIGRyb3AgcmF0ZSBhbmQgbG9jYWwgYnVyc3Qgc2V2ZXJpdHkgY29tYmluZWQgdmlhIDEtKDEtZykoMS1sKS5cbmV4cG9ydCBpbnRlcmZhY2UgRnJhbWVEcm9wU2NvcmUge1xuICBnbG9iYWw6IG51bWJlcjtcbiAgbG9jYWw6IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBleHBlY3RlZDogbnVtYmVyO1xuICBhY3R1YWw6IG51bWJlcjtcbiAgbWF4QnVyc3Q6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYW1lRHJvcFN0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnBzOiBudW1iZXI7XG4gIHByaXZhdGUgX2FjdHVhbCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRCdXJzdCA9IDA7XG4gIHByaXZhdGUgX2J1cnN0czogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihmcHM6IG51bWJlcikge1xuICAgIHRoaXMuX2ZwcyA9IGZwcztcbiAgfVxuXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICBmaW5hbGl6ZSgpOiBGcmFtZURyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVFcXVhbHMoYTogU2l6ZSwgYjogU2l6ZSkge1xuICByZXR1cm4gYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgdHlwZSB7IFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8xNi5cblxuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBuYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5pbnRlcmZhY2UgU2NyZWVuc2hvdFRhcmdldCB7XG4gIG1zOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JlZW5zaG90T3B0aW9ucyB7XG4gIG1hcmtzOiBudW1iZXJbXTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbn1cblxuLy8gRHVtcHMgcGFpbnRlZCBCR1JBIGZyYW1lcyB0byBQTkcgYXQgcmVxdWVzdGVkIHNlY29uZCBtYXJrczsgcmVzdWx0IG9yZGVyIHRyYWNrcyBpbnB1dCBvcmRlci5cbmV4cG9ydCBjbGFzcyBTY3JlZW5zaG90VGFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nOiBTY3JlZW5zaG90VGFyZ2V0W107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvbmUgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93cml0ZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3M6IFNjcmVlbnNob3RPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyID0gZGlybmFtZShfcy5vdXRGaWxlc1swXSA/PyBcIi5cIik7XG4gICAgdGhpcy5fcGVuZGluZyA9IF9zLm1hcmtzXG4gICAgICAubWFwKChzZWMsIGluZGV4KSA9PiAoeyBtczogc2VjICogMTAwMCwgaW5kZXgsIHBhdGg6IGpvaW4oZGlyLCBgc2NyZWVuc2hvdF8ke2luZGV4fS5wbmdgKSB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm1zIC0gYi5tcyk7XG4gIH1cblxuICAvLyBEdW1wIGV2ZXJ5IG1hcmsgd2hvc2Ugc2Vjb25kIGhhcyBiZWVuIHJlYWNoZWQgYnkgdGhpcyBmcmFtZS5cbiAgY2FwdHVyZShjdXJyZW50VGltZU1zOiBudW1iZXIsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5fcGVuZGluZ1swXSEubXMgPD0gY3VycmVudFRpbWVNcykge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGJncmEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY29yZGluZyBvdmVyOiBzbmFwIGFueSBtYXJrIHBhc3QgdGhlIGxhc3QgZnJhbWUgb250byBpdCwgdGhlbiB3cml0ZSBhbGwgc2hvdHMgb3V0LlxuICBhc3luYyBmaW5pc2goZmluYWxCZ3JhPzogQnVmZmVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHdoaWxlIChmaW5hbEJncmEgJiYgdGhpcy5fcGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgZmluYWxCZ3JhKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fd3JpdGVzKTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2RvbmUuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKChbLCBwYXRoXSkgPT4gcGF0aCk7XG4gIH1cblxuICBwcml2YXRlIHRha2UodGFyZ2V0OiBTY3JlZW5zaG90VGFyZ2V0LCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcG5nID0gbmF0aXZlSW1hZ2UuY3JlYXRlRnJvbUJpdG1hcChiZ3JhLCB7IHdpZHRoLCBoZWlnaHQgfSkudG9QTkcoKTtcbiAgICB0aGlzLl9kb25lLnNldCh0YXJnZXQuaW5kZXgsIHRhcmdldC5wYXRoKTtcbiAgICB0aGlzLl93cml0ZXMucHVzaCh3cml0ZUZpbGUodGFyZ2V0LnBhdGgsIHBuZykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBBYm9ydCBiYWlscyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHJldHJ5aW5nOyBzaWduYWwgaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIHdpcmVzIGl0IChmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0Pih7XG4gIGZuLFxuICBtYXhBdHRlbXB0cyA9IDMsXG4gIHRpbWVvdXQsXG4gIHNpZ25hbCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcCgyICoqIGF0dGVtcHQgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNPVVJDRV9QQVRURVJOLnRlc3Qoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3RvY29sID0gYCR7c291cmNlLnNwbGl0KFwiOlwiKVswXX06YDtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IFVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vYmFzZS9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4uL2Jhc2Uvd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5jb25zdCBMT0NBTF9TQ0hFTUVTID0gW1wicHVwOlwiLCBcInB1cC1mcmFtZTpcIiwgXCJmaWxlOlwiLCBcImRhdGE6XCIsIFwiYmxvYjpcIiwgXCJjaHJvbWUtZXh0ZW5zaW9uOlwiLCBcImRldnRvb2xzOlwiXTtcblxuZnVuY3Rpb24gaXNMb2NhbFNjaGVtZSh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHMgb2YgTE9DQUxfU0NIRU1FUykge1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aChzKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xuICBzdHViTWVkaWE/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSwgc3R1Yk1lZGlhIH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDI1Nik7XG4gIGNvbnN0IGV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBXYWl0YWJsZUV2ZW50PigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHdhaXQoa2V5OiBzdHJpbmcsIG9uVGltZW91dD86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBXYWl0YWJsZUV2ZW50KCk7XG4gICAgZXZlbnRzLnNldChrZXksIGV2ZW50KTtcbiAgICBhd2FpdCBldmVudC53YWl0KHsgdGltZW91dDogNV8wMDAsIG9uVGltZW91dCB9KS5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICAvLyBTd2FwIG1lZGlhIGZvciBhIGZyYW1lLXNlcnZlciBzdHViICh0cnVlIGludHJpbnNpYyBzaXplL2R1cmF0aW9uKSBzbyBCbGluayBsYXlzIG91dCBsaWtlIENocm9tZS5cbiAgICBpZiAoc3R1Yk1lZGlhICYmIGRldGFpbHMucmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCIgJiYgIXVybC5zdGFydHNXaXRoKFwicHVwLWZyYW1lOlwiKSkge1xuICAgICAgY2FsbGJhY2soe1xuICAgICAgICByZWRpcmVjdFVSTDogYHB1cC1mcmFtZTovL3N0dWI/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTG9jYWxTY2hlbWUodXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2FpdChrZXksICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgcmVzcG9uc2VIZWFkZXJzIH0sIGNhbGxiYWNrKSA9PiB7XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uQ29tcGxldGVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY29tcGxldGVkOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgc3RhdHVzQ29kZTogZGV0YWlscy5zdGF0dXNDb2RlLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcblxuICByZXEub25FcnJvck9jY3VycmVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBjb25zdCB7IHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlIH0gPSBkZXRhaWxzO1xuICAgIC8vIFN0dWJiZWQgbWVkaWEgZG93bmdyYWRlczogRVJSX0FCT1JURUQgaXMganVzdCB0aGUgbG9hZGVyIHJlc3RhcnRpbmcgb250byB0aGUgY3Jvc3Mtc2NoZW1lIHJlZGlyZWN0LlxuICAgIGNvbnN0IG1lZGlhID0gc3R1Yk1lZGlhICYmIHJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiO1xuICAgIGNvbnN0IGxldmVsID0gbWVkaWEgPyAoZXJyb3IgPT09IFwibmV0OjpFUlJfQUJPUlRFRFwiID8gXCJkZWJ1Z1wiIDogXCJ3YXJuXCIpIDogXCJlcnJvclwiO1xuICAgIGxvZ2dlcltsZXZlbF0oVEFHLCBgZXJyb3I6YCwgeyBrZXksIHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlLCBzb3VyY2UgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwdXBBdWRpb1ByZWxvYWQsIHB1cFJlbmRlclByZWxvYWQsIHB1cFNob290UHJlbG9hZCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcbmNvbnN0IENPTlNPTEVfSUdOT1JFUyA9IFtgJWNFbGVjdHJvbiBTZWN1cml0eSBXYXJuaW5nYCwgXCJNaXhlZCBDb250ZW50OiBUaGUgcGFnZSBhdFwiXTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbiwgdGltZW91dE1zLCB0b2xlcmFudCwgc2lnbmFsIH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgZG9tUmVhZHkgPSBmYWxzZTtcbiAgICAvLyBUb2xlcmFudCBwcm9jZWVkcyBvbiBhIHBhcnRpYWwgRE9NIG9ubHkgYXMgYSB0aW1lb3V0IGZhbGxiYWNrIOKAlCBzdGFydGluZyBvbiBiYXJlIGRvbS1yZWFkeSBsZWF2ZXMgdGhlIGxvYWQgcGVuZGluZyBhbmQgd2VkZ2VzIHZpcnR1YWwgdGltZS5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKHRvbGVyYW50ICYmIGRvbVJlYWR5ID8gdW5kZWZpbmVkIDogVElNRU9VVF9FUlJPUiksIHRpbWVvdXRNcyk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiB1bmtub3duKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGRvbmUoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkb20tcmVhZHk6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9tUmVhZHkgPSB0cnVlO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1zdG9wLWxvYWRpbmc6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYGRpZC1mYWlsLWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoeyB1cmwsIHNvdXJjZSwgY29kZSwgZGVzYyB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgcmVuZGVyLXByb2Nlc3MtZ29uZTogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgZXhpdENvZGUsIHJlYXNvbiB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VXaW5kb3cod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBcImZvcmNlIGNsb3NlXCIpO1xuICAgICAgICB3aW4uZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgZG9uZSgpO1xuICAgIH0sIDEwMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5kZXRhY2goKTtcbiAgICB3aW4ub25jZShcImNsb3NlZFwiLCBkb25lKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFdpbmRvd0NyZWF0ZWRDYWxsYmFjayA9ICh3aW5kb3c6IEJyb3dzZXJXaW5kb3cpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgcmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnM7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgb25DcmVhdGVkPzogV2luZG93Q3JlYXRlZENhbGxiYWNrO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZnVuY3Rpb24gcGlja1ByZWxvYWQocmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocmVuZGVyZXIuZGV0ZXJtaW5pc3RpYykge1xuICAgIHJldHVybiBwdXBTaG9vdFByZWxvYWQ7XG4gIH1cbiAgaWYgKHJlbmRlcmVyLndpdGhBdWRpbykge1xuICAgIHJldHVybiBwdXBBdWRpb1ByZWxvYWQ7XG4gIH1cbiAgcmV0dXJuIHB1cFJlbmRlclByZWxvYWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCB0b2xlcmFudCwgc2lnbmFsLCBvbkNyZWF0ZWQgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHVzZUlubmVyUHJveHkgfSA9IHJlbmRlcmVyO1xuICBjb25zdCBzcmMgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzb3VyY2UpIDogc291cmNlO1xuXG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWluV2lkdGg6IHdpZHRoLFxuICAgIG1pbkhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtYXhXaWR0aDogd2lkdGgsXG4gICAgbWF4SGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgbWluaW1pemFibGU6IGZhbHNlLFxuICAgIG1vdmFibGU6IGZhbHNlLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5TdWJGcmFtZXM6IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JbldvcmtlcjogdHJ1ZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6IGZhbHNlLFxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgICBwcmVsb2FkOiBwaWNrUHJlbG9hZChyZW5kZXJlciksXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHtcbiAgICBzb3VyY2UsXG4gICAgd2luZG93OiB3aW4sXG4gICAgdXNlSW5uZXJQcm94eSxcbiAgICBzdHViTWVkaWE6IHJlbmRlcmVyLmRldGVybWluaXN0aWMsXG4gIH0pO1xuICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuYXR0YWNoKFwiMS4zXCIpO1xuICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcImNvbnNvbGUtbWVzc2FnZVwiLCAoeyBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQgfSkgPT4ge1xuICAgIC8vIERyb3AgaGVhZGxlc3Mgbm9pc2U6IHNlY3VyaXR5IHdhcm5pbmdzIGFuZCBodHRw4oaSaHR0cHMgYXV0by11cGdyYWRlIG5vdGljZXMgZm9yIGludGVybmFsLXByb3h5IGFzc2V0cy5cbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIENPTlNPTEVfSUdOT1JFUy5maW5kKChpKSA9PiBtZXNzYWdlLnN0YXJ0c1dpdGgoaSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZ3MgPSBbVEFHLCBcImNvbnNvbGU6XCIsIHsgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQsIHNvdXJjZSB9XTtcbiAgICBsZXZlbCA9PT0gXCJlcnJvclwiID8gbG9nZ2VyLmVycm9yKC4uLm1zZ3MpIDogbG9nZ2VyLmRlYnVnKC4uLm1zZ3MpO1xuICAgIHJlbmRlcmVyLm9uQ29uc29sZShsZXZlbCwgbWVzc2FnZSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7XG4gICAgICBzb3VyY2UsXG4gICAgICB3aW4sXG4gICAgICBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksXG4gICAgICB0aW1lb3V0TXM6IHJlbmRlcmVyLndpbmRvd1RpbWVvdXQgKiAxMDAwLFxuICAgICAgdG9sZXJhbnQsXG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIHJldHVybiBvcGVuV2luZG93KHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgb25DcmVhdGVkLFxuICAgICAgc2lnbmFsLFxuICAgICAgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50LFxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtGcmFtZVN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvYmxhbmtfZnJhbWVcIjtcbmltcG9ydCB7IHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBGcmFtZURyb3BTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2ZyYW1lX2Ryb3BcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgcGVyaW9kaWNhbCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBdWRpb0Rpc3Bvc2FsLCBhdHRhY2hBdWRpb0xpc3RlbmVycyB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVuZGVyXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RGcmFtZTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNsZWFyU3R1Y2tDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rRnJhbWVTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IEZyYW1lRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGRpc3Bvc2VBdWRpbzogQXVkaW9EaXNwb3NhbCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGJsYW5rU3RhdHMuc2FtcGxlKGZyYW1lKTtcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGVuY29kZUVycm9yID8/PSBzaWduYWw/LnJlYXNvbjtcbiAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZW5jb2RlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG4gICAgbGFzdEZyYW1lID0gY3JvcHBlZDtcbiAgICB0YWtlci5jYXB0dXJlKGN1cnJlbnRUaW1lLCBjcm9wcGVkKTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgY2xlYXJTdHVja0NoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHVjayA+PSAzKSB7XG4gICAgICAgICAgcmVqZWN0ZXI/LihuZXcgRXJyb3IoYHJlbmRlcmVyIHRpbWVvdXQgQCAke3dyaXR0ZW59IGxhc3RUcyAke2xhc3RXcml0dGVufWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3R1Y2srKztcbiAgICAgICAgY29uc3QgYm1wID0gYXdhaXQgd2luLndlYkNvbnRlbnRzLmNhcHR1cmVQYWdlKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgIGlmIChibXAgJiYgIXdpbi5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICAgcGFpbnQodW5kZWZpbmVkLCB1bmRlZmluZWQsIGJtcCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDAgLyBmcHMpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyU3R1Y2tDaGVjaz8uKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICAgIHNjcmVlbnNob3RzID0gYXdhaXQgdGFrZXIuZmluaXNoKGxhc3RGcmFtZSk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IgfHwgd3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IGVuY29kZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIG91dEZpbGVzLCBibGFuaywgc2NyZWVuc2hvdHMsIGphbms6IGRyb3BTdGF0cy5maW5hbGl6ZSgpLmphbmsgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGFib3J0YWJsZSB9IGZyb20gXCIuLi8uLi9iYXNlL3RpbWluZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltWaWRlb11cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlT3B0aW9ucyB7XG4gIGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQ7XG4gIHRpbWVzdGFtcE1zOiBudW1iZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBPbmx5IHRoZSBkZXRlcm1pbmlzdGljIHJlbmRlcmVyIChzaG9vdCkgZHJpdmVzIHRoaXM7IHJlYWwtdGltZSB2aWRlb3Mgc2VsZi10aWNrIHZpYSByQUYgaW4gdGhlIHBhZ2UuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyh7IGZyYW1lLCB0aW1lc3RhbXBNcywgc2lnbmFsIH06IEFkdmFuY2VPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZnJhbWU/LnVybCkge1xuICAgIHJldHVybjtcbiAgfVxuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIHRyeSB7XG4gICAgLy8gU291cmNlIG9wZW5zIGFyZSB3YWxsLXRpbWUgYXN5bmM7IHNldHRsZSB0aGVtIGZpcnN0IHNvIHZpcnR1YWwgdGltZSBjYW4ndCBzdGVwIG9udG8gYSBibGFuaywgbm90LXlldC1vcGVuZWQgPHZpZGVvPi5cbiAgICBhd2FpdCBhYm9ydGFibGUoZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYHdpbmRvdy5fX3B1cF92aWRlb19fJiZ3aW5kb3cuX19wdXBfdmlkZW9fXy5yZWFkeSgpYCksIHNpZ25hbCk7XG4gICAgLy8gTm8gd2FsbC1jbG9jayBjYXA6IGEgc2xvdyBmZXRjaCBkZWxheXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgZHJvcHBpbmcgaXQsIGtlZXBpbmcgLWQgb3V0cHV0IGRldGVybWluaXN0aWMuXG4gICAgYXdhaXQgYWJvcnRhYmxlKFxuICAgICAgZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYHdpbmRvdy5fX3B1cF92aWRlb19fJiZ3aW5kb3cuX19wdXBfdmlkZW9fXy5hZHZhbmNlKCR7dGltZXN0YW1wTXN9KWApLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQWR2YW5jZU9wdGlvbnMsIGFkdmFuY2VWaWRlb3MgfSBmcm9tIFwiLi92aWRlby9hZHZhbmNlXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGFyZ3M6IEFkdmFuY2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgZnJhbWUsIHRpbWVzdGFtcE1zIH0gPSBhcmdzO1xuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhhcmdzKV0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yMy5cblxuaW1wb3J0IHsgRGVtdXhlciwgdHlwZSBEZW11eGVyT3B0aW9ucyB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuXG4vLyBmZm1wZWcgcmVhZC93cml0ZSBkZWFkbGluZSAowrVzKTsgYSBibG9ja2luZyBvcGVuIGlnbm9yZXMgQWJvcnRTaWduYWwsIHNvIHRoaXMgYm91bmRzIGEgc3R1Y2sgQ0ROLlxuY29uc3QgUldfVElNRU9VVF9VUyA9IFwiODAwMDAwMFwiO1xuXG4vLyBmZm1wZWcgb3BlbnMgaHR0cC9odHRwcyB3aXRoIG5hdGl2ZSBieXRlLXJhbmdlIHJlcXVlc3RzLCBzbyBvbmx5IHRoZSBkZWNvZGVkIHJhbmdlcyBkb3dubG9hZC5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuSW5wdXQoc3JjOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxEZW11eGVyPiB7XG4gIGNvbnN0IG9wdGlvbnM6IERlbXV4ZXJPcHRpb25zID0geyBzaWduYWwsIG9wdGlvbnM6IHsgcndfdGltZW91dDogUldfVElNRU9VVF9VUyB9IH07XG4gIHJldHVybiBEZW11eGVyLm9wZW4oc3JjLCBvcHRpb25zKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjUuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgRGVjb2RlciwgRmlsdGVyQVBJIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlZEZyYW1lIHtcbiAgaWR4OiBudW1iZXI7XG4gIGJ1ZjogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZUZyYW1lc09wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgbWV0YTogVmlkZW9NZXRhO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vLyBEZWNvZGUgYSBzb3VyY2UgdG8gZnBzLXJlc2FtcGxlZCwgZGlzcGxheS1zY2FsZWQsIHRpZ2h0LVJHQkEgZnJhbWVzIGluIG9yZGVyIChpZHggPSAxLWJhc2VkIGRlY29kZSBwb3NpdGlvbikuIENvbnN1bWVyIGJhY2twcmVzc3VyZSBpcyBqdXN0IHB1bGxpbmcgc2xvd2VyLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBkZWNvZGVGcmFtZXMoeyBzcmMsIG1ldGEsIHNpZ25hbCB9OiBEZWNvZGVGcmFtZXNPcHRpb25zKTogQXN5bmNHZW5lcmF0b3I8RGVjb2RlZEZyYW1lPiB7XG4gIGF3YWl0IHVzaW5nIGlucHV0ID0gYXdhaXQgb3BlbklucHV0KHNyYywgc2lnbmFsKTtcbiAgY29uc3Qgc3RyZWFtID0gaW5wdXQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwgfSk7XG4gIGNvbnN0IHsgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gbWV0YTtcbiAgY29uc3Qgc2NhbGUgPSBmcmFtZVdpZHRoICE9PSB3aWR0aCB8fCBmcmFtZUhlaWdodCAhPT0gaGVpZ2h0ID8gYHNjYWxlPSR7ZnJhbWVXaWR0aH06JHtmcmFtZUhlaWdodH0sYCA6IFwiXCI7XG4gIHVzaW5nIGZpbHRlciA9IEZpbHRlckFQSS5jcmVhdGUoYGZwcz0ke2Zwc30sJHtzY2FsZX1mb3JtYXQ9cmdiYWAsIHsgc2lnbmFsIH0pO1xuICBsZXQgayA9IDA7XG4gIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZmlsdGVyLmZyYW1lcyhkZWMuZnJhbWVzKGlucHV0LnBhY2tldHMoc3RyZWFtLmluZGV4KSkpKSB7XG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHlpZWxkIHsgaWR4OiArK2ssIGJ1ZjogcGFja1JnYmEoZnJhbWUpIH07XG4gIH1cbn1cblxuLy8gVGlnaHQgUkdCQSBjb3B5IChkcm9wIGxpYmF2IHJvdyBwYWRkaW5nKSBzbyB0aGUgcGFnZSBjYW4gd3JhcCBpdCBzdHJhaWdodCBpbnRvIEltYWdlRGF0YS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJvdyA9IGZyYW1lLndpZHRoICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzcmMuc3ViYXJyYXkoMCwgcm93ICogZnJhbWUuaGVpZ2h0KSk7XG4gIH1cbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHJvdyAqIGZyYW1lLmhlaWdodCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgZnJhbWUuaGVpZ2h0OyB5KyspIHtcbiAgICBzcmMuY29weShvdXQsIHkgKiByb3csIHkgKiBzdHJpZGUsIHkgKiBzdHJpZGUgKyByb3cpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBkZWNvZGVGcmFtZXMgfSBmcm9tIFwiLi9kZWNvZGVcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBERUNPREVfQUhFQUQgPSA0OyAvLyBkZWNvZGUgYSBmZXcgZnJhbWVzIHBhc3QgdGhlIGhpZ2hlc3QgcmVxdWVzdDsgdGhlIHBhZ2UgYWxyZWFkeSBwcmVmZXRjaGVzXG5jb25zdCBLRUVQX0JFSElORCA9IDE2OyAvLyBtaW4gZnJhbWVzIGhlbGQgYmVoaW5kIHRoZSBoZWFkOyBtdXN0IGV4Y2VlZCB0aGUgcGFnZSdzIHByZWZldGNoIGxlYWQgKEFIRUFEPTEwKVxuY29uc3QgTUVNT1JZX0JVREdFVCA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyByZXRhaW4gZGVjb2RlZCBmcmFtZXMgdXAgdG8gdGhpcyBwZXItc2Vzc2lvbiBidWRnZXQgc28gYSBzbWFsbCBsb29waW5nIHZpZGVvIHJlLXNlcnZlcyBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHJlLWRlY29kaW5nXG5jb25zdCBNQVhfUEFTU19SRVRSWSA9IDM7IC8vIHJlLW9wZW4gYSBzdHJlYW1lZCBzb3VyY2UgdGhpcyBtYW55IHRpbWVzIG9uIGEgdHJhbnNpZW50IGRlY29kZSBlcnJvciBiZWZvcmUgcmVwb3J0aW5nIGVuZC1vZi1zdHJlYW1cblxuaW50ZXJmYWNlIFdhaXRlciB7XG4gIGlkeDogbnVtYmVyO1xuICByZXNvbHZlOiAoYjogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vLyBEZW1hbmQtZHJpdmVuIGluLXByb2Nlc3MgZGVjb2RlIChEZW11eGVy4oaSRGVjb2RlcuKGkmZwcy9zY2FsZS9yZ2JhIGZpbHRlcikgc2VydmluZyBmcmFtZSBOIGFzIHRpZ2h0IFJHQkE7IGZvcndhcmQtb25seSDigJQgYSBsb29wL3Jld2luZCByZS1kZWNvZGVzIGZyb20gZnJhbWUgMSB1bmxlc3MgdGhlIHdob2xlIGNsaXAgc3RpbGwgZml0cyB0aGUgbWVtb3J5IGJ1ZGdldC5cbmV4cG9ydCBjbGFzcyBEZWNvZGVTZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYnVmID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBfcmVhZHkgPSAwO1xuICBwcml2YXRlIF93YW50ID0gMTtcbiAgcHJpdmF0ZSBfZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2VuID0gMDtcbiAgcHJpdmF0ZSBfY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfd2FpdGVycyA9IG5ldyBTZXQ8V2FpdGVyPigpO1xuICBwcml2YXRlIF9yZXN1bWU6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAvLyBMZWFkIGZyYW1lcyBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGNvbnRlbnQgaWR4IGlzIG9mZnNldCBwYXN0IHRoZW0uXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xlYWRGcmFtZXM6IG51bWJlcjtcbiAgLy8gRnJhbWVzIGtlcHQgYmVoaW5kIHRoZSBoZWFkOyBhIGNsaXAgdGhhdCBmaXRzIHRoZSBidWRnZXQgcmV0YWlucyBldmVyeSBmcmFtZSwgc28gbG9vcHMgcmUtc2VydmUgZnJvbSBtZW1vcnkuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2tlZXBDb3VudDogbnVtYmVyO1xuICAvLyBSZXNvbHZlcyB3aGVuIHB1bXAoKSBmdWxseSB1bndpbmRzIOKAlCBhd2FpdGVkIG9uIGNsb3NlIHNvIG5vZGUtYXYgZ2VuZXJhdG9ycyBmcmVlIGJlZm9yZSBwcm9jZXNzIHRlYXJkb3duLlxuICBwcml2YXRlIHJlYWRvbmx5IF9wdW1wRG9uZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHRoaXMuX3B1bXBEb25lID0gdGhpcy5wdW1wKCk7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKGlkeCA8IDEpIHtcbiAgICAgIGlkeCA9IDE7XG4gICAgfVxuICAgIGlmIChpZHggPD0gdGhpcy5fbGVhZEZyYW1lcykge1xuICAgICAgaWR4ID0gdGhpcy5fbGVhZEZyYW1lcyArIDE7IC8vIGhvbGQgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZSBhY3Jvc3MgdGhlIGxlYWRcbiAgICB9XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIH1cbiAgICBpZiAoaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIC8vIGZvcndhcmQsIG5vdCB5ZXQgZGVjb2RlZCBpbiB0aGlzIHBhc3NcbiAgICAgIGlmIChpZHggPiB0aGlzLl93YW50KSB7XG4gICAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB9XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZpY3RlZCAobG9vcC9yZXdpbmQpOiBjbGVhciByZWFkeS9kb25lIHN5bmNocm9ub3VzbHkgc28gdGhlIHdyYXAncyBwcmVmZXRjaCBidXJzdCBjb2FsZXNjZXMgaW50byBvbmUgcmVzdGFydCwgbm90IG9uZSBwZXIgZnJhbWUuXG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWl0KGlkeCk7XG4gIH1cblxuICAvLyBBd2FpdCB0aGUgcHVtcCBzbyB0aGUgbm9kZS1hdiBkZW11eGVyL2RlY29kZXIgZ2VuZXJhdG9ycyB1bndpbmQgKGNvbnRleHRzIGZyZWVkKSBiZWZvcmUgdGhlIGNhbGxlciBleGl0cy5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICB0aGlzLl9jdHJsLmFib3J0KCk7XG4gICAgdGhpcy53YWtlKCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICB3LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGVycy5jbGVhcigpO1xuICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgIGF3YWl0IHRoaXMuX3B1bXBEb25lO1xuICB9XG5cbiAgLy8gLWQtb25seSBzdWJzeXN0ZW0sIHNvIG5ldmVyIHRpbWUgb3V0OiBkcmFpbldhaXRlcnMgcmVzb2x2ZXMgb24gZGVjb2RlLCBFT0YsIG9yIGNsb3NlIOKAlCBvdXRwdXQgbmV2ZXIgZGVwZW5kcyBvbiBmZXRjaCBsYXRlbmN5LlxuICBwcml2YXRlIHdhaXQoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB0aGlzLl93YWl0ZXJzLmFkZCh7IGlkeCwgcmVzb2x2ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3VtZTtcbiAgICB0aGlzLl9yZXN1bWUgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gIH1cblxuICAvLyBJbnZhbGlkYXRlIHRoZSBydW5uaW5nIHBhc3MgKG9yIHdha2UgYSBwYXJrZWQgb25lKSBzbyBwdW1wKCkgc3RhcnRzIGEgZnJlc2ggZGVjb2RlIGZyb20gZnJhbWUgMS5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9nZW4rKztcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdGFydDtcbiAgICB0aGlzLl9yZXN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICAgIHRoaXMud2FrZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdW1wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmYWlscyA9IDA7XG4gICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQpIHtcbiAgICAgIGNvbnN0IGdlbiA9IHRoaXMuX2dlbjtcbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgICAgbGV0IGZhaWxlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIFRBRyxcbiAgICAgICAgICAgIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgcGFzcyBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICBmYWlscyA9IDA7XG4gICAgICAgIGNvbnRpbnVlOyAvLyByZXN0YXJ0IHJlcXVlc3RlZCBtaWQtcGFzc1xuICAgICAgfVxuICAgICAgLy8gQSB0aHJvd24gcGFzcyBpcyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgKGUuZy4gYSBzdHJlYW1lZCBsb29wIHJlLW9wZW4pOyByZXRyeSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBFT0YsIHdoaWNoIHdvdWxkIGJsYW5rIHRoZSBmcmFtZS5cbiAgICAgIGlmIChmYWlsZWQgJiYgKytmYWlscyA8PSBNQVhfUEFTU19SRVRSWSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZhaWxzID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIGF3YWl0IHRoaXMudW50aWxSZXN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWNvZGVQYXNzKGdlbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gZGVjb2RlRnJhbWVzKHsgc3JjOiB0aGlzLl9zcmMsIG1ldGE6IHRoaXMubWV0YSwgc2lnbmFsOiB0aGlzLl9jdHJsLnNpZ25hbCB9KTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHsgaWR4LCBidWYgfSBvZiBzdHJlYW0pIHtcbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYXQgPSB0aGlzLl9sZWFkRnJhbWVzICsgaWR4OyAvLyBtYXAgZGVjb2RlIHBvc2l0aW9uIHBhc3QgdGhlIGhlbGQgbGVhZC1nYXAgZnJhbWVzXG4gICAgICB3aGlsZSAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbiAmJiBhdCA+IHRoaXMuZGVtYW5kICsgREVDT0RFX0FIRUFEKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fYnVmLnNldChhdCwgYnVmKTtcbiAgICAgIHRoaXMuX3JlYWR5ID0gYXQ7XG4gICAgICAvLyBEcmFpbiBiZWZvcmUgZXZpY3Q6IHdpdGggd2FudCBmYXIgYWhlYWQgdGhlIGZsb29yIGNvdmVycyB0aGlzIGZyYW1lLCBhbmQgZXZpY3RpbmcgaXQgZmlyc3Qgc3RhcnZlcyBpdHMgd2FpdGVyIGZvcmV2ZXIuXG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgdGhpcy5ldmljdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhaXRlcnMgdGhhdCBzdXJ2aXZlZCBhIHJld2luZCByZXN0YXJ0IGFyZSBzdGlsbCBkZW1hbmQ7IGlnbm9yaW5nIHRoZW0gcGFya3MgdGhlIHBhc3MgYW5kIHN0YXJ2ZXMgdGhlbSBmb3JldmVyLlxuICBwcml2YXRlIGdldCBkZW1hbmQoKTogbnVtYmVyIHtcbiAgICBsZXQgZCA9IHRoaXMuX3dhbnQ7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIGlmICh3LmlkeCA+IGQpIHtcbiAgICAgICAgZCA9IHcuaWR4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfVxuXG4gIHByaXZhdGUgcGF1c2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN1bWUgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUGFyayB1bnRpbCBhIGxvb3AvYmFja3dhcmQgcmVxdWVzdCAob3IgY2xvc2UpIGNhbGxzIHJlcXVlc3RSZXN0YXJ0KCkuXG4gIHByaXZhdGUgdW50aWxSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN0YXJ0ID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLl93YW50IC0gdGhpcy5fa2VlcENvdW50O1xuICAgIGZvciAoY29uc3QgayBvZiB0aGlzLl9idWYua2V5cygpKSB7XG4gICAgICBpZiAoayA8IGZsb29yKSB7XG4gICAgICAgIHRoaXMuX2J1Zi5kZWxldGUoayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbldhaXRlcnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4udGhpcy5fd2FpdGVyc10pIHtcbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoZW50cnkuaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKGhpdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBEZWNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9iZVJlc3VsdCB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogUFRTIChzKSBvZiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBhIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBydW4gaXMgaGVsZCBvbiBpdCwgbGlrZSBDaHJvbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuLy8gTm8gd2FsbC1jbG9jayBjYXA6IG9wZW5JbnB1dCdzIHBlci1yZWFkIHJ3X3RpbWVvdXQgYm91bmRzIGEgc3R1Y2sgc291cmNlLCBhbmQgdGhlIGNhbGxlciByZXRyaWVzIG9uIHRocm93LlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICBhd2FpdCB1c2luZyBkID0gYXdhaXQgb3BlbklucHV0KHNyYyk7XG4gIGNvbnN0IHN0cmVhbSA9IGQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmU6IG5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICBjb25zdCBkdXJhdGlvbiA9IGQuZHVyYXRpb24gPiAwID8gZC5kdXJhdGlvbiA6IDA7XG4gIGNvbnN0IHRiID0gc3RyZWFtLnRpbWVCYXNlLm51bSAvIHN0cmVhbS50aW1lQmFzZS5kZW47XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyB0aHJlYWRDb3VudDogMSB9KTtcbiAgbGV0IGxlYWRHYXAgPSAwO1xuICAvLyBGaXJzdCBjbGVhbiBmcmFtZSdzIFBUUyA9IHdoZXJlIGNvbnRlbnQgYmVnaW5zOyBza2lwIGNvcnJ1cHQgZnJhbWVzIGxpa2UgYSBicm93c2VyLlxuICBvdXRlcjogZm9yIGF3YWl0ICh1c2luZyBwa3Qgb2YgZC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBkZWMuZnJhbWVzKHBrdCkpIHtcbiAgICAgICAgaWYgKGZyYW1lPy5kZWNvZGVFcnJvckZsYWdzICE9PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGVhZEdhcCA9IE1hdGgubWF4KDAsIE51bWJlcihmcmFtZS5wdHMpICogdGIpO1xuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGNvcnJ1cHQgcGFja2V0IOKAlCBza2lwIHRvIHRoZSBuZXh0XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHdpZHRoOiBzdHJlYW0uY29kZWNwYXIud2lkdGgsIGhlaWdodDogc3RyZWFtLmNvZGVjcGFyLmhlaWdodCwgZHVyYXRpb24sIGxlYWRHYXAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDYuXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0gfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb2RlYywgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDksIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3R1YkVuY29kZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuLy8gUmVhbCBwYXJzZWFibGUgbWVkaWEgd2l0aCB0aGUgc291cmNlJ3MgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbiwgc28gQmxpbmsgbGF5cyBvdXQgbGlrZSBDaHJvbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jb2RlU3R1YldlYm0oeyB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiB9OiBTdHViRW5jb2RlT3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9MSUJWUFhfVlA5KTtcbiAgaWYgKCFjb2RlYykge1xuICAgIHRocm93IG5ldyBFcnJvcihgc3R1YjogZW5jb2RlciBub3QgZm91bmQ6ICR7RkZfRU5DT0RFUl9MSUJWUFhfVlA5fWApO1xuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX3N0dWJfJHtyYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKX0ud2VibWApO1xuICB0cnkge1xuICAgIHtcbiAgICAgIGF3YWl0IHVzaW5nIG11eGVyID0gbmV3IEZvcm1hdE11eGVyKHBhdGgpO1xuICAgICAgLy8gVGltZWJhc2UgMS8xMDAwIChmcHMgcGFyYW0pIGxldHMgb25lIHBhY2tldCBjYXJyeSB0aGUgZnVsbCBzb3VyY2UgZHVyYXRpb24gaW4gbXMuXG4gICAgICB1c2luZyBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICAgIHtcbiAgICAgICAgICBjb2RlYyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgZnBzOiAxMDAwLFxuICAgICAgICAgIGJpdHJhdGU6IDEwMF8wMDAsXG4gICAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgICAgICAgICBvcHRpb25zOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdHViQ3R4Lm9wZW4yXCIsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgICB1c2luZyBzdHViID0gbmV3IFN0dWJGcmFtZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IG1zID0gQmlnSW50KE1hdGgubWF4KDEsIE1hdGgucm91bmQoZHVyYXRpb24gKiAxMDAwKSkpO1xuICAgICAgc3R1Yi5mcmFtZS5wdHMgPSAwbjtcbiAgICAgIHN0dWIuZnJhbWUuZHVyYXRpb24gPSBtcztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKHN0dWIuZnJhbWUpLCBcInN0dWJDdHguc2VuZEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCksIFwic3R1YkN0eC5mbHVzaFwiKTtcbiAgICAgIHVzaW5nIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJzdHViQ3R4LnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gbXM7XG4gICAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKHBhdGgpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuLy8gT3ducyB0aGUgYmxhY2sgcGl4ZWwgYnVmZmVyIEFORCBpdHMgemVyby1jb3B5IGZyYW1lIHZpZXcg4oCUIGB1c2luZ2AgcGlucyBib3RoIHVudGlsIGFmdGVyIGVuY29kZS5cbmNsYXNzIFN0dWJGcmFtZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBmcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZjogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgbHVtYSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIGNvbnN0IGNocm9tYSA9IE1hdGguY2VpbCh3aWR0aCAvIDIpICogTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5hbGxvYyhsdW1hICsgY2hyb21hICogMiwgMHg4MCk7XG4gICAgdGhpcy5fYnVmLmZpbGwoMCwgMCwgbHVtYSk7XG4gICAgdGhpcy5mcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcih0aGlzLl9idWYsIHsgd2lkdGgsIGhlaWdodCwgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSk7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuZnJhbWVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uLy4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwgfSBmcm9tIFwiLi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgRGVjb2RlU2Vzc2lvbiB9IGZyb20gXCIuL2RlY29kZV9zZXNzaW9uXCI7XG5pbXBvcnQgeyB0eXBlIFByb2JlUmVzdWx0LCBwcm9iZSB9IGZyb20gXCIuL3Byb2JlXCI7XG5pbXBvcnQgeyBlbmNvZGVTdHViV2VibSB9IGZyb20gXCIuL3N0dWJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBTZWNvbmRzIG9mIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBjb250ZW50IGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICAvKiogRGlzcGxheS1ib3ggcGl4ZWxzIChjYW52YXMgYmFja2luZyBzdG9yZSk7IGRlY29kZSBpcyBkb3duc2NhbGVkIHRvIGNvdmVyIHRoaXMsIG5ldmVyIHVwc2NhbGVkLiAqL1xuICBkc3RXPzogbnVtYmVyO1xuICBkc3RIPzogbnVtYmVyO1xuICAvKiogb2JqZWN0Rml0OyBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscyBzbyBpdCBza2lwcyBkb3duc2NhbGUuICovXG4gIGZpdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVudHJ5IHtcbiAgc2Vzc2lvbjogRGVjb2RlU2Vzc2lvbjtcbiAgcmVmczogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIF9zZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgcHJpdmF0ZSBfcHJvYmVzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8UHJvYmVSZXN1bHQ+PigpO1xuICBwcml2YXRlIF9zdHVicyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEJ1ZmZlcj4+KCk7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuXG4gIC8vIC1kIGRlY29kZSBieXBhc3NlcyB0aGUgd2luZG93IGludGVyY2VwdG9yLCBzbyBpdCByZW1hcHMgaG9zdHMgaXRzZWxmIHdoZW4gdGhlIGlubmVyIHByb3h5IGlzIG9uLlxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF91c2VJbm5lclByb3h5OiBib29sZWFuKSB7fVxuXG4gIC8vIGNsb3NlZC1jaGVja2VkIGFmdGVyIHByb2JlIHNvIGNsb3NlQWxsKCkgY2FuJ3QgcmFjZSBhIHNsb3cgb3BlbiBpbnRvIGEgbGVha2VkIHNlc3Npb24uXG4gIGFzeW5jIG9wZW4ob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGtleShvcHRzKTtcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdC5yZWZzKys7XG4gICAgICByZXR1cm4gaGl0LnNlc3Npb24ubWV0YTtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdGhpcy5fdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwob3B0cy5zcmMpIDogb3B0cy5zcmM7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHRoaXMucHJvYmVDYWNoZWQoc3JjKTtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgbGV0IGZyYW1lV2lkdGggPSBpbmZvLndpZHRoO1xuICAgIGxldCBmcmFtZUhlaWdodCA9IGluZm8uaGVpZ2h0O1xuICAgIC8vIERvd25zY2FsZSB0byBjb3ZlciB0aGUgZGlzcGxheSBib3ggKG5ldmVyIHVwc2NhbGUpOyBvYmplY3RGaXQgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMuXG4gICAgaWYgKG9wdHMuZHN0VyAmJiBvcHRzLmRzdEggJiYgb3B0cy5maXQgIT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5taW4oMSwgTWF0aC5tYXgob3B0cy5kc3RXIC8gaW5mby53aWR0aCwgb3B0cy5kc3RIIC8gaW5mby5oZWlnaHQpKTtcbiAgICAgIGZyYW1lV2lkdGggPSBldmVuKGluZm8ud2lkdGggKiBzKTtcbiAgICAgIGZyYW1lSGVpZ2h0ID0gZXZlbihpbmZvLmhlaWdodCAqIHMpO1xuICAgIH1cbiAgICBjb25zdCBtZXRhOiBWaWRlb01ldGEgPSB7XG4gICAgICBpZCxcbiAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgIGZyYW1lV2lkdGgsXG4gICAgICBmcmFtZUhlaWdodCxcbiAgICAgIGZwczogb3B0cy5mcHMsXG4gICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIGxlYWRHYXA6IGluZm8ubGVhZEdhcCxcbiAgICB9O1xuICAgIHRoaXMuX3Nlc3Npb25zLnNldChpZCwgeyBzZXNzaW9uOiBuZXcgRGVjb2RlU2Vzc2lvbihtZXRhLCBzcmMpLCByZWZzOiAxIH0pO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5pc3RpYyBtZWRpYSByZXF1ZXN0cyByZWRpcmVjdCBoZXJlOiByZWFsIHBhcnNlYWJsZSBieXRlcyB3aXRoIHRydWUgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbi5cbiAgc3R1YihzcmM6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWwgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzcmMpIDogc3JjO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3N0dWJzLmdldChyZWFsKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdGhpcy5wcm9iZUNhY2hlZChyZWFsKS50aGVuKChpbmZvKSA9PlxuICAgICAgZW5jb2RlU3R1YldlYm0oe1xuICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fc3R1YnMuZGVsZXRlKHJlYWwpKTtcbiAgICB0aGlzLl9zdHVicy5zZXQocmVhbCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHJldHVybiBlLnNlc3Npb24uZ2V0RnJhbWUoaWR4KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKC0tZS5yZWZzID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgIGF3YWl0IGUuc2Vzc2lvbi5jbG9zZSgpO1xuICB9XG5cbiAgLy8gRmFpbGVkIHByb2JlcyBldmljdCBzbyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgY2FuIHJldHJ5IG9uIHRoZSBuZXh0IHJlcXVlc3QuXG4gIHByaXZhdGUgcHJvYmVDYWNoZWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fcHJvYmVzLmdldChzcmMpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB1c2VSZXRyeSh7IGZuOiBwcm9iZSB9KShzcmMpO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fcHJvYmVzLmRlbGV0ZShzcmMpKTtcbiAgICB0aGlzLl9wcm9iZXMuc2V0KHNyYywgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBjbG9zZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlc3Npb25zID0gWy4uLnRoaXMuX3Nlc3Npb25zLnZhbHVlcygpXTtcbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHNlc3Npb25zLm1hcCgoZSkgPT4gZS5zZXNzaW9uLmNsb3NlKCkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBrZXkob3B0czogT3Blbk9wdGlvbnMpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAudXBkYXRlKGAke29wdHMuc3JjfXwke29wdHMuZnBzfXwke29wdHMuZHN0VyA/PyBcIlwifXwke29wdHMuZHN0SCA/PyBcIlwifXwke29wdHMuZml0ID8/IFwiXCJ9YClcbiAgICAuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vLyBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gaW50ZWdlciAo4omlMikgZm9yIHRoZSBzY2FsZXIuXG5mdW5jdGlvbiBldmVuKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4pO1xuICByZXR1cm4gTWF0aC5tYXgoMiwgciAtIChyICUgMikpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEZyYW1lU2VydmVyLCB0eXBlIFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltGcmFtZVByb3RvY29sXVwiO1xuXG4vLyBTY2hlbWUgaXMgcmVnaXN0ZXJlZCBhbG9uZ3NpZGUgYHB1cGAgaW4gcmVuZGVyZXIvcHJvdG9jb2wudHMgKHNpbmdsZSBjYWxsIG9ubHkpLlxuY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuY29uc3QgQ09SU19IRUFERVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBcIipcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1tZXRob2RzXCI6IFwiR0VULCBPUFRJT05TXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiOiBcIipcIixcbn07XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS4gRGV0ZXJtaW5pc3RpYy1vbmx5IChyZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljaywgbm8gZnJhbWUgcHJvdG9jb2wpLlxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZyYW1lUHJvdG9jb2wodXNlSW5uZXJQcm94eTogYm9vbGVhbik6IEFzeW5jRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGZzID0gbmV3IEZyYW1lU2VydmVyKHVzZUlubmVyUHJveHkpO1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgJHtyZXEubWV0aG9kfSAke3VybC5ob3N0bmFtZX0ke3VybC5zZWFyY2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmV0dXJuIGpzb25PayhcbiAgICAgICAgICAgIGF3YWl0IGZzLm9wZW4oe1xuICAgICAgICAgICAgICBzcmM6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIsXG4gICAgICAgICAgICAgIGZwczogaW50KHVybCwgXCJmcHNcIiwgMzApLFxuICAgICAgICAgICAgICBkc3RXOiBpbnQodXJsLCBcIndcIiwgMCksXG4gICAgICAgICAgICAgIGRzdEg6IGludCh1cmwsIFwiaFwiLCAwKSxcbiAgICAgICAgICAgICAgZml0OiB1cmwuc2VhcmNoUGFyYW1zLmdldChcImZpdFwiKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZnJhbWVcIjpcbiAgICAgICAgICByZXR1cm4gcmdiYU9rKGF3YWl0IGZzLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMSkpKTtcbiAgICAgICAgY2FzZSBcInN0dWJcIjpcbiAgICAgICAgICByZXR1cm4gd2VibU9rKGF3YWl0IGZzLnN0dWIodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIikpO1xuICAgICAgICBjYXNlIFwiY2xvc2VcIjpcbiAgICAgICAgICBhd2FpdCBmcy5jbG9zZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7XG4gICAgICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgICAgIGhlYWRlcnM6IENPUlNfSEVBREVSUyxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBgJHt1cmwuaG9zdG5hbWV9IGZhaWxlZCR7dXJsLnNlYXJjaH06ICR7bXNnfWApO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtc2csIHsgc3RhdHVzOiA1MDAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvdG9jb2wudW5oYW5kbGUoU0NIRU1FKTtcbiAgICAgIGF3YWl0IGZzLmNsb3NlQWxsKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuLy8gQ2FjaGVkIHN0dWIgQnVmZmVyIGlzIHNoYXJlZCBhY3Jvc3MgcmVzcG9uc2VzIOKAlCBjb3B5IHNvIGEgY29uc3VtZXIgY2FuJ3QgZGV0YWNoIGl0LlxuZnVuY3Rpb24gd2VibU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ2aWRlby93ZWJtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vLyBSYXcgUkdCQSBwaXhlbHM7IHRoZSBwYWdlIHdyYXBzIHRoZW0gaW4gSW1hZ2VEYXRhIHVzaW5nIG1ldGEud2lkdGgvaGVpZ2h0IGl0IGdvdCBmcm9tIGBvcGVuYC5cbmZ1bmN0aW9uIHJnYmFPayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQxMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICB9XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3csIE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua0ZyYW1lU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9ibGFua19mcmFtZVwiO1xuaW1wb3J0IHsgYWR2YW5jZVZpcnR1YWxUaW1lLCBwYXVzZVZpcnR1YWxUaW1lLCByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBwZXJpb2RpY2FsIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBkcmF3U3RlZ28sIEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCB3YWl0U3RlZ29UaWNrIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IHRpY2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyB1c2VGcmFtZVByb3RvY29sIH0gZnJvbSBcIi4vdmlkZW8vcHJvdG9jb2xcIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbU2hvb3RdXCI7XG5jb25zdCBSRU5ERVJfRlBTID0gMjQwO1xuY29uc3QgUkVOREVSX1RPTEVSQU5DRSA9IDEwO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIHNpemU6IFNpemU7XG4gIG1zOiBudW1iZXI7XG59XG5cbi8vIFBhaW50aW5nIHN0YXlzIG9uIGZvciB0aGUgd2hvbGUgcnVuOyB0aGlzIG9ubHkgd2FpdHMgZm9yIHRoZSBmcmFtZSB3aG9zZSBzdGVnbyByb3cgbWF0Y2hlcyBgbXNgLlxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyB3aW4sIGZwcywgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IGxhc3RUczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc3R1Y2sgPSAwO1xuICBsZXQgY2xlYXJEaXJ0eUNoZWNrOiBWb2lkRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCArIDEgfTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiB1bmtub3duLCBfZDogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEZWNvZGUgZnJvbSBhIDItcm93IHNsaXZlciBmaXJzdDsgdGhlIGZ1bGwtZnJhbWUgcmVhZGJhY2sgKH44TUIgbWVtY3B5KSBpcyBwYWlkIG9ubHkgb24gdGhlIG1hdGNoaW5nIGZyYW1lLlxuICAgICAgICBjb25zdCBzbGl2ZXIgPSBpbWFnZS5jcm9wKHsgeDogMCwgeTogZnJhbWVTaXplLmhlaWdodCAtIDIsIHdpZHRoOiBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgaGVpZ2h0OiAyIH0pO1xuICAgICAgICBjb25zdCB0cyA9IGRlY29kZVN0ZWdvKHNsaXZlci50b0JpdG1hcCgpLCB7IHdpZHRoOiBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgaGVpZ2h0OiAyIH0pO1xuICAgICAgICBpZiAodHMgPT09IHVuZGVmaW5lZCB8fCBNYXRoLmFicyh0cyAtIG1zKSA+IDEpIHtcbiAgICAgICAgICBsYXN0VHMgPSB0cztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBzaXplLmhlaWdodCAqIHNpemUud2lkdGggKiA0KSk7XG4gICAgICB9O1xuICAgICAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICBjbGVhckRpcnR5Q2hlY2sgPSBwZXJpb2RpY2FsKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHN0dWNrID49IFJFTkRFUl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGByZW5kZXJlciB0aW1lb3V0IEAgJHttc30gbGFzdFRzICR7bGFzdFRzfWApKTtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBjb25zdCBibXAgPSBhd2FpdCB3aW4ud2ViQ29udGVudHMuY2FwdHVyZVBhZ2UoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgaWYgKGJtcCAmJiAhd2luLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgICBoYW5kbGVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibXApO1xuICAgICAgICB9XG4gICAgICB9LCAxMDAwIC8gZnBzKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckRpcnR5Q2hlY2s/LigpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdChvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBhd2FpdCB1c2luZyBfID0gdXNlRnJhbWVQcm90b2NvbChvcHRpb25zLnVzZUlubmVyUHJveHkpO1xuICBjb25zdCB0SW5pdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB3aW5QID0gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMsIHNpZ25hbCB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBwZXJmb3JtYW5jZS5ub3coKSAtIHRJbml0IH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgbGFzdEJpdG1hcDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtGcmFtZVN0YXRzKHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICAvLyBDb21wb3NpdG9yL2NhcHR1cmUgY2FkZW5jZSBjYXAsIE5PVCBvdXRwdXQgZnBzOyBmcmFtZXMgYXJlIGRhbWFnZS1kcml2ZW4gcGVyIHZpcnR1YWwgc3RlcC5cbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKFJFTkRFUl9GUFMpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgY29uc3Qgc3dhcHBlZCA9IHdhaXRTdGVnb1RpY2sod2luLndlYkNvbnRlbnRzKTtcbiAgICAgIC8vIEluZGVwZW5kZW50IHRhcmdldHMgKGlmcmFtZSBjbG9jayB2cyBtYWluLWZyYW1lIHN0ZWdvIGNhbnZhcyk6IG9uZSBjb25jdXJyZW50IGhvcCBpbnN0ZWFkIG9mIHR3byBzZXJpYWwgb25lcy5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aWNrKHsgZnJhbWU6IGlmcmFtZSwgdGltZXN0YW1wTXM6IGZyYW1lTXMsIHNpZ25hbCB9KSwgZHJhd1N0ZWdvKHdpbi53ZWJDb250ZW50cywgZnJhbWVNcyldKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFthZHZhbmNlVmlydHVhbFRpbWUoY2RwLCBmcmFtZUludGVydmFsKSwgc3dhcHBlZF0pO1xuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIGZwcywgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICBsYXN0Qml0bWFwID0gYml0bWFwO1xuICAgICAgdGFrZXIuY2FwdHVyZShmcmFtZU1zLCBiaXRtYXApO1xuICAgICAgYmxhbmtTdGF0cy5zYW1wbGUoYml0bWFwKTtcbiAgICAgIC8vIEVuY29kZSB3aXRob3V0IGF3YWl0aW5nIChsaW1pdGVyIHNlcmlhbGl6ZXMpLCBzbyBpdCBvdmVybGFwcyB0aGUgbmV4dCBmcmFtZSdzIENEUC9wYWludCBzZXR1cC5cbiAgICAgIHBpcGVsaW5lLmVuY29kZUJHUkEoYml0bWFwKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gICAgICB3cml0dGVuKys7XG4gICAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZW5jb2RlRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEJpdG1hcCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvcjtcbiAgfVxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIG91dEZpbGVzLCBibGFuaywgamFuazogMCwgc2NyZWVuc2hvdHMgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyB0eXBlIElwY01zZywgSXBjTXNnVHlwZSwgSXBjV3JpdGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuY29uc3QgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbmxldCBleGl0aW5nID0gZmFsc2U7XG5cbnN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCk7XG5NZW51LnNldEFwcGxpY2F0aW9uTWVudShudWxsKTtcbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5hcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG5hcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcbmFwcC5vbihcIndpbGwtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxub2socHJvY2Vzcy5zZW5kLCBcImlwYyBjaGFubmVsIG1pc3Npbmcg4oCUIHNwYXduIHdpdGggc3RkaW9bM109J2lwYydcIik7XG5wcm9jZXNzLm9uY2UoXCJkaXNjb25uZWN0XCIsICgpID0+IGN0cmwuYWJvcnQoXCJkaXNjb25uZWN0XCIpKTtcbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgaWYgKG1zZy50eXBlID09PSBJcGNNc2dUeXBlLkNhbmNlbCkge1xuICAgIGN0cmwuYWJvcnQobXNnLnJlYXNvbik7XG4gIH1cbn0pO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJhcHBcIixcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaXBjID0gbmV3IElwY1dyaXRlcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dCBvZiBvcHRpb25zLm91dEZpbGVzKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb25zLmRldGVybWluaXN0aWMgPyBzaG9vdCA6IHJlbmRlcjtcbiAgICAgIGN0cmwuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY3Rpb24oe1xuICAgICAgICBzb3VyY2UsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHNpZ25hbDogY3RybC5zaWduYWwsXG4gICAgICAgIG9uUHJvZ3Jlc3M6IChwKSA9PiBpcGMud3JpdGVQcm9ncmVzcyhwKSxcbiAgICAgICAgb25Db25zb2xlOiAobCwgbSkgPT4gaXBjLndyaXRlQ29uc29sZShsLCBtKSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRG9uZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGl0aW5nID0gdHJ1ZTtcbiAgICAgIGFwcC5leGl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=