piclist 0.3.0 → 0.3.1
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/i18n/zh-CN.d.ts +2 -0
- package/dist/index.cjs.js +2 -2
- package/dist/index.esm.js +2 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/utils/common.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),r=require("events"),n=require("os"),i=require("commander"),a=require("inquirer"),s=require("image-size"),o=require("url"),l=require("text-to-svg"),E=require("sharp"),u=require("chalk"),c=require("minimatch"),I=require("globby"),_=require("ejs"),d=require("download-git-repo"),p=require("rimraf"),g=require("dayjs"),S=require("util"),A=require("axios"),f=require("crypto"),P=require("mime-types"),h=require("qiniu"),m=require("md5"),C=require("resolve"),D=require("lodash"),T=require("child_process"),L=require("is-wsl"),N=require("form-data"),U=require("https"),R=require("tunnel"),B=require("@picgo/store"),O=require("cross-spawn"),M=require("js-yaml"),y=require("@picgo/i18n");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=w(e),G=w(t),x=w(n),v=w(a),$=w(l),W=w(E),H=w(u),K=w(c),F=w(I),k=w(_),q=w(d),Y=w(p),j=w(g),V=w(S),z=w(A),Q=w(f),Z=w(P),X=w(h),J=w(m),ee=w(C),te=w(L),re=w(N),ne=w(U),ie=w(R),ae=w(O),se=w(M);const oe={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.install(t,a).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.update(t,a).catch((t=>{e.log.error(t)}))}))}},le={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}},Ee=e=>/^https?:\/\//.test(e),ue=e=>((e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!0}})(e)||(e=encodeURI(e)),e),ce=e=>{try{const{width:t=0,height:r=0}=s.imageSize(e);return{real:!0,width:t,height:r}}catch(e){return{real:!1,width:200,height:200}}},Ie=async(e,t)=>{let r;e=ue(e);const n=new Promise(((n,i)=>{(async()=>{var i;try{const i=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const a=new o.URL(e).pathname;n({buffer:i,fileName:G.default.basename(a),extname:G.default.extname(a),success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(i=null==t?void 0:t.message)&&void 0!==i?i:""}`})}})().catch(i)})),i=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,i])},_e=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":de(e)?"simple":"unknown",de=e=>{if(G.default.isAbsolute(e))return!1;const t=G.default.join(process.cwd(),e);return!b.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},pe=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,ge=e=>e.split(G.default.sep).join("/"),Se=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},Ae=[],fe=e=>Ae.some((t=>e.startsWith(t))),Pe=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;const he=(e=0)=>isNaN(Number(e))?0:Number(e);const me=`${__dirname}/assets/piclist.png`;async function Ce(e,t,r,n,i,a,s,o,l,E,u){o=!o||o<0||o>1?.15:o;const c=W.default(e),{width:I=200}=await c.metadata(),_=await async function(e,t=0,r,n,i,a,s,o,l=200){let E;"image"===e?(o=o||me,E=await W.default(o).toBuffer()):E=await async function(e,t,r,n){t=t||"测试",n=n||e;const i={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},a=$.default.loadSync(n).getSVG(t,i);return Buffer.from(a)}(r,n,s,i||r);const{width:u,height:c}=await async function(e){const{width:t,height:r}=await W.default(e).metadata();return{width:t||200,height:r||200}}(E),I=Math.floor(l*he(a)),_=Math.floor(I*c/u);return await W.default(E).resize(I,_,{fit:"inside"}).rotate(t,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,i,r,a,s,o,l,E,I);return await c.composite([{input:_,gravity:u||"southeast",tile:n}]).toBuffer()}const De=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),Te=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Le=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function Ne(e,t,r){try{let n=W.default(e);return De(t.watermarkText)&&(n=W.default(await Ce(e,t.watermarkType||"text",r,t.isFullScreenWatermark,he(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,he(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition))),await n.toBuffer()}catch(t){return console.log(t),e}}function Ue(e){return{quality:he(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:he(e.reSizeHeight),reSizeWidth:he(e.reSizeWidth),isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:he(e.reSizePercent),isRotate:e.isRotate||!1,rotateDegree:he(e.rotateDegree)}}async function Re(e,t,r){t=Ue(t);try{if(r=r.toLowerCase().replace(".",""),!Le.includes(r))return e;let i=W.default(e),a=100;if(De(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(De(t.reSizePercent)){const e=await i.metadata().then((e=>e.width)),r=await i.metadata().then((e=>e.height));e&&r&&(i=i.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else t.isReSize&&De(t.reSizeHeight,t.reSizeWidth)&&(i=i.resize(t.reSizeWidth,t.reSizeHeight,{fit:"inside"}));if(t.isRotate&&t.rotateDegree&&(i=i.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isConvert){const e=t.convertFormat||"jpg";i=i.toFormat(e,{quality:a})}else i=r&&(n=r,Te.includes(n))?i.toFormat(r,{quality:a}):i.toFormat("jpg",{quality:a});return await i.toBuffer()}catch(t){return console.log(t),e}var n}const Be=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"],Oe=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&Be.includes(t)),Me=(e,t)=>{if(t=t.toLowerCase().replace(".",""),!Be.includes(t))return!1;if(e){if(e=Ue(e),De(e.quality)&&e.quality<100)return!0;if(e.isReSizeByPercent&&De(e.reSizePercent))return!0;if(e.isReSize&&De(e.reSizeHeight,e.reSizeWidth))return!0;if(e.isRotate&&e.rotateDegree)return!0;if(e.isConvert){return t!==(e.convertFormat||"jpg")}return!1}return!1},ye={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>Ee(e)?e:G.default.resolve(e))).filter((t=>{const r=b.default.existsSync(t)||Ee(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var we=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"isReSizeByPercent",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isRotate",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90}]};var be=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};const Ge=async(e,t,r,n)=>{const i=await e.cmd.inquirer.prompt(t),a="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[a]:i})},xe={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,i;try{switch(t){case"buildin":if("compress"===r)await Ge(e,we(e),t,r);else if("watermark"===r)await Ge(e,be(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await Ge(e,we(e),t,n.buildin):"watermark"===n.buildin&&await Ge(e,be(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return e.log.error(`No ${t} named ${r}`);n.config&&await Ge(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),i=e.helper[t].get(n[t]);(null==i?void 0:i.config)&&await Ge(e,i.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await Ge(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(i=e.pluginLoader.getPlugin(r.plugin))||void 0===i?void 0:i.config)&&await Ge(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),e.log.warn("Available modules are uploader|transformer|plugin|buildin")}const a="plugin"===t?"plugins":t;e.log.success("Configure config successfully!"),"buildin"!==t&&e.log.info(`If you want to use this config, please run 'picgo use ${a}'`)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},ve={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const i={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!i[r])return e.log.warn(`No module named ${r}`),e.log.warn("Available modules are uploader|transformer|plugins");n.push(i[r])}else n=Object.keys(i).map((e=>i[e]));const a=await t.inquirer.prompt(n);if(a.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).map((e=>{a.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":a.uploader||e.getConfig("picBed.current"),"picBed.uploader":a.uploader||e.getConfig("picBed.current"),"picBed.transformer":a.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},$e={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},We=async(e,t)=>{try{const r=Ke(t.tmp),n=G.default.join(t.tmp,"template");let i={};r.prompts&&r.prompts.length>0&&(i=await e.cmd.inquirer.prompt(r.prompts));let a=await F.default(["**/*"],{cwd:n,dot:!0});if(a=a.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{K.default(t,e,{dot:!0})&&(n=t)})),!n||He(e,r.filters[n],i)})),0===a.length)return e.log.warn("Template files not found!");const s=Fe(a,n,i);ke(t.dest,s),"function"==typeof r.complete&&r.complete({answers:i,options:t,files:a,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){return e.log.error(t)}},He=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},Ke=e=>{const t=G.default.join(e,"index.js");if(b.default.existsSync(t)){return require(t)}return{}},Fe=(e,t,r)=>{const n={};return e.forEach((e=>{const i=b.default.readFileSync(G.default.join(t,e),"utf8"),a=k.default.render(i,r);(Buffer.isBuffer(a)||/[^\s]/.test(a))&&(n[e]=a)})),n},ke=(e,t)=>{Object.keys(t).forEach((r=>{const n=G.default.join(e,r);b.default.ensureDirSync(G.default.dirname(n)),b.default.writeFileSync(n,t[r])}))},qe=(e,t)=>{t.offline?b.default.existsSync(t.template)?We(e,t).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${t.template} not found`):(t.template=t.hasSlash?t.template:"PicGo/picgo-template-"+t.template,Ye(e,t))},Ye=(e,t)=>{b.default.existsSync(t.tmp)&&Y.default.sync(t.tmp),e.log.info("Template files are downloading..."),q.default(t.template,t.tmp,{clone:t.clone},(r=>{if(r)return e.log.error(r);e.log.success("Template files are downloaded!"),We(e,t).catch((t=>{e.log.error(t)}))}))},je={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,r,i)=>{(async()=>{try{const a=t.includes("/"),s=!r||"."===r,o=G.default.resolve(r||"."),l=i.clone||!1,E=i.offline||!1,u=G.default.join(n.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));i.offline&&(t=u);const c={template:t,project:r,hasSlash:a,inPlace:s,dest:o,clone:l,tmp:u,offline:E};s||b.default.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&qe(e,c)})):qe(e,c)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(H.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(H.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},Ve={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change picgo language").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const t=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}],n=await e.cmd.inquirer.prompt(t);return e.i18n.setLanguage(n.i18n),void e.log.success(`Language set to ${n.i18n}`)}if(!r.includes(t))return e.log.warn("No such language");e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)}))}};class ze{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),ze.currentPlugin&&(this.pluginIdMap.has(ze.currentPlugin)?null===(r=this.pluginIdMap.get(ze.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(ze.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const Qe=(e=null)=>{ze.currentPlugin=e};class Ze{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new i.Command,this.inquirer=v.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("0.3.0","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",oe),e.cmd.register("config",le),e.cmd.register("setting",xe),e.cmd.register("upload",ye),e.cmd.register("use",ve),e.cmd.register("proxy",$e),e.cmd.register("init",je),e.cmd.register("i18n",Ve)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=ze.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var Xe,Je,et;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(Xe||(Xe={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(Je||(Je={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(et||(et={}));class tt{constructor(e){this.level={[Xe.success]:"green",[Xe.info]:"blue",[Xe.warn]:"yellow",[Xe.error]:"red"},this.ctx=e}handleLog(e,...t){if(!this.ctx.getConfig("silent")){const r=H.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logLevel=this.ctx.getConfig("settings.logLevel"),this.logPath=this.ctx.getConfig("settings.logPath")||G.default.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(H.default.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(b.default.existsSync(e)){const t=b.default.statSync(e).size,r=1024*he(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){b.default.existsSync(e)&&(b.default.unlinkSync(e),b.default.createFileSync(e))}handleWriteLog(e,t,...r){try{if(this.checkLogLevel(t,this.logLevel)){let n=`${j.default().format("YYYY-MM-DD HH:mm:ss")} [PicList ${t.toUpperCase()}] `;r.forEach((e=>{e instanceof Error&&"error"===t?n+=`\n------Error Stack Begin------\n${V.default.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),n+=`${e} `)})),n+="\n",b.default.appendFileSync(e,n)}}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){return this.handleLog(Xe.success,...e)}info(...e){return this.handleLog(Xe.info,...e)}error(...e){return this.handleLog(Xe.error,...e)}warn(...e){return this.handleLog(Xe.warn,...e)}debug(...e){"development"===process.env.NODE_ENV&&this.handleLog(Xe.info,...e)}}class rt extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=G.default.join(e.baseDir,"piclistTemp");b.default.emptyDirSync(t),this.ttfPath=G.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=G.default.dirname(this.ttfPath);if(b.default.existsSync(e)||b.default.mkdirSync(e,{recursive:!0}),b.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await z.default.get(this.ttfLink,{responseType:"arraybuffer"});return b.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");t.input=e,t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("buildIn.watermark");if(r||n){const e=G.default.join(t.baseDir,"piclistTemp");b.default.existsSync(e)||b.default.mkdirSync(e);const i="Add watermark to image",a="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var l,E,u,c,I,_;let d;if(Ee(s)){if(d=await Ie(s,t),!d.success||!d.buffer)throw new Error(d.reason);{let s;if(Oe(n,null!==(l=d.extname)&&void 0!==l?l:"")){await this.downloadTTF()?(t.log.info(i),s=await Ne(d.buffer,n,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(Me(r,null!==(E=d.extname)&&void 0!==E?E:"")&&(t.log.info(a),s=await Re(null!=s?s:d.buffer,r,null!==(u=d.extname)&&void 0!==u?u:"")),s){let n;n=(null==r?void 0:r.isConvert)?null!==(c=null==r?void 0:r.convertFormat)&&void 0!==c?c:"jpg":null!==(I=d.extname)&&void 0!==I?I:"",n=n.startsWith(".")?n:`.${n}`;const i=G.default.join(e,`${d.fileName?`${G.default.basename(d.fileName,G.default.extname(d.fileName))}${n}`:(new Date).getTime()}${n}`);b.default.writeFileSync(i,s),t.input[o]=i}}}else{let l;if(Oe(n,G.default.extname(s))){await this.downloadTTF()?(t.log.info(i),l=await Ne(b.default.readFileSync(s),n,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(Me(r,G.default.extname(s))&&(t.log.info(a),l=await Re(null!=l?l:b.default.readFileSync(s),r,G.default.extname(s))),l){let n;n=(null==r?void 0:r.isConvert)?null!==(_=null==r?void 0:r.convertFormat)&&void 0!==_?_:"jpg":G.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const i=G.default.join(e,`${G.default.basename(s,G.default.extname(s))}${n}`);b.default.writeFileSync(i,l),t.input[o]=i}}})))}return await this.beforeTransform(t),await this.doTransform(t),await this.beforeUpload(t),await this.doUpload(t),await this.afterUpload(t),t}catch(e){if(t.log.warn(Je.FAILED),t.emit(Je.UPLOAD_PROGRESS,-1),t.emit(Je.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(Je.UPLOAD_PROGRESS,0),e.emit(Je.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(Je.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(Je.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(Je.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(t="smms",n="smms",r=e.helper.uploader.get("smms"),e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`)),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(Je.AFTER_UPLOAD,e),e.emit(Je.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length;for(let n=0;n<r;n++)void 0!==e.output[n].imgUrl&&(t+=ue(e.output[n].imgUrl),n!==r-1&&(t+="\n")),delete e.output[n].base64Image,delete e.output[n].buffer;return e.emit(Je.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),i=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${i}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${i}: ${n[r]} error`),e}}))),t}}const nt=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicGo",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),it=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const i=nt(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(i),r=JSON.parse(t);if("success"===r.code)delete n.base64Image,delete n.buffer,n.imgUrl=r.data.url,n.hash=r.data.hash;else{if("image_repeated"!==r.code||"string"!=typeof r.images)throw e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.message}),new Error(r.message);delete n.base64Image,delete n.buffer,n.imgUrl=r.images}}catch(t){throw e.log.error(t),t}}return e},at=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"password",get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const st=(e,t)=>{const r=e.secretId,n=e.secretKey,i=e.appId,a=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const i=Q.default.createHmac("sha1",n).update(o).digest("hex"),a=`put\n/${e.path}${t}\n\nhost=${e.bucket}.cos.${e.area}.myqcloud.com\n`,l=`sha1\n${o}\n${Q.default.createHash("sha1").update(a).digest("hex")}\n`;s=Q.default.createHmac("sha1",i).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${i}&b=${a}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,l=Q.default.createHmac("sha1",n).update(o).digest(),E=Buffer.concat([l,Buffer.from(o)]);s=Buffer.from(E).toString("base64")}return{signature:s,appId:i,bucket:a,signTime:o}},ot=(e,t,r,n,i)=>{const a=e.area,s=e.path;return e.version&&"v4"!==e.version?{method:"PUT",url:`http://${e.bucket}.cos.${e.area}.myqcloud.com/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.cos.${e.area}.myqcloud.com`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:Z.default.lookup(t),userAgent:`PicGo;${i};null;null`},body:n,resolveWithFullResponse:!0}:{method:"POST",url:`http://${a}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${a}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data",userAgent:`PicGo;${i};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},lt=async e=>{var t,r,n;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const a=e.output,s=i.customUrl,o=i.path,l=!i.version||"v4"===i.version;for(const E of a)if(E.fileName&&E.buffer){const a=st(i,E.fileName);if(!a)return!1;let u=E.buffer;!u&&E.base64Image&&(u=Buffer.from(E.base64Image,"base64"));const c=ot(i,E.fileName,a,u,e.GUI_VERSION||e.VERSION),I=await e.request(c).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let _;if(_=l&&"string"==typeof I?JSON.parse(I):I,400===_.statusCode)throw(null===(t=null==_?void 0:_.body)||void 0===t?void 0:t.err)?_.body.err:new Error((null===(r=null==_?void 0:_.body)||void 0===r?void 0:r.msg)||(null===(n=null==_?void 0:_.body)||void 0===n?void 0:n.message));const d=i.options||"";if(l&&"SUCCESS"===_.message)delete E.base64Image,delete E.buffer,E.imgUrl=s?`${s}/${o}${E.fileName}`:`${_.data.source_url}${d}`;else{if(l||!_||200!==_.statusCode)throw new Error(I.body.msg);delete E.base64Image,delete E.buffer,E.imgUrl=s?`${s}/${encodeURI(o)}${encodeURI(E.fileName)}${d}`:`https://${i.bucket}.cos.${i.area}.myqcloud.com/${encodeURI(o)}${encodeURI(E.fileName)}${d}`}}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Et=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1}]};const ut=(e,t,r)=>{const n=t.path||"",{token:i,repo:a}=t;return{method:"PUT",url:`https://api.github.com/repos/${a}/contents/${encodeURI(n)}${encodeURI(e)}`,headers:{Authorization:`token ${i}`,"User-Agent":"PicGo","Content-Type":Z.default.lookup(e)},body:r,json:!0}},ct=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),i={message:"Upload by PicGo",branch:t.branch,content:r,path:t.path+encodeURI(n.fileName)},a=ut(n.fileName,t,i),s=await e.request(a);if(!s)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,t.customUrl?n.imgUrl=`${t.customUrl}/${t.path}${n.fileName}`:n.imgUrl=s.content.download_url,n.hash=s.content.sha}return e}catch(t){throw e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},It=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"password",get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function _t(e,t,r,n){const i=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),a=e.path||"";return{method:"POST",url:`http://upload${i}.qiniup.com/putb64/-1/key/${Buffer.from(a+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":Z.default.lookup(t)||"application/octet-stream"},body:n}}function dt(e){const t=e.accessKey,r=e.secretKey,n=new X.default.auth.digest.Mac(t,r),i={scope:e.bucket};return new X.default.rs.PutPolicy(i).uploadToken(n)}const pt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),i=_t(t,n.fileName,dt(t),r),a=await e.request(i),s=JSON.parse(a);if(!(null==s?void 0:s.key))throw e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options;n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},gt=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const St=(e,t,r)=>{const n={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:`Client-ID ${e.clientId}`,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicGo"},formData:{image:r,type:"base64",name:t}};return e.proxy&&(n.proxy=e.proxy),n},At=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),i=St(r,n.fileName,t),a=await e.request(i),s="string"==typeof a?JSON.parse(a):a;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},ft=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},default:t.clientId||"",required:!0},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const Pt=(e,t)=>{const r=(new Date).toUTCString(),n=Z.default.lookup(t);if(!n)throw Error(`No mime type found for file ${t}`);const i=`PUT\n\n${n}\n${r}\n/${e.bucket}/${e.path}${t}`,a=Q.default.createHmac("sha1",e.accessKeySecret).update(i).digest("base64");return`OSS ${e.accessKeyId}:${a}`},ht=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURI(e.path)}${encodeURI(t)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:(new Date).toUTCString(),"Content-Type":Z.default.lookup(t)},body:n,resolveWithFullResponse:!0}),mt=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=t.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/";try{const r=e.output,n=t.customUrl,i=t.path;for(const a of r)if(a.fileName&&a.buffer){const r=Pt(t,a.fileName);let s=a.buffer;!s&&a.base64Image&&(s=Buffer.from(a.base64Image,"base64"));const o=ht(t,a.fileName,r,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete a.base64Image,delete a.buffer;const e=t.options||"";a.imgUrl=n?`${n}/${i}${a.fileName}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${i}${a.fileName}${e}`}}return e}catch(t){throw e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ct=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"password",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const Dt=(e,t)=>{const r=e.path||"",n=e.operator,i=e.password,a=J.default(i),s=(new Date).toUTCString(),o=`PUT&${`/${e.bucket}/${encodeURI(r)}${encodeURI(t)}`}&${s}`;return`UPYUN ${n}:${Q.default.createHmac("sha1",a).update(o).digest("base64")}`},Tt=(e,t,r,n)=>{const i=e.bucket,a=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${i}/${encodeURI(a)}${encodeURI(t)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":Z.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}},Lt=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=t.path||"";for(const i of r)if(i.fileName&&i.buffer){let r=i.buffer;!r&&i.base64Image&&(r=Buffer.from(i.base64Image,"base64"));const a=Dt(t,i.fileName),s=Tt(t,i.fileName,a,r);if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");delete i.base64Image,delete i.buffer,i.imgUrl=`${t.url}/${n}${i.fileName}${t.options}`}return e}catch(t){if("Upload failed"===t.message)e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=function(e){try{return JSON.parse(e)}catch(t){return e}}(t.error);e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},Nt=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"password",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1}]};const Ut=(e,t,r)=>({method:"PUT",url:`${e.host}/${encodeURI(e.path)}${encodeURI(t)}`,headers:{Authorization:`Basic ${Buffer.from(`${e.username}:${e.password}`).toString("base64")}`,"Content-Type":Z.default.lookup(t),"Content-Length":r.length},body:r,resolveWithFullResponse:!0}),Rt=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");t.host=t.host.replace("https://","").replace("http://","").replace(/\/+$/,""),t.sslEnabled?t.host="https://"+t.host:t.host="http://"+t.host,t.path=t.path.replace(/^\/*/,"").replace(/\/*$/,"")+"/";try{const r=e.output,n=t.customUrl,i=t.path;for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const s=Ut(t,a.fileName,r),o=await e.request(s);if(!(o.statusCode>=200&&o.statusCode<300))throw new Error("Upload failed");delete a.base64Image,delete a.buffer,a.imgUrl=n?`${n}/${i}${a.fileName}`:`${t.host}/${i}${a.fileName}`}return e}catch(t){throw e.emit(Je.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Bt=e=>{const t=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:t.host||"",required:!0},{name:"sslEnabled",type:"confirm",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!0,default:t.sslEnabled||!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:t.username||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"password",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:t.password||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:t.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"customUrl",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:t.customUrl||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}}]};const Ot=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:mt,config:Ct})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:lt,config:Et})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:it,config:at})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:ct,config:It})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:pt,config:gt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:At,config:ft})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Lt,config:Nt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:Rt,config:Bt})}(e)}}),Mt=(e,t,r)=>{const n=ce(t);return n.real||(e.log.warn(`can't get ${r}'s image size`),e.log.warn("fallback to 200 * 200")),n};var yt={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let i;if(i=Ee(r)?await Ie(r,e):await(async e=>{try{return{extname:G.default.extname(e),fileName:G.default.basename(e),buffer:await b.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}})(r),!i.success||!i.buffer)throw new Error(i.reason);{const a=Mt(e,i.buffer,r);t[n]={buffer:i.buffer,fileName:i.fileName,width:a.width,height:a.height,extname:i.extname}}}))),e.output=t.filter((e=>e)),e}};var wt={handle:async e=>(e.output.push(...e.input),e)};class bt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=G.default.join(this.ctx.baseDir,"package.json");if(!b.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};b.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return ee.default.sync(t,{basedir:e.baseDir})}catch(r){return G.default.join(e.baseDir,"node_modules",t)}}load(){const e=G.default.join(this.ctx.baseDir,"package.json"),t=G.default.join(this.ctx.baseDir,"node_modules/");if(!b.default.existsSync(t))return!1;const r=b.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),i=Object.keys(r.devDependencies||{}),a=n.concat(i).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return b.default.existsSync(t)}));for(const e of a)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),Qe(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),Qe(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(Je.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),Qe(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=G.default.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const Gt={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},xt={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const vt=async e=>{!function(e){const t=G.default.join(e.baseDir,"piclist-clipboard-images");b.default.existsSync(t)||b.default.mkdirSync(t)}(e);const t=G.default.join(e.baseDir,"piclist-clipboard-images",`${j.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const i=(()=>{const e=process.platform;if(te.default)return"wsl";if("win32"===e)return"10"===x.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),a=G.default.join(e.baseDir,xt[i]);let s;b.default.existsSync(a)||b.default.writeFileSync(a,Gt[i],"utf8"),s="darwin"===i?T.spawn("osascript",[a,t]):"win32"===i||"win10"===i?T.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",a,t]):T.spawn("sh",[a,t]),s.stdout.on("data",(a=>{if("linux"===i&&"no xclip or wl-clipboard"===a.toString().trim())return e.emit(Je.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),n(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const s=a.toString().trim();let o=!1;if(G.default.basename(s)!==G.default.basename(t)&&b.default.existsSync(s)&&(o=!0),"no image"!==s&&!b.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},$t=new r.EventEmitter,Wt=new ne.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2"});function Ht(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Kt(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Ft(e){var t,r,n,i,a,s,o;const l={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(l)}class kt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),$t.on(et.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new o.URL(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=ie.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=Wt;const r=z.default.create(this.options);r.interceptors.response.use(Kt,Ft);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let i=e.proxy;if("string"==typeof i){try{i=new o.URL(e.proxy)}catch(e){i=!1,n.proxy=!1,console.error(e)}r=!0}i&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=ie.default.httpsOverHttp({proxy:{host:null==i?void 0:i.hostname,port:parseInt(null==i?void 0:i.port,10)}})):n.proxy={host:i.hostname,port:parseInt(i.port,10),protocol:"http"})}if("formData"in e){const t=new re.default;for(const r in e.formData)Ht(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let i="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(i=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(i=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(i=e.headers["content-type"],delete e.headers["content-type"]),""!==i&&e.headers&&(e.headers["Content-Type"]=i),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class qt{constructor(e){if(this.ctx=e,this.db=new B.JSONStore(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms"})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){return this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}class Yt{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],i=e.map((e=>jt(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicGo has already installed ${e.pkgName}`),!1):!!e.success)),a=i.map((e=>e.fullName)),s=i.map((e=>e.pkgName));if(a.length>0){const e=await this.execCommand("install",a,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>jt(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>jt(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},i={}){const a=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,l;let E=[e].concat(t).concat("--color=always").concat("--save");a&&(E=E.concat(`--registry=${a}`)),s&&(E=E.concat(`--proxy=${s}`));try{const e=ae.default("npm",E,{cwd:r,env:Object.assign({},process.env,i)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(l=e.stderr)||void 0===l||l.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(Je.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(Je.FAILED,e)}}))}}const jt=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=((e,t=console)=>{switch(_e(e)){case"normal":case"scope":return e;case"simple":return pe(e);default:{let r=e;return G.default.isAbsolute(e)&&b.default.existsSync(e)?ge(r):(r=G.default.join(process.cwd(),e),b.default.existsSync(r)?ge(r):(t.warn(`Can't find plugin ${e}`),""))}}})(t,e.log);if(!n)return r;const i=((e,t=console)=>{var r;switch(_e(e)){case"normal":return Se(e);case"scope":return Se(e,!0);case"simple":return Se(pe(e));default:{if(!b.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=G.default.posix.join(e,"package.json");if(b.default.existsSync(n)){const e=b.default.readJSONSync(n)||{};return(null===(r=e.name)||void 0===r?void 0:r.includes("picgo-plugin-"))?e.name:(t.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return t.warn(`Can't find plugin: ${e}`),""}}})(n,e.log);return i?{success:!0,fullName:n,pkgName:i}:r},Vt={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定KeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定KeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set KeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class zt{constructor(e){this.ctx=e,this.objectAdapter=new y.ObjectAdapter(Vt);let t=this.ctx.getConfig("settings.language")||"zh-CN";Vt[t]||(t="zh-CN"),this.i18n=new y.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();b.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=G.default.join(e,t.name),n=b.default.readFileSync(r,"utf8");try{const e=se.default.load(n);Vt[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=G.default.join(this.ctx.baseDir,"i18n-cli");return b.default.pathExistsSync(e)||b.default.ensureDirSync(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const n=D.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),Vt[e]=t,!0)}getLanguageList(){return Object.keys(Vt)}}class Qt extends r.EventEmitter{constructor(e=""){super(),this.VERSION="0.3.0",this.configPath=e,this.output=[],this.input=[],this.helper={transformer:new ze("transformer"),uploader:new ze("uploader"),beforeTransformPlugins:new ze("beforeTransformPlugins"),beforeUploadPlugins:new ze("beforeUploadPlugins"),afterUploadPlugins:new ze("afterUploadPlugins")},this.initConfigPath(),this.log=new tt(this),this.cmd=new Ze(this),this.pluginHandler=new Yt(this),this.initConfig(),this.init()}get pluginLoader(){return this._pluginLoader}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==G.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=G.default.dirname(this.configPath);b.default.pathExistsSync(this.configPath)||b.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new qt(this),this._config=this.db.read(!0)}init(){try{this.i18n=new zt(this),this.Request=new kt(this),this._pluginLoader=new bt(this),Qe("picgo"),Ot().register(this),{register(e){e.helper.transformer.register("path",yt),e.helper.transformer.register("base64",wt)}}.register(this),Qe(""),this._pluginLoader.load(),this.lifecycle=new rt(this)}catch(e){throw this.emit(Je.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?D.get(this._config,e):this._config}saveConfig(e){Pe(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(fe(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Pe(e)?Object.keys(e).forEach((t=>{fe(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),D.set(this._config,t,e[t]),$t.emit(et.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(fe(e)?this.log.warn(`the config.${e} can't be unset`):D.unset(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("The configuration file only supports JSON format."),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await vt(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(Je.FAILED,(()=>{t||b.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||b.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(Je.FAILED,e),e}}}exports.Commander=Ze,exports.Lifecycle=rt,exports.LifecyclePlugins=ze,exports.Logger=tt,exports.PicGo=Qt,exports.PluginHandler=Yt,exports.PluginLoader=bt,exports.Request=kt;
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3NldHRpbmcudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXNlLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3Byb3h5LnRzIiwiLi4vc3JjL3V0aWxzL2luaXRVdGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbml0LnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2kxOG4udHMiLCIuLi9zcmMvbGliL0xpZmVjeWNsZVBsdWdpbnMudHMiLCIuLi9zcmMvbGliL0NvbW1hbmRlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbmRleC50cyIsIi4uL3NyYy91dGlscy9lbnVtLnRzIiwiLi4vc3JjL2xpYi9Mb2dnZXIudHMiLCIuLi9zcmMvY29yZS9MaWZlY3ljbGUudHMiLCIuLi9zcmMvdXRpbHMvY3JlYXRlQ29udGV4dC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NtbXMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2dpdGh1Yi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3Fpbml1LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGl5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91cHl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3dlYmRhdi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvcGF0aC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2Jhc2U2NC50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9pMThuL2luZGV4LnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHBsdWdpbkhhbmRsZXI6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIC8vIGNvbnN0IHBsdWdpbkhhbmRsZXIgPSBuZXcgUGx1Z2luSGFuZGxlcihjdHgpXHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5zdGFsbCA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2luc3RhbGwgcGljZ28gcGx1Z2luJylcclxuICAgICAgLmFsaWFzKCdhZGQnKVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmFsaWFzKCdybScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudW5pbnN0YWxsKHBsdWdpbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGRhdGUgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGRhdGUgcGljZ28gcGx1Z2luJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHByb3h5LFxyXG4gICAgICAgICAgcmVnaXN0cnlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQge1xyXG4gIElJbWdTaXplLFxyXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxyXG4gIElQbHVnaW5OYW1lVHlwZSxcclxuICBJTG9nZ2VyLFxyXG4gIElQaWNHbyxcclxuICBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcclxuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgVGV4dFRvU1ZHIGZyb20gJ3RleHQtdG8tc3ZnJ1xyXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+ICgvXmh0dHBzPzpcXC9cXC8vKS50ZXN0KHVybClcclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHVybCA9IHVybCB8fCAnJ1xyXG4gIHRyeSB7XHJcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XHJcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGlmIHNvbWUgZXJyb3IgY2F1Z2h0LCB0cnkgdG8gbGV0IGl0IGdvXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcclxuICAgIHVybCA9IGVuY29kZVVSSSh1cmwpXHJcbiAgfVxyXG4gIHJldHVybiB1cmxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwIH0gPSBpbWFnZVNpemUoZmlsZSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IHRydWUsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHRcclxuICAgIH1cclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICAvLyBmYWxsYmFjayB0byAyMDAgKiAyMDBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogMjAwLFxyXG4gICAgICBoZWlnaHQ6IDIwMFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZTRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHRuYW1lOiBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGJ1ZmZlcjogYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpLFxyXG4gICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxyXG4gICAgICBzdWNjZXNzOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXHJcbiAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXRcclxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdCh7XHJcbiAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBidWZmZXI6IHJlcyxcclxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSBlcnJvciwgJHtlcnJvcj8ubWVzc2FnZSA/PyAnJ31gXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSkoKS5jYXRjaChyZWplY3QpXHJcbiAgfSlcclxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xyXG4gICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IHRpbWVvdXRgXHJcbiAgICAgIH0pXHJcbiAgICB9LCAzMDAwMClcclxuICB9KVxyXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxyXG4gKiAzLiB4eHggLT4gc2ltcGxlXHJcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cclxuICogQHBhcmFtIG5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2NvcGUnXHJcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgcmV0dXJuICdub3JtYWwnXHJcbiAgfSBlbHNlIGlmIChpc1NpbXBsZU5hbWUobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2ltcGxlJ1xyXG4gIH1cclxuICByZXR1cm4gJ3Vua25vd24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4geHh4IC0+IHRydWVcclxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKG5hbWVPclBhdGguaW5jbHVkZXMoJy8nKSB8fCBuYW1lT3JQYXRoLmluY2x1ZGVzKCdcXFxcJykpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG4vKipcclxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4geHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL15AW14vXStcXC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXHJcbiAqIEBwYXJhbSBzY29wZSBwbHVnaW5TY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChzY29wZSkge1xyXG4gICAgcmV0dXJuIGBAJHtzY29wZX0vcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3h4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxyXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcclxuICAgIGNhc2UgJ25vcm1hbCc6XHJcbiAgICBjYXNlICdzY29wZSc6XHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICBjYXNlICdzaW1wbGUnOlxyXG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXHJcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcclxuICAgICAgbGV0IHBsdWdpblBhdGggPSBuYW1lT3JQYXRoXHJcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXHJcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIDMuIGludmFsaWQgbmFtZU9yUGF0aFxyXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAzLiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxyXG4gKiB0aGVuIHVzZSBbcGFja2FnZS5qc29uJ3MgbmFtZV0sIHVzdWFsbHkgbWF0Y2ggdGhlIHNjb3BlIHBhY2thZ2UuXHJcbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKSlcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcclxuICAgICAgLy8gdGhlIG5hbWVPclBhdGggaGVyZSB3aWxsIGJlIGVuc3VyZWQgd2l0aCB1bml4IHN0eWxlXHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhY2thZ2VKU09OUGF0aCA9IHBhdGgucG9zaXguam9pbihuYW1lT3JQYXRoLCAncGFja2FnZS5qc29uJylcclxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XHJcbiAgICAgICAgaWYgKCFwa2cubmFtZT8uaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgbG9nZ2VyLndhcm4oYFRoZSBwbHVnaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZCBpcyAke3BrZy5uYW1lIGFzIHN0cmluZyB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gKVxyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwa2cubmFtZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIHRyYW5zZm9ybSB0aGUgcGF0aCB0byB1bml4IHN0eWxlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxyXG4gKiAyLiAveHh4L3h4eCAtPiAveHh4L3h4eFxyXG4gKiBAcGFyYW0gcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVuaXhTdHlsZVBhdGggPSAocGF0aFN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcclxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcclxufVxyXG5cclxuLyoqXHJcbiAqIHJlbW92ZSBwbHVnaW4gdmVyc2lvbiB3aGVuIHJlZ2lzdGVyIHBsdWdpbiBuYW1lXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqIEBwYXJhbSBzY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZVBsdWdpblZlcnNpb24gPSAobmFtZU9yUGF0aDogc3RyaW5nLCBzY29wZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xyXG4gICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hBcnIgPSBuYW1lT3JQYXRoLm1hdGNoKHJlZylcclxuICAgIGlmICghbWF0Y2hBcnIpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcclxuICogb25seSBjYW4gYmUgZ290XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cclxuXHJcbi8qKlxyXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XHJcbiAqIEBwYXJhbSBrZXlcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGNvbmZpZ0JsYWNrTGlzdC5zb21lKGJsYWNrSXRlbSA9PiBrZXkuc3RhcnRzV2l0aChibGFja0l0ZW0pKVxyXG59XHJcblxyXG4vKipcclxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxyXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxyXG4gKiAmJiBjYW4ndCBiZSBhcnJheVxyXG4gKiBAcGFyYW0gY29uZmlnXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKFxyXG4gICAgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiZcclxuICAgICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiZcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4gKHN0cjogc3RyaW5nKTogVCB8IHN0cmluZyB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcmV0dXJuIHN0clxyXG4gIH1cclxufVxyXG5cclxuLy8gaG9sZC4uLlxyXG4vLyBleHBvcnQgY29uc3QgY29uZmlnV2hpdGVMaXN0OiBSZWdFeHBbXSA9IFtcclxuLy8gICAvXnBpY0JlZC8sXHJcbi8vICAgL15waWNnb1BsdWdpbnMvLFxyXG4vLyAgIC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sXHJcbi8vICAgL2RlYnVnLyxcclxuLy8gICAvc2lsZW50LyxcclxuLy8gICAvY29uZmlnUGF0aC8sXHJcbi8vICAgL15zZXR0aW5ncy8sXHJcbi8vIF1cclxuXHJcbi8vIGV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluV2hpdGVMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbi8vICAgcmV0dXJuIGNvbmZpZ1doaXRlTGlzdC5zb21lKHdoaXRlSXRlbSA9PiB3aGl0ZUl0ZW0udGVzdChrZXkpKVxyXG4vLyB9XHJcblxyXG5leHBvcnQgY29uc3QgZm9yY2VOdW1iZXIgPSAobnVtOiBzdHJpbmcgfCBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzUHJvZCA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB0ZXh0MlNWRyAoXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICBjb2xvcj86IHN0cmluZyxcclxuICBmb250RmFtaWx5Pzogc3RyaW5nXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XHJcbiAgZm9udEZhbWlseSA9ICFmb250RmFtaWx5ID8gZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIDogZm9udEZhbWlseVxyXG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxyXG4gIGNvbnN0IG9wdGlvbnM6IFRleHRUb1NWRy5HZW5lcmF0aW9uT3B0aW9ucyA9IHtcclxuICAgIGFuY2hvcjogJ3RvcCcsXHJcbiAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgIGZpbGw6IGNvbG9yXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IHRleHRTVkcgPSB0ZXh0MlNWRy5nZXRTVkcodGV4dCwgb3B0aW9ucylcclxuICBjb25zdCBzdmcgPSBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxyXG4gIHJldHVybiBzdmdcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IGAke19fZGlybmFtZX0vYXNzZXRzL3BpY2xpc3QucG5nYFxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEFkZFdhdGVybWFyayAoXHJcbiAgaW1nOiBCdWZmZXIsXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICBpc0Z1bGxTY3JlZW5XYXRlcm1hcms/OiBib29sZWFuLFxyXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8gPSAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXHJcbiAgY29uc3QgaW1hZ2UgPSBzaGFycChpbWcpXHJcbiAgY29uc3QgeyB3aWR0aDogaW1nV2lkdGggPSAyMDAgfSA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKClcclxuICBjb25zdCB3YXRlcm1hcmsgPSBhd2FpdCBjcmVhdGVXYXRlcm1hcmsoXHJcbiAgICB3YXRlcm1hcmtUeXBlLFxyXG4gICAgd2F0ZXJtYXJrRGVncmVlLFxyXG4gICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgdGV4dCxcclxuICAgIHdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgd2F0ZXJtYXJrU2NhbGVSYXRpbyxcclxuICAgIHdhdGVybWFya0NvbG9yLFxyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoLFxyXG4gICAgaW1nV2lkdGhcclxuICApXHJcbiAgY29uc3QgY29tcG9zaXRlZCA9IGF3YWl0IGltYWdlXHJcbiAgICAuY29tcG9zaXRlKFtcclxuICAgICAge1xyXG4gICAgICAgIGlucHV0OiB3YXRlcm1hcmssXHJcbiAgICAgICAgZ3Jhdml0eTogcG9zaXRpb24gfHwgJ3NvdXRoZWFzdCcsXHJcbiAgICAgICAgdGlsZTogaXNGdWxsU2NyZWVuV2F0ZXJtYXJrXHJcbiAgICAgIH1cclxuICAgIF0pXHJcbiAgICAudG9CdWZmZXIoKVxyXG4gIHJldHVybiBjb21wb3NpdGVkXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdhdGVybWFyayAoXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICB3YXRlcm1hcmtEZWdyZWU6IG51bWJlciA9IDAsXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtTY2FsZVJhdGlvPzogbnVtYmVyLFxyXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcclxuICBpbWdXaWR0aDogbnVtYmVyID0gMjAwXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgbGV0IHdhdGVybWFyazogYW55XHJcbiAgaWYgKHdhdGVybWFya1R5cGUgPT09ICdpbWFnZScpIHtcclxuICAgIHdhdGVybWFya0ltYWdlUGF0aCA9IHdhdGVybWFya0ltYWdlUGF0aCB8fCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoXHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCBzaGFycCh3YXRlcm1hcmtJbWFnZVBhdGgpLnRvQnVmZmVyKClcclxuICB9IGVsc2Uge1xyXG4gICAgd2F0ZXJtYXJrID0gYXdhaXQgdGV4dDJTVkcoXHJcbiAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgdGV4dCxcclxuICAgICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgIHdhdGVybWFya0ZvbnRQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aFxyXG4gICAgKVxyXG4gIH1cclxuICBjb25zdCB7IHdpZHRoOiB3YXRlcm1hcmtXaWR0aCwgaGVpZ2h0OiB3YXRlcm1hcmtIZWlnaHQgfSA9IGF3YWl0IGdldFNpemUoXHJcbiAgICB3YXRlcm1hcmtcclxuICApXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplV2lkdGggPSBNYXRoLmZsb29yKGltZ1dpZHRoICogZm9yY2VOdW1iZXIod2F0ZXJtYXJrU2NhbGVSYXRpbykpXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0ID0gTWF0aC5mbG9vcihcclxuICAgICh3YXRlcm1hcmtSZXNpemVXaWR0aCAqIHdhdGVybWFya0hlaWdodCkgLyB3YXRlcm1hcmtXaWR0aFxyXG4gIClcclxuICByZXR1cm4gYXdhaXQgc2hhcnAod2F0ZXJtYXJrKVxyXG4gICAgLnJlc2l6ZSh3YXRlcm1hcmtSZXNpemVXaWR0aCwgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0LCB7XHJcbiAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgIH0pXHJcbiAgICAucm90YXRlKHdhdGVybWFya0RlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIC50b0J1ZmZlcigpXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFNpemUgKGltYWdlOiBCdWZmZXIpOiBQcm9taXNlPHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfT4ge1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgc2hhcnAoaW1hZ2UpLm1ldGFkYXRhKClcclxuICByZXR1cm4geyB3aWR0aDogd2lkdGggfHwgMjAwLCBoZWlnaHQ6IGhlaWdodCB8fCAyMDAgfVxyXG59XHJcblxyXG5jb25zdCB2YWxpZFBhcmFtID0gKC4uLnBhcmFtczogYW55W10pOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcGFyYW1zLmV2ZXJ5KHBhcmFtID0+IHtcclxuICAgIGlmIChwYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtICE9PSAnJ1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtID4gMFxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0ID0gW1xyXG4gICdhdmlmJyxcclxuICAnZHonLFxyXG4gICdmaXRzJyxcclxuICAnZ2lmJyxcclxuICAnaGVpZicsXHJcbiAgJ2lucHV0JyxcclxuICAnanBlZycsXHJcbiAgJ2pwZycsXHJcbiAgJ2pwMicsXHJcbiAgJ2p4bCcsXHJcbiAgJ21hZ2ljaycsXHJcbiAgJ29wZW5zbGlkZScsXHJcbiAgJ3BkZicsXHJcbiAgJ3BuZycsXHJcbiAgJ3BwbScsXHJcbiAgJ3JhdycsXHJcbiAgJ3N2ZycsXHJcbiAgJ3RpZmYnLFxyXG4gICd0aWYnLFxyXG4gICd2JyxcclxuICAnd2VicCdcclxuXVxyXG5cclxuY29uc3QgdmFsaWRPdXRwdXRGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QuaW5jbHVkZXMoZm9ybWF0KVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUV4dExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsgKGltZzogQnVmZmVyLCBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0cnkge1xyXG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZylcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMud2F0ZXJtYXJrVGV4dCkpIHtcclxuICAgICAgaW1hZ2UgPSBzaGFycChhd2FpdCBBZGRXYXRlcm1hcmsoXHJcbiAgICAgICAgaW1nLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXHJcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxyXG4gICAgICApKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25zIChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcclxuICByZXR1cm4ge1xyXG4gICAgcXVhbGl0eTogZm9yY2VOdW1iZXIob3B0aW9ucy5xdWFsaXR5KSxcclxuICAgIGlzQ29udmVydDogb3B0aW9ucy5pc0NvbnZlcnQgfHwgZmFsc2UsXHJcbiAgICBjb252ZXJ0Rm9ybWF0OiBvcHRpb25zLmNvbnZlcnRGb3JtYXQgfHwgJ2pwZycsXHJcbiAgICBpc1JlU2l6ZTogb3B0aW9ucy5pc1JlU2l6ZSB8fCBmYWxzZSxcclxuICAgIHJlU2l6ZUhlaWdodDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVIZWlnaHQpLFxyXG4gICAgcmVTaXplV2lkdGg6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplV2lkdGgpLFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQ6IG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2UsXHJcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxyXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlUHJvY2VzcyAoaW1nOiBCdWZmZXIsIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLCByYXdGb3JtYXQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucylcclxuICB0cnkge1xyXG4gICAgcmF3Rm9ybWF0ID0gcmF3Rm9ybWF0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gICAgaWYgKCFpbWFnZUV4dExpc3QuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xyXG4gICAgICByZXR1cm4gaW1nXHJcbiAgICB9XHJcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nKVxyXG4gICAgbGV0IHF1YWxpdHkgPSAxMDBcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucXVhbGl0eSkgJiYgb3B0aW9ucy5xdWFsaXR5ISA8IDEwMCkge1xyXG4gICAgICBxdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5IVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQpIHtcclxuICAgICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5yZVNpemVQZXJjZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZVdpZHRoICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhIC8gMTAwKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pc1JlU2l6ZSkge1xyXG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZUhlaWdodCwgb3B0aW9ucy5yZVNpemVXaWR0aCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgcXVhbGl0eVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChyYXdGb3JtYXQgYXMgYW55LCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUZvcm1hdExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgY29uc3QgbmVlZEFkZFdhdGVybWFyayA9ICh3YXRlcm1hcmtPcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIHJldHVybiAhIXdhdGVybWFya09wdGlvbnMgJiYgISF3YXRlcm1hcmtPcHRpb25zLmlzQWRkV2F0ZXJtYXJrICYmIGltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbmVlZENvbXByZXNzID0gKGNvbXByZXNzT3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgY29tcHJlc3NPcHRpb25zID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXHJcbiAgICBpZiAodmFsaWRQYXJhbShjb21wcmVzc09wdGlvbnMucXVhbGl0eSkgJiYgY29tcHJlc3NPcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzUmVTaXplQnlQZXJjZW50ICYmIHZhbGlkUGFyYW0oY29tcHJlc3NPcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzUmVTaXplICYmIHZhbGlkUGFyYW0oY29tcHJlc3NPcHRpb25zLnJlU2l6ZUhlaWdodCwgY29tcHJlc3NPcHRpb25zLnJlU2l6ZVdpZHRoKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzT3B0aW9ucy5pc1JvdGF0ZSAmJiBjb21wcmVzc09wdGlvbnMucm90YXRlRGVncmVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzQ29udmVydCkge1xyXG4gICAgICBjb25zdCBuZXdGb3JtYXQgPSBjb21wcmVzc09wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJ1xyXG4gICAgICByZXR1cm4gZmlsZUV4dCAhPT0gbmV3Rm9ybWF0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeyBpc1VybCB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCB1cGxvYWQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwbG9hZCwgZ28gZ28gZ28nKVxyXG4gICAgICAuYXJndW1lbnRzKCdbaW5wdXQuLi5dJylcclxuICAgICAgLmFsaWFzKCd1JylcclxuICAgICAgLmFjdGlvbigoaW5wdXQ6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGlucHV0XHJcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXHJcbiAgICAgICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGAke2l0ZW19IGRvZXMgbm90IGV4aXN0LmApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBleGlzdFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcclxuIiwiXHJcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncXVhbGl0eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFknKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucXVhbGl0eSB8fCAxMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0NvbnZlcnQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0NvbnZlcnQgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjb252ZXJ0Rm9ybWF0JyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBjaG9pY2VzOiBbJ2F2aWYnLCAnZHonLCAnZml0cycsICdnaWYnLCAnaGVpZicsICdpbnB1dCcsICdqcGVnJywgJ2pwZycsICdqcDInLCAnanhsJywgJ21hZ2ljaycsICdvcGVuc2xpZGUnLCAncGRmJywgJ3BuZycsICdwcG0nLCAncmF3JywgJ3N2ZycsICd0aWZmJywgJ3RpZicsICd2JywgJ3dlYnAnXSxcclxuICAgICAgZGVmYXVsdDogJ2pwZydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVXaWR0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVdpZHRoIHx8IDUwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZUhlaWdodCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVIZWlnaHQgfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZVNpemVCeVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplUGVyY2VudCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplUGVyY2VudCB8fCA1MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUm90YXRlJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JPVEFURScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JvdGF0ZSB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JvdGF0ZURlZ3JlZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yb3RhdGVEZWdyZWUgfHwgOTBcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNBZGRXYXRlcm1hcmsnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0FkZFdhdGVybWFyayB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1R5cGUnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBjaG9pY2VzOiBbJ3RleHQnLCAnaW1hZ2UnXSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUeXBlIHx8ICd0ZXh0J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzRnVsbFNjcmVlbldhdGVybWFyaycsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Z1bGxTY3JlZW5XYXRlcm1hcmsgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0RlZ3JlZSB8fCAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVGV4dCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1RleHQgfHwgJydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtGb250UGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRm9udFBhdGggfHwgJydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtTY2FsZVJhdGlvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtTY2FsZVJhdGlvIHx8IDAuMTVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtDb2xvcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1InKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrQ29sb3IgfHwgJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrSW1hZ2VQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtJbWFnZVBhdGggfHwgJydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtQb3NpdGlvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBjaG9pY2VzOiBbJ25vcnRoJywgJ25vcnRoZWFzdCcsICdzb3V0aGVhc3QnLCAnc291dGgnLCAnc291dGh3ZXN0JywgJ25vcnRod2VzdCcsICd3ZXN0JywgJ2Vhc3QnLCAnY2VudGVyJywgJ2NlbnRyZSddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1Bvc2l0aW9uIHx8ICdzb3V0aGVhc3QnXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgY29tcHJlc3MgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvY29tcHJlc3MnXHJcbmltcG9ydCB3YXRlcm1hcmsgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrJ1xyXG5cclxuLy8gaGFuZGxlIG1vZHVsZXMgY29uZmlnIC0+IHNhdmUgdG8gcGljZ28gY29uZmlnIGZpbGVcclxuY29uc3QgaGFuZGxlQ29uZmlnID0gYXN5bmMgKGN0eDogSVBpY0dvLCBwcm9tcHRzOiBJUGx1Z2luQ29uZmlnW10sIG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChwcm9tcHRzKVxyXG4gIGNvbnN0IGNvbmZpZ05hbWUgPSBtb2R1bGUgPT09ICd1cGxvYWRlcidcclxuICAgID8gYHBpY0JlZC4ke25hbWV9YCA6IG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJ1xyXG4gICAgICA/IGB0cmFuc2Zvcm1lci4ke25hbWV9YCA6IG1vZHVsZSA9PT0gJ2J1aWxkaW4nXHJcbiAgICAgICAgPyBgYnVpbGRJbi4ke25hbWV9YCA6IG5hbWVcclxuICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICBbY29uZmlnTmFtZV06IGFuc3dlclxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IHNldHRpbmcgPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdzZXQnKVxyXG4gICAgICAuYWxpYXMoJ2NvbmZpZycpXHJcbiAgICAgIC5hcmd1bWVudHMoJzxtb2R1bGU+IFtuYW1lXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY29uZmlndXJlIGNvbmZpZyBvZiBwaWNnbyBtb2R1bGVzLCB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgICAgICAgIC8vIGF3YWl0IGN0eC5wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgICAgICAgIC8vIGlmIGEgbW9kdWxlIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ2J1aWxkaW4nOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjb21wcmVzcycpIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3dhdGVybWFyaycpIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdidWlsZGluJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFsnY29tcHJlc3MnLCAnd2F0ZXJtYXJrJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgYnVpbGRpbiBtb2R1bGUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5idWlsZGluID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ3VwbG9hZGVyJzpcclxuICAgICAgICAgICAgICBjYXNlICd0cmFuc2Zvcm1lcic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChuYW1lKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmxvZy5lcnJvcihgTm8gJHttb2R1bGV9IG5hbWVkICR7bmFtZX1gKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHttb2R1bGV9YCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBDaG9vc2UgYShuKSAke21vZHVsZX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQoYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlclttb2R1bGVdKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ3BsdWdpbic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5sb2cuZXJyb3IoYE5vIHBsdWdpbiBuYW1lZCAke25hbWV9YClcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2luJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBwbHVnaW4nXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgYW5zd2VyLnBsdWdpbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdXNlTW9kdWxlTmFtZSA9IG1vZHVsZSA9PT0gJ3BsdWdpbicgPyAncGx1Z2lucycgOiBtb2R1bGVcclxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgY29uZmlnIHN1Y2Nlc3NmdWxseSEnKVxyXG4gICAgICAgICAgICBpZiAobW9kdWxlICE9PSAnYnVpbGRpbicpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oYElmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGNvbmZpZywgcGxlYXNlIHJ1biAncGljZ28gdXNlICR7dXNlTW9kdWxlTmFtZX0nYClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBzZXR0aW5nXHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiwgVW5kZWZpbmFibGUsIElDTElDb25maWdzLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCB1c2U6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1c2UnKVxyXG4gICAgICAuYXJndW1lbnRzKCdbbW9kdWxlXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndXNlIG1vZHVsZXMgb2YgcGljZ28nKVxyXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgICAgICAgLy8gYXdhaXQgY3R4LnBsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgICAgICAgbGV0IHByb21wdHM6IGFueVtdID0gW11cclxuICAgICAgICAgICAgY29uc3QgY29uZmlnOiBJQ0xJQ29uZmlncyA9IHtcclxuICAgICAgICAgICAgICB1cGxvYWRlcjoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3VwbG9hZGVyJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYW4gdXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci51cGxvYWRlci5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYSB0cmFuc2Zvcm1lcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnRyYW5zZm9ybWVyJykgfHwgJ3BhdGgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBwbHVnaW5zOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBwbHVnaW5zJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7aXRlbX1gKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgYW4gb3B0aW9uIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZ1ttb2R1bGVdKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9tcHRzLnB1c2goY29uZmlnW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lucycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHByb21wdHMgPSBPYmplY3Qua2V5cyhjb25maWcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBjb25maWdbaXRlbV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgZm9yIHBsdWdpbnMgb3B0aW9uIGZyb20gQXJyYXkgdG8gb2JqZWN0XHJcbiAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSBjdHguZ2V0Q29uZmlnPElTdHJpbmdLZXlNYXA8Ym9vbGVhbj4+KCdwaWNnb1BsdWdpbnMnKVxyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBsdWdpbnMpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IHRydWVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHBsdWdpbnNcclxuICAgICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICAgICAgICAgICBwaWNnb1BsdWdpbnM6IHBsdWdpbnNcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciB1cGxvYWRlciAmIHRyYW5zZm9ybWVyXHJcbiAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAncGljQmVkLmN1cnJlbnQnOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxyXG4gICAgICAgICAgICAgICdwaWNCZWQudXBsb2FkZXInOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxyXG4gICAgICAgICAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBhbnN3ZXIudHJhbnNmb3JtZXIgfHwgJ3BhdGgnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXNlXHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgcHJveHk6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5vcHRpb24oJy1wLCAtLXByb3h5IDx1cmw+JywgJ3NldCBwcm94eSBmb3IgdXBsb2FkaW5nJywgKHByb3h5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgICdwaWNCZWQucHJveHknOiBwcm94eVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwcm94eVxyXG4iLCJpbXBvcnQgbWF0Y2ggZnJvbSAnbWluaW1hdGNoJ1xyXG5pbXBvcnQgeyBJUGljR28sIElPcHRpb25zLCBJRmlsZVRyZWUgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZ2xvYmJ5IGZyb20gJ2dsb2JieSdcclxuaW1wb3J0IGVqcyBmcm9tICdlanMnXHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgdGVtcGxhdGUgZmlsZXMgdG8gZGVzdGluYXRpb24gZmlsZXMuXHJcbiAqIEBwYXJhbSB7UGljR299IGN0eFxyXG4gKiBAcGFyYW0ge0lPcHRpb25zfSBvcHRpb25zXHJcbiAqL1xyXG5jb25zdCBnZW5lcmF0ZSA9IGFzeW5jIChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBvcHRzID0gZ2V0T3B0aW9ucyhvcHRpb25zLnRtcClcclxuICAgIGNvbnN0IHNvdXJjZSA9IHBhdGguam9pbihvcHRpb25zLnRtcCwgJ3RlbXBsYXRlJylcclxuICAgIGxldCBhbnN3ZXJzID0ge31cclxuICAgIGlmIChvcHRzLnByb21wdHMgJiYgb3B0cy5wcm9tcHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYW5zd2VycyA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KG9wdHMucHJvbXB0cylcclxuICAgIH1cclxuICAgIGxldCBfZmlsZXM6IHN0cmluZ1tdID0gYXdhaXQgZ2xvYmJ5KFsnKiovKiddLCB7IGN3ZDogc291cmNlLCBkb3Q6IHRydWUgfSkgLy8gZ2V0IGZpbGVzJyBuYW1lIGFycmF5XHJcbiAgICBfZmlsZXMgPSBfZmlsZXMuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgbGV0IGdsb2IgPSAnJ1xyXG4gICAgICBPYmplY3Qua2V5cyhvcHRzLmZpbHRlcnMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKG1hdGNoKGl0ZW0sIGtleSwgeyBkb3Q6IHRydWUgfSkpIHtcclxuICAgICAgICAgIGdsb2IgPSBpdGVtXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAoZ2xvYikgeyAvLyBmaW5kIGEgZmlsdGVyIGV4cHJlc3Npb25cclxuICAgICAgICByZXR1cm4gZmlsdGVycyhjdHgsIG9wdHMuZmlsdGVyc1tnbG9iXSwgYW5zd2VycylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKF9maWxlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGN0eC5sb2cud2FybignVGVtcGxhdGUgZmlsZXMgbm90IGZvdW5kIScpXHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWxlcyA9IHJlbmRlcihfZmlsZXMsIHNvdXJjZSwgYW5zd2VycylcclxuICAgIHdyaXRlRmlsZVRyZWUob3B0aW9ucy5kZXN0LCBmaWxlcylcclxuICAgIGlmICh0eXBlb2Ygb3B0cy5jb21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBvcHRzLmNvbXBsZXRlKHsgYW5zd2Vycywgb3B0aW9ucywgZmlsZXM6IF9maWxlcywgY3R4IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0cy5jb21wbGV0ZU1lc3NhZ2UpIHtcclxuICAgICAgY3R4LmxvZy5zdWNjZXNzKG9wdHMuY29tcGxldGVNZXNzYWdlKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKCdEb25lIScpXHJcbiAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICByZXR1cm4gY3R4LmxvZy5lcnJvcihlKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgZmlsdGVycycgcmVzdWx0XHJcbiAqIEBwYXJhbSBjdHggUGljR29cclxuICogQHBhcmFtIGV4cCBjb25kaXRpb24gZXhwcmVzc2lvblxyXG4gKiBAcGFyYW0gZGF0YSBvcHRpb25zIGRhdGFcclxuICovXHJcbmNvbnN0IGZpbHRlcnMgPSAoY3R4OiBJUGljR28sIGV4cDogYW55LCBkYXRhOiBhbnkpOiBib29sZWFuID0+IHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXBsdXMtb3BlcmFuZHMsIG5vLW5ldy1mdW5jLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsXHJcbiAgY29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCAnd2l0aCAoZGF0YSkgeyByZXR1cm4gJyArIGV4cCArICd9JylcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIGZuKGRhdGEpXHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgY3R4LmxvZy5lcnJvcihgRXJyb3Igd2hlbiBldmFsdWF0aW5nIGZpbHRlciBjb25kaXRpb246ICR7SlNPTi5zdHJpbmdpZnkoZXhwKX1gKVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRlbXBsYXRlIG9wdGlvbnNcclxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlUGF0aFxyXG4gKi9cclxuY29uc3QgZ2V0T3B0aW9ucyA9ICh0ZW1wbGF0ZVBhdGg6IHN0cmluZyk6IGFueSA9PiB7XHJcbiAgY29uc3Qgb3B0aW9uc1BhdGggPSBwYXRoLmpvaW4odGVtcGxhdGVQYXRoLCAnaW5kZXguanMnKVxyXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnNQYXRoKSkge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1aXJlKG9wdGlvbnNQYXRoKVxyXG4gICAgcmV0dXJuIG9wdGlvbnNcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHt9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVuZGVyIGZpbGVzIHRvIGEgdmlydHVhbCB0cmVlIG9iamVjdFxyXG4gKiBAcGFyYW0ge2FycmF5fSBmaWxlc1xyXG4gKi9cclxuY29uc3QgcmVuZGVyID0gKGZpbGVzOiBzdHJpbmdbXSwgc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IGFueSA9PiB7XHJcbiAgY29uc3QgZmlsZVRyZWU6IElGaWxlVHJlZSA9IHt9XHJcbiAgZmlsZXMuZm9yRWFjaCgoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgZmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oc291cmNlLCBmaWxlUGF0aCksICd1dGY4JylcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBlanMucmVuZGVyKGZpbGUsIG9wdGlvbnMpXHJcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpIHx8IC9bXlxcc10vLnRlc3QoY29udGVudCkpIHtcclxuICAgICAgZmlsZVRyZWVbZmlsZVBhdGhdID0gY29udGVudFxyXG4gICAgfVxyXG4gIH0pXHJcbiAgcmV0dXJuIGZpbGVUcmVlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXcml0ZSByZW5kZXJlZCBmaWxlcycgY29udGVudCB0byByZWFsIGZpbGVcclxuICogQHBhcmFtIHtzdHJpbmd9IGRpclxyXG4gKiBAcGFyYW0ge29iamVjdH0gZmlsZXNcclxuICovXHJcbmNvbnN0IHdyaXRlRmlsZVRyZWUgPSAoZGlyOiBzdHJpbmcsIGZpbGVzOiBhbnkpOiB2b2lkID0+IHtcclxuICBPYmplY3Qua2V5cyhmaWxlcykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXIsIG5hbWUpXHJcbiAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShmaWxlUGF0aCkpXHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBmaWxlc1tuYW1lXSlcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIGZpbHRlcnMsXHJcbiAgZ2VuZXJhdGUsXHJcbiAgcmVuZGVyLFxyXG4gIHdyaXRlRmlsZVRyZWVcclxufVxyXG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuLi8uLi91dGlscy9pbml0VXRpbHMnXHJcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcydcclxuaW1wb3J0IGRvd25sb2FkIGZyb20gJ2Rvd25sb2FkLWdpdC1yZXBvJ1xyXG5pbXBvcnQgeyBJT3B0aW9ucywgSVBsdWdpbiwgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBybSBmcm9tICdyaW1yYWYnXHJcblxyXG5jb25zdCBydW4gPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XHJcbiAgLy8gY29uc3QgbmFtZSA9IG9wdGlvbnMuaW5QbGFjZSA/IHBhdGgucmVsYXRpdmUoJy4uLycsIHByb2Nlc3MuY3dkKCkpIDogb3B0aW9ucy5wcm9qZWN0XHJcbiAgaWYgKG9wdGlvbnMub2ZmbGluZSkgeyAvLyBvZmZsaW5lIG1vZGVcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudGVtcGxhdGUpKSB7XHJcbiAgICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3R4LmxvZy5lcnJvcihgTG9jYWwgdGVtcGxhdGUgJHtvcHRpb25zLnRlbXBsYXRlfSBub3QgZm91bmRgKVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7IC8vIG9ubGluZSBtb2RlXHJcbiAgICBvcHRpb25zLnRlbXBsYXRlID0gIW9wdGlvbnMuaGFzU2xhc2hcclxuICAgICAgPyAnUGljR28vcGljZ28tdGVtcGxhdGUtJyArIG9wdGlvbnMudGVtcGxhdGUgLy8gb2ZmaWNpYWwgdGVtcGxhdGVcclxuICAgICAgOiBvcHRpb25zLnRlbXBsYXRlXHJcbiAgICBkb3dubG9hZEFuZEdlbmVyYXRlKGN0eCwgb3B0aW9ucylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkb3dubG9hZCB0ZW1wbGF0ZSAmIGdlbmVyYXRlXHJcbiAqIEBwYXJhbSB7IFBpY0dvIH0gY3R4XHJcbiAqIEBwYXJhbSB7IElPcHRpb25zIH0gb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgZG93bmxvYWRBbmRHZW5lcmF0ZSA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcclxuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zLnRtcCkpIHtcclxuICAgIHJtLnN5bmMob3B0aW9ucy50bXApXHJcbiAgfVxyXG4gIGN0eC5sb2cuaW5mbygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkaW5nLi4uJylcclxuICBkb3dubG9hZChvcHRpb25zLnRlbXBsYXRlLCBvcHRpb25zLnRtcCwgeyBjbG9uZTogb3B0aW9ucy5jbG9uZSB9LCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgaWYgKGVycikge1xyXG4gICAgICByZXR1cm4gY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGVkIScpXHJcbiAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBpbml0OiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5pdCcpXHJcbiAgICAgIC5hcmd1bWVudHMoJzx0ZW1wbGF0ZT4gW3Byb2plY3RdJylcclxuICAgICAgLm9wdGlvbignLS1jbG9uZScsICd1c2UgZ2l0IGNsb25lJylcclxuICAgICAgLm9wdGlvbignLS1vZmZsaW5lJywgJ3VzZSBjYWNoZWQgdGVtcGxhdGUnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NyZWF0ZSBwaWNnbyBwbHVnaW5cXCdzIGRldmVsb3BtZW50IHRlbXBsYXRlcycpXHJcbiAgICAgIC5hY3Rpb24oKHRlbXBsYXRlOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIC8vIFRoYW5rcyB0byB2dWUtY2xpIGluaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtY2xpL2Jsb2IvbWFzdGVyL2Jpbi92dWUtaW5pdFxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzU2xhc2ggPSB0ZW1wbGF0ZS5pbmNsdWRlcygnLycpXHJcbiAgICAgICAgICAgIGNvbnN0IGluUGxhY2UgPSAhcHJvamVjdCB8fCBwcm9qZWN0ID09PSAnLidcclxuICAgICAgICAgICAgY29uc3QgZGVzdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0IHx8ICcuJylcclxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBwcm9ncmFtLmNsb25lIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIGNvbnN0IG9mZmxpbmUgPSBwcm9ncmFtLm9mZmxpbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3QgdG1wID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNnby90ZW1wbGF0ZXMnLCB0ZW1wbGF0ZS5yZXBsYWNlKC9bLzpdL2csICctJykpIC8vIGZvciBjYWNoaW5nIHRlbXBsYXRlXHJcblxyXG4gICAgICAgICAgICBpZiAocHJvZ3JhbS5vZmZsaW5lKSB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0bXBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZSxcclxuICAgICAgICAgICAgICBwcm9qZWN0LFxyXG4gICAgICAgICAgICAgIGhhc1NsYXNoLFxyXG4gICAgICAgICAgICAgIGluUGxhY2UsXHJcbiAgICAgICAgICAgICAgZGVzdCxcclxuICAgICAgICAgICAgICBjbG9uZSxcclxuICAgICAgICAgICAgICB0bXAsXHJcbiAgICAgICAgICAgICAgb2ZmbGluZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBwcm9qZWN0IGlzIGVtcHR5IG9yIGV4aXN0XHJcbiAgICAgICAgICAgIGlmIChpblBsYWNlIHx8IGZzLmV4aXN0c1N5bmMoZGVzdCkpIHtcclxuICAgICAgICAgICAgICBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogaW5QbGFjZVxyXG4gICAgICAgICAgICAgICAgICAgID8gJ0dlbmVyYXRlIHByb2plY3QgaW4gY3VycmVudCBkaXJlY3Rvcnk/J1xyXG4gICAgICAgICAgICAgICAgICAgIDogJ1RhcmdldCBkaXJlY3RvcnkgZXhpc3RzLiBDb250aW51ZT8nLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnb2snXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXSkudGhlbigoYW5zd2VyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIub2spIHtcclxuICAgICAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBwcm9qZWN0IGlzIGdpdmVuXHJcbiAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vbignLS1oZWxwJywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZygnRXhhbXBsZXM6JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggYW4gb2ZmaWNpYWwgdGVtcGxhdGUnKSlcclxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgcGx1Z2luIG15LXByb2plY3QnKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgc3RyYWlnaHQgZnJvbSBhIGdpdGh1YiB0ZW1wbGF0ZScpKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCB1c2VybmFtZS9yZXBvIG15LXByb2plY3QnKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGluaXRcclxuIiwiaW1wb3J0IHsgSVBsdWdpbiwgSVBpY0dvLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBpMThuOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaTE4bicpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tsYW5nXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY2hhbmdlIHBpY2dvIGxhbmd1YWdlJylcclxuICAgICAgLmFjdGlvbihhc3luYyAobGFuZzogc3RyaW5nID0gJycpID0+IHtcclxuICAgICAgICBjb25zdCBsaXN0ID0gY3R4LmkxOG4uZ2V0TGFuZ3VhZ2VMaXN0KClcclxuICAgICAgICBpZiAoIWxhbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgbmFtZTogJ2kxOG4nLFxyXG4gICAgICAgICAgICAgIGNob2ljZXM6IGxpc3QsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGxhbmd1YWdlJyxcclxuICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxzdHJpbmc+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgY3R4LmkxOG4uc2V0TGFuZ3VhZ2UoYW5zd2VyLmkxOG4pXHJcbiAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoYExhbmd1YWdlIHNldCB0byAke2Fuc3dlci5pMThufWApXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFsaXN0LmluY2x1ZGVzKGxhbmcpKSB7XHJcbiAgICAgICAgICByZXR1cm4gY3R4LmxvZy53YXJuKCdObyBzdWNoIGxhbmd1YWdlJylcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LmkxOG4uc2V0TGFuZ3VhZ2UobGFuZylcclxuICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoYExhbmd1YWdlIHNldCB0byAke2xhbmd9YClcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGkxOG5cclxuIiwiaW1wb3J0IHsgSVBsdWdpbiwgSUxpZmVjeWNsZVBsdWdpbnMgfSBmcm9tICcuLi90eXBlcydcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGVQbHVnaW5zIGltcGxlbWVudHMgSUxpZmVjeWNsZVBsdWdpbnMge1xyXG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0OiBNYXA8c3RyaW5nLCBJUGx1Z2luPlxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWRNYXA6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPlxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nXHJcblxyXG4gIGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubmFtZSA9IG5hbWVcclxuICAgIHRoaXMubGlzdCA9IG5ldyBNYXAoKVxyXG4gICAgdGhpcy5wbHVnaW5JZE1hcCA9IG5ldyBNYXAoKVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIgKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignaWQgaXMgcmVxdWlyZWQhJylcclxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcclxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcclxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcclxuICAgIGlmIChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pIHtcclxuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pPy5wdXNoKGlkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbiwgW2lkXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlciAocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcclxuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXHJcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXROYW1lICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZVxyXG4gIH1cclxuXHJcbiAgZ2V0IChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcclxuICB9XHJcblxyXG4gIGdldExpc3QgKCk6IElQbHVnaW5bXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cclxuICB9XHJcblxyXG4gIGdldElkTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEN1cnJlbnRQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKTogdm9pZCA9PiB7XHJcbiAgTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luID0gbmFtZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBsdWdpbk5hbWUgPSAoKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgcmV0dXJuIExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpblxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVQbHVnaW5zXHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXByb21pc2VzICovXHJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInXHJcbmltcG9ydCBpbnF1aXJlciwgeyBJbnF1aXJlciB9IGZyb20gJ2lucXVpcmVyJ1xyXG5pbXBvcnQgeyBJUGx1Z2luLCBJQ29tbWFuZGVyLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IGNvbW1hbmRlcnMgZnJvbSAnLi4vcGx1Z2lucy9jb21tYW5kZXInXHJcbmltcG9ydCB7IGdldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbW1hbmRlciBpbXBsZW1lbnRzIElDb21tYW5kZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZSA9ICdjb21tYW5kZXInXHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+ID0gbmV3IE1hcCgpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+ID0gbmV3IE1hcCgpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG5cclxuICBwcm9ncmFtOiBDb21tYW5kXHJcbiAgaW5xdWlyZXI6IElucXVpcmVyXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKVxyXG4gICAgdGhpcy5pbnF1aXJlciA9IGlucXVpcmVyXHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWVcclxuICB9XHJcblxyXG4gIGluaXQgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9ncmFtXHJcbiAgICAgIC52ZXJzaW9uKHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT04sICctdiwgLS12ZXJzaW9uJylcclxuICAgICAgLm9wdGlvbignLWQsIC0tZGVidWcnLCAnZGVidWcgbW9kZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgZGVidWc6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub3B0aW9uKCctcywgLS1zaWxlbnQnLCAnc2lsZW50IG1vZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vbignY29tbWFuZDoqJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihgSW52YWxpZCBjb21tYW5kOiAke3RoaXMucHJvZ3JhbS5hcmdzLmpvaW4oJyAnKX1cXG5TZWUgLS1oZWxwIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLmApXHJcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgLy8gYnVpbHQtaW4gY29tbWFuZHNcclxuICAgIGNvbW1hbmRlcnModGhpcy5jdHgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIGlzIHJlcXVpcmVkIScpXHJcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5oYW5kbGUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbi5oYW5kbGUgbXVzdCBiZSBhIGZ1bmN0aW9uIScpXHJcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBwbHVnaW4gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgY29uc3QgY3VycmVudFBsdWdpbk5hbWUgPSBnZXRDdXJyZW50UGx1Z2luTmFtZSgpXHJcbiAgICBpZiAoY3VycmVudFBsdWdpbk5hbWUgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKGN1cnJlbnRQbHVnaW5OYW1lKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KGN1cnJlbnRQbHVnaW5OYW1lKT8ucHVzaChpZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChjdXJyZW50UGx1Z2luTmFtZSwgW2lkXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlciAocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcclxuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXHJcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRMaXN0KCkuZm9yRWFjaCgoaXRlbTogSVBsdWdpbikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGl0ZW0uaGFuZGxlKHRoaXMuY3R4KVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCAoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXHJcbiAgfVxyXG5cclxuICBnZXRMaXN0ICgpOiBJUGx1Z2luW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXHJcbiAgfVxyXG5cclxuICBnZXRJZExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbW1hbmRlclxyXG4iLCJpbXBvcnQgcGx1Z2luSGFuZGxlciBmcm9tICcuL3BsdWdpbkhhbmRsZXInXHJcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnXHJcbmltcG9ydCB1cGxvYWQgZnJvbSAnLi91cGxvYWQnXHJcbmltcG9ydCBzZXR0aW5nIGZyb20gJy4vc2V0dGluZydcclxuaW1wb3J0IHVzZSBmcm9tICcuL3VzZSdcclxuaW1wb3J0IHByb3h5IGZyb20gJy4vcHJveHknXHJcbmltcG9ydCBpbml0IGZyb20gJy4vaW5pdCdcclxuaW1wb3J0IGkxOG4gZnJvbSAnLi9pMThuJ1xyXG5pbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IChjdHg6IElQaWNHbyk6IHZvaWQgPT4ge1xyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3BsdWdpbkhhbmRsZXInLCBwbHVnaW5IYW5kbGVyKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2NvbmZpZycsIGNvbmZpZylcclxuICBjdHguY21kLnJlZ2lzdGVyKCdzZXR0aW5nJywgc2V0dGluZylcclxuICBjdHguY21kLnJlZ2lzdGVyKCd1cGxvYWQnLCB1cGxvYWQpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigndXNlJywgdXNlKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3Byb3h5JywgcHJveHkpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignaW5pdCcsIGluaXQpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignaTE4bicsIGkxOG4pXHJcbn1cclxuIiwiZXhwb3J0IGVudW0gSUxvZ1R5cGUge1xyXG4gIHN1Y2Nlc3MgPSAnc3VjY2VzcycsXHJcbiAgaW5mbyA9ICdpbmZvJyxcclxuICB3YXJuID0gJ3dhcm4nLFxyXG4gIGVycm9yID0gJ2Vycm9yJ1xyXG59XHJcblxyXG4vKipcclxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBieSB1c2Vyc1xyXG4gKi9cclxuZXhwb3J0IGVudW0gSUJ1aWxkSW5FdmVudCB7XHJcbiAgVVBMT0FEX1BST0dSRVNTID0gJ3VwbG9hZFByb2dyZXNzJyxcclxuICBGQUlMRUQgPSAnZmFpbGVkJyxcclxuICBCRUZPUkVfVFJBTlNGT1JNID0gJ2JlZm9yZVRyYW5zZm9ybScsXHJcbiAgQkVGT1JFX1VQTE9BRCA9ICdiZWZvcmVVcGxvYWQnLFxyXG4gIEFGVEVSX1VQTE9BRCA9ICdhZnRlclVwbG9hZCcsXHJcbiAgRklOSVNIRUQgPSAnZmluaXNoZWQnLFxyXG4gIElOU1RBTEwgPSAnaW5zdGFsbCcsXHJcbiAgVU5JTlNUQUxMID0gJ3VuaW5zdGFsbCcsXHJcbiAgVVBEQVRFID0gJ3VwZGF0ZScsXHJcbiAgTk9USUZJQ0FUSU9OID0gJ25vdGlmaWNhdGlvbidcclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgb25seSBieSBwaWNnb1xyXG4gKi9cclxuZXhwb3J0IGVudW0gSUJ1c0V2ZW50IHtcclxuICBDT05GSUdfQ0hBTkdFID0gJ0NPTkZJR19DSEFOR0UnXHJcbn1cclxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHV0aWwgZnJvbSAndXRpbCdcclxuaW1wb3J0IHsgSUxvZ1R5cGUgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQge1xyXG4gIElMb2dBcmd2VHlwZSxcclxuICBJTG9nQXJndlR5cGVXaXRoRXJyb3IsXHJcbiAgVW5kZWZpbmFibGUsXHJcbiAgSUxvZ0NvbG9yLFxyXG4gIElMb2dnZXIsXHJcbiAgSVBpY0dvXHJcbn0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IGZvcmNlTnVtYmVyLCBpc0RldiB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxldmVsID0ge1xyXG4gICAgW0lMb2dUeXBlLnN1Y2Nlc3NdOiAnZ3JlZW4nLFxyXG4gICAgW0lMb2dUeXBlLmluZm9dOiAnYmx1ZScsXHJcbiAgICBbSUxvZ1R5cGUud2Fybl06ICd5ZWxsb3cnLFxyXG4gICAgW0lMb2dUeXBlLmVycm9yXTogJ3JlZCdcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIGxvZ0xldmVsITogc3RyaW5nXHJcbiAgcHJpdmF0ZSBsb2dQYXRoITogc3RyaW5nXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMb2cgKHR5cGU6IElMb2dUeXBlLCAuLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICAvLyBjaGVjayBjb25maWcuc2lsZW50XHJcbiAgICBpZiAoIXRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2lsZW50JykpIHtcclxuICAgICAgY29uc3QgbG9nSGVhZGVyID0gY2hhbGtbdGhpcy5sZXZlbFt0eXBlXSBhcyBJTG9nQ29sb3JdKGBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dOmApXHJcbiAgICAgIGNvbnNvbGUubG9nKGxvZ0hlYWRlciwgLi4ubXNnKVxyXG4gICAgICB0aGlzLmxvZ0xldmVsID0gdGhpcy5jdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sb2dMZXZlbCcpXHJcbiAgICAgIHRoaXMubG9nUGF0aCA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MubG9nUGF0aCcpIHx8IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnLi9waWNsaXN0LmxvZycpXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIGZpeCBsb2cgZmlsZSBpcyB0b28gbGFyZ2UsIG5vdyB0aGUgbG9nIGZpbGUncyBkZWZhdWx0IHNpemUgaXMgMTAgTUJcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jaGVja0xvZ0ZpbGVJc0xhcmdlKHRoaXMubG9nUGF0aClcclxuICAgICAgICAgIGlmIChyZXN1bHQuaXNMYXJnZSkge1xyXG4gICAgICAgICAgICBjb25zdCB3YXJuaW5nTXNnID0gYExvZyBmaWxlIGlzIHRvbyBsYXJnZSAoPiAkeyhyZXN1bHQubG9nRmlsZVNpemVMaW1pdCEpIC8gMTAyNCAvIDEwMjQgfHwgJzEwJ30gTUIpLCByZWNyZWF0ZSBsb2cgZmlsZWBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdbUGljTGlzdCBXQVJOXTonKSwgd2FybmluZ01zZylcclxuICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZUxvZ0ZpbGUodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgICBtc2cudW5zaGlmdCh3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVXcml0ZUxvZyh0aGlzLmxvZ1BhdGgsIHR5cGUsIC4uLm1zZylcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB3aHk/Pz9cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiBjaGVja2luZyBsb2cgZmlsZSBzaXplJywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrTG9nRmlsZUlzTGFyZ2UgKGxvZ1BhdGg6IHN0cmluZyk6IHtcclxuICAgIGlzTGFyZ2U6IGJvb2xlYW5cclxuICAgIGxvZ0ZpbGVTaXplPzogbnVtYmVyXHJcbiAgICBsb2dGaWxlU2l6ZUxpbWl0PzogbnVtYmVyXHJcbiAgfSB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZSA9IGZzLnN0YXRTeW5jKGxvZ1BhdGgpLnNpemVcclxuICAgICAgY29uc3QgbG9nRmlsZVNpemVMaW1pdCA9IGZvcmNlTnVtYmVyKHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxudW1iZXI+Pignc2V0dGluZ3MubG9nRmlsZVNpemVMaW1pdCcpIHx8IDEwKSAqIDEwMjQgKiAxMDI0IC8vIDEwIE1CIGRlZmF1bHRcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc0xhcmdlOiBsb2dGaWxlU2l6ZSA+IGxvZ0ZpbGVTaXplTGltaXQsXHJcbiAgICAgICAgbG9nRmlsZVNpemUsXHJcbiAgICAgICAgbG9nRmlsZVNpemVMaW1pdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpc0xhcmdlOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZUxvZ0ZpbGUgKGxvZ1BhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcclxuICAgICAgZnMudW5saW5rU3luYyhsb2dQYXRoKVxyXG4gICAgICBmcy5jcmVhdGVGaWxlU3luYyhsb2dQYXRoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVXcml0ZUxvZyAobG9nUGF0aDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrTG9nTGV2ZWwodHlwZSwgdGhpcy5sb2dMZXZlbCkpIHtcclxuICAgICAgICBsZXQgbG9nID0gYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKX0gW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XSBgXHJcbiAgICAgICAgbXNnLmZvckVhY2goKGl0ZW06IElMb2dBcmd2VHlwZVdpdGhFcnJvcikgPT4ge1xyXG4gICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFcnJvciAmJiB0eXBlID09PSAnZXJyb3InKSB7XHJcbiAgICAgICAgICAgIGxvZyArPSBgXFxuLS0tLS0tRXJyb3IgU3RhY2sgQmVnaW4tLS0tLS1cXG4ke3V0aWwuZm9ybWF0KGl0ZW0/LnN0YWNrKX1cXG4tLS0tLS0tRXJyb3IgU3RhY2sgRW5kLS0tLS0tLSBgXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0sIG51bGwsIDIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9nICs9IGAke2l0ZW0gYXMgc3RyaW5nfSBgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBsb2cgKz0gJ1xcbidcclxuICAgICAgICAvLyBBIHN5bmNocm9uaXplZCBhcHByb2FjaCB0byBhdm9pZCBsb2cgbXNnIHNlcXVlbmNlIGVycm9yc1xyXG4gICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKGxvZ1BhdGgsIGxvZylcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gd3JpdGluZyBsb2cgZmlsZScsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrTG9nTGV2ZWwgKHR5cGU6IHN0cmluZywgbGV2ZWw6IHVuZGVmaW5lZCB8IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobGV2ZWwgPT09IHVuZGVmaW5lZCB8fCBsZXZlbCA9PT0gJ2FsbCcpIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGxldmVsKSkge1xyXG4gICAgICByZXR1cm4gbGV2ZWwuc29tZSgoaXRlbTogc3RyaW5nKSA9PiAoaXRlbSA9PT0gdHlwZSB8fCBpdGVtID09PSAnYWxsJykpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHlwZSA9PT0gbGV2ZWxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN1Y2Nlc3MgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5zdWNjZXNzLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBpbmZvICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuaW5mbywgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgZXJyb3IgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5lcnJvciwgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgd2FybiAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLndhcm4sIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGRlYnVnICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXYoKSkge1xyXG4gICAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMb2dnZXJcclxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIElCdWlsZEluQ29tcHJlc3NPcHRpb25zLCBJTGlmZWN5Y2xlUGx1Z2lucywgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sIElQaWNHbywgSVBsdWdpbiwgVW5kZWZpbmFibGUgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZ2V0VVJMRmlsZSwgaGFuZGxlVXJsRW5jb2RlLCBpbWFnZVByb2Nlc3MsIGlzVXJsLCBuZWVkQ29tcHJlc3MsIG5lZWRBZGRXYXRlcm1hcmssIGltYWdlQWRkV2F0ZXJNYXJrIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4uL3V0aWxzL2NyZWF0ZUNvbnRleHQnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHRmTGluazogc3RyaW5nID0gJ2h0dHBzOi8vcmVsZWFzZS5waWNsaXN0LmNuL3NpbWhlaS50dGYnXHJcbiAgdHRmUGF0aDogc3RyaW5nXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuICAgIGZzLmVtcHR5RGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICB0aGlzLnR0ZlBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdhc3NldHMnLCAnc2ltaGVpLnR0ZicpXHJcbiAgfVxyXG5cclxuICBhc3luYyBkb3dubG9hZFRURiAoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dERpcikpIHtcclxuICAgICAgZnMubWtkaXJTeW5jKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpKSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZS4nKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldCh0aGlzLnR0ZkxpbmssIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnR0ZlBhdGgsIHJlcy5kYXRhKVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzLicpXHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHN0YXJ0IChpbnB1dDogYW55W10pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgLy8gZW5zdXJlIGV2ZXJ5IHVwbG9hZCBwcm9jZXNzIGhhcyBhbiB1bmlxdWUgY29udGV4dFxyXG4gICAgY29uc3QgY3R4ID0gY3JlYXRlQ29udGV4dCh0aGlzLmN0eClcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGltYWdlcyBpbnB1dFxyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGFuIGFycmF5LicpXHJcbiAgICAgIH1cclxuICAgICAgY3R4LmlucHV0ID0gaW5wdXRcclxuICAgICAgY3R4Lm91dHB1dCA9IFtdXHJcbiAgICAgIGNvbnN0IGNvbXByZXNzT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJylcclxuICAgICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKVxyXG4gICAgICBpZiAoY29tcHJlc3NPcHRpb25zIHx8IHdhdGVybWFya09wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRlbXBGaWxlUGF0aCkpIHtcclxuICAgICAgICAgIGZzLm1rZGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdhdGVybWFya01zZyA9ICdBZGQgd2F0ZXJtYXJrIHRvIGltYWdlJ1xyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzTXNnID0gJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvXHJcbiAgICAgICAgICBpZiAoaXNVcmwoaXRlbSkpIHtcclxuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgICAgICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGluZm8uYnVmZmVyLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBpbmZvLmJ1ZmZlciwgY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gaW5mby5leHRuYW1lID8/ICcnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgPyBgJHtwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSl9JHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcclxuICAgICAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlclxyXG4gICAgICAgICAgICBpZiAobmVlZEFkZFdhdGVybWFyayh3YXRlcm1hcmtPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICBpZiAoIWRvd25sb2FkVFRGUmV0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5sb2cud2FybignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLCBza2lwIGFkZCB3YXRlcm1hcmsuJylcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKHdhdGVybWFya01zZylcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VBZGRXYXRlck1hcmsoZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKGNvbXByZXNzTXNnKVxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKHRyYW5zZm9ybWVkQnVmZmVyID8/IGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgY29tcHJlc3NPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVkQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgIGlmIChjb21wcmVzc09wdGlvbnM/LmlzQ29udmVydCkge1xyXG4gICAgICAgICAgICAgICAgbmV3RXh0ID0gY29tcHJlc3NPcHRpb25zPy5jb252ZXJ0Rm9ybWF0ID8/ICdqcGcnXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld0V4dCA9IHBhdGguZXh0bmFtZShpdGVtKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcclxuICAgICAgICAgICAgICBjdHguaW5wdXRbaW5kZXhdID0gdGVtcEZpbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGxpZmVjeWNsZSBtYWluXHJcbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVHJhbnNmb3JtKGN0eClcclxuICAgICAgYXdhaXQgdGhpcy5kb1RyYW5zZm9ybShjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVXBsb2FkKGN0eClcclxuICAgICAgYXdhaXQgdGhpcy5kb1VwbG9hZChjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF0cmFuc2Zvcm1lcikge1xyXG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB0cmFuc2Zvcm1lciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHRyYW5zZm9ybWVyIC0gcGF0aGApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9VUExPQUQsIGN0eClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGxldCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgIGxldCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgaWYgKCF1cGxvYWRlcikge1xyXG4gICAgICB0eXBlID0gJ3NtbXMnXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xyXG4gICAgICB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KCdzbW1zJylcclxuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHVwbG9hZGVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdXBsb2FkZXIgLSBzbW1zYClcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdXBsb2FkZXI/LmhhbmRsZShjdHgpXHJcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XHJcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIGxldCBtc2cgPSAnJ1xyXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHR5cGVvZiBjdHgub3V0cHV0W2ldLmltZ1VybCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBtc2cgKz0gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISlcclxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgbXNnICs9ICdcXG4nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxyXG4gICAgfVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zIChsaWZlQ3ljbGVQbHVnaW5zOiBJTGlmZWN5Y2xlUGx1Z2lucywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXHJcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcclxuICAgIGNvbnN0IGxpZmVDeWNsZU5hbWUgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldE5hbWUoKVxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxyXG4gICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0pKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXHJcbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuLyoqXHJcbiAqIGNyZWF0ZSBhbiB1bmlxdWUgY29udGV4dCBmb3IgZWFjaCB1cGxvYWQgcHJvY2Vzc1xyXG4gKiBAcGFyYW0gY3R4XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlQ29udGV4dCA9IChjdHg6IElQaWNHbyk6IElQaWNHbyA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGNvbmZpZ1BhdGg6IGN0eC5jb25maWdQYXRoLFxyXG4gICAgYmFzZURpcjogY3R4LmJhc2VEaXIsXHJcbiAgICBsb2c6IGN0eC5sb2csXHJcbiAgICBjbWQ6IGN0eC5jbWQsXHJcbiAgICBvdXRwdXQ6IFtdLFxyXG4gICAgaW5wdXQ6IFtdLFxyXG4gICAgcGx1Z2luTG9hZGVyOiBjdHgucGx1Z2luTG9hZGVyLFxyXG4gICAgcGx1Z2luSGFuZGxlcjogY3R4LnBsdWdpbkhhbmRsZXIsXHJcbiAgICBSZXF1ZXN0OiBjdHguUmVxdWVzdCxcclxuICAgIGhlbHBlcjogY3R4LmhlbHBlcixcclxuICAgIFZFUlNJT046IGN0eC5WRVJTSU9OLFxyXG4gICAgR1VJX1ZFUlNJT046IGN0eC5HVUlfVkVSU0lPTixcclxuICAgIHJlcXVlc3Q6IGN0eC5yZXF1ZXN0LFxyXG4gICAgaTE4bjogY3R4LmkxOG4sXHJcbiAgICBnZXRDb25maWc6IGN0eC5nZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2F2ZUNvbmZpZzogY3R4LnNhdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlQ29uZmlnOiBjdHgucmVtb3ZlQ29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHNldENvbmZpZzogY3R4LnNldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICB1bnNldENvbmZpZzogY3R4LnVuc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVwbG9hZDogY3R4LnVwbG9hZC5iaW5kKGN0eCksXHJcbiAgICBhZGRMaXN0ZW5lcjogY3R4LmFkZExpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9uOiBjdHgub24uYmluZChjdHgpLFxyXG4gICAgb25jZTogY3R4Lm9uY2UuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlTGlzdGVuZXI6IGN0eC5yZW1vdmVMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBvZmY6IGN0eC5vZmYuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiBjdHgucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIHNldE1heExpc3RlbmVyczogY3R4LnNldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBnZXRNYXhMaXN0ZW5lcnM6IGN0eC5nZXRNYXhMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgbGlzdGVuZXJzOiBjdHgubGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIHJhd0xpc3RlbmVyczogY3R4LnJhd0xpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBlbWl0OiBjdHguZW1pdC5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lckNvdW50OiBjdHgubGlzdGVuZXJDb3VudC5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kTGlzdGVuZXI6IGN0eC5wcmVwZW5kTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgcHJlcGVuZE9uY2VMaXN0ZW5lcjogY3R4LnByZXBlbmRPbmNlTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgZXZlbnROYW1lczogY3R4LmV2ZW50TmFtZXMuYmluZChjdHgpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNtbXNDb25maWcsIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyLCBhcGlUb2tlbjogc3RyaW5nLCBiYWNrdXBEb21haW4gPSAnJyk6IElPbGRSZXFPcHRpb25zID0+IHtcclxuICBjb25zdCBkb21haW4gPSBiYWNrdXBEb21haW4gfHwgJ3NtLm1zJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtkb21haW59L2FwaS92Mi91cGxvYWRgLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNHbycsXHJcbiAgICAgIEF1dGhvcml6YXRpb246IGFwaVRva2VuXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgc21maWxlOiB7XHJcbiAgICAgICAgdmFsdWU6IGltYWdlLFxyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgc3NsOiAndHJ1ZSdcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3Qgc21tc0NvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNtbXNDb25maWc+KCdwaWNCZWQuc21tcycpXHJcbiAgaWYgKCFzbW1zQ29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzbW1zIGNvbmZpZyEnKVxyXG4gIH1cclxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGltYWdlLCBzbW1zQ29uZmlnPy50b2tlbiwgc21tc0NvbmZpZz8uYmFja3VwRG9tYWluKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZylcclxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgICAgaWYgKGJvZHkuY29kZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS51cmxcclxuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmhhc2hcclxuICAgICAgICB9IGVsc2UgaWYgKGJvZHkuY29kZSA9PT0gJ2ltYWdlX3JlcGVhdGVkJyAmJiB0eXBlb2YgYm9keS5pbWFnZXMgPT09ICdzdHJpbmcnKSB7IC8vIGRvIGV4dHJhIGNoZWNrIHNpbmNlIHRoaXMgZXJyb3IgcmV0dXJuIGlzIG5vdCBkb2N1bWVudGVkIGF0IGh0dHBzOi8vZG9jLnNtLm1zLyNhcGktSW1hZ2UtVXBsb2FkXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuaW1hZ2VzXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgbWVzc2FnZTogJ2FwaSB0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYmFja3VwRG9tYWluJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4nKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYmFja3VwRG9tYWluIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdzbW1zJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVMnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVGN5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgQ09TIHNpZ25hdHVyZSBzdHJpbmdcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNpZ25hdHVyZSB7XHJcbiAgc2lnbmF0dXJlOiBzdHJpbmdcclxuICBhcHBJZDogc3RyaW5nXHJcbiAgYnVja2V0OiBzdHJpbmdcclxuICBzaWduVGltZTogc3RyaW5nXHJcbn1cclxuXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IElTaWduYXR1cmUgPT4ge1xyXG4gIGNvbnN0IHNlY3JldElkID0gb3B0aW9ucy5zZWNyZXRJZFxyXG4gIGNvbnN0IHNlY3JldEtleSA9IG9wdGlvbnMuc2VjcmV0S2V5XHJcbiAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkXHJcbiAgY29uc3QgYnVja2V0ID0gb3B0aW9ucy5idWNrZXRcclxuICBsZXQgc2lnbmF0dXJlXHJcbiAgbGV0IHNpZ25UaW1lOiBzdHJpbmcgPSAnJ1xyXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApXHJcbiAgICBjb25zdCBjdXJyZW50ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApIC0gMVxyXG4gICAgY29uc3QgZXhwaXJlZCA9IGN1cnJlbnQgKyAzNjAwXHJcblxyXG4gICAgY29uc3QgbXVsdGlTaWduYXR1cmUgPSBgYT0ke2FwcElkfSZiPSR7YnVja2V0fSZrPSR7c2VjcmV0SWR9JmU9JHtleHBpcmVkfSZ0PSR7Y3VycmVudH0mcj0ke3JhbmRvbX0mZj1gXHJcblxyXG4gICAgY29uc3Qgc2lnbkhleEtleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUobXVsdGlTaWduYXR1cmUpLmRpZ2VzdCgpXHJcbiAgICBjb25zdCB0ZW1wU3RyaW5nID0gQnVmZmVyLmNvbmNhdChbc2lnbkhleEtleSwgQnVmZmVyLmZyb20obXVsdGlTaWduYXR1cmUpXSlcclxuICAgIHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlbXBTdHJpbmcpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzc3Nzgjc2lnbmF0dXJlXHJcbiAgICBjb25zdCB0b2RheSA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0b2RheSArIDg2NDAwXHJcbiAgICBzaWduVGltZSA9IGAke3RvZGF5fTske3RvbW9ycm93fWBcclxuICAgIGNvbnN0IHNpZ25LZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKHNpZ25UaW1lKS5kaWdlc3QoJ2hleCcpXHJcbiAgICBjb25zdCBodHRwU3RyaW5nID0gYHB1dFxcbi8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfVxcblxcbmhvc3Q9JHtvcHRpb25zLmJ1Y2tldH0uY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21cXG5gXHJcbiAgICBjb25zdCBzaGExZWRIdHRwU3RyaW5nID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoaHR0cFN0cmluZykuZGlnZXN0KCdoZXgnKVxyXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gYHNoYTFcXG4ke3NpZ25UaW1lfVxcbiR7c2hhMWVkSHR0cFN0cmluZ31cXG5gXHJcbiAgICBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNpZ25LZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24pLmRpZ2VzdCgnaGV4JylcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHNpZ25hdHVyZSxcclxuICAgIGFwcElkLFxyXG4gICAgYnVja2V0LFxyXG4gICAgc2lnblRpbWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBJU2lnbmF0dXJlLCBpbWFnZTogQnVmZmVyLCB2ZXJzaW9uOiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGFyZWEgPSBvcHRpb25zLmFyZWFcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb20vZmlsZXMvdjIvJHtzaWduYXR1cmUuYXBwSWR9LyR7c2lnbmF0dXJlLmJ1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtmaWxlTmFtZX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb21gLFxyXG4gICAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZS5zaWduYXR1cmUsXHJcbiAgICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgICB1c2VyQWdlbnQ6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcclxuICAgICAgfSxcclxuICAgICAgZm9ybURhdGE6IHtcclxuICAgICAgICBvcDogJ3VwbG9hZCcsXHJcbiAgICAgICAgZmlsZWNvbnRlbnQ6IGltYWdlXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgIHVybDogYGh0dHA6Ly8ke29wdGlvbnMuYnVja2V0fS5jb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YCxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS5jb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWAsXHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYHEtc2lnbi1hbGdvcml0aG09c2hhMSZxLWFrPSR7b3B0aW9ucy5zZWNyZXRJZH0mcS1zaWduLXRpbWU9JHtzaWduYXR1cmUuc2lnblRpbWV9JnEta2V5LXRpbWU9JHtzaWduYXR1cmUuc2lnblRpbWV9JnEtaGVhZGVyLWxpc3Q9aG9zdCZxLXVybC1wYXJhbS1saXN0PSZxLXNpZ25hdHVyZT0ke3NpZ25hdHVyZS5zaWduYXR1cmV9YCxcclxuICAgICAgICBjb250ZW50VHlwZTogbWltZS5sb29rdXAoZmlsZU5hbWUpLFxyXG4gICAgICAgIHVzZXJBZ2VudDogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBpbWFnZSxcclxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHRjWXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVRjeXVuQ29uZmlnPigncGljQmVkLnRjeXVuJylcclxuICBpZiAoIXRjWXVuT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgdGVuY2VudCBDT1MgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB0Y1l1bk9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gdGNZdW5PcHRpb25zLnBhdGhcclxuICAgIGNvbnN0IHVzZVY0ID0gIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGlmICghc2lnbmF0dXJlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSwgY3R4LkdVSV9WRVJTSU9OIHx8IGN0eC5WRVJTSU9OKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcclxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcclxuICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICBtc2c6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0FVVEhfRkFJTEVEJyksXHJcbiAgICAgICAgICAgICAgICBlcnJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgbGV0IGJvZHlcclxuICAgICAgICBpZiAodXNlVjQgJiYgdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYm9keSA9IHJlc1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgIGlmIChib2R5Py5ib2R5Py5lcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgYm9keS5ib2R5LmVyclxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHk/LmJvZHk/Lm1zZyB8fCBib2R5Py5ib2R5Py5tZXNzYWdlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25VcmwgPSB0Y1l1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgIGlmICh1c2VWNCAmJiBib2R5Lm1lc3NhZ2UgPT09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtwYXRofSR7aW1nLmZpbGVOYW1lfWBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtib2R5LmRhdGEuc291cmNlX3VybCBhcyBzdHJpbmd9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZVY0ICYmIGJvZHkgJiYgYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJKGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7dGNZdW5PcHRpb25zLmJ1Y2tldH0uY29zLiR7dGNZdW5PcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbS8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSShpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5ib2R5Lm1zZylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKCF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGVyci5lcnJvcilcclxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgICBjb2RlOiBib2R5LmNvZGUgYXMgc3RyaW5nXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRleHQ6ICdodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg0MzInXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndmVyc2lvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgYWxpYXM6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTicpLFxyXG4gICAgICBjaG9pY2VzOiBbJ3Y0JywgJ3Y1J10sXHJcbiAgICAgIGRlZmF1bHQ6ICd2NScsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldElkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldEtleScsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FwcElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFwcElkIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndGN5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJR2l0aHViQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhKU09OIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnLCBkYXRhOiBhbnkpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbyB9ID0gb3B0aW9uc1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJKGZpbGVOYW1lKX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNHbycsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSlcclxuICAgIH0sXHJcbiAgICBib2R5OiBkYXRhLFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH0gYXMgY29uc3RcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBnaXRodWJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpXHJcbiAgaWYgKCFnaXRodWJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBnaXRodWIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0dvJyxcclxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXHJcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcclxuICAgICAgICAgIHBhdGg6IGdpdGh1Yk9wdGlvbnMucGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMsIGRhdGEpXHJcbiAgICAgICAgY29uc3QgYm9keToge1xyXG4gICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICBkb3dubG9hZF91cmw6IHN0cmluZ1xyXG4gICAgICAgICAgICBzaGE6IHN0cmluZ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgIGlmIChib2R5KSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGdpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtnaXRodWJPcHRpb25zLnBhdGh9JHtpbWcuZmlsZU5hbWV9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuY29udGVudC5kb3dubG9hZF91cmxcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElHaXRodWJDb25maWc+KCdwaWNCZWQuZ2l0aHViJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlcG8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVwbyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdicmFuY2gnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnJhbmNoIHx8ICdtYXN0ZXInLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignZ2l0aHViJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBxaW5pdSBmcm9tICdxaW5pdSdcclxuaW1wb3J0IHsgSVBsdWdpbkNvbmZpZywgSVFpbml1Q29uZmlnLCBJUGljR28sIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG5mdW5jdGlvbiBwb3N0T3B0aW9ucyAob3B0aW9uczogSVFpbml1Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBpbWdCYXNlNjQ6IHN0cmluZyk6IElPbGRSZXFPcHRpb25zIHtcclxuICBjb25zdCBhcmVhID0gc2VsZWN0QXJlYShvcHRpb25zLmFyZWEgfHwgJ3owJylcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgYmFzZTY0RmlsZU5hbWUgPSBCdWZmZXIuZnJvbShwYXRoICsgZmlsZU5hbWUsICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKVxyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogYGh0dHA6Ly91cGxvYWQke2FyZWF9LnFpbml1cC5jb20vcHV0YjY0Ly0xL2tleS8ke2Jhc2U2NEZpbGVOYW1lfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGBVcFRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGltZ0Jhc2U2NFxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2VsZWN0QXJlYSAoYXJlYTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gYXJlYSA9PT0gJ3owJyA/ICcnIDogJy0nICsgYXJlYVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUb2tlbiAocWluaXVPcHRpb25zOiBhbnkpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGFjY2Vzc0tleSA9IHFpbml1T3B0aW9ucy5hY2Nlc3NLZXlcclxuICBjb25zdCBzZWNyZXRLZXkgPSBxaW5pdU9wdGlvbnMuc2VjcmV0S2V5XHJcbiAgY29uc3QgbWFjID0gbmV3IHFpbml1LmF1dGguZGlnZXN0Lk1hYyhhY2Nlc3NLZXksIHNlY3JldEtleSlcclxuICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgc2NvcGU6IHFpbml1T3B0aW9ucy5idWNrZXRcclxuICB9XHJcbiAgY29uc3QgcHV0UG9saWN5ID0gbmV3IHFpbml1LnJzLlB1dFBvbGljeShvcHRpb25zKVxyXG4gIHJldHVybiBwdXRQb2xpY3kudXBsb2FkVG9rZW4obWFjKVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHFpbml1T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JylcclxuICBpZiAoIXFpbml1T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgcWluaXUgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhxaW5pdU9wdGlvbnMsIGltZy5maWxlTmFtZSwgZ2V0VG9rZW4ocWluaXVPcHRpb25zKSwgYmFzZTY0SW1hZ2UpXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgICAgaWYgKGJvZHk/LmtleSkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBxaW5pdU9wdGlvbnMudXJsXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gcWluaXVPcHRpb25zLm9wdGlvbnNcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2JvZHkua2V5IGFzIHN0cmluZ30ke29wdGlvbnN9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5Lm1zZ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoJ3Fpbml1IGVycm9yJywgYm9keSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGlmIChlcnIubWVzc2FnZSAhPT0gJ1VwbG9hZCBmYWlsZWQnKSB7XHJcbiAgICAgIC8vIGVyci5yZXNwb25zZSBtYXliZSB1bmRlZmluZWRcclxuICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlLmJvZHlcclxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVycm9yLmVycm9yXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FDQ0VTU0tFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldEtleScsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfU0VDUkVUS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1cmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BUkVBJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigncWluaXUnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVUnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElJbWd1ckNvbmZpZywgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElJbWd1ckNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyA9PiB7XHJcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkXHJcbiAgY29uc3Qgb2JqOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnaHR0cHM6Ly9hcGkuaW1ndXIuY29tLzMvaW1hZ2UnLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgQ2xpZW50LUlEICR7Y2xpZW50SWR9YCxcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgSG9zdDogJ2FwaS5pbWd1ci5jb20nLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNHbydcclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBpbWFnZTogaW1nQmFzZTY0LFxyXG4gICAgICB0eXBlOiAnYmFzZTY0JyxcclxuICAgICAgbmFtZTogZmlsZU5hbWVcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIG9iai5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIG9ialxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGltZ3VyT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUltZ3VyQ29uZmlnPigncGljQmVkLmltZ3VyJylcclxuICBpZiAoIWltZ3VyT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgaW1ndXIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzKSA6IHJlc1xyXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcclxuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmRlbGV0ZWhhc2hcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcclxuICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLmltZ3VyLmNvbS9hcGkvZXJybm8vJ1xyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgIHRocm93IGVycj8ucmVzcG9uc2U/LmRhdGEgfHwgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjbGllbnRJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdpbWd1cicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUFsaXl1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgT1NTIHNpZ25hdHVyZVxyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgbWltZVR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSlcclxuICBpZiAoIW1pbWVUeXBlKSB0aHJvdyBFcnJvcihgTm8gbWltZSB0eXBlIGZvdW5kIGZvciBmaWxlICR7ZmlsZU5hbWV9YClcclxuXHJcbiAgY29uc3Qgc2lnblN0cmluZyA9IGBQVVRcXG5cXG4ke21pbWVUeXBlfVxcbiR7ZGF0ZX1cXG4vJHtvcHRpb25zLmJ1Y2tldH0vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gXHJcblxyXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBPU1MgJHtvcHRpb25zLmFjY2Vzc0tleUlkfToke3NpZ25hdHVyZX1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSShvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJKGZpbGVOYW1lKX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbWAsXHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXHJcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBhbGlZdW4gT1NTIGNvbmZpZycpXHJcbiAgfVxyXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aC5yZXBsYWNlKC9cXC8qJC8sICcnKS5yZXBsYWNlKC9eXFwvKi8sICcnKSArICcvJ1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgY3VzdG9tVXJsID0gYWxpWXVuT3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHBhdGggPSBhbGlZdW5PcHRpb25zLnBhdGhcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IG9wdGlvblVybCA9IGFsaVl1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke3BhdGh9JHtpbWcuZmlsZU5hbWV9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7YWxpWXVuT3B0aW9ucy5idWNrZXR9LiR7YWxpWXVuT3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtwYXRofSR7aW1nLmZpbGVOYW1lfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlJZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlTZWNyZXQnLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5U2VjcmV0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdhbGl5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7XHJcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVUQnKVxyXG4gICAgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVXB5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IE1ENSBmcm9tICdtZDUnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCB7IHNhZmVQYXJzZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IG9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvclxyXG4gIGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZFxyXG4gIGNvbnN0IG1kNVBhc3N3b3JkID0gTUQ1KHBhc3N3b3JkKVxyXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcclxuICBjb25zdCB1cmkgPSBgLyR7b3B0aW9ucy5idWNrZXR9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJKGZpbGVOYW1lKX1gXHJcbiAgY29uc3QgdmFsdWUgPSBgUFVUJiR7dXJpfSYke2RhdGV9YFxyXG4gIGNvbnN0IHNpZ24gPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG1kNVBhc3N3b3JkKS51cGRhdGUodmFsdWUpLmRpZ2VzdCgnYmFzZTY0JylcclxuICByZXR1cm4gYFVQWVVOICR7b3BlcmF0b3J9OiR7c2lnbn1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tLyR7YnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSShmaWxlTmFtZSl9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxyXG4gICAgICBEYXRlOiBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWFnZSxcclxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHVweXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJylcclxuICBpZiAoIXVweXVuT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgdXBZdW4gY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBwYXRoID0gdXB5dW5PcHRpb25zLnBhdGggfHwgJydcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7dXB5dW5PcHRpb25zLnVybH0vJHtwYXRofSR7aW1nLmZpbGVOYW1lfSR7dXB5dW5PcHRpb25zLm9wdGlvbnN9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYm9keSA9IHNhZmVQYXJzZTx7IGNvZGU6IHN0cmluZyB9PihlcnIuZXJyb3IpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkuY29kZSA6IGJvZHlcclxuICAgICAgICB9KSxcclxuICAgICAgICB0ZXh0OiAnaHR0cDovL2RvY3MudXB5dW4uY29tL2FwaS9lcnJuby8nXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3BlcmF0b3InLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJykgfSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcGVyYXRvciB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3VweXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJV2ViZGF2UGxpc3RDb25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVdlYmRhdlBsaXN0Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYCR7b3B0aW9ucy5ob3N0fS8ke2VuY29kZVVSSShvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJKGZpbGVOYW1lKX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtvcHRpb25zLnVzZXJuYW1lfToke29wdGlvbnMucGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSksXHJcbiAgICAgICdDb250ZW50LUxlbmd0aCc6IGltYWdlLmxlbmd0aFxyXG4gICAgfSxcclxuICAgIGJvZHk6IGltYWdlLFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcclxuICBpZiAoIXdlYmRhdnBsaXN0T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnJylcclxuICB9XHJcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdC5yZXBsYWNlKCdodHRwczovLycsICcnKS5yZXBsYWNlKCdodHRwOi8vJywgJycpLnJlcGxhY2UoL1xcLyskLywgJycpXHJcbiAgaWYgKHdlYmRhdnBsaXN0T3B0aW9ucy5zc2xFbmFibGVkKSB7XHJcbiAgICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9ICdodHRwczovLycgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxyXG4gIH0gZWxzZSB7XHJcbiAgICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9ICdodHRwOi8vJyArIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0XHJcbiAgfVxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGgucmVwbGFjZSgvXlxcLyovLCAnJykucmVwbGFjZSgvXFwvKiQvLCAnJykgKyAnLydcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHBhdGggPSB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHdlYmRhdnBsaXN0T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID49IDIwMCAmJiBib2R5LnN0YXR1c0NvZGUgPCAzMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7cGF0aH0ke2ltZy5maWxlTmFtZX1gXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7d2ViZGF2cGxpc3RPcHRpb25zLmhvc3R9LyR7cGF0aH0ke2ltZy5maWxlTmFtZX1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc3NsRW5hYmxlZCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3NsRW5hYmxlZCB8fCB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRScpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJykgfVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3dlYmRhdnBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IFNNTVNVcGxvYWRlciBmcm9tICcuL3NtbXMnXHJcbmltcG9ydCB0Y1l1blVwbG9hZGVyIGZyb20gJy4vdGN5dW4nXHJcbmltcG9ydCBnaXRodWJVcGxvYWRlciBmcm9tICcuL2dpdGh1YidcclxuaW1wb3J0IHFpbml1VXBsb2FkZXIgZnJvbSAnLi9xaW5pdSdcclxuaW1wb3J0IGltZ3VyVXBsb2FkZXIgZnJvbSAnLi9pbWd1cidcclxuaW1wb3J0IGFsaVl1blVwbG9hZGVyIGZyb20gJy4vYWxpeXVuJ1xyXG5pbXBvcnQgdXBZdW5VcGxvYWRlciBmcm9tICcuL3VweXVuJ1xyXG5pbXBvcnQgd2ViZGF2cGxpc3RVcGxvYWRlciBmcm9tICcuL3dlYmRhdidcclxuXHJcbmNvbnN0IGJ1aWxkSW5VcGxvYWRlcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGFsaVl1blVwbG9hZGVyKGN0eClcclxuICAgICAgdGNZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIFNNTVNVcGxvYWRlcihjdHgpXHJcbiAgICAgIGdpdGh1YlVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICB1cFl1blVwbG9hZGVyKGN0eClcclxuICAgICAgd2ViZGF2cGxpc3RVcGxvYWRlcihjdHgpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVXBsb2FkZXJzXHJcbiIsImltcG9ydCB7XHJcbiAgaXNVcmwsXHJcbiAgZ2V0SW1hZ2VTaXplLFxyXG4gIGdldEZTRmlsZSxcclxuICBnZXRVUkxGaWxlXHJcbn0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCBJSW1nSW5mbywgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcclxuICBhd2FpdCBQcm9taXNlLmFsbChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRGU0ZpbGUoaXRlbSlcclxuICAgIH1cclxuICAgIGlmIChpbmZvLnN1Y2Nlc3MgJiYgaW5mby5idWZmZXIpIHtcclxuICAgICAgY29uc3QgaW1nU2l6ZSA9IGdldEltZ1NpemUoY3R4LCBpbmZvLmJ1ZmZlciwgaXRlbSlcclxuICAgICAgcmVzdWx0c1tpbmRleF0gPSB7XHJcbiAgICAgICAgYnVmZmVyOiBpbmZvLmJ1ZmZlcixcclxuICAgICAgICBmaWxlTmFtZTogaW5mby5maWxlTmFtZSxcclxuICAgICAgICB3aWR0aDogaW1nU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGltZ1NpemUuaGVpZ2h0LFxyXG4gICAgICAgIGV4dG5hbWU6IGluZm8uZXh0bmFtZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXHJcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xyXG4gICAgY3R4LmxvZy53YXJuKGBjYW4ndCBnZXQgJHtwYXRofSdzIGltYWdlIHNpemVgKVxyXG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxyXG4gIH1cclxuICByZXR1cm4gaW1hZ2VTaXplXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHJlc29sdmUgZnJvbSAncmVzb2x2ZSdcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luLCBJUGx1Z2luTG9hZGVyLCBJUGljR29QbHVnaW5JbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG4vKipcclxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb2FkZXIgaW1wbGVtZW50cyBJUGx1Z2luTG9hZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsTGlzdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcDogTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPiA9IG5ldyBNYXAoKVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZVBhdGgpKSB7XHJcbiAgICAgIGNvbnN0IHBrZyA9IHtcclxuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUnLFxyXG4gICAgICAgIGxpY2Vuc2U6ICdNSVQnXHJcbiAgICAgIH1cclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBlbnRyeVxyXG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbiAoY3R4OiBJUGljR28sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gcmVzb2x2ZS5zeW5jKG5hbWUsIHsgYmFzZWRpcjogY3R4LmJhc2VEaXIgfSlcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxvYWQgYWxsIHRoaXJkIHBhcnR5IHBsdWdpblxyXG4gIGxvYWQgKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gVGhhbmtzIHRvIGhleG8gLT4gaHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2Jsb2IvbWFzdGVyL2xpYi9oZXhvL2xvYWRfcGx1Z2lucy5qc1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxyXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgZGV2RGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMucmVzb2x2ZVBsdWdpbih0aGlzLmN0eCwgbmFtZSlcclxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcclxuICAgIH0pXHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gcmVnaXN0ZXIgbG9jYWwgcGx1Z2luXHJcbiAgICAgIGlmICghcGx1Z2luKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fCAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxyXG4gICAgICAgICAgdGhpcy5jdHguc2F2ZUNvbmZpZyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXHJcbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXHJcbiAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcclxuICAgICAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luSW50ZXJmYWNlKVxyXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBgUGx1Z2luICR7bmFtZX0gTG9hZCBFcnJvcmAsXHJcbiAgICAgICAgYm9keTogZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmNtZC51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcclxuICBnZXRQbHVnaW4gKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbk1hcC5nZXQobmFtZSlcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcclxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXHJcbiAgICByZXR1cm4gcGx1Z2luXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdFxyXG4gIH1cclxuXHJcbiAgaGFzUGx1Z2luIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZ1bGxMaXN0LmhhcyhuYW1lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxyXG4gICAqL1xyXG4gIGdldEZ1bGxMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZnVsbExpc3RdXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkxvYWRlclxyXG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcclxuaW1wb3J0IHsgSVBpY0dvLCBJQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4vZW51bSdcclxuaW1wb3J0IG1hY0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9tYWMuYXBwbGVzY3JpcHQnXHJcbmltcG9ydCB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MucHMxJ1xyXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXHJcbmltcG9ydCBsaW51eENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9saW51eC5zaCdcclxuaW1wb3J0IHdzbENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93c2wuc2gnXHJcbmltcG9ydCB7IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgfSBmcm9tICcuL3N0YXRpYydcclxuXHJcbmV4cG9ydCB0eXBlIFBsYXRmb3JtID0gJ2RhcndpbicgfCAnd2luMzInIHwgJ3dpbjEwJyB8ICdsaW51eCcgfCAnd3NsJ1xyXG5cclxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcclxuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cclxuICBpZiAoaXNXc2wpIHtcclxuICAgIHJldHVybiAnd3NsJ1xyXG4gIH1cclxuICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRPUyA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpWzBdXHJcbiAgICBpZiAoY3VycmVudE9TID09PSAnMTAnKSB7XHJcbiAgICAgIHJldHVybiAnd2luMTAnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ3dpbjMyJ1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICByZXR1cm4gJ2RhcndpbidcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuICdsaW51eCdcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdENvbnRlbnQ6IHtcclxuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXHJcbn0gPSB7XHJcbiAgZGFyd2luOiBtYWNDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMzI6IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcclxuICBsaW51eDogbGludXhDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd3NsOiB3c2xDbGlwYm9hcmRTY3JpcHRcclxufVxyXG4vKipcclxuICogcG93ZXJzaGVsbCB3aWxsIHJlcG9ydCBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGhhdmUgYSAnLnBzMScgZXh0ZW5zaW9uLFxyXG4gKiBzbyB3ZSBzaG91bGQga2VlcCB0aGUgZXh0ZW5zaW9uIG5hbWUgY29uc2lzdGVudCB3aXRoIGNvcnJlc3BvbmRpbmcgc2hlbGxcclxuICovXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lOiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogJ21hYy5hcHBsZXNjcmlwdCcsXHJcbiAgd2luMzI6ICd3aW5kb3dzLnBzMScsXHJcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcclxuICBsaW51eDogJ2xpbnV4LnNoJyxcclxuICB3c2w6ICd3c2wuc2gnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUltYWdlRm9sZGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUilcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoaW1hZ2VQYXRoKSkge1xyXG4gICAgZnMubWtkaXJTeW5jKGltYWdlUGF0aClcclxuICB9XHJcbn1cclxuXHJcbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcclxuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xyXG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcclxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcclxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFBsYXRmb3JtKClcclxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lW3BsYXRmb3JtXSlcclxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHNjcmlwdFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXHJcbiAgICAgICAgc2NyaXB0UGF0aCxcclxuICAgICAgICBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSxcclxuICAgICAgICAndXRmOCdcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgbGV0IGV4ZWN1dGlvblxyXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignb3Nhc2NyaXB0JywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXHJcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInIHx8IHBsYXRmb3JtID09PSAnd2luMTAnKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xyXG4gICAgICAgICctbm9wcm9maWxlJyxcclxuICAgICAgICAnLW5vbmludGVyYWN0aXZlJyxcclxuICAgICAgICAnLW5vbG9nbycsXHJcbiAgICAgICAgJy1zdGEnLFxyXG4gICAgICAgICctZXhlY3V0aW9ucG9saWN5JywgJ3VucmVzdHJpY3RlZCcsXHJcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUvaXNzdWVzLzMyXHJcbiAgICAgICAgLy8gJy13aW5kb3dzdHlsZScsJ2hpZGRlbicsXHJcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxyXG4gICAgICAgICctZmlsZScsIHNjcmlwdFBhdGgsXHJcbiAgICAgICAgaW1hZ2VQYXRoXHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignc2gnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRpb24uc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcclxuICAgICAgICBpZiAoZGF0YS50b1N0cmluZygpLnRyaW0oKSA9PT0gJ25vIHhjbGlwIG9yIHdsLWNsaXBib2FyZCcpIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXHJcbiAgICAgICAgICAgIGJvZHk6ICdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxyXG5cclxuICAgICAgLy8gaWYgdGhlIGZpbGVQYXRoIGlzIHRoZSByZWFsIGZpbGUgaW4gc3lzdGVtXHJcbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcclxuICAgICAgbGV0IHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IGZhbHNlXHJcblxyXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXHJcbiAgICAgIGlmIChwYXRoLmJhc2VuYW1lKGltZ1BhdGgpICE9PSBwYXRoLmJhc2VuYW1lKGltYWdlUGF0aCkpIHtcclxuICAgICAgICAvLyBpZiB0aGUgcGF0aCBpcyBub3QgZ2VuZXJhdGUgYnkgcGljZ29cclxuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XHJcbiAgICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIHRoZSBpbWdQYXRoIGlzIGludmFsaWRcclxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQ2FuJ3QgZmluZCAke2ltZ1BhdGh9YCkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIGltZ1BhdGgsXHJcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXHJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuXHJcbmNvbnN0IGV2ZW50QnVzID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcbmV4cG9ydCB7XHJcbiAgZXZlbnRCdXNcclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmMgKi9cclxuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgeyBJUGljR28sIFVuZGVmaW5hYmxlLCBJQ29uZmlnQ2hhbmdlUGF5bG9hZCwgSUNvbmZpZywgSVJlcXVlc3RDb25maWcsIElPbGRSZXFPcHRpb25zLCBJUmVzcG9uc2UsIElGdWxsUmVzcG9uc2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcclxuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xyXG5pbXBvcnQgdHVubmVsIGZyb20gJ3R1bm5lbCdcclxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XHJcbiAgbWF4VmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIG1pblZlcnNpb246ICdUTFN2MS4yJ1xyXG59KVxyXG5cclxuLy8gdGhhbmtzIGZvciBodHRwczovL2dpdGh1Yi5kZXYvcmVxdWVzdC9yZXF1ZXN0L2Jsb2IvbWFzdGVyL2luZGV4LmpzXHJcbmZ1bmN0aW9uIGFwcGVuZEZvcm1EYXRhIChmb3JtOiBGb3JtRGF0YSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBkYXRhICYmICdvcHRpb25zJyBpbiBkYXRhKSB7XHJcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEudmFsdWUsIGRhdGEub3B0aW9ucylcclxuICB9IGVsc2Uge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVxdWVzdEludGVyY2VwdG9yIChvcHRpb25zOiBJT2xkUmVxT3B0aW9ucyB8IEF4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUmVxdWVzdENvbmZpZyAmIHtcclxuICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cclxufSB7XHJcbiAgbGV0IF9faXNPbGRPcHRpb25zID0gZmFsc2VcclxuICBjb25zdCBvcHQ6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ICYge1xyXG4gICAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbiAgfSA9IHtcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgICB1cmw6IChvcHRpb25zLnVybCBhcyBzdHJpbmcpIHx8ICcnLFxyXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgfVxyXG4gIC8vIHVzZXIgcmVxdWVzdCBjb25maWcgcHJveHlcclxuICBpZiAob3B0aW9ucy5wcm94eSkge1xyXG4gICAgbGV0IHByb3h5T3B0aW9ucyA9IG9wdGlvbnMucHJveHlcclxuICAgIGlmICh0eXBlb2YgcHJveHlPcHRpb25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IG5ldyBVUkwob3B0aW9ucy5wcm94eSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IGZhbHNlXHJcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAocHJveHlPcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgb3B0Lmh0dHBzQWdlbnQgPSB0dW5uZWwuaHR0cHNPdmVySHR0cCh7XHJcbiAgICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnM/Lmhvc3RuYW1lLFxyXG4gICAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnM/LnBvcnQsIDEwKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0LnByb3h5ID0ge1xyXG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxyXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiAnaHR0cCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaWYgKCdmb3JtRGF0YScgaW4gb3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBvcHRpb25zLmZvcm1EYXRhW2tleV1cclxuICAgICAgYXBwZW5kRm9ybURhdGEoZm9ybSwga2V5LCBkYXRhKVxyXG4gICAgfVxyXG4gICAgb3B0LmRhdGEgPSBmb3JtXHJcbiAgICBvcHQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0LmhlYWRlcnMgfHwge30sIGZvcm0uZ2V0SGVhZGVycygpKVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICBkZWxldGUgb3B0LmZvcm1EYXRhXHJcbiAgfVxyXG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xyXG4gICAgb3B0LmRhdGEgPSBvcHRpb25zLmJvZHlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgZGVsZXRlIG9wdC5ib2R5XHJcbiAgfVxyXG4gIGlmICgncXMnIGluIG9wdGlvbnMpIHtcclxuICAgIG9wdC5wYXJhbXMgPSBvcHRpb25zLnFzXHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICB9XHJcbiAgb3B0Ll9faXNPbGRPcHRpb25zID0gX19pc09sZE9wdGlvbnNcclxuICByZXR1cm4gb3B0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlSW50ZXJjZXB0b3IgKHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlKTogSUZ1bGxSZXNwb25zZSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc3BvbnNlLFxyXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxyXG4gICAgYm9keTogcmVzcG9uc2UuZGF0YVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVzcG9uc2VFcnJvckhhbmRsZXIgKGVycm9yOiBhbnkpIHtcclxuICAvLyBpZiAoZXJyb3IucmVzcG9uc2UpIHtcclxuICAvLyAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRlZCB3aXRoIGEgc3RhdHVzIGNvZGVcclxuICAvLyAgIC8vIHRoYXQgZmFsbHMgb3V0IG9mIHRoZSByYW5nZSBvZiAyeHhcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvKVxyXG4gIC8vIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xyXG4gIC8vICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYnV0IG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxyXG4gIC8vICAgLy8gYGVycm9yLnJlcXVlc3RgIGlzIGFuIGluc3RhbmNlIG9mIFhNTEh0dHBSZXF1ZXN0IGluIHRoZSBicm93c2VyIGFuZCBhbiBpbnN0YW5jZSBvZlxyXG4gIC8vICAgLy8gaHR0cC5DbGllbnRSZXF1ZXN0IGluIG5vZGUuanNcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5yZXF1ZXN0KVxyXG4gIC8vIH0gZWxzZSB7XHJcbiAgLy8gICAvLyBTb21ldGhpbmcgaGFwcGVuZWQgaW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCBhbiBFcnJvclxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLm1lc3NhZ2UpXHJcbiAgLy8gfVxyXG4gIGNvbnN0IGVycm9yT2JqID0ge1xyXG4gICAgbWV0aG9kOiBlcnJvcj8uY29uZmlnPy5tZXRob2Q/LnRvVXBwZXJDYXNlKCkgfHwgJycsXHJcbiAgICB1cmw6IGVycm9yPy5jb25maWc/LnVybCB8fCAnJyxcclxuICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSB8fCAnJyxcclxuICAgIHN0YWNrOiBlcnJvcj8uc3RhY2sgfHwge30sXHJcbiAgICByZXNwb25zZToge1xyXG4gICAgICBzdGF0dXM6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIGJvZHk6IGVycm9yPy5yZXNwb25zZT8uZGF0YSB8fCAnJ1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3JPYmopXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgSVJlcXVlc3Qge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHByb3h5OiBVbmRlZmluYWJsZTxzdHJpbmc+ID0gJydcclxuICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiA9IHt9XHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5pbml0KClcclxuICAgIGV2ZW50QnVzLm9uKElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCAoZGF0YTogSUNvbmZpZ0NoYW5nZVBheWxvYWQ8c3RyaW5nIHwgSUNvbmZpZ1sncGljQmVkJ10+KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZGF0YS5jb25maWdOYW1lKSB7XHJcbiAgICAgICAgY2FzZSAncGljQmVkJzpcclxuICAgICAgICAgIGlmICgoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSk/LnByb3h5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSAoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSkucHJveHlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAncGljQmVkLnByb3h5JzpcclxuICAgICAgICAgIHRoaXMucHJveHkgPSBkYXRhLnZhbHVlIGFzIHN0cmluZ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcm94eSA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnByb3h5JylcclxuICAgIGlmIChwcm94eSkge1xyXG4gICAgICB0aGlzLnByb3h5ID0gcHJveHlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJveHkgKCk6IEF4aW9zUmVxdWVzdENvbmZpZ1sncHJveHknXSB8IGZhbHNlIHtcclxuICAgIGlmICh0aGlzLnByb3h5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcHJveHlPcHRpb25zID0gbmV3IFVSTCh0aGlzLnByb3h5KVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXHJcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCB8fCAnMCcsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiBwcm94eU9wdGlvbnMucHJvdG9jb2xcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICAvLyAjNjQgZHluYW1pYyBnZXQgcHJveHkgdmFsdWVcclxuICByZXF1ZXN0PFQsIFUgZXh0ZW5kcyAoXHJcbiAgICBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIElPbGRSZXFPcHRpb25zID8gSU9sZFJlcU9wdGlvbnMgOiBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIEF4aW9zUmVxdWVzdENvbmZpZyA/IEF4aW9zUmVxdWVzdENvbmZpZyA6IG5ldmVyXHJcbiAgKT4gKG9wdGlvbnM6IFUpOiBQcm9taXNlPElSZXNwb25zZTxULCBVPj4ge1xyXG4gICAgdGhpcy5vcHRpb25zLnByb3h5ID0gdGhpcy5oYW5kbGVQcm94eSgpXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLm1heEJvZHlMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgdGhpcy5vcHRpb25zLm1heENvbnRlbnRMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcm94eSAmJiBvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IHR1bm5lbC5odHRwc092ZXJIdHRwKHtcclxuICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLnByb3h5Lmhvc3QsXHJcbiAgICAgICAgICBwb3J0OiB0aGlzLm9wdGlvbnMucHJveHkucG9ydFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5vcHRpb25zLnByb3h5ID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNBZ2VudFxyXG4gICAgfVxyXG4gICAgLy8gIU5PVElDRSB0aGlzLm9wdGlvbnMgIT09IG9wdGlvbnNcclxuICAgIC8vIHRoaXMub3B0aW9ucyBpcyB0aGUgZGVmYXVsdCBvcHRpb25zXHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh0aGlzLm9wdGlvbnMpXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHJlc3BvbnNlSW50ZXJjZXB0b3IsIHJlc3BvbnNlRXJyb3JIYW5kbGVyKVxyXG5cclxuICAgIC8vIGNvbXBhdGlibGUgd2l0aCBvbGQgcmVxdWVzdCBvcHRpb25zIHRvIG5ldyBvcHRpb25zXHJcbiAgICBjb25zdCBvcHQgPSByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9ucylcclxuXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAvLyBoYW5kbGUgQ29udGVudC1UeXBlXHJcbiAgICAgIGxldCBjb250ZW50VHlwZSA9ICcnXHJcbiAgICAgIGlmIChvYmo/LmhlYWRlcnM/LmNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5jb250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuY29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LkNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5Db250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuQ29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LlsnY29udGVudC10eXBlJ10pIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSAnJyAmJiBvYmouaGVhZGVycykge1xyXG4gICAgICAgIG9iai5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGNvbnRlbnRUeXBlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9ialxyXG4gICAgfSlcclxuICAgIGlmICgncmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UnIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAvLyB1c2Ugb2xkIHJlcXVlc3Qgb3B0aW9uIGZvcm1hdFxyXG4gICAgICAgIGlmIChvcHQuX19pc09sZE9wdGlvbnMpIHtcclxuICAgICAgICAgIGlmICgnanNvbicgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSBhcyBQcm9taXNlPElSZXNwb25zZTxULCBVPj5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RcclxuIiwiaW1wb3J0IHsgSUNvbmZpZywgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcclxuaW1wb3J0IHsgSUpTT04gfSBmcm9tICdAcGljZ28vc3RvcmUvZGlzdC90eXBlcydcclxuXHJcbmNsYXNzIERCIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYjogSlNPTlN0b3JlXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5kYiA9IG5ldyBKU09OU3RvcmUodGhpcy5jdHguY29uZmlnUGF0aClcclxuXHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNCZWQnLCB7XHJcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxyXG4gICAgICAgICAgY3VycmVudDogJ3NtbXMnXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNnb1BsdWdpbnMnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkIChmbHVzaD86IGJvb2xlYW4pOiBJSlNPTiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYi5yZWFkKGZsdXNoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IChrZXk6IHN0cmluZyA9ICcnKTogYW55IHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcclxuICB9XHJcblxyXG4gIHNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBoYXMgKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmhhcyhrZXkpXHJcbiAgfVxyXG5cclxuICB1bnNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIudW5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogUGFydGlhbDxJQ29uZmlnPik6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnVuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEQlxyXG5cclxuLy8gY29uc3QgaW5pdENvbmZpZyA9IChjb25maWdQYXRoOiBzdHJpbmcpOiBsb3dkYi5Mb3dkYlN5bmM8YW55PiA9PiB7XHJcbi8vIH1cclxuXHJcbi8vIGNvbnN0IHNhdmVDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nLCBjb25maWc6IGFueSk6IHZvaWQgPT4ge1xyXG4vLyAgIGNvbnN0IGRiID0gaW5pdENvbmZpZyhjb25maWdQYXRoKVxyXG4vLyAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbi8vICAgICBkYi5yZWFkKCkuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSkud3JpdGUoKVxyXG4vLyAgIH0pXHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCB7XHJcbi8vIGluaXRDb25maWcsXHJcbi8vIHNhdmVDb25maWdcclxuLy8gfVxyXG4iLCJpbXBvcnQgc3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nXHJcbmltcG9ydCB7XHJcbiAgSVJlc3VsdCxcclxuICBJUHJvY2Vzc0VudixcclxuICBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCxcclxuICBJUGx1Z2luSGFuZGxlcixcclxuICBJUGx1Z2luSGFuZGxlck9wdGlvbnMsXHJcbiAgVW5kZWZpbmFibGUsXHJcbiAgSVBpY0dvLFxyXG4gIElQbHVnaW5IYW5kbGVyUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBnZXRQcm9jZXNzUGx1Z2luTmFtZSwgZ2V0Tm9ybWFsUGx1Z2luTmFtZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi9pMThuL3poLUNOJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFBsdWdpbkhhbmRsZXIgaW1wbGVtZW50cyBJUGx1Z2luSGFuZGxlciB7XHJcbiAgLy8gVGhhbmtzIHRvIGZlZmxvdyAtPiBodHRwczovL2dpdGh1Yi5jb20vZmVmbG93L2ZlZmxvdy9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvaW5zdGFsbC9wbHVnaW4uanNcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xyXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIC8vIGRldGVjdCBpZiBoYXMgYWxyZWFkeSBpbnN0YWxsZWRcclxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LnBsdWdpbkxvYWRlci5oYXNQbHVnaW4oaXRlbS5wa2dOYW1lKSkge1xyXG4gICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKGl0ZW0ucGtnTmFtZSlcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNHbyBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcclxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcclxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXHJcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVuaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZSAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kIChjbWQ6IHN0cmluZywgbW9kdWxlczogc3RyaW5nW10sIHdoZXJlOiBzdHJpbmcsIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY6IElQcm9jZXNzRW52ID0ge30pOiBQcm9taXNlPElSZXN1bHQ+IHtcclxuICAgIC8vIG9wdGlvbnMgZmlyc3RcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcclxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXHJcbiAgICAgIGlmIChyZWdpc3RyeSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3h5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7IGN3ZDogd2hlcmUsIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudikgfSlcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXHJcbiAgICAgICAgbnBtLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRvdXQpXHJcblxyXG4gICAgICAgIG5wbS5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3RkZXJyKVxyXG5cclxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xyXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IHtcclxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgZnVsbE5hbWU6ICcnLFxyXG4gICAgcGtnTmFtZTogJydcclxuICB9XHJcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcclxuICBpZiAoIXJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXHJcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxyXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcclxuICBpZiAoIXBrZ05hbWUpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxyXG4gICAgcGtnTmFtZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgeyBaSF9DTiwgSUxvY2FsZXNLZXksIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXHJcblxyXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXHJcbmltcG9ydCB7IElTdHJpbmdLZXlNYXAsIElJMThuTWFuYWdlciB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xyXG5pbXBvcnQgeyBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcclxuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xyXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXHJcblxyXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcclxuICAnemgtQ04nOiBaSF9DTixcclxuICAnemgtVFcnOiBaSF9UVyxcclxuICBlbjogRU5cclxufVxyXG5cclxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcclxuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XHJcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcclxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4biAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xyXG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcclxuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcclxuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIgKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XHJcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcclxuICAgIH1cclxuICAgIHJldHVybiBpMThuRm9sZGVyXHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXHJcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGUgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFkZExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcclxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFuZ3VhZ2VMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBJMThuTWFuYWdlclxyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXHJcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrppLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWumktleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6K6+5a6a5LuT5bqT5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6K6+5a6a5YiG5pSv5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+iuvuWumkFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICforr7lrprorr/pl67nvZHlnYAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6K6+5a6aQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+iuvuWumuS7o+eQhicsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6K6+5a6a5pON5L2c5ZGYJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICforr7lrprmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAn6K6+5a6a5Yqg6YCf5Z+f5ZCNJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2cGxpc3RcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6K6+5a6a5o6l5Y+j572R5Z2AJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+WQr+eUqFNTTCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aXtuWQr+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAn5piv5ZCm5re75Yqg5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAn6ZyA6KaB5re75Yqg5rC05Y2w5pe25ZCv55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6K6+5a6a5rC05Y2w57G75Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICfor7fpgInmi6nmsLTljbDnsbvlnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+aYr+WQpuWFqOWxj+awtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ+iuvuWumuawtOWNsOinkuW6picsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICforr7lrprmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ+ivt+i+k+WFpeawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAn6K6+5a6a5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6K+36L6T5YWl5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU86ICforr7lrprmsLTljbDnm7jlr7nkuo7lm77niYfnmoTmr5TkvosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAn6K+36L6T5YWlMC0x55qE5bCP5pWwJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICforr7lrprmsLTljbDlrZfkvZPpopzoibInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAn6K+36L6T5YWlcmdi6aKc6Imy5YC8JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICforr7lrprmsLTljbDlm77niYfot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K+36L6T5YWl5rC05Y2w5Zu+54mH6Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ+iuvuWumuawtOWNsOS9jee9ricsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+ivt+mAieaLqeawtOWNsOS9jee9ricsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+iuvuWumuWbvueJh+i0qOmHjycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfor7fovpPlhaUwLTEwMOeahOaVtOaVsCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbov5vooYzmoLzlvI/ovazmjaInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovazmjaLml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+iuvuWumui9rOaNouagvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfor7fpgInmi6novazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbov5vooYzlm77niYfnvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+iuvuWumue8qeaUvuWuveW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+iuvuWumue8qeaUvumrmOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOi/m+ihjOe8qeaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57yp5pS+5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICforr7lrprnvKnmlL7nmb7liIbmr5QnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6L+b6KGM5Zu+54mH5peL6L2sJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovazml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6K6+5a6a5peL6L2s6KeS5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6K+36L6T5YWl5pWw5a2X77yM5Y+v5Li66LSf5pWwJyxcclxuXHJcbiAgLy8gUGx1Z2luIEhhbmRsZXJcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOF5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo4XlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo4XlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijheWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjeaIluWQiOazleWuieijhei3r+W+hCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246L295oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi9veWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246L295aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovb3lpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTG9jYWxlc0tleSA9IGtleW9mIHR5cGVvZiBaSF9DTlxyXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxyXG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IFpIX1RXOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAn5LiK5YKz5aSx5pWXJyxcclxuICBDSEVDS19TRVRUSU5HUzogJ+iri+aqouafpeS9oOeahOioreWumuaYr+WQpuato+eiuicsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprlj4rntrLot68nLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6Yyv6Kqk56K877yaJHtjb2Rlfe+8jOiri+aJk+mWi+eAj+imveWZqOiyvOS4iuWcsOWdgOafpeeci+ebuOmXnOWOn+WboCcsXHJcbiAgU0VSVkVSX0VSUk9SOiAn5Ly65pyN5Zmo5Ye66Yyv77yM6KuL6YeN6KmmJyxcclxuICBBVVRIX0ZBSUxFRDogJ+iqjeitieWkseaVlycsXHJcblxyXG4gIC8vIHNtbXNcclxuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcclxuICBQSUNCRURfU01NU19UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAn5YKZ55So5LiK5YKz57ay5Z2AJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICfpmL/ph4zkupFPU1MnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+ioreWumktleUlkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6Kit5a6aS2V5U2VjcmV0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yab3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAn6aiw6KiK5LqRQ09TJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICfoqK3lrppTZWNyZXRJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICfoqK3lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICfoqK3lrppBcHBJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mmFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZU1vZ3IyJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICfoqK3lrprliIbmlK/lkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6Kit5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG5cclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICfoqK3lrppDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAn6Kit5a6aUFJPWFknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+ioreWumuaTjeS9nOWToScsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6Kit5a6a5pON5L2c5ZOh5a+G56K8JyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+ioreWumuWKoOmAn+e2suWdgCcsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl5pON5L2c5ZOh5a+G56K8JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICfoqK3lrppBUEnkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+ioreWumuawtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6KuL6YG45pOH5rC05Y2w6aGe5Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICfoqK3lrprmsLTljbDop5LluqYnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6Kit5a6a5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfoq4vovLjlhaXmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+ioreWumuawtOWNsOWtl+mrlCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+iri+i8uOWFpeawtOWNsOWtl+mrlOaWh+S7tui3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6Kit5a6a5rC05Y2w5ZyW54mH5q+U5L6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iri+i8uOWFpTAtMeeahOaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6Kit5a6a5rC05Y2w5a2X6auU6aGP6ImyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iri+i8uOWFpXJnYumhj+iJsuWAvCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6Kit5a6a5rC05Y2w5ZyW54mH6Lev5b6RJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iri+i8uOWFpeawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICfoqK3lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfoq4vpgbjmk4fmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICfoqK3lrprlnJbniYfos6rph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMC0xMDDnmoTmlbTmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6YCy6KGM5qC85byP6L2J5o+bJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2J5o+b5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6KuL6YG45pOH6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6YCy6KGM5ZyW54mH57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICfoqK3lrprnuK7mlL7lr6zluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5TpgLLooYznuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6Kit5a6a57iu5pS+55m+5YiG5q+UJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+iri+i8uOWFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpumAsuihjOWclueJh+aXi+i9iScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2J5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ+ioreWumuaXi+i9ieinkuW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+iri+i8uOWFpeaVuOWtl++8jOWPr+eCuuiyoOaVuCcsXHJcblxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWuieijneaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOd5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICfmj5Lku7blronoo53lpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLHmiJbmraPnorrnmoTlronoo53ot6/lvpEnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi8ieaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovInlpLHmlZcnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246LyJ5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ixJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAn5o+S5Lu25pu05paw5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosSdcclxufVxyXG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IEVOOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncycsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncyBhbmQgbmV0d29yaycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxyXG4gIFNFUlZFUl9FUlJPUjogJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsXHJcbiAgQVVUSF9GQUlMRUQ6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ0V4LiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIEFsaS1jbG91ZFxyXG4gIFBJQ0JFRF9BTElDTE9VRDogJ0FsaSBDbG91ZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAnU2V0IEtleUlkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAnU2V0IEtleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBvc3MtY24tYmVpamluZycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gVGVuY2VudC1jbG91ZFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICdUZW5jZW50IENsb3VkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDaG9vc2UgQ09TIHZlcnNpb24nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICdTZXQgU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ1NldCBBcHBJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICdFeC4gMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gYXAtYmVpamluZycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cDovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VNb2dyMicsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ1NldCBSZXBvIE5hbWUnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ1NldCBCcmFuY2gnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAnRXguIHVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICdFeC4gbWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAnUWluaXUnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICdTZXQgQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICdTZXQgVVJMJyxcclxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAnRXguIHowJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAnRXguID9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ0V4LiBodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAnU2V0IENsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICdTZXQgUHJveHknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAnVXB5dW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICdTZXQgT3BlcmF0b3InLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ1NldCBPcGVyYXRvciBQYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ1NldCBVUkwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAnRXguIG1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBvcGVyYXRvciBwYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAnRXguIGh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICdFeC4gIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG5cclxuICAvLyB3ZWJkYXZcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICdXaGV0aGVyIHRvIGFkZCB3YXRlcm1hcmsnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICdFbmFibGUgd2hlbiB3YXRlcm1hcmsgaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICdTZXQgd2F0ZXJtYXJrIHR5cGUnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ1BsZWFzZSBzZWxlY3Qgd2F0ZXJtYXJrIHR5cGUnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ1doZXRoZXIgdG8gdXNlIGZ1bGwtc2NyZWVuIHdhdGVybWFyaycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdFbmFibGUgd2hlbiBmdWxsLXNjcmVlbiB3YXRlcm1hcmsgaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ1NldCB3YXRlcm1hcmsgYW5nbGUnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAnU2V0IHdhdGVybWFyayB0ZXh0JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICdQbGVhc2UgZW50ZXIgd2F0ZXJtYXJrIHRleHQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ1NldCB3YXRlcm1hcmsgZm9udCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGZvbnQgZmlsZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU86ICdTZXQgdGhlIHJhdGlvIG9mIHRoZSB3YXRlcm1hcmsgdG8gdGhlIGltYWdlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ1BsZWFzZSBlbnRlciBhIG51bWJlciBiZXR3ZWVuIDAtMScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAnU2V0IHdhdGVybWFyayBmb250IGNvbG9yJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1BsZWFzZSBlbnRlciB0aGUgUkdCIGNvbG9yIHZhbHVlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICdTZXQgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICdTZXQgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAnUGxlYXNlIHNlbGVjdCB3YXRlcm1hcmsgcG9zaXRpb24nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICdTZXQgaW1hZ2UgcXVhbGl0eScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICdQbGVhc2UgZW50ZXIgYW4gaW50ZWdlciBiZXR3ZWVuIDAtMTAwJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ1doZXRoZXIgdG8gcGVyZm9ybSBmb3JtYXQgY29udmVyc2lvbicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ0VuYWJsZSB3aGVuIGZvcm1hdCBjb252ZXJzaW9uIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICdTZXQgY29udmVyc2lvbiBmb3JtYXQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAnUGxlYXNlIHNlbGVjdCBjb252ZXJzaW9uIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAnRW5hYmxlIHdoZW4gaW1hZ2UgcmVzaXppbmcgaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICdTZXQgcmVzaXppbmcgd2lkdGgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICdTZXQgcmVzaXppbmcgaGVpZ2h0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlIGJ5IHBlcmNlbnRhZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ0VuYWJsZSB3aGVuIHJlc2l6aW5nIGJ5IHBlcmNlbnRhZ2UgaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ1NldCByZXNpemluZyBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAnRW5hYmxlIHdoZW4gaW1hZ2Ugcm90YXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcclxufVxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgQ29tbWFuZGVyIGZyb20gJy4uL2xpYi9Db21tYW5kZXInXHJcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXHJcbmltcG9ydCBMaWZlY3ljbGUgZnJvbSAnLi9MaWZlY3ljbGUnXHJcbmltcG9ydCBMaWZlY3ljbGVQbHVnaW5zLCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXHJcbmltcG9ydCB1cGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcclxuaW1wb3J0IHRyYW5zZm9ybWVycyBmcm9tICcuLi9wbHVnaW5zL3RyYW5zZm9ybWVyJ1xyXG5pbXBvcnQgUGx1Z2luTG9hZGVyIGZyb20gJy4uL2xpYi9QbHVnaW5Mb2FkZXInXHJcbmltcG9ydCB7IGdldCwgc2V0LCB1bnNldCB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgSUhlbHBlciwgSUltZ0luZm8sIElDb25maWcsIElQaWNHbywgSVN0cmluZ0tleU1hcCwgSVBsdWdpbkxvYWRlciwgSUkxOG5NYW5hZ2VyLCBJUGljR29QbHVnaW4sIElQaWNHb1BsdWdpbkludGVyZmFjZSwgSVJlcXVlc3QgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IGdldENsaXBib2FyZEltYWdlIGZyb20gJy4uL3V0aWxzL2dldENsaXBib2FyZEltYWdlJ1xyXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9saWIvUmVxdWVzdCdcclxuaW1wb3J0IERCIGZyb20gJy4uL3V0aWxzL2RiJ1xyXG5pbXBvcnQgUGx1Z2luSGFuZGxlciBmcm9tICcuLi9saWIvUGx1Z2luSGFuZGxlcidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCwgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcclxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJMThuTWFuYWdlciB9IGZyb20gJy4uL2kxOG4nXHJcblxyXG5leHBvcnQgY2xhc3MgUGljR28gZXh0ZW5kcyBFdmVudEVtaXR0ZXIgaW1wbGVtZW50cyBJUGljR28ge1xyXG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcclxuICBwcml2YXRlIGxpZmVjeWNsZSE6IExpZmVjeWNsZVxyXG4gIHByaXZhdGUgZGIhOiBEQlxyXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZ1xyXG4gIGJhc2VEaXIhOiBzdHJpbmdcclxuICBoZWxwZXIhOiBJSGVscGVyXHJcbiAgbG9nOiBMb2dnZXJcclxuICBjbWQ6IENvbW1hbmRlclxyXG4gIG91dHB1dDogSUltZ0luZm9bXVxyXG4gIGlucHV0OiBhbnlbXVxyXG4gIHBsdWdpbkhhbmRsZXI6IFBsdWdpbkhhbmRsZXJcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xyXG4gICAqXHJcbiAgICogdXNlIHJlcXVlc3QgaW5zdGVhZFxyXG4gICAqL1xyXG4gIFJlcXVlc3QhOiBSZXF1ZXN0XHJcbiAgaTE4biE6IElJMThuTWFuYWdlclxyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cclxuICBHVUlfVkVSU0lPTj86IHN0cmluZ1xyXG5cclxuICBnZXQgcGx1Z2luTG9hZGVyICgpOiBJUGx1Z2luTG9hZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yIChjb25maWdQYXRoOiBzdHJpbmcgPSAnJykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jb25maWdQYXRoID0gY29uZmlnUGF0aFxyXG4gICAgdGhpcy5vdXRwdXQgPSBbXVxyXG4gICAgdGhpcy5pbnB1dCA9IFtdXHJcbiAgICB0aGlzLmhlbHBlciA9IHtcclxuICAgICAgdHJhbnNmb3JtZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd0cmFuc2Zvcm1lcicpLFxyXG4gICAgICB1cGxvYWRlcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3VwbG9hZGVyJyksXHJcbiAgICAgIGJlZm9yZVRyYW5zZm9ybVBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zJyksXHJcbiAgICAgIGJlZm9yZVVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdiZWZvcmVVcGxvYWRQbHVnaW5zJyksXHJcbiAgICAgIGFmdGVyVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2FmdGVyVXBsb2FkUGx1Z2lucycpXHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRDb25maWdQYXRoKClcclxuICAgIHRoaXMubG9nID0gbmV3IExvZ2dlcih0aGlzKVxyXG4gICAgdGhpcy5jbWQgPSBuZXcgQ29tbWFuZGVyKHRoaXMpXHJcbiAgICB0aGlzLnBsdWdpbkhhbmRsZXIgPSBuZXcgUGx1Z2luSGFuZGxlcih0aGlzKVxyXG4gICAgdGhpcy5pbml0Q29uZmlnKClcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDb25maWdQYXRoICgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnUGF0aCA9IGhvbWVkaXIoKSArICcvLnBpY2xpc3QvY29uZmlnLmpzb24nXHJcbiAgICB9XHJcbiAgICBpZiAocGF0aC5leHRuYW1lKHRoaXMuY29uZmlnUGF0aCkudG9VcHBlckNhc2UoKSAhPT0gJy5KU09OJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSAnJ1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IHN1cHBvcnRzIEpTT04gZm9ybWF0LicpXHJcbiAgICB9XHJcbiAgICB0aGlzLmJhc2VEaXIgPSBwYXRoLmRpcm5hbWUodGhpcy5jb25maWdQYXRoKVxyXG4gICAgY29uc3QgZXhpc3QgPSBmcy5wYXRoRXhpc3RzU3luYyh0aGlzLmNvbmZpZ1BhdGgpXHJcbiAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgIGZzLmVuc3VyZUZpbGVTeW5jKGAke3RoaXMuY29uZmlnUGF0aH1gKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGIgPSBuZXcgREIodGhpcylcclxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaW5pdCAxOG4gYXQgZmlyc3RcclxuICAgICAgdGhpcy5pMThuID0gbmV3IEkxOG5NYW5hZ2VyKHRoaXMpXHJcbiAgICAgIHRoaXMuUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHRoaXMpXHJcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlciA9IG5ldyBQbHVnaW5Mb2FkZXIodGhpcylcclxuICAgICAgLy8gbG9hZCBzZWxmIHBsdWdpbnNcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJ3BpY2dvJylcclxuICAgICAgdXBsb2FkZXJzKHRoaXMpLnJlZ2lzdGVyKHRoaXMpXHJcbiAgICAgIHRyYW5zZm9ybWVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgnJylcclxuICAgICAgLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgdGhpcy5saWZlY3ljbGUgPSBuZXcgTGlmZWN5Y2xlKHRoaXMpXHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoZSlcclxuICAgICAgdGhyb3cgZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZWFzaWx5IG1hbm51YWxseSBsb2FkIGEgcGx1Z2luXHJcbiAgICogaWYgcHJvdmlkZSBwbHVnaW4gbmFtZSwgd2lsbCByZWdpc3RlciBwbHVnaW4gYnkgbmFtZVxyXG4gICAqIG9yIGp1c3QgaW5zdGFudGlhdGUgYSBwbHVnaW5cclxuICAgKi9cclxuICB1c2UgKHBsdWdpbjogSVBpY0dvUGx1Z2luLCBuYW1lPzogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHtcclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIHRoaXMucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKG5hbWUsIHBsdWdpbilcclxuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSFcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gcGx1Z2luKHRoaXMpXHJcbiAgICAgIHJldHVybiBwbHVnaW5JbnN0YW5jZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJDb21tYW5kcyAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoICE9PSAnJykge1xyXG4gICAgICB0aGlzLmNtZC5pbml0KClcclxuICAgICAgdGhpcy5jbWQubG9hZENvbW1hbmRzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZzxUPiAobmFtZT86IHN0cmluZyk6IFQge1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgdW5rbm93biBhcyBUXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZ2V0KHRoaXMuX2NvbmZpZywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnKVxyXG4gICAgdGhpcy5kYi5zYXZlQ29uZmlnKGNvbmZpZylcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXHJcbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHJlbW92ZWRgKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudW5zZXRDb25maWcoa2V5LCBwcm9wTmFtZSlcclxuICAgIHRoaXMuZGIudW5zZXQoa2V5LCBwcm9wTmFtZSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyAoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcclxuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcclxuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChuYW1lKSkge1xyXG4gICAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtuYW1lfSBjYW4ndCBiZSBtb2RpZmllZGApXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxyXG4gICAgICAgIGRlbGV0ZSBjb25maWdbbmFtZV1cclxuICAgICAgfVxyXG4gICAgICBzZXQodGhpcy5fY29uZmlnLCBuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICAgIGV2ZW50QnVzLmVtaXQoSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIHtcclxuICAgICAgICBjb25maWdOYW1lOiBuYW1lLFxyXG4gICAgICAgIHZhbHVlOiBjb25maWdbbmFtZV1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1bnNldENvbmZpZyAoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXHJcbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHVuc2V0YClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB1bnNldCh0aGlzLmdldENvbmZpZyhrZXkpLCBwcm9wTmFtZSlcclxuICB9XHJcblxyXG4gIGdldCByZXF1ZXN0ICgpOiBJUmVxdWVzdFsncmVxdWVzdCddIHtcclxuICAgIHJldHVybiB0aGlzLlJlcXVlc3QucmVxdWVzdC5iaW5kKHRoaXMuUmVxdWVzdClcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZCAoaW5wdXQ/OiBhbnlbXSk6IFByb21pc2U8SUltZ0luZm9bXSB8IEVycm9yPiB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmxvZy5lcnJvcignVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IHN1cHBvcnRzIEpTT04gZm9ybWF0LicpXHJcbiAgICAgIHJldHVybiBbXVxyXG4gICAgfVxyXG4gICAgLy8gdXBsb2FkIGZyb20gY2xpcGJvYXJkXHJcbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCB7IGltZ1BhdGgsIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyB9ID0gYXdhaXQgZ2V0Q2xpcGJvYXJkSW1hZ2UodGhpcylcclxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBub3QgZm91bmQgaW4gY2xpcGJvYXJkJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgLy8g5Yig6ZmkIHBpY2dvIOeUn+aIkOeahOWbvueJh+aWh+S7tu+8jOS+i+WmgiBgfi8ucGljZ28vMjAyMDA2MjEyMDU3MjAucG5nYFxyXG4gICAgICAgICAgICAgIGZzLnJlbW92ZShpbWdQYXRoKS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5vbmNlKCdmaW5pc2hlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICBmcy5yZW1vdmUoaW1nUGF0aCkuY2F0Y2goKGUpID0+IHsgdGhpcy5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0pXHJcbiAgICAgICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdXBsb2FkIGZyb20gcGF0aFxyXG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQpXHJcbiAgICAgIHJldHVybiBvdXRwdXRcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IEltZ0Zyb21QYXRoIGZyb20gJy4vcGF0aCdcclxuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXHJcblxyXG5jb25zdCBidWlsZEluVHJhbnNmb3JtZXJzOiBJUGljR29QbHVnaW4gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlZ2lzdGVyIChjdHg6IElQaWNHbykge1xyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXHJcbiJdLCJuYW1lcyI6WyJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwiY21kIiwicHJvZ3JhbSIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsaWFzIiwib3B0aW9uIiwiYWN0aW9uIiwicGx1Z2lucyIsInByb3h5IiwicmVnaXN0cnkiLCJvcHRpb25zIiwiaW5zdGFsbCIsImNhdGNoIiwiZSIsImxvZyIsImVycm9yIiwidW5pbnN0YWxsIiwidXBkYXRlIiwiY29uZmlnIiwiaXNVcmwiLCJ1cmwiLCJ0ZXN0IiwiaGFuZGxlVXJsRW5jb2RlIiwiZGVjb2RlVVJJIiwiaXNVcmxFbmNvZGUiLCJlbmNvZGVVUkkiLCJnZXRJbWFnZVNpemUiLCJmaWxlIiwid2lkdGgiLCJoZWlnaHQiLCJpbWFnZVNpemUiLCJyZWFsIiwiZ2V0VVJMRmlsZSIsImFzeW5jIiwidGltZW91dElkIiwicmVxdWVzdEZuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXMiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcCIsImRhdGEiLCJjbGVhclRpbWVvdXQiLCJ1cmxQYXRoIiwiVVJMIiwicGF0aG5hbWUiLCJidWZmZXIiLCJmaWxlTmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImV4dG5hbWUiLCJzdWNjZXNzIiwicmVhc29uIiwibWVzc2FnZSIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJnZXRQbHVnaW5OYW1lVHlwZSIsIm5hbWUiLCJzdGFydHNXaXRoIiwiaXNTaW1wbGVOYW1lIiwibmFtZU9yUGF0aCIsImlzQWJzb2x1dGUiLCJwbHVnaW5QYXRoIiwiam9pbiIsInByb2Nlc3MiLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJpbmNsdWRlcyIsImhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSIsInNjb3BlIiwiaGFuZGxlVW5peFN0eWxlUGF0aCIsInBhdGhTdHIiLCJzcGxpdCIsInNlcCIsInJlbW92ZVBsdWdpblZlcnNpb24iLCJyZWciLCJtYXRjaEFyciIsIm1hdGNoIiwiY29uc29sZSIsIndhcm4iLCJjb25maWdCbGFja0xpc3QiLCJpc0NvbmZpZ0tleUluQmxhY2tMaXN0Iiwia2V5Iiwic29tZSIsImJsYWNrSXRlbSIsImlzSW5wdXRDb25maWdWYWxpZCIsIkFycmF5IiwiaXNBcnJheSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJmb3JjZU51bWJlciIsIm51bSIsImlzTmFOIiwiTnVtYmVyIiwiZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCIsIl9fZGlybmFtZSIsIkFkZFdhdGVybWFyayIsImltZyIsIndhdGVybWFya1R5cGUiLCJkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgiLCJpc0Z1bGxTY3JlZW5XYXRlcm1hcmsiLCJ3YXRlcm1hcmtEZWdyZWUiLCJ0ZXh0Iiwid2F0ZXJtYXJrRm9udFBhdGgiLCJ3YXRlcm1hcmtTY2FsZVJhdGlvIiwid2F0ZXJtYXJrQ29sb3IiLCJ3YXRlcm1hcmtJbWFnZVBhdGgiLCJwb3NpdGlvbiIsImltYWdlIiwic2hhcnAiLCJpbWdXaWR0aCIsIm1ldGFkYXRhIiwid2F0ZXJtYXJrIiwidG9CdWZmZXIiLCJjb2xvciIsImZvbnRGYW1pbHkiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiZmlsbCIsInRleHRTVkciLCJUZXh0VG9TVkciLCJsb2FkU3luYyIsImdldFNWRyIsIkJ1ZmZlciIsImZyb20iLCJ0ZXh0MlNWRyIsIndhdGVybWFya1dpZHRoIiwid2F0ZXJtYXJrSGVpZ2h0IiwiZ2V0U2l6ZSIsIndhdGVybWFya1Jlc2l6ZVdpZHRoIiwiTWF0aCIsImZsb29yIiwid2F0ZXJtYXJrUmVzaXplSGVpZ2h0IiwicmVzaXplIiwiZml0Iiwicm90YXRlIiwiYmFja2dyb3VuZCIsInIiLCJnIiwiYiIsImFscGhhIiwiY3JlYXRlV2F0ZXJtYXJrIiwiY29tcG9zaXRlIiwiaW5wdXQiLCJncmF2aXR5IiwidGlsZSIsInZhbGlkUGFyYW0iLCJwYXJhbXMiLCJldmVyeSIsInBhcmFtIiwiYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QiLCJpbWFnZUV4dExpc3QiLCJpbWFnZUFkZFdhdGVyTWFyayIsIndhdGVybWFya1RleHQiLCJ3YXRlcm1hcmtQb3NpdGlvbiIsImZvcm1hdE9wdGlvbnMiLCJxdWFsaXR5IiwiaXNDb252ZXJ0IiwiY29udmVydEZvcm1hdCIsImlzUmVTaXplIiwicmVTaXplSGVpZ2h0IiwicmVTaXplV2lkdGgiLCJpc1JlU2l6ZUJ5UGVyY2VudCIsInJlU2l6ZVBlcmNlbnQiLCJpc1JvdGF0ZSIsInJvdGF0ZURlZ3JlZSIsImltYWdlUHJvY2VzcyIsInJhd0Zvcm1hdCIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsImltYWdlV2lkdGgiLCJpbWFnZUhlaWdodCIsInJvdW5kIiwibmV3Rm9ybWF0IiwidG9Gb3JtYXQiLCJmb3JtYXQiLCJpbWFnZUZvcm1hdExpc3QiLCJuZWVkQWRkV2F0ZXJtYXJrIiwid2F0ZXJtYXJrT3B0aW9ucyIsImZpbGVFeHQiLCJpc0FkZFdhdGVybWFyayIsIm5lZWRDb21wcmVzcyIsImNvbXByZXNzT3B0aW9ucyIsInVwbG9hZCIsImFyZ3VtZW50cyIsImlucHV0TGlzdCIsIm1hcCIsIml0ZW0iLCJmaWx0ZXIiLCJleGlzdCIsInVzZXJDb25maWciLCJnZXRDb25maWciLCJ0eXBlIiwiaTE4biIsInRyYW5zbGF0ZSIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImNob2ljZXMiLCJoYW5kbGVDb25maWciLCJwcm9tcHRzIiwibW9kdWxlIiwiYW5zd2VyIiwiaW5xdWlyZXIiLCJwcm9tcHQiLCJjb25maWdOYW1lIiwic2F2ZUNvbmZpZyIsInNldHRpbmciLCJjb21wcmVzcyIsImJ1aWxkaW4iLCJoZWxwZXIiLCJnZXQiLCJnZXRJZExpc3QiLCJwbHVnaW5Mb2FkZXIiLCJnZXRQbHVnaW4iLCJnZXRGdWxsTGlzdCIsInBsdWdpbiIsInVzZU1vZHVsZU5hbWUiLCJpbmZvIiwiYXJndiIsInVzZSIsInVwbG9hZGVyIiwidHJhbnNmb3JtZXIiLCJwdXNoIiwicGljZ29QbHVnaW5zIiwic2V0Q29uZmlnIiwiZ2VuZXJhdGUiLCJvcHRzIiwiZ2V0T3B0aW9ucyIsInRtcCIsInNvdXJjZSIsImFuc3dlcnMiLCJfZmlsZXMiLCJnbG9iYnkiLCJkb3QiLCJnbG9iIiwiZmlsdGVycyIsImZvckVhY2giLCJmaWxlcyIsInJlbmRlciIsIndyaXRlRmlsZVRyZWUiLCJkZXN0IiwiY29tcGxldGUiLCJjb21wbGV0ZU1lc3NhZ2UiLCJleHAiLCJmbiIsIkZ1bmN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsInRlbXBsYXRlUGF0aCIsIm9wdGlvbnNQYXRoIiwicmVxdWlyZSIsImZpbGVUcmVlIiwiZmlsZVBhdGgiLCJyZWFkRmlsZVN5bmMiLCJjb250ZW50IiwiZWpzIiwiaXNCdWZmZXIiLCJkaXIiLCJlbnN1cmVEaXJTeW5jIiwiZGlybmFtZSIsIndyaXRlRmlsZVN5bmMiLCJydW4iLCJvZmZsaW5lIiwidGVtcGxhdGUiLCJoYXNTbGFzaCIsImRvd25sb2FkQW5kR2VuZXJhdGUiLCJybSIsInN5bmMiLCJkb3dubG9hZCIsImNsb25lIiwiZXJyIiwiaW5pdCIsInByb2plY3QiLCJpblBsYWNlIiwiaG9tZWRpciIsIm9rIiwib24iLCJjaGFsayIsImdyYXkiLCJsYW5nIiwibGlzdCIsImdldExhbmd1YWdlTGlzdCIsInNldExhbmd1YWdlIiwiTGlmZWN5Y2xlUGx1Z2lucyIsImNvbnN0cnVjdG9yIiwidGhpcyIsIk1hcCIsInBsdWdpbklkTWFwIiwicmVnaXN0ZXIiLCJpZCIsIlR5cGVFcnJvciIsImhhcyIsInNldCIsImN1cnJlbnRQbHVnaW4iLCJ1bnJlZ2lzdGVyIiwicGx1Z2luTmFtZSIsInBsdWdpbkxpc3QiLCJkZWxldGUiLCJnZXROYW1lIiwiZ2V0TGlzdCIsInZhbHVlcyIsInNldEN1cnJlbnRQbHVnaW5OYW1lIiwiQ29tbWFuZGVyIiwiQ29tbWFuZCIsInZlcnNpb24iLCJkZWJ1ZyIsInNpbGVudCIsImFyZ3MiLCJleGl0IiwiY3VycmVudFBsdWdpbk5hbWUiLCJsb2FkQ29tbWFuZHMiLCJJTG9nVHlwZSIsIklCdWlsZEluRXZlbnQiLCJJQnVzRXZlbnQiLCJMb2dnZXIiLCJoYW5kbGVMb2ciLCJtc2ciLCJsb2dIZWFkZXIiLCJsZXZlbCIsInRvVXBwZXJDYXNlIiwibG9nTGV2ZWwiLCJsb2dQYXRoIiwiYmFzZURpciIsInJlc3VsdCIsImNoZWNrTG9nRmlsZUlzTGFyZ2UiLCJpc0xhcmdlIiwid2FybmluZ01zZyIsInllbGxvdyIsInJlY3JlYXRlTG9nRmlsZSIsInVuc2hpZnQiLCJoYW5kbGVXcml0ZUxvZyIsImxvZ0ZpbGVTaXplIiwic3RhdFN5bmMiLCJzaXplIiwibG9nRmlsZVNpemVMaW1pdCIsInVubGlua1N5bmMiLCJjcmVhdGVGaWxlU3luYyIsImNoZWNrTG9nTGV2ZWwiLCJkYXlqcyIsIkVycm9yIiwidXRpbCIsInN0YWNrIiwiYXBwZW5kRmlsZVN5bmMiLCJ1bmRlZmluZWQiLCJlbnYiLCJOT0RFX0VOViIsIkxpZmVjeWNsZSIsIkV2ZW50RW1pdHRlciIsInN1cGVyIiwidGVtcEZpbGVQYXRoIiwiZW1wdHlEaXJTeW5jIiwidHRmUGF0aCIsIm91dHB1dERpciIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsImF4aW9zIiwidHRmTGluayIsImNvbmZpZ1BhdGgiLCJvdXRwdXQiLCJSZXF1ZXN0IiwiVkVSU0lPTiIsIkdVSV9WRVJTSU9OIiwiYmluZCIsInJlbW92ZUNvbmZpZyIsInVuc2V0Q29uZmlnIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJsaXN0ZW5lcnMiLCJyYXdMaXN0ZW5lcnMiLCJlbWl0IiwibGlzdGVuZXJDb3VudCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJldmVudE5hbWVzIiwiY3JlYXRlQ29udGV4dCIsIndhdGVybWFya01zZyIsImNvbXByZXNzTXNnIiwiYWxsU2V0dGxlZCIsImluZGV4IiwidHJhbnNmb3JtZWRCdWZmZXIiLCJkb3dubG9hZFRURiIsIm5ld0V4dCIsInRlbXBGaWxlIiwiRGF0ZSIsImdldFRpbWUiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsImJlZm9yZVVwbG9hZCIsImRvVXBsb2FkIiwiYWZ0ZXJVcGxvYWQiLCJGQUlMRUQiLCJVUExPQURfUFJPR1JFU1MiLCJCRUZPUkVfVFJBTlNGT1JNIiwiaGFuZGxlUGx1Z2lucyIsImJlZm9yZVRyYW5zZm9ybVBsdWdpbnMiLCJjdXJyZW50VHJhbnNmb3JtZXIiLCJCRUZPUkVfVVBMT0FEIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsIm91dHB1dEltZyIsIkFGVEVSX1VQTE9BRCIsImFmdGVyVXBsb2FkUGx1Z2lucyIsImkiLCJpbWdVcmwiLCJiYXNlNjRJbWFnZSIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJBdXRob3JpemF0aW9uIiwiZm9ybURhdGEiLCJzbWZpbGUiLCJ2YWx1ZSIsImZpbGVuYW1lIiwic3NsIiwic21tc0NvbmZpZyIsImltZ0xpc3QiLCJwb3N0Q29uZmlnIiwidG9rZW4iLCJib2R5IiwicGFyc2UiLCJjb2RlIiwiaGFzaCIsImltYWdlcyIsIk5PVElGSUNBVElPTiIsInRpdGxlIiwicHJlZml4IiwiZ2VuZXJhdGVTaWduYXR1cmUiLCJzZWNyZXRJZCIsInNlY3JldEtleSIsImFwcElkIiwiYnVja2V0Iiwic2lnbmF0dXJlIiwic2lnblRpbWUiLCJ0b2RheSIsInNpZ25LZXkiLCJjcnlwdG8iLCJjcmVhdGVIbWFjIiwiZGlnZXN0IiwiaHR0cFN0cmluZyIsImFyZWEiLCJzdHJpbmdUb1NpZ24iLCJjcmVhdGVIYXNoIiwicmFuZG9tIiwiY3VycmVudCIsIm11bHRpU2lnbmF0dXJlIiwic2lnbkhleEtleSIsInRlbXBTdHJpbmciLCJjb25jYXQiLCJ0b1N0cmluZyIsImVuY29kZVVSSUNvbXBvbmVudCIsIkhvc3QiLCJtaW1lIiwibG9va3VwIiwidXNlckFnZW50Iiwib3AiLCJmaWxlY29udGVudCIsInRjWXVuT3B0aW9ucyIsImN1c3RvbVVybCIsInVzZVY0Iiwic3RhdHVzQ29kZSIsIm9wdGlvblVybCIsInNvdXJjZV91cmwiLCJyZXBvIiwianNvbiIsImdpdGh1Yk9wdGlvbnMiLCJicmFuY2giLCJkb3dubG9hZF91cmwiLCJzaGEiLCJpbWdCYXNlNjQiLCJzZWxlY3RBcmVhIiwiZ2V0VG9rZW4iLCJxaW5pdU9wdGlvbnMiLCJhY2Nlc3NLZXkiLCJtYWMiLCJxaW5pdSIsImF1dGgiLCJNYWMiLCJycyIsIlB1dFBvbGljeSIsInVwbG9hZFRva2VuIiwiYmFzZVVybCIsInJlc3BvbnNlIiwib2JqIiwiY2xpZW50SWQiLCJpbWd1ck9wdGlvbnMiLCJsaW5rIiwiZGVsZXRlaGFzaCIsImRhdGUiLCJ0b1VUQ1N0cmluZyIsIm1pbWVUeXBlIiwic2lnblN0cmluZyIsImFjY2Vzc0tleVNlY3JldCIsImFjY2Vzc0tleUlkIiwiYWxpWXVuT3B0aW9ucyIsIm9wZXJhdG9yIiwicGFzc3dvcmQiLCJtZDVQYXNzd29yZCIsIk1ENSIsInVweXVuT3B0aW9ucyIsInN0ciIsInNhZmVQYXJzZSIsImhvc3QiLCJ1c2VybmFtZSIsIndlYmRhdnBsaXN0T3B0aW9ucyIsInNzbEVuYWJsZWQiLCJidWlsZEluVXBsb2FkZXJzIiwiYWxpWXVuVXBsb2FkZXIiLCJ0Y1l1blVwbG9hZGVyIiwiU01NU1VwbG9hZGVyIiwiZ2l0aHViVXBsb2FkZXIiLCJxaW5pdVVwbG9hZGVyIiwiaW1ndXJVcGxvYWRlciIsInVwWXVuVXBsb2FkZXIiLCJ3ZWJkYXZwbGlzdFVwbG9hZGVyIiwiZ2V0SW1nU2l6ZSIsInJlc3VsdHMiLCJyZWFkRmlsZSIsImdldEZTRmlsZSIsImltZ1NpemUiLCJQbHVnaW5Mb2FkZXIiLCJTZXQiLCJwYWNrYWdlUGF0aCIsInBrZyIsInJlcG9zaXRvcnkiLCJsaWNlbnNlIiwicmVzb2x2ZVBsdWdpbiIsImJhc2VkaXIiLCJsb2FkIiwicGx1Z2luRGlyIiwicmVhZEpTT05TeW5jIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJtb2R1bGVzIiwicmVnaXN0ZXJQbHVnaW4iLCJmdWxsTGlzdCIsImFkZCIsInBsdWdpbkludGVyZmFjZSIsInBsdWdpbk1hcCIsInVucmVnaXN0ZXJQbHVnaW4iLCJoYXNQbHVnaW4iLCJwbGF0Zm9ybTJTY3JpcHRDb250ZW50IiwiZGFyd2luIiwid2luMzIiLCJ3aW4xMCIsImxpbnV4Iiwid3NsIiwicGxhdGZvcm0yU2NyaXB0RmlsZW5hbWUiLCJnZXRDbGlwYm9hcmRJbWFnZSIsImltYWdlUGF0aCIsImNyZWF0ZUltYWdlRm9sZGVyIiwicGxhdGZvcm0iLCJpc1dzbCIsIm9zIiwicmVsZWFzZSIsImdldEN1cnJlbnRQbGF0Zm9ybSIsInNjcmlwdFBhdGgiLCJleGVjdXRpb24iLCJzcGF3biIsInN0ZG91dCIsInRyaW0iLCJpbWdQYXRoIiwic2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIiwiZXZlbnRCdXMiLCJodHRwc0FnZW50IiwiaHR0cHMiLCJBZ2VudCIsIm1heFZlcnNpb24iLCJtaW5WZXJzaW9uIiwiYXBwZW5kRm9ybURhdGEiLCJmb3JtIiwiYXBwZW5kIiwicmVzcG9uc2VJbnRlcmNlcHRvciIsInN0YXR1cyIsInJlc3BvbnNlRXJyb3JIYW5kbGVyIiwiZXJyb3JPYmoiLCJDT05GSUdfQ0hBTkdFIiwiaGFuZGxlUHJveHkiLCJwcm94eU9wdGlvbnMiLCJob3N0bmFtZSIsInBvcnQiLCJwYXJzZUludCIsInByb3RvY29sIiwibWF4Qm9keUxlbmd0aCIsIkluZmluaXR5IiwibWF4Q29udGVudExlbmd0aCIsInR1bm5lbCIsImh0dHBzT3Zlckh0dHAiLCJpbnN0YW5jZSIsImNyZWF0ZSIsImludGVyY2VwdG9ycyIsIm9wdCIsIl9faXNPbGRPcHRpb25zIiwiRm9ybURhdGEiLCJhc3NpZ24iLCJnZXRIZWFkZXJzIiwicXMiLCJyZXF1ZXN0SW50ZXJjZXB0b3IiLCJDb250ZW50VHlwZSIsIkRCIiwiZGIiLCJKU09OU3RvcmUiLCJyZWFkIiwiZmx1c2giLCJ1bnNldCIsIlBsdWdpbkhhbmRsZXIiLCJpbnN0YWxsZWRQbHVnaW5zIiwicHJvY2Vzc1BsdWdpbnMiLCJoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyIsInBrZ05hbWUiLCJmdWxsTmFtZUxpc3QiLCJmdWxsTmFtZSIsInBrZ05hbWVMaXN0IiwiZXhlY0NvbW1hbmQiLCJ3aGVyZSIsIm5wbSIsInBpcGUiLCJzdGRlcnIiLCJsb2dnZXIiLCJnZXRQcm9jZXNzUGx1Z2luTmFtZSIsInBhY2thZ2VKU09OUGF0aCIsInBvc2l4IiwiZ2V0Tm9ybWFsUGx1Z2luTmFtZSIsImxhbmd1YWdlTGlzdCIsIlVQTE9BRF9GQUlMRUQiLCJDSEVDS19TRVRUSU5HUyIsIkNIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLIiwiVVBMT0FEX0ZBSUxFRF9SRUFTT04iLCJTRVJWRVJfRVJST1IiLCJBVVRIX0ZBSUxFRCIsIlBJQ0JFRF9TTU1TIiwiUElDQkVEX1NNTVNfVE9LRU4iLCJQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOIiwiUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOIiwiUElDQkVEX0FMSUNMT1VEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCIsIlBJQ0JFRF9BTElDTE9VRF9CVUNLRVQiLCJQSUNCRURfQUxJQ0xPVURfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9BTElDTE9VRF9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTiIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9HSVRIVUIiLCJQSUNCRURfR0lUSFVCX1RPS0VOIiwiUElDQkVEX0dJVEhVQl9SRVBPIiwiUElDQkVEX0dJVEhVQl9QQVRIIiwiUElDQkVEX0dJVEhVQl9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9RSU5JVSIsIlBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVkiLCJQSUNCRURfUUlOSVVfU0VDUkVUS0VZIiwiUElDQkVEX1FJTklVX0JVQ0tFVCIsIlBJQ0JFRF9RSU5JVV9QQVRIIiwiUElDQkVEX1FJTklVX1VSTCIsIlBJQ0JFRF9RSU5JVV9PUFRJT05TIiwiUElDQkVEX1FJTklVX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwiLCJQSUNCRURfSU1HVVIiLCJQSUNCRURfSU1HVVJfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRSIsIkJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fQ09NUFJFU1NfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUUiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQiLCJlbiIsIkkxOG5NYW5hZ2VyIiwib2JqZWN0QWRhcHRlciIsIk9iamVjdEFkYXB0ZXIiLCJsYW5ndWFnZSIsIkkxOG4iLCJhZGFwdGVyIiwiZGVmYXVsdExhbmd1YWdlIiwibG9hZE91dHRlckkxOG4iLCJpMThuRm9sZGVyIiwiZ2V0T3V0dGVySTE4bkZvbGRlciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImlzRmlsZSIsImVuZHNXaXRoIiwiaTE4bkZpbGVQYXRoIiwiaTE4bkZpbGUiLCJpMThuRmlsZU9iaiIsInlhbWwiLCJwYXRoRXhpc3RzU3luYyIsImFkZExvY2FsZSIsImxvY2FsZXMiLCJvcmlnaW5Mb2NhbGVzIiwiZ2V0TG9jYWxlIiwibmV3TG9jYWxlcyIsIm1lcmdlIiwic2V0TG9jYWxlIiwiYWRkTGFuZ3VhZ2UiLCJQaWNHbyIsImluaXRDb25maWdQYXRoIiwiaW5pdENvbmZpZyIsIl9wbHVnaW5Mb2FkZXIiLCJlbnN1cmVGaWxlU3luYyIsIl9jb25maWciLCJ1cGxvYWRlcnMiLCJJbWdGcm9tUGF0aCIsIkltZ0Zyb21CYXNlNjQiLCJsaWZlY3ljbGUiLCJyZWdpc3RlckNvbW1hbmRzIiwicHJvcE5hbWUiLCJzdGFydCIsInJlbW92ZSJdLCJtYXBwaW5ncyI6ImdpQ0FFQSxNQUFNQSxHQUF5QixDQUM3QkMsT0FBU0MsSUFFUCxNQUFNQyxFQUFNRCxFQUFJQyxJQUNoQkEsRUFBSUMsUUFDREMsUUFBUSx3QkFDUkMsWUFBWSx3QkFDWkMsTUFBTSxPQUNOQyxPQUFPLHNCQUF1Qiw0QkFDOUJBLE9BQU8sNEJBQTZCLG9DQUNwQ0MsUUFBTyxDQUFDQyxFQUFtQk4sS0FDMUIsTUFBTU8sTUFBRUEsRUFBS0MsU0FBRUEsR0FBYVIsRUFDdEJTLEVBQVUsQ0FDZEYsTUFBQUEsRUFDQUMsU0FBQUEsR0FFRlYsRUFBSUYsY0FBY2MsUUFBUUosRUFBU0csR0FBU0UsT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsU0FFN0ViLEVBQUlDLFFBQ0RDLFFBQVEsMEJBQ1JFLE1BQU0sTUFDTkQsWUFBWSwwQkFDWkcsUUFBUUMsSUFDUFIsRUFBSUYsY0FBY21CLFVBQVVULEdBQVNLLE9BQU9DLElBQVFkLEVBQUllLElBQUlDLE1BQU1GLFNBRXRFYixFQUFJQyxRQUNEQyxRQUFRLHVCQUNSQyxZQUFZLHVCQUNaRSxPQUFPLHNCQUF1Qiw0QkFDOUJBLE9BQU8sNEJBQTZCLG9DQUNwQ0MsUUFBTyxDQUFDQyxFQUFtQk4sS0FDMUIsTUFBTU8sTUFBRUEsRUFBS0MsU0FBRUEsR0FBYVIsRUFDdEJTLEVBQVUsQ0FDZEYsTUFBQUEsRUFDQUMsU0FBQUEsR0FFRlYsRUFBSUYsY0FBY29CLE9BQU9WLEVBQVNHLEdBQVNFLE9BQU9DLElBQWVkLEVBQUllLElBQUlDLE1BQU1GLFdDcENqRkssR0FBa0IsQ0FDdEJwQixPQUFTQyxJQUNL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
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),r=require("events"),n=require("os"),i=require("commander"),a=require("inquirer"),s=require("image-size"),o=require("url"),l=require("text-to-svg"),E=require("sharp"),u=require("chalk"),c=require("minimatch"),I=require("globby"),_=require("ejs"),d=require("download-git-repo"),p=require("rimraf"),g=require("dayjs"),S=require("util"),f=require("axios"),A=require("crypto"),P=require("mime-types"),h=require("qiniu"),m=require("md5"),C=require("resolve"),D=require("lodash"),L=require("child_process"),T=require("is-wsl"),N=require("form-data"),U=require("https"),R=require("tunnel"),B=require("@picgo/store"),O=require("cross-spawn"),M=require("js-yaml"),y=require("@picgo/i18n");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=w(e),G=w(t),x=w(n),v=w(a),$=w(l),W=w(E),H=w(u),K=w(c),F=w(I),k=w(_),q=w(d),Y=w(p),j=w(g),V=w(S),z=w(f),Q=w(A),X=w(P),Z=w(h),J=w(m),ee=w(C),te=w(T),re=w(N),ne=w(U),ie=w(R),ae=w(O),se=w(M);const oe={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.install(t,a).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.update(t,a).catch((t=>{e.log.error(t)}))}))}},le={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}},Ee=e=>/^https?:\/\//.test(e),ue=e=>((e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!0}})(e)||(e=encodeURI(e)),e),ce=e=>{try{const{width:t=0,height:r=0}=s.imageSize(e);return{real:!0,width:t,height:r}}catch(e){return{real:!1,width:200,height:200}}},Ie=async(e,t)=>{let r;e=ue(e);const n=new Promise(((n,i)=>{(async()=>{var i;try{const i=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const a=new o.URL(e).pathname;n({buffer:i,fileName:G.default.basename(a),extname:G.default.extname(a),success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(i=null==t?void 0:t.message)&&void 0!==i?i:""}`})}})().catch(i)})),i=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,i])},_e=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":de(e)?"simple":"unknown",de=e=>{if(G.default.isAbsolute(e))return!1;const t=G.default.join(process.cwd(),e);return!b.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},pe=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,ge=e=>e.split(G.default.sep).join("/"),Se=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},fe=[],Ae=e=>fe.some((t=>e.startsWith(t))),Pe=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;const he=(e=0)=>isNaN(Number(e))?0:Number(e);const me=`${__dirname}/assets/piclist.png`;async function Ce(e,t,r,n,i,a,s,o,l,E,u){o=!o||o<0||o>1?.15:o;const c=W.default(e),{width:I=200}=await c.metadata(),_=await async function(e,t,r,n,i,a,s,o=200,l=0){let E;"image"===e?(s=s||me,E=await W.default(s).toBuffer()):E=await async function(e,t,r,n){t=t||"测试",n=n||e;const i={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},a=$.default.loadSync(n).getSVG(t,i);return Buffer.from(a)}(t,r,a,n||t);const{width:u,height:c}=await async function(e){const{width:t,height:r}=await W.default(e).metadata();return{width:t||200,height:r||200}}(E),I=Math.floor(o*he(i)),_=Math.floor(I*c/u);return await W.default(E).resize(I,_,{fit:"inside"}).rotate(l,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,a,s,o,l,E,I,i);return await c.composite([{input:_,gravity:u||"southeast",tile:n}]).toBuffer()}const De=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),Le=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Te=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function Ne(e,t,r){try{let n=W.default(e);return De(t.watermarkText)&&(n=W.default(await Ce(e,t.watermarkType||"text",r,t.isFullScreenWatermark,he(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,he(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition))),await n.toBuffer()}catch(t){return console.log(t),e}}function Ue(e){return{quality:he(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:he(e.reSizeHeight),reSizeWidth:he(e.reSizeWidth),isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:he(e.reSizePercent),isRotate:e.isRotate||!1,rotateDegree:he(e.rotateDegree)}}async function Re(e,t,r){t=Ue(t);try{if(r=r.toLowerCase().replace(".",""),!Te.includes(r))return e;let i=W.default(e),a=100;if(De(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(De(t.reSizePercent)){const e=await i.metadata().then((e=>e.width)),r=await i.metadata().then((e=>e.height));e&&r&&(i=i.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else t.isReSize&&De(t.reSizeHeight,t.reSizeWidth)&&(i=i.resize(t.reSizeWidth,t.reSizeHeight,{fit:"inside"}));if(t.isRotate&&t.rotateDegree&&(i=i.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isConvert){const e=t.convertFormat||"jpg";i=i.toFormat(e,{quality:a})}else i=r&&(n=r,Le.includes(n))?i.toFormat(r,{quality:a}):i.toFormat("jpg",{quality:a});return await i.toBuffer()}catch(t){return console.log(t),e}var n}const Be=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"],Oe=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&Be.includes(t)),Me=(e,t)=>{if(t=t.toLowerCase().replace(".",""),!Be.includes(t))return!1;if(e){if(e=Ue(e),De(e.quality)&&e.quality<100)return!0;if(e.isReSizeByPercent&&De(e.reSizePercent))return!0;if(e.isReSize&&De(e.reSizeHeight,e.reSizeWidth))return!0;if(e.isRotate&&e.rotateDegree)return!0;if(e.isConvert){return t!==(e.convertFormat||"jpg")}return!1}return!1},ye=async(e,t)=>(t=t.toLowerCase().replace(".",""),Be.includes(t)?await W.default(e).toBuffer():e),we={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>Ee(e)?e:G.default.resolve(e))).filter((t=>{const r=b.default.existsSync(t)||Ee(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var be=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"isReSizeByPercent",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isRotate",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var Ge=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};const xe=async(e,t,r,n)=>{const i=await e.cmd.inquirer.prompt(t),a="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[a]:i})},ve={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,i;try{switch(t){case"buildin":if("compress"===r)await xe(e,be(e),t,r);else if("watermark"===r)await xe(e,Ge(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await xe(e,be(e),t,n.buildin):"watermark"===n.buildin&&await xe(e,Ge(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return e.log.error(`No ${t} named ${r}`);n.config&&await xe(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),i=e.helper[t].get(n[t]);(null==i?void 0:i.config)&&await xe(e,i.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await xe(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(i=e.pluginLoader.getPlugin(r.plugin))||void 0===i?void 0:i.config)&&await xe(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),e.log.warn("Available modules are uploader|transformer|plugin|buildin")}const a="plugin"===t?"plugins":t;e.log.success("Configure config successfully!"),"buildin"!==t&&e.log.info(`If you want to use this config, please run 'picgo use ${a}'`)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},$e={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const i={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!i[r])return e.log.warn(`No module named ${r}`),e.log.warn("Available modules are uploader|transformer|plugins");n.push(i[r])}else n=Object.keys(i).map((e=>i[e]));const a=await t.inquirer.prompt(n);if(a.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).map((e=>{a.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":a.uploader||e.getConfig("picBed.current"),"picBed.uploader":a.uploader||e.getConfig("picBed.current"),"picBed.transformer":a.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},We={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},He=async(e,t)=>{try{const r=Fe(t.tmp),n=G.default.join(t.tmp,"template");let i={};r.prompts&&r.prompts.length>0&&(i=await e.cmd.inquirer.prompt(r.prompts));let a=await F.default(["**/*"],{cwd:n,dot:!0});if(a=a.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{K.default(t,e,{dot:!0})&&(n=t)})),!n||Ke(e,r.filters[n],i)})),0===a.length)return e.log.warn("Template files not found!");const s=ke(a,n,i);qe(t.dest,s),"function"==typeof r.complete&&r.complete({answers:i,options:t,files:a,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){return e.log.error(t)}},Ke=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},Fe=e=>{const t=G.default.join(e,"index.js");if(b.default.existsSync(t)){return require(t)}return{}},ke=(e,t,r)=>{const n={};return e.forEach((e=>{const i=b.default.readFileSync(G.default.join(t,e),"utf8"),a=k.default.render(i,r);(Buffer.isBuffer(a)||/[^\s]/.test(a))&&(n[e]=a)})),n},qe=(e,t)=>{Object.keys(t).forEach((r=>{const n=G.default.join(e,r);b.default.ensureDirSync(G.default.dirname(n)),b.default.writeFileSync(n,t[r])}))},Ye=(e,t)=>{t.offline?b.default.existsSync(t.template)?He(e,t).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${t.template} not found`):(t.template=t.hasSlash?t.template:"PicGo/picgo-template-"+t.template,je(e,t))},je=(e,t)=>{b.default.existsSync(t.tmp)&&Y.default.sync(t.tmp),e.log.info("Template files are downloading..."),q.default(t.template,t.tmp,{clone:t.clone},(r=>{if(r)return e.log.error(r);e.log.success("Template files are downloaded!"),He(e,t).catch((t=>{e.log.error(t)}))}))},Ve={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,r,i)=>{(async()=>{try{const a=t.includes("/"),s=!r||"."===r,o=G.default.resolve(r||"."),l=i.clone||!1,E=i.offline||!1,u=G.default.join(n.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));i.offline&&(t=u);const c={template:t,project:r,hasSlash:a,inPlace:s,dest:o,clone:l,tmp:u,offline:E};s||b.default.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&Ye(e,c)})):Ye(e,c)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(H.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(H.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},ze={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change picgo language").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const t=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}],n=await e.cmd.inquirer.prompt(t);return e.i18n.setLanguage(n.i18n),void e.log.success(`Language set to ${n.i18n}`)}if(!r.includes(t))return e.log.warn("No such language");e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)}))}};class Qe{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),Qe.currentPlugin&&(this.pluginIdMap.has(Qe.currentPlugin)?null===(r=this.pluginIdMap.get(Qe.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(Qe.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const Xe=(e=null)=>{Qe.currentPlugin=e};class Ze{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new i.Command,this.inquirer=v.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("0.3.1","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",oe),e.cmd.register("config",le),e.cmd.register("setting",ve),e.cmd.register("upload",we),e.cmd.register("use",$e),e.cmd.register("proxy",We),e.cmd.register("init",Ve),e.cmd.register("i18n",ze)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=Qe.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var Je,et,tt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(Je||(Je={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(et||(et={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(tt||(tt={}));class rt{constructor(e){this.level={[Je.success]:"green",[Je.info]:"blue",[Je.warn]:"yellow",[Je.error]:"red"},this.ctx=e}handleLog(e,...t){if(!this.ctx.getConfig("silent")){const r=H.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logLevel=this.ctx.getConfig("settings.logLevel"),this.logPath=this.ctx.getConfig("settings.logPath")||G.default.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(H.default.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(b.default.existsSync(e)){const t=b.default.statSync(e).size,r=1024*he(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){b.default.existsSync(e)&&(b.default.unlinkSync(e),b.default.createFileSync(e))}handleWriteLog(e,t,...r){try{if(this.checkLogLevel(t,this.logLevel)){let n=`${j.default().format("YYYY-MM-DD HH:mm:ss")} [PicList ${t.toUpperCase()}] `;r.forEach((e=>{e instanceof Error&&"error"===t?n+=`\n------Error Stack Begin------\n${V.default.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),n+=`${e} `)})),n+="\n",b.default.appendFileSync(e,n)}}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){return this.handleLog(Je.success,...e)}info(...e){return this.handleLog(Je.info,...e)}error(...e){return this.handleLog(Je.error,...e)}warn(...e){return this.handleLog(Je.warn,...e)}debug(...e){"development"===process.env.NODE_ENV&&this.handleLog(Je.info,...e)}}class nt extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=G.default.join(e.baseDir,"piclistTemp");b.default.emptyDirSync(t),this.ttfPath=G.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=G.default.dirname(this.ttfPath);if(b.default.existsSync(e)||b.default.mkdirSync(e,{recursive:!0}),b.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await z.default.get(this.ttfLink,{responseType:"arraybuffer"});return b.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");t.input=e,t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("buildIn.watermark");if(r||n){const e=G.default.join(t.baseDir,"piclistTemp");b.default.existsSync(e)||b.default.mkdirSync(e);const i="Add watermark to image",a="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var l,E,u,c,I,_,d;let p;if(Ee(s)){if(p=await Ie(s,t),!p.success||!p.buffer)throw new Error(p.reason);{let s;if(Oe(n,null!==(l=p.extname)&&void 0!==l?l:"")){await this.downloadTTF()?(t.log.info(i),s=await Ne(p.buffer,n,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(Me(r,null!==(E=p.extname)&&void 0!==E?E:"")&&(t.log.info(a),s=await Re(null!=s?s:p.buffer,r,null!==(u=p.extname)&&void 0!==u?u:"")),!s&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),s=await ye(p.buffer,null!==(c=p.extname)&&void 0!==c?c:"")),s){let n;n=(null==r?void 0:r.isConvert)?null!==(I=null==r?void 0:r.convertFormat)&&void 0!==I?I:"jpg":null!==(_=p.extname)&&void 0!==_?_:"",n=n.startsWith(".")?n:`.${n}`;const i=G.default.join(e,`${p.fileName?`${G.default.basename(p.fileName,G.default.extname(p.fileName))}${n}`:(new Date).getTime()}${n}`);b.default.writeFileSync(i,s),t.input[o]=i}}}else{let l;if(Oe(n,G.default.extname(s))){await this.downloadTTF()?(t.log.info(i),l=await Ne(b.default.readFileSync(s),n,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(Me(r,G.default.extname(s))&&(t.log.info(a),l=await Re(null!=l?l:b.default.readFileSync(s),r,G.default.extname(s))),!l&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),l=await ye(b.default.readFileSync(s),G.default.extname(s))),l){let n;n=(null==r?void 0:r.isConvert)?null!==(d=null==r?void 0:r.convertFormat)&&void 0!==d?d:"jpg":G.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const i=G.default.join(e,`${G.default.basename(s,G.default.extname(s))}${n}`);b.default.writeFileSync(i,l),t.input[o]=i}}})))}return await this.beforeTransform(t),await this.doTransform(t),await this.beforeUpload(t),await this.doUpload(t),await this.afterUpload(t),t}catch(e){if(t.log.warn(et.FAILED),t.emit(et.UPLOAD_PROGRESS,-1),t.emit(et.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(et.UPLOAD_PROGRESS,0),e.emit(et.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(et.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(et.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(et.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(t="smms",n="smms",r=e.helper.uploader.get("smms"),e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`)),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(et.AFTER_UPLOAD,e),e.emit(et.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length;for(let n=0;n<r;n++)void 0!==e.output[n].imgUrl&&(t+=ue(e.output[n].imgUrl),n!==r-1&&(t+="\n")),delete e.output[n].base64Image,delete e.output[n].buffer;return e.emit(et.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),i=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${i}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${i}: ${n[r]} error`),e}}))),t}}const it=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicGo",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),at=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const i=it(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(i),r=JSON.parse(t);if("success"===r.code)delete n.base64Image,delete n.buffer,n.imgUrl=r.data.url,n.hash=r.data.hash;else{if("image_repeated"!==r.code||"string"!=typeof r.images)throw e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.message}),new Error(r.message);delete n.base64Image,delete n.buffer,n.imgUrl=r.images}}catch(t){throw e.log.error(t),t}}return e},st=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"password",get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const ot=(e,t)=>{const r=e.secretId,n=e.secretKey,i=e.appId,a=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const i=Q.default.createHmac("sha1",n).update(o).digest("hex"),a=`put\n/${e.path}${t}\n\nhost=${e.bucket}.cos.${e.area}.myqcloud.com\n`,l=`sha1\n${o}\n${Q.default.createHash("sha1").update(a).digest("hex")}\n`;s=Q.default.createHmac("sha1",i).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${i}&b=${a}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,l=Q.default.createHmac("sha1",n).update(o).digest(),E=Buffer.concat([l,Buffer.from(o)]);s=Buffer.from(E).toString("base64")}return{signature:s,appId:i,bucket:a,signTime:o}},lt=(e,t,r,n,i)=>{const a=e.area,s=e.path;return e.version&&"v4"!==e.version?{method:"PUT",url:`http://${e.bucket}.cos.${e.area}.myqcloud.com/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.cos.${e.area}.myqcloud.com`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:X.default.lookup(t),userAgent:`PicGo;${i};null;null`},body:n,resolveWithFullResponse:!0}:{method:"POST",url:`http://${a}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${a}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data",userAgent:`PicGo;${i};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},Et=async e=>{var t,r,n;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const a=e.output,s=i.customUrl,o=i.path,l=!i.version||"v4"===i.version;for(const E of a)if(E.fileName&&E.buffer){const a=ot(i,E.fileName);if(!a)return!1;let u=E.buffer;!u&&E.base64Image&&(u=Buffer.from(E.base64Image,"base64"));const c=lt(i,E.fileName,a,u,e.GUI_VERSION||e.VERSION),I=await e.request(c).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let _;if(_=l&&"string"==typeof I?JSON.parse(I):I,400===_.statusCode)throw(null===(t=null==_?void 0:_.body)||void 0===t?void 0:t.err)?_.body.err:new Error((null===(r=null==_?void 0:_.body)||void 0===r?void 0:r.msg)||(null===(n=null==_?void 0:_.body)||void 0===n?void 0:n.message));const d=i.options||"";if(l&&"SUCCESS"===_.message)delete E.base64Image,delete E.buffer,E.imgUrl=s?`${s}/${o}${E.fileName}`:`${_.data.source_url}${d}`;else{if(l||!_||200!==_.statusCode)throw new Error(I.body.msg);delete E.base64Image,delete E.buffer,E.imgUrl=s?`${s}/${encodeURI(o)}${encodeURI(E.fileName)}${d}`:`https://${i.bucket}.cos.${i.area}.myqcloud.com/${encodeURI(o)}${encodeURI(E.fileName)}${d}`}}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},ut=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1}]};const ct=(e,t,r)=>{const n=t.path||"",{token:i,repo:a}=t;return{method:"PUT",url:`https://api.github.com/repos/${a}/contents/${encodeURI(n)}${encodeURI(e)}`,headers:{Authorization:`token ${i}`,"User-Agent":"PicGo","Content-Type":X.default.lookup(e)},body:r,json:!0}},It=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),i={message:"Upload by PicGo",branch:t.branch,content:r,path:t.path+encodeURI(n.fileName)},a=ct(n.fileName,t,i),s=await e.request(a);if(!s)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,t.customUrl?n.imgUrl=`${t.customUrl}/${t.path}${n.fileName}`:n.imgUrl=s.content.download_url,n.hash=s.content.sha}return e}catch(t){throw e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},_t=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"password",get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function dt(e,t,r,n){const i=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),a=e.path||"";return{method:"POST",url:`http://upload${i}.qiniup.com/putb64/-1/key/${Buffer.from(a+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":X.default.lookup(t)||"application/octet-stream"},body:n}}function pt(e){const t=e.accessKey,r=e.secretKey,n=new Z.default.auth.digest.Mac(t,r),i={scope:e.bucket};return new Z.default.rs.PutPolicy(i).uploadToken(n)}const gt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),i=dt(t,n.fileName,pt(t),r),a=await e.request(i),s=JSON.parse(a);if(!(null==s?void 0:s.key))throw e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options;n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},St=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const ft=(e,t,r)=>{const n={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:`Client-ID ${e.clientId}`,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicGo"},formData:{image:r,type:"base64",name:t}};return e.proxy&&(n.proxy=e.proxy),n},At=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),i=ft(r,n.fileName,t),a=await e.request(i),s="string"==typeof a?JSON.parse(a):a;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},Pt=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},default:t.clientId||"",required:!0},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const ht=(e,t)=>{const r=(new Date).toUTCString(),n=X.default.lookup(t);if(!n)throw Error(`No mime type found for file ${t}`);const i=`PUT\n\n${n}\n${r}\n/${e.bucket}/${e.path}${t}`,a=Q.default.createHmac("sha1",e.accessKeySecret).update(i).digest("base64");return`OSS ${e.accessKeyId}:${a}`},mt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURI(e.path)}${encodeURI(t)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:(new Date).toUTCString(),"Content-Type":X.default.lookup(t)},body:n,resolveWithFullResponse:!0}),Ct=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=t.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/";try{const r=e.output,n=t.customUrl,i=t.path;for(const a of r)if(a.fileName&&a.buffer){const r=ht(t,a.fileName);let s=a.buffer;!s&&a.base64Image&&(s=Buffer.from(a.base64Image,"base64"));const o=mt(t,a.fileName,r,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete a.base64Image,delete a.buffer;const e=t.options||"";a.imgUrl=n?`${n}/${i}${a.fileName}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${i}${a.fileName}${e}`}}return e}catch(t){throw e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Dt=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"password",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const Lt=(e,t)=>{const r=e.path||"",n=e.operator,i=e.password,a=J.default(i),s=(new Date).toUTCString(),o=`PUT&${`/${e.bucket}/${encodeURI(r)}${encodeURI(t)}`}&${s}`;return`UPYUN ${n}:${Q.default.createHmac("sha1",a).update(o).digest("base64")}`},Tt=(e,t,r,n)=>{const i=e.bucket,a=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${i}/${encodeURI(a)}${encodeURI(t)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":X.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}},Nt=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=t.path||"";for(const i of r)if(i.fileName&&i.buffer){let r=i.buffer;!r&&i.base64Image&&(r=Buffer.from(i.base64Image,"base64"));const a=Lt(t,i.fileName),s=Tt(t,i.fileName,a,r);if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");delete i.base64Image,delete i.buffer,i.imgUrl=`${t.url}/${n}${i.fileName}${t.options}`}return e}catch(t){if("Upload failed"===t.message)e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=function(e){try{return JSON.parse(e)}catch(t){return e}}(t.error);e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},Ut=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"password",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1}]};const Rt=(e,t,r)=>({method:"PUT",url:`${e.host}/${encodeURI(e.path)}${encodeURI(t)}`,headers:{Authorization:`Basic ${Buffer.from(`${e.username}:${e.password}`).toString("base64")}`,"Content-Type":X.default.lookup(t),"Content-Length":r.length},body:r,resolveWithFullResponse:!0}),Bt=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");t.host=t.host.replace("https://","").replace("http://","").replace(/\/+$/,""),t.sslEnabled?t.host="https://"+t.host:t.host="http://"+t.host,t.path=t.path.replace(/^\/*/,"").replace(/\/*$/,"")+"/";try{const r=e.output,n=t.customUrl,i=t.path;for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const s=Rt(t,a.fileName,r),o=await e.request(s);if(!(o.statusCode>=200&&o.statusCode<300))throw new Error("Upload failed");delete a.base64Image,delete a.buffer,a.imgUrl=n?`${n}/${i}${a.fileName}`:`${t.host}/${i}${a.fileName}`}return e}catch(t){throw e.emit(et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ot=e=>{const t=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:t.host||"",required:!0},{name:"sslEnabled",type:"confirm",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!0,default:t.sslEnabled||!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:t.username||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"password",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:t.password||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:t.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"customUrl",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:t.customUrl||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}}]};const Mt=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:Ct,config:Dt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:Et,config:ut})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:at,config:st})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:It,config:_t})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:gt,config:St})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:At,config:Pt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Nt,config:Ut})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:Bt,config:Ot})}(e)}}),yt=(e,t,r)=>{const n=ce(t);return n.real||(e.log.warn(`can't get ${r}'s image size`),e.log.warn("fallback to 200 * 200")),n};var wt={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let i;if(i=Ee(r)?await Ie(r,e):await(async e=>{try{return{extname:G.default.extname(e),fileName:G.default.basename(e),buffer:await b.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}})(r),!i.success||!i.buffer)throw new Error(i.reason);{const a=yt(e,i.buffer,r);t[n]={buffer:i.buffer,fileName:i.fileName,width:a.width,height:a.height,extname:i.extname}}}))),e.output=t.filter((e=>e)),e}};var bt={handle:async e=>(e.output.push(...e.input),e)};class Gt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=G.default.join(this.ctx.baseDir,"package.json");if(!b.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};b.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return ee.default.sync(t,{basedir:e.baseDir})}catch(r){return G.default.join(e.baseDir,"node_modules",t)}}load(){const e=G.default.join(this.ctx.baseDir,"package.json"),t=G.default.join(this.ctx.baseDir,"node_modules/");if(!b.default.existsSync(t))return!1;const r=b.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),i=Object.keys(r.devDependencies||{}),a=n.concat(i).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return b.default.existsSync(t)}));for(const e of a)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),Xe(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),Xe(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(et.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),Xe(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=G.default.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const xt={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},vt={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const $t=async e=>{!function(e){const t=G.default.join(e.baseDir,"piclist-clipboard-images");b.default.existsSync(t)||b.default.mkdirSync(t)}(e);const t=G.default.join(e.baseDir,"piclist-clipboard-images",`${j.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const i=(()=>{const e=process.platform;if(te.default)return"wsl";if("win32"===e)return"10"===x.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),a=G.default.join(e.baseDir,vt[i]);let s;b.default.existsSync(a)||b.default.writeFileSync(a,xt[i],"utf8"),s="darwin"===i?L.spawn("osascript",[a,t]):"win32"===i||"win10"===i?L.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",a,t]):L.spawn("sh",[a,t]),s.stdout.on("data",(a=>{if("linux"===i&&"no xclip or wl-clipboard"===a.toString().trim())return e.emit(et.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),n(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const s=a.toString().trim();let o=!1;if(G.default.basename(s)!==G.default.basename(t)&&b.default.existsSync(s)&&(o=!0),"no image"!==s&&!b.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},Wt=new r.EventEmitter,Ht=new ne.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2"});function Kt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Ft(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function kt(e){var t,r,n,i,a,s,o;const l={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(l)}class qt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Wt.on(tt.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new o.URL(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=ie.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=Ht;const r=z.default.create(this.options);r.interceptors.response.use(Ft,kt);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let i=e.proxy;if("string"==typeof i){try{i=new o.URL(e.proxy)}catch(e){i=!1,n.proxy=!1,console.error(e)}r=!0}i&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=ie.default.httpsOverHttp({proxy:{host:null==i?void 0:i.hostname,port:parseInt(null==i?void 0:i.port,10)}})):n.proxy={host:i.hostname,port:parseInt(i.port,10),protocol:"http"})}if("formData"in e){const t=new re.default;for(const r in e.formData)Kt(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let i="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(i=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(i=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(i=e.headers["content-type"],delete e.headers["content-type"]),""!==i&&e.headers&&(e.headers["Content-Type"]=i),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class Yt{constructor(e){if(this.ctx=e,this.db=new B.JSONStore(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms"})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){return this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}class jt{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],i=e.map((e=>Vt(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicGo has already installed ${e.pkgName}`),!1):!!e.success)),a=i.map((e=>e.fullName)),s=i.map((e=>e.pkgName));if(a.length>0){const e=await this.execCommand("install",a,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>Vt(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>Vt(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},i={}){const a=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,l;let E=[e].concat(t).concat("--color=always").concat("--save");a&&(E=E.concat(`--registry=${a}`)),s&&(E=E.concat(`--proxy=${s}`));try{const e=ae.default("npm",E,{cwd:r,env:Object.assign({},process.env,i)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(l=e.stderr)||void 0===l||l.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(et.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(et.FAILED,e)}}))}}const Vt=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=((e,t=console)=>{switch(_e(e)){case"normal":case"scope":return e;case"simple":return pe(e);default:{let r=e;return G.default.isAbsolute(e)&&b.default.existsSync(e)?ge(r):(r=G.default.join(process.cwd(),e),b.default.existsSync(r)?ge(r):(t.warn(`Can't find plugin ${e}`),""))}}})(t,e.log);if(!n)return r;const i=((e,t=console)=>{var r;switch(_e(e)){case"normal":return Se(e);case"scope":return Se(e,!0);case"simple":return Se(pe(e));default:{if(!b.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=G.default.posix.join(e,"package.json");if(b.default.existsSync(n)){const e=b.default.readJSONSync(n)||{};return(null===(r=e.name)||void 0===r?void 0:r.includes("picgo-plugin-"))?e.name:(t.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return t.warn(`Can't find plugin: ${e}`),""}}})(n,e.log);return i?{success:!0,fullName:n,pkgName:i}:r},zt={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定KeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定KeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set KeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class Qt{constructor(e){this.ctx=e,this.objectAdapter=new y.ObjectAdapter(zt);let t=this.ctx.getConfig("settings.language")||"zh-CN";zt[t]||(t="zh-CN"),this.i18n=new y.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();b.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=G.default.join(e,t.name),n=b.default.readFileSync(r,"utf8");try{const e=se.default.load(n);zt[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=G.default.join(this.ctx.baseDir,"i18n-cli");return b.default.pathExistsSync(e)||b.default.ensureDirSync(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const n=D.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),zt[e]=t,!0)}getLanguageList(){return Object.keys(zt)}}class Xt extends r.EventEmitter{constructor(e=""){super(),this.VERSION="0.3.1",this.configPath=e,this.output=[],this.input=[],this.helper={transformer:new Qe("transformer"),uploader:new Qe("uploader"),beforeTransformPlugins:new Qe("beforeTransformPlugins"),beforeUploadPlugins:new Qe("beforeUploadPlugins"),afterUploadPlugins:new Qe("afterUploadPlugins")},this.initConfigPath(),this.log=new rt(this),this.cmd=new Ze(this),this.pluginHandler=new jt(this),this.initConfig(),this.init()}get pluginLoader(){return this._pluginLoader}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==G.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=G.default.dirname(this.configPath);b.default.pathExistsSync(this.configPath)||b.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new Yt(this),this._config=this.db.read(!0)}init(){try{this.i18n=new Qt(this),this.Request=new qt(this),this._pluginLoader=new Gt(this),Xe("picgo"),Mt().register(this),{register(e){e.helper.transformer.register("path",wt),e.helper.transformer.register("base64",bt)}}.register(this),Xe(""),this._pluginLoader.load(),this.lifecycle=new nt(this)}catch(e){throw this.emit(et.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?D.get(this._config,e):this._config}saveConfig(e){Pe(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(Ae(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Pe(e)?Object.keys(e).forEach((t=>{Ae(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),D.set(this._config,t,e[t]),Wt.emit(tt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Ae(e)?this.log.warn(`the config.${e} can't be unset`):D.unset(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("The configuration file only supports JSON format."),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await $t(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(et.FAILED,(()=>{t||b.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||b.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(et.FAILED,e),e}}}exports.Commander=Ze,exports.Lifecycle=nt,exports.LifecyclePlugins=Qe,exports.Logger=rt,exports.PicGo=Xt,exports.PluginHandler=jt,exports.PluginLoader=Gt,exports.Request=qt;
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3NldHRpbmcudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXNlLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3Byb3h5LnRzIiwiLi4vc3JjL3V0aWxzL2luaXRVdGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbml0LnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2kxOG4udHMiLCIuLi9zcmMvbGliL0xpZmVjeWNsZVBsdWdpbnMudHMiLCIuLi9zcmMvbGliL0NvbW1hbmRlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbmRleC50cyIsIi4uL3NyYy91dGlscy9lbnVtLnRzIiwiLi4vc3JjL2xpYi9Mb2dnZXIudHMiLCIuLi9zcmMvY29yZS9MaWZlY3ljbGUudHMiLCIuLi9zcmMvdXRpbHMvY3JlYXRlQ29udGV4dC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NtbXMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2dpdGh1Yi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3Fpbml1LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGl5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91cHl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3dlYmRhdi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvcGF0aC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2Jhc2U2NC50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9pMThuL2luZGV4LnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHBsdWdpbkhhbmRsZXI6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIC8vIGNvbnN0IHBsdWdpbkhhbmRsZXIgPSBuZXcgUGx1Z2luSGFuZGxlcihjdHgpXHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5zdGFsbCA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2luc3RhbGwgcGljZ28gcGx1Z2luJylcclxuICAgICAgLmFsaWFzKCdhZGQnKVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmFsaWFzKCdybScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudW5pbnN0YWxsKHBsdWdpbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGRhdGUgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGRhdGUgcGljZ28gcGx1Z2luJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHByb3h5LFxyXG4gICAgICAgICAgcmVnaXN0cnlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQge1xyXG4gIElJbWdTaXplLFxyXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxyXG4gIElQbHVnaW5OYW1lVHlwZSxcclxuICBJTG9nZ2VyLFxyXG4gIElQaWNHbyxcclxuICBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcclxuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgVGV4dFRvU1ZHIGZyb20gJ3RleHQtdG8tc3ZnJ1xyXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+ICgvXmh0dHBzPzpcXC9cXC8vKS50ZXN0KHVybClcclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHVybCA9IHVybCB8fCAnJ1xyXG4gIHRyeSB7XHJcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XHJcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGlmIHNvbWUgZXJyb3IgY2F1Z2h0LCB0cnkgdG8gbGV0IGl0IGdvXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcclxuICAgIHVybCA9IGVuY29kZVVSSSh1cmwpXHJcbiAgfVxyXG4gIHJldHVybiB1cmxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwIH0gPSBpbWFnZVNpemUoZmlsZSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IHRydWUsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHRcclxuICAgIH1cclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICAvLyBmYWxsYmFjayB0byAyMDAgKiAyMDBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogMjAwLFxyXG4gICAgICBoZWlnaHQ6IDIwMFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZTRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHRuYW1lOiBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGJ1ZmZlcjogYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpLFxyXG4gICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxyXG4gICAgICBzdWNjZXNzOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXHJcbiAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXRcclxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdCh7XHJcbiAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBidWZmZXI6IHJlcyxcclxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSBlcnJvciwgJHtlcnJvcj8ubWVzc2FnZSA/PyAnJ31gXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSkoKS5jYXRjaChyZWplY3QpXHJcbiAgfSlcclxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xyXG4gICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IHRpbWVvdXRgXHJcbiAgICAgIH0pXHJcbiAgICB9LCAzMDAwMClcclxuICB9KVxyXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxyXG4gKiAzLiB4eHggLT4gc2ltcGxlXHJcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cclxuICogQHBhcmFtIG5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2NvcGUnXHJcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgcmV0dXJuICdub3JtYWwnXHJcbiAgfSBlbHNlIGlmIChpc1NpbXBsZU5hbWUobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2ltcGxlJ1xyXG4gIH1cclxuICByZXR1cm4gJ3Vua25vd24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4geHh4IC0+IHRydWVcclxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKG5hbWVPclBhdGguaW5jbHVkZXMoJy8nKSB8fCBuYW1lT3JQYXRoLmluY2x1ZGVzKCdcXFxcJykpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG4vKipcclxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4geHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL15AW14vXStcXC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXHJcbiAqIEBwYXJhbSBzY29wZSBwbHVnaW5TY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChzY29wZSkge1xyXG4gICAgcmV0dXJuIGBAJHtzY29wZX0vcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3h4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxyXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcclxuICAgIGNhc2UgJ25vcm1hbCc6XHJcbiAgICBjYXNlICdzY29wZSc6XHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICBjYXNlICdzaW1wbGUnOlxyXG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXHJcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcclxuICAgICAgbGV0IHBsdWdpblBhdGggPSBuYW1lT3JQYXRoXHJcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXHJcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIDMuIGludmFsaWQgbmFtZU9yUGF0aFxyXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAzLiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxyXG4gKiB0aGVuIHVzZSBbcGFja2FnZS5qc29uJ3MgbmFtZV0sIHVzdWFsbHkgbWF0Y2ggdGhlIHNjb3BlIHBhY2thZ2UuXHJcbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKSlcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcclxuICAgICAgLy8gdGhlIG5hbWVPclBhdGggaGVyZSB3aWxsIGJlIGVuc3VyZWQgd2l0aCB1bml4IHN0eWxlXHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhY2thZ2VKU09OUGF0aCA9IHBhdGgucG9zaXguam9pbihuYW1lT3JQYXRoLCAncGFja2FnZS5qc29uJylcclxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XHJcbiAgICAgICAgaWYgKCFwa2cubmFtZT8uaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgbG9nZ2VyLndhcm4oYFRoZSBwbHVnaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZCBpcyAke3BrZy5uYW1lIGFzIHN0cmluZyB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gKVxyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwa2cubmFtZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIHRyYW5zZm9ybSB0aGUgcGF0aCB0byB1bml4IHN0eWxlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxyXG4gKiAyLiAveHh4L3h4eCAtPiAveHh4L3h4eFxyXG4gKiBAcGFyYW0gcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVuaXhTdHlsZVBhdGggPSAocGF0aFN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcclxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcclxufVxyXG5cclxuLyoqXHJcbiAqIHJlbW92ZSBwbHVnaW4gdmVyc2lvbiB3aGVuIHJlZ2lzdGVyIHBsdWdpbiBuYW1lXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqIEBwYXJhbSBzY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZVBsdWdpblZlcnNpb24gPSAobmFtZU9yUGF0aDogc3RyaW5nLCBzY29wZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xyXG4gICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hBcnIgPSBuYW1lT3JQYXRoLm1hdGNoKHJlZylcclxuICAgIGlmICghbWF0Y2hBcnIpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcclxuICogb25seSBjYW4gYmUgZ290XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cclxuXHJcbi8qKlxyXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XHJcbiAqIEBwYXJhbSBrZXlcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGNvbmZpZ0JsYWNrTGlzdC5zb21lKGJsYWNrSXRlbSA9PiBrZXkuc3RhcnRzV2l0aChibGFja0l0ZW0pKVxyXG59XHJcblxyXG4vKipcclxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxyXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxyXG4gKiAmJiBjYW4ndCBiZSBhcnJheVxyXG4gKiBAcGFyYW0gY29uZmlnXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKFxyXG4gICAgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiZcclxuICAgICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiZcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4gKHN0cjogc3RyaW5nKTogVCB8IHN0cmluZyB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcmV0dXJuIHN0clxyXG4gIH1cclxufVxyXG5cclxuLy8gaG9sZC4uLlxyXG4vLyBleHBvcnQgY29uc3QgY29uZmlnV2hpdGVMaXN0OiBSZWdFeHBbXSA9IFtcclxuLy8gICAvXnBpY0JlZC8sXHJcbi8vICAgL15waWNnb1BsdWdpbnMvLFxyXG4vLyAgIC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sXHJcbi8vICAgL2RlYnVnLyxcclxuLy8gICAvc2lsZW50LyxcclxuLy8gICAvY29uZmlnUGF0aC8sXHJcbi8vICAgL15zZXR0aW5ncy8sXHJcbi8vIF1cclxuXHJcbi8vIGV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluV2hpdGVMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbi8vICAgcmV0dXJuIGNvbmZpZ1doaXRlTGlzdC5zb21lKHdoaXRlSXRlbSA9PiB3aGl0ZUl0ZW0udGVzdChrZXkpKVxyXG4vLyB9XHJcblxyXG5leHBvcnQgY29uc3QgZm9yY2VOdW1iZXIgPSAobnVtOiBzdHJpbmcgfCBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzUHJvZCA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB0ZXh0MlNWRyAoXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICBjb2xvcj86IHN0cmluZyxcclxuICBmb250RmFtaWx5Pzogc3RyaW5nXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XHJcbiAgZm9udEZhbWlseSA9ICFmb250RmFtaWx5ID8gZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIDogZm9udEZhbWlseVxyXG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxyXG4gIGNvbnN0IG9wdGlvbnM6IFRleHRUb1NWRy5HZW5lcmF0aW9uT3B0aW9ucyA9IHtcclxuICAgIGFuY2hvcjogJ3RvcCcsXHJcbiAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgIGZpbGw6IGNvbG9yXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IHRleHRTVkcgPSB0ZXh0MlNWRy5nZXRTVkcodGV4dCwgb3B0aW9ucylcclxuICBjb25zdCBzdmcgPSBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxyXG4gIHJldHVybiBzdmdcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IGAke19fZGlybmFtZX0vYXNzZXRzL3BpY2xpc3QucG5nYFxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEFkZFdhdGVybWFyayAoXHJcbiAgaW1nOiBCdWZmZXIsXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICBpc0Z1bGxTY3JlZW5XYXRlcm1hcms/OiBib29sZWFuLFxyXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8gPSAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXHJcbiAgY29uc3QgaW1hZ2UgPSBzaGFycChpbWcpXHJcbiAgY29uc3QgeyB3aWR0aDogaW1nV2lkdGggPSAyMDAgfSA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKClcclxuICBjb25zdCB3YXRlcm1hcmsgPSBhd2FpdCBjcmVhdGVXYXRlcm1hcmsoXHJcbiAgICB3YXRlcm1hcmtUeXBlLFxyXG4gICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgdGV4dCxcclxuICAgIHdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgd2F0ZXJtYXJrU2NhbGVSYXRpbyxcclxuICAgIHdhdGVybWFya0NvbG9yLFxyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoLFxyXG4gICAgaW1nV2lkdGgsXHJcbiAgICB3YXRlcm1hcmtEZWdyZWVcclxuICApXHJcbiAgY29uc3QgY29tcG9zaXRlZCA9IGF3YWl0IGltYWdlXHJcbiAgICAuY29tcG9zaXRlKFtcclxuICAgICAge1xyXG4gICAgICAgIGlucHV0OiB3YXRlcm1hcmssXHJcbiAgICAgICAgZ3Jhdml0eTogcG9zaXRpb24gfHwgJ3NvdXRoZWFzdCcsXHJcbiAgICAgICAgdGlsZTogaXNGdWxsU2NyZWVuV2F0ZXJtYXJrXHJcbiAgICAgIH1cclxuICAgIF0pXHJcbiAgICAudG9CdWZmZXIoKVxyXG4gIHJldHVybiBjb21wb3NpdGVkXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdhdGVybWFyayAoXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIGltZ1dpZHRoOiBudW1iZXIgPSAyMDAsXHJcbiAgd2F0ZXJtYXJrRGVncmVlOiBudW1iZXIgPSAwXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgbGV0IHdhdGVybWFyazogYW55XHJcbiAgaWYgKHdhdGVybWFya1R5cGUgPT09ICdpbWFnZScpIHtcclxuICAgIHdhdGVybWFya0ltYWdlUGF0aCA9IHdhdGVybWFya0ltYWdlUGF0aCB8fCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoXHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCBzaGFycCh3YXRlcm1hcmtJbWFnZVBhdGgpLnRvQnVmZmVyKClcclxuICB9IGVsc2Uge1xyXG4gICAgd2F0ZXJtYXJrID0gYXdhaXQgdGV4dDJTVkcoXHJcbiAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgdGV4dCxcclxuICAgICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgIHdhdGVybWFya0ZvbnRQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aFxyXG4gICAgKVxyXG4gIH1cclxuICBjb25zdCB7IHdpZHRoOiB3YXRlcm1hcmtXaWR0aCwgaGVpZ2h0OiB3YXRlcm1hcmtIZWlnaHQgfSA9IGF3YWl0IGdldFNpemUoXHJcbiAgICB3YXRlcm1hcmtcclxuICApXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplV2lkdGggPSBNYXRoLmZsb29yKGltZ1dpZHRoICogZm9yY2VOdW1iZXIod2F0ZXJtYXJrU2NhbGVSYXRpbykpXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0ID0gTWF0aC5mbG9vcihcclxuICAgICh3YXRlcm1hcmtSZXNpemVXaWR0aCAqIHdhdGVybWFya0hlaWdodCkgLyB3YXRlcm1hcmtXaWR0aFxyXG4gIClcclxuICByZXR1cm4gYXdhaXQgc2hhcnAod2F0ZXJtYXJrKVxyXG4gICAgLnJlc2l6ZSh3YXRlcm1hcmtSZXNpemVXaWR0aCwgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0LCB7XHJcbiAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgIH0pXHJcbiAgICAucm90YXRlKHdhdGVybWFya0RlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIC50b0J1ZmZlcigpXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFNpemUgKGltYWdlOiBCdWZmZXIpOiBQcm9taXNlPHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfT4ge1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgc2hhcnAoaW1hZ2UpLm1ldGFkYXRhKClcclxuICByZXR1cm4geyB3aWR0aDogd2lkdGggfHwgMjAwLCBoZWlnaHQ6IGhlaWdodCB8fCAyMDAgfVxyXG59XHJcblxyXG5jb25zdCB2YWxpZFBhcmFtID0gKC4uLnBhcmFtczogYW55W10pOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcGFyYW1zLmV2ZXJ5KHBhcmFtID0+IHtcclxuICAgIGlmIChwYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtICE9PSAnJ1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtID4gMFxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0ID0gW1xyXG4gICdhdmlmJyxcclxuICAnZHonLFxyXG4gICdmaXRzJyxcclxuICAnZ2lmJyxcclxuICAnaGVpZicsXHJcbiAgJ2lucHV0JyxcclxuICAnanBlZycsXHJcbiAgJ2pwZycsXHJcbiAgJ2pwMicsXHJcbiAgJ2p4bCcsXHJcbiAgJ21hZ2ljaycsXHJcbiAgJ29wZW5zbGlkZScsXHJcbiAgJ3BkZicsXHJcbiAgJ3BuZycsXHJcbiAgJ3BwbScsXHJcbiAgJ3JhdycsXHJcbiAgJ3N2ZycsXHJcbiAgJ3RpZmYnLFxyXG4gICd0aWYnLFxyXG4gICd2JyxcclxuICAnd2VicCdcclxuXVxyXG5cclxuY29uc3QgdmFsaWRPdXRwdXRGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QuaW5jbHVkZXMoZm9ybWF0KVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUV4dExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsgKGltZzogQnVmZmVyLCBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0cnkge1xyXG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZylcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMud2F0ZXJtYXJrVGV4dCkpIHtcclxuICAgICAgaW1hZ2UgPSBzaGFycChhd2FpdCBBZGRXYXRlcm1hcmsoXHJcbiAgICAgICAgaW1nLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXHJcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxyXG4gICAgICApKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25zIChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcclxuICByZXR1cm4ge1xyXG4gICAgcXVhbGl0eTogZm9yY2VOdW1iZXIob3B0aW9ucy5xdWFsaXR5KSxcclxuICAgIGlzQ29udmVydDogb3B0aW9ucy5pc0NvbnZlcnQgfHwgZmFsc2UsXHJcbiAgICBjb252ZXJ0Rm9ybWF0OiBvcHRpb25zLmNvbnZlcnRGb3JtYXQgfHwgJ2pwZycsXHJcbiAgICBpc1JlU2l6ZTogb3B0aW9ucy5pc1JlU2l6ZSB8fCBmYWxzZSxcclxuICAgIHJlU2l6ZUhlaWdodDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVIZWlnaHQpLFxyXG4gICAgcmVTaXplV2lkdGg6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplV2lkdGgpLFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQ6IG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2UsXHJcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxyXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlUHJvY2VzcyAoaW1nOiBCdWZmZXIsIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLCByYXdGb3JtYXQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucylcclxuICB0cnkge1xyXG4gICAgcmF3Rm9ybWF0ID0gcmF3Rm9ybWF0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gICAgaWYgKCFpbWFnZUV4dExpc3QuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xyXG4gICAgICByZXR1cm4gaW1nXHJcbiAgICB9XHJcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nKVxyXG4gICAgbGV0IHF1YWxpdHkgPSAxMDBcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucXVhbGl0eSkgJiYgb3B0aW9ucy5xdWFsaXR5ISA8IDEwMCkge1xyXG4gICAgICBxdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5IVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQpIHtcclxuICAgICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5yZVNpemVQZXJjZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZVdpZHRoICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhIC8gMTAwKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pc1JlU2l6ZSkge1xyXG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZUhlaWdodCwgb3B0aW9ucy5yZVNpemVXaWR0aCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgcXVhbGl0eVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChyYXdGb3JtYXQgYXMgYW55LCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUZvcm1hdExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgY29uc3QgbmVlZEFkZFdhdGVybWFyayA9ICh3YXRlcm1hcmtPcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIHJldHVybiAhIXdhdGVybWFya09wdGlvbnMgJiYgISF3YXRlcm1hcmtPcHRpb25zLmlzQWRkV2F0ZXJtYXJrICYmIGltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbmVlZENvbXByZXNzID0gKGNvbXByZXNzT3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgY29tcHJlc3NPcHRpb25zID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXHJcbiAgICBpZiAodmFsaWRQYXJhbShjb21wcmVzc09wdGlvbnMucXVhbGl0eSkgJiYgY29tcHJlc3NPcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzUmVTaXplQnlQZXJjZW50ICYmIHZhbGlkUGFyYW0oY29tcHJlc3NPcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzUmVTaXplICYmIHZhbGlkUGFyYW0oY29tcHJlc3NPcHRpb25zLnJlU2l6ZUhlaWdodCwgY29tcHJlc3NPcHRpb25zLnJlU2l6ZVdpZHRoKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzT3B0aW9ucy5pc1JvdGF0ZSAmJiBjb21wcmVzc09wdGlvbnMucm90YXRlRGVncmVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzQ29udmVydCkge1xyXG4gICAgICBjb25zdCBuZXdGb3JtYXQgPSBjb21wcmVzc09wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJ1xyXG4gICAgICByZXR1cm4gZmlsZUV4dCAhPT0gbmV3Rm9ybWF0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCByZW1vdmVFeGlmID0gYXN5bmMgKGltZzogQnVmZmVyLCBmaWxlRXh0OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpKSB7XHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG4gIHJldHVybiBhd2FpdCBzaGFycChpbWcpLnRvQnVmZmVyKClcclxufVxyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVwbG9hZDogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VwbG9hZCcpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndXBsb2FkLCBnbyBnbyBnbycpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tpbnB1dC4uLl0nKVxyXG4gICAgICAuYWxpYXMoJ3UnKVxyXG4gICAgICAuYWN0aW9uKChpbnB1dDogc3RyaW5nW10pID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gaW5wdXRcclxuICAgICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsKGl0ZW0pID8gaXRlbSA6IHBhdGgucmVzb2x2ZShpdGVtKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBleGlzdCA9IGZzLmV4aXN0c1N5bmMoaXRlbSkgfHwgaXNVcmwoaXRlbSlcclxuICAgICAgICAgICAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYCR7aXRlbX0gZG9lcyBub3QgZXhpc3QuYClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhd2FpdCBjdHgudXBsb2FkKGlucHV0TGlzdClcclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVwbG9hZFxyXG4iLCJcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPignYnVpbGRJbi5jb21wcmVzcycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdxdWFsaXR5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQ29udmVydCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQ29udmVydCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NvbnZlcnRGb3JtYXQnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnYXZpZicsICdkeicsICdmaXRzJywgJ2dpZicsICdoZWlmJywgJ2lucHV0JywgJ2pwZWcnLCAnanBnJywgJ2pwMicsICdqeGwnLCAnbWFnaWNrJywgJ29wZW5zbGlkZScsICdwZGYnLCAncG5nJywgJ3BwbScsICdyYXcnLCAnc3ZnJywgJ3RpZmYnLCAndGlmJywgJ3YnLCAnd2VicCddLFxyXG4gICAgICBkZWZhdWx0OiAnanBnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZSB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVdpZHRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplSGVpZ2h0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZUhlaWdodCB8fCA1MDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZUJ5UGVyY2VudCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVQZXJjZW50JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVQZXJjZW50IHx8IDUwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSb3RhdGUnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUm90YXRlIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncm90YXRlRGVncmVlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVtb3ZlRXhpZicsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVtb3ZlRXhpZiB8fCBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0FkZFdhdGVybWFyaycsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQWRkV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVHlwZScsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsndGV4dCcsICdpbWFnZSddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRnVsbFNjcmVlbldhdGVybWFyayB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0RlZ3JlZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ZvbnRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1NjYWxlUmF0aW8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0NvbG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtDb2xvciB8fCAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtJbWFnZVBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ltYWdlUGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1Bvc2l0aW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnbm9ydGgnLCAnbm9ydGhlYXN0JywgJ3NvdXRoZWFzdCcsICdzb3V0aCcsICdzb3V0aHdlc3QnLCAnbm9ydGh3ZXN0JywgJ3dlc3QnLCAnZWFzdCcsICdjZW50ZXInLCAnY2VudHJlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjb21wcmVzcyBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci9jb21wcmVzcydcclxuaW1wb3J0IHdhdGVybWFyayBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci93YXRlcm1hcmsnXHJcblxyXG4vLyBoYW5kbGUgbW9kdWxlcyBjb25maWcgLT4gc2F2ZSB0byBwaWNnbyBjb25maWcgZmlsZVxyXG5jb25zdCBoYW5kbGVDb25maWcgPSBhc3luYyAoY3R4OiBJUGljR28sIHByb21wdHM6IElQbHVnaW5Db25maWdbXSwgbW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KHByb21wdHMpXHJcbiAgY29uc3QgY29uZmlnTmFtZSA9IG1vZHVsZSA9PT0gJ3VwbG9hZGVyJ1xyXG4gICAgPyBgcGljQmVkLiR7bmFtZX1gIDogbW9kdWxlID09PSAndHJhbnNmb3JtZXInXHJcbiAgICAgID8gYHRyYW5zZm9ybWVyLiR7bmFtZX1gIDogbW9kdWxlID09PSAnYnVpbGRpbidcclxuICAgICAgICA/IGBidWlsZEluLiR7bmFtZX1gIDogbmFtZVxyXG4gIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgIFtjb25maWdOYW1lXTogYW5zd2VyXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3Qgc2V0dGluZyA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3NldCcpXHJcbiAgICAgIC5hbGlhcygnY29uZmlnJylcclxuICAgICAgLmFyZ3VtZW50cygnPG1vZHVsZT4gW25hbWVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjb25maWd1cmUgY29uZmlnIG9mIHBpY2dvIG1vZHVsZXMsIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgICAgICAgLy8gYXdhaXQgY3R4LnBsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgICAgICAgLy8gaWYgYSBtb2R1bGUgaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnYnVpbGRpbic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbXByZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2F0ZXJtYXJrJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydjb21wcmVzcycsICd3YXRlcm1hcmsnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBidWlsZGluIG1vZHVsZSdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdjb21wcmVzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3dhdGVybWFyaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAndXBsb2FkZXInOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ3RyYW5zZm9ybWVyJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHgubG9nLmVycm9yKGBObyAke21vZHVsZX0gbmFtZWQgJHtuYW1lfWApXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke21vZHVsZX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlclttb2R1bGVdLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYENob29zZSBhKG4pICR7bW9kdWxlfWBcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAncGx1Z2luJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghbmFtZS5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmxvZy5lcnJvcihgTm8gcGx1Z2luIG5hbWVkICR7bmFtZX1gKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHBsdWdpbidcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbik/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBhbnN3ZXIucGx1Z2luKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB1c2VNb2R1bGVOYW1lID0gbW9kdWxlID09PSAncGx1Z2luJyA/ICdwbHVnaW5zJyA6IG1vZHVsZVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUgIT09ICdidWlsZGluJykge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhgSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgY29uZmlnLCBwbGVhc2UgcnVuICdwaWNnbyB1c2UgJHt1c2VNb2R1bGVOYW1lfSdgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNldHRpbmdcclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSwgSUNMSUNvbmZpZ3MsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVzZTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VzZScpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1c2UgbW9kdWxlcyBvZiBwaWNnbycpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICBsZXQgcHJvbXB0czogYW55W10gPSBbXVxyXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xyXG4gICAgICAgICAgICAgIHVwbG9hZGVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhbiB1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnVwbG9hZGVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHBsdWdpbnM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIHBsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBjdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtpdGVtfWApKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcclxuICAgICAgICAgICAgICAgIHByb21wdHMucHVzaChjb25maWdbbW9kdWxlXSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW5zJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcHJvbXB0cyA9IE9iamVjdC5rZXlzKGNvbmZpZykubWFwKChpdGVtOiBzdHJpbmcpID0+IGNvbmZpZ1tpdGVtXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBmb3IgcGx1Z2lucyBvcHRpb24gZnJvbSBBcnJheSB0byBvYmplY3RcclxuICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IGN0eC5nZXRDb25maWc8SVN0cmluZ0tleU1hcDxib29sZWFuPj4oJ3BpY2dvUGx1Z2lucycpXHJcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMocGx1Z2lucykubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgcGx1Z2luc1xyXG4gICAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAgIHBpY2dvUGx1Z2luczogcGx1Z2luc1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHVwbG9hZGVyICYgdHJhbnNmb3JtZXJcclxuICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICdwaWNCZWQuY3VycmVudCc6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IGFuc3dlci50cmFuc2Zvcm1lciB8fCAncGF0aCdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgY29uZmlnIHN1Y2Nlc3NmdWxseSEnKVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1c2VcclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwcm94eTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgJ3BpY0JlZC5wcm94eSc6IHByb3h5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByb3h5XHJcbiIsImltcG9ydCBtYXRjaCBmcm9tICdtaW5pbWF0Y2gnXHJcbmltcG9ydCB7IElQaWNHbywgSU9wdGlvbnMsIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xyXG5pbXBvcnQgZWpzIGZyb20gJ2VqcydcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0ZW1wbGF0ZSBmaWxlcyB0byBkZXN0aW5hdGlvbiBmaWxlcy5cclxuICogQHBhcmFtIHtQaWNHb30gY3R4XHJcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRpb25zKG9wdGlvbnMudG1wKVxyXG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKG9wdGlvbnMudG1wLCAndGVtcGxhdGUnKVxyXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxyXG4gICAgaWYgKG9wdHMucHJvbXB0cyAmJiBvcHRzLnByb21wdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhbnN3ZXJzID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQob3B0cy5wcm9tcHRzKVxyXG4gICAgfVxyXG4gICAgbGV0IF9maWxlczogc3RyaW5nW10gPSBhd2FpdCBnbG9iYnkoWycqKi8qJ10sIHsgY3dkOiBzb3VyY2UsIGRvdDogdHJ1ZSB9KSAvLyBnZXQgZmlsZXMnIG5hbWUgYXJyYXlcclxuICAgIF9maWxlcyA9IF9maWxlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICBsZXQgZ2xvYiA9ICcnXHJcbiAgICAgIE9iamVjdC5rZXlzKG9wdHMuZmlsdGVycykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAobWF0Y2goaXRlbSwga2V5LCB7IGRvdDogdHJ1ZSB9KSkge1xyXG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChnbG9iKSB7IC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzKGN0eCwgb3B0cy5maWx0ZXJzW2dsb2JdLCBhbnN3ZXJzKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gY3R4LmxvZy53YXJuKCdUZW1wbGF0ZSBmaWxlcyBub3QgZm91bmQhJylcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVzID0gcmVuZGVyKF9maWxlcywgc291cmNlLCBhbnN3ZXJzKVxyXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxyXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIG9wdHMuY29tcGxldGUoeyBhbnN3ZXJzLCBvcHRpb25zLCBmaWxlczogX2ZpbGVzLCBjdHggfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xyXG4gICAgICBjdHgubG9nLnN1Y2Nlc3Mob3B0cy5jb21wbGV0ZU1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcclxuICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgIHJldHVybiBjdHgubG9nLmVycm9yKGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcclxuICogQHBhcmFtIGN0eCBQaWNHb1xyXG4gKiBAcGFyYW0gZXhwIGNvbmRpdGlvbiBleHByZXNzaW9uXHJcbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxyXG4gKi9cclxuY29uc3QgZmlsdGVycyA9IChjdHg6IElQaWNHbywgZXhwOiBhbnksIGRhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcclxuICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbignZGF0YScsICd3aXRoIChkYXRhKSB7IHJldHVybiAnICsgZXhwICsgJ30nKVxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gZm4oZGF0YSlcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGBFcnJvciB3aGVuIGV2YWx1YXRpbmcgZmlsdGVyIGNvbmRpdGlvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgb3B0aW9uc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXHJcbiAqL1xyXG5jb25zdCBnZXRPcHRpb25zID0gKHRlbXBsYXRlUGF0aDogc3RyaW5nKTogYW55ID0+IHtcclxuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9uc1BhdGgpKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXHJcbiAgICByZXR1cm4gb3B0aW9uc1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4ge31cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXIgZmlsZXMgdG8gYSB2aXJ0dWFsIHRyZWUgb2JqZWN0XHJcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCByZW5kZXIgPSAoZmlsZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55ID0+IHtcclxuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cclxuICBmaWxlcy5mb3JFYWNoKChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihzb3VyY2UsIGZpbGVQYXRoKSwgJ3V0ZjgnKVxyXG4gICAgY29uc3QgY29udGVudCA9IGVqcy5yZW5kZXIoZmlsZSwgb3B0aW9ucylcclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xyXG4gICAgICBmaWxlVHJlZVtmaWxlUGF0aF0gPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfSlcclxuICByZXR1cm4gZmlsZVRyZWVcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyaXRlIHJlbmRlcmVkIGZpbGVzJyBjb250ZW50IHRvIHJlYWwgZmlsZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWxlc1xyXG4gKi9cclxuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xyXG4gIE9iamVjdC5rZXlzKGZpbGVzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSlcclxuICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcclxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGZpbGVzW25hbWVdKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgZmlsdGVycyxcclxuICBnZW5lcmF0ZSxcclxuICByZW5kZXIsXHJcbiAgd3JpdGVGaWxlVHJlZVxyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luaXRVdGlscydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXHJcbmltcG9ydCB7IElPcHRpb25zLCBJUGx1Z2luLCBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHJtIGZyb20gJ3JpbXJhZidcclxuXHJcbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcclxuICAvLyBjb25zdCBuYW1lID0gb3B0aW9ucy5pblBsYWNlID8gcGF0aC5yZWxhdGl2ZSgnLi4vJywgcHJvY2Vzcy5jd2QoKSkgOiBvcHRpb25zLnByb2plY3RcclxuICBpZiAob3B0aW9ucy5vZmZsaW5lKSB7IC8vIG9mZmxpbmUgbW9kZVxyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50ZW1wbGF0ZSkpIHtcclxuICAgICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXHJcbiAgICB9XHJcbiAgfSBlbHNlIHsgLy8gb25saW5lIG1vZGVcclxuICAgIG9wdGlvbnMudGVtcGxhdGUgPSAhb3B0aW9ucy5oYXNTbGFzaFxyXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxyXG4gICAgICA6IG9wdGlvbnMudGVtcGxhdGVcclxuICAgIGRvd25sb2FkQW5kR2VuZXJhdGUoY3R4LCBvcHRpb25zKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGRvd25sb2FkIHRlbXBsYXRlICYgZ2VuZXJhdGVcclxuICogQHBhcmFtIHsgUGljR28gfSBjdHhcclxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXHJcbiAqL1xyXG5jb25zdCBkb3dubG9hZEFuZEdlbmVyYXRlID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xyXG4gICAgcm0uc3luYyhvcHRpb25zLnRtcClcclxuICB9XHJcbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxyXG4gIGRvd25sb2FkKG9wdGlvbnMudGVtcGxhdGUsIG9wdGlvbnMudG1wLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIH0sIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICBpZiAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBjdHgubG9nLmVycm9yKGVycilcclxuICAgIH1cclxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcclxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbml0JylcclxuICAgICAgLmFyZ3VtZW50cygnPHRlbXBsYXRlPiBbcHJvamVjdF0nKVxyXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxyXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY3JlYXRlIHBpY2dvIHBsdWdpblxcJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzJylcclxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNTbGFzaCA9IHRlbXBsYXRlLmluY2x1ZGVzKCcvJylcclxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHByb2dyYW0uY2xvbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2dvL3RlbXBsYXRlcycsIHRlbXBsYXRlLnJlcGxhY2UoL1svOl0vZywgJy0nKSkgLy8gZm9yIGNhY2hpbmcgdGVtcGxhdGVcclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtLm9mZmxpbmUpIHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgIHByb2plY3QsXHJcbiAgICAgICAgICAgICAgaGFzU2xhc2gsXHJcbiAgICAgICAgICAgICAgaW5QbGFjZSxcclxuICAgICAgICAgICAgICBkZXN0LFxyXG4gICAgICAgICAgICAgIGNsb25lLFxyXG4gICAgICAgICAgICAgIHRtcCxcclxuICAgICAgICAgICAgICBvZmZsaW5lXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHByb2plY3QgaXMgZW1wdHkgb3IgZXhpc3RcclxuICAgICAgICAgICAgaWYgKGluUGxhY2UgfHwgZnMuZXhpc3RzU3luYyhkZXN0KSkge1xyXG4gICAgICAgICAgICAgIGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBpblBsYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnR2VuZXJhdGUgcHJvamVjdCBpbiBjdXJyZW50IGRpcmVjdG9yeT8nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnVGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIENvbnRpbnVlPycsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdvaydcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdKS50aGVuKChhbnN3ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5vaykge1xyXG4gICAgICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHByb2plY3QgaXMgZ2l2ZW5cclxuICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCctLWhlbHAnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFeGFtcGxlczonKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBhbiBvZmZpY2lhbCB0ZW1wbGF0ZScpKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCBwbHVnaW4gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCBzdHJhaWdodCBmcm9tIGEgZ2l0aHViIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHVzZXJuYW1lL3JlcG8gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaW5pdFxyXG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJUGljR28sIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGkxOG46IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpMThuJylcclxuICAgICAgLmFyZ3VtZW50cygnW2xhbmddJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjaGFuZ2UgcGljZ28gbGFuZ3VhZ2UnKVxyXG4gICAgICAuYWN0aW9uKGFzeW5jIChsYW5nOiBzdHJpbmcgPSAnJykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBjdHguaTE4bi5nZXRMYW5ndWFnZUxpc3QoKVxyXG4gICAgICAgIGlmICghbGFuZykge1xyXG4gICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICBuYW1lOiAnaTE4bicsXHJcbiAgICAgICAgICAgICAgY2hvaWNlczogbGlzdCxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgbGFuZ3VhZ2UnLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXHJcbiAgICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShhbnN3ZXIuaTE4bilcclxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7YW5zd2VyLmkxOG59YClcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxpc3QuaW5jbHVkZXMobGFuZykpIHtcclxuICAgICAgICAgIHJldHVybiBjdHgubG9nLndhcm4oJ05vIHN1Y2ggbGFuZ3VhZ2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShsYW5nKVxyXG4gICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7bGFuZ31gKVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaTE4blxyXG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXHJcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcclxuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcclxuaW1wb3J0IGlucXVpcmVyLCB7IElucXVpcmVyIH0gZnJvbSAnaW5xdWlyZXInXHJcbmltcG9ydCB7IElQbHVnaW4sIElDb21tYW5kZXIsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgY29tbWFuZGVycyBmcm9tICcuLi9wbHVnaW5zL2NvbW1hbmRlcidcclxuaW1wb3J0IHsgZ2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIGltcGxlbWVudHMgSUNvbW1hbmRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lID0gJ2NvbW1hbmRlcidcclxuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdDogTWFwPHN0cmluZywgSVBsdWdpbj4gPSBuZXcgTWFwKClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4gPSBuZXcgTWFwKClcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcblxyXG4gIHByb2dyYW06IENvbW1hbmRcclxuICBpbnF1aXJlcjogSW5xdWlyZXJcclxuXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXHJcbiAgICB0aGlzLmlucXVpcmVyID0gaW5xdWlyZXJcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBnZXROYW1lICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZVxyXG4gIH1cclxuXHJcbiAgaW5pdCAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2dyYW1cclxuICAgICAgLnZlcnNpb24ocHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTiwgJy12LCAtLXZlcnNpb24nKVxyXG4gICAgICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdkZWJ1ZyBtb2RlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICBkZWJ1ZzogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vcHRpb24oJy1zLCAtLXNpbGVudCcsICdzaWxlbnQgbW9kZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgc2lsZW50OiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCdjb21tYW5kOionLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGBJbnZhbGlkIGNvbW1hbmQ6ICR7dGhpcy5wcm9ncmFtLmFyZ3Muam9pbignICcpfVxcblNlZSAtLWhlbHAgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuYClcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcclxuICAgICAgfSlcclxuXHJcbiAgICAvLyBidWlsdC1pbiBjb21tYW5kc1xyXG4gICAgY29tbWFuZGVycyh0aGlzLmN0eClcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyIChpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ25hbWUgaXMgcmVxdWlyZWQhJylcclxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcclxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IHBsdWdpbiBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXHJcbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXHJcbiAgICBjb25zdCBjdXJyZW50UGx1Z2luTmFtZSA9IGdldEN1cnJlbnRQbHVnaW5OYW1lKClcclxuICAgIGlmIChjdXJyZW50UGx1Z2luTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoY3VycmVudFBsdWdpbk5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoY3VycmVudFBsdWdpbk5hbWUpPy5wdXNoKGlkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KGN1cnJlbnRQbHVnaW5OYW1lLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRDb21tYW5kcyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldExpc3QoKS5mb3JFYWNoKChpdGVtOiBJUGx1Z2luKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaXRlbS5oYW5kbGUodGhpcy5jdHgpXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcclxuICB9XHJcblxyXG4gIGdldExpc3QgKCk6IElQbHVnaW5bXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cclxuICB9XHJcblxyXG4gIGdldElkTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZGVyXHJcbiIsImltcG9ydCBwbHVnaW5IYW5kbGVyIGZyb20gJy4vcGx1Z2luSGFuZGxlcidcclxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZydcclxuaW1wb3J0IHVwbG9hZCBmcm9tICcuL3VwbG9hZCdcclxuaW1wb3J0IHNldHRpbmcgZnJvbSAnLi9zZXR0aW5nJ1xyXG5pbXBvcnQgdXNlIGZyb20gJy4vdXNlJ1xyXG5pbXBvcnQgcHJveHkgZnJvbSAnLi9wcm94eSdcclxuaW1wb3J0IGluaXQgZnJvbSAnLi9pbml0J1xyXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nXHJcbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGN0eDogSVBpY0dvKTogdm9pZCA9PiB7XHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncGx1Z2luSGFuZGxlcicsIHBsdWdpbkhhbmRsZXIpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3NldHRpbmcnLCBzZXR0aW5nKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VwbG9hZCcsIHVwbG9hZClcclxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncHJveHknLCBwcm94eSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpbml0JywgaW5pdClcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcclxufVxyXG4iLCJleHBvcnQgZW51bSBJTG9nVHlwZSB7XHJcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcclxuICBpbmZvID0gJ2luZm8nLFxyXG4gIHdhcm4gPSAnd2FybicsXHJcbiAgZXJyb3IgPSAnZXJyb3InXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIGJ5IHVzZXJzXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcclxuICBVUExPQURfUFJPR1JFU1MgPSAndXBsb2FkUHJvZ3Jlc3MnLFxyXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxyXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcclxuICBCRUZPUkVfVVBMT0FEID0gJ2JlZm9yZVVwbG9hZCcsXHJcbiAgQUZURVJfVVBMT0FEID0gJ2FmdGVyVXBsb2FkJyxcclxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXHJcbiAgSU5TVEFMTCA9ICdpbnN0YWxsJyxcclxuICBVTklOU1RBTEwgPSAndW5pbnN0YWxsJyxcclxuICBVUERBVEUgPSAndXBkYXRlJyxcclxuICBOT1RJRklDQVRJT04gPSAnbm90aWZpY2F0aW9uJ1xyXG59XHJcblxyXG4vKipcclxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBvbmx5IGJ5IHBpY2dvXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVzRXZlbnQge1xyXG4gIENPTkZJR19DSEFOR0UgPSAnQ09ORklHX0NIQU5HRSdcclxufVxyXG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJ1xyXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7XHJcbiAgSUxvZ0FyZ3ZUeXBlLFxyXG4gIElMb2dBcmd2VHlwZVdpdGhFcnJvcixcclxuICBVbmRlZmluYWJsZSxcclxuICBJTG9nQ29sb3IsXHJcbiAgSUxvZ2dlcixcclxuICBJUGljR29cclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XHJcbiAgICBbSUxvZ1R5cGUuc3VjY2Vzc106ICdncmVlbicsXHJcbiAgICBbSUxvZ1R5cGUuaW5mb106ICdibHVlJyxcclxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXHJcbiAgICBbSUxvZ1R5cGUuZXJyb3JdOiAncmVkJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbG9nTGV2ZWwhOiBzdHJpbmdcclxuICBwcml2YXRlIGxvZ1BhdGghOiBzdHJpbmdcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxvZyAodHlwZTogSUxvZ1R5cGUsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIC8vIGNoZWNrIGNvbmZpZy5zaWxlbnRcclxuICAgIGlmICghdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzaWxlbnQnKSkge1xyXG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcclxuICAgICAgY29uc29sZS5sb2cobG9nSGVhZGVyLCAuLi5tc2cpXHJcbiAgICAgIHRoaXMubG9nTGV2ZWwgPSB0aGlzLmN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxvZ0xldmVsJylcclxuICAgICAgdGhpcy5sb2dQYXRoID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5sb2dQYXRoJykgfHwgcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICcuL3BpY2xpc3QubG9nJylcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gZml4IGxvZyBmaWxlIGlzIHRvbyBsYXJnZSwgbm93IHRoZSBsb2cgZmlsZSdzIGRlZmF1bHQgc2l6ZSBpcyAxMCBNQlxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNoZWNrTG9nRmlsZUlzTGFyZ2UodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0xhcmdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdNc2cgPSBgTG9nIGZpbGUgaXMgdG9vIGxhcmdlICg+ICR7KHJlc3VsdC5sb2dGaWxlU2l6ZUxpbWl0ISkgLyAxMDI0IC8gMTAyNCB8fCAnMTAnfSBNQiksIHJlY3JlYXRlIGxvZyBmaWxlYFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1tQaWNMaXN0IFdBUk5dOicpLCB3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgICB0aGlzLnJlY3JlYXRlTG9nRmlsZSh0aGlzLmxvZ1BhdGgpXHJcbiAgICAgICAgICAgIG1zZy51bnNoaWZ0KHdhcm5pbmdNc2cpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVdyaXRlTG9nKHRoaXMubG9nUGF0aCwgdHlwZSwgLi4ubXNnKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHdoeT8/P1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIGNoZWNraW5nIGxvZyBmaWxlIHNpemUnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dGaWxlSXNMYXJnZSAobG9nUGF0aDogc3RyaW5nKToge1xyXG4gICAgaXNMYXJnZTogYm9vbGVhblxyXG4gICAgbG9nRmlsZVNpemU/OiBudW1iZXJcclxuICAgIGxvZ0ZpbGVTaXplTGltaXQ/OiBudW1iZXJcclxuICB9IHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplID0gZnMuc3RhdFN5bmMobG9nUGF0aCkuc2l6ZVxyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZUxpbWl0ID0gZm9yY2VOdW1iZXIodGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPG51bWJlcj4+KCdzZXR0aW5ncy5sb2dGaWxlU2l6ZUxpbWl0JykgfHwgMTApICogMTAyNCAqIDEwMjQgLy8gMTAgTUIgZGVmYXVsdFxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzTGFyZ2U6IGxvZ0ZpbGVTaXplID4gbG9nRmlsZVNpemVMaW1pdCxcclxuICAgICAgICBsb2dGaWxlU2l6ZSxcclxuICAgICAgICBsb2dGaWxlU2l6ZUxpbWl0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzTGFyZ2U6IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY3JlYXRlTG9nRmlsZSAobG9nUGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBmcy51bmxpbmtTeW5jKGxvZ1BhdGgpXHJcbiAgICAgIGZzLmNyZWF0ZUZpbGVTeW5jKGxvZ1BhdGgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdyaXRlTG9nIChsb2dQYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tMb2dMZXZlbCh0eXBlLCB0aGlzLmxvZ0xldmVsKSkge1xyXG4gICAgICAgIGxldCBsb2cgPSBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpfSBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dIGBcclxuICAgICAgICBtc2cuZm9yRWFjaCgoaXRlbTogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yICYmIHR5cGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgbG9nICs9IGBcXG4tLS0tLS1FcnJvciBTdGFjayBCZWdpbi0tLS0tLVxcbiR7dXRpbC5mb3JtYXQoaXRlbT8uc3RhY2spfVxcbi0tLS0tLS1FcnJvciBTdGFjayBFbmQtLS0tLS0tIGBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSwgbnVsbCwgMilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2cgKz0gYCR7aXRlbSBhcyBzdHJpbmd9IGBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGxvZyArPSAnXFxuJ1xyXG4gICAgICAgIC8vIEEgc3luY2hyb25pemVkIGFwcHJvYWNoIHRvIGF2b2lkIGxvZyBtc2cgc2VxdWVuY2UgZXJyb3JzXHJcbiAgICAgICAgZnMuYXBwZW5kRmlsZVN5bmMobG9nUGF0aCwgbG9nKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiB3cml0aW5nIGxvZyBmaWxlJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dMZXZlbCAodHlwZTogc3RyaW5nLCBsZXZlbDogdW5kZWZpbmVkIHwgc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkIHx8IGxldmVsID09PSAnYWxsJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGV2ZWwpKSB7XHJcbiAgICAgIHJldHVybiBsZXZlbC5zb21lKChpdGVtOiBzdHJpbmcpID0+IChpdGVtID09PSB0eXBlIHx8IGl0ZW0gPT09ICdhbGwnKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0eXBlID09PSBsZXZlbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3VjY2VzcyAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLnN1Y2Nlc3MsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGluZm8gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBlcnJvciAoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmVycm9yLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICB3YXJuICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUud2FybiwgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgZGVidWcgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIGlmIChpc0RldigpKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExvZ2dlclxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCB7IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIElMaWZlY3ljbGVQbHVnaW5zLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBnZXRVUkxGaWxlLCBoYW5kbGVVcmxFbmNvZGUsIGltYWdlUHJvY2VzcywgaXNVcmwsIG5lZWRDb21wcmVzcywgbmVlZEFkZFdhdGVybWFyaywgaW1hZ2VBZGRXYXRlck1hcmssIHJlbW92ZUV4aWYgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi4vdXRpbHMvY3JlYXRlQ29udGV4dCdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXHJcblxyXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0dGZMaW5rOiBzdHJpbmcgPSAnaHR0cHM6Ly9yZWxlYXNlLnBpY2xpc3QuY24vc2ltaGVpLnR0ZidcclxuICB0dGZQYXRoOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAncGljbGlzdFRlbXAnKVxyXG4gICAgZnMuZW1wdHlEaXJTeW5jKHRlbXBGaWxlUGF0aClcclxuICAgIHRoaXMudHRmUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2Fzc2V0cycsICdzaW1oZWkudHRmJylcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvd25sb2FkVFRGICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGguZGlybmFtZSh0aGlzLnR0ZlBhdGgpXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3V0cHV0RGlyKSkge1xyXG4gICAgICBmcy5ta2RpclN5bmMob3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxyXG4gICAgfVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMudHRmUGF0aCkpIHtcclxuICAgICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlLicpXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHRoaXMudHRmTGluaywgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMudHRmUGF0aCwgcmVzLmRhdGEpXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlIHN1Y2Nlc3MuJylcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZC4nKVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnQgKGlucHV0OiBhbnlbXSk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICAvLyBlbnN1cmUgZXZlcnkgdXBsb2FkIHByb2Nlc3MgaGFzIGFuIHVuaXF1ZSBjb250ZXh0XHJcbiAgICBjb25zdCBjdHggPSBjcmVhdGVDb250ZXh0KHRoaXMuY3R4KVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaW1hZ2VzIGlucHV0XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgYW4gYXJyYXkuJylcclxuICAgICAgfVxyXG4gICAgICBjdHguaW5wdXQgPSBpbnB1dFxyXG4gICAgICBjdHgub3V0cHV0ID0gW11cclxuICAgICAgY29uc3QgY29tcHJlc3NPcHRpb25zID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKVxyXG4gICAgICBjb25zdCB3YXRlcm1hcmtPcHRpb25zID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpXHJcbiAgICAgIGlmIChjb21wcmVzc09wdGlvbnMgfHwgd2F0ZXJtYXJrT3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGVtcEZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgZnMubWtkaXJTeW5jKHRlbXBGaWxlUGF0aClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd2F0ZXJtYXJrTXNnID0gJ0FkZCB3YXRlcm1hcmsgdG8gaW1hZ2UnXHJcbiAgICAgICAgY29uc3QgY29tcHJlc3NNc2cgPSAnQ29tcHJlc3Mgb3IgY29udmVydCBpbWFnZSdcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cclxuICAgICAgICAgIGlmIChpc1VybChpdGVtKSkge1xyXG4gICAgICAgICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXHJcbiAgICAgICAgICAgIGlmIChpbmZvLnN1Y2Nlc3MgJiYgaW5mby5idWZmZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgdHJhbnNmb3JtZWRCdWZmZXJcclxuICAgICAgICAgICAgICBpZiAobmVlZEFkZFdhdGVybWFyayh3YXRlcm1hcmtPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFRURlJldCA9IGF3YWl0IHRoaXMuZG93bmxvYWRUVEYoKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN0eC5sb2cud2FybignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLCBza2lwIGFkZCB3YXRlcm1hcmsuJylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyh3YXRlcm1hcmtNc2cpXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VBZGRXYXRlck1hcmsoaW5mby5idWZmZXIsIHdhdGVybWFya09wdGlvbnMsIHRoaXMudHRmUGF0aClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRDb21wcmVzcyhjb21wcmVzc09wdGlvbnMsIGluZm8uZXh0bmFtZSA/PyAnJykpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKHRyYW5zZm9ybWVkQnVmZmVyID8/IGluZm8uYnVmZmVyLCBjb21wcmVzc09wdGlvbnMsIGluZm8uZXh0bmFtZSA/PyAnJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdSZW1vdmUgZXhpZiBpbmZvLicpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IHJlbW92ZUV4aWYoaW5mby5idWZmZXIsIGluZm8uZXh0bmFtZSA/PyAnJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVkQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3RXh0XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3NPcHRpb25zPy5pc0NvbnZlcnQpIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gY29tcHJlc3NPcHRpb25zPy5jb252ZXJ0Rm9ybWF0ID8/ICdqcGcnXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBuZXdFeHQgPSBpbmZvLmV4dG5hbWUgPz8gJydcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5ld0V4dCA9IG5ld0V4dC5zdGFydHNXaXRoKCcuJykgPyBuZXdFeHQgOiBgLiR7bmV3RXh0fWBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBGaWxlID0gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7aW5mby5maWxlTmFtZVxyXG4gICAgICAgICAgICAgICAgICA/IGAke3BhdGguYmFzZW5hbWUoaW5mby5maWxlTmFtZSwgcGF0aC5leHRuYW1lKGluZm8uZmlsZU5hbWUpKX0ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUoKS5nZXRUaW1lKCl9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZvLnJlYXNvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChuZWVkQWRkV2F0ZXJtYXJrKHdhdGVybWFya09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFRURlJldCA9IGF3YWl0IHRoaXMuZG93bmxvYWRUVEYoKVxyXG4gICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQsIHNraXAgYWRkIHdhdGVybWFyay4nKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUFkZFdhdGVyTWFyayhmcy5yZWFkRmlsZVN5bmMoaXRlbSksIHdhdGVybWFya09wdGlvbnMsIHRoaXMudHRmUGF0aClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5lZWRDb21wcmVzcyhjb21wcmVzc09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSkpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3ModHJhbnNmb3JtZWRCdWZmZXIgPz8gZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCBjb21wcmVzc09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybWVkQnVmZmVyICYmIGNvbXByZXNzT3B0aW9ucz8uaXNSZW1vdmVFeGlmKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdSZW1vdmUgZXhpZiBpbmZvLicpXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgcGF0aC5leHRuYW1lKGl0ZW0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgIGxldCBuZXdFeHRcclxuICAgICAgICAgICAgICBpZiAoY29tcHJlc3NPcHRpb25zPy5pc0NvbnZlcnQpIHtcclxuICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBwYXRoLmV4dG5hbWUoaXRlbSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBGaWxlID0gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBwYXRoLmV4dG5hbWUoaXRlbSkpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZSwgdHJhbnNmb3JtZWRCdWZmZXIpXHJcbiAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgICAgfVxyXG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9UcmFuc2Zvcm0oY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVVwbG9hZChjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9VcGxvYWQoY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmFmdGVyVXBsb2FkKGN0eClcclxuICAgICAgcmV0dXJuIGN0eFxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIGN0eC5sb2cud2FybihJQnVpbGRJbkV2ZW50LkZBSUxFRClcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIC0xKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICBpZiAoY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PignZGVidWcnKSkge1xyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVRyYW5zZm9ybSAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDApXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9UUkFOU0ZPUk0sIGN0eClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHRyYW5zZm9ybScpXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5iZWZvcmVUcmFuc2Zvcm1QbHVnaW5zLCBjdHgpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGRvVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMzApXHJcbiAgICBjb25zdCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnRyYW5zZm9ybWVyJykgfHwgJ3BhdGgnXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgbGV0IHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQodHlwZSlcclxuICAgIGlmICghdHJhbnNmb3JtZXIpIHtcclxuICAgICAgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCgncGF0aCcpXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdwYXRoJ1xyXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdHJhbnNmb3JtZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB0cmFuc2Zvcm1lciAtIHBhdGhgKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5pbmZvKGBUcmFuc2Zvcm1pbmcuLi4gQ3VycmVudCB0cmFuc2Zvcm1lciBpcyBbJHtjdXJyZW50VHJhbnNmb3JtZXJ9XWApXHJcbiAgICBhd2FpdCB0cmFuc2Zvcm1lcj8uaGFuZGxlKGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVXBsb2FkIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgNjApXHJcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB1cGxvYWQnKVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVVBMT0FELCBjdHgpXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5iZWZvcmVVcGxvYWRQbHVnaW5zLCBjdHgpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGRvVXBsb2FkIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBsZXQgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXHJcbiAgICBsZXQgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxyXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcclxuICAgIGlmICghdXBsb2FkZXIpIHtcclxuICAgICAgdHlwZSA9ICdzbW1zJ1xyXG4gICAgICBjdXJyZW50VHJhbnNmb3JtZXIgPSAnc21tcydcclxuICAgICAgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCgnc21tcycpXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB1cGxvYWRlciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHVwbG9hZGVyIC0gc21tc2ApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFVwbG9hZGluZy4uLiBDdXJyZW50IHVwbG9hZGVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHVwbG9hZGVyPy5oYW5kbGUoY3R4KVxyXG4gICAgZm9yIChjb25zdCBvdXRwdXRJbWcgb2YgY3R4Lm91dHB1dCkge1xyXG4gICAgICBvdXRwdXRJbWcudHlwZSA9IHR5cGVcclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYWZ0ZXJVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQUZURVJfVVBMT0FELCBjdHgpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMTAwKVxyXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLCBjdHgpXHJcbiAgICBsZXQgbXNnID0gJydcclxuICAgIGNvbnN0IGxlbmd0aCA9IGN0eC5vdXRwdXQubGVuZ3RoXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbXNnICs9IGhhbmRsZVVybEVuY29kZShjdHgub3V0cHV0W2ldLmltZ1VybCEpXHJcbiAgICAgICAgaWYgKGkgIT09IGxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIG1zZyArPSAnXFxuJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgY3R4Lm91dHB1dFtpXS5iYXNlNjRJbWFnZVxyXG4gICAgICBkZWxldGUgY3R4Lm91dHB1dFtpXS5idWZmZXJcclxuICAgIH1cclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRklOSVNIRUQsIGN0eClcclxuICAgIGN0eC5sb2cuc3VjY2VzcyhgXFxuJHttc2d9YClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUGx1Z2lucyAobGlmZUN5Y2xlUGx1Z2luczogSUxpZmVjeWNsZVBsdWdpbnMsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldExpc3QoKVxyXG4gICAgY29uc3QgcGx1Z2luTmFtZXMgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldElkTGlzdCgpXHJcbiAgICBjb25zdCBsaWZlQ3ljbGVOYW1lID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXROYW1lKClcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHBsdWdpbnMubWFwKGFzeW5jIChwbHVnaW46IElQbHVnaW4sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjdHgubG9nLmluZm8oYCR7bGlmZUN5Y2xlTmFtZX06ICR7cGx1Z2luTmFtZXNbaW5kZXhdfSBydW5uaW5nYClcclxuICAgICAgICBhd2FpdCBwbHVnaW4uaGFuZGxlKGN0eClcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoYCR7bGlmZUN5Y2xlTmFtZX06ICR7cGx1Z2luTmFtZXNbaW5kZXhdfSBlcnJvcmApXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9KSlcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVxyXG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuXHJcbi8qKlxyXG4gKiBjcmVhdGUgYW4gdW5pcXVlIGNvbnRleHQgZm9yIGVhY2ggdXBsb2FkIHByb2Nlc3NcclxuICogQHBhcmFtIGN0eFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRleHQgPSAoY3R4OiBJUGljR28pOiBJUGljR28gPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBjb25maWdQYXRoOiBjdHguY29uZmlnUGF0aCxcclxuICAgIGJhc2VEaXI6IGN0eC5iYXNlRGlyLFxyXG4gICAgbG9nOiBjdHgubG9nLFxyXG4gICAgY21kOiBjdHguY21kLFxyXG4gICAgb3V0cHV0OiBbXSxcclxuICAgIGlucHV0OiBbXSxcclxuICAgIHBsdWdpbkxvYWRlcjogY3R4LnBsdWdpbkxvYWRlcixcclxuICAgIHBsdWdpbkhhbmRsZXI6IGN0eC5wbHVnaW5IYW5kbGVyLFxyXG4gICAgUmVxdWVzdDogY3R4LlJlcXVlc3QsXHJcbiAgICBoZWxwZXI6IGN0eC5oZWxwZXIsXHJcbiAgICBWRVJTSU9OOiBjdHguVkVSU0lPTixcclxuICAgIEdVSV9WRVJTSU9OOiBjdHguR1VJX1ZFUlNJT04sXHJcbiAgICByZXF1ZXN0OiBjdHgucmVxdWVzdCxcclxuICAgIGkxOG46IGN0eC5pMThuLFxyXG4gICAgZ2V0Q29uZmlnOiBjdHguZ2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHNhdmVDb25maWc6IGN0eC5zYXZlQ29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHJlbW92ZUNvbmZpZzogY3R4LnJlbW92ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzZXRDb25maWc6IGN0eC5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdW5zZXRDb25maWc6IGN0eC51bnNldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICB1cGxvYWQ6IGN0eC51cGxvYWQuYmluZChjdHgpLFxyXG4gICAgYWRkTGlzdGVuZXI6IGN0eC5hZGRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBvbjogY3R4Lm9uLmJpbmQoY3R4KSxcclxuICAgIG9uY2U6IGN0eC5vbmNlLmJpbmQoY3R4KSxcclxuICAgIHJlbW92ZUxpc3RlbmVyOiBjdHgucmVtb3ZlTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb2ZmOiBjdHgub2ZmLmJpbmQoY3R4KSxcclxuICAgIHJlbW92ZUFsbExpc3RlbmVyczogY3R4LnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBzZXRNYXhMaXN0ZW5lcnM6IGN0eC5zZXRNYXhMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgZ2V0TWF4TGlzdGVuZXJzOiBjdHguZ2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyczogY3R4Lmxpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICByYXdMaXN0ZW5lcnM6IGN0eC5yYXdMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgZW1pdDogY3R4LmVtaXQuYmluZChjdHgpLFxyXG4gICAgbGlzdGVuZXJDb3VudDogY3R4Lmxpc3RlbmVyQ291bnQuYmluZChjdHgpLFxyXG4gICAgcHJlcGVuZExpc3RlbmVyOiBjdHgucHJlcGVuZExpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRPbmNlTGlzdGVuZXI6IGN0eC5wcmVwZW5kT25jZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIGV2ZW50TmFtZXM6IGN0eC5ldmVudE5hbWVzLmJpbmQoY3R4KVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTbW1zQ29uZmlnLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlciwgYXBpVG9rZW46IHN0cmluZywgYmFja3VwRG9tYWluID0gJycpOiBJT2xkUmVxT3B0aW9ucyA9PiB7XHJcbiAgY29uc3QgZG9tYWluID0gYmFja3VwRG9tYWluIHx8ICdzbS5tcydcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwczovLyR7ZG9tYWlufS9hcGkvdjIvdXBsb2FkYCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljR28nLFxyXG4gICAgICBBdXRob3JpemF0aW9uOiBhcGlUb2tlblxyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIHNtZmlsZToge1xyXG4gICAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHNzbDogJ3RydWUnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxyXG4gIGlmICghc21tc0NvbmZpZykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc21tcyBjb25maWchJylcclxuICB9XHJcbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBpbWFnZSwgc21tc0NvbmZpZz8udG9rZW4sIHNtbXNDb25maWc/LmJhY2t1cERvbWFpbilcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5LmNvZGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEudXJsXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5oYXNoXHJcbiAgICAgICAgfSBlbHNlIGlmIChib2R5LmNvZGUgPT09ICdpbWFnZV9yZXBlYXRlZCcgJiYgdHlwZW9mIGJvZHkuaW1hZ2VzID09PSAnc3RyaW5nJykgeyAvLyBkbyBleHRyYSBjaGVjayBzaW5jZSB0aGlzIGVycm9yIHJldHVybiBpcyBub3QgZG9jdW1lbnRlZCBhdCBodHRwczovL2RvYy5zbS5tcy8jYXBpLUltYWdlLVVwbG9hZFxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmltYWdlc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5Lm1lc3NhZ2VcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNtbXNDb25maWc+KCdwaWNCZWQuc21tcycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIG1lc3NhZ2U6ICdhcGkgdG9rZW4nLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2JhY2t1cERvbWFpbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJhY2t1cERvbWFpbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc21tcycsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVRjeXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTaWduYXR1cmUge1xyXG4gIHNpZ25hdHVyZTogc3RyaW5nXHJcbiAgYXBwSWQ6IHN0cmluZ1xyXG4gIGJ1Y2tldDogc3RyaW5nXHJcbiAgc2lnblRpbWU6IHN0cmluZ1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBJU2lnbmF0dXJlID0+IHtcclxuICBjb25zdCBzZWNyZXRJZCA9IG9wdGlvbnMuc2VjcmV0SWRcclxuICBjb25zdCBzZWNyZXRLZXkgPSBvcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IGFwcElkID0gb3B0aW9ucy5hcHBJZFxyXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XHJcbiAgbGV0IHNpZ25hdHVyZVxyXG4gIGxldCBzaWduVGltZTogc3RyaW5nID0gJydcclxuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwKVxyXG4gICAgY29uc3QgY3VycmVudCA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDFcclxuICAgIGNvbnN0IGV4cGlyZWQgPSBjdXJyZW50ICsgMzYwMFxyXG5cclxuICAgIGNvbnN0IG11bHRpU2lnbmF0dXJlID0gYGE9JHthcHBJZH0mYj0ke2J1Y2tldH0maz0ke3NlY3JldElkfSZlPSR7ZXhwaXJlZH0mdD0ke2N1cnJlbnR9JnI9JHtyYW5kb219JmY9YFxyXG5cclxuICAgIGNvbnN0IHNpZ25IZXhLZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKG11bHRpU2lnbmF0dXJlKS5kaWdlc3QoKVxyXG4gICAgY29uc3QgdGVtcFN0cmluZyA9IEJ1ZmZlci5jb25jYXQoW3NpZ25IZXhLZXksIEJ1ZmZlci5mcm9tKG11bHRpU2lnbmF0dXJlKV0pXHJcbiAgICBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZW1wU3RyaW5nKS50b1N0cmluZygnYmFzZTY0JylcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi83Nzc4I3NpZ25hdHVyZVxyXG4gICAgY29uc3QgdG9kYXkgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdG9kYXkgKyA4NjQwMFxyXG4gICAgc2lnblRpbWUgPSBgJHt0b2RheX07JHt0b21vcnJvd31gXHJcbiAgICBjb25zdCBzaWduS2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShzaWduVGltZSkuZGlnZXN0KCdoZXgnKVxyXG4gICAgY29uc3QgaHR0cFN0cmluZyA9IGBwdXRcXG4vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1cXG5cXG5ob3N0PSR7b3B0aW9ucy5idWNrZXR9LmNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tXFxuYFxyXG4gICAgY29uc3Qgc2hhMWVkSHR0cFN0cmluZyA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGh0dHBTdHJpbmcpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGBzaGExXFxuJHtzaWduVGltZX1cXG4ke3NoYTFlZEh0dHBTdHJpbmd9XFxuYFxyXG4gICAgc2lnbmF0dXJlID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzaWduS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpXHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBzaWduYXR1cmUsXHJcbiAgICBhcHBJZCxcclxuICAgIGJ1Y2tldCxcclxuICAgIHNpZ25UaW1lXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogSVNpZ25hdHVyZSwgaW1hZ2U6IEJ1ZmZlciwgdmVyc2lvbjogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBhcmVhID0gb3B0aW9ucy5hcmVhXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aFxyXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIHVybDogYGh0dHA6Ly8ke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tL2ZpbGVzL3YyLyR7c2lnbmF0dXJlLmFwcElkfS8ke3NpZ25hdHVyZS5idWNrZXR9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZmlsZU5hbWV9YCxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIEhvc3Q6IGAke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tYCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUuc2lnbmF0dXJlLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICAgdXNlckFnZW50OiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgICAgb3A6ICd1cGxvYWQnLFxyXG4gICAgICAgIGZpbGVjb250ZW50OiBpbWFnZVxyXG4gICAgICB9LFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICB1cmw6IGBodHRwOi8vJHtvcHRpb25zLmJ1Y2tldH0uY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb20vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gLFxyXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBxLXNpZ24tYWxnb3JpdGhtPXNoYTEmcS1haz0ke29wdGlvbnMuc2VjcmV0SWR9JnEtc2lnbi10aW1lPSR7c2lnbmF0dXJlLnNpZ25UaW1lfSZxLWtleS10aW1lPSR7c2lnbmF0dXJlLnNpZ25UaW1lfSZxLWhlYWRlci1saXN0PWhvc3QmcS11cmwtcGFyYW0tbGlzdD0mcS1zaWduYXR1cmU9JHtzaWduYXR1cmUuc2lnbmF0dXJlfWAsXHJcbiAgICAgICAgY29udGVudFR5cGU6IG1pbWUubG9va3VwKGZpbGVOYW1lKSxcclxuICAgICAgICB1c2VyQWdlbnQ6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcclxuICAgICAgfSxcclxuICAgICAgYm9keTogaW1hZ2UsXHJcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCB0Y1l1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpXHJcbiAgaWYgKCF0Y1l1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHRlbmNlbnQgQ09TIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgY3VzdG9tVXJsID0gdGNZdW5PcHRpb25zLmN1c3RvbVVybFxyXG4gICAgY29uc3QgcGF0aCA9IHRjWXVuT3B0aW9ucy5wYXRoXHJcbiAgICBjb25zdCB1c2VWNCA9ICF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0J1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UsIGN0eC5HVUlfVkVSU0lPTiB8fCBjdHguVkVSU0lPTilcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXHJcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXHJcbiAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICAgICAgZXJyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGxldCBib2R5XHJcbiAgICAgICAgaWYgKHVzZVY0ICYmIHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGJvZHkgPSByZXNcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICBpZiAoYm9keT8uYm9keT8uZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IGJvZHkuYm9keS5lcnJcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Py5ib2R5Py5tc2cgfHwgYm9keT8uYm9keT8ubWVzc2FnZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gdGNZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICBpZiAodXNlVjQgJiYgYm9keS5tZXNzYWdlID09PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7cGF0aH0ke2ltZy5maWxlTmFtZX1gXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Ym9keS5kYXRhLnNvdXJjZV91cmwgYXMgc3RyaW5nfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VWNCAmJiBib2R5ICYmIGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSShpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke3RjWXVuT3B0aW9ucy5idWNrZXR9LmNvcy4ke3RjWXVuT3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb20vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUkkoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tc2cpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGlmICghdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShlcnIuZXJyb3IpXHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgICAgY29kZTogYm9keS5jb2RlIGFzIHN0cmluZ1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0ZXh0OiAnaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NDMyJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVRjeXVuQ29uZmlnPigncGljQmVkLnRjeXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGFsaWFzOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKSxcclxuICAgICAgY2hvaWNlczogWyd2NCcsICd2NSddLFxyXG4gICAgICBkZWZhdWx0OiAndjUnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRJZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcHBJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcHBJZCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3RjeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUdpdGh1YkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZywgZGF0YTogYW55KTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8gfSA9IG9wdGlvbnNcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvfS9jb250ZW50cy8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSShmaWxlTmFtZSl9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljR28nLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICB9LFxyXG4gICAgYm9keTogZGF0YSxcclxuICAgIGpzb246IHRydWVcclxuICB9IGFzIGNvbnN0XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgZ2l0aHViT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKVxyXG4gIGlmICghZ2l0aHViT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgZ2l0aHViIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgbWVzc2FnZTogJ1VwbG9hZCBieSBQaWNHbycsXHJcbiAgICAgICAgICBicmFuY2g6IGdpdGh1Yk9wdGlvbnMuYnJhbmNoLFxyXG4gICAgICAgICAgY29udGVudDogYmFzZTY0SW1hZ2UsXHJcbiAgICAgICAgICBwYXRoOiBnaXRodWJPcHRpb25zLnBhdGggKyBlbmNvZGVVUkkoaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zLCBkYXRhKVxyXG4gICAgICAgIGNvbnN0IGJvZHk6IHtcclxuICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgZG93bmxvYWRfdXJsOiBzdHJpbmdcclxuICAgICAgICAgICAgc2hhOiBzdHJpbmdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9ID0gYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZylcclxuICAgICAgICBpZiAoYm9keSkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChnaXRodWJPcHRpb25zLmN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Z2l0aHViT3B0aW9ucy5jdXN0b21Vcmx9LyR7Z2l0aHViT3B0aW9ucy5wYXRofSR7aW1nLmZpbGVOYW1lfWBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmNvbnRlbnQuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuY29udGVudC5zaGFcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZXBvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnJhbmNoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2dpdGh1YicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgcWluaXUgZnJvbSAncWluaXUnXHJcbmltcG9ydCB7IElQbHVnaW5Db25maWcsIElRaW5pdUNvbmZpZywgSVBpY0dvLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuZnVuY3Rpb24gcG9zdE9wdGlvbnMgKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XHJcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgVXBUb2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWdCYXNlNjRcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlbGVjdEFyZWEgKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9rZW4gKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gcWluaXVPcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIHNjb3BlOiBxaW5pdU9wdGlvbnMuYnVja2V0XHJcbiAgfVxyXG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcclxuICByZXR1cm4gcHV0UG9saWN5LnVwbG9hZFRva2VuKG1hYylcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXHJcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHFpbml1IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtib2R5LmtleSBhcyBzdHJpbmd9JHtvcHRpb25zfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjdHgubG9nLmVycm9yKCdxaW5pdSBlcnJvcicsIGJvZHkpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXHJcbiAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJSW1ndXJDb25maWcsIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJSW1ndXJDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xyXG4gIGNvbnN0IGNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZFxyXG4gIGNvbnN0IG9iajogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2ltYWdlJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYENsaWVudC1JRCAke2NsaWVudElkfWAsXHJcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgIEhvc3Q6ICdhcGkuaW1ndXIuY29tJyxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljR28nXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgaW1hZ2U6IGltZ0Jhc2U2NCxcclxuICAgICAgdHlwZTogJ2Jhc2U2NCcsXHJcbiAgICAgIG5hbWU6IGZpbGVOYW1lXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICBvYmoucHJveHkgPSBvcHRpb25zLnByb3h5XHJcbiAgfVxyXG4gIHJldHVybiBvYmpcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXHJcbiAgaWYgKCFpbWd1ck9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGltZ3VyIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMoaW1ndXJPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcclxuICAgICAgICBpZiAoYm9keS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS5saW5rXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXHJcbiAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy5pbWd1ci5jb20vYXBpL2Vycm5vLydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY2xpZW50SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jbGllbnRJZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignaW1ndXInLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElBbGl5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbi8vIGdlbmVyYXRlIE9TUyBzaWduYXR1cmVcclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSUFsaXl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKVxyXG4gIGNvbnN0IG1pbWVUeXBlID0gbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgaWYgKCFtaW1lVHlwZSkgdGhyb3cgRXJyb3IoYE5vIG1pbWUgdHlwZSBmb3VuZCBmb3IgZmlsZSAke2ZpbGVOYW1lfWApXHJcblxyXG4gIGNvbnN0IHNpZ25TdHJpbmcgPSBgUFVUXFxuXFxuJHttaW1lVHlwZX1cXG4ke2RhdGV9XFxuLyR7b3B0aW9ucy5idWNrZXR9LyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9YFxyXG5cclxuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG9wdGlvbnMuYWNjZXNzS2V5U2VjcmV0KS51cGRhdGUoc2lnblN0cmluZykuZGlnZXN0KCdiYXNlNjQnKVxyXG4gIHJldHVybiBgT1NTICR7b3B0aW9ucy5hY2Nlc3NLZXlJZH06JHtzaWduYXR1cmV9YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGBodHRwczovLyR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVVUkkob3B0aW9ucy5wYXRoKX0ke2VuY29kZVVSSShmaWxlTmFtZSl9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb21gLFxyXG4gICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUsXHJcbiAgICAgIERhdGU6IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKVxyXG4gICAgfSxcclxuICAgIGJvZHk6IGltYWdlLFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgYWxpWXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKVxyXG4gIGlmICghYWxpWXVuT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgYWxpWXVuIE9TUyBjb25maWcnKVxyXG4gIH1cclxuICBhbGlZdW5PcHRpb25zLnBhdGggPSBhbGlZdW5PcHRpb25zLnBhdGgucmVwbGFjZSgvXFwvKiQvLCAnJykucmVwbGFjZSgvXlxcLyovLCAnJykgKyAnLydcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IGFsaVl1bk9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25VcmwgPSBhbGlZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtwYXRofSR7aW1nLmZpbGVOYW1lfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke2FsaVl1bk9wdGlvbnMuYnVja2V0fS4ke2FsaVl1bk9wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7cGF0aH0ke2ltZy5maWxlTmFtZX0ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleUlkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5U2VjcmV0JyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYWxpeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEJylcclxuICAgIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVVweXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCBNRDUgZnJvbSAnbWQ1J1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcclxuICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcclxuICBjb25zdCBtZDVQYXNzd29yZCA9IE1ENShwYXNzd29yZClcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSShmaWxlTmFtZSl9YFxyXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcclxuICBjb25zdCBzaWduID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBtZDVQYXNzd29yZCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBVUFlVTiAke29wZXJhdG9yfToke3NpZ259YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbS8ke2J1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUkkoZmlsZU5hbWUpfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCB1cHl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpXHJcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHVwWXVuIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgcGF0aCA9IHVweXVuT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7cGF0aH0ke2ltZy5maWxlTmFtZX0ke3VweXVuT3B0aW9ucy5vcHRpb25zfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKGVyci5tZXNzYWdlID09PSAnVXBsb2FkIGZhaWxlZCcpIHtcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGJvZHkgPSBzYWZlUGFyc2U8eyBjb2RlOiBzdHJpbmcgfT4oZXJyLmVycm9yKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5LmNvZGUgOiBib2R5XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLnVweXVuLmNvbS9hcGkvZXJybm8vJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wZXJhdG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGdldCBwcmVmaXggKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3BlcmF0b3IgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1cmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd1cHl1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVdlYmRhdlBsaXN0Q29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElXZWJkYXZQbGlzdENvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGAke29wdGlvbnMuaG9zdH0vJHtlbmNvZGVVUkkob3B0aW9ucy5wYXRoKX0ke2VuY29kZVVSSShmaWxlTmFtZSl9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7b3B0aW9ucy51c2VybmFtZX06JHtvcHRpb25zLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpLFxyXG4gICAgICAnQ29udGVudC1MZW5ndGgnOiBpbWFnZS5sZW5ndGhcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWFnZSxcclxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCB3ZWJkYXZwbGlzdE9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpXHJcbiAgaWYgKCF3ZWJkYXZwbGlzdE9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHdlYmRhdnBsaXN0IGNvbmZpZycpXHJcbiAgfVxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QucmVwbGFjZSgnaHR0cHM6Ly8nLCAnJykucmVwbGFjZSgnaHR0cDovLycsICcnKS5yZXBsYWNlKC9cXC8rJC8sICcnKVxyXG4gIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMuc3NsRW5hYmxlZCkge1xyXG4gICAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSAnaHR0cHM6Ly8nICsgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICB9IGVsc2Uge1xyXG4gICAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSAnaHR0cDovLycgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxyXG4gIH1cclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoLnJlcGxhY2UoL15cXC8qLywgJycpLnJlcGxhY2UoL1xcLyokLywgJycpICsgJy8nXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh3ZWJkYXZwbGlzdE9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA+PSAyMDAgJiYgYm9keS5zdGF0dXNDb2RlIDwgMzAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke3BhdGh9JHtpbWcuZmlsZU5hbWV9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke3dlYmRhdnBsaXN0T3B0aW9ucy5ob3N0fS8ke3BhdGh9JHtpbWcuZmlsZU5hbWV9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NzbEVuYWJsZWQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNzbEVuYWJsZWQgfHwgdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpIH1cclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd3ZWJkYXZwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBTTU1TVXBsb2FkZXIgZnJvbSAnLi9zbW1zJ1xyXG5pbXBvcnQgdGNZdW5VcGxvYWRlciBmcm9tICcuL3RjeXVuJ1xyXG5pbXBvcnQgZ2l0aHViVXBsb2FkZXIgZnJvbSAnLi9naXRodWInXHJcbmltcG9ydCBxaW5pdVVwbG9hZGVyIGZyb20gJy4vcWluaXUnXHJcbmltcG9ydCBpbWd1clVwbG9hZGVyIGZyb20gJy4vaW1ndXInXHJcbmltcG9ydCBhbGlZdW5VcGxvYWRlciBmcm9tICcuL2FsaXl1bidcclxuaW1wb3J0IHVwWXVuVXBsb2FkZXIgZnJvbSAnLi91cHl1bidcclxuaW1wb3J0IHdlYmRhdnBsaXN0VXBsb2FkZXIgZnJvbSAnLi93ZWJkYXYnXHJcblxyXG5jb25zdCBidWlsZEluVXBsb2FkZXJzOiBJUGljR29QbHVnaW4gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlZ2lzdGVyIChjdHg6IElQaWNHbykge1xyXG4gICAgICBhbGlZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIHRjWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICBTTU1TVXBsb2FkZXIoY3R4KVxyXG4gICAgICBnaXRodWJVcGxvYWRlcihjdHgpXHJcbiAgICAgIHFpbml1VXBsb2FkZXIoY3R4KVxyXG4gICAgICBpbWd1clVwbG9hZGVyKGN0eClcclxuICAgICAgdXBZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIHdlYmRhdnBsaXN0VXBsb2FkZXIoY3R4KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblVwbG9hZGVyc1xyXG4iLCJpbXBvcnQge1xyXG4gIGlzVXJsLFxyXG4gIGdldEltYWdlU2l6ZSxcclxuICBnZXRGU0ZpbGUsXHJcbiAgZ2V0VVJMRmlsZVxyXG59IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSUltZ0luZm8sIElJbWdTaXplIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdHM6IElJbWdJbmZvW10gPSBjdHgub3V0cHV0XHJcbiAgYXdhaXQgUHJvbWlzZS5hbGwoY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cclxuICAgIGlmIChpc1VybChpdGVtKSkge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXHJcbiAgICB9XHJcbiAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXHJcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0ge1xyXG4gICAgICAgIGJ1ZmZlcjogaW5mby5idWZmZXIsXHJcbiAgICAgICAgZmlsZU5hbWU6IGluZm8uZmlsZU5hbWUsXHJcbiAgICAgICAgd2lkdGg6IGltZ1NpemUud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBpbWdTaXplLmhlaWdodCxcclxuICAgICAgICBleHRuYW1lOiBpbmZvLmV4dG5hbWVcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGluZm8ucmVhc29uKVxyXG4gICAgfVxyXG4gIH0pKVxyXG4gIC8vIHJlbW92ZSBlbXB0eSBpdGVtXHJcbiAgY3R4Lm91dHB1dCA9IHJlc3VsdHMuZmlsdGVyKGl0ZW0gPT4gaXRlbSlcclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmNvbnN0IGdldEltZ1NpemUgPSAoY3R4OiBJUGljR28sIGZpbGU6IEJ1ZmZlciwgcGF0aDogc3RyaW5nKTogSUltZ1NpemUgPT4ge1xyXG4gIGNvbnN0IGltYWdlU2l6ZSA9IGdldEltYWdlU2l6ZShmaWxlKVxyXG4gIGlmICghaW1hZ2VTaXplLnJlYWwpIHtcclxuICAgIGN0eC5sb2cud2FybihgY2FuJ3QgZ2V0ICR7cGF0aH0ncyBpbWFnZSBzaXplYClcclxuICAgIGN0eC5sb2cud2FybignZmFsbGJhY2sgdG8gMjAwICogMjAwJylcclxuICB9XHJcbiAgcmV0dXJuIGltYWdlU2l6ZVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgaGFuZGxlXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY3R4Lm91dHB1dC5wdXNoKC4uLmN0eC5pbnB1dClcclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCByZXNvbHZlIGZyb20gJ3Jlc29sdmUnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQaWNHb1BsdWdpbiwgSVBsdWdpbkxvYWRlciwgSVBpY0dvUGx1Z2luSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXgnXHJcbmltcG9ydCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5cclxuLyoqXHJcbiAqIExvY2FsIHBsdWdpbiBsb2FkZXIsIGZpbGUgc3lzdGVtIGlzIHJlcXVpcmVkXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9hZGVyIGltcGxlbWVudHMgSVBsdWdpbkxvYWRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbGlzdDogc3RyaW5nW10gPSBbXVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZnVsbExpc3Q6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5NYXA6IE1hcDxzdHJpbmcsIElQaWNHb1BsdWdpbkludGVyZmFjZT4gPSBuZXcgTWFwKClcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VQYXRoKSkge1xyXG4gICAgICBjb25zdCBwa2cgPSB7XHJcbiAgICAgICAgbmFtZTogJ3BpY2dvLXBsdWdpbnMnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgcmVwb3NpdG9yeTogJ2h0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlJyxcclxuICAgICAgICBsaWNlbnNlOiAnTUlUJ1xyXG4gICAgICB9XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGFja2FnZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBrZyksICd1dGY4JylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldCBwbHVnaW4gZW50cnlcclxuICBwcml2YXRlIHJlc29sdmVQbHVnaW4gKGN0eDogSVBpY0dvLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHJlc29sdmUuc3luYyhuYW1lLCB7IGJhc2VkaXI6IGN0eC5iYXNlRGlyIH0pXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgcmV0dXJuIHBhdGguam9pbihjdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcycsIG5hbWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBsb2FkIGFsbCB0aGlyZCBwYXJ0eSBwbHVnaW5cclxuICBsb2FkICgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgY29uc3QgcGx1Z2luRGlyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMvJylcclxuICAgIC8vIFRoYW5rcyB0byBoZXhvIC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9oZXhvanMvaGV4by9ibG9iL21hc3Rlci9saWIvaGV4by9sb2FkX3BsdWdpbnMuanNcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwbHVnaW5EaXIpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QganNvbiA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlUGF0aClcclxuICAgIGNvbnN0IGRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRlcGVuZGVuY2llcyB8fCB7fSlcclxuICAgIGNvbnN0IGRldkRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSlcclxuICAgIGNvbnN0IG1vZHVsZXMgPSBkZXBzLmNvbmNhdChkZXZEZXBzKS5maWx0ZXIoKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoIS9ecGljZ28tcGx1Z2luLXxeQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkgcmV0dXJuIGZhbHNlXHJcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJlc29sdmVQbHVnaW4odGhpcy5jdHgsIG5hbWUpXHJcbiAgICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHBhdGgpXHJcbiAgICB9KVxyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyUGx1Z2luKG1vZHVsZSlcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICByZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nLCBwbHVnaW4/OiBJUGljR29QbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ1BsZWFzZSBwcm92aWRlIHZhbGlkIHBsdWdpbicpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5mdWxsTGlzdC5hZGQobmFtZSlcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIHJlZ2lzdGVyIGxvY2FsIHBsdWdpblxyXG4gICAgICBpZiAoIXBsdWdpbikge1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHRydWUgfHwgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgICAgdGhpcy5nZXRQbHVnaW4obmFtZSkhLnJlZ2lzdGVyKHRoaXMuY3R4KVxyXG4gICAgICAgICAgY29uc3QgcGx1Z2luID0gYHBpY2dvUGx1Z2luc1ske25hbWV9XWBcclxuICAgICAgICAgIHRoaXMuY3R4LnNhdmVDb25maWcoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBbcGx1Z2luXTogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHJlZ2lzdGVyIHByb3ZpZGVkIHBsdWdpblxyXG4gICAgICAgIC8vICYmIHdvbid0IHdyaXRlIGNvbmZpZyB0byBmaWxlc1xyXG4gICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXHJcbiAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICBjb25zdCBwbHVnaW5JbnRlcmZhY2UgPSBwbHVnaW4odGhpcy5jdHgpXHJcbiAgICAgICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbkludGVyZmFjZSlcclxuICAgICAgICBwbHVnaW5JbnRlcmZhY2UucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcclxuICAgICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogYFBsdWdpbiAke25hbWV9IExvYWQgRXJyb3JgLFxyXG4gICAgICAgIGJvZHk6IGVcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXJQbHVnaW4gKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcclxuICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxyXG4gICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci51cGxvYWRlci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIudHJhbnNmb3JtZXIudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5jbWQudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHgucmVtb3ZlQ29uZmlnKCdwaWNnb1BsdWdpbnMnLCBuYW1lKVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBieSBuYW1lXHJcbiAgZ2V0UGx1Z2luIChuYW1lOiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2UgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luTWFwLmhhcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5NYXAuZ2V0KG5hbWUpXHJcbiAgICB9XHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuICAgIGNvbnN0IHBsdWdpbiA9IHJlcXVpcmUocGx1Z2luRGlyICsgbmFtZSkodGhpcy5jdHgpXHJcbiAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luKVxyXG4gICAgcmV0dXJuIHBsdWdpblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsaXN0IG9mIGVuYWJsZWQgcGx1Z2luc1xyXG4gICAqL1xyXG4gIGdldExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3RcclxuICB9XHJcblxyXG4gIGhhc1BsdWdpbiAobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mdWxsTGlzdC5oYXMobmFtZSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZnVsbCBsaXN0IG9mIHBsdWdpbnMsIHdoZXRoZXIgaXQgaXMgZW5hYmxlZCBvciBub3RcclxuICAgKi9cclxuICBnZXRGdWxsTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmZ1bGxMaXN0XVxyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBQbHVnaW5Mb2FkZXJcclxuIiwiZXhwb3J0IGNvbnN0IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgPSAncGljbGlzdC1jbGlwYm9hcmQtaW1hZ2VzJ1xyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IG9zIGZyb20gJ29zJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBpc1dzbCBmcm9tICdpcy13c2wnXHJcbmltcG9ydCB7IElQaWNHbywgSUNsaXBib2FyZEltYWdlIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuL2VudW0nXHJcbmltcG9ydCBtYWNDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbWFjLmFwcGxlc2NyaXB0J1xyXG5pbXBvcnQgd2luZG93c0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzLnBzMSdcclxuaW1wb3J0IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzMTAucHMxJ1xyXG5pbXBvcnQgbGludXhDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbGludXguc2gnXHJcbmltcG9ydCB3c2xDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd3NsLnNoJ1xyXG5pbXBvcnQgeyBDTElQQk9BUkRfSU1BR0VfRk9MREVSIH0gZnJvbSAnLi9zdGF0aWMnXHJcblxyXG5leHBvcnQgdHlwZSBQbGF0Zm9ybSA9ICdkYXJ3aW4nIHwgJ3dpbjMyJyB8ICd3aW4xMCcgfCAnbGludXgnIHwgJ3dzbCdcclxuXHJcbmNvbnN0IGdldEN1cnJlbnRQbGF0Zm9ybSA9ICgpOiBQbGF0Zm9ybSA9PiB7XHJcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXHJcbiAgaWYgKGlzV3NsKSB7XHJcbiAgICByZXR1cm4gJ3dzbCdcclxuICB9XHJcbiAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICBjb25zdCBjdXJyZW50T1MgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKVswXVxyXG4gICAgaWYgKGN1cnJlbnRPUyA9PT0gJzEwJykge1xyXG4gICAgICByZXR1cm4gJ3dpbjEwJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICd3aW4zMidcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgcmV0dXJuICdkYXJ3aW4nXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiAnbGludXgnXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50OiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogbWFjQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdpbjMyOiB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdpbjEwOiB3aW5kb3dzMTBDbGlwYm9hcmRTY3JpcHQsXHJcbiAgbGludXg6IGxpbnV4Q2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdzbDogd3NsQ2xpcGJvYXJkU2NyaXB0XHJcbn1cclxuLyoqXHJcbiAqIHBvd2Vyc2hlbGwgd2lsbCByZXBvcnQgZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBoYXZlIGEgJy5wczEnIGV4dGVuc2lvbixcclxuICogc28gd2Ugc2hvdWxkIGtlZXAgdGhlIGV4dGVuc2lvbiBuYW1lIGNvbnNpc3RlbnQgd2l0aCBjb3JyZXNwb25kaW5nIHNoZWxsXHJcbiAqL1xyXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZToge1xyXG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcclxufSA9IHtcclxuICBkYXJ3aW46ICdtYWMuYXBwbGVzY3JpcHQnLFxyXG4gIHdpbjMyOiAnd2luZG93cy5wczEnLFxyXG4gIHdpbjEwOiAnd2luZG93czEwLnBzMScsXHJcbiAgbGludXg6ICdsaW51eC5zaCcsXHJcbiAgd3NsOiAnd3NsLnNoJ1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbWFnZUZvbGRlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIENMSVBCT0FSRF9JTUFHRV9GT0xERVIpXHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGltYWdlUGF0aCkpIHtcclxuICAgIGZzLm1rZGlyU3luYyhpbWFnZVBhdGgpXHJcbiAgfVxyXG59XHJcblxyXG4vLyBUaGFua3MgdG8gdnMtcGljZ286IGh0dHBzOi8vZ2l0aHViLmNvbS9TcGFkZXMtUy92cy1waWNnby9ibG9iL21hc3Rlci9zcmMvZXh0ZW5zaW9uLnRzXHJcbmNvbnN0IGdldENsaXBib2FyZEltYWdlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJQ2xpcGJvYXJkSW1hZ2U+ID0+IHtcclxuICBjcmVhdGVJbWFnZUZvbGRlcihjdHgpXHJcbiAgLy8gYWRkIGFuIGNsaXBib2FyZCBpbWFnZSBmb2xkZXIgdG8gY29udHJvbCB0aGUgaW1hZ2UgY2FjaGUgZmlsZVxyXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiwgYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyl9LnBuZ2ApXHJcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4oKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRQbGF0Zm9ybSgpXHJcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZVtwbGF0Zm9ybV0pXHJcbiAgICAvLyBJZiB0aGUgc2NyaXB0IGRvZXMgbm90IGV4aXN0IHlldCwgd2UgbmVlZCB0byB3cml0ZSB0aGUgY29udGVudCB0byB0aGUgc2NyaXB0IGZpbGVcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhzY3JpcHRQYXRoKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFxyXG4gICAgICAgIHNjcmlwdFBhdGgsXHJcbiAgICAgICAgcGxhdGZvcm0yU2NyaXB0Q29udGVudFtwbGF0Zm9ybV0sXHJcbiAgICAgICAgJ3V0ZjgnXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIGxldCBleGVjdXRpb25cclxuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ29zYXNjcmlwdCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxyXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJyB8fCBwbGF0Zm9ybSA9PT0gJ3dpbjEwJykge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bigncG93ZXJzaGVsbCcsIFtcclxuICAgICAgICAnLW5vcHJvZmlsZScsXHJcbiAgICAgICAgJy1ub25pbnRlcmFjdGl2ZScsXHJcbiAgICAgICAgJy1ub2xvZ28nLFxyXG4gICAgICAgICctc3RhJyxcclxuICAgICAgICAnLWV4ZWN1dGlvbnBvbGljeScsICd1bnJlc3RyaWN0ZWQnLFxyXG4gICAgICAgIC8vIGZpeCB3aW5kb3dzIDEwIG5hdGl2ZSBjbWQgY3Jhc2ggYnVnIHdoZW4gXCJwaWNnbyB1cGxvYWRcIlxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlL2lzc3Vlcy8zMlxyXG4gICAgICAgIC8vICctd2luZG93c3R5bGUnLCdoaWRkZW4nLFxyXG4gICAgICAgIC8vICctbm9leGl0JyxcclxuICAgICAgICAnLWZpbGUnLCBzY3JpcHRQYXRoLFxyXG4gICAgICAgIGltYWdlUGF0aFxyXG4gICAgICBdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3NoJywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0aW9uLnN0ZG91dC5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcclxuICAgICAgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XHJcbiAgICAgICAgaWYgKGRhdGEudG9TdHJpbmcoKS50cmltKCkgPT09ICdubyB4Y2xpcCBvciB3bC1jbGlwYm9hcmQnKSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogJ3hjbGlwIG9yIHdsLWNsaXBib2FyZCBub3QgZm91bmQnLFxyXG4gICAgICAgICAgICBib2R5OiAnUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW1nUGF0aCA9IGRhdGEudG9TdHJpbmcoKS50cmltKClcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBmaWxlUGF0aCBpcyB0aGUgcmVhbCBmaWxlIGluIHN5c3RlbVxyXG4gICAgICAvLyB3ZSBzaG91bGQga2VlcCBpdCBpbnN0ZWFkIG9mIHJlbW92aW5nXHJcbiAgICAgIGxldCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSBmYWxzZVxyXG5cclxuICAgICAgLy8gaW4gbWFjT1MgaWYgeW91ciBjb3B5IHRoZSBmaWxlIGluIHN5c3RlbSwgaXQncyBiYXNlbmFtZSB3aWxsIG5vdCBlcXVhbCB0byBvdXIgZGVmYXVsdCBiYXNlbmFtZVxyXG4gICAgICBpZiAocGF0aC5iYXNlbmFtZShpbWdQYXRoKSAhPT0gcGF0aC5iYXNlbmFtZShpbWFnZVBhdGgpKSB7XHJcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggaXMgbm90IGdlbmVyYXRlIGJ5IHBpY2dvXHJcbiAgICAgICAgLy8gYnV0IHRoZSBwYXRoIGV4aXN0cywgd2Ugc2hvdWxkIGtlZXAgaXRcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xyXG4gICAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBpZiB0aGUgaW1nUGF0aCBpcyBpbnZhbGlkXHJcbiAgICAgIGlmIChpbWdQYXRoICE9PSAnbm8gaW1hZ2UnICYmICFmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYENhbid0IGZpbmQgJHtpbWdQYXRofWApKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXNvbHZlKHtcclxuICAgICAgICBpbWdQYXRoLFxyXG4gICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZ1xyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBnZXRDbGlwYm9hcmRJbWFnZVxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcblxyXG5jb25zdCBldmVudEJ1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5leHBvcnQge1xyXG4gIGV2ZW50QnVzXHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9wcm9taXNlLWZ1bmN0aW9uLWFzeW5jICovXHJcbmltcG9ydCBheGlvcywgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcydcclxuaW1wb3J0IHsgSVBpY0dvLCBVbmRlZmluYWJsZSwgSUNvbmZpZ0NoYW5nZVBheWxvYWQsIElDb25maWcsIElSZXF1ZXN0Q29uZmlnLCBJT2xkUmVxT3B0aW9ucywgSVJlc3BvbnNlLCBJRnVsbFJlc3BvbnNlLCBJUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBldmVudEJ1cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50QnVzJ1xyXG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXHJcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnXHJcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcclxuaW1wb3J0IHR1bm5lbCBmcm9tICd0dW5uZWwnXHJcbmNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xyXG4gIG1heFZlcnNpb246ICdUTFN2MS4yJyxcclxuICBtaW5WZXJzaW9uOiAnVExTdjEuMidcclxufSlcclxuXHJcbi8vIHRoYW5rcyBmb3IgaHR0cHM6Ly9naXRodWIuZGV2L3JlcXVlc3QvcmVxdWVzdC9ibG9iL21hc3Rlci9pbmRleC5qc1xyXG5mdW5jdGlvbiBhcHBlbmRGb3JtRGF0YSAoZm9ybTogRm9ybURhdGEsIGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZGF0YSAmJiAnb3B0aW9ucycgaW4gZGF0YSkge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhLnZhbHVlLCBkYXRhLm9wdGlvbnMpXHJcbiAgfSBlbHNlIHtcclxuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcXVlc3RJbnRlcmNlcHRvciAob3B0aW9uczogSU9sZFJlcU9wdGlvbnMgfCBBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1JlcXVlc3RDb25maWcgJiB7XHJcbiAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbn0ge1xyXG4gIGxldCBfX2lzT2xkT3B0aW9ucyA9IGZhbHNlXHJcbiAgY29uc3Qgb3B0OiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiAmIHtcclxuICAgIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxyXG4gIH0gPSB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgdXJsOiAob3B0aW9ucy51cmwgYXMgc3RyaW5nKSB8fCAnJyxcclxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gIH1cclxuICAvLyB1c2VyIHJlcXVlc3QgY29uZmlnIHByb3h5XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIGxldCBwcm94eU9wdGlvbnMgPSBvcHRpb25zLnByb3h5XHJcbiAgICBpZiAodHlwZW9mIHByb3h5T3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKG9wdGlvbnMucHJveHkpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKHByb3h5T3B0aW9ucykge1xyXG4gICAgICBpZiAob3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgICAgcHJveHk6IHtcclxuICAgICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zPy5ob3N0bmFtZSxcclxuICAgICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zPy5wb3J0LCAxMClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0LCAxMCksXHJcbiAgICAgICAgICBwcm90b2NvbDogJ2h0dHAnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICgnZm9ybURhdGEnIGluIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5mb3JtRGF0YSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5mb3JtRGF0YVtrZXldXHJcbiAgICAgIGFwcGVuZEZvcm1EYXRhKGZvcm0sIGtleSwgZGF0YSlcclxuICAgIH1cclxuICAgIG9wdC5kYXRhID0gZm9ybVxyXG4gICAgb3B0LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKG9wdC5oZWFkZXJzIHx8IHt9LCBmb3JtLmdldEhlYWRlcnMoKSlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgZGVsZXRlIG9wdC5mb3JtRGF0YVxyXG4gIH1cclxuICBpZiAoJ2JvZHknIGluIG9wdGlvbnMpIHtcclxuICAgIG9wdC5kYXRhID0gb3B0aW9ucy5ib2R5XHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgIGRlbGV0ZSBvcHQuYm9keVxyXG4gIH1cclxuICBpZiAoJ3FzJyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQucGFyYW1zID0gb3B0aW9ucy5xc1xyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgfVxyXG4gIG9wdC5fX2lzT2xkT3B0aW9ucyA9IF9faXNPbGRPcHRpb25zXHJcbiAgcmV0dXJuIG9wdFxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNwb25zZUludGVyY2VwdG9yIChyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IElGdWxsUmVzcG9uc2Uge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5yZXNwb25zZSxcclxuICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcclxuICAgIGJvZHk6IHJlc3BvbnNlLmRhdGFcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlRXJyb3JIYW5kbGVyIChlcnJvcjogYW55KSB7XHJcbiAgLy8gaWYgKGVycm9yLnJlc3BvbnNlKSB7XHJcbiAgLy8gICAvLyBUaGUgcmVxdWVzdCB3YXMgbWFkZSBhbmQgdGhlIHNlcnZlciByZXNwb25kZWQgd2l0aCBhIHN0YXR1cyBjb2RlXHJcbiAgLy8gICAvLyB0aGF0IGZhbGxzIG91dCBvZiB0aGUgcmFuZ2Ugb2YgMnh4XHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJybylcclxuICAvLyB9IGVsc2UgaWYgKGVycm9yLnJlcXVlc3QpIHtcclxuICAvLyAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGJ1dCBubyByZXNwb25zZSB3YXMgcmVjZWl2ZWRcclxuICAvLyAgIC8vIGBlcnJvci5yZXF1ZXN0YCBpcyBhbiBpbnN0YW5jZSBvZiBYTUxIdHRwUmVxdWVzdCBpbiB0aGUgYnJvd3NlciBhbmQgYW4gaW5zdGFuY2Ugb2ZcclxuICAvLyAgIC8vIGh0dHAuQ2xpZW50UmVxdWVzdCBpbiBub2RlLmpzXHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IucmVxdWVzdClcclxuICAvLyB9IGVsc2Uge1xyXG4gIC8vICAgLy8gU29tZXRoaW5nIGhhcHBlbmVkIGluIHNldHRpbmcgdXAgdGhlIHJlcXVlc3QgdGhhdCB0cmlnZ2VyZWQgYW4gRXJyb3JcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5tZXNzYWdlKVxyXG4gIC8vIH1cclxuICBjb25zdCBlcnJvck9iaiA9IHtcclxuICAgIG1ldGhvZDogZXJyb3I/LmNvbmZpZz8ubWV0aG9kPy50b1VwcGVyQ2FzZSgpIHx8ICcnLFxyXG4gICAgdXJsOiBlcnJvcj8uY29uZmlnPy51cmwgfHwgJycsXHJcbiAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgfHwgJycsXHJcbiAgICBzdGFjazogZXJyb3I/LnN0YWNrIHx8IHt9LFxyXG4gICAgcmVzcG9uc2U6IHtcclxuICAgICAgc3RhdHVzOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgICBib2R5OiBlcnJvcj8ucmVzcG9uc2U/LmRhdGEgfHwgJydcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yT2JqKVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdCBpbXBsZW1lbnRzIElSZXF1ZXN0IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBwcm94eTogVW5kZWZpbmFibGU8c3RyaW5nPiA9ICcnXHJcbiAgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gPSB7fVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgICBldmVudEJ1cy5vbihJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwgKGRhdGE6IElDb25maWdDaGFuZ2VQYXlsb2FkPHN0cmluZyB8IElDb25maWdbJ3BpY0JlZCddPikgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGRhdGEuY29uZmlnTmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ3BpY0JlZCc6XHJcbiAgICAgICAgICBpZiAoKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pPy5wcm94eSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3h5ID0gKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pLnByb3h5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ3BpY0JlZC5wcm94eSc6XHJcbiAgICAgICAgICB0aGlzLnByb3h5ID0gZGF0YS52YWx1ZSBhcyBzdHJpbmdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJveHkgPSB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5wcm94eScpXHJcbiAgICBpZiAocHJveHkpIHtcclxuICAgICAgdGhpcy5wcm94eSA9IHByb3h5XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVByb3h5ICgpOiBBeGlvc1JlcXVlc3RDb25maWdbJ3Byb3h5J10gfCBmYWxzZSB7XHJcbiAgICBpZiAodGhpcy5wcm94eSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHByb3h5T3B0aW9ucyA9IG5ldyBVUkwodGhpcy5wcm94eSlcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxyXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQgfHwgJzAnLCAxMCksXHJcbiAgICAgICAgICBwcm90b2NvbDogcHJveHlPcHRpb25zLnByb3RvY29sXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLy8gIzY0IGR5bmFtaWMgZ2V0IHByb3h5IHZhbHVlXHJcbiAgcmVxdWVzdDxULCBVIGV4dGVuZHMgKFxyXG4gICAgSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBJT2xkUmVxT3B0aW9ucyA/IElPbGRSZXFPcHRpb25zIDogSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBBeGlvc1JlcXVlc3RDb25maWcgPyBBeGlvc1JlcXVlc3RDb25maWcgOiBuZXZlclxyXG4gICk+IChvcHRpb25zOiBVKTogUHJvbWlzZTxJUmVzcG9uc2U8VCwgVT4+IHtcclxuICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IHRoaXMuaGFuZGxlUHJveHkoKVxyXG4gICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gSW5maW5pdHlcclxuICAgIHRoaXMub3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoID0gSW5maW5pdHlcclxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJveHkgJiYgb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSB0dW5uZWwuaHR0cHNPdmVySHR0cCh7XHJcbiAgICAgICAgcHJveHk6IHtcclxuICAgICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5wcm94eS5ob3N0LFxyXG4gICAgICAgICAgcG9ydDogdGhpcy5vcHRpb25zLnByb3h5LnBvcnRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IGh0dHBzQWdlbnRcclxuICAgIH1cclxuICAgIC8vICFOT1RJQ0UgdGhpcy5vcHRpb25zICE9PSBvcHRpb25zXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uc1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBheGlvcy5jcmVhdGUodGhpcy5vcHRpb25zKVxyXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShyZXNwb25zZUludGVyY2VwdG9yLCByZXNwb25zZUVycm9ySGFuZGxlcilcclxuXHJcbiAgICAvLyBjb21wYXRpYmxlIHdpdGggb2xkIHJlcXVlc3Qgb3B0aW9ucyB0byBuZXcgb3B0aW9uc1xyXG4gICAgY29uc3Qgb3B0ID0gcmVxdWVzdEludGVyY2VwdG9yKG9wdGlvbnMpXHJcblxyXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgLy8gaGFuZGxlIENvbnRlbnQtVHlwZVxyXG4gICAgICBsZXQgY29udGVudFR5cGUgPSAnJ1xyXG4gICAgICBpZiAob2JqPy5oZWFkZXJzPy5jb250ZW50VHlwZSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnMuY29udGVudFR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlXHJcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5Db250ZW50VHlwZSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnMuQ29udGVudFR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlXHJcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5bJ2NvbnRlbnQtdHlwZSddKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ10gYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gJycgJiYgb2JqLmhlYWRlcnMpIHtcclxuICAgICAgICBvYmouaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBjb250ZW50VHlwZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvYmpcclxuICAgIH0pXHJcbiAgICBpZiAoJ3Jlc29sdmVXaXRoRnVsbFJlc3BvbnNlJyBpbiBvcHRpb25zICYmIG9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcclxuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgLy8gdXNlIG9sZCByZXF1ZXN0IG9wdGlvbiBmb3JtYXRcclxuICAgICAgICBpZiAob3B0Ll9faXNPbGRPcHRpb25zKSB7XHJcbiAgICAgICAgICBpZiAoJ2pzb24nIGluIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiByZXMuZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSkgYXMgUHJvbWlzZTxJUmVzcG9uc2U8VCwgVT4+XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0XHJcbiIsImltcG9ydCB7IElDb25maWcsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBKU09OU3RvcmUgfSBmcm9tICdAcGljZ28vc3RvcmUnXHJcbmltcG9ydCB7IElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXHJcblxyXG5jbGFzcyBEQiB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGI6IEpTT05TdG9yZVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXHJcblxyXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljQmVkJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiLnNldCgncGljQmVkJywge1xyXG4gICAgICAgICAgdXBsb2FkZXI6ICdzbW1zJyxcclxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljZ29QbHVnaW5zJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiLnNldCgncGljZ29QbHVnaW5zJywge30pXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVhZCAoZmx1c2g/OiBib29sZWFuKTogSUpTT04ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGIucmVhZChmbHVzaClcclxuICB9XHJcblxyXG4gIGdldCAoa2V5OiBzdHJpbmcgPSAnJyk6IGFueSB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmdldChrZXkpXHJcbiAgfVxyXG5cclxuICBzZXQgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLnNldChrZXksIHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgaGFzIChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICByZXR1cm4gdGhpcy5kYi5oYXMoa2V5KVxyXG4gIH1cclxuXHJcbiAgdW5zZXQgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLnVuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlnIChjb25maWc6IFBhcnRpYWw8SUNvbmZpZz4pOiB2b2lkIHtcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25maWcgKGNvbmZpZzogSUNvbmZpZyk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy51bnNldChuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgREJcclxuXHJcbi8vIGNvbnN0IGluaXRDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nKTogbG93ZGIuTG93ZGJTeW5jPGFueT4gPT4ge1xyXG4vLyB9XHJcblxyXG4vLyBjb25zdCBzYXZlQ29uZmlnID0gKGNvbmZpZ1BhdGg6IHN0cmluZywgY29uZmlnOiBhbnkpOiB2b2lkID0+IHtcclxuLy8gICBjb25zdCBkYiA9IGluaXRDb25maWcoY29uZmlnUGF0aClcclxuLy8gICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4vLyAgICAgZGIucmVhZCgpLnNldChuYW1lLCBjb25maWdbbmFtZV0pLndyaXRlKClcclxuLy8gICB9KVxyXG4vLyB9XHJcblxyXG4vLyBleHBvcnQge1xyXG4vLyBpbml0Q29uZmlnLFxyXG4vLyBzYXZlQ29uZmlnXHJcbi8vIH1cclxuIiwiaW1wb3J0IHNwYXduIGZyb20gJ2Nyb3NzLXNwYXduJ1xyXG5pbXBvcnQge1xyXG4gIElSZXN1bHQsXHJcbiAgSVByb2Nlc3NFbnYsXHJcbiAgSVBsdWdpblByb2Nlc3NSZXN1bHQsXHJcbiAgSVBsdWdpbkhhbmRsZXIsXHJcbiAgSVBsdWdpbkhhbmRsZXJPcHRpb25zLFxyXG4gIFVuZGVmaW5hYmxlLFxyXG4gIElQaWNHbyxcclxuICBJUGx1Z2luSGFuZGxlclJlc3VsdFxyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUsIGdldE5vcm1hbFBsdWdpbk5hbWUgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vaTE4bi96aC1DTidcclxuXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5IYW5kbGVyIGltcGxlbWVudHMgSVBsdWdpbkhhbmRsZXIge1xyXG4gIC8vIFRoYW5rcyB0byBmZWZsb3cgLT4gaHR0cHM6Ly9naXRodWIuY29tL2ZlZmxvdy9mZWZsb3cvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL2luc3RhbGwvcGx1Z2luLmpzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGFzeW5jIGluc3RhbGwgKHBsdWdpbnM6IHN0cmluZ1tdLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52PzogSVByb2Nlc3NFbnYpOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBzdHJpbmdbXSA9IFtdXHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcclxuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAvLyBkZXRlY3QgaWYgaGFzIGFscmVhZHkgaW5zdGFsbGVkXHJcbiAgICAgICAgLy8gb3Igd2lsbCBjYXVzZSBlcnJvclxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5wbHVnaW5Mb2FkZXIuaGFzUGx1Z2luKGl0ZW0ucGtnTmFtZSkpIHtcclxuICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChpdGVtLnBrZ05hbWUpXHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2VzcyhgUGljR28gaGFzIGFscmVhZHkgaW5zdGFsbGVkICR7aXRlbS5wa2dOYW1lfWApXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgc29tZXRoaW5nIHdyb25nLCBmaWx0ZXIgaXQgb3V0XHJcbiAgICAgICAgaWYgKCFpdGVtLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgY29uc3QgZnVsbE5hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5mdWxsTmFtZSlcclxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxyXG4gICAgaWYgKGZ1bGxOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIGluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBmdWxsTmFtZUxpc3Q6XHJcbiAgICAgIC8vIDEuIGluc3RhbGwgcmVtb3RlIHBhY2FnZVxyXG4gICAgICAvLyAyLiBpbnN0YWxsIGxvY2FsIHBhY2FnZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCdpbnN0YWxsJywgZnVsbE5hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3R4LnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbFN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGluc3RhbGxlZFBsdWdpbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbFN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgfSlcclxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1bmluc3RhbGwgKHBsdWdpbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xyXG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpLmZpbHRlcihpdGVtID0+IGl0ZW0uc3VjY2VzcylcclxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxyXG4gICAgaWYgKHBrZ05hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gdW5pbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgcGtnTmFtZUxpc3Q6XHJcbiAgICAgIC8vIG5wbSB1bmluc3RhbGwgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgndW5pbnN0YWxsJywgcGtnTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3R4LnBsdWdpbkxvYWRlci51bnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbFN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGUgKHBsdWdpbnM6IHN0cmluZ1tdLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52PzogSVByb2Nlc3NFbnYpOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1cGRhdGUgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVwZGF0ZSB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1cGRhdGUnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpciwgb3B0aW9ucywgZW52KVxyXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVTdWNjZXNzJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTJyksXHJcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxyXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlRmFpbGVkJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQnKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfSlcclxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjQ29tbWFuZCAoY21kOiBzdHJpbmcsIG1vZHVsZXM6IHN0cmluZ1tdLCB3aGVyZTogc3RyaW5nLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52OiBJUHJvY2Vzc0VudiA9IHt9KTogUHJvbWlzZTxJUmVzdWx0PiB7XHJcbiAgICAvLyBvcHRpb25zIGZpcnN0XHJcbiAgICBjb25zdCByZWdpc3RyeSA9IG9wdGlvbnMucmVnaXN0cnkgfHwgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5yZWdpc3RyeScpXHJcbiAgICBjb25zdCBwcm94eSA9IG9wdGlvbnMucHJveHkgfHwgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5wcm94eScpXHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmU6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgICBsZXQgYXJncyA9IFtjbWRdLmNvbmNhdChtb2R1bGVzKS5jb25jYXQoJy0tY29sb3I9YWx3YXlzJykuY29uY2F0KCctLXNhdmUnKVxyXG4gICAgICBpZiAocmVnaXN0cnkpIHtcclxuICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoYC0tcmVnaXN0cnk9JHtyZWdpc3RyeX1gKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm94eSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1wcm94eT0ke3Byb3h5fWApXHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBucG0gPSBzcGF3bignbnBtJywgYXJncywgeyBjd2Q6IHdoZXJlLCBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCBlbnYpIH0pXHJcblxyXG4gICAgICAgIGxldCBvdXRwdXQgPSAnJ1xyXG4gICAgICAgIG5wbS5zdGRvdXQ/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3Rkb3V0KVxyXG5cclxuICAgICAgICBucG0uc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIG91dHB1dCArPSBkYXRhXHJcbiAgICAgICAgfSkucGlwZShwcm9jZXNzLnN0ZGVycilcclxuXHJcbiAgICAgICAgbnBtLm9uKCdjbG9zZScsIChjb2RlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGlmICghY29kZSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZTogMCwgZGF0YTogb3V0cHV0IH0pXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZTogY29kZSwgZGF0YTogb3V0cHV0IH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBmb3IgdXNlcnMgd2hvIGhhdmVuJ3QgaW5zdGFsbGVkIG5vZGUuanNcclxuICAgICAgICBucG0ub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsICdOUE0gaXMgbm90IGluc3RhbGxlZCcpXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogdHJhbnNmb3JtIHRoZSBpbnB1dCBwbHVnaW4gbmFtZSBvciBwYXRoIHN0cmluZyB0byB2YWxpZCByZXN1bHRcclxuICogQHBhcmFtIGN0eFxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxyXG4gKi9cclxuY29uc3QgaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MgPSAoY3R4OiBJUGljR28sIG5hbWVPclBhdGg6IHN0cmluZyk6IElQbHVnaW5Qcm9jZXNzUmVzdWx0ID0+IHtcclxuICBjb25zdCByZXMgPSB7XHJcbiAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgIGZ1bGxOYW1lOiAnJyxcclxuICAgIHBrZ05hbWU6ICcnXHJcbiAgfVxyXG4gIGNvbnN0IHJlc3VsdCA9IGdldFByb2Nlc3NQbHVnaW5OYW1lKG5hbWVPclBhdGgsIGN0eC5sb2cpXHJcbiAgaWYgKCFyZXN1bHQpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgLy8gZmlyc3QgZ2V0IHJlc3VsdCB0aGVuIGRvIHRoaXMgcHJvY2Vzc1xyXG4gIC8vIG9yIHNvbWUgZXJyb3Igd2lsbCBsb2cgdHdpY2VcclxuICBjb25zdCBwa2dOYW1lID0gZ2V0Tm9ybWFsUGx1Z2luTmFtZShyZXN1bHQsIGN0eC5sb2cpXHJcbiAgaWYgKCFwa2dOYW1lKSB7XHJcbiAgICByZXR1cm4gcmVzXHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgZnVsbE5hbWU6IHJlc3VsdCxcclxuICAgIHBrZ05hbWVcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkhhbmRsZXJcclxuIiwiaW1wb3J0IHsgWkhfQ04sIElMb2NhbGVzS2V5LCBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJ1xyXG5cclxuaW1wb3J0IHsgT2JqZWN0QWRhcHRlciwgSTE4biB9IGZyb20gJ0BwaWNnby9pMThuJ1xyXG5pbXBvcnQgeyBJU3RyaW5nS2V5TWFwLCBJSTE4bk1hbmFnZXIgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgSUxvY2FsZSB9IGZyb20gJ0BwaWNnby9pMThuL2Rpc3QvdHlwZXMnXHJcbmltcG9ydCB7IEVOIH0gZnJvbSAnLi9lbidcclxuaW1wb3J0IHsgWkhfVFcgfSBmcm9tICcuL3poLVRXJ1xyXG5cclxuY29uc3QgbGFuZ3VhZ2VMaXN0OiBJU3RyaW5nS2V5TWFwPElTdHJpbmdLZXlNYXA8c3RyaW5nPj4gPSB7XHJcbiAgJ3poLUNOJzogWkhfQ04sXHJcbiAgJ3poLVRXJzogWkhfVFcsXHJcbiAgZW46IEVOXHJcbn1cclxuXHJcbmNsYXNzIEkxOG5NYW5hZ2VyIGltcGxlbWVudHMgSUkxOG5NYW5hZ2VyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGkxOG46IEkxOG5cclxuICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdEFkYXB0ZXI6IE9iamVjdEFkYXB0ZXJcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyID0gbmV3IE9iamVjdEFkYXB0ZXIobGFuZ3VhZ2VMaXN0KVxyXG4gICAgbGV0IGxhbmd1YWdlID0gdGhpcy5jdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xyXG4gICAgaWYgKCFsYW5ndWFnZUxpc3RbbGFuZ3VhZ2VdKSB7XHJcbiAgICAgIGxhbmd1YWdlID0gJ3poLUNOJyAvLyB1c2UgZGVmYXVsdFxyXG4gICAgfVxyXG4gICAgdGhpcy5pMThuID0gbmV3IEkxOG4oe1xyXG4gICAgICBhZGFwdGVyOiB0aGlzLm9iamVjdEFkYXB0ZXIsXHJcbiAgICAgIGRlZmF1bHRMYW5ndWFnZTogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgICB0aGlzLmxvYWRPdXR0ZXJJMThuKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZE91dHRlckkxOG4gKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaTE4bkZvbGRlciA9IHRoaXMuZ2V0T3V0dGVySTE4bkZvbGRlcigpXHJcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGkxOG5Gb2xkZXIsIHtcclxuICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZVxyXG4gICAgfSlcclxuICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgIGlmIChmaWxlLmlzRmlsZSgpICYmIGZpbGUubmFtZS5lbmRzV2l0aCgnLnltbCcpKSB7XHJcbiAgICAgICAgY29uc3QgaTE4bkZpbGVQYXRoID0gcGF0aC5qb2luKGkxOG5Gb2xkZXIsIGZpbGUubmFtZSlcclxuICAgICAgICBjb25zdCBpMThuRmlsZSA9IGZzLnJlYWRGaWxlU3luYyhpMThuRmlsZVBhdGgsICd1dGY4JylcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgaTE4bkZpbGVPYmogPSB5YW1sLmxvYWQoaTE4bkZpbGUpIGFzIElMb2NhbGVzXHJcbiAgICAgICAgICBsYW5ndWFnZUxpc3RbZmlsZS5uYW1lLnJlcGxhY2UoL1xcLnltbCQvLCAnJyldID0gaTE4bkZpbGVPYmpcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPdXR0ZXJJMThuRm9sZGVyICgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaTE4bkZvbGRlciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnaTE4bi1jbGknKVxyXG4gICAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyhpMThuRm9sZGVyKSkge1xyXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGkxOG5Gb2xkZXIpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gaTE4bkZvbGRlclxyXG4gIH1cclxuXHJcbiAgdHJhbnNsYXRlPFQgZXh0ZW5kcyBzdHJpbmc+KGtleTogSUxvY2FsZXNLZXkgfCBULCBhcmdzPzogSVN0cmluZ0tleU1hcDxzdHJpbmc+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmkxOG4udHJhbnNsYXRlKGtleSwgYXJncykgfHwga2V5XHJcbiAgfVxyXG5cclxuICBzZXRMYW5ndWFnZSAobGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pMThuLnNldExhbmd1YWdlKGxhbmd1YWdlKVxyXG4gICAgdGhpcy5jdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdzZXR0aW5ncy5sYW5ndWFnZSc6IGxhbmd1YWdlXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkTG9jYWxlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmICghb3JpZ2luTG9jYWxlcykge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld0xvY2FsZXMgPSBtZXJnZShvcmlnaW5Mb2NhbGVzLCBsb2NhbGVzKVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbmV3TG9jYWxlcylcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBhZGRMYW5ndWFnZSAobGFuZ3VhZ2U6IHN0cmluZywgbG9jYWxlczogSUxvY2FsZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3JpZ2luTG9jYWxlcyA9IHRoaXMub2JqZWN0QWRhcHRlci5nZXRMb2NhbGUobGFuZ3VhZ2UpXHJcbiAgICBpZiAob3JpZ2luTG9jYWxlcykge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMub2JqZWN0QWRhcHRlci5zZXRMb2NhbGUobGFuZ3VhZ2UsIGxvY2FsZXMpXHJcbiAgICBsYW5ndWFnZUxpc3RbbGFuZ3VhZ2VdID0gbG9jYWxlc1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGdldExhbmd1YWdlTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxhbmd1YWdlTGlzdClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgSTE4bk1hbmFnZXJcclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IFpIX0NOID0ge1xyXG4gIFVQTE9BRF9GQUlMRUQ6ICfkuIrkvKDlpLHotKUnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55piv5ZCm5q2j56GuJyxcclxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueS7peWPiue9kee7nCcsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICfplJnor6/noIHvvJoke2NvZGV977yM6K+35omT5byA5rWP6KeI5Zmo57KY6LS05Zyw5Z2A5p+l55yL55u45YWz5Y6f5ZugJyxcclxuICBTRVJWRVJfRVJST1I6ICfmnI3liqHnq6/lh7rplJnvvIzor7fph43or5UnLFxyXG4gIEFVVEhfRkFJTEVEOiAn6K6k6K+B5aSx6LSlJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICflpIfnlKjkuIrkvKDln5/lkI0nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIEFsaS1jbG91ZFxyXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6K6+5a6aS2V5SWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICforr7lrppLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJpvc3MtY24tYmVpamluZycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gVGVuY2VudC1jbG91ZFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfohb7orq/kupFDT1MnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ+iuvuWumlNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+iuvuWumkFwcElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ+S+i+Wmgu+8mjEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaYXAtYmVpamluZycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlTW9ncjInLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+iuvuWumuS7k+W6k+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+iuvuWumuWIhuaUr+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAn5qC85byP77yadXNlcm5hbWUvcmVwbycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gcWluaXVcclxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvkupEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICforr7lrppBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICforr7lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAn6K6+5a6a6K6/6Zeu572R5Z2AJyxcclxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mnowJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+iuvuWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICforr7lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6K6+5a6a5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdnBsaXN0XHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+iuvuWumuaOpeWPo+e9keWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICflkK/nlKhTU0wnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPml7blkK/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5a+G56CBJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+iuvuWumuawtOWNsOexu+WeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6K+36YCJ5oup5rC05Y2w57G75Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pe25ZCv55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICforr7lrprmsLTljbDop5LluqYnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6K6+5a6a5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfor7fovpPlhaXmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+iuvuWumuawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6K6+5a6a5rC05Y2w55u45a+55LqO5Zu+54mH55qE5q+U5L6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ivt+i+k+WFpTAtMeeahOWwj+aVsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6K6+5a6a5rC05Y2w5a2X5L2T6aKc6ImyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ivt+i+k+WFpXJnYuminOiJsuWAvCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K6+5a6a5rC05Y2w5Zu+54mH6Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWbvueJh+i3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICforr7lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfor7fpgInmi6nmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICforr7lrprlm77niYfotKjph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6K+36L6T5YWlMC0xMDDnmoTmlbTmlbAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6L+b6KGM5qC85byP6L2s5o2iJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2s5o2i5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICforr7lrprovazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6K+36YCJ5oup6L2s5o2i5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6L+b6KGM5Zu+54mH57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnvKnmlL7ml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICforr7lrprnvKnmlL7lrr3luqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICforr7lrprnvKnmlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5Tov5vooYznvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6K6+5a6a57yp5pS+55m+5YiG5q+UJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpui/m+ihjOWbvueJh+aXi+i9rCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2s5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ+iuvuWumuaXi+i9rOinkuW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+ivt+i+k+WFpeaVsOWtl++8jOWPr+S4uui0n+aVsCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG5L+h5oGvJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAn6ZyA6KaB56e76ZmkRVhJRuS/oeaBr+aXtuWQr+eUqCcsXHJcblxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWuieijheaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOF5aSx6LSlJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICfmj5Lku7blronoo4XlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI3miJblkIjms5Xlronoo4Xot6/lvoQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi9veaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovb3lpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWNuOi9veWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246L295aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAn5o+S5Lu25pu05paw5aSx6LSlJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjSdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSUxvY2FsZXNLZXkgPSBrZXlvZiB0eXBlb2YgWkhfQ05cclxuZXhwb3J0IHR5cGUgSUxvY2FsZXMgPSB0eXBlb2YgWkhfQ05cclxuIiwiaW1wb3J0IHsgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBaSF9UVzogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprmmK/lkKbmraPnoronLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5Y+K57ay6LevJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivO+8miR7Y29kZX3vvIzoq4vmiZPplovngI/opr3lmajosrzkuIrlnLDlnYDmn6XnnIvnm7jpl5zljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXHJcbiAgQVVUSF9GQUlMRUQ6ICfoqo3orYnlpLHmlZcnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+WCmeeUqOS4iuWCs+e2suWdgCcsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICfoqK3lrppLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWumktleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6Kit5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6Kit5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6Kit5a6a5YCJ5bqr5ZCN56ixJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6Kit5a6a5YiG5pSv5ZCN56ixJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+ioreWumkFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICfoqK3lrproqKrllY/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6Kit5a6aQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+ioreWumlBST1hZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAn5Y+I5ouN5LqRJyxcclxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICfoqK3lrprmk43kvZzlk6EnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+ioreWumuaTjeS9nOWToeWvhueivCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICfoqK3lrprliqDpgJ/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ+i8uOWFpeaTjeS9nOWToeWvhueivCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG5cclxuICAvLyB3ZWJkYXZcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6Kit5a6aQVBJ5Li75qmfJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pmC5ZWf55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+ioreWumuWvhueivCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pmC5ZWf55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i8uOWFpeeUqOaItuWvhueivCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICfoqK3lrprmsLTljbDpoZ7lnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+iri+mBuOaTh+awtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6Kit5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+ioreWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6KuL6Ly45YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICfoqK3lrprmsLTljbDlrZfpq5QnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfoq4vovLjlhaXmsLTljbDlrZfpq5Tmlofku7bot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ioreWumuawtOWNsOWclueJh+avlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfoq4vovLjlhaUwLTHnmoTmlbjlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ioreWumuawtOWNsOWtl+mrlOmhj+iJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfoq4vovLjlhaVyZ2LpoY/oibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ioreWumuawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfoq4vovLjlhaXmsLTljbDlnJbniYfot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6Kit5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6KuL6YG45pOH5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAn6Kit5a6a5ZyW54mH6LOq6YePJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+iri+i8uOWFpTAtMTAw55qE5pW05pW4JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpumAsuihjOagvOW8j+i9ieaPmycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ+mcgOimgei9ieaPm+aZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6Kit5a6a6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+iri+mBuOaTh+i9ieaPm+agvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ+aYr+WQpumAsuihjOWclueJh+e4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57iu5pS+5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6Kit5a6a57iu5pS+5a+s5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6Kit5a6a57iu5pS+6auY5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAn5piv5ZCm5oyJ55m+5YiG5q+U6YCy6KGM57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+ioreWumue4ruaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfoq4vovLjlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbpgLLooYzlnJbniYfml4vovYknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9ieaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfoq4vovLjlhaXmlbjlrZfvvIzlj6/ngrrosqDmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuizh+ioiicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxyXG5cclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijneWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijneWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovInmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246LyJ5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnXHJcbn1cclxuIiwiaW1wb3J0IHsgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBFTjogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ1VwbG9hZCBmYWlsZWQnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MnLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MgYW5kIG5ldHdvcmsnLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAnRXJyb3IgY29kZTogJHtjb2RlfSwgcGxlYXNlIG9wZW4gdGhlIGJyb3dzZXIgYW5kIHBhc3RlIHRoZSBhZGRyZXNzIHRvIHNlZSB0aGUgcmVhc29uJyxcclxuICBTRVJWRVJfRVJST1I6ICdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLFxyXG4gIEFVVEhfRkFJTEVEOiAnQXV0aGVudGljYXRpb24gZmFpbGVkJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAnU2V0IEJhY2t1cCBVcGxvYWQgRG9tYWluJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICdFeC4gc21tcy5hcHAnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ1NldCBLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAnU2V0IFNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAnRXguIDEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHA6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICdTZXQgUmVwbyBOYW1lJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ1NldCBDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAnU2V0IFByb3h5JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ0V4LiBodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ1VweXVuJyxcclxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAnU2V0IE9wZXJhdG9yJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICdTZXQgT3BlcmF0b3IgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICdTZXQgVVJMJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgb3BlcmF0b3IgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ0V4LiBodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAnRXguICFpbWdzbGltJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2XHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ1NldCBIb3N0JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiBodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICdFeC4gbWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIHBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAnU2V0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdXaGV0aGVyIHRvIHVzZSBmdWxsLXNjcmVlbiB3YXRlcm1hcmsnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gZnVsbC1zY3JlZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ1NldCB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICdTZXQgd2F0ZXJtYXJrIGZvbnQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBmb250IGZpbGUgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICdQbGVhc2UgZW50ZXIgYSBudW1iZXIgYmV0d2VlbiAwLTEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1NldCB3YXRlcm1hcmsgZm9udCBjb2xvcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAnU2V0IHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ1BsZWFzZSBzZWxlY3Qgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAnU2V0IGltYWdlIHF1YWxpdHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAwLTEwMCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICdXaGV0aGVyIHRvIHBlcmZvcm0gZm9ybWF0IGNvbnZlcnNpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICdFbmFibGUgd2hlbiBmb3JtYXQgY29udmVyc2lvbiBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ1BsZWFzZSBzZWxlY3QgY29udmVyc2lvbiBmb3JtYXQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAnU2V0IHJlc2l6aW5nIHdpZHRoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZSBieSBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICdTZXQgcmVzaXppbmcgcGVyY2VudGFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICdXaGV0aGVyIHRvIHJvdGF0ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ0VuYWJsZSB3aGVuIGltYWdlIHJvdGF0aW9uIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ1NldCByb3RhdGlvbiBhbmdsZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlciwgY2FuIGJlIG5lZ2F0aXZlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ1doZXRoZXIgdG8gcmVtb3ZlIEVYSUYgaW5mb3JtYXRpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICdFbmFibGUgd2hlbiByZW1vdmluZyBFWElGIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkJyxcclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lIG9yIHZhbGlkIGluc3RhbGxhdGlvbiBwYXRoJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gdW5pbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICdQbHVnaW4gdXBkYXRlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnXHJcbn1cclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcydcclxuaW1wb3J0IENvbW1hbmRlciBmcm9tICcuLi9saWIvQ29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9saWIvTG9nZ2VyJ1xyXG5pbXBvcnQgTGlmZWN5Y2xlIGZyb20gJy4vTGlmZWN5Y2xlJ1xyXG5pbXBvcnQgTGlmZWN5Y2xlUGx1Z2lucywgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4uL2xpYi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5pbXBvcnQgdXBsb2FkZXJzIGZyb20gJy4uL3BsdWdpbnMvdXBsb2FkZXInXHJcbmltcG9ydCB0cmFuc2Zvcm1lcnMgZnJvbSAnLi4vcGx1Z2lucy90cmFuc2Zvcm1lcidcclxuaW1wb3J0IFBsdWdpbkxvYWRlciBmcm9tICcuLi9saWIvUGx1Z2luTG9hZGVyJ1xyXG5pbXBvcnQgeyBnZXQsIHNldCwgdW5zZXQgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IElIZWxwZXIsIElJbWdJbmZvLCBJQ29uZmlnLCBJUGljR28sIElTdHJpbmdLZXlNYXAsIElQbHVnaW5Mb2FkZXIsIElJMThuTWFuYWdlciwgSVBpY0dvUGx1Z2luLCBJUGljR29QbHVnaW5JbnRlcmZhY2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBnZXRDbGlwYm9hcmRJbWFnZSBmcm9tICcuLi91dGlscy9nZXRDbGlwYm9hcmRJbWFnZSdcclxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vbGliL1JlcXVlc3QnXHJcbmltcG9ydCBEQiBmcm9tICcuLi91dGlscy9kYidcclxuaW1wb3J0IFBsdWdpbkhhbmRsZXIgZnJvbSAnLi4vbGliL1BsdWdpbkhhbmRsZXInXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQsIElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcbmltcG9ydCB7IGlzQ29uZmlnS2V5SW5CbGFja0xpc3QsIGlzSW5wdXRDb25maWdWYWxpZCB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSTE4bk1hbmFnZXIgfSBmcm9tICcuLi9pMThuJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFBpY0dvIGV4dGVuZHMgRXZlbnRFbWl0dGVyIGltcGxlbWVudHMgSVBpY0dvIHtcclxuICBwcml2YXRlIF9jb25maWchOiBJQ29uZmlnXHJcbiAgcHJpdmF0ZSBsaWZlY3ljbGUhOiBMaWZlY3ljbGVcclxuICBwcml2YXRlIGRiITogREJcclxuICBwcml2YXRlIF9wbHVnaW5Mb2FkZXIhOiBQbHVnaW5Mb2FkZXJcclxuICBjb25maWdQYXRoOiBzdHJpbmdcclxuICBiYXNlRGlyITogc3RyaW5nXHJcbiAgaGVscGVyITogSUhlbHBlclxyXG4gIGxvZzogTG9nZ2VyXHJcbiAgY21kOiBDb21tYW5kZXJcclxuICBvdXRwdXQ6IElJbWdJbmZvW11cclxuICBpbnB1dDogYW55W11cclxuICBwbHVnaW5IYW5kbGVyOiBQbHVnaW5IYW5kbGVyXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIHYxLjUuMCtcclxuICAgKlxyXG4gICAqIHVzZSByZXF1ZXN0IGluc3RlYWRcclxuICAgKi9cclxuICBSZXF1ZXN0ITogUmVxdWVzdFxyXG4gIGkxOG4hOiBJSTE4bk1hbmFnZXJcclxuICBWRVJTSU9OOiBzdHJpbmcgPSBwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OXHJcbiAgR1VJX1ZFUlNJT04/OiBzdHJpbmdcclxuXHJcbiAgZ2V0IHBsdWdpbkxvYWRlciAoKTogSVBsdWdpbkxvYWRlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGx1Z2luTG9hZGVyXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvciAoY29uZmlnUGF0aDogc3RyaW5nID0gJycpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhcclxuICAgIHRoaXMub3V0cHV0ID0gW11cclxuICAgIHRoaXMuaW5wdXQgPSBbXVxyXG4gICAgdGhpcy5oZWxwZXIgPSB7XHJcbiAgICAgIHRyYW5zZm9ybWVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndHJhbnNmb3JtZXInKSxcclxuICAgICAgdXBsb2FkZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd1cGxvYWRlcicpLFxyXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxyXG4gICAgICBiZWZvcmVVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVXBsb2FkUGx1Z2lucycpLFxyXG4gICAgICBhZnRlclVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdhZnRlclVwbG9hZFBsdWdpbnMnKVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Q29uZmlnUGF0aCgpXHJcbiAgICB0aGlzLmxvZyA9IG5ldyBMb2dnZXIodGhpcylcclxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxyXG4gICAgdGhpcy5wbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIodGhpcylcclxuICAgIHRoaXMuaW5pdENvbmZpZygpXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSBob21lZGlyKCkgKyAnLy5waWNsaXN0L2NvbmZpZy5qc29uJ1xyXG4gICAgfVxyXG4gICAgaWYgKHBhdGguZXh0bmFtZSh0aGlzLmNvbmZpZ1BhdGgpLnRvVXBwZXJDYXNlKCkgIT09ICcuSlNPTicpIHtcclxuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgfVxyXG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcclxuICAgIGNvbnN0IGV4aXN0ID0gZnMucGF0aEV4aXN0c1N5bmModGhpcy5jb25maWdQYXRoKVxyXG4gICAgaWYgKCFleGlzdCkge1xyXG4gICAgICBmcy5lbnN1cmVGaWxlU3luYyhgJHt0aGlzLmNvbmZpZ1BhdGh9YClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXHJcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRiLnJlYWQodHJ1ZSkgYXMgSUNvbmZpZ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGluaXQgMThuIGF0IGZpcnN0XHJcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxyXG4gICAgICB0aGlzLlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzKVxyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIgPSBuZXcgUGx1Z2luTG9hZGVyKHRoaXMpXHJcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXHJcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCdwaWNnbycpXHJcbiAgICAgIHVwbG9hZGVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICB0cmFuc2Zvcm1lcnModGhpcykucmVnaXN0ZXIodGhpcylcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJycpXHJcbiAgICAgIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgIHRoaXMubGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSh0aGlzKVxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIHRoaXMubG9nLmVycm9yKGUpXHJcbiAgICAgIHRocm93IGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGVhc2lseSBtYW5udWFsbHkgbG9hZCBhIHBsdWdpblxyXG4gICAqIGlmIHByb3ZpZGUgcGx1Z2luIG5hbWUsIHdpbGwgcmVnaXN0ZXIgcGx1Z2luIGJ5IG5hbWVcclxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXHJcbiAgICovXHJcbiAgdXNlIChwbHVnaW46IElQaWNHb1BsdWdpbiwgbmFtZT86IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHBsdWdpbih0aGlzKVxyXG4gICAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5jbWQuaW5pdCgpXHJcbiAgICAgIHRoaXMuY21kLmxvYWRDb21tYW5kcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWc8VD4gKG5hbWU/OiBzdHJpbmcpOiBUIHtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIHVua25vd24gYXMgVFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGdldCh0aGlzLl9jb25maWcsIG5hbWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlnIChjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcclxuICAgIHRoaXMuZGIuc2F2ZUNvbmZpZyhjb25maWcpXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXHJcbiAgICB0aGlzLmRiLnVuc2V0KGtleSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcclxuICAgICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7bmFtZX0gY2FuJ3QgYmUgbW9kaWZpZWRgKVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcclxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXHJcbiAgICAgIH1cclxuICAgICAgc2V0KHRoaXMuX2NvbmZpZywgbmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XHJcbiAgICAgICAgY29uZmlnTmFtZTogbmFtZSxcclxuICAgICAgICB2YWx1ZTogY29uZmlnW25hbWVdXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdW5zZXRDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBnZXQgcmVxdWVzdCAoKTogSVJlcXVlc3RbJ3JlcXVlc3QnXSB7XHJcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWQgKGlucHV0PzogYW55W10pOiBQcm9taXNlPElJbWdJbmZvW10gfCBFcnJvcj4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgICByZXR1cm4gW11cclxuICAgIH1cclxuICAgIC8vIHVwbG9hZCBmcm9tIGNsaXBib2FyZFxyXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgeyBpbWdQYXRoLCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgfSA9IGF3YWl0IGdldENsaXBib2FyZEltYWdlKHRoaXMpXHJcbiAgICAgICAgaWYgKGltZ1BhdGggPT09ICdubyBpbWFnZScpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZBSUxFRCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xyXG4gICAgICAgICAgICAgIC8vIOWIoOmZpCBwaWNnbyDnlJ/miJDnmoTlm77niYfmlofku7bvvIzkvovlpoIgYH4vLnBpY2dvLzIwMjAwNjIxMjA1NzIwLnBuZ2BcclxuICAgICAgICAgICAgICBmcy5yZW1vdmUoaW1nUGF0aCkuY2F0Y2goKGUpID0+IHsgdGhpcy5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMub25jZSgnZmluaXNoZWQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgZnMucmVtb3ZlKGltZ1BhdGgpLmNhdGNoKChlKSA9PiB7IHRoaXMubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdKVxyXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHVwbG9hZCBmcm9tIHBhdGhcclxuICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0KVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBJbWdGcm9tUGF0aCBmcm9tICcuL3BhdGgnXHJcbmltcG9ydCBJbWdGcm9tQmFzZTY0IGZyb20gJy4vYmFzZTY0J1xyXG5cclxuY29uc3QgYnVpbGRJblRyYW5zZm9ybWVyczogSVBpY0dvUGx1Z2luID0gKCkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICByZWdpc3RlciAoY3R4OiBJUGljR28pIHtcclxuICAgICAgY3R4LmhlbHBlci50cmFuc2Zvcm1lci5yZWdpc3RlcigncGF0aCcsIEltZ0Zyb21QYXRoKVxyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdiYXNlNjQnLCBJbWdGcm9tQmFzZTY0KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblRyYW5zZm9ybWVyc1xyXG4iXSwibmFtZXMiOlsicGx1Z2luSGFuZGxlciIsImhhbmRsZSIsImN0eCIsImNtZCIsInByb2dyYW0iLCJjb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGlhcyIsIm9wdGlvbiIsImFjdGlvbiIsInBsdWdpbnMiLCJwcm94eSIsInJlZ2lzdHJ5Iiwib3B0aW9ucyIsImluc3RhbGwiLCJjYXRjaCIsImUiLCJsb2ciLCJlcnJvciIsInVuaW5zdGFsbCIsInVwZGF0ZSIsImNvbmZpZyIsImlzVXJsIiwidXJsIiwidGVzdCIsImhhbmRsZVVybEVuY29kZSIsImRlY29kZVVSSSIsImlzVXJsRW5jb2RlIiwiZW5jb2RlVVJJIiwiZ2V0SW1hZ2VTaXplIiwiZmlsZSIsIndpZHRoIiwiaGVpZ2h0IiwiaW1hZ2VTaXplIiwicmVhbCIsImdldFVSTEZpbGUiLCJhc3luYyIsInRpbWVvdXRJZCIsInJlcXVlc3RGbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzIiwicmVxdWVzdCIsIm1ldGhvZCIsInJlc29sdmVXaXRoRnVsbFJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwidGhlbiIsInJlc3AiLCJkYXRhIiwiY2xlYXJUaW1lb3V0IiwidXJsUGF0aCIsIlVSTCIsInBhdGhuYW1lIiwiYnVmZmVyIiwiZmlsZU5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJleHRuYW1lIiwic3VjY2VzcyIsInJlYXNvbiIsIm1lc3NhZ2UiLCJ0aW1lb3V0UHJvbWlzZSIsInNldFRpbWVvdXQiLCJyYWNlIiwiZ2V0UGx1Z2luTmFtZVR5cGUiLCJuYW1lIiwic3RhcnRzV2l0aCIsImlzU2ltcGxlTmFtZSIsIm5hbWVPclBhdGgiLCJpc0Fic29sdXRlIiwicGx1Z2luUGF0aCIsImpvaW4iLCJwcm9jZXNzIiwiY3dkIiwiZnMiLCJleGlzdHNTeW5jIiwiaW5jbHVkZXMiLCJoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUiLCJzY29wZSIsImhhbmRsZVVuaXhTdHlsZVBhdGgiLCJwYXRoU3RyIiwic3BsaXQiLCJzZXAiLCJyZW1vdmVQbHVnaW5WZXJzaW9uIiwicmVnIiwibWF0Y2hBcnIiLCJtYXRjaCIsImNvbnNvbGUiLCJ3YXJuIiwiY29uZmlnQmxhY2tMaXN0IiwiaXNDb25maWdLZXlJbkJsYWNrTGlzdCIsImtleSIsInNvbWUiLCJibGFja0l0ZW0iLCJpc0lucHV0Q29uZmlnVmFsaWQiLCJBcnJheSIsImlzQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiZm9yY2VOdW1iZXIiLCJudW0iLCJpc05hTiIsIk51bWJlciIsImRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGgiLCJfX2Rpcm5hbWUiLCJBZGRXYXRlcm1hcmsiLCJpbWciLCJ3YXRlcm1hcmtUeXBlIiwiZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIiwiaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIiwid2F0ZXJtYXJrRGVncmVlIiwidGV4dCIsIndhdGVybWFya0ZvbnRQYXRoIiwid2F0ZXJtYXJrU2NhbGVSYXRpbyIsIndhdGVybWFya0NvbG9yIiwid2F0ZXJtYXJrSW1hZ2VQYXRoIiwicG9zaXRpb24iLCJpbWFnZSIsInNoYXJwIiwiaW1nV2lkdGgiLCJtZXRhZGF0YSIsIndhdGVybWFyayIsInRvQnVmZmVyIiwiY29sb3IiLCJmb250RmFtaWx5IiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImZpbGwiLCJ0ZXh0U1ZHIiwiVGV4dFRvU1ZHIiwibG9hZFN5bmMiLCJnZXRTVkciLCJCdWZmZXIiLCJmcm9tIiwidGV4dDJTVkciLCJ3YXRlcm1hcmtXaWR0aCIsIndhdGVybWFya0hlaWdodCIsImdldFNpemUiLCJ3YXRlcm1hcmtSZXNpemVXaWR0aCIsIk1hdGgiLCJmbG9vciIsIndhdGVybWFya1Jlc2l6ZUhlaWdodCIsInJlc2l6ZSIsImZpdCIsInJvdGF0ZSIsImJhY2tncm91bmQiLCJyIiwiZyIsImIiLCJhbHBoYSIsImNyZWF0ZVdhdGVybWFyayIsImNvbXBvc2l0ZSIsImlucHV0IiwiZ3Jhdml0eSIsInRpbGUiLCJ2YWxpZFBhcmFtIiwicGFyYW1zIiwiZXZlcnkiLCJwYXJhbSIsImF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0IiwiaW1hZ2VFeHRMaXN0IiwiaW1hZ2VBZGRXYXRlck1hcmsiLCJ3YXRlcm1hcmtUZXh0Iiwid2F0ZXJtYXJrUG9zaXRpb24iLCJmb3JtYXRPcHRpb25zIiwicXVhbGl0eSIsImlzQ29udmVydCIsImNvbnZlcnRGb3JtYXQiLCJpc1JlU2l6ZSIsInJlU2l6ZUhlaWdodCIsInJlU2l6ZVdpZHRoIiwiaXNSZVNpemVCeVBlcmNlbnQiLCJyZVNpemVQZXJjZW50IiwiaXNSb3RhdGUiLCJyb3RhdGVEZWdyZWUiLCJpbWFnZVByb2Nlc3MiLCJyYXdGb3JtYXQiLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJyb3VuZCIsIm5ld0Zvcm1hdCIsInRvRm9ybWF0IiwiZm9ybWF0IiwiaW1hZ2VGb3JtYXRMaXN0IiwibmVlZEFkZFdhdGVybWFyayIsIndhdGVybWFya09wdGlvbnMiLCJmaWxlRXh0IiwiaXNBZGRXYXRlcm1hcmsiLCJuZWVkQ29tcHJlc3MiLCJjb21wcmVzc09wdGlvbnMiLCJyZW1vdmVFeGlmIiwidXBsb2FkIiwiYXJndW1lbnRzIiwiaW5wdXRMaXN0IiwibWFwIiwiaXRlbSIsImZpbHRlciIsImV4aXN0IiwidXNlckNvbmZpZyIsImdldENvbmZpZyIsInR5cGUiLCJpMThuIiwidHJhbnNsYXRlIiwicmVxdWlyZWQiLCJkZWZhdWx0IiwiY2hvaWNlcyIsImlzUmVtb3ZlRXhpZiIsImhhbmRsZUNvbmZpZyIsInByb21wdHMiLCJtb2R1bGUiLCJhbnN3ZXIiLCJpbnF1aXJlciIsInByb21wdCIsImNvbmZpZ05hbWUiLCJzYXZlQ29uZmlnIiwic2V0dGluZyIsImNvbXByZXNzIiwiYnVpbGRpbiIsImhlbHBlciIsImdldCIsImdldElkTGlzdCIsInBsdWdpbkxvYWRlciIsImdldFBsdWdpbiIsImdldEZ1bGxMaXN0IiwicGx1Z2luIiwidXNlTW9kdWxlTmFtZSIsImluZm8iLCJhcmd2IiwidXNlIiwidXBsb2FkZXIiLCJ0cmFuc2Zvcm1lciIsInB1c2giLCJwaWNnb1BsdWdpbnMiLCJzZXRDb25maWciLCJnZW5lcmF0ZSIsIm9wdHMiLCJnZXRPcHRpb25zIiwidG1wIiwic291cmNlIiwiYW5zd2VycyIsIl9maWxlcyIsImdsb2JieSIsImRvdCIsImdsb2IiLCJmaWx0ZXJzIiwiZm9yRWFjaCIsImZpbGVzIiwicmVuZGVyIiwid3JpdGVGaWxlVHJlZSIsImRlc3QiLCJjb21wbGV0ZSIsImNvbXBsZXRlTWVzc2FnZSIsImV4cCIsImZuIiwiRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwidGVtcGxhdGVQYXRoIiwib3B0aW9uc1BhdGgiLCJyZXF1aXJlIiwiZmlsZVRyZWUiLCJmaWxlUGF0aCIsInJlYWRGaWxlU3luYyIsImNvbnRlbnQiLCJlanMiLCJpc0J1ZmZlciIsImRpciIsImVuc3VyZURpclN5bmMiLCJkaXJuYW1lIiwid3JpdGVGaWxlU3luYyIsInJ1biIsIm9mZmxpbmUiLCJ0ZW1wbGF0ZSIsImhhc1NsYXNoIiwiZG93bmxvYWRBbmRHZW5lcmF0ZSIsInJtIiwic3luYyIsImRvd25sb2FkIiwiY2xvbmUiLCJlcnIiLCJpbml0IiwicHJvamVjdCIsImluUGxhY2UiLCJob21lZGlyIiwib2siLCJvbiIsImNoYWxrIiwiZ3JheSIsImxhbmciLCJsaXN0IiwiZ2V0TGFuZ3VhZ2VMaXN0Iiwic2V0TGFuZ3VhZ2UiLCJMaWZlY3ljbGVQbHVnaW5zIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiTWFwIiwicGx1Z2luSWRNYXAiLCJyZWdpc3RlciIsImlkIiwiVHlwZUVycm9yIiwiaGFzIiwic2V0IiwiY3VycmVudFBsdWdpbiIsInVucmVnaXN0ZXIiLCJwbHVnaW5OYW1lIiwicGx1Z2luTGlzdCIsImRlbGV0ZSIsImdldE5hbWUiLCJnZXRMaXN0IiwidmFsdWVzIiwic2V0Q3VycmVudFBsdWdpbk5hbWUiLCJDb21tYW5kZXIiLCJDb21tYW5kIiwidmVyc2lvbiIsImRlYnVnIiwic2lsZW50IiwiYXJncyIsImV4aXQiLCJjdXJyZW50UGx1Z2luTmFtZSIsImxvYWRDb21tYW5kcyIsIklMb2dUeXBlIiwiSUJ1aWxkSW5FdmVudCIsIklCdXNFdmVudCIsIkxvZ2dlciIsImhhbmRsZUxvZyIsIm1zZyIsImxvZ0hlYWRlciIsImxldmVsIiwidG9VcHBlckNhc2UiLCJsb2dMZXZlbCIsImxvZ1BhdGgiLCJiYXNlRGlyIiwicmVzdWx0IiwiY2hlY2tMb2dGaWxlSXNMYXJnZSIsImlzTGFyZ2UiLCJ3YXJuaW5nTXNnIiwieWVsbG93IiwicmVjcmVhdGVMb2dGaWxlIiwidW5zaGlmdCIsImhhbmRsZVdyaXRlTG9nIiwibG9nRmlsZVNpemUiLCJzdGF0U3luYyIsInNpemUiLCJsb2dGaWxlU2l6ZUxpbWl0IiwidW5saW5rU3luYyIsImNyZWF0ZUZpbGVTeW5jIiwiY2hlY2tMb2dMZXZlbCIsImRheWpzIiwiRXJyb3IiLCJ1dGlsIiwic3RhY2siLCJhcHBlbmRGaWxlU3luYyIsInVuZGVmaW5lZCIsImVudiIsIk5PREVfRU5WIiwiTGlmZWN5Y2xlIiwiRXZlbnRFbWl0dGVyIiwic3VwZXIiLCJ0ZW1wRmlsZVBhdGgiLCJlbXB0eURpclN5bmMiLCJ0dGZQYXRoIiwib3V0cHV0RGlyIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwiYXhpb3MiLCJ0dGZMaW5rIiwiY29uZmlnUGF0aCIsIm91dHB1dCIsIlJlcXVlc3QiLCJWRVJTSU9OIiwiR1VJX1ZFUlNJT04iLCJiaW5kIiwicmVtb3ZlQ29uZmlnIiwidW5zZXRDb25maWciLCJhZGRMaXN0ZW5lciIsIm9uY2UiLCJyZW1vdmVMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImxpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImVtaXQiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0Iiwid2F0ZXJtYXJrTXNnIiwiY29tcHJlc3NNc2ciLCJhbGxTZXR0bGVkIiwiaW5kZXgiLCJ0cmFuc2Zvcm1lZEJ1ZmZlciIsImRvd25sb2FkVFRGIiwibmV3RXh0IiwidGVtcEZpbGUiLCJEYXRlIiwiZ2V0VGltZSIsImJlZm9yZVRyYW5zZm9ybSIsImRvVHJhbnNmb3JtIiwiYmVmb3JlVXBsb2FkIiwiZG9VcGxvYWQiLCJhZnRlclVwbG9hZCIsIkZBSUxFRCIsIlVQTE9BRF9QUk9HUkVTUyIsIkJFRk9SRV9UUkFOU0ZPUk0iLCJoYW5kbGVQbHVnaW5zIiwiYmVmb3JlVHJhbnNmb3JtUGx1Z2lucyIsImN1cnJlbnRUcmFuc2Zvcm1lciIsIkJFRk9SRV9VUExPQUQiLCJiZWZvcmVVcGxvYWRQbHVnaW5zIiwib3V0cHV0SW1nIiwiQUZURVJfVVBMT0FEIiwiYWZ0ZXJVcGxvYWRQbHVnaW5zIiwiaSIsImltZ1VybCIsImJhc2U2NEltYWdlIiwiRklOSVNIRUQiLCJsaWZlQ3ljbGVQbHVnaW5zIiwicGx1Z2luTmFtZXMiLCJsaWZlQ3ljbGVOYW1lIiwiYWxsIiwicG9zdE9wdGlvbnMiLCJhcGlUb2tlbiIsImJhY2t1cERvbWFpbiIsImhlYWRlcnMiLCJjb250ZW50VHlwZSIsIkF1dGhvcml6YXRpb24iLCJmb3JtRGF0YSIsInNtZmlsZSIsInZhbHVlIiwiZmlsZW5hbWUiLCJzc2wiLCJzbW1zQ29uZmlnIiwiaW1nTGlzdCIsInBvc3RDb25maWciLCJ0b2tlbiIsImJvZHkiLCJwYXJzZSIsImNvZGUiLCJoYXNoIiwiaW1hZ2VzIiwiTk9USUZJQ0FUSU9OIiwidGl0bGUiLCJwcmVmaXgiLCJnZW5lcmF0ZVNpZ25hdHVyZSIsInNlY3JldElkIiwic2VjcmV0S2V5IiwiYXBwSWQiLCJidWNrZXQiLCJzaWduYXR1cmUiLCJzaWduVGltZSIsInRvZGF5Iiwic2lnbktleSIsImNyeXB0byIsImNyZWF0ZUhtYWMiLCJkaWdlc3QiLCJodHRwU3RyaW5nIiwiYXJlYSIsInN0cmluZ1RvU2lnbiIsImNyZWF0ZUhhc2giLCJyYW5kb20iLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsImNvbmNhdCIsInRvU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSG9zdCIsIm1pbWUiLCJsb29rdXAiLCJ1c2VyQWdlbnQiLCJvcCIsImZpbGVjb250ZW50IiwidGNZdW5PcHRpb25zIiwiY3VzdG9tVXJsIiwidXNlVjQiLCJzdGF0dXNDb2RlIiwib3B0aW9uVXJsIiwic291cmNlX3VybCIsInJlcG8iLCJqc29uIiwiZ2l0aHViT3B0aW9ucyIsImJyYW5jaCIsImRvd25sb2FkX3VybCIsInNoYSIsImltZ0Jhc2U2NCIsInNlbGVjdEFyZWEiLCJnZXRUb2tlbiIsInFpbml1T3B0aW9ucyIsImFjY2Vzc0tleSIsIm1hYyIsInFpbml1IiwiYXV0aCIsIk1hYyIsInJzIiwiUHV0UG9saWN5IiwidXBsb2FkVG9rZW4iLCJiYXNlVXJsIiwicmVzcG9uc2UiLCJvYmoiLCJjbGllbnRJZCIsImltZ3VyT3B0aW9ucyIsImxpbmsiLCJkZWxldGVoYXNoIiwiZGF0ZSIsInRvVVRDU3RyaW5nIiwibWltZVR5cGUiLCJzaWduU3RyaW5nIiwiYWNjZXNzS2V5U2VjcmV0IiwiYWNjZXNzS2V5SWQiLCJhbGlZdW5PcHRpb25zIiwib3BlcmF0b3IiLCJwYXNzd29yZCIsIm1kNVBhc3N3b3JkIiwiTUQ1IiwidXB5dW5PcHRpb25zIiwic3RyIiwic2FmZVBhcnNlIiwiaG9zdCIsInVzZXJuYW1lIiwid2ViZGF2cGxpc3RPcHRpb25zIiwic3NsRW5hYmxlZCIsImJ1aWxkSW5VcGxvYWRlcnMiLCJhbGlZdW5VcGxvYWRlciIsInRjWXVuVXBsb2FkZXIiLCJTTU1TVXBsb2FkZXIiLCJnaXRodWJVcGxvYWRlciIsInFpbml1VXBsb2FkZXIiLCJpbWd1clVwbG9hZGVyIiwidXBZdW5VcGxvYWRlciIsIndlYmRhdnBsaXN0VXBsb2FkZXIiLCJnZXRJbWdTaXplIiwicmVzdWx0cyIsInJlYWRGaWxlIiwiZ2V0RlNGaWxlIiwiaW1nU2l6ZSIsIlBsdWdpbkxvYWRlciIsIlNldCIsInBhY2thZ2VQYXRoIiwicGtnIiwicmVwb3NpdG9yeSIsImxpY2Vuc2UiLCJyZXNvbHZlUGx1Z2luIiwiYmFzZWRpciIsImxvYWQiLCJwbHVnaW5EaXIiLCJyZWFkSlNPTlN5bmMiLCJkZXBzIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwcyIsImRldkRlcGVuZGVuY2llcyIsIm1vZHVsZXMiLCJyZWdpc3RlclBsdWdpbiIsImZ1bGxMaXN0IiwiYWRkIiwicGx1Z2luSW50ZXJmYWNlIiwicGx1Z2luTWFwIiwidW5yZWdpc3RlclBsdWdpbiIsImhhc1BsdWdpbiIsInBsYXRmb3JtMlNjcmlwdENvbnRlbnQiLCJkYXJ3aW4iLCJ3aW4zMiIsIndpbjEwIiwibGludXgiLCJ3c2wiLCJwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZSIsImdldENsaXBib2FyZEltYWdlIiwiaW1hZ2VQYXRoIiwiY3JlYXRlSW1hZ2VGb2xkZXIiLCJwbGF0Zm9ybSIsImlzV3NsIiwib3MiLCJyZWxlYXNlIiwiZ2V0Q3VycmVudFBsYXRmb3JtIiwic2NyaXB0UGF0aCIsImV4ZWN1dGlvbiIsInNwYXduIiwic3Rkb3V0IiwidHJpbSIsImltZ1BhdGgiLCJzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmciLCJldmVudEJ1cyIsImh0dHBzQWdlbnQiLCJodHRwcyIsIkFnZW50IiwibWF4VmVyc2lvbiIsIm1pblZlcnNpb24iLCJhcHBlbmRGb3JtRGF0YSIsImZvcm0iLCJhcHBlbmQiLCJyZXNwb25zZUludGVyY2VwdG9yIiwic3RhdHVzIiwicmVzcG9uc2VFcnJvckhhbmRsZXIiLCJlcnJvck9iaiIsIkNPTkZJR19DSEFOR0UiLCJoYW5kbGVQcm94eSIsInByb3h5T3B0aW9ucyIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicHJvdG9jb2wiLCJtYXhCb2R5TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhDb250ZW50TGVuZ3RoIiwidHVubmVsIiwiaHR0cHNPdmVySHR0cCIsImluc3RhbmNlIiwiY3JlYXRlIiwiaW50ZXJjZXB0b3JzIiwib3B0IiwiX19pc09sZE9wdGlvbnMiLCJGb3JtRGF0YSIsImFzc2lnbiIsImdldEhlYWRlcnMiLCJxcyIsInJlcXVlc3RJbnRlcmNlcHRvciIsIkNvbnRlbnRUeXBlIiwiREIiLCJkYiIsIkpTT05TdG9yZSIsInJlYWQiLCJmbHVzaCIsInVuc2V0IiwiUGx1Z2luSGFuZGxlciIsImluc3RhbGxlZFBsdWdpbnMiLCJwcm9jZXNzUGx1Z2lucyIsImhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzIiwicGtnTmFtZSIsImZ1bGxOYW1lTGlzdCIsImZ1bGxOYW1lIiwicGtnTmFtZUxpc3QiLCJleGVjQ29tbWFuZCIsIndoZXJlIiwibnBtIiwicGlwZSIsInN0ZGVyciIsImxvZ2dlciIsImdldFByb2Nlc3NQbHVnaW5OYW1lIiwicGFja2FnZUpTT05QYXRoIiwicG9zaXgiLCJnZXROb3JtYWxQbHVnaW5OYW1lIiwibGFuZ3VhZ2VMaXN0IiwiVVBMT0FEX0ZBSUxFRCIsIkNIRUNLX1NFVFRJTkdTIiwiQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksiLCJVUExPQURfRkFJTEVEX1JFQVNPTiIsIlNFUlZFUl9FUlJPUiIsIkFVVEhfRkFJTEVEIiwiUElDQkVEX1NNTVMiLCJQSUNCRURfU01NU19UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfQUxJQ0xPVUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUIiwiUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9BTElDTE9VRF9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9QUk9YWSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZIiwiUElDQkVEX1VQWVVOIiwiUElDQkVEX1VQWVVOX0JVQ0tFVCIsIlBJQ0JFRF9VUFlVTl9PUEVSQVRPUiIsIlBJQ0JFRF9VUFlVTl9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9QQVRIIiwiUElDQkVEX1VQWVVOX1VSTCIsIlBJQ0JFRF9VUFlVTl9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUIiwiUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9DT01QUkVTU19RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19JU1JPVEFURSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURSIsIkJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEgiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCIsImVuIiwiSTE4bk1hbmFnZXIiLCJvYmplY3RBZGFwdGVyIiwiT2JqZWN0QWRhcHRlciIsImxhbmd1YWdlIiwiSTE4biIsImFkYXB0ZXIiLCJkZWZhdWx0TGFuZ3VhZ2UiLCJsb2FkT3V0dGVySTE4biIsImkxOG5Gb2xkZXIiLCJnZXRPdXR0ZXJJMThuRm9sZGVyIiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwiaXNGaWxlIiwiZW5kc1dpdGgiLCJpMThuRmlsZVBhdGgiLCJpMThuRmlsZSIsImkxOG5GaWxlT2JqIiwieWFtbCIsInBhdGhFeGlzdHNTeW5jIiwiYWRkTG9jYWxlIiwibG9jYWxlcyIsIm9yaWdpbkxvY2FsZXMiLCJnZXRMb2NhbGUiLCJuZXdMb2NhbGVzIiwibWVyZ2UiLCJzZXRMb2NhbGUiLCJhZGRMYW5ndWFnZSIsIlBpY0dvIiwiaW5pdENvbmZpZ1BhdGgiLCJpbml0Q29uZmlnIiwiX3BsdWdpbkxvYWRlciIsImVuc3VyZUZpbGVTeW5jIiwiX2NvbmZpZyIsInVwbG9hZGVycyIsIkltZ0Zyb21QYXRoIiwiSW1nRnJvbUJhc2U2NCIsImxpZmVjeWNsZSIsInJlZ2lzdGVyQ29tbWFuZHMiLCJwcm9wTmFtZSIsInN0YXJ0IiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiZ2lDQUVBLE1BQU1BLEdBQXlCLENBQzdCQyxPQUFTQyxJQUVQLE1BQU1D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
|