diff --git a/status/dist/core.js b/status/dist/core.js
index c9294a2..e00f19b 100644
--- a/status/dist/core.js
+++ b/status/dist/core.js
@@ -835,7 +835,7 @@ Instructions: ${c.instructionsLink}`:"";showNotification(`${r.toUpperCase()} upd
`,u+=` }
`),u+=` }
`,u+=`}
-`,u}async function g(m,b,r=DC.DEFAULTS.TTL){const v=window.getToken(getPrimaryDnsId(),"admin");if(!v)throw new Error("DNS admin token not configured. Please set it in the Tokens menu.");const d=buildDomain(m),a=await secureFetch("/api/v1/dns/record",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:d,ip:b,ttl:r,token:v,server:SITE.dnsIp})});if(!a.ok){const s=await a.text();throw new Error(`DNS API Error: ${a.status} - ${s}`)}const p=await a.json();if(!p.success)throw new Error(`DNS Error: ${p.error||"Unknown error"}`);return p}async function h(m){const b={id:m.subdomain,name:m.name,logo:m.logo||`/assets/${m.subdomain}.png`};m.category&&(b.category=m.category),m.containerId&&(b.containerId=m.containerId);try{const r=await secureFetch("/api/v1/services",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!r.ok){const v=await r.json();throw new Error(v.error||"Failed to save service")}return await window.loadServices(),window.buildGrid(),b}catch(r){throw console.error("Failed to add service to config:",r),r}}async function f(m){const b=document.getElementById("service-subdomain-input").value.trim(),r=document.getElementById("service-ip-input").value.trim()||"localhost",v=document.getElementById("service-port-input").value.trim()||"80",d=await secureFetch("/api/v1/site",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:buildDomain(b),upstream:`${r}:${v}`,config:m})}),a=await d.json();if(!d.ok||!a.success)throw new Error(a.error||`Caddy API Error: ${d.status}`);return a}window.loadExistingCAs=l,window.generateCaddyConfig=o,window.createDnsRecord=g,window.addServiceToConfig=h,window.addToCaddyfile=f})(),(function(){let l=null;function o(r){l=r;const v=document.getElementById("service-edit-modal");document.getElementById("service-edit-title").textContent=`Edit ${r.name}`,document.getElementById("edit-service-name").value=r.name,document.getElementById("edit-service-url-display").textContent=r.url||buildServiceUrl(r.id),document.getElementById("edit-service-logo-preview").src=r.logo||`/assets/${r.id}.png`,document.getElementById("edit-subdomain").value=r.id,document.getElementById("edit-port").value=r.port||"",document.getElementById("edit-ip").value=r.ip||"localhost",document.getElementById("edit-tailscale-only").checked=r.tailscaleOnly||!1,document.getElementById("edit-logo-url").value=r.logo||"";const d=document.getElementById("edit-service-category");d&&(d.dataset.current=r.category||"",typeof window.populateCategorySelects=="function"&&window.populateCategorySelects()),v.classList.add("show")}function g(){closeModal("service-edit-modal"),l=null}async function h(){if(!l)return;const r=document.getElementById("edit-subdomain").value.trim().toLowerCase(),v=document.getElementById("edit-service-name").value.trim(),d=document.getElementById("edit-port").value.trim(),a=document.getElementById("edit-ip").value.trim()||"localhost",p=document.getElementById("edit-tailscale-only").checked,s=document.getElementById("edit-logo-url").value.trim(),e=document.getElementById("edit-service-category")?.value||"";if(!r){showNotification("Subdomain is required","warning");return}const n=l.id,c=[];if(r!==n&&c.push("subdomain"),v&&v!==l.name&&c.push("name"),d&&d!==String(l.port)&&c.push("port"),a!==l.ip&&c.push("ip"),p!==(l.tailscaleOnly||!1)&&c.push("tailscale"),s&&s!==l.logo&&c.push("logo"),e!==(l.category||"")&&c.push("category"),c.length===0){g();return}const t=document.getElementById("service-edit-save");t.textContent="Saving...",t.disabled=!0;try{const y=await(await secureFetch("/api/v1/services/update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldSubdomain:n,newSubdomain:r,name:v||l.name,port:d||l.port,ip:a,tailscaleOnly:p,logo:s||void 0,category:e})})).json();if(!y.success)throw new Error(y.error||"Failed to update service");const u=window.APPS.findIndex(w=>w.id===n);u!==-1&&(window.APPS[u]={...window.APPS[u],id:r,name:v||window.APPS[u].name,port:d||window.APPS[u].port,ip:a,tailscaleOnly:p,logo:s||window.APPS[u].logo,category:e||void 0}),g(),window.buildGrid(),window.refreshAll()}catch(i){console.error("Error saving service changes:",i),showNotification(`Error saving changes: ${i.message}`,"error")}finally{t.textContent="Save Changes",t.disabled=!1}}document.getElementById("edit-logo-file")?.addEventListener("change",async r=>{const v=r.target.files[0];if(!v)return;if(!v.type.startsWith("image/")){showNotification("Please select an image file","warning");return}const d=new FileReader;d.onload=async a=>{const p=a.target.result;if(document.getElementById("edit-service-logo-preview").src=p,document.getElementById("edit-logo-url").value=p,l)try{const e=await(await secureFetch("/api/v1/assets/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filename:`${l.id}.png`,data:p})})).json();e.success&&e.path&&(document.getElementById("edit-logo-url").value=e.path)}catch{}},d.readAsDataURL(v)}),document.getElementById("service-edit-cancel")?.addEventListener("click",g),document.getElementById("service-edit-save")?.addEventListener("click",h),document.getElementById("service-edit-modal")?.addEventListener("click",r=>{r.target.id==="service-edit-modal"&&g()});function f(r,v,d){return new Promise(a=>{const p=document.getElementById("delete-service-modal"),s=document.getElementById("delete-modal-title"),e=document.getElementById("delete-modal-message"),n=document.getElementById("delete-modal-container-info"),c=document.getElementById("delete-modal-container-name"),t=document.getElementById("delete-modal-help"),i=document.getElementById("delete-modal-cancel"),y=document.getElementById("delete-modal-remove"),u=document.getElementById("delete-modal-delete");s.textContent=`Delete "${r}"`,v?(e.innerHTML="This service has an associated Docker container.
Choose how to proceed:",n.style.display="block",c.textContent=`Container ID: ${d?.slice(0,12)||"Unknown"}`,t.style.display="block",u.style.display="block"):(e.textContent="Remove this service from the dashboard?",n.style.display="none",t.style.display="none",u.style.display="none");const w=()=>{p.classList.remove("show"),i.removeEventListener("click",T),y.removeEventListener("click",L),u.removeEventListener("click",A),p.removeEventListener("click",C)},T=()=>{w(),a(null)},L=()=>{w(),a(!1)},A=()=>{w(),a(!0)},C=B=>{B.target===p&&(w(),a(null))};i.addEventListener("click",T),y.addEventListener("click",L),u.addEventListener("click",A),p.addEventListener("click",C),p.classList.add("show")})}async function m(r,v,d){const a=document.getElementById(`update-btn-${d}`),p=a?.textContent;if(confirm(`Update ${v} to the latest version?
+`,u}async function g(m,b,r=DC.DEFAULTS.TTL){const v=window.getToken(getPrimaryDnsId(),"admin");if(!v)throw new Error("DNS admin token not configured. Please set it in the Tokens menu.");const d=buildDomain(m),a=await secureFetch("/api/v1/dns/record",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:d,ip:b,ttl:r,token:v,server:SITE.dnsIp})});if(!a.ok){const s=await a.text();throw new Error(`DNS API Error: ${a.status} - ${s}`)}const p=await a.json();if(!p.success)throw new Error(`DNS Error: ${p.error||"Unknown error"}`);return p}async function h(m){const b={id:m.subdomain,name:m.name,logo:m.logo||`/assets/${m.subdomain}.png`};m.category&&(b.category=m.category),m.containerId&&(b.containerId=m.containerId);try{const r=await secureFetch("/api/v1/services",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!r.ok){const v=await r.json();throw new Error(v.error||"Failed to save service")}return await window.loadServices(),window.buildGrid(),b}catch(r){throw console.error("Failed to add service to config:",r),r}}async function f(m){const b=document.getElementById("service-subdomain-input").value.trim(),r=document.getElementById("service-ip-input").value.trim()||"localhost",v=document.getElementById("service-port-input").value.trim()||"80",d=await secureFetch("/api/v1/site",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:buildDomain(b),upstream:`${r}:${v}`,config:m})}),a=await d.json();if(!d.ok||!a.success)throw new Error(a.error||`Caddy API Error: ${d.status}`);return a}window.loadExistingCAs=l,window.generateCaddyConfig=o,window.createDnsRecord=g,window.addServiceToConfig=h,window.addToCaddyfile=f})(),(function(){let l=null;function o(r){l=r;const v=document.getElementById("service-edit-modal");document.getElementById("service-edit-title").textContent=`Edit ${r.name}`,document.getElementById("edit-service-name").value=r.name,document.getElementById("edit-service-url-display").textContent=r.url||buildServiceUrl(r.id);const d=document.getElementById("edit-service-logo-preview"),a=r.logo||`/assets/${r.id}.png`;d.src=a,d.onerror=function(){this.style.display="none"},d.onload=function(){this.style.display=""},d.style.display="",document.getElementById("edit-subdomain").value=r.id,document.getElementById("edit-port").value=r.port||"",document.getElementById("edit-ip").value=r.ip||"localhost",document.getElementById("edit-tailscale-only").checked=r.tailscaleOnly||!1,document.getElementById("edit-logo-url").value=r.logo||"";const p=document.getElementById("edit-service-category");p&&(p.dataset.current=r.category||"",typeof window.populateCategorySelects=="function"&&window.populateCategorySelects()),v.classList.add("show")}function g(){closeModal("service-edit-modal"),l=null}async function h(){if(!l)return;const r=document.getElementById("edit-subdomain").value.trim().toLowerCase(),v=document.getElementById("edit-service-name").value.trim(),d=document.getElementById("edit-port").value.trim(),a=document.getElementById("edit-ip").value.trim()||"localhost",p=document.getElementById("edit-tailscale-only").checked,s=document.getElementById("edit-logo-url").value.trim(),e=document.getElementById("edit-service-category")?.value||"";if(!r){showNotification("Subdomain is required","warning");return}const n=l.id,c=[];if(r!==n&&c.push("subdomain"),v&&v!==l.name&&c.push("name"),d&&d!==String(l.port)&&c.push("port"),a!==l.ip&&c.push("ip"),p!==(l.tailscaleOnly||!1)&&c.push("tailscale"),s&&s!==l.logo&&c.push("logo"),e!==(l.category||"")&&c.push("category"),c.length===0){g();return}const t=document.getElementById("service-edit-save");t.textContent="Saving...",t.disabled=!0;try{const y=await(await secureFetch("/api/v1/services/update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldSubdomain:n,newSubdomain:r,name:v||l.name,port:d||l.port,ip:a,tailscaleOnly:p,logo:s||void 0,category:e})})).json();if(!y.success)throw new Error(y.error||"Failed to update service");const u=window.APPS.findIndex(w=>w.id===n);u!==-1&&(window.APPS[u]={...window.APPS[u],id:r,name:v||window.APPS[u].name,port:d||window.APPS[u].port,ip:a,tailscaleOnly:p,logo:s||window.APPS[u].logo,category:e||void 0}),g(),window.buildGrid(),window.refreshAll()}catch(i){console.error("Error saving service changes:",i),showNotification(`Error saving changes: ${i.message}`,"error")}finally{t.textContent="Save Changes",t.disabled=!1}}document.getElementById("edit-logo-file")?.addEventListener("change",async r=>{const v=r.target.files[0];if(!v)return;if(!v.type.startsWith("image/")){showNotification("Please select an image file","warning");return}const d=new FileReader;d.onload=async a=>{const p=a.target.result;if(document.getElementById("edit-service-logo-preview").src=p,document.getElementById("edit-logo-url").value=p,l)try{const e=await(await secureFetch("/api/v1/assets/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filename:`${l.id}.png`,data:p})})).json();e.success&&e.path&&(document.getElementById("edit-logo-url").value=e.path)}catch{}},d.readAsDataURL(v)}),document.getElementById("service-edit-cancel")?.addEventListener("click",g),document.getElementById("service-edit-save")?.addEventListener("click",h),document.getElementById("service-edit-modal")?.addEventListener("click",r=>{r.target.id==="service-edit-modal"&&g()});function f(r,v,d){return new Promise(a=>{const p=document.getElementById("delete-service-modal"),s=document.getElementById("delete-modal-title"),e=document.getElementById("delete-modal-message"),n=document.getElementById("delete-modal-container-info"),c=document.getElementById("delete-modal-container-name"),t=document.getElementById("delete-modal-help"),i=document.getElementById("delete-modal-cancel"),y=document.getElementById("delete-modal-remove"),u=document.getElementById("delete-modal-delete");s.textContent=`Delete "${r}"`,v?(e.innerHTML="This service has an associated Docker container.
Choose how to proceed:",n.style.display="block",c.textContent=`Container ID: ${d?.slice(0,12)||"Unknown"}`,t.style.display="block",u.style.display="block"):(e.textContent="Remove this service from the dashboard?",n.style.display="none",t.style.display="none",u.style.display="none");const w=()=>{p.classList.remove("show"),i.removeEventListener("click",T),y.removeEventListener("click",L),u.removeEventListener("click",A),p.removeEventListener("click",C)},T=()=>{w(),a(null)},L=()=>{w(),a(!1)},A=()=>{w(),a(!0)},C=B=>{B.target===p&&(w(),a(null))};i.addEventListener("click",T),y.addEventListener("click",L),u.addEventListener("click",A),p.addEventListener("click",C),p.classList.add("show")})}async function m(r,v,d){const a=document.getElementById(`update-btn-${d}`),p=a?.textContent;if(confirm(`Update ${v} to the latest version?
This will:
1. Pull the latest image
@@ -846,4 +846,4 @@ The service will be briefly unavailable.`))try{a&&(a.textContent="\u{1F504}",a.d
\u2713 Connected
${w.self?.hostname} (${w.self?.ip})
`,y.disabled=!1):w.installed?(i.innerHTML='\u26A0 Not connected',y.disabled=!0):(i.innerHTML='Not available',y.disabled=!0)}catch{i.innerHTML='Could not check',y.disabled=!0}y.checked=!1,g()}function r(){const e=document.getElementById("service-type-local"),n=document.getElementById("service-type-external"),c=document.getElementById("local-service-config"),t=document.getElementById("external-service-config"),i=document.getElementById("tab-local"),y=document.getElementById("tab-external");function u(){e.checked?(c.style.display="grid",t.style.display="none",i&&(i.style.background="var(--accent)",i.style.color="var(--bg)"),y&&(y.style.background="transparent",y.style.color="var(--muted)")):(c.style.display="none",t.style.display="block",y&&(y.style.background="var(--accent)",y.style.color="var(--bg)"),i&&(i.style.background="transparent",i.style.color="var(--muted)"))}e?.addEventListener("change",u),n?.addEventListener("change",u)}function v(){const e=document.getElementById("service-name-input"),n=document.getElementById("service-subdomain-input"),c=document.getElementById("subdomain-preview");let t=!1;e?.addEventListener("input",()=>{const L=l(e.value);!t&&n&&(n.value=L),c&&(c.textContent=L?`\u2192 ${buildDomain(L)}`:""),g()}),n?.addEventListener("input",()=>{t=n.value!==l(e?.value||"");const L=n.value.trim()||l(e?.value||"");c&&(c.textContent=L?`\u2192 ${buildDomain(L)}`:""),g()});const i=document.getElementById("external-service-name"),y=document.getElementById("external-service-subdomain"),u=document.getElementById("external-subdomain-preview"),w=document.getElementById("external-domain-preview");let T=!1;i?.addEventListener("input",()=>{const L=l(i.value);!T&&y&&(y.value=L);const A=y?.value||L;u&&(u.textContent=A?`\u2192 ${buildDomain(A)}`:""),w&&(w.textContent=A?buildDomain(A):"")}),y?.addEventListener("input",()=>{T=y.value!==l(i?.value||"");const L=y.value.trim()||l(i?.value||"");u&&(u.textContent=L?`\u2192 ${buildDomain(L)}`:""),w&&(w.textContent=L?buildDomain(L):"")})}async function d(){const e=document.getElementById("external-service-name").value.trim(),n=document.getElementById("external-service-url").value.trim(),c=(document.getElementById("external-service-subdomain").value.trim()||l(e)).toLowerCase(),t=document.getElementById("external-service-logo").value.trim(),i=document.getElementById("external-service-icon").value.trim(),y=document.getElementById("external-create-dns").checked,u=document.getElementById("external-create-caddy").checked,w=document.getElementById("external-proxy-ip").value.trim()||SITE.dnsIp||"localhost",T=document.getElementById("external-preserve-host").checked,L=document.getElementById("external-follow-redirects").checked,A=document.getElementById("external-service-category")?.value||"";if(!e||!n){showNotification("Please fill in Name and External URL","warning");return}if(!c){showNotification("Could not derive subdomain from name. Please set one in Options.","warning");return}if(!n.startsWith("http://")&&!n.startsWith("https://")){showNotification("External URL must start with http:// or https://","warning");return}const C=buildDomain(c);try{const B={dns:null,caddy:null,dashboard:!1};if(y)if(window.getToken(getPrimaryDnsId(),"admin"))try{const P=await(await secureFetch("/api/v1/dns/record",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:C,ip:w,ttl:DC.DEFAULTS.TTL,server:SITE.dnsIp})})).json();B.dns=P.success?"created":P.error||"failed"}catch(S){B.dns=S.message}else B.dns="no admin token (configure in \u{1F511} Tokens)";if(u)try{const E={subdomain:c,externalUrl:n,preserveHost:T,followRedirects:L,sslType:"caddy-managed",caddyfilePath:DC.DEFAULTS.CADDYFILE,reloadCaddy:!0},P=await(await secureFetch("/api/v1/site/external",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)})).json();B.caddy=P.success?"created":P.error||"failed"}catch(E){B.caddy=E.message}const $={id:c,name:e,url:`https://${C}`,externalUrl:n,logo:t||i||"\u{1F310}",isExternal:!0,isCustom:!0};A&&($.category=A),window.APPS.push($),B.dashboard=!0;const k=["plex","router","chat","sync","torrent","radarr","sonarr","prowlarr","portainer","requests","jellyfin","emby"],x=window.APPS.filter(E=>!k.includes(E.id));safeSet("custom-services",JSON.stringify(x));try{await secureFetch("/api/v1/services",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(window.APPS)})}catch(E){console.warn("Failed to save to services.json:",E)}window.buildGrid(),window.refreshAll(),a();const I=[`External service "${e}" added!`];y&&I.push(`DNS: ${B.dns==="created"?"\u2713":"\u26A0 "+B.dns}`),u&&I.push(`Caddy: ${B.caddy==="created"?"\u2713":"\u26A0 "+B.caddy}`),I.push(`Access at: https://${C}`),showNotification(I.join(" | "),"success",6e3)}catch(B){console.error("Failed to create external service:",B),showNotification(`Failed to create external service: ${B.message}`,"error")}}function a(){closeModal("add-service-modal"),document.body.style.overflow="",document.getElementById("service-name-input").value="",document.getElementById("service-subdomain-input").value="",document.getElementById("service-port-input").value="",document.getElementById("service-ip-input").value=h.lan||"",document.getElementById("service-logo-input").value="",document.getElementById("dns-ttl-input").value=DC.DEFAULTS.TTL,document.getElementById("ssl-type-select").value=o(),document.getElementById("ca-name-input").value="",document.getElementById("enable-auth").checked=!1,document.getElementById("enable-cors").checked=!1,document.getElementById("custom-headers-input").value="",document.getElementById("upstream-path-input").value="/",document.getElementById("health-check-input").value="",document.getElementById("timeout-input").value="30";const e=document.getElementById("subdomain-preview");e&&(e.textContent="");const n=document.getElementById("external-subdomain-preview");n&&(n.textContent="");const c=document.getElementById("external-service-name");c&&(c.value="");const t=document.getElementById("external-service-subdomain");t&&(t.value="");const i=document.getElementById("external-service-url");i&&(i.value="");const y=document.getElementById("external-service-logo");y&&(y.value="");const u=document.getElementById("external-service-icon");u&&(u.value="");const w=document.getElementById("local-advanced-options");w&&w.removeAttribute("open");const T=document.getElementById("external-advanced-options");T&&T.removeAttribute("open");const L=document.getElementById("service-type-local");L&&(L.checked=!0);const A=document.getElementById("local-service-config"),C=document.getElementById("external-service-config");A&&(A.style.display="grid"),C&&(C.style.display="none");const B=document.getElementById("tab-local"),$=document.getElementById("tab-external");B&&(B.style.background="var(--accent)",B.style.color="var(--bg)"),$&&($.style.background="transparent",$.style.color="var(--muted)")}async function p(){const e=document.getElementById("service-name-input").value.trim(),n=(document.getElementById("service-subdomain-input").value.trim()||l(e)).toLowerCase(),c=document.getElementById("service-port-input").value.trim(),t=document.getElementById("service-ip-input").value.trim(),i=document.getElementById("service-logo-input").value.trim(),y=document.getElementById("create-dns-record").checked,u=parseInt(document.getElementById("dns-ttl-input").value)||DC.DEFAULTS.TTL,w=document.getElementById("manual-tailscale-only")?.checked||!1,T=document.getElementById("ssl-type-select")?.value||"caddy-managed",L=document.getElementById("ca-name-input")?.value||"",A=document.getElementById("existing-ca-select")?.value||"",C=document.getElementById("enable-auth")?.checked||!1,B=document.getElementById("enable-cors")?.checked||!1,$=document.getElementById("custom-headers-input")?.value||"",k=document.getElementById("upstream-path-input")?.value||"/",x=document.getElementById("health-check-input")?.value||"",I=document.getElementById("timeout-input")?.value||30,S=(document.getElementById("service-category-input")||document.getElementById("external-service-category"))?.value||"",P=window.getToken(getPrimaryDnsId(),"admin");if(!e||!c||!t){showNotification("Please fill in Name, Port, and IP Address","warning");return}if(!n){showNotification("Could not derive subdomain from name. Please set one in Options.","warning");return}if(y&&!P){showNotification("DNS Admin token required. Configure it in the Tokens menu first.","warning");return}const D={dns:null,caddy:null,dashboard:!1};try{if(y)try{await window.createDnsRecord(n,t,u),D.dns="created"}catch(N){throw console.error("DNS creation failed:",N),D.dns=N.message,new Error(`DNS creation failed: ${N.message}`)}else D.dns="skipped";const O=window.generateCaddyConfig({subdomain:n,port:c,ip:t,sslType:T,caName:L,existingCa:A,enableAuth:C,enableCors:B,customHeaders:$,upstreamPath:k,healthCheck:x,timeout:I,tailscaleOnly:w});try{const U=await(await secureFetch("/api/v1/site",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:buildDomain(n),upstream:`${t}:${c}`,config:O})})).json();if(U.success)D.caddy="added & reloaded";else throw console.error("Caddy configuration failed:",U.error),D.caddy=U.error||"failed",new Error(`Caddy configuration failed: ${U.error}`)}catch(N){throw console.error("Caddy API error:",N),D.caddy=N.message,new Error(`Caddy API error: ${N.message}`)}const _={name:e,subdomain:n,port:c,ip:t,logo:i||`/assets/${n}.png`,tailscaleOnly:w||!1};S&&(_.category=S),await window.addServiceToConfig(_),D.dashboard=!0;const R=[`DNS: ${D.dns==="created"?"\u2713":D.dns==="skipped"?"\u25CB":"\u2717"}`,`Caddy: ${D.caddy==="added & reloaded"?"\u2713":"\u2717"}`,`Dashboard: ${D.dashboard?"\u2713":"\u2717"}`];showNotification(`Service "${e}" created! ${R.join(" | ")} \u2014 ${buildServiceUrl(n)}${w?" (Tailscale)":""}`,"success",6e3),a(),window.buildGrid(),window.refreshAll()}catch(O){console.error("Error creating service:",O),showNotification(`Error creating "${e}": ${O.message}`,"error",6e3)}}document.getElementById("add-service")?.addEventListener("click",b),document.getElementById("add-service-cancel")?.addEventListener("click",a),document.getElementById("add-service-create")?.addEventListener("click",()=>{document.querySelector('input[name="service-type"]:checked')?.value==="external"?d():p()}),r(),v(),m(),document.getElementById("ssl-type-select")?.addEventListener("change",e=>{const n=document.getElementById("existing-ca-config"),c=document.getElementById("custom-ca-config");n.style.display="none",c.style.display="none",e.target.value==="existing-ca"?n.style.display="block":e.target.value==="custom-ca"&&(c.style.display="block"),g()}),document.getElementById("refresh-cas")?.addEventListener("click",async()=>{const e=document.getElementById("refresh-cas"),n=e.textContent;e.textContent="\u231B Loading...",e.disabled=!0;try{const c=document.getElementById("caddyfile-path-input").value||DC.DEFAULTS.CADDYFILE;await window.loadExistingCAs(c),e.textContent="\u2705 Refreshed"}catch(c){e.textContent="\u274C Failed",console.error("Failed to refresh CAs:",c)}setTimeout(()=>{e.textContent=n,e.disabled=!1},2e3)}),document.getElementById("create-dns-record")?.addEventListener("change",e=>{const n=document.getElementById("dns-config");n.style.display=e.target.checked?"block":"none"}),["service-subdomain-input","service-ip-input","service-port-input","ca-name-input","existing-ca-select","enable-auth","enable-cors","custom-headers-input","upstream-path-input","health-check-input","timeout-input"].forEach(e=>{const n=document.getElementById(e);n&&(n.addEventListener("input",g),n.addEventListener("change",g))});function s(){const e=safeGet("custom-services");if(e)try{JSON.parse(e).forEach(c=>{window.APPS.find(t=>t.id===c.id)||window.APPS.push(c)})}catch(n){console.warn("Failed to load custom services:",n)}}s(),window.openAddServiceModal=b,window.closeAddServiceModal=a})(),(function(){let l=null,o=1e3;const g=3e4;function h(){if(l)try{l.close()}catch{}l=new EventSource("/api/v1/events/stream"),l.addEventListener("connected",()=>{o=1e3,debug("[SSE] Connected to event stream")}),l.addEventListener("status-change",f=>{try{const m=JSON.parse(f.data);if(m.serviceId&&typeof window.setBadge=="function"){const b=m.status==="up"||m.status==="healthy";window.setBadge(m.serviceId,b,m.responseTime||null)}}catch{}}),l.addEventListener("resource-alert",f=>{try{const m=JSON.parse(f.data),b=`${m.containerName||m.containerId}: ${m.metric} at ${m.value}% (threshold: ${m.threshold}%)`;typeof showNotification=="function"&&showNotification(b,"warning")}catch{}}),l.addEventListener("auto-restart",f=>{try{const m=JSON.parse(f.data);typeof showNotification=="function"&&showNotification(`Container "${m.containerName}" was auto-restarted`,"info")}catch{}}),l.addEventListener("update-available",f=>{try{const m=JSON.parse(f.data),b=document.getElementById("updates-btn");if(b&&!b.querySelector(".sse-dot")){const r=document.createElement("span");r.className="sse-dot",r.style.cssText="display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent);margin-left:6px;vertical-align:middle;",b.appendChild(r)}typeof showNotification=="function"&&showNotification(`Update available for ${m.containerName||m.containerId}`,"info")}catch{}}),l.addEventListener("update-complete",f=>{try{const m=JSON.parse(f.data);typeof showNotification=="function"&&showNotification(`Update completed: ${m.containerName||m.containerId}`,"success"),typeof window.refreshAll=="function"&&window.refreshAll()}catch{}}),l.addEventListener("update-failed",f=>{try{const m=JSON.parse(f.data);typeof showNotification=="function"&&showNotification(`Update failed: ${m.containerName||m.containerId} \u2014 ${m.error||"unknown error"}`,"error")}catch{}}),l.addEventListener("incident",f=>{try{const m=JSON.parse(f.data);typeof showNotification=="function"&&(m.type==="created"?showNotification(`Incident: ${m.message||m.serviceId}`,"error"):m.type==="resolved"&&showNotification(`Resolved: ${m.serviceId||"incident"}`,"success"))}catch{}}),l.onerror=()=>{l.close(),console.warn(`[SSE] Disconnected, reconnecting in ${o/1e3}s...`),setTimeout(h,o),o=Math.min(o*2,g)}}h(),window._sseReconnect=h})(),(function(){const l=document.getElementById("service-filter-search"),o=document.getElementById("service-filter-status"),g=document.getElementById("service-filter-category"),h=document.getElementById("service-filter-count");function f(){const v=new Set,d=new Set;document.querySelectorAll("#cards .card[data-category]").forEach(s=>{const e=s.dataset.category.trim();e&&d.add(e)});const a=window.DC_CATEGORIES||typeof DC<"u"&&DC.CATEGORIES||{};return Object.keys(a).concat([...d].filter(s=>!a[s])).forEach(s=>v.add(s)),{list:[...v],apiCats:a}}function m(){if(!g)return;const{list:v,apiCats:d}=f(),a=g.value;g.innerHTML='',v.sort().forEach(p=>{const s=d[p],e=document.createElement("option");e.value=p,e.textContent=s?`${s.icon||""} ${p}`.trim():p,g.appendChild(e)}),a&&[...g.options].some(p=>p.value===a)?g.value=a:g.value="all"}function b(){m();const v=l.value.toLowerCase().trim(),d=o.value,a=g?g.value:"all",p=document.querySelectorAll("#cards .card");let s=0;if(p.forEach(e=>{const n=e.querySelector(".name")?.textContent?.toLowerCase()||"",c=e.dataset.app?.toLowerCase()||"",t=e.dataset.status||"off",i=e.dataset.category||"";(!v||n.includes(v)||c.includes(v))&&(d==="all"||t===d)&&(a==="all"||i===a)?(e.style.display="",s++):e.style.display="none"}),h){const e=p.length;h.textContent=`${s} of ${e} services`}}function r(v,d){let a;return function(...p){clearTimeout(a),a=setTimeout(()=>v.apply(this,p),d)}}l?.addEventListener("input",r(b,200)),o?.addEventListener("change",b),g?.addEventListener("change",b),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>setTimeout(b,500)):setTimeout(b,500),window.refreshServiceFilter=b,window.refreshCategoryDropdown=m})(),(function(){const l=document.getElementById("batch-operations-btn"),o=document.getElementById("batch-action-bar"),g=document.getElementById("batch-selected-count"),h=document.getElementById("batch-start-btn"),f=document.getElementById("batch-stop-btn"),m=document.getElementById("batch-restart-btn"),b=document.getElementById("batch-cancel-btn");let r=!1,v=new Set;function d(){r=!0,v.clear(),o.style.display="",l.textContent="\u2713 Exit Batch Mode",p(),document.querySelectorAll("#cards .card[data-app]").forEach(n=>{const c=n.dataset.containerId;if(!c)return;const t=n.querySelector(".batch-checkbox");t&&t.remove();const i=document.createElement("input");i.type="checkbox",i.className="batch-checkbox",i.dataset.containerId=c,i.dataset.serviceName=n.querySelector(".name")?.textContent||c,i.style.cssText="position: absolute; top: 8px; left: 8px; z-index: 10; width: 18px; height: 18px; cursor: pointer;",i.addEventListener("change",y=>{y.stopPropagation(),i.checked?v.add(c):v.delete(c),p()}),n.style.position="relative",n.insertBefore(i,n.firstChild)})}function a(){r=!1,v.clear(),o.style.display="none",l.textContent="\u2630 Batch Operations",document.querySelectorAll(".batch-checkbox").forEach(e=>e.remove())}function p(){const e=v.size;g.textContent=`${e} selected`,h.disabled=e===0,f.disabled=e===0,m.disabled=e===0}async function s(e){if(v.size===0)return;const n=Array.from(v),c={start:"Starting",stop:"Stopping",restart:"Restarting"}[e];if(!confirm(`${c} ${n.length} container(s)? This cannot be undone.`))return;const t=[h,f,m];t.forEach(w=>{w.disabled=!0,w.textContent="..."});let i=0,y=0;const u=[];for(const w of n)try{const T=await fetch(`/api/v1/containers/${encodeURIComponent(w)}/${e}`,{method:"POST"});if(T.ok)i++;else{y++;const L=await T.json().catch(()=>({}));u.push(`${w}: ${L.error||T.statusText}`)}}catch(T){y++,u.push(`${w}: ${T.message}`)}t[0].textContent="\u25B6 Start All",t[1].textContent="\u2B1B Stop All",t[2].textContent="\u{1F504} Restart All",p(),y===0?typeof showNotification=="function"&&showNotification(`${c} completed: ${i} container(s)`,"success"):(typeof showNotification=="function"&&showNotification(`${c}: ${i} succeeded, ${y} failed`,"warning"),console.error("Batch operation errors:",u)),setTimeout(()=>{typeof refreshAll=="function"&&refreshAll()},1500)}l?.addEventListener("click",()=>{r?a():d()}),h?.addEventListener("click",()=>s("start")),f?.addEventListener("click",()=>s("stop")),m?.addEventListener("click",()=>s("restart")),b?.addEventListener("click",a)})();
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBFcnJvciBIYW5kbGVyXG4gKiBIYW5kbGVzIGVycm9ycyBncmFjZWZ1bGx5IHdpdGhvdXQgYnJlYWtpbmcgdGhlIG9uYm9hcmRpbmcgdG91clxuICovXG5cbihmdW5jdGlvbih3aW5kb3cpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGNsYXNzIEVycm9ySGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgICAgdGhpcy5tYXhFcnJvcnMgPSA1MDsgLy8gS2VlcCBsYXN0IDUwIGVycm9yc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvZyBhbiBlcnJvciB3aXRob3V0IGJyZWFraW5nIHRoZSB0b3VyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgLSBDb250ZXh0IHdoZXJlIGVycm9yIG9jY3VycmVkXG4gICAgICogQHBhcmFtIHtFcnJvcnxzdHJpbmd9IGVycm9yIC0gVGhlIGVycm9yIG9iamVjdCBvciBtZXNzYWdlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhIC0gQWRkaXRpb25hbCBtZXRhZGF0YVxuICAgICAqL1xuICAgIGxvZ0Vycm9yKGNvbnRleHQsIGVycm9yLCBtZXRhZGF0YSA9IHt9KSB7XG4gICAgICBjb25zdCBlcnJvckVudHJ5ID0ge1xuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcixcbiAgICAgICAgc3RhY2s6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IG51bGwsXG4gICAgICAgIG1ldGFkYXRhXG4gICAgICB9O1xuXG4gICAgICAvLyBBZGQgdG8gZXJyb3JzIGFycmF5XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yRW50cnkpO1xuXG4gICAgICAvLyBLZWVwIG9ubHkgbGFzdCBtYXhFcnJvcnNcbiAgICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPiB0aGlzLm1heEVycm9ycykge1xuICAgICAgICB0aGlzLmVycm9ycy5zaGlmdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2cgdG8gY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgW09uYm9hcmRpbmcgRXJyb3JdICR7Y29udGV4dH06YCwgZXJyb3IsIG1ldGFkYXRhKTtcblxuICAgICAgLy8gT3B0aW9uYWxseSBzZW5kIHRvIGVycm9yIHRyYWNraW5nIHNlcnZpY2VcbiAgICAgIC8vIHRoaXMuc2VuZFRvRXJyb3JUcmFja2luZyhlcnJvckVudHJ5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBhbiBlcnJvciBhbmQgY29udGludWUgdG91clxuICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIC0gVGhlIGVycm9yIG9iamVjdFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50U3RlcCAtIEN1cnJlbnQgc3RlcCBpbmRleFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJlY292ZXJ5IGFjdGlvblxuICAgICAqL1xuICAgIHJlY292ZXJGcm9tRXJyb3IoZXJyb3IsIGN1cnJlbnRTdGVwKSB7XG4gICAgICBjb25zdCBlcnJvclR5cGUgPSB0aGlzLmNsYXNzaWZ5RXJyb3IoZXJyb3IpO1xuXG4gICAgICBzd2l0Y2ggKGVycm9yVHlwZSkge1xuICAgICAgICBjYXNlICdFTEVNRU5UX05PVF9GT1VORCc6XG4gICAgICAgICAgdGhpcy5sb2dFcnJvcignRWxlbWVudCBOb3QgRm91bmQnLCBlcnJvciwgeyBjdXJyZW50U3RlcCB9KTtcbiAgICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAgIGFjdGlvbjogJ1NLSVBfU1RFUCcsIFxuICAgICAgICAgICAgbmV4dFN0ZXA6IGN1cnJlbnRTdGVwICsgMSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdUYXJnZXQgZWxlbWVudCBub3QgZm91bmQsIHNraXBwaW5nIHRvIG5leHQgc3RlcCdcbiAgICAgICAgICB9O1xuXG4gICAgICAgIGNhc2UgJ1NUT1JBR0VfVU5BVkFJTEFCTEUnOlxuICAgICAgICAgIHRoaXMubG9nRXJyb3IoJ1N0b3JhZ2UgVW5hdmFpbGFibGUnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgICBhY3Rpb246ICdVU0VfTUVNT1JZX1NUT1JBR0UnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0xvY2FsIHN0b3JhZ2UgdW5hdmFpbGFibGUsIHVzaW5nIGluLW1lbW9yeSBzdG9yYWdlJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgY2FzZSAnRFJJVkVSX05PVF9MT0FERUQnOlxuICAgICAgICAgIHRoaXMubG9nRXJyb3IoJ0RyaXZlci5qcyBOb3QgTG9hZGVkJywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3Rpb246ICdBQk9SVF9UT1VSJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdEcml2ZXIuanMgbGlicmFyeSBub3QgbG9hZGVkLCBjYW5ub3Qgc3RhcnQgdG91cidcbiAgICAgICAgICB9O1xuXG4gICAgICAgIGNhc2UgJ0lOVkFMSURfVE9PTFRJUCc6XG4gICAgICAgICAgdGhpcy5sb2dFcnJvcignSW52YWxpZCBUb29sdGlwIENvbmZpZ3VyYXRpb24nLCBlcnJvciwgeyBjdXJyZW50U3RlcCB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aW9uOiAnU0tJUF9TVEVQJyxcbiAgICAgICAgICAgIG5leHRTdGVwOiBjdXJyZW50U3RlcCArIDEsXG4gICAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCB0b29sdGlwIGNvbmZpZ3VyYXRpb24sIHNraXBwaW5nJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgY2FzZSAnVEhFTUVfREVURUNUSU9OX0ZBSUxFRCc6XG4gICAgICAgICAgdGhpcy5sb2dFcnJvcignVGhlbWUgRGV0ZWN0aW9uIEZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aW9uOiAnVVNFX0RFRkFVTFRfVEhFTUUnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1VzaW5nIGRlZmF1bHQgZGFyayB0aGVtZSdcbiAgICAgICAgICB9O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5sb2dFcnJvcignVW5rbm93biBFcnJvcicsIGVycm9yLCB7IGN1cnJlbnRTdGVwIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3Rpb246ICdBQk9SVF9UT1VSJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdVbmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLCBhYm9ydGluZyB0b3VyJ1xuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xhc3NpZnkgZXJyb3IgdHlwZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBUaGUgZXJyb3Igb2JqZWN0XG4gICAgICogQHJldHVybnMge3N0cmluZ30gRXJyb3IgdHlwZVxuICAgICAqL1xuICAgIGNsYXNzaWZ5RXJyb3IoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8IGVycm9yLnRvU3RyaW5nKCk7XG5cbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdlbGVtZW50JykgJiYgbWVzc2FnZS5pbmNsdWRlcygnbm90IGZvdW5kJykpIHtcbiAgICAgICAgcmV0dXJuICdFTEVNRU5UX05PVF9GT1VORCc7XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnc3RvcmFnZScpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ3F1b3RhJykpIHtcbiAgICAgICAgcmV0dXJuICdTVE9SQUdFX1VOQVZBSUxBQkxFJztcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdkcml2ZXInKSB8fCBtZXNzYWdlLmluY2x1ZGVzKCd1bmRlZmluZWQnKSkge1xuICAgICAgICByZXR1cm4gJ0RSSVZFUl9OT1RfTE9BREVEJztcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdpbnZhbGlkJykgfHwgbWVzc2FnZS5pbmNsdWRlcygndmFsaWRhdGlvbicpKSB7XG4gICAgICAgIHJldHVybiAnSU5WQUxJRF9UT09MVElQJztcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCd0aGVtZScpKSB7XG4gICAgICAgIHJldHVybiAnVEhFTUVfREVURUNUSU9OX0ZBSUxFRCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnVU5LTk9XTic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBsb2dnZWQgZXJyb3JzXG4gICAgICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiBlcnJvciBlbnRyaWVzXG4gICAgICovXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIFsuLi50aGlzLmVycm9yc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGxvZ2dlZCBlcnJvcnNcbiAgICAgKi9cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGVycm9yIHN0YXRpc3RpY3NcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBFcnJvciBzdGF0aXN0aWNzXG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljcygpIHtcbiAgICAgIGNvbnN0IHN0YXRzID0ge1xuICAgICAgICB0b3RhbDogdGhpcy5lcnJvcnMubGVuZ3RoLFxuICAgICAgICBieUNvbnRleHQ6IHt9LFxuICAgICAgICBieVR5cGU6IHt9LFxuICAgICAgICByZWNlbnQ6IHRoaXMuZXJyb3JzLnNsaWNlKC0xMClcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZXJyb3JzLmZvckVhY2goZXJyb3IgPT4ge1xuICAgICAgICAvLyBDb3VudCBieSBjb250ZXh0XG4gICAgICAgIHN0YXRzLmJ5Q29udGV4dFtlcnJvci5jb250ZXh0XSA9IChzdGF0cy5ieUNvbnRleHRbZXJyb3IuY29udGV4dF0gfHwgMCkgKyAxO1xuXG4gICAgICAgIC8vIENvdW50IGJ5IHR5cGVcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY2xhc3NpZnlFcnJvcih7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHN0YXRzLmJ5VHlwZVt0eXBlXSA9IChzdGF0cy5ieVR5cGVbdHlwZV0gfHwgMCkgKyAxO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgZ3JhY2VmdWwgZGVncmFkYXRpb24gd2hlbiBEcml2ZXIuanMgZmFpbHMgdG8gbG9hZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGZhbGxiYWNrIHdhcyBzdWNjZXNzZnVsXG4gICAgICovXG4gICAgaGFuZGxlRHJpdmVyTG9hZEZhaWx1cmUoKSB7XG4gICAgICB0aGlzLmxvZ0Vycm9yKCdEcml2ZXIuanMgTG9hZCBGYWlsdXJlJywgJ0RyaXZlci5qcyBsaWJyYXJ5IGZhaWxlZCB0byBsb2FkJyk7XG5cbiAgICAgIC8vIFNob3cgZmFsbGJhY2sgbWVzc2FnZVxuICAgICAgY29uc3QgZmFsbGJhY2tNZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBmYWxsYmFja01lc3NhZ2UuaWQgPSAnb25ib2FyZGluZy1mYWxsYmFjayc7XG4gICAgICBmYWxsYmFja01lc3NhZ2Uuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBib3R0b206IDIwcHg7XG4gICAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJhc2UsICMyYTJhMmEpO1xuICAgICAgICBjb2xvcjogdmFyKC0tZmcsICNmZmZmZmYpO1xuICAgICAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMyk7XG4gICAgICAgIHotaW5kZXg6IDk5OTk7XG4gICAgICAgIG1heC13aWR0aDogMzAwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGA7XG4gICAgICBmYWxsYmFja01lc3NhZ2UuaW5uZXJIVE1MID0gYFxuICAgICAgICA8c3Ryb25nPldlbGNvbWUgdG8gRGFzaENhZGR5ITwvc3Ryb25nPjxicj5cbiAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46IDEwcHggMCAwIDA7IGZvbnQtc2l6ZTogMTJweDtcIj5cbiAgICAgICAgICBUaGUgaW50ZXJhY3RpdmUgdG91ciBpcyB1bmF2YWlsYWJsZSwgYnV0IHlvdSBjYW4gZXhwbG9yZSB0aGUgZGFzaGJvYXJkIGZyZWVseS5cbiAgICAgICAgICBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgaGVscCBnZXR0aW5nIHN0YXJ0ZWQuXG4gICAgICAgIDwvcD5cbiAgICAgIGA7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZmFsbGJhY2tNZXNzYWdlKTtcblxuICAgICAgLy8gQXV0by1yZW1vdmUgYWZ0ZXIgMTAgc2Vjb25kc1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChmYWxsYmFja01lc3NhZ2UucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGZhbGxiYWNrTWVzc2FnZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZhbGxiYWNrTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDAwKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHN0b3JhZ2UgdW5hdmFpbGFibGUgc2NlbmFyaW9cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBJbi1tZW1vcnkgc3RvcmFnZSBmYWxsYmFja1xuICAgICAqL1xuICAgIGhhbmRsZVN0b3JhZ2VVbmF2YWlsYWJsZSgpIHtcbiAgICAgIHRoaXMubG9nRXJyb3IoJ1N0b3JhZ2UgVW5hdmFpbGFibGUnLCAnTG9jYWwgc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlJyk7XG5cbiAgICAgIC8vIENyZWF0ZSBpbi1tZW1vcnkgc3RvcmFnZVxuICAgICAgY29uc3QgbWVtb3J5U3RvcmFnZSA9IHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGdldEl0ZW0oa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUl0ZW0oa2V5KSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtrZXldO1xuICAgICAgICB9LFxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc29sZS53YXJuKCdbRXJyb3JIYW5kbGVyXSBVc2luZyBpbi1tZW1vcnkgc3RvcmFnZSAtIHByb2dyZXNzIHdpbGwgbm90IHBlcnNpc3QnKTtcbiAgICAgIHJldHVybiBtZW1vcnlTdG9yYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbmQgZXJyb3IgdG8gdHJhY2tpbmcgc2VydmljZSAocGxhY2Vob2xkZXIpXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZXJyb3JFbnRyeSAtIEVycm9yIGVudHJ5IHRvIHNlbmRcbiAgICAgKi9cbiAgICBzZW5kVG9FcnJvclRyYWNraW5nKGVycm9yRW50cnkpIHtcbiAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciBlcnJvciB0cmFja2luZyBpbnRlZ3JhdGlvblxuICAgICAgLy8gQ291bGQgaW50ZWdyYXRlIHdpdGggU2VudHJ5LCBMb2dSb2NrZXQsIGV0Yy5cbiAgICAgIC8vIEV4YW1wbGU6XG4gICAgICAvLyBpZiAod2luZG93LlNlbnRyeSkge1xuICAgICAgLy8gICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihuZXcgRXJyb3IoZXJyb3JFbnRyeS5tZXNzYWdlKSwge1xuICAgICAgLy8gICAgIGV4dHJhOiBlcnJvckVudHJ5Lm1ldGFkYXRhXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5FcnJvckhhbmRsZXIgPSBFcnJvckhhbmRsZXI7XG4gIGNvbnNvbGUubG9nKCdbRXJyb3JIYW5kbGVyXSBNb2R1bGUgbG9hZGVkJyk7XG5cbn0pKHdpbmRvdyk7XG47XG4vLyA9PT09PSBEQVNIQk9BUkQgQ09OU1RBTlRTID09PT09XG4vLyBIb25vciBwZXJzaXN0ZWQgaGVhbHRoIHJldGVudGlvbiBzZXR0aW5ncyBmb3IgcG9sbGluZyBjYWRlbmNlcyBzbyB0aGVcbi8vIFNldHRpbmdzIFx1MjE5MiBIZWFsdGggXHUyMTkyIEdsb2JhbCBTZXR0aW5ncyBwYW5lbCBhY3R1YWxseSB0YWtlcyBlZmZlY3QuIFRoZVxuLy8gU1RBVFMgaW50ZXJ2YWwgKHJlc291cmNlL2NvbnRhaW5lciBzdGF0IHNhbXBsaW5nKSBpcyBkcml2ZW4gZnJvbSB0aGVcbi8vIHVzZXItY29uZmlndXJhYmxlIHN0YXRzUG9sbGluZ0ludGVydmFsLiBIRUFMVEggaXMgdGhlIGxpZ2h0d2VpZ2h0IGNhcmRcbi8vIGJhZGdlIHJlZnJlc2ggYW5kIHN0YXlzIGF0IGl0cyBmYXN0IGRlZmF1bHQgdW5sZXNzIG92ZXJyaWRkZW4uXG4oZnVuY3Rpb24gYXBwbHlIZWFsdGhQb2xsaW5nU2V0dGluZ3MoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHJhdyA9ICh0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGFzaGNhZGR5LWhlYWx0aC1zZXR0aW5ncycpKSB8fCBudWxsO1xuICAgIGlmIChyYXcpIHtcbiAgICAgIHZhciBzID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgLy8gdmFsdWVzIGFyZSBzdG9yZWQgaW4gc2Vjb25kczsgREMuUE9MTCBleHBlY3RzIG1pbGxpc2Vjb25kc1xuICAgICAgaWYgKHMuc3RhdHNQb2xsaW5nSW50ZXJ2YWwgJiYgcy5zdGF0c1BvbGxpbmdJbnRlcnZhbCA+PSA1ICYmIHMuc3RhdHNQb2xsaW5nSW50ZXJ2YWwgPD0gMzYwMCkge1xuICAgICAgICB3aW5kb3cuX19EQ19TVEFUU19PVkVSUklERSA9IHMuc3RhdHNQb2xsaW5nSW50ZXJ2YWwgKiAxMDAwO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoXykgeyAvKiBpZ25vcmUgXHUyMDE0IGZhbGwgYmFjayB0byBkZWZhdWx0cyBiZWxvdyAqLyB9XG59KSgpO1xuXG5jb25zdCBEQyA9IHtcbiAgTkFNRTogJ0Rhc2hDYWRkeScsXG4gIFBPTEw6IHtcbiAgICBEQVNIQk9BUkQ6ICAxMDAwMCwgICAvLyAxMHMgXHUyMDE0IG1haW4gcmVmcmVzaEFsbCBpbnRlcnZhbFxuICAgIExPR1M6ICAgICAgIDMwMDAsICAgIC8vIDNzICBcdTIwMTQgbG9nIHZpZXdlciB1cGRhdGVzXG4gICAgU1RBVFM6ICAgICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5fX0RDX1NUQVRTX09WRVJSSURFKSB8fCA1MDAwLCAgIC8vIDVzIGRlZmF1bHQgXHUyMDE0IHJlc291cmNlIG1vbml0b3IgcmVmcmVzaCAob3ZlcnJpZGFibGUgdmlhIFNldHRpbmdzIFx1MjE5MiBIZWFsdGgpXG4gICAgV0VBVEhFUjogICAgNjAwMDAwLCAgLy8gMTBtIFx1MjAxNCB3ZWF0aGVyIHdpZGdldCByZWZyZXNoXG4gICAgSEVBTFRIOiAgICAgMTAwMCwgICAgLy8gMXMgIFx1MjAxNCBjYXJkIGhlYWx0aCBiYWRnZSByZWZyZXNoXG4gICAgREVQTE9ZX1NTTDogNTAwMCwgICAgLy8gNXMgIFx1MjAxNCBTU0wgY2VydCBjaGVjayBkdXJpbmcgZGVwbG95XG4gIH0sXG4gIERFTEFZUzoge1xuICAgIEJUTl9SRVNFVDogIDIwMDAsICAgIC8vIEJ1dHRvbiB0ZXh0IHJlc2V0IGFmdGVyIGFjdGlvblxuICAgIFJFTE9BRDogICAgIDUwMDAsICAgIC8vIFBhZ2UgcmVsb2FkIGFmdGVyIHJlc3RhcnRcbiAgICBNT0RBTF9DTE9TRTogNTAwLCAgICAvLyBNb2RhbCBjbG9zZSBhbmltYXRpb25cbiAgICBQT1JUX0NIRUNLOiA1MDAsICAgICAvLyBEZWJvdW5jZSBmb3IgcG9ydCBhdmFpbGFiaWxpdHkgY2hlY2tcbiAgICBERVBMT1lfSU5JVDogMzAwMCwgICAvLyBJbml0aWFsIGRlcGxveSBjZXJ0IGNoZWNrIGRlbGF5XG4gIH0sXG4gIERFRkFVTFRTOiB7XG4gICAgRE5TX1BPUlQ6ICAgICc1MzgwJyxcbiAgICBTRVJWSUNFX1BPUlQ6ICc4MDgwJyxcbiAgICBUVEw6ICAgICAgICAgMzAwLFxuICAgIENBRERZRklMRTogICAnQzpcXFxcY2FkZHlcXFxcQ2FkZHlmaWxlJyxcbiAgfSxcbn07XG5cbi8vIEVycm9yIGhhbmRsZXIgZm9yIHRyYWNraW5nIGlzc3Vlc1xuY29uc3QgZXJyb3JIYW5kbGVyID0gbmV3IEVycm9ySGFuZGxlcigpO1xuXG4vLyA9PT09PSBHTE9CQUwgU0lURSBDT05GSUcgKGxvYWRlZCBmcm9tIHNlcnZlciwgY2FjaGVkIGluIGxvY2FsU3RvcmFnZSkgPT09PT1cbi8vIE9ubHkgbm9uLXNlbnNpdGl2ZSBkaXNwbGF5IHByZWZlcmVuY2VzIGFyZSBjYWNoZWQ7IEROUyBJUHMvdG9wb2xvZ3kgYXJlIGZldGNoZWQgZnJvbSBBUElcbmNvbnN0IF9jYWNoZWRDZmcgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXNoY2FkZHlfc2l0ZV9jb25maWcnKSB8fCAnbnVsbCcpO1xuY29uc3QgU0lURSA9IHtcbiAgdGxkOiAoX2NhY2hlZENmZyAmJiBfY2FjaGVkQ2ZnLnRsZCkgfHwgJy5ob21lJyxcbiAgZG5zSXA6ICcnLFxuICBkbnNQb3J0OiBEQy5ERUZBVUxUUy5ETlNfUE9SVCxcbiAgZG5zU2VydmVyczoge30sXG4gIGNvbmZpZ3VyYXRpb25UeXBlOiAoX2NhY2hlZENmZyAmJiBfY2FjaGVkQ2ZnLmNvbmZpZ3VyYXRpb25UeXBlKSB8fCAnaG9tZWxhYicsXG4gIGRvbWFpbjogKF9jYWNoZWRDZmcgJiYgX2NhY2hlZENmZy5kb21haW4pIHx8ICcnLFxuICBkZWZhdWx0czogKF9jYWNoZWRDZmcgJiYgX2NhY2hlZENmZy5kZWZhdWx0cykgfHwge30sXG4gIHJvdXRpbmdNb2RlOiAoX2NhY2hlZENmZyAmJiBfY2FjaGVkQ2ZnLnJvdXRpbmdNb2RlKSB8fCAnc3ViZG9tYWluJyxcbiAgb25ib2FyZGluZ0NvbXBsZXRlZDogZmFsc2Vcbn07XG53aW5kb3cuX19kYXNoY2FkZHlTaXRlQ29uZmlnTG9hZGVkID0gKGFzeW5jIGZ1bmN0aW9uIGxvYWRTaXRlQ29uZmlnKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS9jb25maWcnKTtcbiAgICBpZiAoci5vaykge1xuICAgICAgY29uc3QgYyA9IGF3YWl0IHIuanNvbigpO1xuICAgICAgaWYgKGMudGxkKSBTSVRFLnRsZCA9IGMudGxkLnN0YXJ0c1dpdGgoJy4nKSA/IGMudGxkIDogJy4nICsgYy50bGQ7XG4gICAgICBpZiAoYy5kbnMpIHtcbiAgICAgICAgU0lURS5kbnNJcCA9IGMuZG5zLmlwIHx8ICcnO1xuICAgICAgICBTSVRFLmRuc1BvcnQgPSBjLmRucy5wb3J0IHx8IERDLkRFRkFVTFRTLkROU19QT1JUO1xuICAgICAgfVxuICAgICAgaWYgKGMuZG5zU2VydmVycyAmJiB0eXBlb2YgYy5kbnNTZXJ2ZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhjLmRuc1NlcnZlcnMpKSB7XG4gICAgICAgICAgaWYgKGsgIT09ICdfX3Byb3RvX18nICYmIGsgIT09ICdjb25zdHJ1Y3RvcicgJiYgayAhPT0gJ3Byb3RvdHlwZScpIFNJVEUuZG5zU2VydmVyc1trXSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLmNvbmZpZ3VyYXRpb25UeXBlKSBTSVRFLmNvbmZpZ3VyYXRpb25UeXBlID0gYy5jb25maWd1cmF0aW9uVHlwZTtcbiAgICAgIGlmIChjLmRvbWFpbikgU0lURS5kb21haW4gPSBjLmRvbWFpbjtcbiAgICAgIGlmIChjLmRlZmF1bHRzKSBTSVRFLmRlZmF1bHRzID0gYy5kZWZhdWx0cztcbiAgICAgIGlmIChjLnJvdXRpbmdNb2RlKSBTSVRFLnJvdXRpbmdNb2RlID0gYy5yb3V0aW5nTW9kZTtcbiAgICAgIFNJVEUub25ib2FyZGluZ0NvbXBsZXRlZCA9IGMub25ib2FyZGluZ0NvbXBsZXRlZCA9PT0gdHJ1ZTtcbiAgICAgIC8vIENhY2hlIG9ubHkgbm9uLXNlbnNpdGl2ZSBkaXNwbGF5IGNvbmZpZyAoVExELCBkb21haW4sIHJvdXRpbmcgbW9kZSlcbiAgICAgIC8vIEROUyBJUHMgYW5kIHNlcnZlciB0b3BvbG9neSBhcmUgTk9UIGNhY2hlZCBcdTIwMTQgZmV0Y2hlZCBmcm9tIEFQSSBlYWNoIGxvYWRcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkYXNoY2FkZHlfc2l0ZV9jb25maWcnLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHRsZDogU0lURS50bGQsIGNvbmZpZ3VyYXRpb25UeXBlOiBTSVRFLmNvbmZpZ3VyYXRpb25UeXBlLFxuICAgICAgICBkb21haW46IFNJVEUuZG9tYWluLCByb3V0aW5nTW9kZTogU0lURS5yb3V0aW5nTW9kZVxuICAgICAgfSkpO1xuICAgICAgLy8gUmVuZGVyIEROUyBjYXJkcyBkeW5hbWljYWxseSBiYXNlZCBvbiBjb25maWd1cmVkIHNlcnZlcnNcbiAgICAgIHJlbmRlckRuc0NhcmRzKCk7XG4gICAgICAvLyBIaWRlIFRva2VucyBidXR0b24gaWYgbm8gRE5TIHNlcnZlcnMgY29uZmlndXJlZFxuICAgICAgY29uc3QgdG9rZW5zQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hbmFnZS10b2tlbnMnKTtcbiAgICAgIGlmICh0b2tlbnNCdG4pIHRva2Vuc0J0bi5zdHlsZS5kaXNwbGF5ID0gT2JqZWN0LmtleXMoU0lURS5kbnNTZXJ2ZXJzKS5sZW5ndGggPyAnJyA6ICdub25lJztcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHt9XG4gIC8vIFVwZGF0ZSBzdGF0aWMgSFRNTCBlbGVtZW50cyB3aXRoIGNvbmZpZ3VyZWQgVExEXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXRsZF0nKS5mb3JFYWNoKGVsID0+IGVsLnRleHRDb250ZW50ID0gU0lURS50bGQpO1xuICBjb25zdCB0bGRTdWZmaXggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC10bGQtc3VmZml4Jyk7XG4gIGlmICh0bGRTdWZmaXgpIHRsZFN1ZmZpeC50ZXh0Q29udGVudCA9IFNJVEUudGxkO1xuICBjb25zdCBwcm94eUlwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtcHJveHktaXAnKTtcbiAgaWYgKHByb3h5SXBJbnB1dCAmJiBTSVRFLmRuc0lwKSB7IHByb3h5SXBJbnB1dC52YWx1ZSA9IFNJVEUuZG5zSXA7IHByb3h5SXBJbnB1dC5wbGFjZWhvbGRlciA9IFNJVEUuZG5zSXA7IH1cbn0pKCk7XG5mdW5jdGlvbiBidWlsZERvbWFpbihzdWIpIHsgcmV0dXJuIHN1YiArIFNJVEUudGxkOyB9XG5mdW5jdGlvbiBidWlsZFNlcnZpY2VVcmwoc3ViKSB7XG4gIGlmIChTSVRFLnJvdXRpbmdNb2RlID09PSAnc3ViZGlyZWN0b3J5JyAmJiBTSVRFLmRvbWFpbikgcmV0dXJuICdodHRwczovLycgKyBTSVRFLmRvbWFpbiArICcvJyArIHN1YjtcbiAgaWYgKFNJVEUuY29uZmlndXJhdGlvblR5cGUgPT09ICdwdWJsaWMnICYmIFNJVEUuZG9tYWluKSByZXR1cm4gJ2h0dHBzOi8vJyArIHN1YiArICcuJyArIFNJVEUuZG9tYWluO1xuICByZXR1cm4gJ2h0dHBzOi8vJyArIGJ1aWxkRG9tYWluKHN1Yik7XG59XG5mdW5jdGlvbiBnZXREbnNTZXJ2ZXJBZGRyKGRuc0lkKSB7XG4gIGNvbnN0IHMgPSBTSVRFLmRuc1NlcnZlcnNbZG5zSWRdO1xuICByZXR1cm4gcyA/IGAke3MuaXB9OiR7cy5wb3J0fWAgOiBidWlsZERvbWFpbihkbnNJZCk7XG59XG4vKiogR2V0IHRoZSBETlMgSUQgd2hvc2UgSVAgbWF0Y2hlcyB0aGUgcHJpbWFyeSBETlMgY29uZmlnIChkbnMuaXApICovXG5mdW5jdGlvbiBnZXRQcmltYXJ5RG5zSWQoKSB7XG4gIGlmICghU0lURS5kbnNJcCkgcmV0dXJuIG51bGw7XG4gIGZvciAoY29uc3QgW2lkLCBpbmZvXSBvZiBPYmplY3QuZW50cmllcyhTSVRFLmRuc1NlcnZlcnMpKSB7XG4gICAgaWYgKGluZm8uaXAgPT09IFNJVEUuZG5zSXApIHJldHVybiBpZDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gPT09PT0gRFlOQU1JQyBETlMgQ0FSRCBSRU5ERVJFUiA9PT09PVxuZnVuY3Rpb24gcmVuZGVyRG5zQ2FyZHMoKSB7XG4gIGNvbnN0IHRvcFJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b3AnKTtcbiAgaWYgKCF0b3BSb3cpIHJldHVybjtcbiAgY29uc3QgZG5zSWRzID0gT2JqZWN0LmtleXMoU0lURS5kbnNTZXJ2ZXJzKTtcbiAgaWYgKCFkbnNJZHMubGVuZ3RoKSByZXR1cm47IC8vIE5vIEROUyBzZXJ2ZXJzIGNvbmZpZ3VyZWQgXHUyMDE0IHNob3cgbm90aGluZ1xuXG4gIGNvbnN0IHN2Z0ljb24gPSAnPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJzZXJ2aWNlLWljb25cIj4nXG4gICAgKyAnPHJlY3QgeD1cIjNcIiB5PVwiNFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxNlwiIHJ4PVwiMlwiIGZpbGw9XCIjMzQ0OTVlXCIvPidcbiAgICArICc8cmVjdCB4PVwiNVwiIHk9XCI2XCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjJcIiByeD1cIjFcIiBmaWxsPVwiIzM0OThkYlwiLz4nXG4gICAgKyAnPHJlY3QgeD1cIjVcIiB5PVwiOVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxXCIgZmlsbD1cIiNlY2YwZjFcIi8+J1xuICAgICsgJzxyZWN0IHg9XCI1XCIgeT1cIjExXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjFcIiBmaWxsPVwiI2VjZjBmMVwiLz4nXG4gICAgKyAnPHJlY3QgeD1cIjVcIiB5PVwiMTNcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIxXCIgZmlsbD1cIiNlY2YwZjFcIi8+J1xuICAgICsgJzxyZWN0IHg9XCI1XCIgeT1cIjE1XCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjFcIiBmaWxsPVwiI2VjZjBmMVwiLz4nXG4gICAgKyAnPGNpcmNsZSBjeD1cIjE3XCIgY3k9XCIxMVwiIHI9XCIyXCIgZmlsbD1cIiNlNzRjM2NcIi8+J1xuICAgICsgJzxwYXRoIGQ9XCJNMTcgOXY0TTE1IDExaDRcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjFcIi8+PC9zdmc+JztcblxuICBjb25zdCBmaXJzdENoaWxkID0gdG9wUm93LmZpcnN0RWxlbWVudENoaWxkO1xuICBkbnNJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3Qgc2FmZUlkID0gZXNjYXBlSHRtbChpZCk7XG4gICAgY29uc3QgbGFiZWwgPSBlc2NhcGVIdG1sKChTSVRFLmRuc1NlcnZlcnNbaWRdLm5hbWUgfHwgaWQpLnRvVXBwZXJDYXNlKCkpO1xuICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjYXJkLmNsYXNzTmFtZSA9ICdjYXJkJztcbiAgICBjYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1hcHAnLCBpZCk7XG4gICAgY2FyZC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHVzJywgJ29mZicpO1xuICAgIGNhcmQuaW5uZXJIVE1MID1cbiAgICAgIGA8c3BhbiBpZD1cIiR7c2FmZUlkfS1kb3RcIiBjbGFzcz1cImRvdCBiYWQgYXQtYmxcIj48L3NwYW4+YFxuICAgICAgKyBgPGRpdiBjbGFzcz1cInJvd1wiPjxkaXYgY2xhc3M9XCJsb2dvLXdyYXBcIj4ke3N2Z0ljb259PC9kaXY+YFxuICAgICAgKyBgPHNwYW4gY2xhc3M9XCJuYW1lXCI+JHtsYWJlbH08L3NwYW4+PHNwYW4gY2xhc3M9XCJzcGFjZXJcIj48L3NwYW4+YFxuICAgICAgKyBgPHNwYW4gaWQ9XCIke3NhZmVJZH0tcGlsbFwiIGNsYXNzPVwiYmFkZ2Ugb2ZmXCI+T0ZGPC9zcGFuPjwvZGl2PmBcbiAgICAgICsgYDxkaXYgY2xhc3M9XCJyZXNwb25zZS1yb3dcIj48c3BhbiBpZD1cIiR7c2FmZUlkfS10aW1lXCIgY2xhc3M9XCJyZXNwb25zZS10aW1lXCI+LS08L3NwYW4+PC9kaXY+YFxuICAgICAgKyBgPGRpdiBjbGFzcz1cImhlYWx0aC1yb3dcIiBpZD1cImhlYWx0aC0ke3NhZmVJZH1cIj48c3BhbiBpZD1cInVwdGltZS0ke3NhZmVJZH1cIiBjbGFzcz1cInVwdGltZS1jaGlwXCI+LS08L3NwYW4+PGRpdiBjbGFzcz1cInVwdGltZS1taW5pLWJhclwiPjxkaXYgY2xhc3M9XCJmaWxsXCIgaWQ9XCJ1cHRpbWUtYmFyLSR7c2FmZUlkfVwiIHN0eWxlPVwid2lkdGg6IDAlXCI+PC9kaXY+PC9kaXY+PC9kaXY+YFxuICAgICAgKyBgPGRpdiBjbGFzcz1cImJ0bi1yb3dcIj5gXG4gICAgICArIGA8YnV0dG9uIGlkPVwiJHtzYWZlSWR9LXJlc3RhcnRcIiBjbGFzcz1cInJlc3RhcnQtYnRuXCI+UmVzdGFydDwvYnV0dG9uPmBcbiAgICAgICsgYDxidXR0b24gaWQ9XCIke3NhZmVJZH0tdXBkYXRlXCIgY2xhc3M9XCJ1cGRhdGUtYnRuXCIgdGl0bGU9XCJVcGRhdGUgRE5TIHNlcnZlclwiPlx1MkIwNlx1RkUwRjwvYnV0dG9uPmBcbiAgICAgICsgYDxidXR0b24gaWQ9XCIke3NhZmVJZH0tb3BlblwiPk9wZW48L2J1dHRvbj5gXG4gICAgICArIGA8YnV0dG9uIGlkPVwiJHtzYWZlSWR9LWxvZ3NcIiBjbGFzcz1cImxvZ3MtYnRuXCI+TG9nczwvYnV0dG9uPmBcbiAgICAgICsgYDxidXR0b24gaWQ9XCIke3NhZmVJZH0tc2V0dGluZ3NcIiBjbGFzcz1cInNldHRpbmdzLWJ0blwiPlx1MjY5OVx1RkUwRjwvYnV0dG9uPmBcbiAgICAgICsgYDwvZGl2PmA7XG4gICAgdG9wUm93Lmluc2VydEJlZm9yZShjYXJkLCBmaXJzdENoaWxkKTtcbiAgfSk7XG59XG53aW5kb3cucmVuZGVyRG5zQ2FyZHMgPSByZW5kZXJEbnNDYXJkcztcblxuLy8gPT09PT0gQ1NSRiBQUk9URUNUSU9OID09PT09XG5sZXQgY3NyZlRva2VuID0gbnVsbDtcblxuLyoqXG4gKiBHZXQgQ1NSRiB0b2tlbiBmcm9tIHNlcnZlciAoY2FjaGVkKVxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gQ1NSRiB0b2tlblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDU1JGVG9rZW4oKSB7XG4gIGlmIChjc3JmVG9rZW4pIHJldHVybiBjc3JmVG9rZW47XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3YxL2NzcmYtdG9rZW4nKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBDU1JGIHRva2VuJyk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgY3NyZlRva2VuID0gZGF0YS50b2tlbjtcbiAgICByZXR1cm4gY3NyZlRva2VuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVycm9ySGFuZGxlci5sb2dFcnJvcignW0NTUkZdIEdldCBUb2tlbicsIGVycm9yLCB7IGZ1bmN0aW9uOiAnZ2V0Q1NSRlRva2VuJyB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFNlY3VyZSBmZXRjaCB3cmFwcGVyIHRoYXQgYXV0b21hdGljYWxseSBhZGRzIENTUkYgdG9rZW4gdG8gc3RhdGUtY2hhbmdpbmcgcmVxdWVzdHMuXG4gKiBJZiB0aGUgc2VydmVyIHJldHVybnMgYSBDU1JGIGVycm9yICg0MDMgd2l0aCBEQy0xMDAvREMtMTAxKSwgYXV0b21hdGljYWxseVxuICogcmVmcmVzaGVzIHRoZSB0b2tlbiBhbmQgcmV0cmllcyBvbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFVSTCB0byBmZXRjaFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBGZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZXNwb25zZT59IEZldGNoIHJlc3BvbnNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlY3VyZUZldGNoKHVybCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG1ldGhvZCA9IChvcHRpb25zLm1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgbmVlZHNDc3JmID0gIVsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUyddLmluY2x1ZGVzKG1ldGhvZCk7XG5cbiAgaWYgKG5lZWRzQ3NyZikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldENTUkZUb2tlbigpO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgICdYLUNTUkYtVG9rZW4nOiB0b2tlblxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdbQ1NSRl0gQWRkIHRvIFJlcXVlc3QnLCBlcnJvciwgeyBmdW5jdGlvbjogJ3NlY3VyZUZldGNoJyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBEZWZhdWx0IDE1cyB0aW1lb3V0IGlmIG5vIHNpZ25hbCBwcm92aWRlZCAocHJldmVudHMgaGFuZ2luZyByZXF1ZXN0cylcbiAgaWYgKCFvcHRpb25zLnNpZ25hbCkge1xuICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgxNTAwMCkgfTtcbiAgfVxuXG4gIG9wdGlvbnMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbic7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBvcHRpb25zKTtcblxuICAvLyBBdXRvLXJldHJ5IG9uY2Ugb24gQ1NSRiBmYWlsdXJlICh0b2tlbiBtYXkgaGF2ZSBiZWVuIHJvdGF0ZWQgYnkgVE9UUCByZS1hdXRoKVxuICBpZiAobmVlZHNDc3JmICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgIGlmIChib2R5LmVycm9yICYmIChib2R5LmVycm9yLmluY2x1ZGVzKCdEQy0xMDAnKSB8fCBib2R5LmVycm9yLmluY2x1ZGVzKCdEQy0xMDEnKSkpIHtcbiAgICAgICAgY3NyZlRva2VuID0gbnVsbDsgLy8gQ2xlYXIgY2FjaGVkIHRva2VuXG4gICAgICAgIGNvbnN0IGZyZXNoVG9rZW4gPSBhd2FpdCBnZXRDU1JGVG9rZW4oKTtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0geyAuLi5vcHRpb25zLmhlYWRlcnMsICdYLUNTUkYtVG9rZW4nOiBmcmVzaFRva2VuIH07XG4gICAgICAgIC8vIE5ldyBzaWduYWwgZm9yIHJldHJ5IChvbGQgb25lIG1heSBoYXZlIGJlZW4gY29uc3VtZWQpXG4gICAgICAgIG9wdGlvbnMuc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgxNTAwMCk7XG4gICAgICAgIHJldHVybiBmZXRjaCh1cmwsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIC8vIElmIGNsb25lL2pzb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCByZXNwb25zZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gPT09PT0gQVBJIENBTEwgSEVMUEVSUyA9PT09PVxuXG4vKiogUE9TVCBKU09OIGFuZCByZXR1cm4gcGFyc2VkIHJlc3BvbnNlLiBUaHJvd3Mgb24gSFRUUCBvciBBUEkgZXJyb3IuICovXG5hc3luYyBmdW5jdGlvbiBwb3N0SlNPTih1cmwsIGRhdGEpIHtcbiAgY29uc3QgcmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKHVybCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcC5qc29uKCk7XG4gIGlmICghcmVzcC5vayB8fCByZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yIHx8IGBSZXF1ZXN0IGZhaWxlZCAoJHtyZXNwLnN0YXR1c30pYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIEdFVCBKU09OIGFuZCByZXR1cm4gcGFyc2VkIHJlc3BvbnNlLiBUaHJvd3Mgb24gSFRUUCBlcnJvciB3aXRoIHNlcnZlciBtZXNzYWdlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgY29uc3QgcmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKHVybCk7XG4gIGlmICghcmVzcC5vaykge1xuICAgIGxldCBtc2cgPSBgUmVxdWVzdCBmYWlsZWQgKCR7cmVzcC5zdGF0dXN9KWA7XG4gICAgdHJ5IHsgY29uc3QgYm9keSA9IGF3YWl0IHJlc3AuanNvbigpOyBtc2cgPSBib2R5LmVycm9yIHx8IG1zZzsgfSBjYXRjaCAoXykge31cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gcmVzcC5qc29uKCk7XG59XG5cbi8qKiBERUxFVEUgcmVxdWVzdC4gUmV0dXJucyBwYXJzZWQgSlNPTiByZXNwb25zZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFQSSh1cmwpIHtcbiAgY29uc3QgcmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKHVybCwgeyBtZXRob2Q6ICdERUxFVEUnIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwLmpzb24oKTtcbiAgaWYgKCFyZXNwLm9rIHx8IHJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IgfHwgYERlbGV0ZSBmYWlsZWQgKCR7cmVzcC5zdGF0dXN9KWApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUnVuIGFuIGFzeW5jIG9wZXJhdGlvbiB3aXRoIGJ1dHRvbiBsb2FkaW5nIHN0YXRlLlxuICogRGlzYWJsZXMgdGhlIGJ1dHRvbiwgc2hvd3MgbG9hZGluZyB0ZXh0LCByZXN0b3JlcyBvbiBjb21wbGV0ZS5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJ0biAtIEJ1dHRvbiBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbG9hZGluZ1RleHQgLSBUZXh0IHRvIHNob3cgd2hpbGUgbG9hZGluZyAoZS5nLiAnU2F2aW5nLi4uJylcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGFzeW5jRm4gLSBBc3luYyBmdW5jdGlvbiB0byBleGVjdXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnM6IHsgc3VjY2Vzc1RleHQsIHJlc2V0RGVsYXkgfVxuICovXG5hc3luYyBmdW5jdGlvbiB3aXRoQnV0dG9uKGJ0biwgbG9hZGluZ1RleHQsIGFzeW5jRm4sIG9wdHMgPSB7fSkge1xuICBjb25zdCBvcmlnaW5hbCA9IGJ0bi5pbm5lckhUTUw7XG4gIGNvbnN0IHsgc3VjY2Vzc1RleHQgPSAnXHUyNzA1JywgcmVzZXREZWxheSA9IERDLkRFTEFZUy5CVE5fUkVTRVQgfSA9IG9wdHM7XG4gIGJ0bi5kaXNhYmxlZCA9IHRydWU7XG4gIGJ0bi5pbm5lckhUTUwgPSBsb2FkaW5nVGV4dDtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhc3luY0ZuKCk7XG4gICAgYnRuLmlubmVySFRNTCA9IHN1Y2Nlc3NUZXh0O1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyBidG4uaW5uZXJIVE1MID0gb3JpZ2luYWw7IGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyB9LCByZXNldERlbGF5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgYnRuLmlubmVySFRNTCA9IG9yaWdpbmFsO1xuICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRocm93IGU7XG4gIH1cbn1cblxuLyoqIFNob3cvaGlkZSBhIG1vZGFsIGJ5IElEICovXG5mdW5jdGlvbiBvcGVuTW9kYWwoaWQpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpPy5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG59XG5mdW5jdGlvbiBjbG9zZU1vZGFsKGlkKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKT8uY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xufVxuXG4vKiogV2lyZSBiYWNrZHJvcC1jbGljayBjbG9zZSArIG9wdGlvbmFsIGNsb3NlIGJ1dHRvbnMgZm9yIGEgbW9kYWwgZWxlbWVudCAqL1xuZnVuY3Rpb24gd2lyZU1vZGFsKG1vZGFsLCAuLi5jbG9zZUJ0bnMpIHtcbiAgaWYgKCFtb2RhbCkgcmV0dXJuO1xuICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsgfSk7XG4gIC8vIFNraXAgYW55dGhpbmcgdGhhdCBpc24ndCBhIHJlYWwgbGlzdGVuZXIgdGFyZ2V0LiBXaXRob3V0IHRoaXMgZ3VhcmQsIGFcbiAgLy8gc2luZ2xlIHR5cG8gKGUuZy4gcGFzc2luZyBhIGZ1bmN0aW9uIG9yIG51bGwgaW5zdGVhZCBvZiBhIGJ1dHRvbiBlbGVtZW50KVxuICAvLyB0aHJvd3MgYW5kIGFib3J0cyB0aGUgcmVzdCBvZiB0aGUgY2FsbGluZyBtb2R1bGUncyBpbml0IFx1MjAxNCB3aGljaCBjYW4gdGFrZVxuICAvLyBkb3duIGxpY2Vuc2UuanMgKEZSRUUgVElFUiBiYWRnZSksIFRPVFAgd2lyaW5nLCBldGMuXG4gIGNsb3NlQnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgaWYgKGJ0biAmJiB0eXBlb2YgYnRuLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFRvYXN0LXN0eWxlIG5vdGlmaWNhdGlvbiAocmVwbGFjZXMgYWxsIGFsZXJ0KCkgdXNhZ2UpICovXG5mdW5jdGlvbiBzaG93Tm90aWZpY2F0aW9uKHRleHQsIHR5cGUgPSAnaW5mbycsIGR1cmF0aW9uID0gMzAwMCkge1xuICBjb25zdCBleGlzdGluZ05vdGlmID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRlcGxveS1ub3RpZmljYXRpb24nKTtcbiAgaWYgKGV4aXN0aW5nTm90aWYpIGV4aXN0aW5nTm90aWYucmVtb3ZlKCk7XG5cbiAgY29uc3QgY29sb3JzID0ge1xuICAgIGluZm86ICAgIHsgYmc6ICcjMjE5NkYzJywgICAgICAgZmc6ICcjZmZmJyB9LFxuICAgIHN1Y2Nlc3M6IHsgYmc6ICd2YXIoLS1vay1iZyknLCAgZmc6ICd2YXIoLS1vay1mZyknIH0sXG4gICAgZXJyb3I6ICAgeyBiZzogJyNmNDQzMzYnLCAgICAgICBmZzogJyNmZmYnIH0sXG4gICAgd2FybmluZzogeyBiZzogJyNmZjk4MDAnLCAgICAgICBmZzogJyNmZmYnIH1cbiAgfTtcblxuICBjb25zdCBjID0gY29sb3JzW3R5cGVdIHx8IGNvbG9ycy5pbmZvO1xuICBjb25zdCBtc2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbXNnLmNsYXNzTmFtZSA9ICdkZXBsb3ktbm90aWZpY2F0aW9uJztcbiAgbXNnLnRleHRDb250ZW50ID0gdGV4dDtcbiAgbXNnLnN0eWxlLmNzc1RleHQgPSBgXG4gICAgcG9zaXRpb246IGZpeGVkOyB0b3A6IDIwcHg7IHJpZ2h0OiAyMHB4O1xuICAgIGJhY2tncm91bmQ6ICR7Yy5iZ307IGNvbG9yOiAke2MuZmd9O1xuICAgIHBhZGRpbmc6IDE2cHggMjRweDsgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLDAsMCwuMyk7XG4gICAgei1pbmRleDogMTAwMDA7IGFuaW1hdGlvbjogc2xpZGVJbiAwLjNzIGVhc2Utb3V0O1xuICAgIG1heC13aWR0aDogNDAwcHg7IHdoaXRlLXNwYWNlOiBwcmUtbGluZTsgZm9udC1zaXplOiAxNHB4O1xuICBgO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1zZyk7XG4gIGlmIChkdXJhdGlvbiA+IDApIHNldFRpbWVvdXQoKCkgPT4gbXNnLnJlbW92ZSgpLCBkdXJhdGlvbik7XG59XG5cbi8qKiBSZWxhdGl2ZSB0aW1lIGRpc3BsYXkgKGUuZy4gXCI1bSBhZ29cIiwgXCIyaCBhZ29cIikgKi9cbmZ1bmN0aW9uIHRpbWVBZ28odHMpIHtcbiAgY29uc3QgZGlmZiA9IERhdGUubm93KCkgLSBuZXcgRGF0ZSh0cykuZ2V0VGltZSgpO1xuICBpZiAoZGlmZiA8IDYwMDAwKSByZXR1cm4gJ2p1c3Qgbm93JztcbiAgaWYgKGRpZmYgPCAzNjAwMDAwKSByZXR1cm4gTWF0aC5mbG9vcihkaWZmIC8gNjAwMDApICsgJ20gYWdvJztcbiAgaWYgKGRpZmYgPCA4NjQwMDAwMCkgcmV0dXJuIE1hdGguZmxvb3IoZGlmZiAvIDM2MDAwMDApICsgJ2ggYWdvJztcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZiAvIDg2NDAwMDAwKSArICdkIGFnbyc7XG59XG5cbi8vID09PT09IFNBRkUgU1RPUkFHRSBXUkFQUEVSUyA9PT09PVxuLy8gUHJldmVudHMgY3Jhc2hlcyBpbiBTYWZhcmkgcHJpdmF0ZSBicm93c2luZywgcXVvdGEgZXhjZWVkZWQsIG9yIHJlc3RyaWN0ZWQgZW52aXJvbm1lbnRzXG5mdW5jdGlvbiBzYWZlR2V0KGtleSwgZmFsbGJhY2sgPSBudWxsKSB7XG4gIHRyeSB7IGNvbnN0IHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOyByZXR1cm4gdiAhPT0gbnVsbCA/IHYgOiBmYWxsYmFjazsgfSBjYXRjaCAoXykgeyByZXR1cm4gZmFsbGJhY2s7IH1cbn1cbmZ1bmN0aW9uIHNhZmVTZXQoa2V5LCB2YWx1ZSkge1xuICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTsgfSBjYXRjaCAoXykgeyAvKiBxdW90YSBleGNlZWRlZCBvciBwcml2YXRlIG1vZGUgKi8gfVxufVxuZnVuY3Rpb24gc2FmZVJlbW92ZShrZXkpIHtcbiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTsgfSBjYXRjaCAoXykge31cbn1cbmZ1bmN0aW9uIHNhZmVTZXNzaW9uR2V0KGtleSwgZmFsbGJhY2sgPSBudWxsKSB7XG4gIHRyeSB7IGNvbnN0IHYgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7IHJldHVybiB2ICE9PSBudWxsID8gdiA6IGZhbGxiYWNrOyB9IGNhdGNoIChfKSB7IHJldHVybiBmYWxsYmFjazsgfVxufVxuZnVuY3Rpb24gc2FmZVNlc3Npb25TZXQoa2V5LCB2YWx1ZSkge1xuICB0cnkgeyBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpOyB9IGNhdGNoIChfKSB7fVxufVxuLyoqIFBhcnNlIEpTT04gZnJvbSBsb2NhbFN0b3JhZ2Ugd2l0aCBmYWxsYmFjayBcdTIwMTQgYXZvaWRzIHRyeS9jYXRjaCBhdCBldmVyeSBjYWxsIHNpdGUgKi9cbmZ1bmN0aW9uIHNhZmVHZXRKU09OKGtleSwgZmFsbGJhY2sgPSBudWxsKSB7XG4gIHRyeSB7IGNvbnN0IHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOyByZXR1cm4gdiA/IEpTT04ucGFyc2UodikgOiBmYWxsYmFjazsgfSBjYXRjaCAoXykgeyByZXR1cm4gZmFsbGJhY2s7IH1cbn1cblxuLyoqIEVzY2FwZSBIVE1MIGVudGl0aWVzIGZvciBzYWZlIGlubmVySFRNTCBpbnNlcnRpb24gKGhhbmRsZXMgYm90aCBjb250ZW50IGFuZCBhdHRyaWJ1dGVzKSAqL1xuZnVuY3Rpb24gZXNjYXBlSHRtbCh0ZXh0KSB7XG4gIHJldHVybiBTdHJpbmcodGV4dCA/PyAnJykucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpO1xufVxuXG4vKiogSW5qZWN0IG1vZGFsIEhUTUwgaW50byBET00gKGlkZW1wb3RlbnQgXHUyMDE0IHNraXBzIGlmIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMpICovXG5mdW5jdGlvbiBpbmplY3RNb2RhbChpZCwgaHRtbCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKSByZXR1cm47XG4gIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBodG1sKTtcbn1cblxuLy8gPT09PT0gRVZFTlQgQlVTID09PT09XG4vLyBMaWdodHdlaWdodCBwdWIvc3ViIGZvciBjcm9zcy1tb2R1bGUgY29tbXVuaWNhdGlvbiB3aXRob3V0IHdpbmRvdyBnbG9iYWxzLlxuLy8gVXNhZ2U6IERDX0JVUy5vbignc2VydmljZXM6bG9hZGVkJywgaGFuZGxlcik7IERDX0JVUy5lbWl0KCdzZXJ2aWNlczpsb2FkZWQnLCBkYXRhKTtcbmNvbnN0IERDX0JVUyA9IHtcbiAgX2hhbmRsZXJzOiB7fSxcbiAgb24oZXZlbnQsIGZuKSB7ICh0aGlzLl9oYW5kbGVyc1tldmVudF0gfHw9IFtdKS5wdXNoKGZuKTsgfSxcbiAgb2ZmKGV2ZW50LCBmbikgeyB0aGlzLl9oYW5kbGVyc1tldmVudF0gPSB0aGlzLl9oYW5kbGVyc1tldmVudF0/LmZpbHRlcihoID0+IGggIT09IGZuKTsgfSxcbiAgZW1pdChldmVudCwgZGF0YSkgeyB0aGlzLl9oYW5kbGVyc1tldmVudF0/LmZvckVhY2goZm4gPT4gZm4oZGF0YSkpOyB9XG59O1xuXG4vLyA9PT09PSBDRU5UUkFMSVpFRCBBUFAgU1RBVEUgPT09PT1cbi8vIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBzZXJ2aWNlcyBhcnJheS4gTW9kdWxlcyBzaG91bGQgdXNlIEFwcFN0YXRlXG4vLyBpbnN0ZWFkIG9mIG11dGF0aW5nIHdpbmRvdy5BUFBTIGRpcmVjdGx5LiBFbWl0cyAnYXBwczpjaGFuZ2VkJyBvbiB1cGRhdGVzLlxuY29uc3QgQXBwU3RhdGUgPSB7XG4gIF9hcHBzOiBbXSxcbiAgZ2V0QXBwcygpIHsgcmV0dXJuIHRoaXMuX2FwcHM7IH0sXG4gIHNldEFwcHMoYXBwcykgeyB0aGlzLl9hcHBzID0gYXBwczsgd2luZG93LkFQUFMgPSBhcHBzOyBEQ19CVVMuZW1pdCgnYXBwczpjaGFuZ2VkJywgYXBwcyk7IH0sXG4gIGZpbmRBcHAoaWQpIHsgcmV0dXJuIHRoaXMuX2FwcHMuZmluZChhID0+IGEuaWQgPT09IGlkKTsgfSxcbiAgYWRkQXBwKGFwcCkgeyB0aGlzLl9hcHBzLnB1c2goYXBwKTsgd2luZG93LkFQUFMgPSB0aGlzLl9hcHBzOyBEQ19CVVMuZW1pdCgnYXBwczpjaGFuZ2VkJywgdGhpcy5fYXBwcyk7IH0sXG4gIHJlbW92ZUFwcChpZCkge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuX2FwcHMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICAgIGlmIChpZHggPiAtMSkgeyB0aGlzLl9hcHBzLnNwbGljZShpZHgsIDEpOyB3aW5kb3cuQVBQUyA9IHRoaXMuX2FwcHM7IERDX0JVUy5lbWl0KCdhcHBzOmNoYW5nZWQnLCB0aGlzLl9hcHBzKTsgfVxuICAgIHJldHVybiBpZHggPiAtMTtcbiAgfSxcbiAgdXBkYXRlQXBwKGlkLCBjaGFuZ2VzKSB7XG4gICAgY29uc3QgYXBwID0gdGhpcy5fYXBwcy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICAgIGlmIChhcHApIHtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpKSB7XG4gICAgICAgIGlmIChrICE9PSAnX19wcm90b19fJyAmJiBrICE9PSAnY29uc3RydWN0b3InICYmIGsgIT09ICdwcm90b3R5cGUnKSBhcHBba10gPSB2O1xuICAgICAgfVxuICAgICAgRENfQlVTLmVtaXQoJ2FwcHM6Y2hhbmdlZCcsIHRoaXMuX2FwcHMpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwO1xuICB9XG59O1xuO1xuLy8gPT09PT09PT09PSBTS0VMRVRPTiBMT0FESU5HIFBMQUNFSE9MREVSUyA9PT09PT09PT09XG4oZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNrZWxldG9uQ2FyZCgpIHtcbiAgICBjb25zdCBjYXJkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY2FyZC5jbGFzc05hbWUgPSAnc2tlbGV0b24tY2FyZCc7XG4gICAgY2FyZC5pbm5lckhUTUwgPVxuICAgICAgJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTJweFwiPicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNrZWxldG9uLWJhclwiIHN0eWxlPVwid2lkdGg6NDhweDtoZWlnaHQ6NDhweDtib3JkZXItcmFkaXVzOjhweDtmbGV4LXNocmluazowXCI+PC9kaXY+JyArXG4gICAgICAgICc8ZGl2IHN0eWxlPVwiZmxleDoxXCI+JyArXG4gICAgICAgICAgJzxkaXYgY2xhc3M9XCJza2VsZXRvbi1iYXJcIiBzdHlsZT1cIndpZHRoOjYwJTtoZWlnaHQ6MTRweDttYXJnaW4tYm90dG9tOjZweFwiPjwvZGl2PicgK1xuICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2tlbGV0b24tYmFyXCIgc3R5bGU9XCJ3aWR0aDozNSU7aGVpZ2h0OjEwcHhcIj48L2Rpdj4nICtcbiAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNrZWxldG9uLWJhclwiIHN0eWxlPVwid2lkdGg6NDJweDtoZWlnaHQ6MjJweDtib3JkZXItcmFkaXVzOjExcHhcIj48L2Rpdj4nICtcbiAgICAgICc8L2Rpdj4nICtcbiAgICAgICc8ZGl2IGNsYXNzPVwic2tlbGV0b24tYmFyXCIgc3R5bGU9XCJ3aWR0aDo0NSU7aGVpZ2h0OjEycHg7bWFyZ2luLWJvdHRvbToxMHB4XCI+PC9kaXY+JyArXG4gICAgICAnPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6YXV0b1wiPicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNrZWxldG9uLWJhclwiIHN0eWxlPVwid2lkdGg6NjRweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjhweFwiPjwvZGl2PicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNrZWxldG9uLWJhclwiIHN0eWxlPVwid2lkdGg6NjRweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjhweFwiPjwvZGl2PicgK1xuICAgICAgJzwvZGl2Pic7XG4gICAgcmV0dXJuIGNhcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBzaG93U2tlbGV0b25zKGNvdW50KSB7XG4gICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXJkcycpO1xuICAgIGlmICghZ3JpZCB8fCBncmlkLnF1ZXJ5U2VsZWN0b3IoJy5jYXJkJykpIHJldHVybjsgLy8gRG9uJ3Qgc2hvdyBpZiByZWFsIGNhcmRzIGV4aXN0XG4gICAgY291bnQgPSBjb3VudCB8fCA2O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBzayA9IGNyZWF0ZVNrZWxldG9uQ2FyZCgpO1xuICAgICAgZ3JpZC5hcHBlbmRDaGlsZChzayk7XG4gICAgICAvLyBTdGFnZ2VyIGZhZGUtaW5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzay5jbGFzc0xpc3QuYWRkKCdsb2FkZWQnKTsgfSwgaSAqIDYwKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoaWRlU2tlbGV0b25zKCkge1xuICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FyZHMnKTtcbiAgICBpZiAoIWdyaWQpIHJldHVybjtcbiAgICB2YXIgc2tlbGV0b25zID0gZ3JpZC5xdWVyeVNlbGVjdG9yQWxsKCcuc2tlbGV0b24tY2FyZCcpO1xuICAgIGlmICghc2tlbGV0b25zLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgc2tlbGV0b25zLmZvckVhY2goZnVuY3Rpb24gKHNrLCBpKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2suc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgICAgc2suc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVkoLTEwcHgpJztcbiAgICAgIH0sIGkgKiAyNSk7XG4gICAgfSk7XG4gICAgLy8gUmVtb3ZlIGFmdGVyIGFuaW1hdGlvblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2tlbGV0b25zLmZvckVhY2goZnVuY3Rpb24gKHNrKSB7IGlmIChzay5wYXJlbnROb2RlKSBzay5yZW1vdmUoKTsgfSk7XG4gICAgfSwgc2tlbGV0b25zLmxlbmd0aCAqIDI1ICsgMzAwKTtcbiAgfVxuXG4gIHdpbmRvdy5Ta2VsZXRvbkxvYWRlciA9IHsgc2hvdzogc2hvd1NrZWxldG9ucywgaGlkZTogaGlkZVNrZWxldG9ucyB9O1xufSkoKTtcbjtcbi8vID09PT09PT09PT0gVEhFTUUgQ09OVFJPTExFUiA9PT09PT09PT09XG4vLyBVc2VyLWNyZWF0ZWQgdGhlbWVzIGFyZSBzdG9yZWQgc2VydmVyLXNpZGUgYXMgaW5kaXZpZHVhbCBKU09OIGZpbGVzLlxuLy8gbG9jYWxTdG9yYWdlIGNhY2hlcyB0aGVtIGZvciBpbnN0YW50IGxvYWQ7IHNlcnZlciBpcyBzb3VyY2Ugb2YgdHJ1dGguXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgVEhFTUVfS0VZID0gJ3RoZW1lJztcbiAgdmFyIFVTRVJfVEhFTUVTX0tFWSA9ICd1c2VyLXRoZW1lcyc7XG4gIHZhciBMRUdBQ1lfQ1VTVE9NX0tFWSA9ICdjdXN0b20tdGhlbWUnO1xuXG4gIHZhciBCVUlMVElOX1RIRU1FUyA9IFsnZGFyaycsICdsaWdodCcsICdibHVlJywgJ2JsYWNrJywgJ25vcmQnLCAnZHJhY3VsYScsICdzb2xhcml6ZWQtZGFyaycsICdzb2xhcml6ZWQtbGlnaHQnLCAndGF4aScsICdvY2VhbiddO1xuICB2YXIgVEhFTUVTID0gQlVJTFRJTl9USEVNRVMuc2xpY2UoKTtcblxuICB2YXIgVEhFTUVfUFJPUFMgPSBbXG4gICAgJ2JnJywgJ2ZnJywgJ211dGVkJywgJ2ZnLW11dGVkJywgJ2NhcmQtYmFzZScsICdjYXJkLWJnJywgJ2JvcmRlcicsXG4gICAgJ2hvdmVyJywgJ2NhcmQtaG92ZXInLCAnYmFzZScsXG4gICAgJ29rLWJnJywgJ29rLWZnJywgJ2JhZC1iZycsICdiYWQtZmcnLCAnZG90LW9rJywgJ2RvdC1iYWQnLCAndXB0aW1lJyxcbiAgICAnc3VjY2VzcycsICdlcnJvcicsICd3YXJuaW5nJyxcbiAgICAnYWNjZW50JywgJ2FjY2VudC1zdHJvbmcnXG4gIF07XG5cbiAgLy8gQmFzZSBwcm9wcyB0aGUgdXNlciBwaWNrcyBpbiB0aGUgYnVpbGRlciAoc3Vic2V0IG9mIFRIRU1FX1BST1BTKVxuICB2YXIgQkFTRV9QUk9QUyA9IFtcbiAgICAnYmcnLCAnZmcnLCAnbXV0ZWQnLCAnY2FyZC1iYXNlJywgJ2NhcmQtYmcnLCAnYm9yZGVyJyxcbiAgICAnb2stYmcnLCAnb2stZmcnLCAnYmFkLWJnJywgJ2JhZC1mZycsICdkb3Qtb2snLCAnZG90LWJhZCcsICd1cHRpbWUnLFxuICAgICdhY2NlbnQnLCAnYWNjZW50LXN0cm9uZydcbiAgXTtcblxuICAvLyBQcm9wcyB0aGF0IGFyZSBhdXRvLWRlcml2ZWQgaWYgbm90IGV4cGxpY2l0bHkgc2V0XG4gIHZhciBERVJJVkVEX1BST1BTID0gWydmZy1tdXRlZCcsICdob3ZlcicsICdjYXJkLWhvdmVyJywgJ2Jhc2UnLCAnc3VjY2VzcycsICdlcnJvcicsICd3YXJuaW5nJ107XG5cbiAgdmFyIFRIRU1FX0NPTE9SUyA9IHtcbiAgICBkYXJrOiAgICAgICAgICAgICB7IGJnOiAnIzBiMGYxYScsIGZnOiAnI2U4ZWNmNScsIG11dGVkOiAnIzlhYTZiZicsICdmZy1tdXRlZCc6ICcjNmI3YTk0JywgJ2NhcmQtYmFzZSc6ICcjMTIxODI2JywgJ2NhcmQtYmcnOiAnIzEyMTgyNicsIGJvcmRlcjogJyMyNjM1NTInLCBob3ZlcjogJyMxYTIyMzUnLCAnY2FyZC1ob3Zlcic6ICcjMTYxZTJlJywgYmFzZTogJyMxNTFjMmInLCAnb2stYmcnOiAnIzBjMjQzMCcsICdvay1mZyc6ICcjN2VmMmZmJywgJ2JhZC1iZyc6ICcjMmExMjFhJywgJ2JhZC1mZyc6ICcjZmY5YWEzJywgJ2RvdC1vayc6ICcjMzVkMWZmJywgJ2RvdC1iYWQnOiAnI2ZmNWY3YScsIHVwdGltZTogJyMzNWQxZmYnLCBzdWNjZXNzOiAnIzRjYWY1MCcsIGVycm9yOiAnI2U3NGMzYycsIHdhcm5pbmc6ICcjZjM5YzEyJywgYWNjZW50OiAnIzhGRDZGRicsICdhY2NlbnQtc3Ryb25nJzogJyMxRjdCRkYnIH0sXG4gICAgbGlnaHQ6ICAgICAgICAgICAgeyBiZzogJyNmNmY3ZmInLCBmZzogJyMwZjExMTUnLCBtdXRlZDogJyM1ZjZiN2EnLCAnZmctbXV0ZWQnOiAnIzg5OTNhNCcsICdjYXJkLWJhc2UnOiAnI2ZmZmZmZicsICdjYXJkLWJnJzogJyNmZmZmZmYnLCBib3JkZXI6ICcjZTJlN2VmJywgaG92ZXI6ICcjZWVmMWY2JywgJ2NhcmQtaG92ZXInOiAnI2Y1ZjZmYScsIGJhc2U6ICcjZWJlZWYzJywgJ29rLWJnJzogJyNlYWZmZjEnLCAnb2stZmcnOiAnIzBhN2MzYScsICdiYWQtYmcnOiAnI2ZmZWZlZicsICdiYWQtZmcnOiAnI2IwMDAyMCcsICdkb3Qtb2snOiAnIzBmYjE1YScsICdkb3QtYmFkJzogJyNkOTNiM2InLCB1cHRpbWU6ICcjMGZiMTVhJywgc3VjY2VzczogJyMwYTdjM2EnLCBlcnJvcjogJyNiMDAwMjAnLCB3YXJuaW5nOiAnI2Q2OGEwMCcsIGFjY2VudDogJyM0YTkwZDknLCAnYWNjZW50LXN0cm9uZyc6ICcjMjU2M2ViJywgbGlnaHRCZzogdHJ1ZSB9LFxuICAgIGJsdWU6ICAgICAgICAgICAgIHsgYmc6ICcjMTkwOEFDJywgZmc6ICcjZThmMWZmJywgbXV0ZWQ6ICcjZDZlMmZmJywgJ2ZnLW11dGVkJzogJyM5ZWFmZGInLCAnY2FyZC1iYXNlJzogJyMwZDE1MzMnLCAnY2FyZC1iZyc6ICcjMGQxNTMzJywgYm9yZGVyOiAnIzFjMmQ2YScsIGhvdmVyOiAnIzE0MWY0YScsICdjYXJkLWhvdmVyJzogJyMxMTFhM2UnLCBiYXNlOiAnIzBmMTg0MCcsICdvay1iZyc6ICcjMTYyMDQwJywgJ29rLWZnJzogJyNlZGZmZmYnLCAnYmFkLWJnJzogJyMwYTBlMjQnLCAnYmFkLWZnJzogJyNmZmIzYzAnLCAnZG90LW9rJzogJyNjN2U1ZmYnLCAnZG90LWJhZCc6ICcjZmZkNmRjJywgdXB0aW1lOiAnIzdlYzhmZicsIHN1Y2Nlc3M6ICcjN2VjOGZmJywgZXJyb3I6ICcjZmZiM2MwJywgd2FybmluZzogJyNmZmQwODAnLCBhY2NlbnQ6ICcjOWNkNGZmJywgJ2FjY2VudC1zdHJvbmcnOiAnIzZmYjJmZicgfSxcbiAgICBibGFjazogICAgICAgICAgICB7IGJnOiAnIzBlMGUwZScsIGZnOiAnI2Y1ZjVmNScsIG11dGVkOiAnIzk5OTk5OScsICdmZy1tdXRlZCc6ICcjNjY2NjY2JywgJ2NhcmQtYmFzZSc6ICcjMWExYTFhJywgJ2NhcmQtYmcnOiAnIzFhMWExYScsIGJvcmRlcjogJyMyZTJlMmUnLCBob3ZlcjogJyMyNDI0MjQnLCAnY2FyZC1ob3Zlcic6ICcjMjAyMDIwJywgYmFzZTogJyMxNjE2MTYnLCAnb2stYmcnOiAnIzBmMmExMicsICdvay1mZyc6ICcjNjZmZjdhJywgJ2JhZC1iZyc6ICcjMmEwZjBmJywgJ2JhZC1mZyc6ICcjZmY2YjZiJywgJ2RvdC1vayc6ICcjNGNhZjUwJywgJ2RvdC1iYWQnOiAnI2ZmNDQ0NCcsIHVwdGltZTogJyNlMGUwZTAnLCBzdWNjZXNzOiAnIzRjYWY1MCcsIGVycm9yOiAnI2ZmNDQ0NCcsIHdhcm5pbmc6ICcjZmY5ODAwJywgYWNjZW50OiAnI0U2Mzk0NicsICdhY2NlbnQtc3Ryb25nJzogJyNDNjI4MjgnIH0sXG4gICAgbm9yZDogICAgICAgICAgICAgeyBiZzogJyMyZTM0NDAnLCBmZzogJyNlY2VmZjQnLCBtdXRlZDogJyM4MWExYzEnLCAnZmctbXV0ZWQnOiAnIzY4ODJhMCcsICdjYXJkLWJhc2UnOiAnIzNiNDI1MicsICdjYXJkLWJnJzogJyMzYjQyNTInLCBib3JkZXI6ICcjNGM1NjZhJywgaG92ZXI6ICcjNDM0YzVlJywgJ2NhcmQtaG92ZXInOiAnIzNmNDg1OCcsIGJhc2U6ICcjMzUzYzRhJywgJ29rLWJnJzogJyMyZDRmM2UnLCAnb2stZmcnOiAnI2EzYmU4YycsICdiYWQtYmcnOiAnIzRhMmMyYScsICdiYWQtZmcnOiAnI2JmNjE2YScsICdkb3Qtb2snOiAnI2EzYmU4YycsICdkb3QtYmFkJzogJyNiZjYxNmEnLCB1cHRpbWU6ICcjYTNiZThjJywgc3VjY2VzczogJyNhM2JlOGMnLCBlcnJvcjogJyNiZjYxNmEnLCB3YXJuaW5nOiAnI2ViY2I4YicsIGFjY2VudDogJyM4OGMwZDAnLCAnYWNjZW50LXN0cm9uZyc6ICcjNWU4MWFjJyB9LFxuICAgIGRyYWN1bGE6ICAgICAgICAgIHsgYmc6ICcjMjgyYTM2JywgZmc6ICcjZjhmOGYyJywgbXV0ZWQ6ICcjNjI3MmE0JywgJ2ZnLW11dGVkJzogJyM1MTVkODUnLCAnY2FyZC1iYXNlJzogJyM0NDQ3NWEnLCAnY2FyZC1iZyc6ICcjNDQ0NzVhJywgYm9yZGVyOiAnIzYyNzJhNCcsIGhvdmVyOiAnIzRlNTE3MCcsICdjYXJkLWhvdmVyJzogJyM0OTRjNjMnLCBiYXNlOiAnIzM2Mzg0OCcsICdvay1iZyc6ICcjMWUzYTJlJywgJ29rLWZnJzogJyM1MGZhN2InLCAnYmFkLWJnJzogJyMzZDFhMWEnLCAnYmFkLWZnJzogJyNmZjU1NTUnLCAnZG90LW9rJzogJyM1MGZhN2InLCAnZG90LWJhZCc6ICcjZmY1NTU1JywgdXB0aW1lOiAnIzUwZmE3YicsIHN1Y2Nlc3M6ICcjNTBmYTdiJywgZXJyb3I6ICcjZmY1NTU1Jywgd2FybmluZzogJyNmMWZhOGMnLCBhY2NlbnQ6ICcjYmQ5M2Y5JywgJ2FjY2VudC1zdHJvbmcnOiAnIzhiZTlmZCcgfSxcbiAgICAnc29sYXJpemVkLWRhcmsnOiB7IGJnOiAnIzAwMmIzNicsIGZnOiAnIzgzOTQ5NicsIG11dGVkOiAnIzU4NmU3NScsICdmZy1tdXRlZCc6ICcjNGE1ZjY1JywgJ2NhcmQtYmFzZSc6ICcjMDczNjQyJywgJ2NhcmQtYmcnOiAnIzA3MzY0MicsIGJvcmRlcjogJyM1ODZlNzUnLCBob3ZlcjogJyMwZDQwNTAnLCAnY2FyZC1ob3Zlcic6ICcjMGEzYTQ4JywgYmFzZTogJyMwNTMzNDAnLCAnb2stYmcnOiAnIzBkM2QyYycsICdvay1mZyc6ICcjODU5OTAwJywgJ2JhZC1iZyc6ICcjM2QxYTFhJywgJ2JhZC1mZyc6ICcjZGMzMjJmJywgJ2RvdC1vayc6ICcjODU5OTAwJywgJ2RvdC1iYWQnOiAnI2RjMzIyZicsIHVwdGltZTogJyNiNWJkNjgnLCBzdWNjZXNzOiAnIzg1OTkwMCcsIGVycm9yOiAnI2RjMzIyZicsIHdhcm5pbmc6ICcjYjU4OTAwJywgYWNjZW50OiAnIzI2OGJkMicsICdhY2NlbnQtc3Ryb25nJzogJyMyYWExOTgnIH0sXG4gICAgJ3NvbGFyaXplZC1saWdodCc6eyBiZzogJyNmZGY2ZTMnLCBmZzogJyM2NTdiODMnLCBtdXRlZDogJyM5M2ExYTEnLCAnZmctbXV0ZWQnOiAnI2FkYjhiOCcsICdjYXJkLWJhc2UnOiAnI2VlZThkNScsICdjYXJkLWJnJzogJyNlZWU4ZDUnLCBib3JkZXI6ICcjOTNhMWExJywgaG92ZXI6ICcjZTZkZmNiJywgJ2NhcmQtaG92ZXInOiAnI2VhZTNjZicsIGJhc2U6ICcjZThlMWNkJywgJ29rLWJnJzogJyNlOGY1ZTgnLCAnb2stZmcnOiAnIzg1OTkwMCcsICdiYWQtYmcnOiAnI2ZkZjJmMicsICdiYWQtZmcnOiAnI2RjMzIyZicsICdkb3Qtb2snOiAnIzg1OTkwMCcsICdkb3QtYmFkJzogJyNkYzMyMmYnLCB1cHRpbWU6ICcjODU5OTAwJywgc3VjY2VzczogJyM4NTk5MDAnLCBlcnJvcjogJyNkYzMyMmYnLCB3YXJuaW5nOiAnI2I1ODkwMCcsIGFjY2VudDogJyMyNjhiZDInLCAnYWNjZW50LXN0cm9uZyc6ICcjMmFhMTk4JywgbGlnaHRCZzogdHJ1ZSB9LFxuICAgIHRheGk6ICAgICAgICAgICAgIHsgYmc6ICcjZjNkMzIxJywgZmc6ICcjMGUwZTAwJywgbXV0ZWQ6ICcjNGE0YTEwJywgJ2ZnLW11dGVkJzogJyM2YjZiMzAnLCAnY2FyZC1iYXNlJzogJyNmZmQ3MDAnLCAnY2FyZC1iZyc6ICcjZmZkNzAwJywgYm9yZGVyOiAnI2I4YTg0MCcsIGhvdmVyOiAnI2ZmZTg0ZCcsICdjYXJkLWhvdmVyJzogJyNmZmUwMzMnLCBiYXNlOiAnI2YwZDAwMCcsICdvay1iZyc6ICcjZDRmZmQ5JywgJ29rLWZnJzogJyMwZjJhMGYnLCAnYmFkLWJnJzogJyNmZmQ0ZDQnLCAnYmFkLWZnJzogJyMyYTBmMGYnLCAnZG90LW9rJzogJyM0Y2FmNTAnLCAnZG90LWJhZCc6ICcjZmY0NDQ0JywgdXB0aW1lOiAnIzBlMGUwMCcsIHN1Y2Nlc3M6ICcjMmU3ZDMyJywgZXJyb3I6ICcjYzYyODI4Jywgd2FybmluZzogJyNlNjUxMDAnLCBhY2NlbnQ6ICcjN2E0YTAwJywgJ2FjY2VudC1zdHJvbmcnOiAnIzVjMzgwMCcsIGxpZ2h0Qmc6IHRydWUgfSxcbiAgICBvY2VhbjogICAgICAgICAgICB7IGJnOiAnIzIwNjBiMCcsIGZnOiAnI2ZhZjVlYicsIG11dGVkOiAnI2RjZDJjMCcsICdmZy1tdXRlZCc6ICcjYjBhODkwJywgJ2NhcmQtYmFzZSc6ICcjN2E5NGVkJywgJ2NhcmQtYmcnOiAnIzdhOTRlZCcsIGJvcmRlcjogJyNkZWI2N2EnLCBob3ZlcjogJyM4YWEwZjAnLCAnY2FyZC1ob3Zlcic6ICcjODI5OGU4JywgYmFzZTogJyM2ODg4ZTAnLCAnb2stYmcnOiAnIzRmNWJiMCcsICdvay1mZyc6ICcjYzdkN2ViJywgJ2JhZC1iZyc6ICcjZjQxYTNhJywgJ2JhZC1mZyc6ICcjNmExODE4JywgJ2RvdC1vayc6ICcjMzBhMDUwJywgJ2RvdC1iYWQnOiAnI2QwNDA0MCcsIHVwdGltZTogJyMyZDMyZjInLCBzdWNjZXNzOiAnIzMwYTA1MCcsIGVycm9yOiAnI2QwNDA0MCcsIHdhcm5pbmc6ICcjZTZhMDMwJywgYWNjZW50OiAnIzE4NjBhMCcsICdhY2NlbnQtc3Ryb25nJzogJyMxMDQwODAnIH0sXG4gIH07XG5cbiAgLy8gXHUyNTAwXHUyNTAwXHUyNTAwIENvbG9yIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbiAgZnVuY3Rpb24gaGV4VG9SZ2IoaGV4KSB7XG4gICAgaWYgKCFoZXggfHwgdHlwZW9mIGhleCAhPT0gJ3N0cmluZycpIHJldHVybiB7IHI6IDAsIGc6IDAsIGI6IDAgfTtcbiAgICBoZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50KGhleC5zdWJzdHIoMCwgMiksIDE2KSB8fCAwLFxuICAgICAgZzogcGFyc2VJbnQoaGV4LnN1YnN0cigyLCAyKSwgMTYpIHx8IDAsXG4gICAgICBiOiBwYXJzZUludChoZXguc3Vic3RyKDQsIDIpLCAxNikgfHwgMFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiByZ2JUb0hleChyLCBnLCBiKSB7XG4gICAgcmV0dXJuICcjJyArIFtyLCBnLCBiXS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHZhciBoID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHgpKSkudG9TdHJpbmcoMTYpO1xuICAgICAgcmV0dXJuIGgubGVuZ3RoID09PSAxID8gJzAnICsgaCA6IGg7XG4gICAgfSkuam9pbignJyk7XG4gIH1cblxuICBmdW5jdGlvbiBibGVuZENvbG9ycyhoZXgxLCBoZXgyLCByYXRpbykge1xuICAgIHZhciBjMSA9IGhleFRvUmdiKGhleDEpO1xuICAgIHZhciBjMiA9IGhleFRvUmdiKGhleDIpO1xuICAgIHJldHVybiByZ2JUb0hleChcbiAgICAgIGMxLnIgKyAoYzIuciAtIGMxLnIpICogcmF0aW8sXG4gICAgICBjMS5nICsgKGMyLmcgLSBjMS5nKSAqIHJhdGlvLFxuICAgICAgYzEuYiArIChjMi5iIC0gYzEuYikgKiByYXRpb1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBoZXhMdW1pbmFuY2UoaGV4KSB7XG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgaWYgKGhleC5sZW5ndGggPT09IDMpIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xuICAgIHZhciByID0gcGFyc2VJbnQoaGV4LnN1YnN0cigwLCAyKSwgMTYpIC8gMjU1O1xuICAgIHZhciBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cigyLCAyKSwgMTYpIC8gMjU1O1xuICAgIHZhciBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cig0LCAyKSwgMTYpIC8gMjU1O1xuICAgIHIgPSByIDw9IDAuMDM5MjggPyByIC8gMTIuOTIgOiBNYXRoLnBvdygociArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGcgPSBnIDw9IDAuMDM5MjggPyBnIC8gMTIuOTIgOiBNYXRoLnBvdygoZyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGIgPSBiIDw9IDAuMDM5MjggPyBiIC8gMTIuOTIgOiBNYXRoLnBvdygoYiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIHJldHVybiAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDBcdTI1MDAgQXV0by1kZXJpdmUgZXh0ZW5kZWQgY29sb3JzIGZyb20gYmFzZSBwYWxldHRlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4gIGZ1bmN0aW9uIGRlcml2ZUV4dGVuZGVkQ29sb3JzKGNvbG9ycykge1xuICAgIHZhciBiZyA9IGNvbG9ycy5iZyB8fCAnIzBiMGYxYSc7XG4gICAgdmFyIGZnID0gY29sb3JzLmZnIHx8ICcjZThlY2Y1JztcbiAgICB2YXIgbXV0ZWQgPSBjb2xvcnMubXV0ZWQgfHwgJyM5YWE2YmYnO1xuICAgIHZhciBjYXJkQmFzZSA9IGNvbG9yc1snY2FyZC1iYXNlJ10gfHwgY29sb3JzLmJnIHx8ICcjMTIxODI2JztcbiAgICB2YXIgZG90T2sgPSBjb2xvcnNbJ2RvdC1vayddIHx8ICcjNGNhZjUwJztcbiAgICB2YXIgZG90QmFkID0gY29sb3JzWydkb3QtYmFkJ10gfHwgJyNlNzRjM2MnO1xuICAgIHZhciBpc0xpZ2h0ID0gY29sb3JzLmxpZ2h0QmcgfHwgKGJnICYmIGhleEx1bWluYW5jZShiZykgPiAwLjQpO1xuXG4gICAgdmFyIGRlcml2ZWQgPSB7fTtcblxuICAgIC8vIGhvdmVyOiBzdWJ0bGUgc2hpZnQgb2YgY2FyZC1iYXNlIHRvd2FyZCBmZyAoZGFyaykgb3IgdG93YXJkIGJnIChsaWdodClcbiAgICBkZXJpdmVkLmhvdmVyID0gaXNMaWdodFxuICAgICAgPyBibGVuZENvbG9ycyhjYXJkQmFzZSwgYmcsIDAuMzUpXG4gICAgICA6IGJsZW5kQ29sb3JzKGNhcmRCYXNlLCBmZywgMC4wOCk7XG5cbiAgICAvLyBjYXJkLWhvdmVyOiBtaWRwb2ludCBiZXR3ZWVuIGNhcmQtYmFzZSBhbmQgaG92ZXJcbiAgICBkZXJpdmVkWydjYXJkLWhvdmVyJ10gPSBibGVuZENvbG9ycyhjYXJkQmFzZSwgZGVyaXZlZC5ob3ZlciwgMC41KTtcblxuICAgIC8vIGJhc2U6IHN1YmR1ZWQgYmFja2dyb3VuZCBiZXR3ZWVuIGJnIGFuZCBjYXJkLWJhc2VcbiAgICBkZXJpdmVkLmJhc2UgPSBibGVuZENvbG9ycyhiZywgY2FyZEJhc2UsIDAuNik7XG5cbiAgICAvLyBmZy1tdXRlZDogZGltbWVyIHRoYW4gbXV0ZWQsIGJsZW5kIHRvd2FyZCBiZ1xuICAgIGRlcml2ZWRbJ2ZnLW11dGVkJ10gPSBibGVuZENvbG9ycyhtdXRlZCwgYmcsIDAuMzUpO1xuXG4gICAgLy8gc3VjY2VzczogcmV1c2UgZG90LW9rICh0aGUgZ3JlZW4gb2YgdGhpcyB0aGVtZSlcbiAgICBkZXJpdmVkLnN1Y2Nlc3MgPSBkb3RPaztcblxuICAgIC8vIGVycm9yOiByZXVzZSBkb3QtYmFkICh0aGUgcmVkIG9mIHRoaXMgdGhlbWUpXG4gICAgZGVyaXZlZC5lcnJvciA9IGRvdEJhZDtcblxuICAgIC8vIHdhcm5pbmc6IHdhcm0gYW1iZXIsIGFkanVzdGVkIGZvciBjb250cmFzdFxuICAgIGRlcml2ZWQud2FybmluZyA9IGlzTGlnaHQgPyAnI2Q2OGEwMCcgOiAnI2YzOWMxMic7XG5cbiAgICByZXR1cm4gZGVyaXZlZDtcbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMFx1MjUwMCBHZW5lcmF0ZSBib2R5IGJhY2tncm91bmQgQ1NTIGZvciB1c2VyIHRoZW1lcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuICBmdW5jdGlvbiBnZW5lcmF0ZUJvZHlCYWNrZ3JvdW5kQ1NTKHNsdWcsIGNvbG9ycykge1xuICAgIHZhciBpc0xpZ2h0ID0gY29sb3JzLmxpZ2h0QmcgfHwgKGNvbG9ycy5iZyAmJiBoZXhMdW1pbmFuY2UoY29sb3JzLmJnKSA+IDAuNCk7XG4gICAgdmFyIGFjY2VudCA9IGNvbG9ycy5hY2NlbnQgfHwgY29sb3JzWydhY2NlbnQtc3Ryb25nJ10gfHwgJyM4ODg4ODgnO1xuICAgIHZhciBhY2NlbnRSZ2IgPSBoZXhUb1JnYihhY2NlbnQpO1xuXG4gICAgaWYgKGlzTGlnaHQpIHtcbiAgICAgIHJldHVybiAnOnJvb3QuJyArIHNsdWcgKyAnIGJvZHkge1xcbicgK1xuICAgICAgICAnICBiYWNrZ3JvdW5kOlxcbicgK1xuICAgICAgICAnICAgIHJhZGlhbC1ncmFkaWVudCgxMjAwcHggODAwcHggYXQgMTAlIC0xMCUsIHJnYmEoJyArIGFjY2VudFJnYi5yICsgJywnICsgYWNjZW50UmdiLmcgKyAnLCcgKyBhY2NlbnRSZ2IuYiArICcsIC4wOCksIHRyYW5zcGFyZW50IDYwJSksXFxuJyArXG4gICAgICAgICcgICAgcmFkaWFsLWdyYWRpZW50KDEwMDBweCA3MDBweCBhdCAxMTAlIDEwJSwgcmdiYSgnICsgYWNjZW50UmdiLnIgKyAnLCcgKyBhY2NlbnRSZ2IuZyArICcsJyArIGFjY2VudFJnYi5iICsgJywgLjA1KSwgdHJhbnNwYXJlbnQgNTUlKSxcXG4nICtcbiAgICAgICAgJyAgICB2YXIoLS1iZyk7XFxuJyArXG4gICAgICAgICd9XFxuJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc6cm9vdC4nICsgc2x1ZyArICcgYm9keSB7XFxuJyArXG4gICAgICAgICcgIGJhY2tncm91bmQ6XFxuJyArXG4gICAgICAgICcgICAgcmFkaWFsLWdyYWRpZW50KDEyMDBweCA5MDBweCBhdCA4JSAtMTIlLCByZ2JhKCcgKyBhY2NlbnRSZ2IuciArICcsJyArIGFjY2VudFJnYi5nICsgJywnICsgYWNjZW50UmdiLmIgKyAnLCAuMTApLCB0cmFuc3BhcmVudCA2MCUpLFxcbicgK1xuICAgICAgICAnICAgIHJhZGlhbC1ncmFkaWVudCgxMDAwcHggNzAwcHggYXQgMTEwJSAtMTAlLCByZ2JhKCcgKyBhY2NlbnRSZ2IuciArICcsJyArIGFjY2VudFJnYi5nICsgJywnICsgYWNjZW50UmdiLmIgKyAnLCAuMDcpLCB0cmFuc3BhcmVudCA1NSUpLFxcbicgK1xuICAgICAgICAnICAgIHZhcigtLWJnKTtcXG4nICtcbiAgICAgICAgJ31cXG4nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMFx1MjUwMCBHZW5lcmF0ZSBidXR0b24gaG92ZXIgQ1NTIGZvciB1c2VyIHRoZW1lcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuICBmdW5jdGlvbiBnZW5lcmF0ZUJ1dHRvbkhvdmVyQ1NTKHNsdWcsIGNvbG9ycykge1xuICAgIHZhciBpc0xpZ2h0ID0gY29sb3JzLmxpZ2h0QmcgfHwgKGNvbG9ycy5iZyAmJiBoZXhMdW1pbmFuY2UoY29sb3JzLmJnKSA+IDAuNCk7XG5cbiAgICBpZiAoaXNMaWdodCkge1xuICAgICAgcmV0dXJuICc6cm9vdC4nICsgc2x1ZyArICcgYnV0dG9uOmhvdmVyIHtcXG4nICtcbiAgICAgICAgJyAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1zdHJvbmcpIDEyJSwgd2hpdGUgODglKTtcXG4nICtcbiAgICAgICAgJyAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4xNSk7XFxuJyArXG4gICAgICAgICcgIGJveC1zaGFkb3c6IDAgMXB4IDZweCByZ2JhKDAsIDAsIDAsIC4wOCksIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuOCk7XFxuJyArXG4gICAgICAgICd9XFxuJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc6cm9vdC4nICsgc2x1ZyArICcgYnV0dG9uOmhvdmVyIHtcXG4nICtcbiAgICAgICAgJyAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMTglLCB0cmFuc3BhcmVudCk7XFxuJyArXG4gICAgICAgICcgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMzUlLCB2YXIoLS1ib3JkZXIpKTtcXG4nICtcbiAgICAgICAgJ31cXG4nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMFx1MjUwMCBDb3JlIHRoZW1lIGZ1bmN0aW9ucyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuICBmdW5jdGlvbiBnZXRTeXN0ZW1UaGVtZSgpIHtcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzID8gJ2RhcmsnIDogJ2xpZ2h0JztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQ3VzdG9tUHJvcGVydGllcygpIHtcbiAgICBUSEVNRV9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tJyArIHByb3ApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2x1Z2lmeShuYW1lLCBjdXJyZW50U2x1Zykge1xuICAgIHZhciBzbHVnID0gbmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gICAgaWYgKCFzbHVnKSBzbHVnID0gJ2N1c3RvbSc7XG4gICAgaWYgKEJVSUxUSU5fVEhFTUVTLmluZGV4T2Yoc2x1ZykgIT09IC0xKSBzbHVnID0gc2x1ZyArICctY3VzdG9tJztcbiAgICB2YXIgY2FjaGVkID0gc2FmZUdldEpTT04oVVNFUl9USEVNRVNfS0VZLCB7fSk7XG4gICAgdmFyIGJhc2UgPSBzbHVnO1xuICAgIHZhciBjb3VudGVyID0gMjtcbiAgICB3aGlsZSAoY2FjaGVkW3NsdWddICYmIHNsdWcgIT09IGN1cnJlbnRTbHVnKSB7XG4gICAgICBzbHVnID0gYmFzZSArICctJyArIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIHNsdWc7XG4gIH1cblxuICAvLyBJbmplY3QgdXNlciB0aGVtZXMgZnJvbSBhIHRoZW1lcyBvYmplY3QgaW50byBET00gKyBydW50aW1lXG4gIGZ1bmN0aW9uIGluamVjdFVzZXJUaGVtZVN0eWxlcyh0aGVtZXNEYXRhKSB7XG4gICAgdmFyIGV4aXN0aW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItdGhlbWUtc3R5bGVzJyk7XG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5yZW1vdmUoKTtcblxuICAgIFRIRU1FUy5sZW5ndGggPSBCVUlMVElOX1RIRU1FUy5sZW5ndGg7XG4gICAgT2JqZWN0LmtleXMoVEhFTUVfQ09MT1JTKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICBpZiAoQlVJTFRJTl9USEVNRVMuaW5kZXhPZihrKSA9PT0gLTEpIGRlbGV0ZSBUSEVNRV9DT0xPUlNba107XG4gICAgfSk7XG5cbiAgICAvLyBVc2UgcHJvdmlkZWQgZGF0YSwgb3IgZmFsbCBiYWNrIHRvIGxvY2FsU3RvcmFnZSBjYWNoZVxuICAgIHZhciB1c2VyVGhlbWVzID0gdGhlbWVzRGF0YSB8fCBzYWZlR2V0SlNPTihVU0VSX1RIRU1FU19LRVksIHt9KTtcbiAgICB2YXIgc2x1Z3MgPSBPYmplY3Qua2V5cyh1c2VyVGhlbWVzKTtcblxuICAgIC8vIEZpbHRlciBvdXQgYW55IHVzZXIgdGhlbWVzIHRoYXQgY29sbGlkZSB3aXRoIGJ1aWx0LWluIHNsdWdzXG4gICAgc2x1Z3MgPSBzbHVncy5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIEJVSUxUSU5fVEhFTUVTLmluZGV4T2YocykgPT09IC0xOyB9KTtcblxuICAgIGlmICghc2x1Z3MubGVuZ3RoKSByZXR1cm47XG5cbiAgICB2YXIgY3NzID0gJyc7XG4gICAgc2x1Z3MuZm9yRWFjaChmdW5jdGlvbiAoc2x1Zykge1xuICAgICAgdmFyIHRoZW1lID0gdXNlclRoZW1lc1tzbHVnXTtcbiAgICAgIGlmIChUSEVNRVMuaW5kZXhPZihzbHVnKSA9PT0gLTEpIFRIRU1FUy5wdXNoKHNsdWcpO1xuXG4gICAgICAvLyBCdWlsZCBjb2xvciBtYXAgZnJvbSBzYXZlZCBkYXRhXG4gICAgICB2YXIgY29sb3JNYXAgPSB7fTtcbiAgICAgIFRIRU1FX1BST1BTLmZvckVhY2goZnVuY3Rpb24gKHApIHsgaWYgKHRoZW1lW3BdKSBjb2xvck1hcFtwXSA9IHRoZW1lW3BdOyB9KTtcbiAgICAgIGNvbG9yTWFwWydjYXJkLWJnJ10gPSB0aGVtZVsnY2FyZC1iYXNlJ10gfHwgdGhlbWUuYmc7XG4gICAgICBpZiAodGhlbWUubGlnaHRCZykgY29sb3JNYXAubGlnaHRCZyA9IHRydWU7XG5cbiAgICAgIC8vIEF1dG8tZGVyaXZlIGFueSBtaXNzaW5nIGV4dGVuZGVkIGNvbG9yc1xuICAgICAgdmFyIGRlcml2ZWQgPSBkZXJpdmVFeHRlbmRlZENvbG9ycyhjb2xvck1hcCk7XG4gICAgICBERVJJVkVEX1BST1BTLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgaWYgKCFjb2xvck1hcFtwXSAmJiBkZXJpdmVkW3BdKSBjb2xvck1hcFtwXSA9IGRlcml2ZWRbcF07XG4gICAgICB9KTtcblxuICAgICAgVEhFTUVfQ09MT1JTW3NsdWddID0gY29sb3JNYXA7XG5cbiAgICAgIC8vIEVtaXQgbWFpbiB2YXJpYWJsZSBibG9ja1xuICAgICAgY3NzICs9ICc6cm9vdC4nICsgc2x1ZyArICcge1xcbic7XG4gICAgICBUSEVNRV9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGlmIChjb2xvck1hcFtwXSkgY3NzICs9ICcgIC0tJyArIHAgKyAnOiAnICsgY29sb3JNYXBbcF0gKyAnO1xcbic7XG4gICAgICB9KTtcbiAgICAgIGNzcyArPSAnfVxcbic7XG5cbiAgICAgIC8vIEVtaXQgYm9keSBiYWNrZ3JvdW5kIGdyYWRpZW50XG4gICAgICBjc3MgKz0gZ2VuZXJhdGVCb2R5QmFja2dyb3VuZENTUyhzbHVnLCBjb2xvck1hcCk7XG5cbiAgICAgIC8vIEVtaXQgYnV0dG9uIGhvdmVyIG92ZXJyaWRlXG4gICAgICBjc3MgKz0gZ2VuZXJhdGVCdXR0b25Ib3ZlckNTUyhzbHVnLCBjb2xvck1hcCk7XG4gICAgfSk7XG5cbiAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlLmlkID0gJ3VzZXItdGhlbWUtc3R5bGVzJztcbiAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzcztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIC8vIEZldGNoIHRoZW1lcyBmcm9tIHNlcnZlciwgdXBkYXRlIGNhY2hlLCByZS1pbmplY3QgaWYgY2hhbmdlZFxuICBmdW5jdGlvbiBzeW5jVGhlbWVzRnJvbVNlcnZlcigpIHtcbiAgICBzZWN1cmVGZXRjaCgnL2FwaS92MS90aGVtZXMnKS50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLmpzb24oKTsgfSkudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaWYgKCFkYXRhLnN1Y2Nlc3MgfHwgIWRhdGEudGhlbWVzKSByZXR1cm47XG4gICAgICB2YXIgc2VydmVyVGhlbWVzID0gZGF0YS50aGVtZXM7XG4gICAgICB2YXIgY2FjaGVkID0gc2FmZUdldEpTT04oVVNFUl9USEVNRVNfS0VZLCB7fSk7XG4gICAgICAvLyBPbmx5IHVwZGF0ZSBpZiBkaWZmZXJlbnRcbiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShzZXJ2ZXJUaGVtZXMpICE9PSBKU09OLnN0cmluZ2lmeShjYWNoZWQpKSB7XG4gICAgICAgIHNhZmVTZXQoVVNFUl9USEVNRVNfS0VZLCBKU09OLnN0cmluZ2lmeShzZXJ2ZXJUaGVtZXMpKTtcbiAgICAgICAgaW5qZWN0VXNlclRoZW1lU3R5bGVzKHNlcnZlclRoZW1lcyk7XG4gICAgICAgIC8vIFJlLWFwcGx5IGN1cnJlbnQgdGhlbWUgaW4gY2FzZSBpdCB3YXMganVzdCBzeW5jZWRcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBzYWZlR2V0KFRIRU1FX0tFWSk7XG4gICAgICAgIGlmIChjdXJyZW50ICYmIFRIRU1FUy5pbmRleE9mKGN1cnJlbnQpICE9PSAtMSkge1xuICAgICAgICAgIGFwcGx5VGhlbWUoY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gIH1cblxuICAvLyBNaWdyYXRlIGxlZ2FjeSBjdXN0b20tdGhlbWUgdG8gc2VydmVyXG4gIGZ1bmN0aW9uIG1pZ3JhdGVMZWdhY3lDdXN0b21UaGVtZSgpIHtcbiAgICB2YXIgbGVnYWN5ID0gc2FmZUdldEpTT04oTEVHQUNZX0NVU1RPTV9LRVkpO1xuICAgIGlmICghbGVnYWN5KSByZXR1cm47XG5cbiAgICB2YXIgbmFtZSA9IGxlZ2FjeS5uYW1lIHx8ICdDdXN0b20nO1xuICAgIHZhciBzbHVnID0gc2x1Z2lmeShuYW1lKTtcblxuICAgIHZhciB0aGVtZURhdGEgPSB7IG5hbWU6IG5hbWUgfTtcbiAgICBUSEVNRV9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICBpZiAobGVnYWN5W3BdKSB0aGVtZURhdGFbcF0gPSBsZWdhY3lbcF07XG4gICAgfSk7XG5cbiAgICAvLyBTYXZlIHRvIGxvY2FsU3RvcmFnZSBjYWNoZSBpbW1lZGlhdGVseVxuICAgIHZhciBjYWNoZWQgPSBzYWZlR2V0SlNPTihVU0VSX1RIRU1FU19LRVksIHt9KTtcbiAgICBjYWNoZWRbc2x1Z10gPSB0aGVtZURhdGE7XG4gICAgc2FmZVNldChVU0VSX1RIRU1FU19LRVksIEpTT04uc3RyaW5naWZ5KGNhY2hlZCkpO1xuXG4gICAgLy8gVXBkYXRlIGFjdGl2ZSB0aGVtZSByZWZlcmVuY2VcbiAgICBpZiAoc2FmZUdldChUSEVNRV9LRVkpID09PSAnY3VzdG9tJykge1xuICAgICAgc2FmZVNldChUSEVNRV9LRVksIHNsdWcpO1xuICAgIH1cblxuICAgIHNhZmVSZW1vdmUoTEVHQUNZX0NVU1RPTV9LRVkpO1xuXG4gICAgLy8gQWxzbyBwdXNoIHRvIHNlcnZlclxuICAgIHZhciBjb2xvcnMgPSB7fTtcbiAgICBUSEVNRV9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7IGlmICh0aGVtZURhdGFbcF0pIGNvbG9yc1twXSA9IHRoZW1lRGF0YVtwXTsgfSk7XG4gICAgZmV0Y2goJy9hcGkvdjEvdGhlbWVzLycgKyBzbHVnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBuYW1lLCBjb2xvcnM6IGNvbG9ycyB9KVxuICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VGhlbWUobW9kZSkge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0aGVtZS10cmFuc2l0aW9uaW5nJyk7XG5cbiAgICBUSEVNRVMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgaWYgKHQgIT09ICdkYXJrJykgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodCk7XG4gICAgfSk7XG5cbiAgICBjbGVhckN1c3RvbVByb3BlcnRpZXMoKTtcblxuICAgIGlmIChtb2RlICE9PSAnZGFyaycpIHtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKG1vZGUpO1xuICAgIH1cblxuICAgIHNhZmVTZXQoVEhFTUVfS0VZLCBtb2RlKTtcblxuICAgIHZhciBjb2xvcnMgPSBUSEVNRV9DT0xPUlNbbW9kZV07XG4gICAgdmFyIG1ldGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJ0aGVtZS1jb2xvclwiXScpO1xuICAgIGlmIChtZXRhICYmIGNvbG9ycykgbWV0YS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnLCBjb2xvcnMuYmcpO1xuXG4gICAgLy8gVG9nZ2xlIGxpZ2h0LWJnIGNsYXNzOiBleHBsaWNpdCBmbGFnIGZpcnN0LCB0aGVuIGF1dG8tZGV0ZWN0IGZyb20gbHVtaW5hbmNlXG4gICAgdmFyIGlzTGlnaHQgPSBjb2xvcnMgJiYgY29sb3JzLmxpZ2h0Qmc7XG4gICAgaWYgKCFpc0xpZ2h0ICYmIGNvbG9ycyAmJiBjb2xvcnMuYmcpIGlzTGlnaHQgPSBoZXhMdW1pbmFuY2UoY29sb3JzLmJnKSA+IDAuNDtcbiAgICBpZiAoaXNMaWdodCkge1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xpZ2h0LWJnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdsaWdodC1iZycpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RoZW1lLXRyYW5zaXRpb25pbmcnKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgLy8gLS0tIEluaXRpYWxpemF0aW9uIC0tLVxuICBtaWdyYXRlTGVnYWN5Q3VzdG9tVGhlbWUoKTtcbiAgLy8gSW5zdGFudCBsb2FkIGZyb20gY2FjaGVcbiAgaW5qZWN0VXNlclRoZW1lU3R5bGVzKCk7XG5cbiAgdmFyIHNhdmVkVGhlbWUgPSBzYWZlR2V0KFRIRU1FX0tFWSk7XG4gIGlmIChzYXZlZFRoZW1lID09PSAncmVkJykgeyBzYXZlZFRoZW1lID0gJ2JsYWNrJzsgc2FmZVNldChUSEVNRV9LRVksICdibGFjaycpOyB9XG4gIGlmIChzYXZlZFRoZW1lICYmIHNhdmVkVGhlbWUgIT09ICdkYXJrJyAmJiBUSEVNRVMuaW5kZXhPZihzYXZlZFRoZW1lKSA9PT0gLTEpIHtcbiAgICBzYXZlZFRoZW1lID0gbnVsbDtcbiAgfVxuICBhcHBseVRoZW1lKHNhdmVkVGhlbWUgfHwgZ2V0U3lzdGVtVGhlbWUoKSk7XG5cbiAgLy8gU3luYyBmcm9tIHNlcnZlciBpbiBiYWNrZ3JvdW5kICh1cGRhdGVzIGNhY2hlIGlmIHNlcnZlciBoYXMgbmV3ZXIgZGF0YSlcbiAgc3luY1RoZW1lc0Zyb21TZXJ2ZXIoKTtcblxuICB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFzYWZlR2V0KFRIRU1FX0tFWSkpIHtcbiAgICAgIGFwcGx5VGhlbWUoZS5tYXRjaGVzID8gJ2RhcmsnIDogJ2xpZ2h0Jyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBFeHBvc2UgQVBJXG4gIHdpbmRvdy5USEVNRVMgPSBUSEVNRVM7XG4gIHdpbmRvdy5CVUlMVElOX1RIRU1FUyA9IEJVSUxUSU5fVEhFTUVTO1xuICB3aW5kb3cuVEhFTUVfQ09MT1JTID0gVEhFTUVfQ09MT1JTO1xuICB3aW5kb3cuVEhFTUVfUFJPUFMgPSBUSEVNRV9QUk9QUztcbiAgd2luZG93LkJBU0VfUFJPUFMgPSBCQVNFX1BST1BTO1xuICB3aW5kb3cuREVSSVZFRF9QUk9QUyA9IERFUklWRURfUFJPUFM7XG4gIHdpbmRvdy5VU0VSX1RIRU1FU19LRVkgPSBVU0VSX1RIRU1FU19LRVk7XG4gIHdpbmRvdy5hcHBseVRoZW1lID0gYXBwbHlUaGVtZTtcbiAgd2luZG93LmNsZWFyQ3VzdG9tUHJvcGVydGllcyA9IGNsZWFyQ3VzdG9tUHJvcGVydGllcztcbiAgd2luZG93LmluamVjdFVzZXJUaGVtZVN0eWxlcyA9IGluamVjdFVzZXJUaGVtZVN0eWxlcztcbiAgd2luZG93LnN5bmNUaGVtZXNGcm9tU2VydmVyID0gc3luY1RoZW1lc0Zyb21TZXJ2ZXI7XG4gIHdpbmRvdy5zbHVnaWZ5VGhlbWVOYW1lID0gc2x1Z2lmeTtcbiAgd2luZG93LmdldEFjdGl2ZVRoZW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2FmZUdldChUSEVNRV9LRVkpIHx8IGdldFN5c3RlbVRoZW1lKCk7IH07XG4gIHdpbmRvdy5kZXJpdmVFeHRlbmRlZENvbG9ycyA9IGRlcml2ZUV4dGVuZGVkQ29sb3JzO1xuICB3aW5kb3cuaGV4VG9SZ2IgPSBoZXhUb1JnYjtcbiAgd2luZG93LnJnYlRvSGV4ID0gcmdiVG9IZXg7XG4gIHdpbmRvdy5ibGVuZENvbG9ycyA9IGJsZW5kQ29sb3JzO1xufSkoKTtcbjtcbi8vID09PT09IFBMVUdHQUJMRSBBVVRIIEdBVEUgKERDLTA0OSkgPT09PT1cbi8vXG4vLyBPbiBDYWRkeSByZWRpcmVjdCB0byA/YXV0aD1yZXF1aXJlZCwgdGhpcyBtb2R1bGUgcXVlcmllc1xuLy8gR0VUIC9hcGkvdjEvYXV0aC9sb2dpbi9tZXRob2RzIHRvIGRpc2NvdmVyIHdoaWNoIEF1dGhQcm92aWRlcnMgYXJlIGVuYWJsZWQuXG4vLyBJZiBvbmx5IG9uZSBwcm92aWRlciBpcyBlbmFibGVkLCBqdW1wIHN0cmFpZ2h0IHRvIGl0cyBjaGFsbGVuZ2UgVUlcbi8vIChUT1RQLW9ubHkgaW5zdGFsbGF0aW9ucyB0b2RheSkuIElmIG11bHRpcGxlIHByb3ZpZGVycyBleGlzdCwgcmVuZGVyIGFcbi8vIHNlbGVjdG9yIGZpcnN0IHNvIHRoZSB1c2VyIHBpY2tzIGhvdyB0byBzaWduIGluLlxuLy9cbi8vIFRvZGF5OlxuLy8gICAtIHRvdHA6ICAgIGNoYWxsZW5nZSBpcyA2LWRpZ2l0IGNvZGUgdmlhIHRoZSBleGlzdGluZyBUT1RQIG92ZXJsYXlcbi8vICAgLSBlbWFpbDogICBjaGFsbGVuZ2UgaXMgZW1haWwgYWRkcmVzcyBcdTIxOTIgUE9TVCAvYXBpL3YxL2F1dGgvbG9naW4vZW1haWwvaW5pdGlhdGVcbi8vICAgICAgICAgICAgICBcdTIxOTIgc2VydmVyIGVtYWlscyBtYWdpYyBsaW5rIChvciBsb2dzIGl0IHRvIGNvbnNvbGUgaW4gZGV2KSBcdTIxOTJcbi8vICAgICAgICAgICAgICB3YWl0aW5nIGZvciB2ZXJpZmljYXRpb24gKG5vIGF1dG8tcHJvbW90aW9uOyB1c2VyIHJlbG9hZHMgdmlhXG4vLyAgICAgICAgICAgICAgZW1haWwgbGluaywgd2hpY2ggcm91dGVzIHRocm91Z2ggL2FwaS92MS9hdXRoL2xvZ2luL2VtYWlsL3ZlcmlmeSlcbi8vXG4vLyBUaGlzIG1vZHVsZSB3aXJlcyBpbnRvIHRoZSBleGlzdGluZyB0b3RwLWF1dGguanMgc3VibWl0VG90cENvZGUoKSBmbG93IHNvXG4vLyB0aGUgbGVnYWN5IFRPVFAgaGFwcHktcGF0aCBpcyB1bmNoYW5nZWQ6IHdoZW4gbWV0aG9kcyByZXR1cm5zIG9ubHlcbi8vIGB0b3RwYCwgdGhpcyBtb2R1bGUganVzdCBzaG93cyB0aGUgVE9UUCBvdmVybGF5IGFuZCBleGl0cy5cblxuKGZ1bmN0aW9uKCkge1xuICAvLyAtLS0tIERPTSByZWZzIChjcmVhdGVkIGxhemlseSBiZWxvdzsgZXhpc3RpbmcgVE9UUCBtYXJrdXAgc3VwcGxpZXMgdGhlbSkgLS0tLVxuICBsZXQgbWV0aG9kc0NhY2hlID0gbnVsbDtcblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaE1ldGhvZHMoKSB7XG4gICAgaWYgKG1ldGhvZHNDYWNoZSkgcmV0dXJuIG1ldGhvZHNDYWNoZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvdjEvYXV0aC9sb2dpbi9tZXRob2RzJywgeyBjYWNoZTogJ25vLXN0b3JlJyB9KTtcbiAgICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYG1ldGhvZHMgSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIG1ldGhvZHNDYWNoZSA9IEFycmF5LmlzQXJyYXkoZGF0YS5wcm92aWRlcnMpID8gZGF0YS5wcm92aWRlcnMgOiBbXTtcbiAgICAgIHJldHVybiBtZXRob2RzQ2FjaGU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gUHVibGljIGVuZHBvaW50IFx1MjAxNCBpZiBpdCBmYWlscywgZmFsbCB0aHJvdWdoIHRvIGxlZ2FjeSBUT1RQIHBhdGguXG4gICAgICBjb25zb2xlLndhcm4oJ1thdXRoLWdhdGVdIG1ldGhvZHMgZmV0Y2ggZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gVE9UUC1vbmx5JywgZSk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvd1Byb3ZpZGVyU2VsZWN0b3IocHJvdmlkZXJzKSB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW92ZXJsYXknKTtcbiAgICBpZiAoIW92ZXJsYXkpIHJldHVybjtcbiAgICBjb25zdCBjYXJkID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcudG90cC1jYXJkJyk7XG4gICAgaWYgKCFjYXJkKSByZXR1cm47XG5cbiAgICAvLyBTYXZlIHRoZSBleGlzdGluZyBUT1RQLWNoYWxsZW5nZSBib2R5IHNvIHdlIGNhbiByZXN0b3JlIGl0IG9uIGNhbmNlbC5cbiAgICBjb25zdCBvcmlnaW5hbEJvZHkgPSBjYXJkLmlubmVySFRNTDtcbiAgICBpZiAoIWNhcmQuZGF0YXNldC5vcmlnaW5hbEJvZHkpIGNhcmQuZGF0YXNldC5vcmlnaW5hbEJvZHkgPSBvcmlnaW5hbEJvZHk7XG5cbiAgICBjb25zdCBwcm92aWRlckJ1dHRvbnMgPSBwcm92aWRlcnMubWFwKHAgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSAocC5jb25maWcgJiYgKHAuY29uZmlnLmxhYmVsIHx8IHAubmFtZSkpIHx8IHAubmFtZTtcbiAgICAgIGNvbnN0IGJ0biA9IGA8YnV0dG9uIGNsYXNzPVwicHJvdmlkZXItYnRuXCIgZGF0YS1wcm92aWRlcj1cIiR7cC5uYW1lfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiA2cHggNHB4OyBwYWRkaW5nOiAxMHB4IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiAwOyBib3JkZXItcmFkaXVzOiA2cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAwLjk1cmVtO1wiPlxuICAgICAgICBTaWduIGluIHdpdGggJHtsYWJlbH1cbiAgICAgIDwvYnV0dG9uPmA7XG4gICAgICByZXR1cm4gYnRuO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuXG4gICAgY2FyZC5pbm5lckhUTUwgPSBgXG4gICAgICA8aW1nIGNsYXNzPVwidG90cC1sb2dvIHRvdHAtbG9nby1kYXJrXCIgc3JjPVwiL2Fzc2V0cy9kYXNoY2FkZHktbG9nby1kYXJrLnBuZ1wiIGFsdD1cIkRhc2hDYWRkeVwiIG9uZXJyb3I9XCJ0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnXCI+XG4gICAgICA8aW1nIGNsYXNzPVwidG90cC1sb2dvIHRvdHAtbG9nby1saWdodFwiIHNyYz1cIi9hc3NldHMvZGFzaGNhZGR5LWxvZ28tbGlnaHQucG5nXCIgYWx0PVwiRGFzaENhZGR5XCIgb25lcnJvcj1cInRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSdcIj5cbiAgICAgIDxwIGNsYXNzPVwic3VidGl0bGVcIj5DaG9vc2UgaG93IHRvIHNpZ24gaW48L3A+XG4gICAgICA8ZGl2IGlkPVwiYXV0aC1nYXRlLXByb3ZpZGVyc1wiIHN0eWxlPVwibWFyZ2luOiAxNHB4IDAgMTBweDtcIj4ke3Byb3ZpZGVyQnV0dG9uc308L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJhdXRoLWdhdGUtbWVzc2FnZVwiIHN0eWxlPVwibWFyZ2luLXRvcDogOHB4OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDAuOHJlbTtcIj48L2Rpdj5cbiAgICBgO1xuXG4gICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICAvLyBXaXJlIGVhY2ggYnV0dG9uXG4gICAgY2FyZC5xdWVyeVNlbGVjdG9yQWxsKCcucHJvdmlkZXItYnRuJykuZm9yRWFjaChidG4gPT4ge1xuICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gYnRuLmRhdGFzZXQucHJvdmlkZXI7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gcHJvdmlkZXJzLmZpbmQocCA9PiBwLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICByZW5kZXJQcm92aWRlckNoYWxsZW5nZShwcm92aWRlcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVPcmlnaW5hbEJvZHkoKSB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW92ZXJsYXknKTtcbiAgICBpZiAoIW92ZXJsYXkpIHJldHVybjtcbiAgICBjb25zdCBjYXJkID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcudG90cC1jYXJkJyk7XG4gICAgaWYgKCFjYXJkIHx8ICFjYXJkLmRhdGFzZXQub3JpZ2luYWxCb2R5KSByZXR1cm47XG4gICAgY2FyZC5pbm5lckhUTUwgPSBjYXJkLmRhdGFzZXQub3JpZ2luYWxCb2R5O1xuICAgIC8vIFJlLWJpbmQgdGhlIG9yaWdpbmFsIGRpZ2l0IGlucHV0IGhhbmRsZXJzIGJ5IHJlLXJ1bm5pbmcgdGhlIHRvdHAtYXV0aFxuICAgIC8vIGJvb3RzdHJhcC4gVGhlIHNpbXBsZXN0IHBhdGg6IHJlbG9hZCB0aGUgcGFnZSwgd2hpY2ggcmUtcnVucyBhbGwgSUlGRXMuXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyUHJvdmlkZXJDaGFsbGVuZ2UocHJvdmlkZXIpIHtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtb3ZlcmxheScpO1xuICAgIGlmICghb3ZlcmxheSkgcmV0dXJuO1xuICAgIGNvbnN0IGNhcmQgPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy50b3RwLWNhcmQnKTtcbiAgICBpZiAoIWNhcmQpIHJldHVybjtcblxuICAgIGlmIChwcm92aWRlci5uYW1lID09PSAndG90cCcpIHtcbiAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFRPVFAgbWFya3VwIFx1MjE5MiBleGlzdGluZyB0b3RwLWF1dGguanMgc3VibWl0VG90cENvZGVcbiAgICAgIC8vIHBhdGggaGFuZGxlcyB0aGUgcmVzdC4gKFJlbG9hZCBpcyB0aGUgY2xlYW5lc3QgcGF0aCBiZWNhdXNlXG4gICAgICAvLyB0b3RwLWF1dGguanMgd2lyZXMgaXRzIGlucHV0IGhhbmRsZXJzIGF0IHRvcC1sZXZlbCBJSUZFIHRpbWUuKVxuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlci5uYW1lID09PSAnZW1haWwnKSB7XG4gICAgICBjYXJkLmlubmVySFRNTCA9IGBcbiAgICAgICAgPGltZyBjbGFzcz1cInRvdHAtbG9nbyB0b3RwLWxvZ28tZGFya1wiIHNyYz1cIi9hc3NldHMvZGFzaGNhZGR5LWxvZ28tZGFyay5wbmdcIiBhbHQ9XCJEYXNoQ2FkZHlcIiBvbmVycm9yPVwidGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJ1wiPlxuICAgICAgICA8aW1nIGNsYXNzPVwidG90cC1sb2dvIHRvdHAtbG9nby1saWdodFwiIHNyYz1cIi9hc3NldHMvZGFzaGNhZGR5LWxvZ28tbGlnaHQucG5nXCIgYWx0PVwiRGFzaENhZGR5XCIgb25lcnJvcj1cInRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSdcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJzdWJ0aXRsZVwiPlNpZ24gaW4gd2l0aCBlbWFpbDwvcD5cbiAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46IDZweCAwIDE0cHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgY29sb3I6IHZhcigtLW11dGVkKTtcIj5cbiAgICAgICAgICBXZSdsbCBlbWFpbCB5b3UgYSBvbmUtdGltZSBzaWduLWluIGxpbmsuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1nYXRlLWVtYWlsLWlucHV0XCIgdHlwZT1cImVtYWlsXCIgaW5wdXRtb2RlPVwiZW1haWxcIiBhdXRvY29tcGxldGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInlvdUBleGFtcGxlLmNvbVwiXG4gICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAxMHB4IDEycHg7IGZvbnQtc2l6ZTogMXJlbTsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBjb2xvcjogdmFyKC0tdGV4dCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImF1dGgtZ2F0ZS1lbWFpbC1zdWJtaXRcIiBjbGFzcz1cInByb3ZpZGVyLWJ0blwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOiAxNHB4OyBwYWRkaW5nOiAxMHB4IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiAwOyBib3JkZXItcmFkaXVzOiA2cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAwLjk1cmVtOyB3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICBTZW5kIHNpZ24taW4gbGlua1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBpZD1cImF1dGgtZ2F0ZS1lbWFpbC1zdGF0dXNcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEycHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgbGluZS1oZWlnaHQ6IDEuNDtcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDE2cHg7XCI+XG4gICAgICAgICAgPGEgaHJlZj1cIiNcIiBpZD1cImF1dGgtZ2F0ZS1iYWNrXCIgc3R5bGU9XCJjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDAuOHJlbTtcIj5cdTIxOTAgQmFjazwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gICAgICBjb25zdCBpbnB1dCA9IGNhcmQucXVlcnlTZWxlY3RvcignI2F1dGgtZ2F0ZS1lbWFpbC1pbnB1dCcpO1xuICAgICAgY29uc3Qgc3VibWl0ID0gY2FyZC5xdWVyeVNlbGVjdG9yKCcjYXV0aC1nYXRlLWVtYWlsLXN1Ym1pdCcpO1xuICAgICAgY29uc3Qgc3RhdHVzID0gY2FyZC5xdWVyeVNlbGVjdG9yKCcjYXV0aC1nYXRlLWVtYWlsLXN0YXR1cycpO1xuICAgICAgY29uc3QgYmFjayA9IGNhcmQucXVlcnlTZWxlY3RvcignI2F1dGgtZ2F0ZS1iYWNrJyk7XG5cbiAgICAgIHN1Ym1pdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZW1haWwgPSAoaW5wdXQudmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKCFlbWFpbCB8fCAhZW1haWwuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICdFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuJztcbiAgICAgICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAndmFyKC0tZXJyb3IsICNkMzMpJztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VibWl0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gJ1NlbmRpbmdcdTIwMjYnO1xuICAgICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS9hdXRoL2xvZ2luL2VtYWlsL2luaXRpYXRlJywge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZW1haWwgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgdmlhID0gZGF0YS5kZWxpdmVyZWRWaWEgfHwgJ2VtYWlsJztcbiAgICAgICAgICAgIGNvbnN0IG1hc2tlZCA9IGRhdGEubWFza2VkRW1haWwgfHwgZW1haWw7XG4gICAgICAgICAgICBpZiAodmlhID09PSAnZGV2LWNvbnNvbGUnKSB7XG4gICAgICAgICAgICAgIHN0YXR1cy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgQ2hlY2sgdGhlIHNlcnZlciBsb2dzIGZvciB5b3VyIG9uZS10aW1lIGxpbmsuXG4gICAgICAgICAgICAgICAgKERldiBtb2RlOiBubyBTTVRQIGNvbmZpZ3VyZWQuIEluIHByb2R1Y3Rpb24gdGhpcyB3b3VsZCBlbWFpbCA8c3Ryb25nPiR7bWFza2VkfTwvc3Ryb25nPi4pYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXR1cy5pbm5lckhUTUwgPSBgU2lnbi1pbiBsaW5rIHNlbnQgdG8gPHN0cm9uZz4ke21hc2tlZH08L3N0cm9uZz4uXG4gICAgICAgICAgICAgICAgQ2hlY2sgeW91ciBpbmJveCAoYW5kIHNwYW0gZm9sZGVyKS5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLXN1Y2Nlc3MsICMyYTcpJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gZGF0YS5lcnJvciB8fCAnQ291bGQgbm90IHNlbmQgbGluay4nO1xuICAgICAgICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWVycm9yLCAjZDMzKSc7XG4gICAgICAgICAgICBzdWJtaXQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnQ29ubmVjdGlvbiBlcnJvci4gVHJ5IGFnYWluLic7XG4gICAgICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWVycm9yLCAjZDMzKSc7XG4gICAgICAgICAgc3VibWl0LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgc3VibWl0LmNsaWNrKCk7XG4gICAgICB9KTtcblxuICAgICAgYmFjay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNob3dQcm92aWRlclNlbGVjdG9yKHByb3ZpZGVycyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVbmtub3duIHByb3ZpZGVyIFx1MjE5MiByZXN0b3JlIFRPVFAgcGF0aCBhcyBhIGxhc3QgcmVzb3J0XG4gICAgY29uc29sZS53YXJuKCdbYXV0aC1nYXRlXSB1bmtub3duIHByb3ZpZGVyJywgcHJvdmlkZXIubmFtZSk7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2hvdygpIHtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtb3ZlcmxheScpO1xuICAgIGlmICghb3ZlcmxheSkgcmV0dXJuOyAvLyBUT1RQLW9ubHkgYnVpbGQgd2l0aG91dCBvdXIgb3ZlcmxheSBjaGFuZ2VzXG5cbiAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCBmZXRjaE1ldGhvZHMoKTtcbiAgICBpZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRWl0aGVyIHRoZSBlbmRwb2ludCBpc24ndCByZWFjaGFibGUgT1Igbm8gcHJvdmlkZXIgcmVwb3J0cyBlbmFibGVkLlxuICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBsZWdhY3kgVE9UUCBvdmVybGF5IFx1MjAxNCBleGlzdGluZyB0b3RwLWF1dGguanMgaGFuZGxlcyBpdC5cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93Ll9zaG93VG90cE92ZXJsYXkgPT09ICdmdW5jdGlvbicpIHdpbmRvdy5fc2hvd1RvdHBPdmVybGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAxICYmIHByb3ZpZGVyc1swXS5uYW1lID09PSAndG90cCcpIHtcbiAgICAgIC8vIFNpbmdsZSBUT1RQIHByb3ZpZGVyIFx1MjE5MiBzaG93IHRoZSBvcmlnaW5hbCBUT1RQIG92ZXJsYXkgdW5jaGFuZ2VkLFxuICAgICAgLy8gYnV0IHdpdGggYW4gXCJPciBzaWduIGluIHdpdGggZW1haWxcIiBsaW5rIGJlbG93IHNvIHRoZSBlbWFpbCBwYXRoXG4gICAgICAvLyBpcyByZWFjaGFibGUgYXMgdGhlIHJlY292ZXJ5IC8gcGhvbmUtZnJpZW5kbHkgYWx0ZXJuYXRpdmUuIE1vc3RcbiAgICAgIC8vIHVzZXJzIHN0aWxsIHdhbnQgdGhlaXIgcHJpbWFyeSBtZXRob2QgKFRPVFApIGZyb250LWFuZC1jZW50ZXIuXG4gICAgICBzaG93VG90cFdpdGhFbWFpbEZhbGxiYWNrKHByb3ZpZGVyc1swXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNob3dQcm92aWRlclNlbGVjdG9yKHByb3ZpZGVycyk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG93VG90cFdpdGhFbWFpbEZhbGxiYWNrKHRvdHBQcm92aWRlcikge1xuICAgIGNvbnN0IGVtYWlsRW5hYmxlZCA9IG1ldGhvZHNDYWNoZSAmJiBtZXRob2RzQ2FjaGUuZmluZChwID0+IHAubmFtZSA9PT0gJ2VtYWlsJyk7XG4gICAgaWYgKCFlbWFpbEVuYWJsZWQpIHtcbiAgICAgIC8vIFRydWx5IHNpbmdsZS1wcm92aWRlciBwYXRoOiBsZWdhY3kgVE9UUCBvdmVybGF5LCBubyBhbHQgbGluay5cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93Ll9zaG93VG90cE92ZXJsYXkgPT09ICdmdW5jdGlvbicpIHdpbmRvdy5fc2hvd1RvdHBPdmVybGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1vdmVybGF5Jyk7XG4gICAgY29uc3QgY2FyZCA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignLnRvdHAtY2FyZCcpO1xuICAgIGlmICghY2FyZCkgcmV0dXJuO1xuXG4gICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgVE9UUCBtYXJrdXAgc28gd2UgY2FuIHJlc3RvcmUgb24gYWx0LWxpbmsgY2xpY2sgb2ZmLlxuICAgIGlmICghY2FyZC5kYXRhc2V0Lm9yaWdpbmFsQm9keSkgY2FyZC5kYXRhc2V0Lm9yaWdpbmFsQm9keSA9IGNhcmQuaW5uZXJIVE1MO1xuXG4gICAgLy8gQWRkIGEgc21hbGwgXCJvclwiIGxpbmsgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZXhpc3RpbmcgY2FyZCBXSVRIT1VUXG4gICAgLy8gdG91Y2hpbmcgdGhlIFRPVFAgaW5wdXQgbWFya3VwIFx1MjAxNCBrZWVwcyB0b3RwLWF1dGguanMncyBzdWJtaXRUb3RwQ29kZVxuICAgIC8vIGJpbmRpbmcgaW50YWN0LlxuICAgIGxldCBhbHQgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJyNhdXRoLWdhdGUtZW1haWwtYWx0Jyk7XG4gICAgaWYgKCFhbHQpIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlkID0gJ2F1dGgtZ2F0ZS1lbWFpbC1hbHQnO1xuICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luLXRvcDogMThweDsgcGFkZGluZy10b3A6IDE0cHg7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBmb250LXNpemU6IDAuODVyZW07JztcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBgPGEgaHJlZj1cIiNcIiBpZD1cImF1dGgtZ2F0ZS1lbWFpbC1hbHQtbGlua1wiXG4gICAgICAgIHN0eWxlPVwiY29sb3I6IHZhcigtLWFjY2VudCk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTtcIj5cbiAgICAgICAgT3Igc2lnbiBpbiB3aXRoIGVtYWlsIGluc3RlYWQgXHUyMTkyXG4gICAgICA8L2E+YDtcbiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgIGRpdi5xdWVyeVNlbGVjdG9yKCcjYXV0aC1nYXRlLWVtYWlsLWFsdC1saW5rJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZW5kZXJQcm92aWRlckNoYWxsZW5nZShlbWFpbEVuYWJsZWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICB9XG5cbiAgLy8gLS0tLSBUcmlnZ2VyIHBvaW50cyAtLS0tXG4gIC8vIDEuIFNTTyByZWRpcmVjdCBmcm9tIENhZGR5OiA/YXV0aD1yZXF1aXJlZFxuICAvLyAgICBXZSBjbGFpbSBvd25lcnNoaXAgaGVyZSAoc2V0IHdpbmRvdy5fX2RjXzA0OV9oYW5kbGVkID0gdHJ1ZSlcbiAgLy8gICAgQkVGT1JFIHRvdHAtYXV0aC5qcydzIG93biA/YXV0aD1yZXF1aXJlZCBjaGVjayBydW5zLCBzbyB0aGUgbGVnYWN5XG4gIC8vICAgIFRPVFAtb25seSBvdmVybGF5IGRvZXNuJ3QgZmxpY2tlciBpbiBmb3IgbXVsdGktcHJvdmlkZXIgaW5zdGFsbHMuXG4gIC8vICAgIFNpbmdsZS1wcm92aWRlciBUT1RQLW9ubHkgaW5zdGFsbHMgd29yayBiZWNhdXNlIHdlIHN0aWxsIGRlbGVnYXRlXG4gIC8vICAgIGJhY2sgdG8gd2luZG93Ll9zaG93VG90cE92ZXJsYXkoKSBpbiBgc2hvdygpYCBiZWxvdy5cbiAgd2luZG93Ll9fZGNfMDQ5X2hhbmRsZWQgPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIGlzQWxsb3dlZFJldHVyblVybChyZXR1cm5VcmwpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTChyZXR1cm5VcmwsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgaWYgKCFbJ2h0dHA6JywgJ2h0dHBzOiddLmluY2x1ZGVzKHBhcnNlZC5wcm90b2NvbCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChwYXJzZWQub3JpZ2luID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChwYXJzZWQucHJvdG9jb2wgIT09ICdodHRwczonKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGdsb2JhbHMuanMgaXMgY29uY2F0ZW5hdGVkIGJlZm9yZSB0aGlzIG1vZHVsZSBpbiBjb3JlLmpzLCBzbyBTSVRFIGlzXG4gICAgICAvLyBhdmFpbGFibGUgaGVyZS4gUGVybWl0IGV4YWN0IGhvc3RzIGFuZCBzdWJkb21haW5zIHVuZGVyIHRoZSBjb25maWd1cmVkXG4gICAgICAvLyBwcml2YXRlIFRMRCAoZm9yIGV4YW1wbGUgcGxleC5zYW1pKSwgd2hpbGUgcmVqZWN0aW5nIGxvb2thbGlrZXMgc3VjaCBhc1xuICAgICAgLy8gcGxleC5zYW1pLmV2aWwuZXhhbXBsZS5cbiAgICAgIGNvbnN0IHN1ZmZpeCA9IFNJVEUudGxkLnN0YXJ0c1dpdGgoJy4nKSA/IFNJVEUudGxkIDogYC4ke1NJVEUudGxkfWA7XG4gICAgICByZXR1cm4gcGFyc2VkLmhvc3RuYW1lID09PSBzdWZmaXguc2xpY2UoMSkgfHwgcGFyc2VkLmhvc3RuYW1lLmVuZHNXaXRoKHN1ZmZpeCk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIGlmICh1cmxQYXJhbXMuZ2V0KCdhdXRoJykgPT09ICdyZXF1aXJlZCcpIHtcbiAgICAvLyBQcmVzZXJ2ZSB0aGUgZ2F0ZWQgc2VydmljZSBkZXN0aW5hdGlvbiBzbyBzdWJtaXRUb3RwQ29kZSgpIGNhbiBhcHBlbmRcbiAgICAvLyB0aGUgb25lLXRpbWUgU1NPIGhhbmRvZmYgdG9rZW4gYW5kIHJldHVybiB0aGUgYnJvd3NlciB0byB0aGF0IGhvc3QuXG4gICAgY29uc3QgcmV0dXJuVXJsID0gdXJsUGFyYW1zLmdldCgncmV0dXJuJyk7XG4gICAgaWYgKHJldHVyblVybCAmJiBpc0FsbG93ZWRSZXR1cm5VcmwocmV0dXJuVXJsKSkge1xuICAgICAgdHJ5IHsgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndG90cF9yZWRpcmVjdCcsIHJldHVyblVybCk7IH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICAgIC8vIENsZWFuIFVSTCBcdTIwMTQgaGFwcGVucyBhZnRlciB3ZSd2ZSBjYXB0dXJlZCB0aGUgcmVkaXJlY3RcbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIC8vIFNob3cgb24gbmV4dCB0aWNrIHNvIHRoZSBET00gKHRoZSAudG90cC1jYXJkKSBpcyByZWFkeVxuICAgIHNldFRpbWVvdXQoc2hvdywgMCk7XG4gIH1cblxuICAvLyBFeHBvc2UgZm9yIGhvdC10cmlnZ2VyIGZyb20gb3RoZXIgbW9kdWxlcyAoZS5nLiBsb2dvdXQpXG4gIHdpbmRvdy5fc2hvd0F1dGhHYXRlID0gc2hvdztcbiAgd2luZG93Ll9hdXRoR2F0ZU1ldGhvZHMgPSBmZXRjaE1ldGhvZHM7XG59KSgpO1xuO1xuLy8gPT09PT0gVE9UUCBBVVRIRU5USUNBVElPTiBHQVRFID09PT09XG4oZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHVwZGF0ZVRvdHBMb2dvKCkge1xuICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG90cC1jYXJkJyk7XG4gICAgaWYgKCFjYXJkKSByZXR1cm47XG4gICAgY29uc3QgYmcgPSBnZXRDb21wdXRlZFN0eWxlKGNhcmQpLmJhY2tncm91bmRDb2xvcjtcbiAgICBjb25zdCBtID0gYmcubWF0Y2goL1xcZCsvZyk7XG4gICAgaWYgKCFtKSByZXR1cm47XG4gICAgY29uc3QgbHVtID0gKDAuMjk5ICogK21bMF0gKyAwLjU4NyAqICttWzFdICsgMC4xMTQgKiArbVsyXSkgLyAyNTU7XG4gICAgY29uc3QgZGFyayA9IGNhcmQucXVlcnlTZWxlY3RvcignLnRvdHAtbG9nby1kYXJrJyk7XG4gICAgY29uc3QgbGlnaHQgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy50b3RwLWxvZ28tbGlnaHQnKTtcbiAgICBpZiAoZGFyaykgZGFyay5zdHlsZS5kaXNwbGF5ID0gbHVtID4gMC41ID8gJ25vbmUnIDogJyc7XG4gICAgaWYgKGxpZ2h0KSBsaWdodC5zdHlsZS5kaXNwbGF5ID0gbHVtID4gMC41ID8gJycgOiAnbm9uZSc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG93VG90cE92ZXJsYXkoKSB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW92ZXJsYXknKTtcbiAgICBpZiAob3ZlcmxheSkge1xuICAgICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gICAgICBzZXRUaW1lb3V0KHVwZGF0ZVRvdHBMb2dvLCA1MCk7XG4gICAgICBjb25zdCBmaXJzdElucHV0ID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcudG90cC1kaWdpdHMgaW5wdXQnKTtcbiAgICAgIGlmIChmaXJzdElucHV0KSBzZXRUaW1lb3V0KCgpID0+IGZpcnN0SW5wdXQuZm9jdXMoKSwgMTAwKTtcbiAgICB9XG4gICAgLy8gUmVmcmVzaCB0aGUgXCJMb3N0IGFjY2Vzcz9cIiByZWNvdmVyeSBsaW5rIHZpc2liaWxpdHkgYmFzZWQgb24gc2VydmVyIHN0YXRlLlxuICAgIC8vIEhpZGVzIGl0c2VsZiBpZiBUT1RQIGlzIGhlYWx0aHk7IHNob3dzIGlmIHVucmVhZGFibGUvY29ycnVwdC4gVGhlIHVzZXJcbiAgICAvLyBjYW4gc3RpbGwgY2xpY2sgaXQgZXZlbiB3aGVuIGhlYWx0aHkgXHUyMDE0IGJ1dCB0aGUgcGFuZWwgd2lsbCBleHBsYWluIHRoZXJlJ3NcbiAgICAvLyBubyByZWNvdmVyeSBuZWVkZWQuIENoZWFwZXIgdGhhbiBnYXRpbmcgaXQuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuX3JlZnJlc2hSZWNvdmVyeUxpbmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdpbmRvdy5fcmVmcmVzaFJlY292ZXJ5TGluaygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhpZGVUb3RwT3ZlcmxheSgpIHtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtb3ZlcmxheScpO1xuICAgIGlmIChvdmVybGF5KSBvdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkU3NvSGFuZG9mZlRhcmdldChyZWRpcmVjdCwgdG9rZW4pIHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHJlZGlyZWN0LCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICBpZiAocGFyc2VkLm9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xuXG4gICAgY29uc3Qgc3VmZml4ID0gU0lURS50bGQuc3RhcnRzV2l0aCgnLicpID8gU0lURS50bGQgOiBgLiR7U0lURS50bGR9YDtcbiAgICBjb25zdCBpc1ByaXZhdGVIb3N0ID0gcGFyc2VkLmhvc3RuYW1lID09PSBzdWZmaXguc2xpY2UoMSkgfHwgcGFyc2VkLmhvc3RuYW1lLmVuZHNXaXRoKHN1ZmZpeCk7XG4gICAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gJ2h0dHBzOicgfHwgIWlzUHJpdmF0ZUhvc3QpIHJldHVybiBudWxsO1xuICAgIGlmICghdG9rZW4pIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IHJldHVyblBhdGggPSBgJHtwYXJzZWQucGF0aG5hbWV9JHtwYXJzZWQuc2VhcmNofSR7cGFyc2VkLmhhc2h9YDtcbiAgICBwYXJzZWQucGF0aG5hbWUgPSAnL2Rhc2hjYWRkeS1zc28nO1xuICAgIHBhcnNlZC5zZWFyY2ggPSAnJztcbiAgICBwYXJzZWQuaGFzaCA9ICcnO1xuICAgIHBhcnNlZC5zZWFyY2hQYXJhbXMuc2V0KCd0b2tlbicsIHRva2VuKTtcbiAgICBwYXJzZWQuc2VhcmNoUGFyYW1zLnNldCgncmV0dXJuJywgcmV0dXJuUGF0aCk7XG4gICAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xuICB9XG5cbiAgLy8gU2V0dXAgZGlnaXQgaW5wdXQgVVhcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtZGlnaXRzJyk7XG4gIGlmIChjb250YWluZXIpIHtcbiAgICBjb25zdCBpbnB1dHMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKTtcbiAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGlkeCkgPT4ge1xuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbC5zbGljZSgwLCAxKTtcbiAgICAgICAgaWYgKHZhbCAmJiBpZHggPCBpbnB1dHMubGVuZ3RoIC0gMSkgaW5wdXRzW2lkeCArIDFdLmZvY3VzKCk7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBBcnJheS5mcm9tKGlucHV0cykubWFwKGkgPT4gaS52YWx1ZSkuam9pbignJyk7XG4gICAgICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gNikgc3VibWl0VG90cENvZGUoY29kZSk7XG4gICAgICB9KTtcblxuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0JhY2tzcGFjZScgJiYgIWUudGFyZ2V0LnZhbHVlICYmIGlkeCA+IDApIHtcbiAgICAgICAgICBpbnB1dHNbaWR4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICBpbnB1dHNbaWR4IC0gMV0udmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBwYXN0ZWQgPSAoZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKSB8fCAnJykucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgICAgaWYgKHBhc3RlZC5sZW5ndGggPj0gNikge1xuICAgICAgICAgIGlucHV0cy5mb3JFYWNoKChpbnAsIGkpID0+IHsgaW5wLnZhbHVlID0gcGFzdGVkW2ldIHx8ICcnOyB9KTtcbiAgICAgICAgICBpbnB1dHNbNV0uZm9jdXMoKTtcbiAgICAgICAgICBzdWJtaXRUb3RwQ29kZShwYXN0ZWQuc2xpY2UoMCwgNikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFRvdHBDb2RlKGNvZGUpIHtcbiAgICBjb25zdCBlcnJvckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtZXJyb3InKTtcbiAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ1ZlcmlmeWluZy4uLic7XG4gICAgZXJyb3JFbC5jbGFzc05hbWUgPSAndG90cC1lcnJvciB2ZXJpZnlpbmcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3RvdHAvdmVyaWZ5Jywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgY29kZSB9KVxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIC8vIFVwZGF0ZSBjYWNoZWQgQ1NSRiB0b2tlbiBmcm9tIFRPVFAgcmVzcG9uc2UgKHNlcnZlciByb3RhdGVzIGl0IG9uIGxvZ2luKVxuICAgICAgICBpZiAoZGF0YS5jc3JmVG9rZW4pIHtcbiAgICAgICAgICBjc3JmVG9rZW4gPSBkYXRhLmNzcmZUb2tlbjtcbiAgICAgICAgfVxuICAgICAgICBoaWRlVG90cE92ZXJsYXkoKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcmVkaXJlY3RlZCBoZXJlIGZyb20gYW5vdGhlciBzZXJ2aWNlXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0ID0gc2FmZVNlc3Npb25HZXQoJ3RvdHBfcmVkaXJlY3QnKTtcbiAgICAgICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICAgICAgdHJ5IHsgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndG90cF9yZWRpcmVjdCcpOyB9IGNhdGNoIChfKSB7fVxuICAgICAgICAgIC8vIC5zYW1pIGlzIGFuIHVucmVnaXN0ZXJlZCBUTEQsIHNvIGJyb3dzZXJzIHNpbGVudGx5IGRyb3AgdGhlXG4gICAgICAgICAgLy8gRG9tYWluPS5zYW1pIHNlc3Npb24gY29va2llIG9uIGFueSBPVEhFUiAqLnNhbWkgc3ViZG9tYWluICh0aGV5XG4gICAgICAgICAgLy8gdHJlYXQgXCJzYW1pXCIgYXMgdGhlIGVmZmVjdGl2ZSBwdWJsaWMgc3VmZml4LCBzYW1lIHByb3RlY3Rpb25cbiAgICAgICAgICAvLyB0aGF0IGJsb2NrcyBhIERvbWFpbj0uY29tIHN1cGVyY29va2llKS4gVGhlIHRhcmdldCBzZXJ2aWNlIGNhbid0XG4gICAgICAgICAgLy8gc2VlIG91ciBzZXNzaW9uIGNvb2tpZSBubyBtYXR0ZXIgaG93IGl0J3MgYnVpbHQsIHNvIGluc3RlYWQgd2VcbiAgICAgICAgICAvLyBoYW5kIGl0IGEgb25lLXRpbWUgdG9rZW4gaW4gdGhlIFVSTDsgaXRzIGxvZ2luIHBhZ2UgZXhjaGFuZ2VzXG4gICAgICAgICAgLy8gdGhhdCBmb3IgaXRzIG93biBob3N0LW9ubHkgY29va2llIHZpYSAvYXV0aC9zc28tZXhjaGFuZ2UuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYnVpbGRTc29IYW5kb2ZmVGFyZ2V0KHJlZGlyZWN0LCBkYXRhLnNzb1Rva2VuKTtcbiAgICAgICAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbml0aWFsaXplIGRhc2hib2FyZFxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5pbml0aWFsaXplRGFzaGJvYXJkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2luZG93LmluaXRpYWxpemVEYXNoYm9hcmQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9IGRhdGEuZXJyb3IgfHwgJ0ludmFsaWQgY29kZSc7XG4gICAgICAgIGVycm9yRWwuY2xhc3NOYW1lID0gJ3RvdHAtZXJyb3InO1xuICAgICAgICBjb25zdCBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjdG90cC1kaWdpdHMgaW5wdXQnKTtcbiAgICAgICAgaW5wdXRzLmZvckVhY2goaSA9PiB7IGkudmFsdWUgPSAnJzsgfSk7XG4gICAgICAgIGlucHV0c1swXT8uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ0Nvbm5lY3Rpb24gZXJyb3InO1xuICAgICAgZXJyb3JFbC5jbGFzc05hbWUgPSAndG90cC1lcnJvcic7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlID9hdXRoPXJlcXVpcmVkIHJlZGlyZWN0IGZyb20gQ2FkZHkgU1NPLlxuICAvLyBEQy0wNDk6IGlmIHRoZSBhdXRoLWdhdGUgbW9kdWxlIHdpbGwgaGFuZGxlIHRoaXMgKG11bHRpLXByb3ZpZGVyXG4gIC8vIGluc3RhbGxzKSwgc2tpcCBvdXIgVE9UUC1vbmx5IGJyYW5jaCBlbnRpcmVseS4gU2luZ2xlLXByb3ZpZGVyXG4gIC8vIFRPVFAtb25seSBpbnN0YWxscyBjb250aW51ZSB0byB1c2UgdGhpcyBwYXRoIGJlY2F1c2UgYXV0aC1nYXRlLmpzXG4gIC8vIGRlbGVnYXRlcyBiYWNrIHRvIHdpbmRvdy5fc2hvd1RvdHBPdmVybGF5KCkuXG4gIGNvbnN0IF9fZGNfMDQ5X3NraXAgPSAhISh3aW5kb3cuX19kY18wNDlfaGFuZGxlZCk7XG4gIGlmICghX19kY18wNDlfc2tpcCAmJiB1cmxQYXJhbXMuZ2V0KCdhdXRoJykgPT09ICdyZXF1aXJlZCcpIHtcbiAgICBjb25zdCByZXR1cm5VcmwgPSB1cmxQYXJhbXMuZ2V0KCdyZXR1cm4nKTtcbiAgICBpZiAocmV0dXJuVXJsKSB7XG4gICAgICAvLyBWYWxpZGF0ZSByZWRpcmVjdCBVUkw6IG11c3QgYmUgc2FtZS1vcmlnaW4gb3IgaG9zdG5hbWUgbXVzdCBlbmQgd2l0aCBvdXIgVExEXG4gICAgICAvLyAocHJldmVudHMgb3BlbiByZWRpcmVjdCB2aWEgaW5jbHVkZXMoKSBieXBhc3MgbGlrZSBldmlsLmNvbT9xPS5zYW1pKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTChyZXR1cm5VcmwsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICBjb25zdCBob3N0bmFtZSA9IHBhcnNlZC5ob3N0bmFtZTtcbiAgICAgICAgY29uc3QgaXNTYW1lT3JpZ2luID0gcGFyc2VkLm9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3QgdGxkU3VmZml4ID0gU0lURS50bGQuc3RhcnRzV2l0aCgnLicpID8gU0lURS50bGQgOiAnLicgKyBTSVRFLnRsZDtcbiAgICAgICAgY29uc3QgaXNPdXJUbGQgPSBob3N0bmFtZS5lbmRzV2l0aCh0bGRTdWZmaXgpIHx8IGhvc3RuYW1lID09PSB0bGRTdWZmaXguc3Vic3RyaW5nKDEpO1xuICAgICAgICBpZiAoaXNTYW1lT3JpZ2luIHx8IGlzT3VyVGxkKSB7XG4gICAgICAgICAgc2FmZVNlc3Npb25TZXQoJ3RvdHBfcmVkaXJlY3QnLCByZXR1cm5VcmwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIC8vIEludmFsaWQgVVJMIFx1MjAxNCByZWplY3QgcmVkaXJlY3RcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2xlYW4gVVJMXG4gICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgfVxuXG4gIHdpbmRvdy5fc2hvd1RvdHBPdmVybGF5ID0gc2hvd1RvdHBPdmVybGF5O1xufSkoKTtcbjtcbi8vID09PT09IFRPVFAgUkVDT1ZFUlkgRkxPVyA9PT09PVxuLy8gUHVibGljLCB1bmF1dGhlbnRpY2F0ZWQgcmVjb3ZlcnkgcGF0aCBmb3IgdXNlcnMgd2hvIGNhbid0IGxvZyBpbi5cbi8vIERlc2lnbmVkIGZvciB0aGUgXCJlbmNyeXB0aW9uIGtleSByb3RhdGVkIGFuZCBsb3N0IG15IGF1dGhlbnRpY2F0b3JcIiBjYXNlLlxuLy8gVGhlIGZsb3cgaXM6XG4vL1xuLy8gIDEuIE9uIFRPVFAgb3ZlcmxheSBzaG93LCBjYWxsIC9hcGkvdjEvdG90cC9yZWNvdmVyeS1pbmZvIChwdWJsaWMpLlxuLy8gICAgIElmIHN0YXR1cyA9PT0gJ3VucmVhZGFibGUnLCBzaG93IHRoZSBcIkxvc3QgYWNjZXNzP1wiIGxpbmsgb24gdGhlIG92ZXJsYXkuXG4vLyAgMi4gVXNlciBjbGlja3MgbGluayBcdTIxOTIgb3BlbnMgcmVjb3ZlcnkgcGFuZWwuXG4vLyAgMy4gVXNlciBwYXN0ZXMgQmFzZTMyIHNlY3JldCBcdTIxOTIgUE9TVCAvYXBpL3YxL3RvdHAvc2V0dXAgd2l0aCB7c2VjcmV0OiAuLi59LlxuLy8gICAgIEJhY2tlbmQgc3RvcmVzIGFzIHRvdHAucGVuZGluZ19zZWNyZXQgKGVuY3J5cHRlZCB3aXRoIGN1cnJlbnQga2V5KS5cbi8vICA0LiBQYW5lbCBzd2l0Y2hlcyB0byBcInZlcmlmeVwiIG1vZGUuIFVzZXIgZW50ZXJzIGEgY29kZSBmcm9tIHRoZVxuLy8gICAgIG5ld2x5LWFkZGVkIGF1dGhlbnRpY2F0b3IgZW50cnkuIFBPU1QgL2FwaS92MS90b3RwL3ZlcmlmeS1zZXR1cFxuLy8gICAgIHByb21vdGVzIHBlbmRpbmcgXHUyMTkyIGFjdGl2ZSBhbmQgc3RhcnRzIGEgc2Vzc2lvbi5cbi8vICA1LiBoaWRlVG90cE92ZXJsYXkoKSBhbmQgaW5pdGlhbGl6ZURhc2hib2FyZCgpIFx1MjAxNCBzYW1lIGFzIG5vcm1hbCBsb2dpbi5cbi8vXG4vLyBUaGUgcmVjb3ZlcnkgZmxvdyBuZXZlciByZXF1aXJlcyB0aGUgdXNlciB0byBiZSBsb2dnZWQgaW4uIEl0IGRvZXMgcmVxdWlyZVxuLy8gdGhlbSB0byBoYXZlIHRoZWlyIEJhc2UzMiBzZWNyZXQgc2F2ZWQgKGUuZy4gcGFzc3dvcmQgbWFuYWdlciwgc2NyZWVuc2hvdCxcbi8vIHRoZSBcIkRvd25sb2FkIGJhY2t1cCBmaWxlXCIgd2Ugb2ZmZXIgYXQgc2V0dXAgdGltZSBcdTIwMTQgc2VlIHRvdHAtc2V0dGluZ3MuanMpLlxuXG4oZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBcdTI1MDBcdTI1MDAgSGVscGVycyBcdTI1MDBcdTI1MDBcbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hSZWNvdmVyeUluZm8oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS90b3RwL3JlY292ZXJ5LWluZm8nLCB7IGNhY2hlOiAnbm8tc3RvcmUnIH0pO1xuICAgICAgcmV0dXJuIGF3YWl0IHIuanNvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXM6ICd1bmtub3duJywgaGludDogJ0NvdWxkIG5vdCBjb250YWN0IHNlcnZlcicgfTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG93UmVjb3ZlcnlMaW5rKHNob3cpIHtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktbGluaycpO1xuICAgIGlmIChsaW5rKSBsaW5rLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gJycgOiAnbm9uZSc7XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUmVjb3ZlcnlQYW5lbCgpIHtcbiAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LXBhbmVsJyk7XG4gICAgaWYgKHBhbmVsKSBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1zdGF0dXMnKTtcbiAgICBjb25zdCBpbXBvcnRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWltcG9ydCcpO1xuICAgIGNvbnN0IHZlcmlmeUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktdmVyaWZ5Jyk7XG4gICAgaWYgKGltcG9ydEVsKSBpbXBvcnRFbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgaWYgKHZlcmlmeUVsKSB2ZXJpZnlFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIC8vIFJlc2V0IHN0YXRlXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktZXJyb3InKS50ZXh0Q29udGVudCA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWNvbmZpcm0tZXJyb3InKS50ZXh0Q29udGVudCA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LXNlY3JldCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktY29kZScpLnZhbHVlID0gJyc7XG4gICAgLy8gU2hvdyBjdXJyZW50IHN0YXR1c1xuICAgIGZldGNoUmVjb3ZlcnlJbmZvKCkudGhlbihpbmZvID0+IHtcbiAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gaW5mby5oaW50IHx8ICcnO1xuICAgICAgLy8gQ29sb3ItY29kZSB0aGUgc3RhdHVzIGJhbm5lclxuICAgICAgaWYgKGluZm8uc3RhdHVzID09PSAnaGVhbHRoeScpIHtcbiAgICAgICAgc3RhdHVzRWwuc3R5bGUuYm9yZGVyQ29sb3IgPSAndmFyKC0tb2stZmcsICM3ZWYyZmYpJztcbiAgICAgIH0gZWxzZSBpZiAoaW5mby5zdGF0dXMgPT09ICd1bnJlYWRhYmxlJykge1xuICAgICAgICBzdGF0dXNFbC5zdHlsZS5ib3JkZXJDb2xvciA9ICd2YXIoLS1iYWQtZmcsICNmZjlhYTMpJztcbiAgICAgICAgc3RhdHVzRWwuc3R5bGUuYmFja2dyb3VuZCA9ICdjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYmFkLWZnKSA2JSwgdHJhbnNwYXJlbnQpJztcbiAgICAgIH0gZWxzZSBpZiAoaW5mby5zdGF0dXMgPT09ICdub3RfY29uZmlndXJlZCcpIHtcbiAgICAgICAgc3RhdHVzRWwuc3R5bGUuYm9yZGVyQ29sb3IgPSAndmFyKC0tbXV0ZWQpJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c0VsLnN0eWxlLmJvcmRlckNvbG9yID0gJ3ZhcigtLWJvcmRlciknO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3Zlcnktc2VjcmV0Jyk/LmZvY3VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlUmVjb3ZlcnlQYW5lbCgpIHtcbiAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LXBhbmVsJyk7XG4gICAgaWYgKHBhbmVsKSBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVjb3ZlcnlTZWNyZXQoKSB7XG4gICAgY29uc3Qgc2VjcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3Zlcnktc2VjcmV0JykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGVycm9yRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1lcnJvcicpO1xuICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnJztcblxuICAgIGlmICghc2VjcmV0KSB7XG4gICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ1Bhc3RlIHlvdXIgQmFzZTMyIGtleSBmaXJzdCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghL15bQS1aYS16Mi03XFxzXSs9KiQvLnRlc3Qoc2VjcmV0KSkge1xuICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICdJbnZhbGlkIEJhc2UzMiBmb3JtYXQgXHUyMDE0IHNob3VsZCBiZSBsZXR0ZXJzIEEtWiBhbmQgZGlnaXRzIDItNyBvbmx5JztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQT1NUIC9hcGkvdjEvdG90cC9zZXR1cCB3aXRoIHtzZWNyZXR9IFx1MjAxNCBiYWNrZW5kIHN0b3JlcyBhcyBwZW5kaW5nXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS90b3RwL3NldHVwJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2VjcmV0IH0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByLmpzb24oKTtcbiAgICAgIGlmICghci5vayB8fCAhZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSBkYXRhLmVycm9yIHx8IGRhdGEubWVzc2FnZSB8fCAnUmVzdG9yZSBmYWlsZWQnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBTd2l0Y2ggcGFuZWwgdG8gdmVyaWZ5IG1vZGVcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWltcG9ydCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS12ZXJpZnknKS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWNvZGUnKT8uZm9jdXMoKSwgMTAwKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ05ldHdvcmsgZXJyb3IgXHUyMDE0IHRyeSBhZ2Fpbic7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVjb3ZlcnlDb2RlKCkge1xuICAgIGNvbnN0IGNvZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1jb2RlJykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGVycm9yRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1jb25maXJtLWVycm9yJyk7XG4gICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICcnO1xuXG4gICAgaWYgKCEvXlxcZHs2fSQvLnRlc3QoY29kZSkpIHtcbiAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnRW50ZXIgYSA2LWRpZ2l0IGNvZGUnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFBPU1QgL2FwaS92MS90b3RwL3ZlcmlmeS1zZXR1cCBcdTIwMTQgcHJvbW90ZXMgcGVuZGluZyBcdTIxOTIgYWN0aXZlICsgc3RhcnRzIHNlc3Npb25cbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IGZldGNoKCcvYXBpL3YxL3RvdHAvdmVyaWZ5LXNldHVwJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgY29kZSB9KVxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgci5qc29uKCk7XG4gICAgICBpZiAoIXIub2sgfHwgIWRhdGEuc3VjY2Vzcykge1xuICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gZGF0YS5lcnJvciB8fCBkYXRhLm1lc3NhZ2UgfHwgJ0ludmFsaWQgY29kZSc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWNvZGUnKS52YWx1ZSA9ICcnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1jb2RlJyk/LmZvY3VzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFN1Y2Nlc3MgXHUyMDE0IGhpZGUgZXZlcnl0aGluZyBhbmQgaW5pdGlhbGl6ZSBkYXNoYm9hcmRcbiAgICAgIGNsb3NlUmVjb3ZlcnlQYW5lbCgpO1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW92ZXJsYXknKTtcbiAgICAgIGlmIChvdmVybGF5KSBvdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93LmluaXRpYWxpemVEYXNoYm9hcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2luZG93LmluaXRpYWxpemVEYXNoYm9hcmQoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ05ldHdvcmsgZXJyb3IgXHUyMDE0IHRyeSBhZ2Fpbic7XG4gICAgfVxuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFdpcmUgdXAgaGFuZGxlcnMgXHUyNTAwXHUyNTAwXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNob3ctcmVjb3ZlcnknKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBvcGVuUmVjb3ZlcnlQYW5lbCgpO1xuICB9KTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktY2xvc2UnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZVJlY292ZXJ5UGFuZWwpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1zdWJtaXQnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdWJtaXRSZWNvdmVyeVNlY3JldCk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWNvbmZpcm0nKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdWJtaXRSZWNvdmVyeUNvZGUpO1xuXG4gIC8vIEVudGVyIGtleSBzdWJtaXRzIGluIHNlY3JldCBmaWVsZFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1zZWNyZXQnKT8uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7IGUucHJldmVudERlZmF1bHQoKTsgc3VibWl0UmVjb3ZlcnlTZWNyZXQoKTsgfVxuICB9KTtcbiAgLy8gRW50ZXIga2V5IHN1Ym1pdHMgaW4gY29kZSBmaWVsZFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1jb2RlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgeyBlLnByZXZlbnREZWZhdWx0KCk7IHN1Ym1pdFJlY292ZXJ5Q29kZSgpOyB9XG4gIH0pO1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBQdWJsaWMgQVBJIFx1MjUwMFx1MjUwMFxuICAvLyBDYWxsZWQgYnkgdG90cC1hdXRoLmpzIGFmdGVyIHNob3dpbmcgdGhlIG92ZXJsYXksIHNvIHdlIGNhbiBkZWNpZGUgd2hldGhlclxuICAvLyB0byBzaG93IHRoZSByZWNvdmVyeSBsaW5rLiBXZSBkbyB0aGlzIHdpdGggYSBwdWJsaWMgZW5kcG9pbnQgdGhhdCBkb2Vzbid0XG4gIC8vIHJlcXVpcmUgYXV0aCBcdTIwMTQgcGVyZmVjdCBmb3IgdGhlIGxvY2tlZC1vdXQgc3RhdGUuXG4gIHdpbmRvdy5fcmVmcmVzaFJlY292ZXJ5TGluayA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBmZXRjaFJlY292ZXJ5SW5mbygpO1xuICAgIC8vIFNob3cgdGhlIGxpbmsgaW4gYW55IG5vbi1oZWFsdGh5IHN0YXRlICh1bnJlYWRhYmxlIC8gY29ycnVwdCAvIHVua25vd24pLlxuICAgIC8vIFRoZSBoaW50IGluc2lkZSB0aGUgcGFuZWwgdGVsbHMgdGhlIHVzZXIgd2hhdCB0aGUgYWN0dWFsIGlzc3VlIGlzLlxuICAgIGlmIChpbmZvICYmIGluZm8uc3VjY2VzcyAmJiBpbmZvLnN0YXR1cyAmJiBpbmZvLnN0YXR1cyAhPT0gJ2hlYWx0aHknKSB7XG4gICAgICBzaG93UmVjb3ZlcnlMaW5rKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93UmVjb3ZlcnlMaW5rKGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH07XG59KSgpO1xuO1xuLy8gPT09PT0gU0VSVklDRSBDUkVERU5USUFMUyA9PT09PVxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCBlcnJvckhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKCk7XG4gIGluamVjdE1vZGFsKCdmb2xkZXItYnJvd3Nlci1tb2RhbCcsIGA8ZGl2IGlkPVwiZm9sZGVyLWJyb3dzZXItbW9kYWxcIiBjbGFzcz1cIndlYXRoZXItbW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwid2VhdGhlci1tb2RhbC1jb250ZW50XCIgc3R5bGU9XCJtaW4td2lkdGg6IDUwMHB4OyBtYXgtd2lkdGg6IDcwMHB4OyBtYXgtaGVpZ2h0OiA4MHZoO1wiPlxuICAgICAgPGgzPlx1RDgzRFx1RENDMiBCcm93c2UgZm9yIE1lZGlhIEZvbGRlcnM8L2gzPlxuXG4gICAgICA8ZGl2IGlkPVwiZm9sZGVyLWJyb3dzZXItcGF0aFwiIHN0eWxlPVwicGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlci1yYWRpdXM6IDZweDsgbWFyZ2luLWJvdHRvbTogMTJweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgZm9udC1zaXplOiAwLjlyZW07IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcIj5cbiAgICAgICAgL1xuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgaWQ9XCJmb2xkZXItYnJvd3Nlci1saXN0XCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiA0MDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNnB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPkxvYWRpbmcuLi48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGlkPVwiZm9sZGVyLWJyb3dzZXItc2VsZWN0ZWRcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEycHg7IHBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zdWNjZXNzKSAxMCUsIHRyYW5zcGFyZW50KTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc3VjY2Vzcyk7IGJvcmRlci1yYWRpdXM6IDZweDsgZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMC44NXJlbTsgY29sb3I6IHZhcigtLXN1Y2Nlc3MpOyBtYXJnaW4tYm90dG9tOiA2cHg7XCI+U2VsZWN0ZWQgZm9sZGVyczo8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cImZvbGRlci1icm93c2VyLXNlbGVjdGVkLWxpc3RcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiA2cHg7XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDogMTZweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImZvbGRlci1icm93c2VyLXNlbGVjdC1jdXJyZW50XCIgY2xhc3M9XCJidG4tYWNjZW50XCI+XG4gICAgICAgICAgKyBBZGQgQ3VycmVudCBGb2xkZXJcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvdy1nYXBcIj5cbiAgICAgICAgICA8YnV0dG9uIGlkPVwiZm9sZGVyLWJyb3dzZXItY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImZvbGRlci1icm93c2VyLWRvbmVcIiBzdHlsZT1cImJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zdWNjZXNzKSAyMCUsIHRyYW5zcGFyZW50KTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1zdWNjZXNzKTsgY29sb3I6IHZhcigtLXN1Y2Nlc3MpO1wiPkRvbmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCk7XG5cbiAgaW5qZWN0TW9kYWwoJ3NlcnZpY2UtY3JlZHMtbW9kYWwnLCBgPGRpdiBpZD1cInNlcnZpY2UtY3JlZHMtbW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VydmljZS1jcmVkcy1jb250ZW50XCI+XG4gICAgICA8aDMgaWQ9XCJzdmMtY3JlZHMtdGl0bGVcIiBzdHlsZT1cIm1hcmdpbjogMCAwIDRweDsgZm9udC1zaXplOiAxLjA1cmVtO1wiPlNlcnZpY2UgQ3JlZGVudGlhbHM8L2gzPlxuICAgICAgPHAgaWQ9XCJzdmMtY3JlZHMtZGVzY1wiIHN0eWxlPVwiZm9udC1zaXplOiAwLjc1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW46IDAgMCAxNHB4O1wiPkNyZWRlbnRpYWxzIGFyZSBpbmplY3RlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYWNjZXNzaW5nIHRoaXMgc2VydmljZS48L3A+XG5cbiAgICAgIDwhLS0gU3RhdHVzIGluZGljYXRvciAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsgbWFyZ2luLWJvdHRvbTogMTJweDtcIj5cbiAgICAgICAgPHNwYW4gaWQ9XCJzdmMtY3JlZHMtZG90XCIgY2xhc3M9XCJzdGF0dXMtZG90XCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBpZD1cInN2Yy1jcmVkcy1zdGF0dXNcIiBjbGFzcz1cInRleHQtbXV0ZWQtc21cIj5ObyBjcmVkZW50aWFscyBzdG9yZWQ8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTZWVkaG9zdCBjcmVkZW50aWFscyAoc2hvd24gZm9yIGV4dGVybmFsIHNlcnZpY2VzKSAtLT5cbiAgICAgIDxkaXYgaWQ9XCJzdmMtY3JlZHMtc2VlZGhvc3RcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi1ib3R0b206IDE0cHg7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWJvbGRcIj5TZWVkaG9zdCBMb2dpbjwvbGFiZWw+XG4gICAgICAgIDxwIGNsYXNzPVwiaGludC1taWNyb1wiPlVzZXJuYW1lIHNoYXJlZCBhY3Jvc3MgYWxsIHNlcnZpY2VzLiBQYXNzd29yZCBpcyBwZXItc2VydmljZS48L3A+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic3ZjLXNlZWRob3N0LXVzZXJcIiBwbGFjZWhvbGRlcj1cIlVzZXJuYW1lIChzaGFyZWQpXCIgYXV0b2NvbXBsZXRlPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogOHB4IDEwcHg7IG1hcmdpbi1ib3R0b206IDZweDsgYmFja2dyb3VuZDogdmFyKC0tYmcpOyBjb2xvcjogdmFyKC0tZmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiA2cHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIiAvPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgaWQ9XCJzdmMtc2VlZGhvc3QtcGFzc1wiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBhdXRvY29tcGxldGU9XCJjdXJyZW50LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtY3JlZHNcIiAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQVBJIEtleSAoc2hvd24gZm9yIGFyciBzZXJ2aWNlcyBvciBzZXJ2aWNlcyB3aXRoIEFQSSBrZXkgc3VwcG9ydCkgLS0+XG4gICAgICA8ZGl2IGlkPVwic3ZjLWNyZWRzLWFwaWtleVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWFyZ2luLWJvdHRvbTogMTRweDtcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtYm9sZFwiPkFQSSBLZXk8L2xhYmVsPlxuICAgICAgICA8cCBjbGFzcz1cImhpbnQtbWljcm9cIj5CeXBhc3NlcyB0aGUgYXBwJ3Mgb3duIGxvZ2luIHNjcmVlbjwvcD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzdmMtYXBpa2V5LWlucHV0XCIgcGxhY2Vob2xkZXI9XCJBUEkga2V5XCJcbiAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDhweCAxMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZyk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAwLjg1cmVtOyBmb250LWZhbWlseTogbW9ub3NwYWNlOyBib3gtc2l6aW5nOiBib3JkZXItYm94O1wiIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBRdWFsaXR5IFByb2ZpbGUgKHNob3duIGZvciByYWRhcnIvc29uYXJyIG9ubHkpIC0tPlxuICAgICAgPGRpdiBpZD1cInN2Yy1jcmVkcy1xdWFsaXR5XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBtYXJnaW4tYm90dG9tOiAxNHB4O1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1ib2xkXCI+UXVhbGl0eSBQcm9maWxlPC9sYWJlbD5cbiAgICAgICAgPHAgY2xhc3M9XCJoaW50LW1pY3JvXCI+VXNlZCB3aGVuIHJlcXVlc3RpbmcgdmlhIFNlZXJyPC9wPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgPHNlbGVjdCBpZD1cInN2Yy1xdWFsaXR5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImZsZXg6IDE7IHBhZGRpbmc6IDhweCAxMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZyk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAwLjg1cmVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94O1wiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIEVudGVyIEFQSSBrZXkgZmlyc3QgLS08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8YnV0dG9uIGlkPVwic3ZjLXF1YWxpdHktZmV0Y2hcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogOHB4IDEycHg7IGZvbnQtc2l6ZTogMC43NXJlbTsgY3Vyc29yOiBwb2ludGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxuICAgICAgICAgICAgRmV0Y2hcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJzdmMtcXVhbGl0eS1zdGF0dXNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC43NXJlbTsgbWFyZ2luLXRvcDogNHB4OyBtaW4taGVpZ2h0OiAxZW07XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQZXItc2VydmljZSBCYXNpYyBBdXRoIChzaG93biBmb3Igbm9uLWV4dGVybmFsIHNlcnZpY2VzKSAtLT5cbiAgICAgIDxkaXYgaWQ9XCJzdmMtY3JlZHMtYmFzaWNcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi1ib3R0b206IDE0cHg7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWJvbGRcIj5TZXJ2aWNlIExvZ2luPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzdmMtYmFzaWMtdXNlclwiIHBsYWNlaG9sZGVyPVwiVXNlcm5hbWVcIiBhdXRvY29tcGxldGU9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiA4cHggMTBweDsgbWFyZ2luLXRvcDogNnB4OyBtYXJnaW4tYm90dG9tOiA2cHg7IGJhY2tncm91bmQ6IHZhcigtLWJnKTsgY29sb3I6IHZhcigtLWZnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDAuODVyZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7XCIgLz5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGlkPVwic3ZjLWJhc2ljLXBhc3NcIiBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCIgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNyZWRzXCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEVycm9yIG1lc3NhZ2UgLS0+XG4gICAgICA8ZGl2IGlkPVwic3ZjLWNyZWRzLWVycm9yXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBwYWRkaW5nOiA4cHggMTBweDsgbWFyZ2luLWJvdHRvbTogMTBweDsgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWVycm9yLCAjYzYyODI4KSAxMiUsIHRyYW5zcGFyZW50KTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZXJyb3IsICNjNjI4MjgpOyBib3JkZXItcmFkaXVzOiA2cHg7IGZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tZXJyb3IsICNjNjI4MjgpO1wiPjwvZGl2PlxuXG4gICAgICA8IS0tIEJ1dHRvbnMgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IG1hcmdpbi10b3A6IDE0cHg7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJzdmMtY3JlZHMtc2F2ZVwiIGNsYXNzPVwiYnRuLWFjY2VudC1zb2xpZFwiIHN0eWxlPVwiZmxleDogMTsgcGFkZGluZzogOXB4OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDAuODVyZW07XCI+XG4gICAgICAgICAgU2F2ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInN2Yy1jcmVkcy1jbGVhclwiIHN0eWxlPVwicGFkZGluZzogOXB4IDE0cHg7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogdmFyKC0tYmFkLWZnLCAjZmY5YWEzKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmFkLWZnLCAjZmY5YWEzKTsgYm9yZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtc2l6ZTogMC44NXJlbTsgZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgICBDbGVhclxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInN2Yy1jcmVkcy1jbG9zZVwiIHN0eWxlPVwicGFkZGluZzogOXB4IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDAuODVyZW07XCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PmApO1xuXG4gIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtY3JlZHMtbW9kYWwnKTtcbiAgbGV0IGN1cnJlbnRTZXJ2aWNlID0gbnVsbDtcbiAgY29uc3QgYXJyU2VydmljZXMgPSBbJ3NvbmFycicsICdyYWRhcnInLCAncHJvd2xhcnInLCAnb3ZlcnNlZXJyJ107XG4gIGNvbnN0IHF1YWxpdHlQcm9maWxlU2VydmljZXMgPSBbJ3NvbmFycicsICdyYWRhcnInXTtcblxuICBmdW5jdGlvbiBnZXRTZXJ2aWNlVXJsKHNlcnZpY2UpIHtcbiAgICByZXR1cm4gc2VydmljZS5leHRlcm5hbFVybCB8fCBzZXJ2aWNlLnVybCB8fCAnJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3dFcnJvcihtc2cpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtY3JlZHMtZXJyb3InKTtcbiAgICBlbC50ZXh0Q29udGVudCA9IG1zZztcbiAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIH1cblxuICBmdW5jdGlvbiBoaWRlRXJyb3IoKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLWVycm9yJyk7XG4gICAgZWwudGV4dENvbnRlbnQgPSAnJztcbiAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgd2luZG93Lm9wZW5TZXJ2aWNlQ3JlZHNNb2RhbCA9IGFzeW5jIGZ1bmN0aW9uKHNlcnZpY2UpIHtcbiAgICBjdXJyZW50U2VydmljZSA9IHNlcnZpY2U7XG4gICAgaGlkZUVycm9yKCk7XG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLXRpdGxlJyk7XG4gICAgY29uc3QgZGVzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtY3JlZHMtZGVzYycpO1xuICAgIGNvbnN0IHNlZWRob3N0U2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtY3JlZHMtc2VlZGhvc3QnKTtcbiAgICBjb25zdCBhcGlrZXlTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1hcGlrZXknKTtcbiAgICBjb25zdCBiYXNpY1NlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLWJhc2ljJyk7XG4gICAgY29uc3QgcXVhbGl0eVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLXF1YWxpdHknKTtcblxuICAgIHRpdGxlLnRleHRDb250ZW50ID0gc2VydmljZS5uYW1lICsgJyBDcmVkZW50aWFscyc7XG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNlY3Rpb25zIHRvIHNob3dcbiAgICBjb25zdCBpc0V4dCA9ICEhc2VydmljZS5pc0V4dGVybmFsO1xuICAgIGNvbnN0IGlzQXJyID0gYXJyU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCkgfHwgYXJyU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5hcHBUZW1wbGF0ZSk7XG4gICAgY29uc3QgaGFzUXVhbGl0eSA9IHF1YWxpdHlQcm9maWxlU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCkgfHwgcXVhbGl0eVByb2ZpbGVTZXJ2aWNlcy5pbmNsdWRlcyhzZXJ2aWNlLmFwcFRlbXBsYXRlKTtcblxuICAgIHNlZWRob3N0U2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gaXNFeHQgPyAnJyA6ICdub25lJztcbiAgICBhcGlrZXlTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSBpc0FyciA/ICcnIDogJ25vbmUnO1xuICAgIHF1YWxpdHlTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSBoYXNRdWFsaXR5ID8gJycgOiAnbm9uZSc7XG4gICAgYmFzaWNTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAhaXNFeHQgPyAnJyA6ICdub25lJztcblxuICAgIC8vIFJlc2V0IHF1YWxpdHkgZHJvcGRvd25cbiAgICBjb25zdCBxdWFsU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1xdWFsaXR5LXNlbGVjdCcpO1xuICAgIHF1YWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBFbnRlciBBUEkga2V5IGZpcnN0IC0tPC9vcHRpb24+JztcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXF1YWxpdHktc3RhdHVzJykudGV4dENvbnRlbnQgPSAnJztcblxuICAgIGlmIChpc0V4dCkge1xuICAgICAgZGVzYy50ZXh0Q29udGVudCA9ICdTZWVkaG9zdCBjcmVkZW50aWFscyBhdXRvLWxvZ2luIHBhc3QgdGhlIEhUVFAgcHJvbXB0LiBBUEkga2V5IGJ5cGFzc2VzIHRoZSBhcHAgbG9naW4uJztcbiAgICAgIC8vIFVwZGF0ZSBwYXNzd29yZCBwbGFjZWhvbGRlciB3aXRoIHNlcnZpY2UgbmFtZVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1zZWVkaG9zdC1wYXNzJykucGxhY2Vob2xkZXIgPSBgUGFzc3dvcmQgZm9yICR7c2VydmljZS5uYW1lfWA7XG4gICAgfSBlbHNlIGlmIChpc0Fycikge1xuICAgICAgZGVzYy50ZXh0Q29udGVudCA9ICdBUEkga2V5IGJ5cGFzc2VzIHRoZSBhcHAgbG9naW4gc2NyZWVuIGF1dG9tYXRpY2FsbHkuJztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVzYy50ZXh0Q29udGVudCA9ICdDcmVkZW50aWFscyBhcmUgaW5qZWN0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFjY2Vzc2luZyB0aGlzIHNlcnZpY2UuJztcbiAgICB9XG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIGNyZWRlbnRpYWxzXG4gICAgYXdhaXQgbG9hZFNlcnZpY2VDcmVkcyhzZXJ2aWNlKTtcbiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZFNlcnZpY2VDcmVkcyhzZXJ2aWNlKSB7XG4gICAgY29uc3QgZG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1kb3QnKTtcbiAgICBjb25zdCBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLXN0YXR1cycpO1xuICAgIGNvbnN0IGNsZWFyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1jbGVhcicpO1xuICAgIGxldCBoYXNDcmVkcyA9IGZhbHNlO1xuXG4gICAgLy8gTG9hZCBzZWVkaG9zdCBjcmVkcyAoc2hhcmVkIHVzZXJuYW1lICsgcGVyLXNlcnZpY2UgcGFzc3dvcmQpXG4gICAgaWYgKHNlcnZpY2UuaXNFeHRlcm5hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYC9hcGkvdjEvc2VlZGhvc3QtY3JlZHM/c2VydmljZUlkPSR7c2VydmljZS5pZH1gKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXNlZWRob3N0LXVzZXInKS52YWx1ZSA9IGRhdGEudXNlcm5hbWUgfHwgJyc7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzQ3JlZGVudGlhbHMpIGhhc0NyZWRzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXNlZWRob3N0LXVzZXInKS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXNlZWRob3N0LXBhc3MnKS52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIC8vIExvYWQgcGVyLXNlcnZpY2UgY3JlZHNcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYC9hcGkvdjEvc2VydmljZXMvJHtzZXJ2aWNlLmlkfS9jcmVkZW50aWFsc2ApO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIGlmIChkYXRhLmhhc0FwaUtleSkge1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtYXBpa2V5LWlucHV0JykudmFsdWUgPSAnXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyJztcbiAgICAgICAgICBoYXNDcmVkcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1hcGlrZXktaW5wdXQnKS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmhhc0Jhc2ljQXV0aCAmJiAhc2VydmljZS5pc0V4dGVybmFsKSB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1iYXNpYy11c2VyJykudmFsdWUgPSBkYXRhLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgICAgIGhhc0NyZWRzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWJhc2ljLXVzZXInKS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWJhc2ljLXBhc3MnKSkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1iYXNpYy1wYXNzJykudmFsdWUgPSAnJztcblxuICAgIC8vIExvYWQgcXVhbGl0eSBwcm9maWxlIGZvciBhcnIgc2VydmljZXNcbiAgICBjb25zdCBzdmNJZCA9IHNlcnZpY2UuaWQgfHwgc2VydmljZS5hcHBUZW1wbGF0ZTtcbiAgICBpZiAocXVhbGl0eVByb2ZpbGVTZXJ2aWNlcy5pbmNsdWRlcyhzdmNJZCkpIHtcbiAgICAgIGF3YWl0IGxvYWRRdWFsaXR5UHJvZmlsZXMoc2VydmljZSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0NyZWRzKSB7XG4gICAgICBkb3Quc3R5bGUuYmFja2dyb3VuZCA9ICd2YXIoLS1vay1mZywgIzc0ZGZjNCknO1xuICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLW9rLWZnLCAjNzRkZmM0KSc7XG4gICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnQ3JlZGVudGlhbHMgc3RvcmVkJztcbiAgICAgIGNsZWFyQnRuLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIC8vIFVwZGF0ZSB0aGUgY2FyZCBidXR0b25cbiAgICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjcmVkcy1idG4tJHtzZXJ2aWNlLmlkfWApO1xuICAgICAgaWYgKGJ0bikgYnRuLmNsYXNzTGlzdC5hZGQoJ2hhcy1jcmVkcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3Quc3R5bGUuYmFja2dyb3VuZCA9ICd2YXIoLS1tdXRlZCknO1xuICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLW11dGVkKSc7XG4gICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnTm8gY3JlZGVudGlhbHMgc3RvcmVkJztcbiAgICAgIGNsZWFyQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgLy8gRmV0Y2ggYW5kIHBvcHVsYXRlIHF1YWxpdHkgcHJvZmlsZXMgZHJvcGRvd25cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZFF1YWxpdHlQcm9maWxlcyhzZXJ2aWNlKSB7XG4gICAgY29uc3QgcXVhbFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtcXVhbGl0eS1zZWxlY3QnKTtcbiAgICBjb25zdCBxdWFsU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1xdWFsaXR5LXN0YXR1cycpO1xuICAgIGNvbnN0IHN2Y0lkID0gc2VydmljZS5pZCB8fCBzZXJ2aWNlLmFwcFRlbXBsYXRlO1xuICAgIGNvbnN0IHN2Y1VybCA9IGdldFNlcnZpY2VVcmwoc2VydmljZSk7XG5cbiAgICBpZiAoIXN2Y1VybCkge1xuICAgICAgcXVhbFNlbGVjdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIE5vIHNlcnZpY2UgVVJMIC0tPC9vcHRpb24+JztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBxdWFsU2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiXCI+TG9hZGluZy4uLjwvb3B0aW9uPic7XG4gICAgcXVhbFN0YXR1cy50ZXh0Q29udGVudCA9ICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBzZXJ2aWNlOiBzdmNJZCwgdXJsOiBzdmNVcmwgfSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL2FwaS92MS9hcnIvcXVhbGl0eS1wcm9maWxlcz8ke3BhcmFtc31gKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICBpZiAoIWRhdGEuc3VjY2VzcyB8fCAhZGF0YS5wcm9maWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHF1YWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBObyBwcm9maWxlcyBmb3VuZCAoZW50ZXIgQVBJIGtleSBhbmQgY2xpY2sgRmV0Y2gpIC0tPC9vcHRpb24+JztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBxdWFsU2VsZWN0LmlubmVySFRNTCA9ICcnO1xuICAgICAgZm9yIChjb25zdCBwIG9mIGRhdGEucHJvZmlsZXMpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgIG9wdC52YWx1ZSA9IHAuaWQ7XG4gICAgICAgIG9wdC50ZXh0Q29udGVudCA9IHAubmFtZTtcbiAgICAgICAgcXVhbFNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmUtc2VsZWN0IHN0b3JlZCBwcm9maWxlIG9yIGJlc3QgbWF0Y2ggZm9yIFwiNzIwXCJcbiAgICAgIGlmIChkYXRhLnN0b3JlZFByb2ZpbGVJZCkge1xuICAgICAgICBxdWFsU2VsZWN0LnZhbHVlID0gU3RyaW5nKGRhdGEuc3RvcmVkUHJvZmlsZUlkKTtcbiAgICAgIH1cbiAgICAgIGlmICghcXVhbFNlbGVjdC52YWx1ZSkge1xuICAgICAgICAvLyBUcnkgdG8gZmluZCBhIDcyMHAtaXNoIHByb2ZpbGVcbiAgICAgICAgY29uc3QgbWF0Y2g3MjAgPSBkYXRhLnByb2ZpbGVzLmZpbmQocCA9PiAvNzIwL2kudGVzdChwLm5hbWUpKTtcbiAgICAgICAgaWYgKG1hdGNoNzIwKSBxdWFsU2VsZWN0LnZhbHVlID0gU3RyaW5nKG1hdGNoNzIwLmlkKTtcbiAgICAgIH1cbiAgICAgIGlmICghcXVhbFNlbGVjdC52YWx1ZSAmJiBkYXRhLnByb2ZpbGVzLmxlbmd0aCkge1xuICAgICAgICBxdWFsU2VsZWN0LnZhbHVlID0gU3RyaW5nKGRhdGEucHJvZmlsZXNbMF0uaWQpO1xuICAgICAgfVxuXG4gICAgICBxdWFsU3RhdHVzLmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1vay1mZyk7XCI+JHtkYXRhLnByb2ZpbGVzLmxlbmd0aH0gcHJvZmlsZXMgbG9hZGVkPC9zcGFuPmA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcXVhbFNlbGVjdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIEZhaWxlZCB0byBsb2FkIC0tPC9vcHRpb24+JztcbiAgICAgIHF1YWxTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLWVycm9yLCAjYzYyODI4KTtcIj5FcnJvcjogJHtlLm1lc3NhZ2V9PC9zcGFuPmA7XG4gICAgfVxuICB9XG5cbiAgLy8gRmV0Y2ggYnV0dG9uIGZvciBxdWFsaXR5IHByb2ZpbGVzXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtcXVhbGl0eS1mZXRjaCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWN1cnJlbnRTZXJ2aWNlKSByZXR1cm47XG4gICAgY29uc3Qgc3ZjSWQgPSBjdXJyZW50U2VydmljZS5pZCB8fCBjdXJyZW50U2VydmljZS5hcHBUZW1wbGF0ZTtcbiAgICBjb25zdCBzdmNVcmwgPSBnZXRTZXJ2aWNlVXJsKGN1cnJlbnRTZXJ2aWNlKTtcbiAgICBjb25zdCBhcGlLZXlJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtYXBpa2V5LWlucHV0Jyk7XG4gICAgY29uc3QgYXBpS2V5ID0gYXBpS2V5SW5wdXQ/LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBxdWFsU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1xdWFsaXR5LXNlbGVjdCcpO1xuICAgIGNvbnN0IHF1YWxTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXF1YWxpdHktc3RhdHVzJyk7XG5cbiAgICBpZiAoIXN2Y1VybCkge1xuICAgICAgcXVhbFN0YXR1cy5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogdmFyKC0tZXJyb3IsICNjNjI4MjgpO1wiPk5vIHNlcnZpY2UgVVJMIGF2YWlsYWJsZTwvc3Bhbj4nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWFwaUtleSB8fCBhcGlLZXkgPT09ICdcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjInKSB7XG4gICAgICBxdWFsU3RhdHVzLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1lcnJvciwgI2M2MjgyOCk7XCI+RW50ZXIgYW4gQVBJIGtleSBmaXJzdDwvc3Bhbj4nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHF1YWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj5GZXRjaGluZy4uLjwvb3B0aW9uPic7XG4gICAgcXVhbFN0YXR1cy50ZXh0Q29udGVudCA9ICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBzZXJ2aWNlOiBzdmNJZCwgdXJsOiBzdmNVcmwsIGFwaUtleSB9KTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL2Fyci9xdWFsaXR5LXByb2ZpbGVzPyR7cGFyYW1zfWApO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgIGlmICghZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIHF1YWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBFcnJvciAtLTwvb3B0aW9uPic7XG4gICAgICAgIHF1YWxTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLWVycm9yLCAjYzYyODI4KTtcIj4ke2RhdGEuZXJyb3IgfHwgJ0ZhaWxlZCB0byBmZXRjaCBwcm9maWxlcyd9PC9zcGFuPmA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkYXRhLnByb2ZpbGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcXVhbFNlbGVjdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIE5vIHByb2ZpbGVzIGZvdW5kIC0tPC9vcHRpb24+JztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBxdWFsU2VsZWN0LmlubmVySFRNTCA9ICcnO1xuICAgICAgZm9yIChjb25zdCBwIG9mIGRhdGEucHJvZmlsZXMpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgIG9wdC52YWx1ZSA9IHAuaWQ7XG4gICAgICAgIG9wdC50ZXh0Q29udGVudCA9IHAubmFtZTtcbiAgICAgICAgcXVhbFNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmUtc2VsZWN0IDcyMHAgbWF0Y2hcbiAgICAgIGNvbnN0IG1hdGNoNzIwID0gZGF0YS5wcm9maWxlcy5maW5kKHAgPT4gLzcyMC9pLnRlc3QocC5uYW1lKSk7XG4gICAgICBpZiAobWF0Y2g3MjApIHF1YWxTZWxlY3QudmFsdWUgPSBTdHJpbmcobWF0Y2g3MjAuaWQpO1xuICAgICAgZWxzZSBpZiAoZGF0YS5wcm9maWxlcy5sZW5ndGgpIHF1YWxTZWxlY3QudmFsdWUgPSBTdHJpbmcoZGF0YS5wcm9maWxlc1swXS5pZCk7XG5cbiAgICAgIHF1YWxTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW9rLWZnKTtcIj4ke2RhdGEucHJvZmlsZXMubGVuZ3RofSBwcm9maWxlcyBsb2FkZWQ8L3NwYW4+YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBxdWFsU2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiXCI+LS0gRXJyb3IgLS08L29wdGlvbj4nO1xuICAgICAgcXVhbFN0YXR1cy5pbm5lckhUTUwgPSBgPHNwYW4gc3R5bGU9XCJjb2xvcjogdmFyKC0tZXJyb3IsICNjNjI4MjgpO1wiPiR7ZS5tZXNzYWdlfTwvc3Bhbj5gO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2F2ZSBidXR0b25cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1zYXZlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGlmICghY3VycmVudFNlcnZpY2UpIHJldHVybjtcbiAgICBjb25zdCBzYXZlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1zYXZlJyk7XG4gICAgc2F2ZUJ0bi50ZXh0Q29udGVudCA9ICdTYXZpbmcuLi4nO1xuICAgIHNhdmVCdG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgIGhpZGVFcnJvcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlzQXJyID0gYXJyU2VydmljZXMuaW5jbHVkZXMoY3VycmVudFNlcnZpY2UuaWQpIHx8IGFyclNlcnZpY2VzLmluY2x1ZGVzKGN1cnJlbnRTZXJ2aWNlLmFwcFRlbXBsYXRlKTtcbiAgICAgIGNvbnN0IHN2Y0lkID0gY3VycmVudFNlcnZpY2UuaWQgfHwgY3VycmVudFNlcnZpY2UuYXBwVGVtcGxhdGU7XG5cbiAgICAgIC8vIFNhdmUgc2VlZGhvc3QgY3JlZHMgKHNoYXJlZCB1c2VybmFtZSArIHBlci1zZXJ2aWNlIHBhc3N3b3JkKVxuICAgICAgaWYgKGN1cnJlbnRTZXJ2aWNlLmlzRXh0ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtc2VlZGhvc3QtdXNlcicpLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgY29uc3QgcGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtc2VlZGhvc3QtcGFzcycpLnZhbHVlO1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3NlZWRob3N0LWNyZWRzJywge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdXNlcm5hbWU6IHVzZXIsIHBhc3N3b3JkOiBwYXNzIHx8IHVuZGVmaW5lZCwgc2VydmljZUlkOiBjdXJyZW50U2VydmljZS5pZCB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmUgQVBJIGtleSBcdTIwMTQgZm9yIGFyciBzZXJ2aWNlcywgdXNlIHRoZSBhcnIgY3JlZGVudGlhbHMgZW5kcG9pbnQgKGNvcnJlY3QgbmFtZXNwYWNlKVxuICAgICAgY29uc3QgYXBpS2V5SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWFwaWtleS1pbnB1dCcpO1xuICAgICAgY29uc3QgYXBpS2V5ID0gYXBpS2V5SW5wdXQ/LnZhbHVlLnRyaW0oKTtcbiAgICAgIGlmIChhcGlLZXkgJiYgYXBpS2V5ICE9PSAnXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyJykge1xuICAgICAgICBpZiAoaXNBcnIpIHtcbiAgICAgICAgICAvLyBVc2UgYXJyIGNyZWRlbnRpYWxzIGVuZHBvaW50IFx1MjAxNCB2YWxpZGF0ZXMga2V5LCB0ZXN0cyBjb25uZWN0aW9uLCBzdG9yZXMgaW4gYXJyLiogbmFtZXNwYWNlXG4gICAgICAgICAgY29uc3Qgc3ZjVXJsID0gZ2V0U2VydmljZVVybChjdXJyZW50U2VydmljZSk7XG4gICAgICAgICAgY29uc3QgcXVhbFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtcXVhbGl0eS1zZWxlY3QnKTtcbiAgICAgICAgICBjb25zdCBxdWFsaXR5UHJvZmlsZUlkID0gcXVhbFNlbGVjdD8udmFsdWUgPyBwYXJzZUludChxdWFsU2VsZWN0LnZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBxdWFsaXR5UHJvZmlsZU5hbWUgPSBxdWFsU2VsZWN0Py5zZWxlY3RlZE9wdGlvbnM/LlswXT8udGV4dENvbnRlbnQgfHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvYXJyL2NyZWRlbnRpYWxzJywge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgc2VydmljZTogc3ZjSWQsXG4gICAgICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgICAgICAgdXJsOiBzdmNVcmwgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBxdWFsaXR5UHJvZmlsZUlkOiBxdWFsaXR5UHJvZmlsZUlkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcXVhbGl0eVByb2ZpbGVOYW1lOiBxdWFsaXR5UHJvZmlsZU5hbWUgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgIGlmICghZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICBzaG93RXJyb3IoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgQVBJIGtleScpO1xuICAgICAgICAgICAgc2F2ZUJ0bi50ZXh0Q29udGVudCA9ICdTYXZlJztcbiAgICAgICAgICAgIHNhdmVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGEuY29ubmVjdGlvblRlc3QgJiYgIWRhdGEuY29ubmVjdGlvblRlc3Quc3VjY2Vzcykge1xuICAgICAgICAgICAgc2hvd0Vycm9yKGBBUEkga2V5IHNhdmVkIGJ1dCBjb25uZWN0aW9uIHRlc3QgZmFpbGVkOiAke2RhdGEuY29ubmVjdGlvblRlc3QuZXJyb3J9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vbi1hcnIgc2VydmljZXMgdXNlIHRoZSBnZW5lcmljIGVuZHBvaW50XG4gICAgICAgICAgYXdhaXQgc2VjdXJlRmV0Y2goYC9hcGkvdjEvc2VydmljZXMvJHtjdXJyZW50U2VydmljZS5pZH0vY3JlZGVudGlhbHNgLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhcGlLZXkgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0FyciAmJiBxdWFsaXR5UHJvZmlsZVNlcnZpY2VzLmluY2x1ZGVzKHN2Y0lkKSkge1xuICAgICAgICAvLyBBUEkga2V5IHVuY2hhbmdlZCBidXQgdXNlciBtYXkgaGF2ZSBjaGFuZ2VkIHF1YWxpdHkgcHJvZmlsZSBcdTIwMTQgc2F2ZSBwcm9maWxlIG9ubHlcbiAgICAgICAgY29uc3QgcXVhbFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtcXVhbGl0eS1zZWxlY3QnKTtcbiAgICAgICAgY29uc3QgcXVhbGl0eVByb2ZpbGVJZCA9IHF1YWxTZWxlY3Q/LnZhbHVlID8gcGFyc2VJbnQocXVhbFNlbGVjdC52YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHF1YWxpdHlQcm9maWxlTmFtZSA9IHF1YWxTZWxlY3Q/LnNlbGVjdGVkT3B0aW9ucz8uWzBdPy50ZXh0Q29udGVudCB8fCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChxdWFsaXR5UHJvZmlsZUlkKSB7XG4gICAgICAgICAgYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvYXJyL3F1YWxpdHktcHJvZmlsZXMnLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzZXJ2aWNlOiBzdmNJZCwgcXVhbGl0eVByb2ZpbGVJZCwgcXVhbGl0eVByb2ZpbGVOYW1lIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBwZXItc2VydmljZSBiYXNpYyBhdXRoXG4gICAgICBpZiAoIWN1cnJlbnRTZXJ2aWNlLmlzRXh0ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtYmFzaWMtdXNlcicpLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgY29uc3QgcGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtYmFzaWMtcGFzcycpLnZhbHVlO1xuICAgICAgICBpZiAodXNlciAmJiBwYXNzKSB7XG4gICAgICAgICAgYXdhaXQgc2VjdXJlRmV0Y2goYC9hcGkvdjEvc2VydmljZXMvJHtjdXJyZW50U2VydmljZS5pZH0vY3JlZGVudGlhbHNgLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB1c2VybmFtZTogdXNlciwgcGFzc3dvcmQ6IHBhc3MgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBsb2FkU2VydmljZUNyZWRzKGN1cnJlbnRTZXJ2aWNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckhhbmRsZXIubG9nRXJyb3IoJ1tTZXJ2aWNlQ3JlZGVudGlhbHNdIFNhdmUnLCBlLCB7IGZ1bmN0aW9uOiAnc2F2ZUNyZWRlbnRpYWxzJyB9KTtcbiAgICAgIHNob3dFcnJvcignRmFpbGVkIHRvIHNhdmU6ICcgKyAoZS5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJykpO1xuICAgIH1cbiAgICBzYXZlQnRuLnRleHRDb250ZW50ID0gJ1NhdmUnO1xuICAgIHNhdmVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gQ2xlYXIgYnV0dG9uXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtY3JlZHMtY2xlYXInKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFjdXJyZW50U2VydmljZSkgcmV0dXJuO1xuICAgIGlmICghY29uZmlybShgUmVtb3ZlIHN0b3JlZCBjcmVkZW50aWFscyBmb3IgJHtjdXJyZW50U2VydmljZS5uYW1lfT9gKSkgcmV0dXJuO1xuICAgIGhpZGVFcnJvcigpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdmNJZCA9IGN1cnJlbnRTZXJ2aWNlLmlkIHx8IGN1cnJlbnRTZXJ2aWNlLmFwcFRlbXBsYXRlO1xuICAgICAgY29uc3QgaXNBcnIgPSBhcnJTZXJ2aWNlcy5pbmNsdWRlcyhzdmNJZCk7XG4gICAgICBpZiAoY3VycmVudFNlcnZpY2UuaXNFeHRlcm5hbCkge1xuICAgICAgICBhd2FpdCBzZWN1cmVGZXRjaChgL2FwaS92MS9zZWVkaG9zdC1jcmVkcz9zZXJ2aWNlSWQ9JHtjdXJyZW50U2VydmljZS5pZH1gLCB7IG1ldGhvZDogJ0RFTEVURScgfSk7XG4gICAgICB9XG4gICAgICAvLyBEZWxldGUgZnJvbSBib3RoIG5hbWVzcGFjZXNcbiAgICAgIGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL3NlcnZpY2VzLyR7Y3VycmVudFNlcnZpY2UuaWR9L2NyZWRlbnRpYWxzYCwgeyBtZXRob2Q6ICdERUxFVEUnIH0pO1xuICAgICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL2Fyci9jcmVkZW50aWFscy8ke3N2Y0lkfWAsIHsgbWV0aG9kOiAnREVMRVRFJyB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjcmVkcy1idG4tJHtjdXJyZW50U2VydmljZS5pZH1gKTtcbiAgICAgIGlmIChidG4pIGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdoYXMtY3JlZHMnKTtcbiAgICAgIGF3YWl0IGxvYWRTZXJ2aWNlQ3JlZHMoY3VycmVudFNlcnZpY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9ySGFuZGxlci5sb2dFcnJvcignW1NlcnZpY2VDcmVkZW50aWFsc10gQ2xlYXInLCBlLCB7IGZ1bmN0aW9uOiAnY2xlYXJDcmVkZW50aWFscycgfSk7XG4gICAgICBzaG93RXJyb3IoJ0ZhaWxlZCB0byBjbGVhcjogJyArIChlLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDbG9zZSBidXR0b24gLyBiYWNrZHJvcFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLWNsb3NlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICBjdXJyZW50U2VydmljZSA9IG51bGw7XG4gIH0pO1xuICBtb2RhbD8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIHtcbiAgICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgIGN1cnJlbnRTZXJ2aWNlID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIENoZWNrIGNyZWRlbnRpYWwgc3RhdHVzIGZvciBhbGwgc2VydmljZXMgb24gcGFnZSBsb2FkICh1cGRhdGUga2V5IGJ1dHRvbiBoaWdobGlnaHRzKVxuICB3aW5kb3cucmVmcmVzaENyZWRzQnV0dG9ucyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IGFwcCBvZiAod2luZG93LkFQUFMgfHwgW10pKSB7XG4gICAgICAgIGlmICghYXBwLmlzRXh0ZXJuYWwgJiYgIWFwcC5hcHBUZW1wbGF0ZSAmJiAhYXBwLnVybCkgY29udGludWU7XG4gICAgICAgIGxldCBoYXNDcmVkcyA9IGZhbHNlO1xuICAgICAgICBpZiAoYXBwLmlzRXh0ZXJuYWwpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2VlZFJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL3NlZWRob3N0LWNyZWRzP3NlcnZpY2VJZD0ke2FwcC5pZH1gKTtcbiAgICAgICAgICAgIGNvbnN0IHNlZWREYXRhID0gYXdhaXQgc2VlZFJlcy5qc29uKCk7XG4gICAgICAgICAgICBpZiAoc2VlZERhdGEuc3VjY2VzcyAmJiBzZWVkRGF0YS5oYXNDcmVkZW50aWFscykgaGFzQ3JlZHMgPSB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaChgL2FwaS92MS9zZXJ2aWNlcy8ke2FwcC5pZH0vY3JlZGVudGlhbHNgKTtcbiAgICAgICAgICBjb25zdCBkID0gYXdhaXQgci5qc29uKCk7XG4gICAgICAgICAgaWYgKGQuc3VjY2VzcyAmJiAoZC5oYXNBcGlLZXkgfHwgZC5oYXNCYXNpY0F1dGgpKSBoYXNDcmVkcyA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNyZWRzLWJ0bi0ke2FwcC5pZH1gKTtcbiAgICAgICAgaWYgKGJ0bikgYnRuLmNsYXNzTGlzdC50b2dnbGUoJ2hhcy1jcmVkcycsIGhhc0NyZWRzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gIH07XG59KSgpO1xuO1xuLy8gPT09PT0gVE9UUCBTRVRUSU5HUyA9PT09PVxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCBlcnJvckhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKCk7XG4gIGluamVjdE1vZGFsKCd0b3RwLXNldHRpbmdzLW1vZGFsJywgYDxkaXYgaWQ9XCJ0b3RwLXNldHRpbmdzLW1vZGFsXCIgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtY29udGVudFwiIHN0eWxlPVwibWluLXdpZHRoOiA0MjBweDsgbWF4LXdpZHRoOiA1MjBweDtcIj5cbiAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjogMCAwIDE2cHg7IGZvbnQtc2l6ZTogMS4xcmVtO1wiPkF1dGhlbnRpY2F0aW9uIFNldHRpbmdzPC9oMz5cblxuICAgICAgPCEtLSBTdGF0dXMgQmFubmVyIC0tPlxuICAgICAgPGRpdiBpZD1cInRvdHAtc3RhdHVzLWJhbm5lclwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTZweDsgcGFkZGluZzogMTJweCAxNnB4OyBib3JkZXItcmFkaXVzOiA4cHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4O1wiPlxuICAgICAgICA8c3BhbiBpZD1cInRvdHAtc3RhdHVzLWRvdFwiIGNsYXNzPVwic3RhdHVzLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gaWQ9XCJ0b3RwLXN0YXR1cy10ZXh0XCIgc3R5bGU9XCJmb250LXNpemU6IDAuOXJlbTtcIj5UT1RQIGlzIG5vdCBjb25maWd1cmVkPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2V0dXAgQnV0dG9uIChub3QgY29uZmlndXJlZCBzdGF0ZSkgLS0+XG4gICAgICA8ZGl2IGlkPVwidG90cC1zZXR1cC1zZWN0aW9uXCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b3RwLXNldHVwLWJ0blwiIGNsYXNzPVwiYnRuLWFjY2VudC1zb2xpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDEycHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogOHB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMC45NXJlbTtcIj5cbiAgICAgICAgICBHZW5lcmF0ZSBOZXcgU2VjcmV0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IG1hcmdpbjogMTBweCAwIDA7XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXItbGluZVwiPjwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10aW55LW11dGVkXCI+b3I8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXItbGluZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1oaW50XCI+SW1wb3J0IGFuIGV4aXN0aW5nIHNlY3JldCBrZXk6PC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IG1hcmdpbi10b3A6IDZweDtcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwidG90cC1pbXBvcnQta2V5XCIgcGxhY2Vob2xkZXI9XCJQYXN0ZSB5b3VyIEJhc2UzMiBrZXlcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmxleDogMTsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogdmFyKC0tYmcpOyBjb2xvcjogdmFyKC0tZmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiA2cHg7IGZvbnQtc2l6ZTogMC45cmVtOyBmb250LWZhbWlseTogbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogMXB4OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1wiIC8+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwidG90cC1pbXBvcnQtYnRuXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDAuODVyZW07IHdoaXRlLXNwYWNlOiBub3dyYXA7XCI+XG4gICAgICAgICAgICAgIEltcG9ydFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBpZD1cInRvdHAtaW1wb3J0LWVycm9yXCIgc3R5bGU9XCJjb2xvcjogdmFyKC0tYmFkLWZnLCAjZmY5YWEzKTsgZm9udC1zaXplOiAwLjhyZW07IG1pbi1oZWlnaHQ6IDEuMmVtOyBtYXJnaW4tdG9wOiA2cHg7XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2VjcmV0IERpc3BsYXkgKHNldHVwIGZsb3cpIC0tPlxuICAgICAgPGRpdiBpZD1cInRvdHAtcXItc2VjdGlvblwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgPCEtLSBNYW51YWwgS2V5IChwcmltYXJ5IC0gZm9yIFdpbkF1dGgvZGVza3RvcCBhdXRoZW50aWNhdG9ycykgLS0+XG4gICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjg1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW46IDAgMCA4cHg7XCI+Q29weSB0aGlzIGtleSBpbnRvIHlvdXIgYXV0aGVudGljYXRvciBhcHA6PC9wPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IG1hcmdpbi1ib3R0b206IDhweDtcIj5cbiAgICAgICAgICA8Y29kZSBpZD1cInRvdHAtbWFudWFsLWtleVwiIHN0eWxlPVwiZmxleDogMTsgZGlzcGxheTogYmxvY2s7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6IHZhcigtLWJnLCAjMGIwZjFhKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDFyZW07IGZvbnQtZmFtaWx5OiAnU2FtaSBHcm90ZXNrJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogMnB4OyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHVzZXItc2VsZWN0OiBhbGw7IGNvbG9yOiB2YXIoLS1mZyk7XCI+PC9jb2RlPlxuICAgICAgICAgIDxidXR0b24gaWQ9XCJ0b3RwLWNvcHkta2V5XCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDE0cHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDFyZW07IHdoaXRlLXNwYWNlOiBub3dyYXA7IGNvbG9yOiB2YXIoLS1mZyk7XCIgdGl0bGU9XCJDb3B5IHRvIGNsaXBib2FyZFwiPlx1RDgzRFx1RENDQjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIERvd25sb2FkIGJhY2t1cCBmaWxlIChyZWNvdmVyeSBhaWQpIC0tPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTZweDsgcGFkZGluZzogMTBweCAxMnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZywgIzBiMGYxYSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmbGV4OiAxO1wiPlxuICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPVwiY29sb3I6IHZhcigtLWZnKTtcIj5TYXZlIGEgYmFja3VwIGZpbGU8L3N0cm9uZz4gXHUyMDE0IGlmIHlvdSBldmVyIGxvc2UgeW91ciBhdXRoZW50aWNhdG9yLFxuICAgICAgICAgICAgICB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byByZWNvdmVyIHdpdGhvdXQgU1NIIGFjY2VzcyB0byB0aGUgc2VydmVyLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInRvdHAtZG93bmxvYWQtYmFja3VwXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogOHB4IDE0cHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDAuODVyZW07IHdoaXRlLXNwYWNlOiBub3dyYXA7XCI+XG4gICAgICAgICAgICAgIFx1MkIwNyBEb3dubG9hZFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUVIgQ29kZSAoc2Vjb25kYXJ5IC0gZm9yIG1vYmlsZSBhcHBzKSAtLT5cbiAgICAgICAgPGRldGFpbHMgY2xhc3M9XCJtYi0xNlwiPlxuICAgICAgICAgIDxzdW1tYXJ5IHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDAuOHJlbTtcIj5TaG93IFFSIGNvZGUgKGZvciBtb2JpbGUgYXV0aGVudGljYXRvciBhcHBzKTwvc3VtbWFyeT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOiA4cHg7XCI+XG4gICAgICAgICAgICA8aW1nIGlkPVwidG90cC1xci1pbWFnZVwiIHN0eWxlPVwid2lkdGg6IDE4MHB4OyBoZWlnaHQ6IDE4MHB4OyBib3JkZXItcmFkaXVzOiA4cHg7XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kZXRhaWxzPlxuXG4gICAgICAgIDwhLS0gVmVyaWZ5IEZpcnN0IENvZGUgLS0+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgcGFkZGluZy10b3A6IDE2cHg7XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1ib2xkLXNtXCI+RW50ZXIgY29kZSB0byBjb25maXJtIHNldHVwOjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBtYXJnaW4tdG9wOiA4cHg7XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInRvdHAtc2V0dXAtY29kZVwiIG1heGxlbmd0aD1cIjZcIiBpbnB1dG1vZGU9XCJudW1lcmljXCIgcGF0dGVybj1cIlswLTldezZ9XCIgcGxhY2Vob2xkZXI9XCIwMDAwMDBcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmxleDogMTsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDEuM3JlbTsgcGFkZGluZzogMTBweDsgZm9udC1mYW1pbHk6ICdTYW1pIEdyb3Rlc2snLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiA0cHg7IGJhY2tncm91bmQ6IHZhcigtLWJnKTsgY29sb3I6IHZhcigtLWZnKTsgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogOHB4OyBvdXRsaW5lOiBub25lO1wiIC8+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwidG90cC1jb25maXJtLXNldHVwXCIgY2xhc3M9XCJidG4tYWNjZW50LXNvbGlkXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDIwcHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogOHB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7XCI+XG4gICAgICAgICAgICAgIENvbmZpcm1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgaWQ9XCJ0b3RwLXNldHVwLWVycm9yXCIgc3R5bGU9XCJjb2xvcjogdmFyKC0tYmFkLWZnLCAjZmY5YWEzKTsgZm9udC1zaXplOiAwLjhyZW07IG1pbi1oZWlnaHQ6IDEuMmVtOyBtYXJnaW4tdG9wOiA2cHg7XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2Vzc2lvbiBEdXJhdGlvbiAoYWN0aXZlIHN0YXRlKSAtLT5cbiAgICAgIDxkaXYgaWQ9XCJ0b3RwLWR1cmF0aW9uLXNlY3Rpb25cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi10b3A6IDEycHg7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtYm9sZC1zbVwiPlNlc3Npb24gRHVyYXRpb246PC9sYWJlbD5cbiAgICAgICAgPHNlbGVjdCBpZD1cInRvdHAtZHVyYXRpb24tc2VsZWN0XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogMTBweDsgbWFyZ2luLXRvcDogNnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZywgIzBiMGYxYSk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDhweDsgZm9udC1zaXplOiAwLjlyZW07IGN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTVtXCI+MTUgbWludXRlczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIzMG1cIj4zMCBtaW51dGVzPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFoXCI+MSBob3VyPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjJoXCI+MiBob3Vyczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI0aFwiPjQgaG91cnM8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiOGhcIj44IGhvdXJzPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEyaFwiPjEyIGhvdXJzPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjI0aFwiPjI0IGhvdXJzPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5ldmVyXCI+TmV2ZXIgKGRpc2FibGUgVE9UUCk8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjc1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW46IDRweCAwIDA7XCI+SG93IGxvbmcgYmVmb3JlIHlvdSBuZWVkIHRvIHJlLWVudGVyIHlvdXIgY29kZTwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIERpc2FibGUgQnV0dG9uIChhY3RpdmUgc3RhdGUpIC0tPlxuICAgICAgPGRpdiBpZD1cInRvdHAtZGlzYWJsZS1zZWN0aW9uXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBtYXJnaW4tdG9wOiAxNnB4OyBwYWRkaW5nLXRvcDogMTZweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b3RwLWRpc2FibGUtYnRuXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiB2YXIoLS1iYWQtZmcsICNmZjlhYTMpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1iYWQtZmcsICNmZjlhYTMpOyBib3JkZXItcmFkaXVzOiA4cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAwLjlyZW07XCI+XG4gICAgICAgICAgRGlzYWJsZSBUT1RQXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ2xvc2UgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMTZweDsgdGV4dC1hbGlnbjogcmlnaHQ7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b3RwLW1vZGFsLWNsb3NlXCIgc3R5bGU9XCJwYWRkaW5nOiA4cHggMjBweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iYXNlKTsgY29sb3I6IHZhcigtLWZnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogOHB4OyBjdXJzb3I6IHBvaW50ZXI7XCI+XG4gICAgICAgICAgQ2xvc2VcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZFRvdHBTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvdjEvdG90cC9jb25maWcnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgaWYgKCFkYXRhLnN1Y2Nlc3MpIHJldHVybjtcblxuICAgICAgY29uc3QgeyBlbmFibGVkLCBzZXNzaW9uRHVyYXRpb24sIGlzU2V0VXAgfSA9IGRhdGEuY29uZmlnO1xuICAgICAgY29uc3Qgc3RhdHVzRG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtc3RhdHVzLWRvdCcpO1xuICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXN0YXR1cy10ZXh0Jyk7XG4gICAgICBjb25zdCBzdGF0dXNCYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zdGF0dXMtYmFubmVyJyk7XG4gICAgICBjb25zdCBzZXR1cFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1zZWN0aW9uJyk7XG4gICAgICBjb25zdCBxclNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1xci1zZWN0aW9uJyk7XG4gICAgICBjb25zdCBkdXJhdGlvblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1kdXJhdGlvbi1zZWN0aW9uJyk7XG4gICAgICBjb25zdCBkaXNhYmxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLWRpc2FibGUtc2VjdGlvbicpO1xuXG4gICAgICBpZiAoZW5hYmxlZCAmJiBpc1NldFVwKSB7XG4gICAgICAgIHN0YXR1c0RvdC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3ZhcigtLW9rLWZnLCAjN2VmMmZmKSc7XG4gICAgICAgIHN0YXR1c0Jhbm5lci5zdHlsZS5ib3JkZXJDb2xvciA9ICd2YXIoLS1vay1mZywgIzdlZjJmZiknO1xuICAgICAgICBzdGF0dXNCYW5uZXIuc3R5bGUuYmFja2dyb3VuZCA9ICdjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tb2stZmcpIDglLCB0cmFuc3BhcmVudCknO1xuICAgICAgICBzdGF0dXNUZXh0LnRleHRDb250ZW50ID0gJ1RPVFAgaXMgYWN0aXZlJztcbiAgICAgICAgc3RhdHVzVGV4dC5zdHlsZS5jb2xvciA9ICd2YXIoLS1vay1mZywgIzdlZjJmZiknO1xuICAgICAgICAvLyBLZWVwIHRoZSBzZXR1cCBzZWN0aW9uIHZpc2libGUgKGNvbGxhcHNlZCkgc28gdGhlIFwiSW1wb3J0IGV4aXN0aW5nXG4gICAgICAgIC8vIHNlY3JldFwiIG9wdGlvbiBpcyBhbHdheXMgcmVhY2hhYmxlIFx1MjAxNCB1c2VycyBtYXkgbmVlZCB0byByZS1lbnJvbGxcbiAgICAgICAgLy8gdGhlaXIgYXV0aGVudGljYXRvciB3aXRoIHRoZSBzYW1lIHNlY3JldCBmcm9tIGEgYmFja3VwIGZpbGUuXG4gICAgICAgIHNldHVwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgY29uc3Qgc2V0dXBCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1idG4nKTtcbiAgICAgICAgaWYgKHNldHVwQnRuKSBzZXR1cEJ0bi50ZXh0Q29udGVudCA9ICdHZW5lcmF0ZSBOZXcgU2VjcmV0JztcbiAgICAgICAgLy8gSGlkZSB0aGUgUVIgc2VjdGlvbiBieSBkZWZhdWx0IGluIHRoZSBhY3RpdmUgc3RhdGUgXHUyMDE0IHNldHVwQnRuIGNsaWNrIHNob3dzIGl0XG4gICAgICAgIHFyU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkdXJhdGlvblNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGRpc2FibGVTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1kdXJhdGlvbi1zZWxlY3QnKS52YWx1ZSA9IHNlc3Npb25EdXJhdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c0RvdC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3ZhcigtLW11dGVkKSc7XG4gICAgICAgIHN0YXR1c0Jhbm5lci5zdHlsZS5ib3JkZXJDb2xvciA9ICd2YXIoLS1ib3JkZXIpJztcbiAgICAgICAgc3RhdHVzQmFubmVyLnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICBzdGF0dXNUZXh0LnRleHRDb250ZW50ID0gJ1RPVFAgaXMgbm90IGNvbmZpZ3VyZWQnO1xuICAgICAgICBzdGF0dXNUZXh0LnN0eWxlLmNvbG9yID0gJ3ZhcigtLW11dGVkKSc7XG4gICAgICAgIHNldHVwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgcXJTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGR1cmF0aW9uU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkaXNhYmxlU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIEF1dGggY2FyZCBpbiB0aGUgdG9wIHJvd1xuICAgICAgdXBkYXRlQXV0aENhcmQoZW5hYmxlZCAmJiBpc1NldFVwLCBzZXNzaW9uRHVyYXRpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvYWQgVE9UUCBzZXR0aW5nczonLCBlKTtcbiAgICB9XG4gIH1cblxuICAvLyBEdXJhdGlvbiBsYWJlbCBoZWxwZXJcbiAgY29uc3QgRFVSQVRJT05fTEFCRUxTID0ge1xuICAgICcxNW0nOiAnMTUgbWluJywgJzMwbSc6ICczMCBtaW4nLCAnMWgnOiAnMSBob3VyJywgJzJoJzogJzIgaG91cnMnLFxuICAgICc0aCc6ICc0IGhvdXJzJywgJzhoJzogJzggaG91cnMnLCAnMTJoJzogJzEyIGhvdXJzJywgJzI0aCc6ICcyNCBob3VycycsICduZXZlcic6ICdEaXNhYmxlZCdcbiAgfTtcblxuICBmdW5jdGlvbiB1cGRhdGVBdXRoQ2FyZChhY3RpdmUsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgY2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLWNhcmQnKTtcbiAgICBjb25zdCBwaWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGgtcGlsbCcpO1xuICAgIGNvbnN0IGRvdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLWRvdCcpO1xuICAgIGNvbnN0IHN0YXR1c1RleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1zdGF0dXMtdGV4dCcpO1xuICAgIGlmICghY2FyZCkgcmV0dXJuO1xuXG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgY2FyZC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHVzJywgJ29uJyk7XG4gICAgICBwaWxsLmNsYXNzTmFtZSA9ICdiYWRnZSBvbic7XG4gICAgICBwaWxsLnRleHRDb250ZW50ID0gJ1lFUyc7XG4gICAgICBkb3QuY2xhc3NOYW1lID0gJ2RvdCBvayBhdC1ibCc7XG4gICAgICBzdGF0dXNUZXh0LnRleHRDb250ZW50ID0gJ1Nlc3Npb246ICcgKyAoRFVSQVRJT05fTEFCRUxTW2R1cmF0aW9uXSB8fCBkdXJhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXR1cycsICdvZmYnKTtcbiAgICAgIHBpbGwuY2xhc3NOYW1lID0gJ2JhZGdlIG9mZic7XG4gICAgICBwaWxsLnRleHRDb250ZW50ID0gJ05PJztcbiAgICAgIGRvdC5jbGFzc05hbWUgPSAnZG90IGJhZCBhdC1ibCc7XG4gICAgICBzdGF0dXNUZXh0LnRleHRDb250ZW50ID0gJ05vdCBjb25maWd1cmVkJztcbiAgICB9XG4gIH1cblxuICAvLyBTZXR1cCBidXR0b24gKGdlbmVyYXRlIG5ldyBzZWNyZXQpXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLWJ0bicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvdG90cC9zZXR1cCcsIHsgbWV0aG9kOiAnUE9TVCcgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcXItaW1hZ2UnKS5zcmMgPSBkYXRhLnFyQ29kZTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtbWFudWFsLWtleScpLnRleHRDb250ZW50ID0gZGF0YS5tYW51YWxLZXk7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLXNlY3Rpb24nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1xci1zZWN0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLWNvZGUnKS52YWx1ZSA9ICcnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1lcnJvcicpLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLWNvZGUnKS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9ySGFuZGxlci5sb2dFcnJvcignW1RPVFBdIFNldHVwIEZhaWxlZCcsIGUsIHsgZnVuY3Rpb246ICdzZXR1cFRPVFAnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSW1wb3J0IGV4aXN0aW5nIHNlY3JldCBidXR0b25cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtaW1wb3J0LWJ0bicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZWNyZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1pbXBvcnQta2V5JykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGVycm9yRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1pbXBvcnQtZXJyb3InKTtcbiAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJyc7XG4gICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnUGFzdGUgYSBCYXNlMzIgc2VjcmV0IGtleSBmaXJzdCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS90b3RwL3NldHVwJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2VjcmV0IH0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXFyLWltYWdlJykuc3JjID0gZGF0YS5xckNvZGU7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW1hbnVhbC1rZXknKS50ZXh0Q29udGVudCA9IGRhdGEubWFudWFsS2V5O1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1zZWN0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcXItc2VjdGlvbicpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1jb2RlJykudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtc2V0dXAtZXJyb3InKS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1jb2RlJykuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSBkYXRhLmVycm9yIHx8IGRhdGEubWVzc2FnZSB8fCAnSW1wb3J0IGZhaWxlZCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICdDb25uZWN0aW9uIGVycm9yIFx1MjAxNCB0cnkgcmVmcmVzaGluZyB0aGUgcGFnZSc7XG4gICAgfVxuICB9KTtcblxuICAvLyBDb3B5IGtleSBidXR0b25cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtY29weS1rZXknKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtbWFudWFsLWtleScpLnRleHRDb250ZW50O1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleSkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1jb3B5LWtleScpO1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcwNSc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1RENDQic7IH0sIDIwMDApO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBEb3dubG9hZCBiYWNrdXAgZmlsZSBcdTIwMTQgcGxhaW4gSlNPTiBzbyBpdCByb3VuZC10cmlwcyB0aHJvdWdoIGFueSBwYXNzd29yZFxuICAvLyBtYW5hZ2VyLCBjbG91ZCBiYWNrdXAsIG9yIHByaW50ZWQgcGFwZXIuIFRoZSBzZWNyZXQgSVMgcmVjb3ZlcmFibGUgcGxhaW50ZXh0XG4gIC8vICh0aGF0J3MgdGhlIHdob2xlIHBvaW50IG9mIHRoZSBiYWNrdXApLCBzbyB3YXJuIHRoZSB1c2VyIGFuZCByZWx5IG9uXG4gIC8vIHRoZW0gdG8ga2VlcCBpdCBzYWZlLlxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1kb3dubG9hZC1iYWNrdXAnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VjcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtbWFudWFsLWtleScpLnRleHRDb250ZW50LnRyaW0oKTtcbiAgICBpZiAoIXNlY3JldCkgcmV0dXJuO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBzZXJ2aWNlOiAnRGFzaENhZGR5JyxcbiAgICAgIHR5cGU6ICd0b3RwLXNlY3JldCcsXG4gICAgICBzZWNyZXQ6IHNlY3JldCxcbiAgICAgIGlzc3VlcjogJ0Rhc2hDYWRkeScsXG4gICAgICBhbGdvcml0aG06ICdTSEExJyxcbiAgICAgIGRpZ2l0czogNixcbiAgICAgIHBlcmlvZDogMzAsXG4gICAgICBpc3N1ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIC8vIFJlY292ZXJ5IGluc3RydWN0aW9ucyBiYWtlZCBpbnRvIHRoZSBmaWxlIHNvIGEgeWVhciBmcm9tIG5vdyB0aGVcbiAgICAgIC8vIHVzZXIgKG9yIHRoZWlyIGZ1dHVyZSBzZWxmKSBrbm93cyB3aGF0IHRoaXMgZmlsZSBpcyBhbmQgaG93IHRvIHVzZSBpdC5cbiAgICAgIHJlY292ZXJ5X3VybDogYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vICAobG9naW4gc2NyZWVuIFx1MjE5MiBcIkxvc3QgYWNjZXNzP1wiKWAsXG4gICAgICBub3RlOiAnS2VlcCB0aGlzIGZpbGUgc29tZXdoZXJlIHNhZmUuIEFueW9uZSB3aXRoIHRoaXMgc2VjcmV0IGNhbiBnZW5lcmF0ZSB5b3VyIGxvZ2luIGNvZGVzLiBVc2UgaXQgT05MWSB0byByZWNvdmVyIFRPVFAgYWNjZXNzIHZpYSB0aGUgXCJMb3N0IGFjY2Vzcz9cIiBsaW5rIG9uIHRoZSBEYXNoQ2FkZHkgbG9naW4gc2NyZWVuLidcbiAgICB9O1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMildLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gdXJsO1xuICAgIGEuZG93bmxvYWQgPSBgZGFzaGNhZGR5LXRvdHAtYmFja3VwLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKX0uanNvbmA7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICBhLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtZG93bmxvYWQtYmFja3VwJyk7XG4gICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcwNSBTYXZlZCc7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IGJ0bi50ZXh0Q29udGVudCA9ICdcdTJCMDcgRG93bmxvYWQnOyB9LCAyMDAwKTtcbiAgfSk7XG5cbiAgLy8gQ29uZmlybSBzZXR1cFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1jb25maXJtLXNldHVwJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1jb2RlJykudmFsdWU7XG4gICAgY29uc3QgZXJyb3JFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLWVycm9yJyk7XG4gICAgaWYgKCEvXlxcZHs2fSQvLnRlc3QoY29kZSkpIHtcbiAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnRW50ZXIgYSA2LWRpZ2l0IGNvZGUnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS90b3RwL3ZlcmlmeS1zZXR1cCcsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGNvZGUgfSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgbG9hZFRvdHBTZXR0aW5ncygpOyAvLyBVcGRhdGVzIGJvdGggbW9kYWwgYW5kIGNhcmRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSBkYXRhLmVycm9yIHx8ICdJbnZhbGlkIGNvZGUnO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnQ29ubmVjdGlvbiBlcnJvcic7XG4gICAgfVxuICB9KTtcblxuICAvLyBBbGxvdyBFbnRlciBrZXkgb24gc2V0dXAgY29kZSBpbnB1dFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1jb2RlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtY29uZmlybS1zZXR1cCcpPy5jbGljaygpO1xuICB9KTtcblxuICAvLyBEdXJhdGlvbiBjaGFuZ2VcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtZHVyYXRpb24tc2VsZWN0Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGFzeW5jIChlKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3RvdHAvY29uZmlnJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2Vzc2lvbkR1cmF0aW9uOiBlLnRhcmdldC52YWx1ZSB9KVxuICAgICAgfSk7XG4gICAgICBsb2FkVG90cFNldHRpbmdzKCk7IC8vIFJlZnJlc2ggbW9kYWwgKyBjYXJkIChoYW5kbGVzIFwibmV2ZXJcIiBkaXNhYmxpbmcgVE9UUClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycm9ySGFuZGxlci5sb2dFcnJvcignW1RPVFBdIFVwZGF0ZSBTZXNzaW9uIER1cmF0aW9uJywgZXJyLCB7IGZ1bmN0aW9uOiAndXBkYXRlU2Vzc2lvbkR1cmF0aW9uJyB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIERpc2FibGUgVE9UUFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1kaXNhYmxlLWJ0bicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNvbmZpcm0oJ0Rpc2FibGUgVE9UUCBhdXRoZW50aWNhdGlvbj8gQWxsIHNlcnZpY2VzIHdpbGwgYmUgYWNjZXNzaWJsZSB3aXRob3V0IGEgY29kZS4nKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS90b3RwL2Rpc2FibGUnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogJ3t9J1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIGxvYWRUb3RwU2V0dGluZ3MoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckhhbmRsZXIubG9nRXJyb3IoJ1tUT1RQXSBEaXNhYmxlIEZhaWxlZCcsIGUsIHsgZnVuY3Rpb246ICdkaXNhYmxlVE9UUCcgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBPcGVuIHNldHRpbmdzIG1vZGFsIGZyb20gQXV0aCBjYXJkXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLXNldHRpbmdzLWJ0bicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBsb2FkVG90cFNldHRpbmdzKCk7XG4gICAgb3Blbk1vZGFsKCd0b3RwLXNldHRpbmdzLW1vZGFsJyk7XG4gIH0pO1xuXG4gIC8vIENsb3NlIHNldHRpbmdzIG1vZGFsXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW1vZGFsLWNsb3NlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGNsb3NlTW9kYWwoJ3RvdHAtc2V0dGluZ3MtbW9kYWwnKTtcbiAgfSk7XG5cbiAgLy8gQmFja2Ryb3AgY2xpY2sgdG8gY2xvc2VcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtc2V0dGluZ3MtbW9kYWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldC5pZCA9PT0gJ3RvdHAtc2V0dGluZ3MtbW9kYWwnKSB7XG4gICAgICBjbG9zZU1vZGFsKCd0b3RwLXNldHRpbmdzLW1vZGFsJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBVcGRhdGUgYXV0aCBjYXJkIG9uIHBhZ2UgbG9hZFxuICB3aW5kb3cuX3VwZGF0ZUF1dGhDYXJkID0gdXBkYXRlQXV0aENhcmQ7XG4gIChhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3YxL3RvdHAvY29uZmlnJyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gZGF0YS5jb25maWcuZW5hYmxlZCAmJiBkYXRhLmNvbmZpZy5pc1NldFVwO1xuICAgICAgICB1cGRhdGVBdXRoQ2FyZChhY3RpdmUsIGRhdGEuY29uZmlnLnNlc3Npb25EdXJhdGlvbik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkgeyBlcnJvckhhbmRsZXIubG9nRXJyb3IoJ1tUT1RQXSBBdXRoQ2FyZCBVcGRhdGUnLCBlLCB7IGZ1bmN0aW9uOiAnYXV0aENhcmRVcGRhdGUnIH0pOyB9XG4gIH0pKCk7XG5cbn0pKCk7XG47XG4vKipcbiAqIEFkbWluIHBhbmVsIFx1MjAxNCBEQy0wNDguXG4gKlxuICogTWluaW1hbCBhZG1pbiBVSSBmb3IgbWFuYWdpbmcgdXNlcnMgKyBpbnZpdGVzLiBSZW5kZXJlZCBhcyBhIG1vZGFsIG92ZXJsYXlcbiAqIHRyaWdnZXJlZCBieSBhbiBcIkFkbWluXCIgYnV0dG9uIGluIHRoZSB0b3AgYmFyIHRoYXQgb25seSBhcHBlYXJzIHdoZW5cbiAqIC9hcGkvdjEvYXV0aC9tZSByZXR1cm5zIGlzQWRtaW49dHJ1ZS4gVGhlIHBhbmVsIHJlbmRlcnMgdGhyZWUgc2VjdGlvbnM6XG4gKlxuICogICAxLiBVc2VycyBcdTIwMTQgbGlzdCBvZiBhdXRob3JpemVkIHVzZXJzIHdpdGggcm9sZSBiYWRnZXMsIHJvbGUtZWRpdCxcbiAqICAgICAgZGVsZXRlIGFjdGlvbnMuXG4gKiAgIDIuIEludml0ZSBhIHVzZXIgXHUyMDE0IGZvcm0gdG8gaXNzdWUgYSBzaW5nbGUtdXNlIGludml0ZSAoZW1haWwsIHJvbGUsXG4gKiAgICAgIFRUTCkuIFRoZSBhY2NlcHQtbGluayBpcyBzaG93biBwb3N0LWlzc3VlIHNvIHRoZSBhZG1pbiBjYW4gY29weSBpdC5cbiAqICAgMy4gT3V0c3RhbmRpbmcgaW52aXRlcyBcdTIwMTQgbGlzdCBvZiBpc3N1ZWQtbm90LXlldC1hY2NlcHRlZCBpbnZpdGVzXG4gKiAgICAgIHdpdGggYSByZXZva2UgYnV0dG9uLlxuICpcbiAqIFRoZSBwYW5lbCBkb2VzIE5PVCBhZGQgYSB0YWIgdG8gdGhlIGRhc2hib2FyZCBuYXYgXHUyMDE0IGl0IGxpdmVzIGFzIGEgbW9kYWxcbiAqIHRvIGtlZXAgREMtMDQ4IHN1cmdpY2FsLiBGdXR1cmUgREMtMDQ5IHdvcmsgY2FuIHByb21vdGUgaXQgdG8gYSB0YWIuXG4gKlxuICogQmVoYXZpb3VyOlxuICogICAtIE9uIGxvYWQ6IEdFVCAvbWU7IGlmICFpc0FkbWluIFx1MjE5MiBzaG93IFwiYWRtaW4gb25seVwiIHBsYWNlaG9sZGVyXG4gKiAgIC0gVGhlbiBHRVQgL2FkbWluL3VzZXJzICsgL2FkbWluL2ludml0ZXMgaW4gcGFyYWxsZWxcbiAqICAgLSBGb3JtcyBQT1NUIHRvIHRoZSBhZG1pbiBlbmRwb2ludHMsIHJlZnJlc2ggbGlzdHMgb24gc3VjY2Vzc1xuICogICAtIFwiQ29weSBsaW5rXCIgYnV0dG9uIHdyaXRlcyB0aGUgYWNjZXB0VXJsIHRvIHRoZSBjbGlwYm9hcmRcbiAqXG4gKiBXaXJlcyBpbnRvIHRoZSBnbG9iYWwgZXJyb3ItaGFuZGxlciAod2luZG93LmVycm9ySGFuZGxlcikgZm9yIGZhaWx1cmVcbiAqIHN1cmZhY2VzLiBVc2VzIHdpbmRvdy5TSVRFIGZvciBhbnkgVUkgY29uc3RhbnRzIChub25lIGN1cnJlbnRseSkuXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGNvbnN0IEFQSSA9IHtcbiAgICBtZTogJy9hcGkvdjEvYXV0aC9tZScsXG4gICAgdXNlcnM6ICcvYXBpL3YxL2F1dGgvYWRtaW4vdXNlcnMnLFxuICAgIGFsbG93bGlzdDogJy9hcGkvdjEvYXV0aC9hZG1pbi9hbGxvd2xpc3QnLFxuICAgIGludml0ZXM6ICcvYXBpL3YxL2F1dGgvYWRtaW4vaW52aXRlcycsXG4gIH07XG5cbiAgZnVuY3Rpb24gX2VsKHRhZywgYXR0cnMsIC4uLmNoaWxkcmVuKSB7XG4gICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBpZiAoYXR0cnMpIHtcbiAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhhdHRycykpIHtcbiAgICAgICAgY29uc3QgdiA9IGF0dHJzW2tdO1xuICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoayA9PT0gJ2NsYXNzJykgbm9kZS5jbGFzc05hbWUgPSB2O1xuICAgICAgICBlbHNlIGlmIChrID09PSAndGV4dCcpIG5vZGUudGV4dENvbnRlbnQgPSB2O1xuICAgICAgICBlbHNlIGlmIChrID09PSAnaHRtbCcpIG5vZGUuaW5uZXJIVE1MID0gdjtcbiAgICAgICAgZWxzZSBpZiAoay5zdGFydHNXaXRoKCdvbicpICYmIHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSBub2RlLmFkZEV2ZW50TGlzdGVuZXIoay5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLCB2KTtcbiAgICAgICAgZWxzZSBub2RlLnNldEF0dHJpYnV0ZShrLCB2KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjIG9mIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoYyA9PT0gbnVsbCB8fCBjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgaWYgKHR5cGVvZiBjID09PSAnc3RyaW5nJykgbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjKSk7XG4gICAgICBlbHNlIG5vZGUuYXBwZW5kQ2hpbGQoYyk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gX2ZldGNoSlNPTih1cmwsIG9wdHMpIHtcbiAgICBjb25zdCBjc3JmID0gKHdpbmRvdy5TSVRFICYmIHdpbmRvdy5TSVRFLmNzcmZUb2tlbikgfHwgJyc7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgb3B0cy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgb3B0cy5oZWFkZXJzIHx8IHt9LFxuICAgICAgY3NyZiA/IHsgJ1gtQ1NSRi1Ub2tlbic6IGNzcmYgfSA6IHt9XG4gICAgKTtcbiAgICBpZiAob3B0cy5ib2R5ICYmIHR5cGVvZiBvcHRzLmJvZHkgIT09ICdzdHJpbmcnKSBvcHRzLmJvZHkgPSBKU09OLnN0cmluZ2lmeShvcHRzLmJvZHkpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdHMpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICBpZiAoIXIub2spIHtcbiAgICAgIGNvbnN0IG1zZyA9IChkYXRhICYmIChkYXRhLm1lc3NhZ2UgfHwgZGF0YS5lcnJvcikpIHx8ICgnSFRUUCAnICsgci5zdGF0dXMpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgICBlcnIuc3RhdHVzID0gci5zdGF0dXM7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlbmRlckJhZGdlKHJvbGUpIHtcbiAgICBjb25zdCBjb2xvcnMgPSB7XG4gICAgICBhZG1pbjogJ2JhY2tncm91bmQ6IzdjM2FlZDtjb2xvcjojZmZmJyxcbiAgICAgIG9wZXJhdG9yOiAnYmFja2dyb3VuZDojMjU2M2ViO2NvbG9yOiNmZmYnLFxuICAgICAgdmlld2VyOiAnYmFja2dyb3VuZDojNmI3MjgwO2NvbG9yOiNmZmYnLFxuICAgIH07XG4gICAgcmV0dXJuIF9lbCgnc3BhbicsIHtcbiAgICAgIGNsYXNzOiAncm9sZS1iYWRnZScsXG4gICAgICBzdHlsZTogJ2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC43NXJlbTtmb250LXdlaWdodDo2MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOycgK1xuICAgICAgICAoY29sb3JzW3JvbGVdIHx8IGNvbG9ycy52aWV3ZXIpLFxuICAgICAgdGV4dDogcm9sZSxcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9yZW5kZXJVc2Vyc0xpc3QoY29udGFpbmVyLCB1c2Vycywgb25DaGFuZ2UpIHtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgaWYgKCF1c2VycyB8fCB1c2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChfZWwoJ3AnLCB7IHN0eWxlOiAnY29sb3I6dmFyKC0tbXV0ZWQpJywgdGV4dDogJ05vIHVzZXJzIHlldC4nIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSBfZWwoJ3RhYmxlJywge1xuICAgICAgc3R5bGU6ICd3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MC45cmVtJyxcbiAgICB9KTtcbiAgICB0YWJsZS5hcHBlbmRDaGlsZChfZWwoJ3RoZWFkJywgbnVsbCxcbiAgICAgIF9lbCgndHInLCB7IHN0eWxlOiAnYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKScgfSxcbiAgICAgICAgX2VsKCd0aCcsIHsgc3R5bGU6ICd0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzo4cHgnLCB0ZXh0OiAnRW1haWwnIH0pLFxuICAgICAgICBfZWwoJ3RoJywgeyBzdHlsZTogJ3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjhweCcsIHRleHQ6ICdSb2xlJyB9KSxcbiAgICAgICAgX2VsKCd0aCcsIHsgc3R5bGU6ICd0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzo4cHgnLCB0ZXh0OiAnQ3JlYXRlZCcgfSksXG4gICAgICAgIF9lbCgndGgnLCB7IHN0eWxlOiAndGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4JywgdGV4dDogJ0xhc3QgbG9naW4nIH0pLFxuICAgICAgICBfZWwoJ3RoJywgeyBzdHlsZTogJ3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZzo4cHgnLCB0ZXh0OiAnQWN0aW9ucycgfSksXG4gICAgICApLFxuICAgICkpO1xuICAgIGNvbnN0IHRib2R5ID0gX2VsKCd0Ym9keScpO1xuICAgIGZvciAoY29uc3QgdSBvZiB1c2Vycykge1xuICAgICAgY29uc3Qgcm93ID0gX2VsKCd0cicsIHsgc3R5bGU6ICdib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpJyB9KTtcblxuICAgICAgY29uc3QgZW1haWxDZWxsID0gX2VsKCd0ZCcsIHsgc3R5bGU6ICdwYWRkaW5nOjhweCcgfSk7XG4gICAgICBlbWFpbENlbGwuYXBwZW5kQ2hpbGQoX2VsKCdzcGFuJywgeyB0ZXh0OiB1LmVtYWlsIHx8ICcobm8gZW1haWwpJyB9KSk7XG4gICAgICBpZiAodS5kaXNwbGF5TmFtZSAmJiB1LmRpc3BsYXlOYW1lICE9PSAodS5lbWFpbCB8fCAnJykuc3BsaXQoJ0AnKVswXSkge1xuICAgICAgICBlbWFpbENlbGwuYXBwZW5kQ2hpbGQoX2VsKCdicicpKTtcbiAgICAgICAgZW1haWxDZWxsLmFwcGVuZENoaWxkKF9lbCgnc21hbGwnLCB7XG4gICAgICAgICAgc3R5bGU6ICdjb2xvcjp2YXIoLS1tdXRlZCknLCB0ZXh0OiB1LmRpc3BsYXlOYW1lLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByb3cuYXBwZW5kQ2hpbGQoZW1haWxDZWxsKTtcblxuICAgICAgY29uc3Qgcm9sZUNlbGwgPSBfZWwoJ3RkJywgeyBzdHlsZTogJ3BhZGRpbmc6OHB4JyB9KTtcbiAgICAgIHJvbGVDZWxsLmFwcGVuZENoaWxkKF9yZW5kZXJCYWRnZSh1LnJvbGUpKTtcbiAgICAgIHJvdy5hcHBlbmRDaGlsZChyb2xlQ2VsbCk7XG5cbiAgICAgIHJvdy5hcHBlbmRDaGlsZChfZWwoJ3RkJywge1xuICAgICAgICBzdHlsZTogJ3BhZGRpbmc6OHB4O2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MC44NXJlbScsXG4gICAgICAgIHRleHQ6IHUuY3JlYXRlZEF0ID8gbmV3IERhdGUodS5jcmVhdGVkQXQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogJ1x1MjAxNCcsXG4gICAgICB9KSk7XG4gICAgICByb3cuYXBwZW5kQ2hpbGQoX2VsKCd0ZCcsIHtcbiAgICAgICAgc3R5bGU6ICdwYWRkaW5nOjhweDtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjAuODVyZW0nLFxuICAgICAgICB0ZXh0OiB1Lmxhc3RMb2dpbkF0ID8gbmV3IERhdGUodS5sYXN0TG9naW5BdCkudG9Mb2NhbGVTdHJpbmcoKSA6ICdcdTIwMTQnLFxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBhY3Rpb25zQ2VsbCA9IF9lbCgndGQnLCB7IHN0eWxlOiAncGFkZGluZzo4cHg7dGV4dC1hbGlnbjpyaWdodCcgfSk7XG4gICAgICBjb25zdCByb2xlU2VsZWN0ID0gX2VsKCdzZWxlY3QnLCB7XG4gICAgICAgIHN0eWxlOiAncGFkZGluZzoycHggNnB4O21hcmdpbi1yaWdodDo2cHgnLFxuICAgICAgICBvbmNoYW5nZTogYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IF9mZXRjaEpTT04oQVBJLnVzZXJzICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KHUuaWQpLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogJ1BBVENIJywgYm9keTogeyByb2xlOiBldi50YXJnZXQudmFsdWUgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB3aW5kb3cuZXJyb3JIYW5kbGVyICYmIHdpbmRvdy5lcnJvckhhbmRsZXIuc2hvdygnUm9sZSB1cGRhdGUgZmFpbGVkOiAnICsgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIGV2LnRhcmdldC52YWx1ZSA9IHUucm9sZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgciBvZiBbJ2FkbWluJywgJ29wZXJhdG9yJywgJ3ZpZXdlciddKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IF9lbCgnb3B0aW9uJywgeyB2YWx1ZTogciwgdGV4dDogciB9KTtcbiAgICAgICAgaWYgKHIgPT09IHUucm9sZSkgb3B0LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgcm9sZVNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgICAgfVxuICAgICAgYWN0aW9uc0NlbGwuYXBwZW5kQ2hpbGQocm9sZVNlbGVjdCk7XG5cbiAgICAgIGNvbnN0IGRlbEJ0biA9IF9lbCgnYnV0dG9uJywge1xuICAgICAgICBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncGFkZGluZzoycHggOHB4JyxcbiAgICAgICAgdGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIG9uY2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoIWNvbmZpcm0oJ0RlbGV0ZSB1c2VyICcgKyAodS5lbWFpbCB8fCB1LmlkKSArICc/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS4nKSkgcmV0dXJuO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBfZmV0Y2hKU09OKEFQSS51c2VycyArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudCh1LmlkKSwgeyBtZXRob2Q6ICdERUxFVEUnIH0pO1xuICAgICAgICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB3aW5kb3cuZXJyb3JIYW5kbGVyICYmIHdpbmRvdy5lcnJvckhhbmRsZXIuc2hvdygnRGVsZXRlIGZhaWxlZDogJyArIGUubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhY3Rpb25zQ2VsbC5hcHBlbmRDaGlsZChkZWxCdG4pO1xuICAgICAgcm93LmFwcGVuZENoaWxkKGFjdGlvbnNDZWxsKTtcblxuICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQocm93KTtcbiAgICB9XG4gICAgdGFibGUuYXBwZW5kQ2hpbGQodGJvZHkpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0YWJsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBfcmVuZGVySW52aXRlRm9ybShjb250YWluZXIsIG9uSXNzdWVkKSB7XG4gICAgY29uc3QgZm9ybSA9IF9lbCgnZm9ybScsIHtcbiAgICAgIHN0eWxlOiAnZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6ZW5kJyxcbiAgICAgIG9uc3VibWl0OiBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoZXYudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICBlbWFpbDogZmQuZ2V0KCdlbWFpbCcpLFxuICAgICAgICAgIHJvbGU6IGZkLmdldCgncm9sZScpLFxuICAgICAgICAgIHR0bEhvdXJzOiBwYXJzZUludChmZC5nZXQoJ3R0bEhvdXJzJyksIDEwKSB8fCAyNCxcbiAgICAgICAgICBzZW5kRW1haWw6IGZkLmdldCgnc2VuZEVtYWlsJykgPT09ICdvbicsXG4gICAgICAgIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgciA9IGF3YWl0IF9mZXRjaEpTT04oQVBJLmludml0ZXMsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHkgfSk7XG4gICAgICAgICAgZXYudGFyZ2V0LnJlc2V0KCk7XG4gICAgICAgICAgb25Jc3N1ZWQgJiYgb25Jc3N1ZWQocik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB3aW5kb3cuZXJyb3JIYW5kbGVyICYmIHdpbmRvdy5lcnJvckhhbmRsZXIuc2hvdygnSW52aXRlIGZhaWxlZDogJyArIGUubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZm9ybS5hcHBlbmRDaGlsZChfZWwoJ2xhYmVsJywgeyBzdHlsZTogJ2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDtmb250LXNpemU6MC44NXJlbScgfSxcbiAgICAgIF9lbCgnc3BhbicsIHsgdGV4dDogJ0VtYWlsJyB9KSxcbiAgICAgIF9lbCgnaW5wdXQnLCB7IG5hbWU6ICdlbWFpbCcsIHR5cGU6ICdlbWFpbCcsIHJlcXVpcmVkOiB0cnVlLCBwbGFjZWhvbGRlcjogJ3VzZXJAZXhhbXBsZS5jb20nLCBzdHlsZTogJ3BhZGRpbmc6NnB4JyB9KSxcbiAgICApKTtcbiAgICBjb25zdCByb2xlU2VsID0gX2VsKCdzZWxlY3QnLCB7IG5hbWU6ICdyb2xlJywgc3R5bGU6ICdwYWRkaW5nOjZweCcgfSk7XG4gICAgZm9yIChjb25zdCByIG9mIFsnb3BlcmF0b3InLCAndmlld2VyJywgJ2FkbWluJ10pIHtcbiAgICAgIHJvbGVTZWwuYXBwZW5kQ2hpbGQoX2VsKCdvcHRpb24nLCB7IHZhbHVlOiByLCB0ZXh0OiByIH0pKTtcbiAgICB9XG4gICAgZm9ybS5hcHBlbmRDaGlsZChfZWwoJ2xhYmVsJywgeyBzdHlsZTogJ2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDtmb250LXNpemU6MC44NXJlbScgfSxcbiAgICAgIF9lbCgnc3BhbicsIHsgdGV4dDogJ1JvbGUnIH0pLCByb2xlU2VsLFxuICAgICkpO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQoX2VsKCdsYWJlbCcsIHsgc3R5bGU6ICdkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHg7Zm9udC1zaXplOjAuODVyZW0nIH0sXG4gICAgICBfZWwoJ3NwYW4nLCB7IHRleHQ6ICdUVEwgKGhvdXJzKScgfSksXG4gICAgICBfZWwoJ2lucHV0JywgeyBuYW1lOiAndHRsSG91cnMnLCB0eXBlOiAnbnVtYmVyJywgbWluOiAnMScsIG1heDogJzE2OCcsIHZhbHVlOiAnMjQnLCBzdHlsZTogJ3BhZGRpbmc6NnB4O3dpZHRoOjgwcHgnIH0pLFxuICAgICkpO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQoX2VsKCdsYWJlbCcsIHsgc3R5bGU6ICdkaXNwbGF5OmZsZXg7Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjAuODVyZW0nIH0sXG4gICAgICBfZWwoJ2lucHV0JywgeyBuYW1lOiAnc2VuZEVtYWlsJywgdHlwZTogJ2NoZWNrYm94JywgY2hlY2tlZDogdHJ1ZSB9KSxcbiAgICAgIF9lbCgnc3BhbicsIHsgdGV4dDogJ1NlbmQgZW1haWwnIH0pLFxuICAgICkpO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQoX2VsKCdidXR0b24nLCB7IHR5cGU6ICdzdWJtaXQnLCBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncGFkZGluZzo2cHggMTJweCcsIHRleHQ6ICdJc3N1ZSBpbnZpdGUnIH0pKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIH1cblxuICBmdW5jdGlvbiBfcmVuZGVySW52aXRlc0xpc3QoY29udGFpbmVyLCBpbnZpdGVzLCBvbkNoYW5nZSkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICBpZiAoIWludml0ZXMgfHwgaW52aXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChfZWwoJ3AnLCB7IHN0eWxlOiAnY29sb3I6dmFyKC0tbXV0ZWQpJywgdGV4dDogJ05vIG91dHN0YW5kaW5nIGludml0ZXMuJyB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlID0gX2VsKCd0YWJsZScsIHtcbiAgICAgIHN0eWxlOiAnd2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjAuOXJlbScsXG4gICAgfSk7XG4gICAgdGFibGUuYXBwZW5kQ2hpbGQoX2VsKCd0aGVhZCcsIG51bGwsXG4gICAgICBfZWwoJ3RyJywgeyBzdHlsZTogJ2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlciknIH0sXG4gICAgICAgIF9lbCgndGgnLCB7IHN0eWxlOiAndGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4JywgdGV4dDogJ0VtYWlsJyB9KSxcbiAgICAgICAgX2VsKCd0aCcsIHsgc3R5bGU6ICd0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzo4cHgnLCB0ZXh0OiAnUm9sZScgfSksXG4gICAgICAgIF9lbCgndGgnLCB7IHN0eWxlOiAndGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4JywgdGV4dDogJ0ludml0ZWQgYnknIH0pLFxuICAgICAgICBfZWwoJ3RoJywgeyBzdHlsZTogJ3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjhweCcsIHRleHQ6ICdFeHBpcmVzJyB9KSxcbiAgICAgICAgX2VsKCd0aCcsIHsgc3R5bGU6ICd0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmc6OHB4JywgdGV4dDogJ0FjdGlvbnMnIH0pLFxuICAgICAgKSxcbiAgICApKTtcbiAgICBjb25zdCB0Ym9keSA9IF9lbCgndGJvZHknKTtcbiAgICBmb3IgKGNvbnN0IGludiBvZiBpbnZpdGVzKSB7XG4gICAgICBjb25zdCByb3cgPSBfZWwoJ3RyJywgeyBzdHlsZTogJ2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlciknIH0pO1xuICAgICAgcm93LmFwcGVuZENoaWxkKF9lbCgndGQnLCB7IHN0eWxlOiAncGFkZGluZzo4cHgnLCB0ZXh0OiBpbnYuZW1haWwgfSkpO1xuICAgICAgcm93LmFwcGVuZENoaWxkKF9lbCgndGQnLCB7IHN0eWxlOiAncGFkZGluZzo4cHgnIH0sIF9yZW5kZXJCYWRnZShpbnYucm9sZSkpKTtcbiAgICAgIHJvdy5hcHBlbmRDaGlsZChfZWwoJ3RkJywgeyBzdHlsZTogJ3BhZGRpbmc6OHB4O2NvbG9yOnZhcigtLW11dGVkKScsIHRleHQ6IGludi5pbnZpdGVkQnkgfHwgJ1x1MjAxNCcgfSkpO1xuICAgICAgcm93LmFwcGVuZENoaWxkKF9lbCgndGQnLCB7XG4gICAgICAgIHN0eWxlOiAncGFkZGluZzo4cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZTowLjg1cmVtJyxcbiAgICAgICAgdGV4dDogaW52LmV4cGlyZXNBdCA/IG5ldyBEYXRlKGludi5leHBpcmVzQXQpLnRvTG9jYWxlU3RyaW5nKCkgOiAnXHUyMDE0JyxcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGFjdGlvbnNDZWxsID0gX2VsKCd0ZCcsIHsgc3R5bGU6ICdwYWRkaW5nOjhweDt0ZXh0LWFsaWduOnJpZ2h0JyB9KTtcbiAgICAgIGFjdGlvbnNDZWxsLmFwcGVuZENoaWxkKF9lbCgnYnV0dG9uJywge1xuICAgICAgICBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncGFkZGluZzoycHggOHB4JyxcbiAgICAgICAgdGV4dDogJ1Jldm9rZScsXG4gICAgICAgIG9uY2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoIWNvbmZpcm0oJ1Jldm9rZSBpbnZpdGUgZm9yICcgKyBpbnYuZW1haWwgKyAnPycpKSByZXR1cm47XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IF9mZXRjaEpTT04oQVBJLmludml0ZXMgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoaW52LmlkKSwgeyBtZXRob2Q6ICdERUxFVEUnIH0pO1xuICAgICAgICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB3aW5kb3cuZXJyb3JIYW5kbGVyICYmIHdpbmRvdy5lcnJvckhhbmRsZXIuc2hvdygnUmV2b2tlIGZhaWxlZDogJyArIGUubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSkpO1xuICAgICAgcm93LmFwcGVuZENoaWxkKGFjdGlvbnNDZWxsKTtcbiAgICAgIHRib2R5LmFwcGVuZENoaWxkKHJvdyk7XG4gICAgfVxuICAgIHRhYmxlLmFwcGVuZENoaWxkKHRib2R5KTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGFibGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlbmRlcklzc3VlZEludml0ZUJhbm5lcihpbnZpdGUsIHBhcmVudCkge1xuICAgIGNvbnN0IGJhbm5lciA9IF9lbCgnZGl2Jywge1xuICAgICAgc3R5bGU6ICdtYXJnaW4tdG9wOjEycHg7cGFkZGluZzoxMnB4O2JvcmRlcjoxcHggc29saWQgIzE2YTM0YTtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiMwNTJlMWE7Y29sb3I6I2JiZjdkMDtmb250LXNpemU6MC44NXJlbScsXG4gICAgfSk7XG4gICAgYmFubmVyLmFwcGVuZENoaWxkKF9lbCgnc3Ryb25nJywgeyB0ZXh0OiAnSW52aXRlIGlzc3VlZCBcdTIwMTQgY29weSB0aGUgbGluayBiZWxvdy4gJyArXG4gICAgICAnSXQgd2lsbCBub3QgYmUgc2hvd24gYWdhaW4uJyB9KSk7XG4gICAgYmFubmVyLmFwcGVuZENoaWxkKF9lbCgnYnInKSk7XG4gICAgYmFubmVyLmFwcGVuZENoaWxkKF9lbCgnY29kZScsIHtcbiAgICAgIHN0eWxlOiAnZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjhweDtwYWRkaW5nOjhweDtiYWNrZ3JvdW5kOiMwMDA7Ym9yZGVyLXJhZGl1czo0cHg7d29yZC1icmVhazpicmVhay1hbGw7Y29sb3I6I2QxZmFlNScsXG4gICAgICB0ZXh0OiBpbnZpdGUuYWNjZXB0VXJsLFxuICAgIH0pKTtcbiAgICBjb25zdCBjb3B5QnRuID0gX2VsKCdidXR0b24nLCB7XG4gICAgICBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAnbWFyZ2luLXRvcDo4cHg7cGFkZGluZzo0cHggMTBweCcsXG4gICAgICB0ZXh0OiAnQ29weSBsaW5rJyxcbiAgICAgIG9uY2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChpbnZpdGUuYWNjZXB0VXJsKTtcbiAgICAgICAgICBjb3B5QnRuLnRleHRDb250ZW50ID0gJ0NvcGllZCEnO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBjb3B5QnRuLnRleHRDb250ZW50ID0gJ0NvcHkgbGluayc7IH0sIDIwMDApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgd2luZG93LmVycm9ySGFuZGxlciAmJiB3aW5kb3cuZXJyb3JIYW5kbGVyLnNob3coJ0NsaXBib2FyZCBibG9ja2VkOiBzZWxlY3QgdGhlIGxpbmsgbWFudWFsbHkuJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgYmFubmVyLmFwcGVuZENoaWxkKGNvcHlCdG4pO1xuICAgIGlmIChpbnZpdGUuZGVsaXZlcmVkVmlhID09PSAnZGV2LWNvbnNvbGUnKSB7XG4gICAgICBiYW5uZXIuYXBwZW5kQ2hpbGQoX2VsKCdwJywge1xuICAgICAgICBzdHlsZTogJ21hcmdpbi10b3A6OHB4O2NvbG9yOiNmYmJmMjQ7Zm9udC1zaXplOjAuOHJlbScsXG4gICAgICAgIHRleHQ6ICdTTVRQIG5vdCBjb25maWd1cmVkIFx1MjAxNCB0aGUgaW52aXRlIHdhcyBsb2dnZWQgdG8gdGhlIHNlcnZlciBjb25zb2xlIChzZWFyY2ggZm9yIFtEQy0wNDgtREVWLUlOVklURS1MSU5LXSkuJyxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKGludml0ZS5kZWxpdmVyZWRWaWEgPT09ICdlbWFpbCcpIHtcbiAgICAgIGJhbm5lci5hcHBlbmRDaGlsZChfZWwoJ3AnLCB7XG4gICAgICAgIHN0eWxlOiAnbWFyZ2luLXRvcDo4cHg7Y29sb3I6Izg2ZWZhYztmb250LXNpemU6MC44cmVtJyxcbiAgICAgICAgdGV4dDogJ0VtYWlsIHNlbnQgdG8gJyArIGludml0ZS5lbWFpbCArICcuJyxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcGFyZW50LmFwcGVuZENoaWxkKGJhbm5lcik7XG4gIH1cblxuICAvKipcbiAgICogTW91bnQgdGhlIGFkbWluIHBhbmVsLiBDYWxsZWQgYnkgdGhlIG9wZW4gdHJpZ2dlcjsgc2FmZSB0byBjYWxsIG11bHRpcGxlXG4gICAqIHRpbWVzIChyZS1yZW5kZXJzIGludG8gdGhlIHNhbWUgY29udGFpbmVyKS5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG1vdW50KGNvbnRhaW5lcikge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoX2VsKCdoMicsIHsgc3R5bGU6ICdtYXJnaW46MCAwIDE2cHgnLCB0ZXh0OiAnQWRtaW4gXHUwMEI3IFVzZXJzICYgSW52aXRlcycgfSkpO1xuXG4gICAgY29uc3QgbWVEYXRhID0gYXdhaXQgX2ZldGNoSlNPTihBUEkubWUpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIGlmICghbWVEYXRhIHx8ICFtZURhdGEudXNlciB8fCBtZURhdGEudXNlci5yb2xlICE9PSAnYWRtaW4nKSB7XG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoX2VsKCdwJywge1xuICAgICAgICBzdHlsZTogJ2NvbG9yOnZhcigtLW11dGVkKScsXG4gICAgICAgIHRleHQ6ICdBZG1pbiByb2xlIHJlcXVpcmVkIHRvIHZpZXcgdGhpcyBwYW5lbC4gSWYgbXVsdGktdXNlciBtb2RlIGlzIGVuYWJsZWQgYW5kIHlvdSBzaG91bGQgaGF2ZSBhY2Nlc3MsIGNoZWNrIC9hcGkvdjEvYXV0aC9tZS4nLFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlZnJlc2ggYnV0dG9uXG4gICAgY29uc3QgcmVmcmVzaEJ0biA9IF9lbCgnYnV0dG9uJywge1xuICAgICAgY2xhc3M6ICdidG4tc20nLCBzdHlsZTogJ2Zsb2F0OnJpZ2h0O3BhZGRpbmc6NHB4IDEwcHgnLFxuICAgICAgdGV4dDogJ1JlZnJlc2gnLFxuICAgICAgb25jbGljazogKCkgPT4gbW91bnQoY29udGFpbmVyKSxcbiAgICB9KTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQocmVmcmVzaEJ0bik7XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgVXNlcnMgc2VjdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCB1c2Vyc0hlYWRlciA9IF9lbCgnaDMnLCB7IHN0eWxlOiAnbWFyZ2luOjI0cHggMCA4cHg7Y2xlYXI6Ym90aCcsIHRleHQ6ICdVc2VycycgfSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHVzZXJzSGVhZGVyKTtcblxuICAgIGNvbnN0IHVzZXJzTGlzdCA9IF9lbCgnZGl2JywgeyBpZDogJ2FkbWluLXVzZXJzLWxpc3QnIH0pO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh1c2Vyc0xpc3QpO1xuXG4gICAgY29uc3QgdXNlcnNEYXRhID0gYXdhaXQgX2ZldGNoSlNPTihBUEkudXNlcnMpLmNhdGNoKCgpID0+ICh7IHVzZXJzOiBbXSB9KSk7XG4gICAgX3JlbmRlclVzZXJzTGlzdCh1c2Vyc0xpc3QsIHVzZXJzRGF0YS51c2VycywgKCkgPT4gbW91bnQoY29udGFpbmVyKSk7XG5cbiAgICAvLyBBZGQgdXNlciBmb3JtIChwcmUtYXV0aG9yaXplIGFuIGVtYWlsIHdpdGhvdXQgaXNzdWluZyBhbiBpbnZpdGUpLlxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChfZWwoJ2g0JywgeyBzdHlsZTogJ21hcmdpbjoyNHB4IDAgOHB4O2ZvbnQtc2l6ZTowLjk1cmVtJywgdGV4dDogJ1ByZS1hdXRob3JpemUgZW1haWwnIH0pKTtcbiAgICBjb25zdCBhZGRVc2VyRm9ybSA9IF9lbCgnZm9ybScsIHtcbiAgICAgIHN0eWxlOiAnZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kJyxcbiAgICAgIG9uc3VibWl0OiBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZW1haWwgPSBldi50YXJnZXQuZW1haWwudmFsdWUudHJpbSgpO1xuICAgICAgICBpZiAoIWVtYWlsKSByZXR1cm47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgX2ZldGNoSlNPTihBUEkudXNlcnMsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IHsgZW1haWwgfSB9KTtcbiAgICAgICAgICBldi50YXJnZXQucmVzZXQoKTtcbiAgICAgICAgICBtb3VudChjb250YWluZXIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgd2luZG93LmVycm9ySGFuZGxlciAmJiB3aW5kb3cuZXJyb3JIYW5kbGVyLnNob3coJ0FkZCBmYWlsZWQ6ICcgKyBlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGFkZFVzZXJGb3JtLmFwcGVuZENoaWxkKF9lbCgnaW5wdXQnLCB7IG5hbWU6ICdlbWFpbCcsIHR5cGU6ICdlbWFpbCcsIHJlcXVpcmVkOiB0cnVlLCBwbGFjZWhvbGRlcjogJ3VzZXJAZXhhbXBsZS5jb20nLCBzdHlsZTogJ3BhZGRpbmc6NnB4JyB9KSk7XG4gICAgYWRkVXNlckZvcm0uYXBwZW5kQ2hpbGQoX2VsKCdidXR0b24nLCB7IHR5cGU6ICdzdWJtaXQnLCBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncGFkZGluZzo2cHggMTJweCcsIHRleHQ6ICdBZGQgdG8gYWxsb3dsaXN0JyB9KSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGFkZFVzZXJGb3JtKTtcblxuICAgIC8vIFx1MjUwMFx1MjUwMCBJbnZpdGVzIHNlY3Rpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKF9lbCgnaDMnLCB7IHN0eWxlOiAnbWFyZ2luOjI0cHggMCA4cHgnLCB0ZXh0OiAnSXNzdWUgaW52aXRlJyB9KSk7XG4gICAgY29uc3QgaW52aXRlRm9ybUNvbnRhaW5lciA9IF9lbCgnZGl2Jyk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGludml0ZUZvcm1Db250YWluZXIpO1xuXG4gICAgY29uc3QgaW52aXRlc0xpc3QgPSBfZWwoJ2RpdicsIHsgaWQ6ICdhZG1pbi1pbnZpdGVzLWxpc3QnLCBzdHlsZTogJ21hcmdpbi10b3A6MTZweCcgfSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGludml0ZXNMaXN0KTtcblxuICAgIGNvbnN0IGludml0ZXNEYXRhID0gYXdhaXQgX2ZldGNoSlNPTihBUEkuaW52aXRlcykuY2F0Y2goKCkgPT4gKHsgaW52aXRlczogW10gfSkpO1xuICAgIF9yZW5kZXJJbnZpdGVzTGlzdChpbnZpdGVzTGlzdCwgaW52aXRlc0RhdGEuaW52aXRlcywgKCkgPT4gbW91bnQoY29udGFpbmVyKSk7XG5cbiAgICBfcmVuZGVySW52aXRlRm9ybShpbnZpdGVGb3JtQ29udGFpbmVyLCAoaXNzdWVkKSA9PiB7XG4gICAgICBfcmVuZGVySXNzdWVkSW52aXRlQmFubmVyKGlzc3VlZCwgaW52aXRlRm9ybUNvbnRhaW5lcik7XG4gICAgICBtb3VudChjb250YWluZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFB1YmxpYyBBUEkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGFkbWluIHBhbmVsIGFzIGEgbW9kYWwgb3ZlcmxheS4gQ2xvc2VzIG9uIGJhY2tkcm9wIGNsaWNrIG9yXG4gICAqIHRoZSBjbG9zZSBidXR0b24uIFJlbmRlcnMgaW50byBkb2N1bWVudC5ib2R5IHNvIGl0IGZsb2F0cyBhYm92ZSB0aGVcbiAgICogZGFzaGJvYXJkIGNocm9tZS5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgLy8gSWYgYWxyZWFkeSBvcGVuLCBqdXN0IGZvY3VzLlxuICAgIGNvbnN0IGV4aXN0aW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkbWluLXBhbmVsLXJvb3QnKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybjtcblxuICAgIGNvbnN0IGJhY2tkcm9wID0gX2VsKCdkaXYnLCB7XG4gICAgICBpZDogJ2FkbWluLXBhbmVsLXJvb3QnLFxuICAgICAgc3R5bGU6ICdwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7JyxcbiAgICAgIG9uY2xpY2s6IChldikgPT4ge1xuICAgICAgICBpZiAoZXYudGFyZ2V0ID09PSBiYWNrZHJvcCkgY2xvc2UoKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjYXJkID0gX2VsKCdkaXYnLCB7XG4gICAgICBzdHlsZTogJ2JhY2tncm91bmQ6dmFyKC0tY2FyZC1iYXNlLCMxZjI5MzcpO2NvbG9yOnZhcigtLXRleHQsI2YzZjRmNik7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoyNHB4O21heC13aWR0aDo5MDBweDt3aWR0aDo5MCU7bWF4LWhlaWdodDo4NXZoO292ZXJmbG93OmF1dG87cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDEwcHggMzBweCByZ2JhKDAsMCwwLDAuMyknLFxuICAgIH0pO1xuICAgIGNhcmQuYXBwZW5kQ2hpbGQoX2VsKCdidXR0b24nLCB7XG4gICAgICBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncG9zaXRpb246YWJzb2x1dGU7dG9wOjEycHg7cmlnaHQ6MTJweDtwYWRkaW5nOjRweCAxMHB4JyxcbiAgICAgIHRleHQ6ICdDbG9zZScsIG9uY2xpY2s6IGNsb3NlLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGJvZHkgPSBfZWwoJ2RpdicsIHsgaWQ6ICdhZG1pbi1wYW5lbC1ib2R5JyB9KTtcbiAgICBjYXJkLmFwcGVuZENoaWxkKGJvZHkpO1xuICAgIGJhY2tkcm9wLmFwcGVuZENoaWxkKGNhcmQpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmFja2Ryb3ApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1vdW50KGJvZHkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGJvZHkuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiY29sb3I6I2Y4NzE3MVwiPkZhaWxlZCB0byBsb2FkIGFkbWluIHBhbmVsOiAnICsgKGUubWVzc2FnZSB8fCBlKSArICc8L3A+JztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZG1pbi1wYW5lbC1yb290Jyk7XG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5yZW1vdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3QgYW4gXCJBZG1pblwiIGJ1dHRvbiBpbnRvIHRoZSB0b3AgYmFyLiBPbmx5IHJlbmRlcnMgd2hlbiB0aGVcbiAgICogY3VycmVudCAvbWUgcmVzcG9uc2Ugc2F5cyBpc0FkbWluPXRydWUuIFJlLWNoZWNrcyBwZXJpb2RpY2FsbHlcbiAgICogKGV2ZXJ5IDYwcykgc28gYSBwZXJtaXNzaW9uIGRvd25ncmFkZSB0YWtlcyBlZmZlY3Qgd2l0aG91dCBhIHJlbG9hZC5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaFRyaWdnZXIoYmFyQ29udGFpbmVyKSB7XG4gICAgYXN5bmMgZnVuY3Rpb24gX21heWJlU2hvdygpIHtcbiAgICAgIGNvbnN0IG1lID0gYXdhaXQgX2ZldGNoSlNPTihBUEkubWUpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRtaW4tdHJpZ2dlci1idG4nKTtcbiAgICAgIGlmIChtZSAmJiBtZS51c2VyICYmIG1lLnVzZXIucm9sZSA9PT0gJ2FkbWluJykge1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgYnRuID0gX2VsKCdidXR0b24nLCB7XG4gICAgICAgICAgaWQ6ICdhZG1pbi10cmlnZ2VyLWJ0bicsXG4gICAgICAgICAgY2xhc3M6ICdidG4tc20nLFxuICAgICAgICAgIHN0eWxlOiAnbWFyZ2luLWxlZnQ6OHB4O3BhZGRpbmc6NnB4IDEycHgnLFxuICAgICAgICAgIHRleHQ6ICdBZG1pbicsXG4gICAgICAgICAgb25jbGljazogb3BlbixcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChiYXJDb250YWluZXIpIGJhckNvbnRhaW5lci5hcHBlbmRDaGlsZChidG4pO1xuICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJ0bik7XG4gICAgICB9IGVsc2UgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIGV4aXN0aW5nLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBfbWF5YmVTaG93KCk7XG4gICAgc2V0SW50ZXJ2YWwoX21heWJlU2hvdywgNjBfMDAwKTtcbiAgfVxuXG4gIHdpbmRvdy5BZG1pblBhbmVsID0geyBvcGVuLCBjbG9zZSwgYXR0YWNoVHJpZ2dlciB9O1xufSkoKTs7XG4vLyA9PT09PT09PT09IENSRURFTlRJQUwgTUFOQUdFTUVOVCA9PT09PT09PT09XG4oZnVuY3Rpb24gKCkge1xuXG4gIC8vIEluamVjdCBza2VsZXRvbiBtb2RhbCBcdTIwMTQgY3JlZGVudGlhbCBzZWN0aW9ucyBhcmUgYnVpbHQgZHluYW1pY2FsbHkgd2hlbiBvcGVuZWRcbiAgaW5qZWN0TW9kYWwoJ3Rva2VuLW1hbmFnZW1lbnQtbW9kYWwnLCBgXG4gIDxkaXYgaWQ9XCJ0b2tlbi1tYW5hZ2VtZW50LW1vZGFsXCIgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtY29udGVudFwiIHN0eWxlPVwibWluLXdpZHRoOiA1MDBweDsgbWF4LXdpZHRoOiA2MDBweDtcIj5cbiAgICAgIDxoMz5cXHV7MUY1MTF9IEROUyBDcmVkZW50aWFsczwvaDM+XG5cbiAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjg1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW46IDAgMCAxNnB4O1wiPlxuICAgICAgICBFbnRlciBUZWNobml0aXVtIEROUyBsb2dpbiBjcmVkZW50aWFscy4gUmVhZC1vbmx5IGFjY291bnRzIGFyZSB1c2VkIGZvciBsb2dzOyBhZG1pbiBhY2NvdW50cyBmb3IgcmVzdGFydHMsIHJlY29yZHMsIGFuZCB1cGRhdGVzLlxuICAgICAgPC9wPlxuXG4gICAgICA8ZGl2IGlkPVwiZG5zLWNyZWQtc2VjdGlvbnNcIj48L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtYnV0dG9ucyBtb2RhbC1mb290ZXItYmFyXCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b2tlbi1jbGVhci1hbGxcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogYXV0bzsgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWJhZC1mZykgMTUlLCB0cmFuc3BhcmVudCk7IGJvcmRlci1jb2xvcjogdmFyKC0tYmFkLWZnKTsgY29sb3I6IHZhcigtLWJhZC1mZyk7XCI+Q2xlYXIgQWxsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b2tlbi1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInRva2VuLXNhdmVcIiBjbGFzcz1cImJ0bi1hY2NlbnRcIj5TYXZlPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIGApO1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBIZWxwZXJzIFx1MjUwMFx1MjUwMFxuXG4gIGZ1bmN0aW9uIGdldERuc0lkcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoU0lURS5kbnNTZXJ2ZXJzIHx8IHt9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERuc0Rpc3BsYXlOYW1lKGRuc0lkKSB7XG4gICAgY29uc3Qgc2VydmVyID0gKFNJVEUuZG5zU2VydmVycyB8fCB7fSlbZG5zSWRdO1xuICAgIHJldHVybiBzZXJ2ZXI/Lm5hbWUgfHwgZG5zSWQudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIC8qKiBCdWlsZCBwZXItc2VydmVyIGNyZWRlbnRpYWwgZm9ybSBzZWN0aW9ucyBmcm9tIFNJVEUuZG5zU2VydmVycyAqL1xuICBmdW5jdGlvbiBidWlsZENyZWRlbnRpYWxTZWN0aW9ucygpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWNyZWQtc2VjdGlvbnMnKTtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcblxuICAgIGNvbnN0IGRuc0lkcyA9IGdldERuc0lkcygpO1xuICAgIGlmIChkbnNJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAyMHB4O1wiPk5vIEROUyBzZXJ2ZXJzIGNvbmZpZ3VyZWQuPC9wPic7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpZCBvZiBkbnNJZHMpIHtcbiAgICAgIGNvbnRhaW5lci5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbi1zZWN0aW9uXCI+XG4gICAgICAgIDxoNCBjbGFzcz1cInRva2VuLXNlY3Rpb24tdGl0bGVcIj4ke2dldERuc0Rpc3BsYXlOYW1lKGlkKX08L2g0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9rZW4tZ3JpZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbi1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cIiR7aWR9LXJlYWRvbmx5LXVzZXJuYW1lXCI+XFx1ezFGNEQ2fSBSZWFkLU9ubHkgKExvZ3MpOjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cIiR7aWR9LXJlYWRvbmx5LXVzZXJuYW1lXCIgcGxhY2Vob2xkZXI9XCJVc2VybmFtZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNHB4O1wiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9rZW4taW5wdXQtcm93XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cIiR7aWR9LXJlYWRvbmx5LXRva2VuXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidG9rZW4tdG9nZ2xlXCIgZGF0YS10YXJnZXQ9XCIke2lkfS1yZWFkb25seS10b2tlblwiPlxcdXsxRjQ0MX08L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbi1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cIiR7aWR9LWFkbWluLXVzZXJuYW1lXCI+XFx1ezFGNTI3fSBBZG1pbjo8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCIke2lkfS1hZG1pbi11c2VybmFtZVwiIHBsYWNlaG9sZGVyPVwiVXNlcm5hbWVcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDRweDtcIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRva2VuLWlucHV0LXJvd1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgaWQ9XCIke2lkfS1hZG1pbi10b2tlblwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRva2VuLXRvZ2dsZVwiIGRhdGEtdGFyZ2V0PVwiJHtpZH0tYWRtaW4tdG9rZW5cIj5cXHV7MUY0NDF9PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbi1zdGF0dXNcIiBpZD1cIiR7aWR9LXRva2VuLXN0YXR1c1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBgKTtcbiAgICB9XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDAgQ3JlZGVudGlhbCBlbmNyeXB0aW9uIFx1MjUwMFx1MjUwMFxuXG4gIGZ1bmN0aW9uIGdldEVuY3J5cHRpb25LZXkoKSB7XG4gICAgbGV0IGtleSA9IHNhZmVTZXNzaW9uR2V0KCdkYXNoY2FkZHktZW5jcnlwdGlvbi1rZXknKTtcbiAgICBpZiAoa2V5KSByZXR1cm4ga2V5O1xuXG4gICAgY29uc3Qgb2xkS2V5ID0gc2FmZUdldCgnZGFzaGNhZGR5LWVuY3J5cHRpb24ta2V5Jyk7XG4gICAgaWYgKG9sZEtleSkge1xuICAgICAgc2FmZVNlc3Npb25TZXQoJ2Rhc2hjYWRkeS1lbmNyeXB0aW9uLWtleScsIG9sZEtleSk7XG4gICAgICBzYWZlUmVtb3ZlKCdkYXNoY2FkZHktZW5jcnlwdGlvbi1rZXknKTtcbiAgICAgIHJldHVybiBvbGRLZXk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAga2V5ID0gQXJyYXkuZnJvbShhcnJheSwgYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgICBzYWZlU2Vzc2lvblNldCgnZGFzaGNhZGR5LWVuY3J5cHRpb24ta2V5Jywga2V5KTtcbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIGNvbnN0IEVOQ1JZUFRJT05fS0VZID0gZ2V0RW5jcnlwdGlvbktleSgpO1xuXG4gIGZ1bmN0aW9uIGNyZWRlbnRpYWxFbmNyeXB0KHRleHQsIGtleSkge1xuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGl2ID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSg4KSk7XG4gICAgY29uc3QgaXZIZXggPSBBcnJheS5mcm9tKGl2LCBiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIGNvbnN0IGtleUJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGtleSArIGl2SGV4KTtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChpKVxuICAgICAgICBeIGtleUJ5dGVzW2kgJSBrZXlCeXRlcy5sZW5ndGhdXG4gICAgICAgIF4gaXZbaSAlIGl2Lmxlbmd0aF1cbiAgICAgICAgXiAoKGkgKiAzMSArIDE3KSAmIDB4RkYpO1xuICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gaXZIZXggKyAnOicgKyBidG9hKHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVkZW50aWFsRGVjcnlwdChlbmNyeXB0ZWRUZXh0LCBrZXkpIHtcbiAgICBpZiAoIWVuY3J5cHRlZFRleHQpIHJldHVybiAnJztcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29sb25JZHggPSBlbmNyeXB0ZWRUZXh0LmluZGV4T2YoJzonKTtcbiAgICAgIGlmIChjb2xvbklkeCA9PT0gMTYpIHtcbiAgICAgICAgY29uc3QgaXZIZXggPSBlbmNyeXB0ZWRUZXh0LnN1YnN0cmluZygwLCAxNik7XG4gICAgICAgIGNvbnN0IGl2ID0gbmV3IFVpbnQ4QXJyYXkoaXZIZXgubWF0Y2goLy57Mn0vZykubWFwKGggPT4gcGFyc2VJbnQoaCwgMTYpKSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBhdG9iKGVuY3J5cHRlZFRleHQuc3Vic3RyaW5nKDE3KSk7XG4gICAgICAgIGNvbnN0IGtleUJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGtleSArIGl2SGV4KTtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGFyQ29kZSA9IGRlY29kZWQuY2hhckNvZGVBdChpKVxuICAgICAgICAgICAgXiBrZXlCeXRlc1tpICUga2V5Qnl0ZXMubGVuZ3RoXVxuICAgICAgICAgICAgXiBpdltpICUgaXYubGVuZ3RoXVxuICAgICAgICAgICAgXiAoKGkgKiAzMSArIDE3KSAmIDB4RkYpO1xuICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgY29uc3QgZGVjb2RlZCA9IGF0b2IoZW5jcnlwdGVkVGV4dCk7XG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBkZWNvZGVkLmNoYXJDb2RlQXQoaSkgXiBrZXkuY2hhckNvZGVBdChpICUga2V5Lmxlbmd0aCk7XG4gICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMCBDcmVkZW50aWFsIHN0b3JhZ2UgXHUyNTAwXHUyNTAwXG5cbiAgZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbChkbnNJZCwgdG9rZW5UeXBlLCBjcmVkVHlwZSkge1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IHNhZmVHZXQoYCR7ZG5zSWR9LSR7dG9rZW5UeXBlfS0ke2NyZWRUeXBlfS1lbmNgKTtcbiAgICByZXR1cm4gY3JlZGVudGlhbERlY3J5cHQoZW5jcnlwdGVkLCBFTkNSWVBUSU9OX0tFWSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRDcmVkZW50aWFsKGRuc0lkLCB0b2tlblR5cGUsIGNyZWRUeXBlLCB2YWx1ZSkge1xuICAgIGNvbnN0IGtleSA9IGAke2Ruc0lkfS0ke3Rva2VuVHlwZX0tJHtjcmVkVHlwZX0tZW5jYDtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHNhZmVTZXQoa2V5LCBjcmVkZW50aWFsRW5jcnlwdCh2YWx1ZSwgRU5DUllQVElPTl9LRVkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2FmZVJlbW92ZShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRva2VuKGRuc0lkLCB0b2tlblR5cGUpIHtcbiAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbChkbnNJZCwgdG9rZW5UeXBlLCAndG9rZW4nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFVzZXJuYW1lKGRuc0lkLCB0b2tlblR5cGUpIHtcbiAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbChkbnNJZCwgdG9rZW5UeXBlLCAndXNlcm5hbWUnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRva2VuKGRuc0lkLCB0b2tlblR5cGUsIHRva2VuKSB7XG4gICAgc2V0Q3JlZGVudGlhbChkbnNJZCwgdG9rZW5UeXBlLCAndG9rZW4nLCB0b2tlbik7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRVc2VybmFtZShkbnNJZCwgdG9rZW5UeXBlLCB1c2VybmFtZSkge1xuICAgIHNldENyZWRlbnRpYWwoZG5zSWQsIHRva2VuVHlwZSwgJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QWxsQ3JlZGVudGlhbHMoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBkbnNJZCBvZiBnZXREbnNJZHMoKSkge1xuICAgICAgcmVzdWx0W2Ruc0lkXSA9IHtcbiAgICAgICAgcmVhZG9ubHk6IHsgdXNlcm5hbWU6IGdldFVzZXJuYW1lKGRuc0lkLCAncmVhZG9ubHknKSwgdG9rZW46IGdldFRva2VuKGRuc0lkLCAncmVhZG9ubHknKSB9LFxuICAgICAgICBhZG1pbjogeyB1c2VybmFtZTogZ2V0VXNlcm5hbWUoZG5zSWQsICdhZG1pbicpLCB0b2tlbjogZ2V0VG9rZW4oZG5zSWQsICdhZG1pbicpIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckFsbENyZWRlbnRpYWxzKCkge1xuICAgIGdldERuc0lkcygpLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgWydyZWFkb25seScsICdhZG1pbiddLmZvckVhY2godG9rZW5UeXBlID0+IHtcbiAgICAgICAgWyd0b2tlbicsICd1c2VybmFtZSddLmZvckVhY2goY3JlZFR5cGUgPT4ge1xuICAgICAgICAgIHNhZmVSZW1vdmUoYCR7ZG5zSWR9LSR7dG9rZW5UeXBlfS0ke2NyZWRUeXBlfS1lbmNgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHNhZmVSZW1vdmUoYCR7ZG5zSWR9LXRva2VuLWVuY2ApO1xuICAgICAgc2FmZVJlbW92ZShgJHtkbnNJZH0tdXNlcm5hbWUtZW5jYCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTdG9yZWRDcmVkZW50aWFscyhkbnNJZCkge1xuICAgIGNvbnN0IHJlYWRvbmx5VG9rZW4gPSBnZXRUb2tlbihkbnNJZCwgJ3JlYWRvbmx5Jyk7XG4gICAgY29uc3QgcmVhZG9ubHlVc2VybmFtZSA9IGdldFVzZXJuYW1lKGRuc0lkLCAncmVhZG9ubHknKTtcbiAgICBjb25zdCBhZG1pblRva2VuID0gZ2V0VG9rZW4oZG5zSWQsICdhZG1pbicpO1xuICAgIGNvbnN0IGFkbWluVXNlcm5hbWUgPSBnZXRVc2VybmFtZShkbnNJZCwgJ2FkbWluJyk7XG4gICAgY29uc3Qgb2xkVG9rZW4gPSBjcmVkZW50aWFsRGVjcnlwdChzYWZlR2V0KGAke2Ruc0lkfS10b2tlbi1lbmNgKSwgRU5DUllQVElPTl9LRVkpO1xuICAgIGNvbnN0IG9sZFVzZXJuYW1lID0gY3JlZGVudGlhbERlY3J5cHQoc2FmZUdldChgJHtkbnNJZH0tdXNlcm5hbWUtZW5jYCksIEVOQ1JZUFRJT05fS0VZKTtcblxuICAgIHJldHVybiB7XG4gICAgICB1c2VybmFtZTogYWRtaW5Vc2VybmFtZSB8fCByZWFkb25seVVzZXJuYW1lIHx8IG9sZFVzZXJuYW1lLFxuICAgICAgdG9rZW46IGFkbWluVG9rZW4gfHwgcmVhZG9ubHlUb2tlbiB8fCBvbGRUb2tlbixcbiAgICAgIHJlYWRvbmx5VG9rZW46IHJlYWRvbmx5VG9rZW4gfHwgb2xkVG9rZW4sXG4gICAgICByZWFkb25seVVzZXJuYW1lOiByZWFkb25seVVzZXJuYW1lIHx8IG9sZFVzZXJuYW1lLFxuICAgICAgYWRtaW5Ub2tlbjogYWRtaW5Ub2tlbiB8fCBvbGRUb2tlbixcbiAgICAgIGFkbWluVXNlcm5hbWU6IGFkbWluVXNlcm5hbWUgfHwgb2xkVXNlcm5hbWVcbiAgICB9O1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIE1vZGFsIGhhbmRsZXJzIFx1MjUwMFx1MjUwMFxuXG4gIC8vIE9wZW4gbW9kYWwgXHUyMDE0IGJ1aWxkIHNlY3Rpb25zIGR5bmFtaWNhbGx5LCBwb3B1bGF0ZSBmcm9tIHN0b3JlZCBjcmVkc1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFuYWdlLXRva2VucycpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBidWlsZENyZWRlbnRpYWxTZWN0aW9ucygpO1xuICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuLW1hbmFnZW1lbnQtbW9kYWwnKTtcbiAgICBjb25zdCBjcmVkcyA9IGdldEFsbENyZWRlbnRpYWxzKCk7XG5cbiAgICBnZXREbnNJZHMoKS5mb3JFYWNoKGRuc0lkID0+IHtcbiAgICAgIGNvbnN0IGMgPSBjcmVkc1tkbnNJZF07XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tcmVhZG9ubHktdXNlcm5hbWVgKS52YWx1ZSA9IGMucmVhZG9ubHkudXNlcm5hbWU7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tcmVhZG9ubHktdG9rZW5gKS52YWx1ZSA9IGMucmVhZG9ubHkudG9rZW47XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tYWRtaW4tdXNlcm5hbWVgKS52YWx1ZSA9IGMuYWRtaW4udXNlcm5hbWU7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tYWRtaW4tdG9rZW5gKS52YWx1ZSA9IGMuYWRtaW4udG9rZW47XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tdG9rZW4tc3RhdHVzYCkudGV4dENvbnRlbnQgPSAnJztcbiAgICB9KTtcblxuICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgfSk7XG5cbiAgLy8gVG9nZ2xlIHBhc3N3b3JkIHZpc2liaWxpdHkgKyBiYWNrZHJvcCBjbG9zZSAoZXZlbnQgZGVsZWdhdGlvbiBmb3IgZHluYW1pYyBlbGVtZW50cylcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuLW1hbmFnZW1lbnQtbW9kYWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGNvbnN0IGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJy50b2tlbi10b2dnbGUnKTtcbiAgICBpZiAoYnRuKSB7XG4gICAgICBjb25zdCB0YXJnZXRJZCA9IGJ0bi5kYXRhc2V0LnRhcmdldDtcbiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgaW5wdXQudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1xcdXsxRjY0OH0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICdcXHV7MUY0NDF9JztcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGUudGFyZ2V0LmlkID09PSAndG9rZW4tbWFuYWdlbWVudC1tb2RhbCcpIHtcbiAgICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNhdmUgY3JlZGVudGlhbHNcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuLXNhdmUnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZG5zSWRzID0gZ2V0RG5zSWRzKCk7XG5cbiAgICAvLyBTYXZlIGFsbCB0byBsb2NhbFN0b3JhZ2VcbiAgICBkbnNJZHMuZm9yRWFjaChkbnNJZCA9PiB7XG4gICAgICBzZXRVc2VybmFtZShkbnNJZCwgJ3JlYWRvbmx5JywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXJlYWRvbmx5LXVzZXJuYW1lYCkudmFsdWUudHJpbSgpKTtcbiAgICAgIHNldFRva2VuKGRuc0lkLCAncmVhZG9ubHknLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tcmVhZG9ubHktdG9rZW5gKS52YWx1ZS50cmltKCkpO1xuICAgICAgc2V0VXNlcm5hbWUoZG5zSWQsICdhZG1pbicsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1hZG1pbi11c2VybmFtZWApLnZhbHVlLnRyaW0oKSk7XG4gICAgICBzZXRUb2tlbihkbnNJZCwgJ2FkbWluJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LWFkbWluLXRva2VuYCkudmFsdWUudHJpbSgpKTtcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxkIHBlci1zZXJ2ZXIgY3JlZGVudGlhbHMgcGF5bG9hZCBmb3IgYmFja2VuZCBzeW5jXG4gICAgY29uc3Qgc2VydmVycyA9IHt9O1xuICAgIGxldCBoYXNBbnlDcmVkcyA9IGZhbHNlO1xuXG4gICAgZG5zSWRzLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSB7fTtcbiAgICAgIGNvbnN0IHJvVXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1yZWFkb25seS11c2VybmFtZWApLnZhbHVlLnRyaW0oKTtcbiAgICAgIGNvbnN0IHJvUGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1yZWFkb25seS10b2tlbmApLnZhbHVlLnRyaW0oKTtcbiAgICAgIGNvbnN0IGFkbWluVXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1hZG1pbi11c2VybmFtZWApLnZhbHVlLnRyaW0oKTtcbiAgICAgIGNvbnN0IGFkbWluUGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1hZG1pbi10b2tlbmApLnZhbHVlLnRyaW0oKTtcblxuICAgICAgaWYgKHJvVXNlciAmJiByb1Bhc3MpIHtcbiAgICAgICAgZW50cnkucmVhZG9ubHkgPSB7IHVzZXJuYW1lOiByb1VzZXIsIHBhc3N3b3JkOiByb1Bhc3MgfTtcbiAgICAgICAgaGFzQW55Q3JlZHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFkbWluVXNlciAmJiBhZG1pblBhc3MpIHtcbiAgICAgICAgZW50cnkuYWRtaW4gPSB7IHVzZXJuYW1lOiBhZG1pblVzZXIsIHBhc3N3b3JkOiBhZG1pblBhc3MgfTtcbiAgICAgICAgaGFzQW55Q3JlZHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5rZXlzKGVudHJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlcnZlcnNbZG5zSWRdID0gZW50cnk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaGFzQW55Q3JlZHMpIHtcbiAgICAgIGRuc0lkcy5mb3JFYWNoKGRuc0lkID0+IHtcbiAgICAgICAgaWYgKHNlcnZlcnNbZG5zSWRdKSB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLnRleHRDb250ZW50ID0gJ1ZlcmlmeWluZy4uLic7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLmNsYXNzTmFtZSA9ICd0b2tlbi1zdGF0dXMnO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvZG5zL2NyZWRlbnRpYWxzJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2VydmVycyB9KVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgaWYgKGRhdGEucmVzdWx0cykge1xuICAgICAgICAgIGRuc0lkcy5mb3JFYWNoKGRuc0lkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApO1xuICAgICAgICAgICAgaWYgKCFzZXJ2ZXJzW2Ruc0lkXSkgeyBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICcnOyByZXR1cm47IH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEucmVzdWx0c1tkbnNJZF07XG4gICAgICAgICAgICBpZiAocmVzdWx0Py5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1xcdTI3MTMgVmVyaWZpZWQgJiBzYXZlZCc7XG4gICAgICAgICAgICAgIHN0YXR1c0VsLmNsYXNzTmFtZSA9ICd0b2tlbi1zdGF0dXMgc3VjY2Vzcyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8ucGFydGlhbCkge1xuICAgICAgICAgICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdcXHUyNzEzICcgKyByZXN1bHQucGFydGlhbDtcbiAgICAgICAgICAgICAgc3RhdHVzRWwuY2xhc3NOYW1lID0gJ3Rva2VuLXN0YXR1cyBzdWNjZXNzJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1xcdTI3MTcgJyArIChyZXN1bHQ/LmVycm9yIHx8ICdMb2dpbiBmYWlsZWQnKTtcbiAgICAgICAgICAgICAgc3RhdHVzRWwuY2xhc3NOYW1lID0gJ3Rva2VuLXN0YXR1cyBlcnJvcic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgZG5zSWRzLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlcnZlcnNbZG5zSWRdKSB7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS50ZXh0Q29udGVudCA9ICdcXHUyNzEzIFNhdmVkJztcbiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLmNsYXNzTmFtZSA9ICd0b2tlbi1zdGF0dXMgc3VjY2Vzcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG5zSWRzLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlcnZlcnNbZG5zSWRdKSB7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS50ZXh0Q29udGVudCA9ICdcXHUyNzE3ICcgKyAoZGF0YS5lcnJvciB8fCAnRmFpbGVkJyk7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS5jbGFzc05hbWUgPSAndG9rZW4tc3RhdHVzIGVycm9yJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3luYyBETlMgY3JlZGVudGlhbHMgdG8gYmFja2VuZDonLCBlKTtcbiAgICAgICAgZG5zSWRzLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgICAgIGlmIChzZXJ2ZXJzW2Ruc0lkXSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLnRleHRDb250ZW50ID0gJ1xcdTI3MTMgU2F2ZWQgbG9jYWxseSAoc3luYyBmYWlsZWQpJztcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS5jbGFzc05hbWUgPSAndG9rZW4tc3RhdHVzJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkbnNJZHMuZm9yRWFjaChkbnNJZCA9PiB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXV0by1jbG9zZSBhZnRlciBkZWxheSBpZiBhbGwgc3VjY2VlZGVkXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBhbGxHb29kID0gZG5zSWRzLmV2ZXJ5KGRuc0lkID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApPy50ZXh0Q29udGVudDtcbiAgICAgICAgcmV0dXJuICFzdGF0dXMgfHwgc3RhdHVzLmluY2x1ZGVzKCdcXHUyNzEzJyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChhbGxHb29kKSBjbG9zZU1vZGFsKCd0b2tlbi1tYW5hZ2VtZW50LW1vZGFsJyk7XG4gICAgfSwgMTUwMCk7XG4gIH0pO1xuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbi1jYW5jZWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY2xvc2VNb2RhbCgndG9rZW4tbWFuYWdlbWVudC1tb2RhbCcpO1xuICB9KTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW4tY2xlYXItYWxsJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChjb25maXJtKCdDbGVhciBhbGwgc3RvcmVkIEROUyBjcmVkZW50aWFscz8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLicpKSB7XG4gICAgICBjbGVhckFsbENyZWRlbnRpYWxzKCk7XG4gICAgICBnZXREbnNJZHMoKS5mb3JFYWNoKGRuc0lkID0+IHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXJlYWRvbmx5LXVzZXJuYW1lYCkudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXJlYWRvbmx5LXRva2VuYCkudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LWFkbWluLXVzZXJuYW1lYCkudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LWFkbWluLXRva2VuYCkudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLnRleHRDb250ZW50ID0gJ1xcdTI3MTMgQ2xlYXJlZCc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS5jbGFzc05hbWUgPSAndG9rZW4tc3RhdHVzIHN1Y2Nlc3MnO1xuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS9kbnMvY3JlZGVudGlhbHMnLCB7IG1ldGhvZDogJ0RFTEVURScgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFdpbmRvdyBleHBvcnRzIFx1MjUwMFx1MjUwMFxuICB3aW5kb3cuZ2V0VG9rZW4gPSBnZXRUb2tlbjtcbiAgd2luZG93LmdldFVzZXJuYW1lID0gZ2V0VXNlcm5hbWU7XG4gIHdpbmRvdy5zZXRUb2tlbiA9IHNldFRva2VuO1xuICB3aW5kb3cuc2V0VXNlcm5hbWUgPSBzZXRVc2VybmFtZTtcbiAgd2luZG93LmdldEFsbENyZWRlbnRpYWxzID0gZ2V0QWxsQ3JlZGVudGlhbHM7XG4gIHdpbmRvdy5nZXRDcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbDtcbiAgd2luZG93LnNldENyZWRlbnRpYWwgPSBzZXRDcmVkZW50aWFsO1xuICB3aW5kb3cuZ2V0RW5jcnlwdGlvbktleSA9IGdldEVuY3J5cHRpb25LZXk7XG4gIHdpbmRvdy5nZXREbnNJZHMgPSBnZXREbnNJZHM7XG4gIHdpbmRvdy5nZXREbnNEaXNwbGF5TmFtZSA9IGdldERuc0Rpc3BsYXlOYW1lO1xuXG59KSgpO1xuO1xuLy8gPT09PT09PT09PSBHUklEICYgU1RBVFVTIEhFTFBFUlMgPT09PT09PT09PVxuKGZ1bmN0aW9uICgpIHtcblxuICAvKiBFbmhhbmNlZCBzdGF0dXMgaGVscGVycyB3aXRoIHJlc3BvbnNlIHRpbWUgdHJhY2tpbmcgKi9cbiAgZnVuY3Rpb24gc2V0UXVpY2soaWQsIHVwLCByZXNwb25zZVRpbWUgPSBudWxsKSB7XG4gICAgY29uc3QgZG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQgKyAnLWRvdCcpO1xuICAgIGNvbnN0IHBpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCArICctcGlsbCcpO1xuICAgIGNvbnN0IHRpbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkICsgJy10aW1lJyk7XG4gICAgY29uc3QgY2FyZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFwcD1cIiR7aWR9XCJdYCk7XG5cbiAgICBpZiAoZG90KSB7XG4gICAgICBkb3QuY2xhc3NMaXN0LnRvZ2dsZSgnb2snLCB1cCk7XG4gICAgICBkb3QuY2xhc3NMaXN0LnRvZ2dsZSgnYmFkJywgIXVwKTtcbiAgICB9XG5cbiAgICBpZiAocGlsbCkge1xuICAgICAgcGlsbC50ZXh0Q29udGVudCA9IHVwID8gJ09OJyA6ICdPRkYnO1xuICAgICAgcGlsbC5jbGFzc0xpc3QudG9nZ2xlKCdvbicsIHVwKTtcbiAgICAgIHBpbGwuY2xhc3NMaXN0LnRvZ2dsZSgnb2ZmJywgIXVwKTtcbiAgICB9XG5cbiAgICBpZiAodGltZUVsICYmIHJlc3BvbnNlVGltZSAhPT0gbnVsbCkge1xuICAgICAgdGltZUVsLnRleHRDb250ZW50ID0gdXAgPyBgJHtyZXNwb25zZVRpbWV9bXNgIDogJ3RpbWVvdXQnO1xuICAgICAgdGltZUVsLmNsYXNzTmFtZSA9IGByZXNwb25zZS10aW1lICR7Z2V0UmVzcG9uc2VUaW1lQ2xhc3MocmVzcG9uc2VUaW1lLCB1cCl9YDtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY2FyZCBzdGF0dXMgZm9yIGljb24gY29sb3JpbmdcbiAgICBpZiAoY2FyZCkge1xuICAgICAgY2FyZC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHVzJywgdXAgPyAnb24nIDogJ29mZicpO1xuICAgIH1cblxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVzcG9uc2VUaW1lQ2xhc3ModGltZSwgaXNVcCkge1xuICAgIGlmICghaXNVcCkgcmV0dXJuICd0aW1lb3V0JztcbiAgICBpZiAodGltZSA8IDIwMCkgcmV0dXJuICdleGNlbGxlbnQnO1xuICAgIGlmICh0aW1lIDwgNTAwKSByZXR1cm4gJ2dvb2QnO1xuICAgIGlmICh0aW1lIDwgMTAwMCkgcmV0dXJuICdmYWlyJztcbiAgICByZXR1cm4gJ3Nsb3cnO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2hlY2tTZXJ2aWNlV2l0aFRpbWluZyhpZCkge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgZmV0Y2goJy9wcm9iZS8nICsgaWQsIHsgY2FjaGU6ICduby1zdG9yZScgfSk7XG4gICAgICBjb25zdCBlbmRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBjb25zdCByZXNwb25zZVRpbWUgPSBNYXRoLnJvdW5kKGVuZFRpbWUgLSBzdGFydFRpbWUpO1xuICAgICAgY29uc3QgaXNVcCA9IChyLnN0YXR1cyA+PSAyMDAgJiYgci5zdGF0dXMgPCA0MDApIHx8IHIuc3RhdHVzID09PSA0MDEgfHwgci5zdGF0dXMgPT09IDQwMztcbiAgICAgIHJldHVybiB7IGlzVXAsIHJlc3BvbnNlVGltZSB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgZW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gTWF0aC5yb3VuZChlbmRUaW1lIC0gc3RhcnRUaW1lKTtcbiAgICAgIHJldHVybiB7IGlzVXA6IGZhbHNlLCByZXNwb25zZVRpbWUgfTtcbiAgICB9XG4gIH1cblxuICAvKiBBcHAgZ3JpZCAtIGxvYWRlZCBmcm9tIEFQSSAqL1xuICB3aW5kb3cuQVBQUyA9IFtdOyAvLyBVc2Ugd2luZG93LkFQUFMgYXMgdGhlIG1haW4gYXJyYXlcbiAgbGV0IHJlZnJlc2hJbkZsaWdodCA9IG51bGw7XG4gIGxldCByZWZyZXNoUXVldWVkID0gZmFsc2U7XG5cbiAgLy8gTG9hZCBzZXJ2aWNlcyBmcm9tIEFQSVxuICBhc3luYyBmdW5jdGlvbiBsb2FkU2VydmljZXMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh3aW5kb3cuU2tlbGV0b25Mb2FkZXIpIHdpbmRvdy5Ta2VsZXRvbkxvYWRlci5zaG93KDYpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS9zZXJ2aWNlcycsIHsgY2FjaGU6ICduby1zdG9yZScgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBTdGFuZGFyZCBlbnZlbG9wZTogeyBzdWNjZXNzOiB0cnVlLCBzZXJ2aWNlczogWy4uLl0sIHBhZ2luYXRpb24/OiB7Li4ufSB9XG4gICAgICAgIHdpbmRvdy5BUFBTID0gcmVzdWx0LnNlcnZpY2VzIHx8IFtdO1xuICAgICAgICBpZiAod2luZG93LlNrZWxldG9uTG9hZGVyKSB3aW5kb3cuU2tlbGV0b25Mb2FkZXIuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VydmljZXM6JywgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgaWYgKHdpbmRvdy5Ta2VsZXRvbkxvYWRlcikgd2luZG93LlNrZWxldG9uTG9hZGVyLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VydmljZXM6JywgZXJyb3IpO1xuICAgICAgaWYgKHdpbmRvdy5Ta2VsZXRvbkxvYWRlcikgd2luZG93LlNrZWxldG9uTG9hZGVyLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXJ2aWNlVXJsKGlkKSB7XG4gICAgY29uc3Qgc3ZjID0gd2luZG93LkFQUFM/LmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gICAgaWYgKHN2Yz8udXJsKSByZXR1cm4gc3ZjLnVybC5zdGFydHNXaXRoKCdodHRwJykgPyBzdmMudXJsIDogJ2h0dHBzOi8vJyArIHN2Yy51cmw7XG4gICAgaWYgKHN2Yz8uaXNFeHRlcm5hbCAmJiBzdmMuZXh0ZXJuYWxVcmwpIHJldHVybiBzdmMuZXh0ZXJuYWxVcmw7XG4gICAgY29uc3QgZG5zID0gU0lURS5kbnNTZXJ2ZXJzPy5baWRdO1xuICAgIGlmIChkbnMpIHJldHVybiAnaHR0cDovLycgKyBkbnMuaXAgKyAnOicgKyAoZG5zLnBvcnQgfHwgNTM4MCk7XG4gICAgcmV0dXJuIGJ1aWxkU2VydmljZVVybChpZCk7XG4gIH1cbiAgZnVuY3Rpb24gZWwodGFnLCBjbHMsIHR4dCkgeyBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOyBpZiAoY2xzKSBuLmNsYXNzTmFtZSA9IGNsczsgaWYgKHR4dCkgbi50ZXh0Q29udGVudCA9IHR4dDsgcmV0dXJuIG47IH1cblxuICBmdW5jdGlvbiBidWlsZEdyaWQoKSB7XG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXJkcycpOyByb290LmlubmVySFRNTCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2luZG93LkFQUFMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHMgPSB3aW5kb3cuQVBQU1tpXTtcbiAgICAgIGlmIChzLmlkID09PSAnY2EnKSBjb250aW51ZTsgLy8gRGFzaENBIGxpdmVzIGluIHRvcCBhbmNob3Igcm93XG4gICAgICBjb25zdCBjYXJkID0gZWwoJ2RpdicsICdjYXJkJyk7XG4gICAgICBjYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1hcHAnLCBzLmlkKTtcbiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXR1cycsICdvZmYnKTsgLy8gSW5pdGlhbCBzdGF0dXNcbiAgICAgIGlmIChzLmNvbnRhaW5lcklkKSBjYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1jb250YWluZXItaWQnLCBzLmNvbnRhaW5lcklkKTtcbiAgICAgIGlmIChzLmNhdGVnb3J5KSBjYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1jYXRlZ29yeScsIHMuY2F0ZWdvcnkpO1xuICAgICAgaWYgKHMucmVjaXBlSWQpIGNhcmQuc2V0QXR0cmlidXRlKCdkYXRhLXJlY2lwZS1pZCcsIHMucmVjaXBlSWQpO1xuXG4gICAgICBjb25zdCBkb3QgPSBlbCgnc3BhbicsICdkb3QgYmFkIGF0LWJsJyk7IGRvdC5pZCA9ICdkb3QtJyArIHMuaWQgKyAnLWdyaWQnOyBjYXJkLmFwcGVuZENoaWxkKGRvdCk7XG5cbiAgICAgIGNvbnN0IHJvdyA9IGVsKCdkaXYnLCAncm93Jyk7XG4gICAgICBjb25zdCB3cmFwID0gZWwoJ2RpdicsICdsb2dvLXdyYXAnKTtcblxuICAgICAgLy8gVXNlIHJlbGlhYmxlIFBORyBpbWFnZXMgd2l0aCBhdXRvbWF0aWMgQ0ROIGZhbGxiYWNrXG4gICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgIGltZy5zcmMgPSBzLmxvZ287XG4gICAgICBpbWcuYWx0ID0gcy5uYW1lO1xuICAgICAgaW1nLmNsYXNzTmFtZSA9ICdsb2dvLWltZyc7XG4gICAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBUcnkgQ0ROIGZhbGxiYWNrIHdpdGggbXVsdGlwbGUgbmFtaW5nIHN0cmF0ZWdpZXNcbiAgICAgICAgLy8gVXNlIGlkLCBhcHBUZW1wbGF0ZSwgb3IgZGVyaXZlIGZyb20gbmFtZVxuICAgICAgICBsZXQgYXBwSWQgPSBzLmlkIHx8IHMuYXBwVGVtcGxhdGU7XG4gICAgICAgIGlmICghYXBwSWQgJiYgcy5uYW1lKSB7XG4gICAgICAgICAgLy8gRGVyaXZlIElEIGZyb20gbmFtZSAobG93ZXJjYXNlLCByZW1vdmUgc3BhY2VzKVxuICAgICAgICAgIGFwcElkID0gcy5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFwcElkKSB7XG4gICAgICAgICAgLy8gVHJ5IGRpZmZlcmVudCBDRE4gVVJMIGZvcm1hdHNcbiAgICAgICAgICBjb25zdCBjZG5VcmxzID0gW1xuICAgICAgICAgICAgYGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC93YWxreGNvZGUvZGFzaGJvYXJkLWljb25zL3BuZy8ke2FwcElkfS5wbmdgLFxuICAgICAgICAgICAgYGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC93YWxreGNvZGUvZGFzaGJvYXJkLWljb25zL3BuZy8ke2FwcElkLnRvTG93ZXJDYXNlKCl9LnBuZ2AsXG4gICAgICAgICAgICBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3dhbGt4Y29kZS9kYXNoYm9hcmQtaWNvbnMvcG5nLyR7YXBwSWQucmVwbGFjZSgvLS9nLCAnJyl9LnBuZ2AsXG4gICAgICAgICAgICBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3dhbGt4Y29kZS9kYXNoYm9hcmQtaWNvbnMvcG5nLyR7cy5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpfS5wbmdgXG4gICAgICAgICAgXTtcblxuICAgICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzXG4gICAgICAgICAgY29uc3QgdW5pcXVlVXJscyA9IFsuLi5uZXcgU2V0KGNkblVybHMpXTtcblxuICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgVVJMIHRvIHRyeVxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHVuaXF1ZVVybHMuaW5kZXhPZih0aGlzLnNyYyk7XG4gICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICsgMTtcblxuICAgICAgICAgIGlmIChuZXh0SW5kZXggPCB1bmlxdWVVcmxzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zcmMgPSB1bmlxdWVVcmxzW25leHRJbmRleF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB3cmFwLmFwcGVuZENoaWxkKGltZyk7XG4gICAgICByb3cuYXBwZW5kQ2hpbGQod3JhcCk7XG5cbiAgICAgIGNvbnN0IG5hbWVTcGFuID0gZWwoJ3NwYW4nLCAnbmFtZScsIHMubmFtZSk7XG4gICAgICByb3cuYXBwZW5kQ2hpbGQobmFtZVNwYW4pO1xuXG4gICAgICAvLyBBZGQgVGFpbHNjYWxlIGJhZGdlIGlmIHNlcnZpY2UgaXMgcHJvdGVjdGVkXG4gICAgICBpZiAocy50YWlsc2NhbGVPbmx5KSB7XG4gICAgICAgIGNvbnN0IHRzQmFkZ2UgPSBlbCgnc3BhbicsICd0cy1iYWRnZScsICdcdUQ4M0RcdUREMTAnKTtcbiAgICAgICAgdHNCYWRnZS50aXRsZSA9ICdUYWlsc2NhbGUtb25seSBhY2Nlc3MnO1xuICAgICAgICB0c0JhZGdlLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luLWxlZnQ6IDZweDsgZm9udC1zaXplOiAwLjc1cmVtOyBvcGFjaXR5OiAwLjg7JztcbiAgICAgICAgbmFtZVNwYW4uYXBwZW5kQ2hpbGQodHNCYWRnZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDYXRlZ29yeSBiYWRnZSBpZiBzZXJ2aWNlIGhhcyBvbmUgKGNvbG9yZWQgcGlsbCB3aXRoIGljb24pXG4gICAgICBpZiAocy5jYXRlZ29yeSkge1xuICAgICAgICBjb25zdCBjYXRzID0gKHR5cGVvZiBEQyAhPT0gJ3VuZGVmaW5lZCcgJiYgREMuQ0FURUdPUklFUykgfHwgd2luZG93LkRDX0NBVEVHT1JJRVMgfHwge307XG4gICAgICAgIGNvbnN0IGNhdEluZm8gPSBjYXRzW3MuY2F0ZWdvcnldIHx8IHt9O1xuICAgICAgICBjb25zdCBjYXRCYWRnZSA9IGVsKCdzcGFuJywgJ2NhdC1iYWRnZScsIGAke2NhdEluZm8uaWNvbiB8fCAnJ30gJHtzLmNhdGVnb3J5fWAudHJpbSgpKTtcbiAgICAgICAgY2F0QmFkZ2UudGl0bGUgPSBgQ2F0ZWdvcnk6ICR7cy5jYXRlZ29yeX1gO1xuICAgICAgICBjYXRCYWRnZS5zdHlsZS5jc3NUZXh0ID0gYG1hcmdpbi1sZWZ0OiA2cHg7IGZvbnQtc2l6ZTogMC42NXJlbTsgcGFkZGluZzogMXB4IDZweDsgYm9yZGVyLXJhZGl1czogOTk5cHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAke2NhdEluZm8uY29sb3IgfHwgJyM3ZjhjOGQnfSAyNSUsIHRyYW5zcGFyZW50KTsgY29sb3I6ICR7Y2F0SW5mby5jb2xvciB8fCAnIzdmOGM4ZCd9OyBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgJHtjYXRJbmZvLmNvbG9yIHx8ICcjN2Y4YzhkJ30gNTAlLCB0cmFuc3BhcmVudCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGZvbnQtd2VpZ2h0OiA1MDA7YDtcbiAgICAgICAgbmFtZVNwYW4uYXBwZW5kQ2hpbGQoY2F0QmFkZ2UpO1xuICAgICAgfVxuXG4gICAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnc3BhY2VyJykpO1xuXG4gICAgICBjb25zdCBwaWxsID0gZWwoJ3NwYW4nLCAnYmFkZ2Ugb2ZmJywgJ09GRicpOyBwaWxsLmlkID0gJ2JhZGdlLScgKyBzLmlkOyByb3cuYXBwZW5kQ2hpbGQocGlsbCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBhdmFpbGFibGUgYmFkZ2UgKGhpZGRlbiBieSBkZWZhdWx0LCBzaG93biB3aGVuIHVwZGF0ZSBkZXRlY3RlZClcbiAgICAgIGNvbnN0IHVwZGF0ZUJhZGdlID0gZWwoJ3NwYW4nLCAndXBkYXRlLWF2YWlsYWJsZS1iYWRnZScsICdVUERBVEUnKTtcbiAgICAgIHVwZGF0ZUJhZGdlLmlkID0gJ3VwZGF0ZS1iYWRnZS0nICsgcy5pZDtcbiAgICAgIHVwZGF0ZUJhZGdlLnRpdGxlID0gJ1VwZGF0ZSBhdmFpbGFibGUnO1xuICAgICAgcm93LmFwcGVuZENoaWxkKHVwZGF0ZUJhZGdlKTtcblxuICAgICAgY2FyZC5hcHBlbmRDaGlsZChyb3cpO1xuXG4gICAgICAvLyBBZGQgcmVzcG9uc2UgdGltZSByb3dcbiAgICAgIGNvbnN0IHJlc3BvbnNlUm93ID0gZWwoJ2RpdicsICdyZXNwb25zZS1yb3cnKTtcbiAgICAgIGNvbnN0IHRpbWVTcGFuID0gZWwoJ3NwYW4nLCAncmVzcG9uc2UtdGltZScsICctLScpOyB0aW1lU3Bhbi5pZCA9ICd0aW1lLScgKyBzLmlkO1xuICAgICAgcmVzcG9uc2VSb3cuYXBwZW5kQ2hpbGQodGltZVNwYW4pO1xuICAgICAgY2FyZC5hcHBlbmRDaGlsZChyZXNwb25zZVJvdyk7XG5cbiAgICAgIC8vIEFkZCBoZWFsdGgvdXB0aW1lIHJvd1xuICAgICAgY29uc3QgaGVhbHRoUm93ID0gZWwoJ2RpdicsICdoZWFsdGgtcm93Jyk7XG4gICAgICBoZWFsdGhSb3cuaWQgPSAnaGVhbHRoLScgKyBzLmlkO1xuICAgICAgY29uc3QgdXB0aW1lQ2hpcCA9IGVsKCdzcGFuJywgJ3VwdGltZS1jaGlwJywgJy0tJyk7XG4gICAgICB1cHRpbWVDaGlwLmlkID0gJ3VwdGltZS0nICsgcy5pZDtcbiAgICAgIGhlYWx0aFJvdy5hcHBlbmRDaGlsZCh1cHRpbWVDaGlwKTtcbiAgICAgIGNvbnN0IHVwdGltZU1pbmlCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHVwdGltZU1pbmlCYXIuY2xhc3NOYW1lID0gJ3VwdGltZS1taW5pLWJhcic7XG4gICAgICBjb25zdCB1cHRpbWVGaWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB1cHRpbWVGaWxsLmNsYXNzTmFtZSA9ICdmaWxsJztcbiAgICAgIHVwdGltZUZpbGwuaWQgPSAndXB0aW1lLWJhci0nICsgcy5pZDtcbiAgICAgIHVwdGltZUZpbGwuc3R5bGUud2lkdGggPSAnMCUnO1xuICAgICAgdXB0aW1lTWluaUJhci5hcHBlbmRDaGlsZCh1cHRpbWVGaWxsKTtcbiAgICAgIGhlYWx0aFJvdy5hcHBlbmRDaGlsZCh1cHRpbWVNaW5pQmFyKTtcbiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoaGVhbHRoUm93KTtcblxuICAgICAgY29uc3QgYnRuUm93ID0gZWwoJ2RpdicsICdidG4tcm93Jyk7XG5cbiAgICAgIC8vIEFkZCBsb2dzIGJ1dHRvbiBmb3Igc2VydmljZXMgd2l0aCBjb250YWluZXJJZHNcbiAgICAgIGlmIChzLmNvbnRhaW5lcklkKSB7XG4gICAgICAgIGNvbnN0IGxvZ3NCdG4gPSBlbCgnYnV0dG9uJywgJ2xvZ3MtYnRuJywgJ1x1RDgzRFx1RENDQicpO1xuICAgICAgICBsb2dzQnRuLnRpdGxlID0gJ1ZpZXcgY29udGFpbmVyIGxvZ3MnO1xuICAgICAgICBsb2dzQnRuLm9uY2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgd2luZG93Lm9wZW5Db250YWluZXJMb2dzTW9kYWwocy5jb250YWluZXJJZCwgcy5uYW1lKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKGxvZ3NCdG4pO1xuXG4gICAgICAgIC8vIEFkZCB1cGRhdGUgYnV0dG9uIGZvciBEb2NrZXIgY29udGFpbmVyc1xuICAgICAgICBjb25zdCB1cGRhdGVCdG4gPSBlbCgnYnV0dG9uJywgJ3VwZGF0ZS1idG4nLCAnXHUyQjA2XHVGRTBGJyk7XG4gICAgICAgIHVwZGF0ZUJ0bi50aXRsZSA9ICdVcGRhdGUgY29udGFpbmVyIHRvIGxhdGVzdCB2ZXJzaW9uJztcbiAgICAgICAgdXBkYXRlQnRuLmlkID0gYHVwZGF0ZS1idG4tJHtzLmlkfWA7XG4gICAgICAgIHVwZGF0ZUJ0bi5vbmNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHdpbmRvdy51cGRhdGVDb250YWluZXIocy5jb250YWluZXJJZCwgcy5uYW1lLCBzLmlkKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKHVwZGF0ZUJ0bik7XG5cbiAgICAgICAgLy8gVGVybWluYWwgZXhlYyBidXR0b24gKHN1YnRsZSBcdTIwMTQgdmlzaWJsZSBvbiBob3ZlcilcbiAgICAgICAgY29uc3QgZXhlY0J0biA9IGVsKCdidXR0b24nLCAnZXhlYy1idG4nLCAnPl8nKTtcbiAgICAgICAgZXhlY0J0bi50aXRsZSA9ICdPcGVuIHRlcm1pbmFsJztcbiAgICAgICAgZXhlY0J0bi5vbmNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmICh3aW5kb3cub3BlbkV4ZWNNb2RhbCkgd2luZG93Lm9wZW5FeGVjTW9kYWwocy5jb250YWluZXJJZCwgcy5uYW1lKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKGV4ZWNCdG4pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgbG9ncyBidXR0b24gZm9yIHNlcnZpY2VzIHdpdGggbG9nUGF0aCAobmF0aXZlIGFwcHMpXG4gICAgICBpZiAocy5sb2dQYXRoICYmICFzLmNvbnRhaW5lcklkKSB7XG4gICAgICAgIGNvbnN0IGxvZ3NCdG4gPSBlbCgnYnV0dG9uJywgJ2xvZ3MtYnRuJywgJ1x1RDgzRFx1RENDQicpO1xuICAgICAgICBsb2dzQnRuLnRpdGxlID0gJ1ZpZXcgYXBwbGljYXRpb24gbG9ncyc7XG4gICAgICAgIGxvZ3NCdG4ub25jbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB3aW5kb3cub3BlbkZpbGVMb2dzTW9kYWwocy5sb2dQYXRoLCBzLm5hbWUpO1xuICAgICAgICB9O1xuICAgICAgICBidG5Sb3cuYXBwZW5kQ2hpbGQobG9nc0J0bik7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBjcmVkZW50aWFscyBidXR0b24gZm9yIHNlcnZpY2VzIHRoYXQgc3VwcG9ydCBhdXRvLWxvZ2luXG4gICAgICBpZiAocy5pc0V4dGVybmFsIHx8IHMuYXBwVGVtcGxhdGUgfHwgcy51cmwpIHtcbiAgICAgICAgY29uc3QgY3JlZHNCdG4gPSBlbCgnYnV0dG9uJywgJ2NyZWRzLWJ0bicsICdcdUQ4M0RcdUREMTEnKTtcbiAgICAgICAgY3JlZHNCdG4udGl0bGUgPSAnQXV0by1sb2dpbiBjcmVkZW50aWFscyc7XG4gICAgICAgIGNyZWRzQnRuLmlkID0gYGNyZWRzLWJ0bi0ke3MuaWR9YDtcbiAgICAgICAgY3JlZHNCdG4ub25jbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB3aW5kb3cub3BlblNlcnZpY2VDcmVkc01vZGFsKHMpO1xuICAgICAgICB9O1xuICAgICAgICBidG5Sb3cuYXBwZW5kQ2hpbGQoY3JlZHNCdG4pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgb3B0aW9ucyBidXR0b24gZm9yIGFsbCBzZXJ2aWNlcyBleGNlcHQgJ2ludGVybmV0J1xuICAgICAgaWYgKHMuaWQgIT09ICdpbnRlcm5ldCcpIHtcbiAgICAgICAgY29uc3Qgb3B0QnRuID0gZWwoJ2J1dHRvbicsICdvcHRpb25zLWJ0bicsICdcdTI2OTlcdUZFMEYnKTtcbiAgICAgICAgb3B0QnRuLnRpdGxlID0gJ0VkaXQgc2VydmljZSBzZXR0aW5ncyc7XG4gICAgICAgIG9wdEJ0bi5vbmNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHdpbmRvdy5vcGVuU2VydmljZUVkaXRNb2RhbChzKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKG9wdEJ0bik7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBzaGFyZSBidXR0b24gZm9yIGFsbCBzZXJ2aWNlcyBleGNlcHQgJ2ludGVybmV0JyAoREMtMDU4KS5cbiAgICAgIC8vIENhbGxzIGludG8gdGhlIHNoYXJlLW1vZGFsIG1vZHVsZSByZWdpc3RlcmVkIG9uIHdpbmRvdy4gV2UgZG9uJ3RcbiAgICAgIC8vIGhhcmQtcmVxdWlyZSB0aGUgbW9kdWxlIFx1MjAxNCBpZiBzaGFyZS1tb2RhbC5qcyB3YXMgZXhjbHVkZWQgZnJvbSB0aGVcbiAgICAgIC8vIGJ1bmRsZSwgdGhlIGJ1dHRvbiBzdGlsbCByZW5kZXJzIGJ1dCBjbGlja2luZyBpdCBzdXJmYWNlcyBhIGNsZWFyXG4gICAgICAvLyBlcnJvciB0b2FzdCBpbnN0ZWFkIG9mIGEgc2lsZW50IG5vLW9wLlxuICAgICAgaWYgKHMuaWQgIT09ICdpbnRlcm5ldCcpIHtcbiAgICAgICAgY29uc3Qgc2hhcmVCdG4gPSBlbCgnYnV0dG9uJywgJ3NoYXJlLWJ0bicsICdcdUQ4M0RcdUREMTcnKTtcbiAgICAgICAgc2hhcmVCdG4udGl0bGUgPSAnU2hhcmUgdGhpcyBzZXJ2aWNlIChQcm8pJztcbiAgICAgICAgc2hhcmVCdG4ub25jbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5vcGVuU2hhcmVNb2RhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgd2luZG93Lm9wZW5TaGFyZU1vZGFsKHMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5zaG93Tm90aWZpY2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB3aW5kb3cuc2hvd05vdGlmaWNhdGlvbignU2hhcmUgbW9kYWwgbm90IGxvYWRlZC4gUmVmcmVzaCB0aGUgcGFnZS4nLCAnZXJyb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGJ0blJvdy5hcHBlbmRDaGlsZChzaGFyZUJ0bik7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBkZWxldGUgYnV0dG9uIGZvciBhbGwgc2VydmljZXMgZXhjZXB0IEludGVybmV0XG4gICAgICBpZiAocy5pZCAhPT0gJ2ludGVybmV0Jykge1xuICAgICAgICBjb25zdCBkZWxCdG4gPSBlbCgnYnV0dG9uJywgJ2RlbGV0ZS1idG4nLCAnXHVEODNEXHVEREQxXHVGRTBGJyk7XG4gICAgICAgIGRlbEJ0bi50aXRsZSA9ICdEZWxldGUgdGhpcyBzZXJ2aWNlJztcbiAgICAgICAgZGVsQnRuLm9uY2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgd2luZG93LmRlbGV0ZVNlcnZpY2Uocy5pZCwgcy5uYW1lKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKGRlbEJ0bik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ0biA9IGVsKCdidXR0b24nLCBudWxsLCAnT3BlbicpO1xuICAgICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB3aW5kb3cub3BlbihzZXJ2aWNlVXJsKHMuaWQpLCAnX2JsYW5rJywgJ25vb3BlbmVyJyk7XG4gICAgICBidG5Sb3cuYXBwZW5kQ2hpbGQoYnRuKTtcbiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoYnRuUm93KTtcbiAgICAgIGNhcmQuc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gYCR7TWF0aC5taW4oaSAqIDQ1LCAyNzApfW1zYDtcblxuICAgICAgcm9vdC5hcHBlbmRDaGlsZChjYXJkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FyZCcpLmZvckVhY2goY2FyZCA9PiBjYXJkLmNsYXNzTGlzdC5hZGQoJ2xvYWRlZCcpKTtcbiAgICB9KTtcblxuICAgIC8vIEdyb3VwIHJlY2lwZSBjYXJkcyB2aXN1YWxseSBhZnRlciBncmlkIGlzIGJ1aWx0XG4gICAgaWYgKHdpbmRvdy5ncm91cFJlY2lwZUNhcmRzKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gd2luZG93Lmdyb3VwUmVjaXBlQ2FyZHMoKSk7XG5cbiAgICAvLyBSZWZyZXNoIHRoZSBzZXJ2aWNlIGZpbHRlciBzbyB0aGUgY2F0ZWdvcnkgZHJvcGRvd24gcmVmbGVjdHMgbmV3IHNlcnZpY2VzXG4gICAgaWYgKHdpbmRvdy5yZWZyZXNoU2VydmljZUZpbHRlcikgd2luZG93LnJlZnJlc2hTZXJ2aWNlRmlsdGVyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRCYWRnZShpZCwgdXAsIHJlc3BvbnNlVGltZSA9IG51bGwpIHtcbiAgICBjb25zdCBkb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG90LScgKyBpZCArICctZ3JpZCcpO1xuICAgIGNvbnN0IHBpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFkZ2UtJyArIGlkKTtcbiAgICBjb25zdCB0aW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZS0nICsgaWQpO1xuICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1hcHA9XCIke2lkfVwiXWApO1xuXG4gICAgaWYgKGRvdCkge1xuICAgICAgZG90LmNsYXNzTGlzdC50b2dnbGUoJ29rJywgdXApO1xuICAgICAgZG90LmNsYXNzTGlzdC50b2dnbGUoJ2JhZCcsICF1cCk7XG4gICAgfVxuXG4gICAgaWYgKHBpbGwpIHtcbiAgICAgIHBpbGwudGV4dENvbnRlbnQgPSB1cCA/ICdPTicgOiAnT0ZGJztcbiAgICAgIHBpbGwuY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCB1cCk7XG4gICAgICBwaWxsLmNsYXNzTGlzdC50b2dnbGUoJ29mZicsICF1cCk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVFbCAmJiByZXNwb25zZVRpbWUgIT09IG51bGwpIHtcbiAgICAgIHRpbWVFbC50ZXh0Q29udGVudCA9IHVwID8gYCR7cmVzcG9uc2VUaW1lfW1zYCA6ICd0aW1lb3V0JztcbiAgICAgIHRpbWVFbC5jbGFzc05hbWUgPSBgcmVzcG9uc2UtdGltZSAke2dldFJlc3BvbnNlVGltZUNsYXNzKHJlc3BvbnNlVGltZSwgdXApfWA7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNhcmQgc3RhdHVzIGZvciBpY29uIGNvbG9yaW5nXG4gICAgaWYgKGNhcmQpIHtcbiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXR1cycsIHVwID8gJ29uJyA6ICdvZmYnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoQWxsKCkge1xuICAgIGlmIChyZWZyZXNoSW5GbGlnaHQpIHtcbiAgICAgIHJlZnJlc2hRdWV1ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlZnJlc2hJbkZsaWdodDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVTdGFtcChsYWJlbCwgY2hlY2tlZEF0ID0gbmV3IERhdGUoKSkge1xuICAgICAgY29uc3Qgc3RhbXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhbXAnKTtcbiAgICAgIGlmIChzdGFtcCkgc3RhbXAudGV4dENvbnRlbnQgPSBgJHtsYWJlbH06ICR7bmV3IERhdGUoY2hlY2tlZEF0KS50b0xvY2FsZVRpbWVTdHJpbmcoKX1gO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5QmF0Y2hSZXN1bHRzKHN0YXR1c2VzKSB7XG4gICAgICBjb25zdCBkbnNJZHMgPSBPYmplY3Qua2V5cyhTSVRFLmRuc1NlcnZlcnMpO1xuICAgICAgZG5zSWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0YXR1c2VzW2lkXTtcbiAgICAgICAgaWYgKHJlc3VsdCkgc2V0UXVpY2soaWQsIHJlc3VsdC5pc1VwLCByZXN1bHQucmVzcG9uc2VUaW1lKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdHVzZXMuaW50ZXJuZXQpIHtcbiAgICAgICAgc2V0UXVpY2soJ2ludGVybmV0Jywgc3RhdHVzZXMuaW50ZXJuZXQuaXNVcCwgc3RhdHVzZXMuaW50ZXJuZXQucmVzcG9uc2VUaW1lKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93LkFQUFMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzdGF0dXNlc1tzZXJ2aWNlLmlkXTtcbiAgICAgICAgaWYgKHJlc3VsdCkgc2V0QmFkZ2Uoc2VydmljZS5pZCwgcmVzdWx0LmlzVXAsIHJlc3VsdC5yZXNwb25zZVRpbWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEZhbGxiYWNrKCkge1xuICAgICAgY29uc3QgZG5zSWRzID0gT2JqZWN0LmtleXMoU0lURS5kbnNTZXJ2ZXJzKTtcbiAgICAgIGNvbnN0IHRvcENoZWNrcyA9IGRuc0lkcy5tYXAoaWQgPT4gY2hlY2tTZXJ2aWNlV2l0aFRpbWluZyhpZCkpO1xuICAgICAgdG9wQ2hlY2tzLnB1c2goY2hlY2tTZXJ2aWNlV2l0aFRpbWluZygnaW50ZXJuZXQnKSk7XG4gICAgICBjb25zdCB0b3BSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwodG9wQ2hlY2tzKTtcblxuICAgICAgZG5zSWRzLmZvckVhY2goKGlkLCBpKSA9PiBzZXRRdWljayhpZCwgdG9wUmVzdWx0c1tpXS5pc1VwLCB0b3BSZXN1bHRzW2ldLnJlc3BvbnNlVGltZSkpO1xuICAgICAgY29uc3QgaW50ZXJuZXRSZXN1bHQgPSB0b3BSZXN1bHRzW3RvcFJlc3VsdHMubGVuZ3RoIC0gMV07XG4gICAgICBzZXRRdWljaygnaW50ZXJuZXQnLCBpbnRlcm5ldFJlc3VsdC5pc1VwLCBpbnRlcm5ldFJlc3VsdC5yZXNwb25zZVRpbWUpO1xuXG4gICAgICBjb25zdCBhcHBSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHdpbmRvdy5BUFBTLm1hcChhc3luYyBzID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1NlcnZpY2VXaXRoVGltaW5nKHMuaWQpO1xuICAgICAgICAgIHJldHVybiB7IGlkOiBzLmlkLCAuLi5yZXN1bHQgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGFwcFJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgICBzZXRCYWRnZShyZXN1bHQuaWQsIHJlc3VsdC5pc1VwLCByZXN1bHQucmVzcG9uc2VUaW1lKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZnJlc2hJbkZsaWdodCA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3YxL3NlcnZpY2VzL3N0YXR1cycsIHsgY2FjaGU6ICduby1zdG9yZScgfSk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YXR1cyByZWZyZXNoIGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGFwcGx5QmF0Y2hSZXN1bHRzKGRhdGEuc3RhdHVzZXMgfHwge30pO1xuICAgICAgICB1cGRhdGVTdGFtcCgnbGFzdCBjaGVjaycsIGRhdGEuY2hlY2tlZEF0IHx8IG5ldyBEYXRlKCkpO1xuICAgICAgfSBjYXRjaCAoYmF0Y2hFcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0JhdGNoZWQgc3RhdHVzIHJlZnJlc2ggZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZGlyZWN0IHByb2JlczonLCBiYXRjaEVycm9yKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCByZWZyZXNoRmFsbGJhY2soKTtcbiAgICAgICAgICB1cGRhdGVTdGFtcCgnbGFzdCBjaGVjaycpO1xuICAgICAgICB9IGNhdGNoIChmYWxsYmFja0Vycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRGFzaGJvYXJkIHJlZnJlc2ggZmFpbGVkOicsIGZhbGxiYWNrRXJyb3IpO1xuICAgICAgICAgIHVwZGF0ZVN0YW1wKCdsYXN0IGZhaWxlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWZyZXNoSW5GbGlnaHQgPSBudWxsO1xuICAgICAgICBpZiAocmVmcmVzaFF1ZXVlZCkge1xuICAgICAgICAgIHJlZnJlc2hRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgd2luZG93LnJlZnJlc2hBbGwoKTsgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuIHJlZnJlc2hJbkZsaWdodDtcbiAgfVxuXG4gIC8vIEROUyBvcGVuIGJ1dHRvbnMgXHUyMDE0IHVzZSBldmVudCBkZWxlZ2F0aW9uIG9uIC50b3AgY29udGFpbmVyXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b3AnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGNvbnN0IG9wZW5CdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbaWQkPVwiLW9wZW5cIl0nKTtcbiAgICBpZiAoIW9wZW5CdG4pIHJldHVybjtcbiAgICBjb25zdCBpZCA9IG9wZW5CdG4uaWQucmVwbGFjZSgnLW9wZW4nLCAnJyk7XG4gICAgaWYgKFNJVEUuZG5zU2VydmVyc1tpZF0pIHdpbmRvdy5vcGVuKHNlcnZpY2VVcmwoaWQpLCAnX2JsYW5rJywgJ25vb3BlbmVyJyk7XG4gIH0pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2Etb3BlbicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHdpbmRvdy5vcGVuKHNlcnZpY2VVcmwoJ2NhJyksICdfYmxhbmsnLCAnbm9vcGVuZXInKSk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcmVkcy1idG4tY2EnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBlLnN0b3BQcm9wYWdhdGlvbigpOyBjb25zdCBzID0gd2luZG93LkFQUFMuZmluZChhID0+IGEuaWQgPT09ICdjYScpOyBpZiAocyAmJiB3aW5kb3cub3BlblNlcnZpY2VDcmVkc01vZGFsKSB3aW5kb3cub3BlblNlcnZpY2VDcmVkc01vZGFsKHMpOyB9KTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29wdGlvbnMtYnRuLWNhJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgY29uc3QgcyA9IHdpbmRvdy5BUFBTLmZpbmQoYSA9PiBhLmlkID09PSAnY2EnKTsgaWYgKHMgJiYgd2luZG93Lm9wZW5TZXJ2aWNlRWRpdE1vZGFsKSB3aW5kb3cub3BlblNlcnZpY2VFZGl0TW9kYWwocyk7IH0pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlLWJ0bi1jYScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGlmICh3aW5kb3cuZGVsZXRlU2VydmljZSkgd2luZG93LmRlbGV0ZVNlcnZpY2UoJ2NhJywgJ0Rhc2hDQScpOyB9KTtcblxuICAvLyBXaW5kb3cgZXhwb3J0c1xuICB3aW5kb3cubG9hZFNlcnZpY2VzID0gbG9hZFNlcnZpY2VzO1xuICB3aW5kb3cuYnVpbGRHcmlkID0gYnVpbGRHcmlkO1xuICB3aW5kb3cucmVmcmVzaEFsbCA9IHJlZnJlc2hBbGw7XG4gIHdpbmRvdy5zZXRRdWljayA9IHNldFF1aWNrO1xuICB3aW5kb3cuc2V0QmFkZ2UgPSBzZXRCYWRnZTtcbiAgd2luZG93LmdldFJlc3BvbnNlVGltZUNsYXNzID0gZ2V0UmVzcG9uc2VUaW1lQ2xhc3M7XG4gIHdpbmRvdy5jaGVja1NlcnZpY2VXaXRoVGltaW5nID0gY2hlY2tTZXJ2aWNlV2l0aFRpbWluZztcbiAgd2luZG93LnNlcnZpY2VVcmwgPSBzZXJ2aWNlVXJsO1xuICB3aW5kb3cuZWwgPSBlbDtcblxufSkoKTtcbjtcbi8vID09PT09PT09PT0gRE5TIE1BTkFHRU1FTlQgPT09PT09PT09PVxuKGZ1bmN0aW9uICgpIHtcbiAgLy8gUmVzdGFydCBETlMgc2VydmljZSB2aWEgYmFja2VuZCBwcm94eSAoYmFja2VuZCBoYW5kbGVzIGF1dGggYXV0b21hdGljYWxseSlcbiAgYXN5bmMgZnVuY3Rpb24gcmVzdGFydERuc1NlcnZpY2UoZG5zSWQpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL2Rucy9yZXN0YXJ0LyR7ZG5zSWR9YCwgeyBtZXRob2Q6ICdQT1NUJyB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvciB8fCAnUmVzdGFydCBmYWlsZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEV2ZW50IGRlbGVnYXRpb24gZm9yIEROUyByZXN0YXJ0IGJ1dHRvbnMgKGR5bmFtaWMgY2FyZHMpXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b3AnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoZSkgPT4ge1xuICAgIGNvbnN0IHJlc3RhcnRCdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbaWQkPVwiLXJlc3RhcnRcIl0nKTtcbiAgICBpZiAoIXJlc3RhcnRCdG4pIHJldHVybjtcbiAgICBjb25zdCBkbnNJZCA9IHJlc3RhcnRCdG4uaWQucmVwbGFjZSgnLXJlc3RhcnQnLCAnJyk7XG4gICAgaWYgKCFTSVRFLmRuc1NlcnZlcnNbZG5zSWRdKSByZXR1cm47XG4gICAgaWYgKCFjb25maXJtKGBSZXN0YXJ0ICR7ZG5zSWQudG9VcHBlckNhc2UoKX0gc2VydmljZT9gKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3aXRoQnV0dG9uKHJlc3RhcnRCdG4sICcuLi4nLCAoKSA9PiByZXN0YXJ0RG5zU2VydmljZShkbnNJZCkpO1xuICAgICAgc2V0VGltZW91dCh3aW5kb3cucmVmcmVzaEFsbCwgREMuREVMQVlTLlJFTE9BRCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2hvd05vdGlmaWNhdGlvbignUmVzdGFydCBmYWlsZWQ6ICcgKyBlLm1lc3NhZ2UsICdlcnJvcicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gRE5TIFVwZGF0ZSBidXR0b25zXG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZURuc1NlcnZlcihkbnNJZCwgc2VydmVySXApIHtcbiAgICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tdXBkYXRlYCk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYnRuPy50ZXh0Q29udGVudCB8fCAnXHUyQjA2XHVGRTBGJztcblxuICAgIHRyeSB7XG4gICAgICAvLyBGaXJzdCBjaGVjayBmb3IgdXBkYXRlc1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1REQwRCc7XG4gICAgICBidG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgYnRuLnRpdGxlID0gJ0NoZWNraW5nIGZvciB1cGRhdGVzLi4uJztcblxuICAgICAgY29uc3QgY2hlY2tSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL2Rucy9jaGVjay11cGRhdGU/c2VydmVyPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlcnZlcklwKX1gKTtcbiAgICAgIGNvbnN0IGNoZWNrUmVzdWx0ID0gYXdhaXQgY2hlY2tSZXNwb25zZS5qc29uKCk7XG5cbiAgICAgIGlmICghY2hlY2tSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hlY2tSZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBjaGVjayBmb3IgdXBkYXRlcycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNoZWNrUmVzdWx0LnVwZGF0ZUF2YWlsYWJsZSkge1xuICAgICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyNzA1JztcbiAgICAgICAgYnRuLnRpdGxlID0gYEFscmVhZHkgb24gbGF0ZXN0IHZlcnNpb24gKCR7Y2hlY2tSZXN1bHQuY3VycmVudFZlcnNpb259KWA7XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24oYCR7ZG5zSWQudG9VcHBlckNhc2UoKX0gaXMgYWxyZWFkeSB1cCB0byBkYXRlISBDdXJyZW50IHZlcnNpb246ICR7Y2hlY2tSZXN1bHQuY3VycmVudFZlcnNpb259YCwgJ2luZm8nKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0O1xuICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIGJ0bi50aXRsZSA9ICdVcGRhdGUgRE5TIHNlcnZlcic7XG4gICAgICAgIH0sIDMwMDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBhdmFpbGFibGUgLSBjb25maXJtIHdpdGggdXNlclxuICAgICAgY29uc3QgY29uZmlybVVwZGF0ZSA9IGNvbmZpcm0oXG4gICAgICAgIGBVcGRhdGUgYXZhaWxhYmxlIGZvciAke2Ruc0lkLnRvVXBwZXJDYXNlKCl9IVxcblxcbmAgK1xuICAgICAgICBgQ3VycmVudDogJHtjaGVja1Jlc3VsdC5jdXJyZW50VmVyc2lvbn1cXG5gICtcbiAgICAgICAgYE5ldzogJHtjaGVja1Jlc3VsdC51cGRhdGVWZXJzaW9ufVxcblxcbmAgK1xuICAgICAgICAoY2hlY2tSZXN1bHQudXBkYXRlVGl0bGUgPyBgJHtjaGVja1Jlc3VsdC51cGRhdGVUaXRsZX1cXG5cXG5gIDogJycpICtcbiAgICAgICAgYFRoZSBETlMgc2VydmVyIHdpbGwgcmVzdGFydCBkdXJpbmcgdGhlIHVwZGF0ZS5cXG5Qcm9jZWVkP2BcbiAgICAgICk7XG5cbiAgICAgIGlmICghY29uZmlybVVwZGF0ZSkge1xuICAgICAgICBidG4udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7XG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBidG4udGl0bGUgPSAnVXBkYXRlIEROUyBzZXJ2ZXInO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIHVwZGF0ZVxuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1REQwNCc7XG4gICAgICBidG4udGl0bGUgPSAnVXBkYXRpbmcuLi4nO1xuXG4gICAgICBjb25zdCB1cGRhdGVSZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL2Rucy91cGRhdGU/c2VydmVyPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlcnZlcklwKX1gLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZVJlc3VsdCA9IGF3YWl0IHVwZGF0ZVJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgaWYgKCF1cGRhdGVSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodXBkYXRlUmVzdWx0LmVycm9yIHx8ICdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGRhdGVSZXN1bHQubWFudWFsVXBkYXRlUmVxdWlyZWQpIHtcbiAgICAgICAgLy8gVGVjaG5pdGl1bSB2MTQrIGRvZXNuJ3Qgc3VwcG9ydCBhdXRvLWluc3RhbGwgdmlhIEFQSVxuICAgICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyQjA2XHVGRTBGJztcbiAgICAgICAgYnRuLnRpdGxlID0gYFVwZGF0ZSBhdmFpbGFibGU6ICR7dXBkYXRlUmVzdWx0Lm5ld1ZlcnNpb259YDtcbiAgICAgICAgY29uc3QgZG93bmxvYWRJbmZvID0gdXBkYXRlUmVzdWx0LmRvd25sb2FkTGlua1xuICAgICAgICAgID8gYFxcbkRvd25sb2FkOiAke3VwZGF0ZVJlc3VsdC5kb3dubG9hZExpbmt9YFxuICAgICAgICAgIDogJyc7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uc0luZm8gPSB1cGRhdGVSZXN1bHQuaW5zdHJ1Y3Rpb25zTGlua1xuICAgICAgICAgID8gYFxcbkluc3RydWN0aW9uczogJHt1cGRhdGVSZXN1bHQuaW5zdHJ1Y3Rpb25zTGlua31gXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgc2hvd05vdGlmaWNhdGlvbihgJHtkbnNJZC50b1VwcGVyQ2FzZSgpfSB1cGRhdGUgcmVxdWlyZXMgbWFudWFsIGluc3RhbGxhdGlvbi4gQ3VycmVudDogJHt1cGRhdGVSZXN1bHQucHJldmlvdXNWZXJzaW9ufSBcdTIxOTIgJHt1cGRhdGVSZXN1bHQubmV3VmVyc2lvbn0uIFBsZWFzZSB1cGRhdGUgbWFudWFsbHkgb24gdGhlIGhvc3QgbWFjaGluZS5gLCAnd2FybmluZycsIDgwMDApO1xuICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyNzA1JztcbiAgICAgIGJ0bi50aXRsZSA9ICdVcGRhdGVkIHN1Y2Nlc3NmdWxseSEnO1xuICAgICAgc2hvd05vdGlmaWNhdGlvbihgJHtkbnNJZC50b1VwcGVyQ2FzZSgpfSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEgJHt1cGRhdGVSZXN1bHQucHJldmlvdXNWZXJzaW9ufSBcdTIxOTIgJHt1cGRhdGVSZXN1bHQubmV3VmVyc2lvbn0uIFNlcnZlciBpcyByZXN0YXJ0aW5nLi4uYCwgJ3N1Y2Nlc3MnKTtcblxuICAgICAgLy8gUmVmcmVzaCBhZnRlciBkZWxheSBmb3Igc2VydmVyIHJlc3RhcnRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBidG4udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7XG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBidG4udGl0bGUgPSAnVXBkYXRlIEROUyBzZXJ2ZXInO1xuICAgICAgICB3aW5kb3cucmVmcmVzaEFsbCgpO1xuICAgICAgfSwgMTAwMDApO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ROUyB1cGRhdGUgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1Mjc0Qyc7XG4gICAgICBidG4udGl0bGUgPSAnVXBkYXRlIGZhaWxlZCc7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKGBGYWlsZWQgdG8gdXBkYXRlICR7ZG5zSWQudG9VcHBlckNhc2UoKX06ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBidG4udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7XG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBidG4udGl0bGUgPSAnVXBkYXRlIEROUyBzZXJ2ZXInO1xuICAgICAgfSwgMzAwMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRXZlbnQgZGVsZWdhdGlvbiBmb3IgRE5TIHVwZGF0ZSBidXR0b25zIChkeW5hbWljIGNhcmRzKVxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9wJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICBjb25zdCB1cGRhdGVCdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbaWQkPVwiLXVwZGF0ZVwiXScpO1xuICAgIGlmICghdXBkYXRlQnRuKSByZXR1cm47XG4gICAgY29uc3QgZG5zSWQgPSB1cGRhdGVCdG4uaWQucmVwbGFjZSgnLXVwZGF0ZScsICcnKTtcbiAgICBpZiAoIVNJVEUuZG5zU2VydmVyc1tkbnNJZF0pIHJldHVybjtcbiAgICB1cGRhdGVEbnNTZXJ2ZXIoZG5zSWQsIFNJVEUuZG5zU2VydmVyc1tkbnNJZF0/LmlwKTtcbiAgfSk7XG5cbiAgLy8gPT09PT0gRE5TIFNFVFRJTkdTIE1PREFMID09PT09XG5cbiAgLy8gSW5qZWN0IG1vZGFsIEhUTUxcbiAgaW5qZWN0TW9kYWwoJ2Rucy1zZXR0aW5ncy1tb2RhbCcsIGBcbiAgPGRpdiBpZD1cImRucy1zZXR0aW5ncy1tb2RhbFwiIGNsYXNzPVwid2VhdGhlci1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWNvbnRlbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNDIwcHg7IG1heC13aWR0aDogNTIwcHg7XCI+XG4gICAgICA8aDMgaWQ9XCJkbnMtc2V0dGluZ3MtdGl0bGVcIj5ETlMgU2V0dGluZ3M8L2gzPlxuXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZ3JpZDsgZ2FwOiAxNnB4OyBtYXJnaW4tdG9wOiAxNnB4O1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJkbnMtZWRpdC1pcFwiIGNsYXNzPVwiZm9ybS1sYWJlbC1hY2NlbnQtc21cIj5TZXJ2ZXIgSVA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZG5zLWVkaXQtaXBcIiBjbGFzcz1cImZvcm0taW5wdXQtbWRcIiBwbGFjZWhvbGRlcj1cIjE5Mi4xNjguMS4xXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImRucy1lZGl0LXBvcnRcIiBjbGFzcz1cImZvcm0tbGFiZWwtYWNjZW50LXNtXCI+UG9ydDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImRucy1lZGl0LXBvcnRcIiBjbGFzcz1cImZvcm0taW5wdXQtbWRcIiBwbGFjZWhvbGRlcj1cIjUzODBcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZG5zLWVkaXQtbmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbC1hY2NlbnQtc21cIj5EaXNwbGF5IE5hbWUgKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJkbnMtZWRpdC1uYW1lXCIgY2xhc3M9XCJmb3JtLWlucHV0LW1kXCIgcGxhY2Vob2xkZXI9XCJlLmcuIFByaW1hcnkgRE5TXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhpbnQtc21cIj5NYW5hZ2UgY3JlZGVudGlhbHMgdmlhIFRva2VucyBpbiB0aGUgdG9vbGJhcjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWJ1dHRvbnNcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDI0cHg7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJkbnMtc2V0dGluZ3MtY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gaWQ9XCJkbnMtc2V0dGluZ3MtZGVsZXRlXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgI2U3NGMzYyAyMCUsIHRyYW5zcGFyZW50KTsgYm9yZGVyLWNvbG9yOiAjZTc0YzNjOyBjb2xvcjogI2U3NGMzYztcIj5SZW1vdmU8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImRucy1zZXR0aW5ncy1zYXZlXCIgY2xhc3M9XCJidG4tYWNjZW50XCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PmApO1xuXG4gIGxldCBjdXJyZW50RG5zSWQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIG9wZW5EbnNTZXR0aW5ncyhkbnNJZCkge1xuICAgIGN1cnJlbnREbnNJZCA9IGRuc0lkO1xuICAgIGNvbnN0IHNlcnZlciA9IFNJVEUuZG5zU2VydmVyc1tkbnNJZF0gfHwge307XG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLW1vZGFsJyk7XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLXRpdGxlJykudGV4dENvbnRlbnQgPSBgJHsoc2VydmVyLm5hbWUgfHwgZG5zSWQpLnRvVXBwZXJDYXNlKCl9IFNldHRpbmdzYDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWVkaXQtaXAnKS52YWx1ZSA9IHNlcnZlci5pcCB8fCAnJztcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWVkaXQtcG9ydCcpLnZhbHVlID0gc2VydmVyLnBvcnQgfHwgREMuREVGQVVMVFMuRE5TX1BPUlQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rucy1lZGl0LW5hbWUnKS52YWx1ZSA9IHNlcnZlci5uYW1lIHx8ICcnO1xuXG4gICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2F2ZURuc1NldHRpbmdzKCkge1xuICAgIGlmICghY3VycmVudERuc0lkKSByZXR1cm47XG4gICAgY29uc3QgaXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWVkaXQtaXAnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgcG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkbnMtZWRpdC1wb3J0JykudmFsdWUudHJpbSgpIHx8IERDLkRFRkFVTFRTLkROU19QT1JUO1xuICAgIGNvbnN0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWVkaXQtbmFtZScpLnZhbHVlLnRyaW0oKTtcblxuICAgIGlmICghaXApIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ1NlcnZlciBJUCBpcyByZXF1aXJlZCcsICd3YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlID0geyBkbnNTZXJ2ZXJzOiB7fSB9O1xuICAgIHVwZGF0ZS5kbnNTZXJ2ZXJzW2N1cnJlbnREbnNJZF0gPSB7IGlwLCBwb3J0OiBTdHJpbmcocG9ydCkgfTtcbiAgICBpZiAobmFtZSkgdXBkYXRlLmRuc1NlcnZlcnNbY3VycmVudERuc0lkXS5uYW1lID0gbmFtZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2NvbmZpZycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh1cGRhdGUpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBTSVRFLmRuc1NlcnZlcnNbY3VycmVudERuc0lkXSA9IHVwZGF0ZS5kbnNTZXJ2ZXJzW2N1cnJlbnREbnNJZF07XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24oYCR7Y3VycmVudERuc0lkLnRvVXBwZXJDYXNlKCl9IHNldHRpbmdzIHNhdmVkYCwgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgY2xvc2VEbnNTZXR0aW5ncygpO1xuICAgICAgICB3aW5kb3cucmVmcmVzaEFsbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvd05vdGlmaWNhdGlvbihyZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIHNldHRpbmdzJywgJ2Vycm9yJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdGYWlsZWQgdG8gc2F2ZTogJyArIGVyci5tZXNzYWdlLCAnZXJyb3InKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZW1vdmVEbnNTZXJ2ZXIoKSB7XG4gICAgaWYgKCFjdXJyZW50RG5zSWQpIHJldHVybjtcbiAgICBpZiAoIWNvbmZpcm0oYFJlbW92ZSAke2N1cnJlbnREbnNJZC50b1VwcGVyQ2FzZSgpfSBmcm9tIGRhc2hib2FyZD8gVGhpcyB3b24ndCBhZmZlY3QgdGhlIGFjdHVhbCBETlMgc2VydmVyLmApKSByZXR1cm47XG5cbiAgICAvLyBSZW1vdmUgYnkgc2V0dGluZyB0byBudWxsIGluIGRuc1NlcnZlcnNcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2NvbmZpZycpO1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVzcC5qc29uKCk7XG4gICAgICBpZiAoY29uZmlnLmRuc1NlcnZlcnMpIHtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5kbnNTZXJ2ZXJzW2N1cnJlbnREbnNJZF07XG4gICAgICB9XG4gICAgICBjb25zdCBzYXZlUmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2NvbmZpZycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGRuc1NlcnZlcnM6IGNvbmZpZy5kbnNTZXJ2ZXJzIHx8IHt9IH0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhdmVSZXNwLmpzb24oKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBkZWxldGUgU0lURS5kbnNTZXJ2ZXJzW2N1cnJlbnREbnNJZF07XG4gICAgICAgIC8vIFJlbW92ZSBjYXJkIGZyb20gRE9NXG4gICAgICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAudG9wIFtkYXRhLWFwcD1cIiR7Y3VycmVudERuc0lkfVwiXWApO1xuICAgICAgICBpZiAoY2FyZCkgY2FyZC5yZW1vdmUoKTtcbiAgICAgICAgc2hvd05vdGlmaWNhdGlvbihgJHtjdXJyZW50RG5zSWQudG9VcHBlckNhc2UoKX0gcmVtb3ZlZCBmcm9tIGRhc2hib2FyZGAsICdzdWNjZXNzJyk7XG4gICAgICAgIGNsb3NlRG5zU2V0dGluZ3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24ocmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gcmVtb3ZlJywgJ2Vycm9yJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdGYWlsZWQgdG8gcmVtb3ZlOiAnICsgZXJyLm1lc3NhZ2UsICdlcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlRG5zU2V0dGluZ3MoKSB7XG4gICAgY2xvc2VNb2RhbCgnZG5zLXNldHRpbmdzLW1vZGFsJyk7XG4gICAgY3VycmVudERuc0lkID0gbnVsbDtcbiAgfVxuXG4gIC8vIEV2ZW50IGxpc3RlbmVycyBmb3IgbW9kYWwgYnV0dG9uc1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLWNhbmNlbCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlRG5zU2V0dGluZ3MpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLXNhdmUnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzYXZlRG5zU2V0dGluZ3MpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLWRlbGV0ZScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZURuc1NlcnZlcik7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkbnMtc2V0dGluZ3MtbW9kYWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldC5pZCA9PT0gJ2Rucy1zZXR0aW5ncy1tb2RhbCcpIGNsb3NlRG5zU2V0dGluZ3MoKTtcbiAgfSk7XG4gIC8vIEV2ZW50IGRlbGVnYXRpb24gZm9yIEROUyBzZXR0aW5ncyBidXR0b25zIChkeW5hbWljIGNhcmRzKVxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9wJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICBjb25zdCBzZXR0aW5nc0J0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tpZCQ9XCItc2V0dGluZ3NcIl0nKTtcbiAgICBpZiAoIXNldHRpbmdzQnRuKSByZXR1cm47XG4gICAgY29uc3QgZG5zSWQgPSBzZXR0aW5nc0J0bi5pZC5yZXBsYWNlKCctc2V0dGluZ3MnLCAnJyk7XG4gICAgaWYgKCFTSVRFLmRuc1NlcnZlcnNbZG5zSWRdKSByZXR1cm47XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBvcGVuRG5zU2V0dGluZ3MoZG5zSWQpO1xuICB9KTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVmcmVzaCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHdpbmRvdy5yZWZyZXNoQWxsKTtcbn0pKCk7XG47XG4vLyA9PT09PT09PT09IExPRyBWSUVXRVJTID09PT09PT09PT1cbihmdW5jdGlvbiAoKSB7XG5cbiAgLy8gSW5qZWN0IGxvZ3MtbW9kYWwgSFRNTFxuICBpbmplY3RNb2RhbCgnbG9ncy1tb2RhbCcsIGBcbiAgPGRpdiBpZD1cImxvZ3MtbW9kYWxcIiBjbGFzcz1cImxvZ3MtbW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9ncy1tb2RhbC1jb250ZW50XCIgc3R5bGU9XCJtaW4td2lkdGg6IDgwMHB4OyBtYXgtd2lkdGg6IDEwMDBweDtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dzLWhlYWRlclwiPlxuICAgICAgICA8aDMgaWQ9XCJsb2dzLXRpdGxlXCI+RE5TIExvZ3M8L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9ncy1jb250cm9sc1wiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJsb2ctbGluZXNcIj5TaG93OjwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdCBpZD1cImxvZy1saW5lc1wiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjI1XCIgc2VsZWN0ZWQ+MjU8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI1MFwiPjUwPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjAwXCI+MjAwPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImxvZ3Mtc3RyZWFtXCIgY2xhc3M9XCJzdHJlYW0tYnRuXCIgdGl0bGU9XCJFbmFibGUgcmVhbC10aW1lIHN0cmVhbWluZ1wiPlx1RDgzRFx1RENFMSBMaXZlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImxvZ3MtcGF1c2VcIiBjbGFzcz1cInBhdXNlLWJ0blwiPlx1MjNGOFx1RkUwRiBQYXVzZTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gaWQ9XCJsb2dzLWNsb3NlXCIgY2xhc3M9XCJjbG9zZS1idG5cIj5cdTI3MTU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dzLWNvbnRhaW5lciBzY3JvbGwtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJsb2dzLWNvbnRlbnRcIiBjbGFzcz1cImxvZ3MtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dzLWxvYWRpbmdcIj5Mb2FkaW5nIGxvZ3MuLi48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCk7XG5cbiAgLy8gPT09PT0gU3RhdGUgPT09PT1cbiAgbGV0IGN1cnJlbnREbnNTZXJ2aWNlID0gbnVsbDtcbiAgbGV0IGxvZ3NJbnRlcnZhbCA9IG51bGw7XG4gIGxldCBsb2dzUGF1c2VkID0gZmFsc2U7XG5cbiAgbGV0IGN1cnJlbnRDb250YWluZXJJZCA9IG51bGw7XG4gIGxldCBjdXJyZW50Q29udGFpbmVyTmFtZSA9IG51bGw7XG4gIGxldCBjb250YWluZXJMb2dzTW9kZSA9IGZhbHNlO1xuXG4gIGxldCBjdXJyZW50TG9nUGF0aCA9IG51bGw7XG4gIGxldCBjdXJyZW50TG9nU2VydmljZU5hbWUgPSBudWxsO1xuICBsZXQgZmlsZUxvZ3NNb2RlID0gZmFsc2U7XG5cbiAgbGV0IGxvZ0V2ZW50U291cmNlID0gbnVsbDtcbiAgbGV0IGlzU3RyZWFtaW5nID0gZmFsc2U7XG5cbiAgLy8gPT09PT0gRE5TIExPR1MgPT09PT1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaERuc0xvZ3MoZG5zSWQsIGxpbmVzID0gMjUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VydmVySVAgPSBnZXREbnNTZXJ2ZXJBZGRyKGRuc0lkKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYC9hcGkvdjEvZG5zL2xvZ3M/c2VydmVyPSR7c2VydmVySVB9JmxpbWl0PSR7bGluZXN9YCwge1xuICAgICAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQubG9ncykge1xuICAgICAgICAgIHJldHVybiB7IGxvZ3M6IHJlc3VsdC5sb2dzLCBjb3VudDogcmVzdWx0LmNvdW50LCBzZXJ2ZXI6IHJlc3VsdC5zZXJ2ZXIgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogcmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZmV0Y2ggbG9ncycgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICByZXR1cm4geyBlcnJvcjogJ0ROUyBhdXRvLWF1dGggZmFpbGVkIC0gY2hlY2sgY3JlZGVudGlhbHMgaW4gc2V0dGluZ3MnIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyBlcnJvcjogYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdETlMgbG9ncyBmZXRjaCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSY29kZUNvbG9yKHJjb2RlKSB7XG4gICAgY29uc3QgY29sb3JzID0ge1xuICAgICAgJ05vRXJyb3InOiAndmFyKC0tb2stZmcpJyxcbiAgICAgICdOT0VSUk9SJzogJ3ZhcigtLW9rLWZnKScsXG4gICAgICAnTnhEb21haW4nOiAndmFyKC0tbXV0ZWQpJyxcbiAgICAgICdOWERPTUFJTic6ICd2YXIoLS1tdXRlZCknLFxuICAgICAgJ1JlZnVzZWQnOiAndmFyKC0tYmFkLWZnKScsXG4gICAgICAnUkVGVVNFRCc6ICd2YXIoLS1iYWQtZmcpJyxcbiAgICAgICdTZXJ2ZXJGYWlsdXJlJzogJyNmMzljMTInLFxuICAgICAgJ1NFUlZGQUlMJzogJyNmMzljMTInXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JzW3Jjb2RlXSB8fCAndmFyKC0tZmcpJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckRuc0xvZ0VudHJ5KGxvZykge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc05hbWUgPSAnbG9nLWVudHJ5JztcbiAgICBkaXYuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDE0MHB4IDExMHB4IDFmciA3MHB4IDgwcHg7IGdhcDogOHB4OyBwYWRkaW5nOiA2cHggMTBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGZvbnQtc2l6ZTogMC44cmVtOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XG5cbiAgICAvLyBJZiB1bnBhcnNlZCByYXcgbG9nXG4gICAgaWYgKGxvZy5wYXJzZWQgPT09IGZhbHNlKSB7XG4gICAgICBkaXYuc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICcxZnInO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMC43NXJlbTtcIj4ke2VzY2FwZUh0bWwobG9nLnJhdyl9PC9zcGFuPmA7XG4gICAgICByZXR1cm4gZGl2O1xuICAgIH1cblxuICAgIGNvbnN0IHJjb2RlQ29sb3IgPSBnZXRSY29kZUNvbG9yKGxvZy5yY29kZSk7XG4gICAgY29uc3QgaXNCbG9ja2VkID0gbG9nLnJjb2RlID09PSAnUmVmdXNlZCcgfHwgbG9nLnJjb2RlID09PSAnUkVGVVNFRCc7XG5cbiAgICBkaXYuaW5uZXJIVE1MID0gYFxuICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDAuNzVyZW07XCI+JHtlc2NhcGVIdG1sKGxvZy50aW1lc3RhbXApfTwvc3Bhbj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtc2l6ZTogMC43NXJlbTtcIiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChsb2cuY2xpZW50KX1cIj4ke2VzY2FwZUh0bWwobG9nLmNsaWVudCl9PC9zcGFuPlxuICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNTAwOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgJHtpc0Jsb2NrZWQgPyAndGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IG9wYWNpdHk6IDAuNjsnIDogJyd9XCIgdGl0bGU9XCIke2VzY2FwZUh0bWwobG9nLmRvbWFpbil9XCI+JHtlc2NhcGVIdG1sKGxvZy5kb21haW4pfTwvc3Bhbj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1zaXplOiAwLjc1cmVtO1wiPiR7ZXNjYXBlSHRtbChsb2cudHlwZSl9PC9zcGFuPlxuICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogJHtyY29kZUNvbG9yfTsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAwLjc1cmVtO1wiPiR7ZXNjYXBlSHRtbChsb2cucmNvZGUpfTwvc3Bhbj5cbiAgICBgO1xuXG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUxvZ3NEaXNwbGF5KCkge1xuICAgIC8vIEhhbmRsZSBmaWxlIGxvZ3MgbW9kZVxuICAgIGlmIChmaWxlTG9nc01vZGUpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUZpbGVMb2dzRGlzcGxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb250YWluZXIgbG9ncyBtb2RlXG4gICAgaWYgKGNvbnRhaW5lckxvZ3NNb2RlKSB7XG4gICAgICBhd2FpdCB1cGRhdGVDb250YWluZXJMb2dzRGlzcGxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBETlMgbG9ncyBtb2RlXG4gICAgaWYgKGxvZ3NQYXVzZWQgfHwgIWN1cnJlbnREbnNTZXJ2aWNlKSByZXR1cm47XG5cbiAgICBjb25zdCBsaW5lcyA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2ctbGluZXMnKS52YWx1ZSk7XG4gICAgY29uc3QgbG9nc0NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1jb250ZW50Jyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hEbnNMb2dzKGN1cnJlbnREbnNTZXJ2aWNlLCBsaW5lcyk7XG5cbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiB2YXIoLS1iYWQtZmcpO1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMS4ycmVtOyBtYXJnaW4tYm90dG9tOiA4cHg7XCI+XHUyNkEwXHVGRTBGIEVycm9yPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PiR7ZXNjYXBlSHRtbChyZXN1bHQuZXJyb3IpfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGhlYWRlciByb3dcbiAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTQwcHggMTEwcHggMWZyIDcwcHggODBweDsgZ2FwOiA4cHg7IHBhZGRpbmc6IDhweCAxMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJhc2UpOyBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tYm9yZGVyKTsgZm9udC1zaXplOiAwLjc1cmVtOyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7XCI+XG4gICAgICAgICAgPHNwYW4+VGltZTwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5DbGllbnQ8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+RG9tYWluPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlR5cGU8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+U3RhdHVzPC9zcGFuPlxuICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBpZiAocmVzdWx0LmxvZ3MgJiYgcmVzdWx0LmxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQubG9ncy5mb3JFYWNoKGxvZyA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nRWxlbWVudCA9IHJlbmRlckRuc0xvZ0VudHJ5KGxvZyk7XG4gICAgICAgICAgbG9nc0NvbnRlbnQuYXBwZW5kQ2hpbGQobG9nRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MICs9IGBcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPlxuICAgICAgICAgICAgTm8gRE5TIHF1ZXJpZXMgbG9nZ2VkIHlldFxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHZhcigtLWJhZC1mZyk7XCI+XG4gICAgICAgICAgRmFpbGVkIHRvIGZldGNoIGxvZ3M6ICR7ZXNjYXBlSHRtbChlcnJvci5tZXNzYWdlKX1cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuTG9nc01vZGFsKGRuc0lkKSB7XG4gICAgY3VycmVudERuc1NlcnZpY2UgPSBkbnNJZDtcbiAgICBsb2dzUGF1c2VkID0gZmFsc2U7XG4gICAgY29udGFpbmVyTG9nc01vZGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtbW9kYWwnKTtcbiAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLXRpdGxlJyk7XG4gICAgY29uc3QgcGF1c2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpO1xuICAgIGNvbnN0IHN0cmVhbUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLXN0cmVhbScpO1xuXG4gICAgdGl0bGUudGV4dENvbnRlbnQgPSBgJHtkbnNJZC50b1VwcGVyQ2FzZSgpfSBETlMgTG9nc2A7XG4gICAgcGF1c2VCdG4udGV4dENvbnRlbnQgPSAnXHUyM0Y4XHVGRTBGIFBhdXNlJztcbiAgICBwYXVzZUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdwYXVzZWQnKTtcblxuICAgIC8vIEhpZGUgc3RyZWFtIGJ1dHRvbiBmb3IgRE5TIGxvZ3MgKG9ubHkgYXZhaWxhYmxlIGZvciBjb250YWluZXIgbG9ncylcbiAgICBpZiAoc3RyZWFtQnRuKSB7XG4gICAgICBzdHJlYW1CdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICAvLyBJbml0aWFsIGxvYWRcbiAgICB1cGRhdGVMb2dzRGlzcGxheSgpO1xuXG4gICAgLy8gU3RhcnQgYXV0by1yZWZyZXNoIGV2ZXJ5IDMgc2Vjb25kc1xuICAgIGxvZ3NJbnRlcnZhbCA9IHNldEludGVydmFsKHVwZGF0ZUxvZ3NEaXNwbGF5LCBEQy5QT0xMLkxPR1MpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VMb2dzTW9kYWwoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1tb2RhbCcpO1xuICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcblxuICAgIGlmIChsb2dzSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwobG9nc0ludGVydmFsKTtcbiAgICAgIGxvZ3NJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU3RvcCBTU0Ugc3RyZWFtaW5nIGlmIGFjdGl2ZVxuICAgIHN0b3BMb2dTdHJlYW1pbmcoKTtcblxuICAgIC8vIFJlc2V0IGFsbCBsb2cgbW9kZXNcbiAgICBjdXJyZW50RG5zU2VydmljZSA9IG51bGw7XG4gICAgY29udGFpbmVyTG9nc01vZGUgPSBmYWxzZTtcbiAgICBjdXJyZW50Q29udGFpbmVySWQgPSBudWxsO1xuICAgIGN1cnJlbnRDb250YWluZXJOYW1lID0gbnVsbDtcbiAgICBmaWxlTG9nc01vZGUgPSBmYWxzZTtcbiAgICBjdXJyZW50TG9nUGF0aCA9IG51bGw7XG4gICAgY3VycmVudExvZ1NlcnZpY2VOYW1lID0gbnVsbDtcbiAgICBsb2dzUGF1c2VkID0gZmFsc2U7XG4gIH1cblxuICAvLyA9PT09PSBTU0UgTE9HIFNUUkVBTUlORyA9PT09PVxuXG4gIGZ1bmN0aW9uIHN0YXJ0TG9nU3RyZWFtaW5nKGNvbnRhaW5lcklkKSB7XG4gICAgaWYgKGxvZ0V2ZW50U291cmNlKSB7XG4gICAgICBzdG9wTG9nU3RyZWFtaW5nKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyZWFtQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3Mtc3RyZWFtJyk7XG4gICAgY29uc3QgcGF1c2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpO1xuICAgIGNvbnN0IGxvZ3NDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtY29udGVudCcpO1xuXG4gICAgLy8gU3RvcCBpbnRlcnZhbC1iYXNlZCByZWZyZXNoXG4gICAgaWYgKGxvZ3NJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChsb2dzSW50ZXJ2YWwpO1xuICAgICAgbG9nc0ludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbG9nRXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoYC9hcGkvdjEvbG9ncy9zdHJlYW0vJHtjb250YWluZXJJZH1gKTtcbiAgICAgIGlzU3RyZWFtaW5nID0gdHJ1ZTtcblxuICAgICAgc3RyZWFtQnRuLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgc3RyZWFtQnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1REQzNCBMaXZlJztcbiAgICAgIHN0cmVhbUJ0bi50aXRsZSA9ICdTdHJlYW1pbmcgLSBjbGljayB0byBzdG9wJztcbiAgICAgIHBhdXNlQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgIC8vIEFkZCBzdHJlYW1pbmcgaW5kaWNhdG9yIHRvIGhlYWRlclxuICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy10aXRsZScpO1xuICAgICAgaWYgKCF0aXRsZS50ZXh0Q29udGVudC5pbmNsdWRlcygnXHVEODNEXHVERDM0JykpIHtcbiAgICAgICAgdGl0bGUuaW5uZXJIVE1MID0gdGl0bGUudGV4dENvbnRlbnQucmVwbGFjZSgnXHVEODNEXHVEQ0NCJywgJ1x1RDgzRFx1RENDQiBcdUQ4M0RcdUREMzQnKTtcbiAgICAgIH1cblxuICAgICAgbG9nRXZlbnRTb3VyY2Uub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG5cbiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU3RyZWFtIGVycm9yOicsIGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgc3RvcExvZ1N0cmVhbWluZygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFwcGVuZCBuZXcgbG9nIGVudHJ5XG4gICAgICAgICAgY29uc3QgZW50cnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBlbnRyeS5jbGFzc05hbWUgPSAnbG9nLWVudHJ5JztcbiAgICAgICAgICBlbnRyeS5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6IGZsZXg7IGdhcDogMTJweDsgcGFkZGluZzogNnB4IDEwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBmb250LXNpemU6IDAuOHJlbTsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7JztcblxuICAgICAgICAgIGNvbnN0IHN0cmVhbVR5cGUgPSBkYXRhLnN0cmVhbSB8fCAnc3Rkb3V0JztcbiAgICAgICAgICBjb25zdCBpc0Vycm9yID0gc3RyZWFtVHlwZSA9PT0gJ3N0ZGVycic7XG4gICAgICAgICAgY29uc3QgbGV2ZWxDb2xvciA9IGlzRXJyb3IgPyAndmFyKC0tYmFkLWZnKScgOiAndmFyKC0tZmcpJztcbiAgICAgICAgICBjb25zdCBiZ0NvbG9yID0gaXNFcnJvciA/ICd2YXIoLS1iYWQtYmcpJyA6ICd2YXIoLS1vay1iZyknO1xuICAgICAgICAgIGNvbnN0IGxldmVsQmFkZ2UgPSBgPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiAke2JnQ29sb3J9OyBjb2xvcjogJHtsZXZlbENvbG9yfTsgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDAuN3JlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbWluLXdpZHRoOiA1MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+JHtpc0Vycm9yID8gJ1NUREVSUicgOiAnU1RET1VUJ308L3NwYW4+YDtcblxuICAgICAgICAgIGVudHJ5LmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LXNocmluazogMDtcIj4ke2xldmVsQmFkZ2V9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTsgY29sb3I6ICR7bGV2ZWxDb2xvcn07IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgd2hpdGUtc3BhY2U6IHByZS13cmFwO1wiPiR7ZXNjYXBlSHRtbChkYXRhLnRleHQpfTwvZGl2PlxuICAgICAgICAgIGA7XG5cbiAgICAgICAgICBsb2dzQ29udGVudC5hcHBlbmRDaGlsZChlbnRyeSk7XG5cbiAgICAgICAgICAvLyBBdXRvLXNjcm9sbCB0byBib3R0b21cbiAgICAgICAgICBsb2dzQ29udGVudC5zY3JvbGxUb3AgPSBsb2dzQ29udGVudC5zY3JvbGxIZWlnaHQ7XG5cbiAgICAgICAgICAvLyBMaW1pdCBlbnRyaWVzIHRvIHByZXZlbnQgbWVtb3J5IGlzc3VlcyAoa2VlcCBsYXN0IDUwMClcbiAgICAgICAgICB3aGlsZSAobG9nc0NvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoID4gNTAwKSB7XG4gICAgICAgICAgICBsb2dzQ29udGVudC5yZW1vdmVDaGlsZChsb2dzQ29udGVudC5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgc3RyZWFtIGRhdGE6JywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgbG9nRXZlbnRTb3VyY2Uub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXZlbnRTb3VyY2UgZXJyb3I6JywgZXJyKTtcbiAgICAgICAgc3RvcExvZ1N0cmVhbWluZygpO1xuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHN0cmVhbWluZzonLCBlcnIpO1xuICAgICAgc3RvcExvZ1N0cmVhbWluZygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BMb2dTdHJlYW1pbmcoKSB7XG4gICAgaWYgKGxvZ0V2ZW50U291cmNlKSB7XG4gICAgICBsb2dFdmVudFNvdXJjZS5jbG9zZSgpO1xuICAgICAgbG9nRXZlbnRTb3VyY2UgPSBudWxsO1xuICAgIH1cbiAgICBpc1N0cmVhbWluZyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RyZWFtQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3Mtc3RyZWFtJyk7XG4gICAgY29uc3QgcGF1c2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpO1xuICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtdGl0bGUnKTtcblxuICAgIGlmIChzdHJlYW1CdG4pIHtcbiAgICAgIHN0cmVhbUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgIHN0cmVhbUJ0bi50ZXh0Q29udGVudCA9ICdcdUQ4M0RcdURDRTEgTGl2ZSc7XG4gICAgICBzdHJlYW1CdG4udGl0bGUgPSAnRW5hYmxlIHJlYWwtdGltZSBzdHJlYW1pbmcnO1xuICAgIH1cblxuICAgIGlmIChwYXVzZUJ0bikge1xuICAgICAgcGF1c2VCdG4uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIH1cblxuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSB0aXRsZS50ZXh0Q29udGVudC5yZXBsYWNlKCcgXHVEODNEXHVERDM0JywgJycpO1xuICAgIH1cblxuICAgIC8vIFJlc3RhcnQgaW50ZXJ2YWwtYmFzZWQgcmVmcmVzaCBpZiBjb250YWluZXIgbG9ncyBtb2RhbCBpcyBvcGVuXG4gICAgaWYgKGNvbnRhaW5lckxvZ3NNb2RlICYmIGN1cnJlbnRDb250YWluZXJJZCAmJiAhbG9nc0ludGVydmFsKSB7XG4gICAgICBsb2dzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh1cGRhdGVDb250YWluZXJMb2dzRGlzcGxheSwgREMuUE9MTC5MT0dTKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PSBDT05UQUlORVIgTE9HUyA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoQ29udGFpbmVyTG9ncyhjb250YWluZXJJZCwgbGluZXMgPSAxMDApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBgL2FwaS92MS9sb2dzL2NvbnRhaW5lci8ke2NvbnRhaW5lcklkfT90YWlsPSR7bGluZXN9JnRpbWVzdGFtcHM9dHJ1ZWA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kcG9pbnQsIHtcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZScsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmxvZ3MpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9nczogcmVzdWx0LmxvZ3MsXG4gICAgICAgICAgICBjb3VudDogcmVzdWx0LmNvdW50LFxuICAgICAgICAgICAgY29udGFpbmVyTmFtZTogcmVzdWx0LmNvbnRhaW5lck5hbWUsXG4gICAgICAgICAgICBjb250YWluZXJJZDogcmVzdWx0LmNvbnRhaW5lcklkXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogcmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZmV0Y2ggY29udGFpbmVyIGxvZ3MnIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvbnRhaW5lciBsb2dzIGZldGNoIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4geyBlcnJvcjogZXJyb3IubWVzc2FnZSB9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckNvbnRhaW5lckxvZ0VudHJ5KGxvZykge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc05hbWUgPSAnbG9nLWVudHJ5JztcbiAgICBkaXYuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBmbGV4OyBnYXA6IDEycHg7IHBhZGRpbmc6IDZweCAxMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgZm9udC1zaXplOiAwLjhyZW07IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBmb250LWZhbWlseTogbW9ub3NwYWNlOyc7XG5cbiAgICBjb25zdCBzdHJlYW1Db2xvciA9IGxvZy5zdHJlYW0gPT09ICdzdGRlcnInID8gJ3ZhcigtLWJhZC1mZyknIDogJ3ZhcigtLWZnKSc7XG4gICAgY29uc3Qgc3RyZWFtQmFkZ2UgPSBsb2cuc3RyZWFtID09PSAnc3RkZXJyJyA/XG4gICAgICAnPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiB2YXIoLS1iYWQtYmcpOyBjb2xvcjogdmFyKC0tYmFkLWZnKTsgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDAuN3JlbTsgZm9udC13ZWlnaHQ6IDYwMDtcIj5TVERFUlI8L3NwYW4+JyA6XG4gICAgICAnPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiB2YXIoLS1vay1iZyk7IGNvbG9yOiB2YXIoLS1vay1mZyk7IHBhZGRpbmc6IDJweCA2cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgZm9udC1zaXplOiAwLjdyZW07IGZvbnQtd2VpZ2h0OiA2MDA7XCI+U1RET1VUPC9zcGFuPic7XG5cbiAgICBkaXYuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBzdHlsZT1cImZsZXgtc2hyaW5rOiAwO1wiPiR7c3RyZWFtQmFkZ2V9PC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTsgY29sb3I6ICR7c3RyZWFtQ29sb3J9OyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcIj4ke2VzY2FwZUh0bWwobG9nLnRleHQpfTwvZGl2PlxuICAgIGA7XG5cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyTG9nc0Rpc3BsYXkoKSB7XG4gICAgaWYgKGxvZ3NQYXVzZWQgfHwgIWN1cnJlbnRDb250YWluZXJJZCB8fCAhY29udGFpbmVyTG9nc01vZGUpIHJldHVybjtcblxuICAgIGNvbnN0IGxpbmVzID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZy1saW5lcycpLnZhbHVlKTtcbiAgICBjb25zdCBsb2dzQ29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLWNvbnRlbnQnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaENvbnRhaW5lckxvZ3MoY3VycmVudENvbnRhaW5lcklkLCBsaW5lcyk7XG5cbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiB2YXIoLS1iYWQtZmcpO1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMS4ycmVtOyBtYXJnaW4tYm90dG9tOiA4cHg7XCI+XHUyNkEwXHVGRTBGIEVycm9yPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PiR7ZXNjYXBlSHRtbChyZXN1bHQuZXJyb3IpfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGhlYWRlciByb3dcbiAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMTJweDsgcGFkZGluZzogOHB4IDEwcHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBmb250LXNpemU6IDAuNzVyZW07IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHBvc2l0aW9uOiBzdGlja3k7IHRvcDogMDtcIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXgtc2hyaW5rOiAwOyB3aWR0aDogODBweDtcIj5TdHJlYW08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OiAxO1wiPkxvZyBPdXRwdXQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PmA7XG5cbiAgICAgIGlmIChyZXN1bHQubG9ncyAmJiByZXN1bHQubG9ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdC5sb2dzLmZvckVhY2gobG9nID0+IHtcbiAgICAgICAgICBjb25zdCBsb2dFbGVtZW50ID0gcmVuZGVyQ29udGFpbmVyTG9nRW50cnkobG9nKTtcbiAgICAgICAgICBsb2dzQ29udGVudC5hcHBlbmRDaGlsZChsb2dFbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQXV0by1zY3JvbGwgdG8gYm90dG9tXG4gICAgICAgIGxvZ3NDb250ZW50LnNjcm9sbFRvcCA9IGxvZ3NDb250ZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCArPSBgXG4gICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHZhcigtLW11dGVkKTtcIj5cbiAgICAgICAgICAgIE5vIGxvZ3MgYXZhaWxhYmxlIGZvciB0aGlzIGNvbnRhaW5lclxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHZhcigtLWJhZC1mZyk7XCI+XG4gICAgICAgICAgRmFpbGVkIHRvIGZldGNoIGxvZ3M6ICR7ZXNjYXBlSHRtbChlcnJvci5tZXNzYWdlKX1cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29udGFpbmVyTG9nc01vZGFsKGNvbnRhaW5lcklkLCBjb250YWluZXJOYW1lKSB7XG4gICAgY3VycmVudENvbnRhaW5lcklkID0gY29udGFpbmVySWQ7XG4gICAgY3VycmVudENvbnRhaW5lck5hbWUgPSBjb250YWluZXJOYW1lO1xuICAgIGNvbnRhaW5lckxvZ3NNb2RlID0gdHJ1ZTtcbiAgICBmaWxlTG9nc01vZGUgPSBmYWxzZTtcbiAgICBsb2dzUGF1c2VkID0gZmFsc2U7XG5cbiAgICAvLyBTdG9wIGFueSBleGlzdGluZyBzdHJlYW1pbmdcbiAgICBzdG9wTG9nU3RyZWFtaW5nKCk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLW1vZGFsJyk7XG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy10aXRsZScpO1xuICAgIGNvbnN0IHBhdXNlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtcGF1c2UnKTtcbiAgICBjb25zdCBzdHJlYW1CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1zdHJlYW0nKTtcblxuICAgIHRpdGxlLnRleHRDb250ZW50ID0gYFx1RDgzRFx1RENDQiAke2NvbnRhaW5lck5hbWV9IC0gQ29udGFpbmVyIExvZ3NgO1xuICAgIHBhdXNlQnRuLnRleHRDb250ZW50ID0gJ1x1MjNGOFx1RkUwRiBQYXVzZSc7XG4gICAgcGF1c2VCdG4uY2xhc3NMaXN0LnJlbW92ZSgncGF1c2VkJyk7XG5cbiAgICAvLyBTaG93IHN0cmVhbSBidXR0b24gZm9yIGNvbnRhaW5lciBsb2dzXG4gICAgaWYgKHN0cmVhbUJ0bikge1xuICAgICAgc3RyZWFtQnRuLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICB9XG5cbiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICAvLyBJbml0aWFsIGxvYWRcbiAgICB1cGRhdGVDb250YWluZXJMb2dzRGlzcGxheSgpO1xuXG4gICAgLy8gU3RhcnQgYXV0by1yZWZyZXNoIGV2ZXJ5IDMgc2Vjb25kc1xuICAgIGxvZ3NJbnRlcnZhbCA9IHNldEludGVydmFsKHVwZGF0ZUNvbnRhaW5lckxvZ3NEaXNwbGF5LCBEQy5QT0xMLkxPR1MpO1xuICB9XG5cbiAgLy8gPT09PT0gRklMRS1CQVNFRCBMT0dTIChmb3IgbmF0aXZlIGFwcHMpID09PT09XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hGaWxlTG9ncyhsb2dQYXRoLCBsaW5lcyA9IDEwMCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IGAvYXBpL3YxL2xvZ3MvZmlsZT9wYXRoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGxvZ1BhdGgpfSZ0YWlsPSR7bGluZXN9YDtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xuICAgICAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQubG9ncykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2dzOiByZXN1bHQubG9ncyxcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHQuY291bnQsXG4gICAgICAgICAgICBsb2dQYXRoOiByZXN1bHQubG9nUGF0aCxcbiAgICAgICAgICAgIHRvdGFsTGluZXM6IHJlc3VsdC50b3RhbExpbmVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogcmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZmV0Y2ggZmlsZSBsb2dzJyB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiByZXN1bHQuZXJyb3IgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGaWxlIGxvZ3MgZmV0Y2ggZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyRmlsZUxvZ0VudHJ5KGxvZykge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc05hbWUgPSAnbG9nLWVudHJ5JztcbiAgICBkaXYuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBmbGV4OyBnYXA6IDEycHg7IHBhZGRpbmc6IDZweCAxMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgZm9udC1zaXplOiAwLjhyZW07IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBmb250LWZhbWlseTogbW9ub3NwYWNlOyc7XG5cbiAgICBjb25zdCB0ZXh0ID0gbG9nLnRleHQ7XG4gICAgbGV0IGxvZ0xldmVsID0gJ0lORk8nO1xuICAgIGxldCBsZXZlbENvbG9yID0gJ3ZhcigtLWZnKSc7XG5cbiAgICBpZiAodGV4dC5tYXRjaCgvRVJST1J8RkFUQUx8Q1JJVElDQUwvaSkpIHtcbiAgICAgIGxvZ0xldmVsID0gJ0VSUk9SJztcbiAgICAgIGxldmVsQ29sb3IgPSAndmFyKC0tYmFkLWZnKSc7XG4gICAgfSBlbHNlIGlmICh0ZXh0Lm1hdGNoKC9XQVJOfFdBUk5JTkcvaSkpIHtcbiAgICAgIGxvZ0xldmVsID0gJ1dBUk4nO1xuICAgICAgbGV2ZWxDb2xvciA9ICcjZjM5YzEyJztcbiAgICB9IGVsc2UgaWYgKHRleHQubWF0Y2goL0RFQlVHL2kpKSB7XG4gICAgICBsb2dMZXZlbCA9ICdERUJVRyc7XG4gICAgICBsZXZlbENvbG9yID0gJ3ZhcigtLW11dGVkKSc7XG4gICAgfVxuXG4gICAgY29uc3QgYmdDb2xvciA9IGxldmVsQ29sb3IgPT09ICd2YXIoLS1iYWQtZmcpJyA/ICd2YXIoLS1iYWQtYmcpJyA6ICd2YXIoLS1vay1iZyknO1xuICAgIGNvbnN0IGxldmVsQmFkZ2UgPSBgPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiAke2JnQ29sb3J9OyBjb2xvcjogJHtsZXZlbENvbG9yfTsgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDAuN3JlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbWluLXdpZHRoOiA1MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+JHtsb2dMZXZlbH08L3NwYW4+YDtcblxuICAgIGRpdi5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleC1zaHJpbms6IDA7XCI+JHtsZXZlbEJhZGdlfTwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7IGNvbG9yOiAke2xldmVsQ29sb3J9OyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcIj4ke2VzY2FwZUh0bWwodGV4dCl9PC9kaXY+XG4gICAgYDtcblxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB1cGRhdGVGaWxlTG9nc0Rpc3BsYXkoKSB7XG4gICAgaWYgKGxvZ3NQYXVzZWQgfHwgIWN1cnJlbnRMb2dQYXRoIHx8ICFmaWxlTG9nc01vZGUpIHJldHVybjtcblxuICAgIGNvbnN0IGxpbmVzID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZy1saW5lcycpLnZhbHVlKTtcbiAgICBjb25zdCBsb2dzQ29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLWNvbnRlbnQnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEZpbGVMb2dzKGN1cnJlbnRMb2dQYXRoLCBsaW5lcyk7XG5cbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiB2YXIoLS1iYWQtZmcpO1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMS4ycmVtOyBtYXJnaW4tYm90dG9tOiA4cHg7XCI+XHUyNkEwXHVGRTBGIEVycm9yPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PiR7ZXNjYXBlSHRtbChyZXN1bHQuZXJyb3IpfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxMnB4OyBwYWRkaW5nOiA4cHggMTBweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iYXNlKTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGZvbnQtc2l6ZTogMC43NXJlbTsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLW11dGVkKTsgcG9zaXRpb246IHN0aWNreTsgdG9wOiAwO1wiPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDogMTtcIj5Mb2cgT3V0cHV0ICgke3Jlc3VsdC5jb3VudH0gb2YgJHtyZXN1bHQudG90YWxMaW5lc30gbGluZXMpPC9zcGFuPlxuICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBpZiAocmVzdWx0LmxvZ3MgJiYgcmVzdWx0LmxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQubG9ncy5mb3JFYWNoKGxvZyA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nRWxlbWVudCA9IHJlbmRlckZpbGVMb2dFbnRyeShsb2cpO1xuICAgICAgICAgIGxvZ3NDb250ZW50LmFwcGVuZENoaWxkKGxvZ0VsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nc0NvbnRlbnQuc2Nyb2xsVG9wID0gbG9nc0NvbnRlbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MICs9IGBcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPlxuICAgICAgICAgICAgTm8gbG9ncyBhdmFpbGFibGUgaW4gdGhpcyBmaWxlXG4gICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tYmFkLWZnKTtcIj5cbiAgICAgICAgICBGYWlsZWQgdG8gZmV0Y2ggbG9nczogJHtlc2NhcGVIdG1sKGVycm9yLm1lc3NhZ2UpfVxuICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5GaWxlTG9nc01vZGFsKGxvZ1BhdGgsIHNlcnZpY2VOYW1lKSB7XG4gICAgY3VycmVudExvZ1BhdGggPSBsb2dQYXRoO1xuICAgIGN1cnJlbnRMb2dTZXJ2aWNlTmFtZSA9IHNlcnZpY2VOYW1lO1xuICAgIGZpbGVMb2dzTW9kZSA9IHRydWU7XG4gICAgY29udGFpbmVyTG9nc01vZGUgPSBmYWxzZTtcbiAgICBsb2dzUGF1c2VkID0gZmFsc2U7XG5cbiAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLW1vZGFsJyk7XG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy10aXRsZScpO1xuICAgIGNvbnN0IHBhdXNlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtcGF1c2UnKTtcbiAgICBjb25zdCBzdHJlYW1CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1zdHJlYW0nKTtcblxuICAgIHRpdGxlLnRleHRDb250ZW50ID0gYFx1RDgzRFx1RENDQiAke3NlcnZpY2VOYW1lfSAtIEFwcGxpY2F0aW9uIExvZ3NgO1xuICAgIHBhdXNlQnRuLnRleHRDb250ZW50ID0gJ1x1MjNGOFx1RkUwRiBQYXVzZSc7XG4gICAgcGF1c2VCdG4uY2xhc3NMaXN0LnJlbW92ZSgncGF1c2VkJyk7XG5cbiAgICAvLyBIaWRlIHN0cmVhbSBidXR0b24gZm9yIGZpbGUgbG9ncyAob25seSBhdmFpbGFibGUgZm9yIGNvbnRhaW5lciBsb2dzKVxuICAgIGlmIChzdHJlYW1CdG4pIHtcbiAgICAgIHN0cmVhbUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcblxuICAgIHVwZGF0ZUZpbGVMb2dzRGlzcGxheSgpO1xuICAgIGxvZ3NJbnRlcnZhbCA9IHNldEludGVydmFsKHVwZGF0ZUZpbGVMb2dzRGlzcGxheSwgREMuUE9MTC5MT0dTKTtcbiAgfVxuXG4gIC8vID09PT09IEVWRU5UIExJU1RFTkVSUyA9PT09PVxuXG4gIC8vIEROUyBsb2cgYnV0dG9ucyBcdTIwMTQgZXZlbnQgZGVsZWdhdGlvbiBmb3IgZHluYW1pYyBjYXJkc1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9wJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICBjb25zdCBsb2dzQnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2lkJD1cIi1sb2dzXCJdJyk7XG4gICAgaWYgKCFsb2dzQnRuKSByZXR1cm47XG4gICAgY29uc3QgZG5zSWQgPSBsb2dzQnRuLmlkLnJlcGxhY2UoJy1sb2dzJywgJycpO1xuICAgIGlmICghU0lURS5kbnNTZXJ2ZXJzW2Ruc0lkXSkgcmV0dXJuO1xuICAgIG9wZW5Mb2dzTW9kYWwoZG5zSWQpO1xuICB9KTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1jbG9zZScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlTG9nc01vZGFsKTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBsb2dzUGF1c2VkID0gIWxvZ3NQYXVzZWQ7XG4gICAgY29uc3QgcGF1c2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpO1xuXG4gICAgaWYgKGxvZ3NQYXVzZWQpIHtcbiAgICAgIHBhdXNlQnRuLnRleHRDb250ZW50ID0gJ1x1MjVCNlx1RkUwRiBSZXN1bWUnO1xuICAgICAgcGF1c2VCdG4uY2xhc3NMaXN0LmFkZCgncGF1c2VkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdXNlQnRuLnRleHRDb250ZW50ID0gJ1x1MjNGOFx1RkUwRiBQYXVzZSc7XG4gICAgICBwYXVzZUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdwYXVzZWQnKTtcbiAgICAgIHVwZGF0ZUxvZ3NEaXNwbGF5KCk7XG4gICAgfVxuICB9KTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nLWxpbmVzJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICBpZiAoIWxvZ3NQYXVzZWQpIHtcbiAgICAgIHVwZGF0ZUxvZ3NEaXNwbGF5KCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTdHJlYW0gYnV0dG9uIGZvciByZWFsLXRpbWUgU1NFIGxvZ3MgKG9ubHkgd29ya3Mgd2l0aCBjb250YWluZXIgbG9ncylcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3Mtc3RyZWFtJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGlmICghY29udGFpbmVyTG9nc01vZGUgfHwgIWN1cnJlbnRDb250YWluZXJJZCkge1xuICAgICAgLy8gU3RyZWFtaW5nIG9ubHkgYXZhaWxhYmxlIGZvciBjb250YWluZXIgbG9nc1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmVhbWluZykge1xuICAgICAgc3RvcExvZ1N0cmVhbWluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydExvZ1N0cmVhbWluZyhjdXJyZW50Q29udGFpbmVySWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQ2xvc2UgbW9kYWwgb24gb3V0c2lkZSBjbGlja1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1tb2RhbCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmlkID09PSAnbG9ncy1tb2RhbCcpIHtcbiAgICAgIGNsb3NlTG9nc01vZGFsKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDbG9zZSBsb2dzLW1vZGFsIG9uIEVzY2FwZSBrZXlcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLW1vZGFsJyk/LmNsYXNzTGlzdC5jb250YWlucygnc2hvdycpKSB7XG4gICAgICAgIGNsb3NlTG9nc01vZGFsKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyA9PT09PSBFWFBPUlRTID09PT09XG4gIHdpbmRvdy5vcGVuQ29udGFpbmVyTG9nc01vZGFsID0gb3BlbkNvbnRhaW5lckxvZ3NNb2RhbDtcbiAgd2luZG93Lm9wZW5GaWxlTG9nc01vZGFsID0gb3BlbkZpbGVMb2dzTW9kYWw7XG4gIHdpbmRvdy5vcGVuTG9nc01vZGFsID0gb3BlbkxvZ3NNb2RhbDtcblxufSkoKTtcbjtcbi8vID09PT09PT09PT0gU0VSVklDRSBNT0RBTCBURU1QTEFURVMgPT09PT09PT09PVxuLy8gSW5qZWN0cyB0aGUgSFRNTCBmb3Igc2VydmljZSBlZGl0LCBkZWxldGUsIGFuZCBhZGQgbW9kYWxzIGludG8gdGhlIERPTS5cbi8vIE11c3QgbG9hZCBiZWZvcmUgc2VydmljZS1jcnVkLmpzIGFuZCBzZXJ2aWNlLWNyZWF0ZS5qcy5cbihmdW5jdGlvbiAoKSB7XG5cbiAgaW5qZWN0TW9kYWwoJ3NlcnZpY2UtZWRpdC1tb2RhbCcsIGBcbiAgPGRpdiBpZD1cInNlcnZpY2UtZWRpdC1tb2RhbFwiIGNsYXNzPVwid2VhdGhlci1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWNvbnRlbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNTAwcHg7IG1heC13aWR0aDogNjAwcHg7XCI+XG4gICAgICA8aDMgaWQ9XCJzZXJ2aWNlLWVkaXQtdGl0bGVcIj5FZGl0IFNlcnZpY2U8L2gzPlxuXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZ3JpZDsgZ2FwOiAxNnB4OyBtYXJnaW4tdG9wOiAxNnB4O1wiPlxuICAgICAgICA8IS0tIFNlcnZpY2UgSW5mbyAtLT5cbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTJweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlci1yYWRpdXM6IDhweDtcIj5cbiAgICAgICAgICA8aW1nIGlkPVwiZWRpdC1zZXJ2aWNlLWxvZ28tcHJldmlld1wiIHNyYz1cIlwiIGFsdD1cIlwiIHN0eWxlPVwid2lkdGg6IDQ4cHg7IGhlaWdodDogNDhweDsgYm9yZGVyLXJhZGl1czogOHB4OyBvYmplY3QtZml0OiBjb250YWluOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZyk7XCIgLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTtcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJlZGl0LXNlcnZpY2UtdXJsLWRpc3BsYXlcIiBjbGFzcz1cInRleHQtbXV0ZWQtc21cIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEaXNwbGF5IE5hbWUgLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImVkaXQtc2VydmljZS1uYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsLWFjY2VudC1zbVwiPlxuICAgICAgICAgICAgRGlzcGxheSBOYW1lXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImVkaXQtc2VydmljZS1uYW1lXCIgY2xhc3M9XCJmb3JtLWlucHV0LW1kXCIgcGxhY2Vob2xkZXI9XCJTZXJ2aWNlIG5hbWUgc2hvd24gb24gZGFzaGJvYXJkXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBTdWJkb21haW4gLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImVkaXQtc3ViZG9tYWluXCIgY2xhc3M9XCJmb3JtLWxhYmVsLWFjY2VudC1zbVwiPlxuICAgICAgICAgICAgU3ViZG9tYWluXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1yb3ctZ2FwLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlZGl0LXN1YmRvbWFpblwiIGNsYXNzPVwiaW5wdXQtZmxleFwiIC8+XG4gICAgICAgICAgICA8c3BhbiBpZD1cImVkaXQtdGxkLXN1ZmZpeFwiIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTtcIj4uaG9tZTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBQb3J0IC0tPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJlZGl0LXBvcnRcIiBjbGFzcz1cImZvcm0tbGFiZWwtYWNjZW50LXNtXCI+XG4gICAgICAgICAgICBQb3J0XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZWRpdC1wb3J0XCIgY2xhc3M9XCJmb3JtLWlucHV0LW1kXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1oaW50LXNtXCI+XG4gICAgICAgICAgICBUaGUgcG9ydCBDYWRkeSB3aWxsIHByb3h5IHRvIChjb250YWluZXIncyBleHBvc2VkIHBvcnQpXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSVAgQWRkcmVzcyAtLT5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZWRpdC1pcFwiIGNsYXNzPVwiZm9ybS1sYWJlbC1hY2NlbnQtc21cIj5cbiAgICAgICAgICAgIElQIEFkZHJlc3NcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZWRpdC1pcFwiIGNsYXNzPVwiZm9ybS1pbnB1dC1tZFwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGFpbHNjYWxlIFByb3RlY3Rpb24gLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OyBwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6IHBvaW50ZXI7XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJlZGl0LXRhaWxzY2FsZS1vbmx5XCIgc3R5bGU9XCJ3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4O1wiIC8+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctNTAwXCI+VGFpbHNjYWxlLU9ubHkgQWNjZXNzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWhpbnRcIj5SZXN0cmljdCB0aGlzIHNlcnZpY2UgdG8gVGFpbHNjYWxlIHVzZXJzIG9ubHk8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gTG9nbyAtLT5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsLWFjY2VudC1zbVwiPlxuICAgICAgICAgICAgU2VydmljZSBMb2dvXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1yb3ctZ2FwLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlZGl0LWxvZ28tdXJsXCIgcGxhY2Vob2xkZXI9XCIvYXNzZXRzL3NlcnZpY2UucG5nIG9yIGh0dHBzOi8vLi4uXCIgY2xhc3M9XCJpbnB1dC1mbGV4XCIgLz5cbiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cInBhZGRpbmc6IDEwcHggMTZweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImVkaXQtbG9nby1maWxlXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAvPlxuICAgICAgICAgICAgICBVcGxvYWRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taGludC1zbVwiPlxuICAgICAgICAgICAgRW50ZXIgYSBVUkwgb3IgdXBsb2FkIGFuIGltYWdlIGZpbGUgKFBORywgSlBHLCBTVkcpXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ2F0ZWdvcnkgLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImVkaXQtc2VydmljZS1jYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1sYWJlbC1hY2NlbnQtc21cIj5cbiAgICAgICAgICAgIENhdGVnb3J5XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8c2VsZWN0IGlkPVwiZWRpdC1zZXJ2aWNlLWNhdGVnb3J5XCIgZGF0YS1yb2xlPVwic2VydmljZS1jYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1pbnB1dC1tZFwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlx1MjAxNCBObyBjYXRlZ29yeSBcdTIwMTQ8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDogMjRweDtcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInNlcnZpY2UtZWRpdC1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInNlcnZpY2UtZWRpdC1zYXZlXCIgY2xhc3M9XCJidG4tYWNjZW50XCI+XG4gICAgICAgICAgU2F2ZSBDaGFuZ2VzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PmApO1xuXG4gIGluamVjdE1vZGFsKCdkZWxldGUtc2VydmljZS1tb2RhbCcsIGBcbiAgPGRpdiBpZD1cImRlbGV0ZS1zZXJ2aWNlLW1vZGFsXCIgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtY29udGVudFwiIHN0eWxlPVwibWluLXdpZHRoOiA0MDBweDsgbWF4LXdpZHRoOiA1MDBweDtcIj5cbiAgICAgIDxoMyBpZD1cImRlbGV0ZS1tb2RhbC10aXRsZVwiIGNsYXNzPVwibWItMTZcIj5EZWxldGUgU2VydmljZTwvaDM+XG5cbiAgICAgIDxkaXYgaWQ9XCJkZWxldGUtbW9kYWwtbWVzc2FnZVwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjBweDsgbGluZS1oZWlnaHQ6IDEuNTtcIj5cbiAgICAgICAgPCEtLSBEeW5hbWljIGNvbnRlbnQgLS0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBpZD1cImRlbGV0ZS1tb2RhbC1jb250YWluZXItaW5mb1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWFyZ2luLWJvdHRvbTogMjBweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlci1yYWRpdXM6IDhweDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDA7IG1hcmdpbi1ib3R0b206IDhweDtcIj5Eb2NrZXIgQ29udGFpbmVyPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJkZWxldGUtbW9kYWwtY29udGFpbmVyLW5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC45cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWJ1dHRvbnNcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1wiPlxuICAgICAgICA8YnV0dG9uIGlkPVwiZGVsZXRlLW1vZGFsLWNhbmNlbFwiIHN0eWxlPVwicGFkZGluZzogMTBweCAyMHB4O1wiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwiZGVsZXRlLW1vZGFsLXJlbW92ZVwiIHN0eWxlPVwicGFkZGluZzogMTBweCAyMHB4OyBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50KSAyMCUsIHRyYW5zcGFyZW50KTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQpOyBjb2xvcjogdmFyKC0tYWNjZW50KTtcIj5cbiAgICAgICAgICBSZW1vdmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gaWQ9XCJkZWxldGUtbW9kYWwtZGVsZXRlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBwYWRkaW5nOiAxMHB4IDIwcHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAjZTc0YzNjIDIwJSwgdHJhbnNwYXJlbnQpOyBib3JkZXItY29sb3I6ICNlNzRjM2M7IGNvbG9yOiAjZTc0YzNjO1wiPlxuICAgICAgICAgIERlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGlkPVwiZGVsZXRlLW1vZGFsLWhlbHBcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi10b3A6IDE2cHg7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tdXRlZCkgMTAlLCB0cmFuc3BhcmVudCk7IGJvcmRlci1yYWRpdXM6IDhweDsgZm9udC1zaXplOiAwLjg1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPlxuICAgICAgICA8ZGl2PjxzdHJvbmc+UmVtb3ZlOjwvc3Ryb25nPiBSZW1vdmUgZnJvbSBkYXNoYm9hcmQgb25seSAoY29udGFpbmVyIGtlZXBzIHJ1bm5pbmcpPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiA2cHg7XCI+PHN0cm9uZz5EZWxldGU6PC9zdHJvbmc+IEZ1bGwgcmVtb3ZhbCAtIHN0b3BzIGNvbnRhaW5lciwgcmVtb3ZlcyBETlMgJiBDYWRkeSBjb25maWc8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5gKTtcblxuICBpbmplY3RNb2RhbCgnYWRkLXNlcnZpY2UtbW9kYWwnLCBgXG4gIDxkaXYgaWQ9XCJhZGQtc2VydmljZS1tb2RhbFwiIGNsYXNzPVwid2VhdGhlci1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWNvbnRlbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNDIwcHg7IG1heC13aWR0aDogNTIwcHg7XCI+XG4gICAgICA8aDM+QWRkIFNlcnZpY2U8L2gzPlxuXG4gICAgICA8IS0tIFNlcnZpY2UgVHlwZSBUYWJzIC0tPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMnB4OyBtYXJnaW4tYm90dG9tOiAxNnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJnKTsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nOiAzcHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XCI+XG4gICAgICAgIDxsYWJlbCBpZD1cInRhYi1sb2NhbFwiIHN0eWxlPVwiZmxleDogMTsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiA4cHg7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDAuODVyZW07IGZvbnQtd2VpZ2h0OiA1MDA7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB2YXIoLS1iZyk7IHRyYW5zaXRpb246IGFsbCAwLjE1cztcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNlcnZpY2UtdHlwZVwiIHZhbHVlPVwibG9jYWxcIiBpZD1cInNlcnZpY2UtdHlwZS1sb2NhbFwiIGNoZWNrZWQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIC8+XG4gICAgICAgICAgTG9jYWxcbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIGlkPVwidGFiLWV4dGVybmFsXCIgc3R5bGU9XCJmbGV4OiAxOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDhweDsgYm9yZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtc2l6ZTogMC44NXJlbTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLW11dGVkKTsgdHJhbnNpdGlvbjogYWxsIDAuMTVzO1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic2VydmljZS10eXBlXCIgdmFsdWU9XCJleHRlcm5hbFwiIGlkPVwic2VydmljZS10eXBlLWV4dGVybmFsXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIC8+XG4gICAgICAgICAgRXh0ZXJuYWxcbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gaWQ9XCJzZXJ2aWNlLXR5cGUtZGVzY3JpcHRpb25cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9zcGFuPlxuXG4gICAgICA8IS0tIExPQ0FMIFNFUlZJQ0UgLS0+XG4gICAgICA8ZGl2IGlkPVwibG9jYWwtc2VydmljZS1jb25maWdcIiBzdHlsZT1cImRpc3BsYXk6IGdyaWQ7IGdhcDogMTJweDtcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwic2VydmljZS1uYW1lLWlucHV0XCIgc3R5bGU9XCJmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWJvdHRvbTogNHB4OyBkaXNwbGF5OiBibG9jaztcIj5OYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInNlcnZpY2UtbmFtZS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiZS5nLiwgSmVsbHlmaW5cIiBzdHlsZT1cImZvbnQtc2l6ZTogMXJlbTtcIiAvPlxuICAgICAgICAgIDxkaXYgaWQ9XCJzdWJkb21haW4tcHJldmlld1wiIHN0eWxlPVwiZm9udC1zaXplOiAwLjc1cmVtOyBjb2xvcjogdmFyKC0tYWNjZW50KTsgbWFyZ2luLXRvcDogNHB4OyBtaW4taGVpZ2h0OiAxZW07XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLTJjb2xcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNlcnZpY2UtcG9ydC1pbnB1dFwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjhyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1hcmdpbi1ib3R0b206IDRweDsgZGlzcGxheTogYmxvY2s7XCI+UG9ydDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwic2VydmljZS1wb3J0LWlucHV0XCIgcGxhY2Vob2xkZXI9XCJlLmcuLCA4MDk2XCIgc3R5bGU9XCJmb250LXNpemU6IDFyZW07XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNlcnZpY2UtaXAtaW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW4tYm90dG9tOiA0cHg7IGRpc3BsYXk6IGJsb2NrO1wiPklQIEFkZHJlc3M8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzZXJ2aWNlLWlwLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJBdXRvLWRldGVjdGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDFyZW07XCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWljay1pcC1idXR0b25zXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDRweDsgbWFyZ2luLXRvcDogNHB4OyBmbGV4LXdyYXA6IHdyYXA7XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicXVpY2staXAtYnRuXCIgZGF0YS1pcD1cIjEyNy4wLjAuMVwiIHRpdGxlPVwiTG9jYWxob3N0XCIgc3R5bGU9XCJmb250LXNpemU6IDAuN3JlbTsgcGFkZGluZzogMnB4IDZweDtcIj5sb2NhbGhvc3Q8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJxdWljay1pcC1idG5cIiBkYXRhLWlwPVwiXCIgaWQ9XCJxdWljay1pcC1sYW5cIiB0aXRsZT1cIkxBTiBJUFwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjdyZW07IHBhZGRpbmc6IDJweCA2cHg7XCI+TEFOPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicXVpY2staXAtYnRuXCIgZGF0YS1pcD1cIlwiIGlkPVwicXVpY2staXAtdGFpbHNjYWxlXCIgdGl0bGU9XCJUYWlsc2NhbGUgSVBcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC43cmVtOyBwYWRkaW5nOiAycHggNnB4O1wiPlRhaWxzY2FsZTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gT3B0aW9ucyAoY29sbGFwc2VkIGJ5IGRlZmF1bHQpIC0tPlxuICAgICAgICA8ZGV0YWlscyBpZD1cImxvY2FsLWFkdmFuY2VkLW9wdGlvbnNcIj5cbiAgICAgICAgICA8c3VtbWFyeSBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtc2l6ZTogMC44cmVtOyB1c2VyLXNlbGVjdDogbm9uZTtcIj5PcHRpb25zPC9zdW1tYXJ5PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4OyBkaXNwbGF5OiBncmlkOyBnYXA6IDEwcHg7IGZvbnQtc2l6ZTogMC44cmVtO1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC0yY29sXCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNlcnZpY2Utc3ViZG9tYWluLWlucHV0XCI+U3ViZG9tYWluOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzZXJ2aWNlLXN1YmRvbWFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiYXV0by1kZXJpdmVkIGZyb20gbmFtZVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzZXJ2aWNlLWxvZ28taW5wdXRcIj5Mb2dvIFVSTDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic2VydmljZS1sb2dvLWlucHV0XCIgcGxhY2Vob2xkZXI9XCIvYXNzZXRzL25hbWUucG5nXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiA4cHg7IGFsaWduLWl0ZW1zOiBzdGFydDtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjcmVhdGUtZG5zLXJlY29yZFwiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgICAgICBDcmVhdGUgRE5TIFJlY29yZFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzc2wtdHlwZS1zZWxlY3RcIj5TU0w6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwic3NsLXR5cGUtc2VsZWN0XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjYWRkeS1tYW5hZ2VkXCI+Q2FkZHkgTWFuYWdlZCAoSW50ZXJuYWwpPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGV0c2VuY3J5cHRcIj5MZXQncyBFbmNyeXB0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXhpc3RpbmctY2FcIj5FeGlzdGluZyBDQTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImN1c3RvbS1jYVwiPkN1c3RvbSBDQTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGlkPVwiZG5zLWNvbmZpZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC0yY29sXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkbnMtdHRsLWlucHV0XCI+RE5TIFRUTDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImRucy10dGwtaW5wdXRcIiB2YWx1ZT1cIjMwMFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjYWRkeWZpbGUtcGF0aC1pbnB1dFwiPkNhZGR5ZmlsZSBQYXRoOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImNhZGR5ZmlsZS1wYXRoLWlucHV0XCIgdmFsdWU9XCJDOlxcXFxjYWRkeVxcXFxDYWRkeWZpbGVcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGlkPVwiZXhpc3RpbmctY2EtY29uZmlnXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhpc3RpbmctY2Etc2VsZWN0XCI+RXhpc3RpbmcgQ0E6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtcm93LWdhcFwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJleGlzdGluZy1jYS1zZWxlY3RcIiBzdHlsZT1cImZsZXg6IDE7XCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TG9hZGluZyBDQXMuLi48L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cInJlZnJlc2gtY2FzXCIgc3R5bGU9XCJwYWRkaW5nOiA0cHggOHB4OyBmb250LXNpemU6IDAuNzVyZW07XCI+XFx1ezFGNTA0fTwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGlkPVwiY3VzdG9tLWNhLWNvbmZpZ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNhLW5hbWUtaW5wdXRcIj5DQSBOYW1lOjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiY2EtbmFtZS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiZS5nLiwgc2FtaS1jYVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBpZD1cIm1hbnVhbC10YWlsc2NhbGUtc3RhdHVzXCIgc3R5bGU9XCJwYWRkaW5nOiA2cHggMTBweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAwLjc1cmVtO1wiPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1tdXRlZCk7XCI+Q2hlY2tpbmcgVGFpbHNjYWxlLi4uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgY3Vyc29yOiBwb2ludGVyO1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJtYW51YWwtdGFpbHNjYWxlLW9ubHlcIiAvPlxuICAgICAgICAgICAgICBUYWlsc2NhbGUtT25seSBBY2Nlc3NcbiAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBjdXJzb3I6IHBvaW50ZXI7XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInJlbG9hZC1jYWRkeVwiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgICAgUmVsb2FkIENhZGR5IGFmdGVyIGFkZGluZ1xuICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgPCEtLSBDYXRlZ29yeSAtLT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzZXJ2aWNlLWNhdGVnb3J5LWlucHV0XCIgc3R5bGU9XCJmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWJvdHRvbTogNHB4OyBkaXNwbGF5OiBibG9jaztcIj5DYXRlZ29yeTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJzZXJ2aWNlLWNhdGVnb3J5LWlucHV0XCIgZGF0YS1yb2xlPVwic2VydmljZS1jYXRlZ29yeVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlx1MjAxNCBObyBjYXRlZ29yeSBcdTIwMTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDAuN3JlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDogM3B4O1wiPkdyb3VwIHNlcnZpY2VzIG9uIHRoZSBkYXNoYm9hcmQgYnkgcHVycG9zZSAoTWVkaWEsIFByb2R1Y3Rpdml0eSwgZXRjLik8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBtYXJnaW46IDRweCAwO1wiIC8+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLTJjb2xcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbC1zbVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiZW5hYmxlLWF1dGhcIiAvPlxuICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsLXNtXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJlbmFibGUtY29yc1wiIC8+XG4gICAgICAgICAgICAgICAgICBDT1JTIEhlYWRlcnNcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ1cHN0cmVhbS1wYXRoLWlucHV0XCI+VXBzdHJlYW0gUGF0aDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwidXBzdHJlYW0tcGF0aC1pbnB1dFwiIHZhbHVlPVwiL1wiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJoZWFsdGgtY2hlY2staW5wdXRcIj5IZWFsdGggQ2hlY2s6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImhlYWx0aC1jaGVjay1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiL2hlYWx0aFwiIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRpbWVvdXQtaW5wdXRcIj5UaW1lb3V0IChzKTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJ0aW1lb3V0LWlucHV0XCIgdmFsdWU9XCIzMFwiIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImN1c3RvbS1oZWFkZXJzLWlucHV0XCI+SGVhZGVycyAoSlNPTik6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJjdXN0b20taGVhZGVycy1pbnB1dFwiIHBsYWNlaG9sZGVyPSd7XCJYLUN1c3RvbVwiOiBcInZhbHVlXCJ9JyByb3dzPVwiMlwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjdyZW07XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2RldGFpbHM+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBFWFRFUk5BTCBTRVJWSUNFIC0tPlxuICAgICAgPGRpdiBpZD1cImV4dGVybmFsLXNlcnZpY2UtY29uZmlnXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZ3JpZDsgZ2FwOiAxMnB4O1wiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXh0ZXJuYWwtc2VydmljZS1uYW1lXCIgc3R5bGU9XCJmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWJvdHRvbTogNHB4OyBkaXNwbGF5OiBibG9jaztcIj5OYW1lPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXh0ZXJuYWwtc2VydmljZS1uYW1lXCIgcGxhY2Vob2xkZXI9XCJlLmcuLCBSYWRhcnIgKFNlZWRob3N0KVwiIHN0eWxlPVwiZm9udC1zaXplOiAxcmVtO1wiIC8+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiZXh0ZXJuYWwtc3ViZG9tYWluLXByZXZpZXdcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC43NXJlbTsgY29sb3I6IHZhcigtLWFjY2VudCk7IG1hcmdpbi10b3A6IDRweDsgbWluLWhlaWdodDogMWVtO1wiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHRlcm5hbC1zZXJ2aWNlLXVybFwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjhyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1hcmdpbi1ib3R0b206IDRweDsgZGlzcGxheTogYmxvY2s7XCI+RXh0ZXJuYWwgVVJMPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgaWQ9XCJleHRlcm5hbC1zZXJ2aWNlLXVybFwiIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly91c2VybmFtZS5zZWVkaG9zdC5ldS9yYWRhcnJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMXJlbTtcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBPcHRpb25zIChjb2xsYXBzZWQgYnkgZGVmYXVsdCkgLS0+XG4gICAgICAgICAgPGRldGFpbHMgaWQ9XCJleHRlcm5hbC1hZHZhbmNlZC1vcHRpb25zXCI+XG4gICAgICAgICAgICA8c3VtbWFyeSBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtc2l6ZTogMC44cmVtOyB1c2VyLXNlbGVjdDogbm9uZTtcIj5PcHRpb25zPC9zdW1tYXJ5PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7IGRpc3BsYXk6IGdyaWQ7IGdhcDogMTBweDsgZm9udC1zaXplOiAwLjhyZW07XCI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtMmNvbFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXh0ZXJuYWwtc2VydmljZS1zdWJkb21haW5cIj5TdWJkb21haW46PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXh0ZXJuYWwtc2VydmljZS1zdWJkb21haW5cIiBwbGFjZWhvbGRlcj1cImF1dG8tZGVyaXZlZCBmcm9tIG5hbWVcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJleHRlcm5hbC1kb21haW4tcHJldmlld1wiIHN0eWxlPVwiZm9udC1zaXplOiAwLjdyZW07IGNvbG9yOiB2YXIoLS1hY2NlbnQpO1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4dGVybmFsLXNlcnZpY2UtbG9nb1wiPkxvZ28gVVJMOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImV4dGVybmFsLXNlcnZpY2UtbG9nb1wiIHBsYWNlaG9sZGVyPVwiL2Fzc2V0cy9uYW1lLnBuZ1wiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4dGVybmFsLXNlcnZpY2UtaWNvblwiPkljb24gRW1vamk6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImV4dGVybmFsLXNlcnZpY2UtaWNvblwiIHBsYWNlaG9sZGVyPVwiXFx1ezFGM0FDfVwiIG1heGxlbmd0aD1cIjJcIiBzdHlsZT1cIndpZHRoOiA2MHB4O1wiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBjdXJzb3I6IHBvaW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiZXh0ZXJuYWwtY3JlYXRlLWRuc1wiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgICAgICBDcmVhdGUgRE5TIFJlY29yZFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsgY3Vyc29yOiBwb2ludGVyO1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImV4dGVybmFsLWNyZWF0ZS1jYWRkeVwiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgICAgICBDcmVhdGUgQ2FkZHkgUmV2ZXJzZSBQcm94eVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4dGVybmFsLXByb3h5LWlwXCI+UHJveHkgU2VydmVyIElQOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHRlcm5hbC1wcm94eS1pcFwiIHBsYWNlaG9sZGVyPVwiQXV0by1kZXRlY3RlZFwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsgY3Vyc29yOiBwb2ludGVyO1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImV4dGVybmFsLXByZXNlcnZlLWhvc3RcIiBjaGVja2VkIC8+XG4gICAgICAgICAgICAgICAgUHJlc2VydmUgSG9zdCBIZWFkZXJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJleHRlcm5hbC1mb2xsb3ctcmVkaXJlY3RzXCIgY2hlY2tlZCAvPlxuICAgICAgICAgICAgICAgIEZvbGxvdyBSZWRpcmVjdHNcbiAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICA8IS0tIENhdGVnb3J5IChleHRlcm5hbCkgLS0+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4dGVybmFsLXNlcnZpY2UtY2F0ZWdvcnlcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW4tYm90dG9tOiA0cHg7IGRpc3BsYXk6IGJsb2NrO1wiPkNhdGVnb3J5PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwiZXh0ZXJuYWwtc2VydmljZS1jYXRlZ29yeVwiIGRhdGEtcm9sZT1cInNlcnZpY2UtY2F0ZWdvcnlcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlx1MjAxNCBObyBjYXRlZ29yeSBcdTIwMTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDogMTZweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJhZGQtc2VydmljZS1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImFkZC1zZXJ2aWNlLWNyZWF0ZVwiIGNsYXNzPVwiYnRuLWFjY2VudFwiPkNyZWF0ZSBTZXJ2aWNlPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCk7XG5cbn0pKCk7XG47XG4vLyA9PT09PT09PT09IFNFUlZJQ0UgSU5GUkFTVFJVQ1RVUkUgPT09PT09PT09PVxuLy8gQ2FkZHkgY29uZmlnIGdlbmVyYXRpb24sIEROUyByZWNvcmQgY3JlYXRpb24sIGFuZCBzZXJ2aWNlIHJlZ2lzdHJhdGlvbi5cbihmdW5jdGlvbiAoKSB7XG5cbiAgLy8gPT09PT0gTE9BRCBFWElTVElORyBDQXMgPT09PT1cblxuICBhc3luYyBmdW5jdGlvbiBsb2FkRXhpc3RpbmdDQXMoY2FkZHlmaWxlUGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL2NhZGR5L2Nhcz9jYWRkeWZpbGVQYXRoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhZGR5ZmlsZVBhdGgpfWApO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgQ0FzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4aXN0aW5nLWNhLXNlbGVjdCcpO1xuICAgICAgICBzZWxlY3QuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5jYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgc2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiXCI+Tm8gQ0FzIGZvdW5kIGluIENhZGR5ZmlsZTwvb3B0aW9uPic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IGV4aXN0aW5nIENBLi4uPC9vcHRpb24+JztcbiAgICAgICAgICByZXN1bHQuY2FzLmZvckVhY2goY2EgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICBvcHRpb24udmFsdWUgPSBjYS5pZDtcbiAgICAgICAgICAgICAgb3B0aW9uLnRleHRDb250ZW50ID0gY2EuZGlzcGxheU5hbWUgfHwgY2EubmFtZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IGNhO1xuICAgICAgICAgICAgICBvcHRpb24udGV4dENvbnRlbnQgPSBjYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQuZGF0YS5jYXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIENBczonLCBlcnJvcik7XG4gICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhpc3RpbmctY2Etc2VsZWN0Jyk7XG4gICAgICBzZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj5FcnJvciBsb2FkaW5nIENBczwvb3B0aW9uPic7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT0gR0VORVJBVEUgQ0FERFkgQ09ORklHID09PT09XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVDYWRkeUNvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJkb21haW4sXG4gICAgICBwb3J0LFxuICAgICAgaXAsXG4gICAgICBzc2xUeXBlLFxuICAgICAgY2FOYW1lLFxuICAgICAgZXhpc3RpbmdDYSxcbiAgICAgIGVuYWJsZUF1dGgsXG4gICAgICBlbmFibGVDb3JzLFxuICAgICAgY3VzdG9tSGVhZGVycyxcbiAgICAgIHVwc3RyZWFtUGF0aCxcbiAgICAgIGhlYWx0aENoZWNrLFxuICAgICAgdGltZW91dCxcbiAgICAgIHRhaWxzY2FsZU9ubHlcbiAgICB9ID0gY29uZmlnO1xuXG4gICAgbGV0IGNhZGR5Q29uZmlnID0gYCR7YnVpbGREb21haW4oc3ViZG9tYWluKX0ge1xcbmA7XG5cbiAgICAvLyBUYWlsc2NhbGUtb25seSBhY2Nlc3MgcmVzdHJpY3Rpb25cbiAgICBpZiAodGFpbHNjYWxlT25seSkge1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgQGJsb2NrZWQgbm90IHJlbW90ZV9pcCAxMDAuNjQuMC4wLzEwXFxuYDtcbiAgICAgIGNhZGR5Q29uZmlnICs9IGAgIHJlc3BvbmQgQGJsb2NrZWQgXCJBY2Nlc3MgZGVuaWVkLiBUYWlsc2NhbGUgY29ubmVjdGlvbiByZXF1aXJlZC5cIiA0MDNcXG5gO1xuICAgIH1cblxuICAgIC8vIFNTTCBDb25maWd1cmF0aW9uXG4gICAgc3dpdGNoIChzc2xUeXBlKSB7XG4gICAgICBjYXNlICdsZXRzZW5jcnlwdCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2FkZHktbWFuYWdlZCc6XG4gICAgICAgIGNhZGR5Q29uZmlnICs9IGAgIHRscyBpbnRlcm5hbFxcbmA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXhpc3RpbmctY2EnOlxuICAgICAgICBpZiAoZXhpc3RpbmdDYSkge1xuICAgICAgICAgIGNhZGR5Q29uZmlnICs9IGAgIHRscyB7XFxuICAgIGNhICR7ZXhpc3RpbmdDYX1cXG4gIH1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY3VzdG9tLWNhJzpcbiAgICAgICAgaWYgKGNhTmFtZSkge1xuICAgICAgICAgIGNhZGR5Q29uZmlnICs9IGAgIHRscyB7XFxuICAgIGNhICR7Y2FOYW1lfVxcbiAgfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gQXV0aGVudGljYXRpb25cbiAgICBpZiAoZW5hYmxlQXV0aCkge1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgYmFzaWNhdXRoIHtcXG4gICAgYWRtaW4gJDJhJDE0JGhhc2hlZF9wYXNzd29yZF9oZXJlXFxuICB9XFxuYDtcbiAgICB9XG5cbiAgICAvLyBDT1JTIEhlYWRlcnNcbiAgICBpZiAoZW5hYmxlQ29ycykge1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgaGVhZGVyIHtcXG5gO1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4gXCIqXCJcXG5gO1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICBBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIFwiR0VULCBQT1NULCBQVVQsIERFTEVURSwgT1BUSU9OU1wiXFxuYDtcbiAgICAgIGNhZGR5Q29uZmlnICs9IGAgICAgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyBcIkNvbnRlbnQtVHlwZSwgQXV0aG9yaXphdGlvblwiXFxuYDtcbiAgICAgIGNhZGR5Q29uZmlnICs9IGAgIH1cXG5gO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSBIZWFkZXJzXG4gICAgaWYgKGN1c3RvbUhlYWRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBKU09OLnBhcnNlKGN1c3RvbUhlYWRlcnMpO1xuICAgICAgICBjYWRkeUNvbmZpZyArPSBgICBoZWFkZXIge1xcbmA7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNhZGR5Q29uZmlnICs9IGAgICAgJHtrZXl9IFwiJHt2YWx1ZX1cIlxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICBjYWRkeUNvbmZpZyArPSBgICB9XFxuYDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIEpTT04gaW4gY3VzdG9tIGhlYWRlcnMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIZWFsdGggQ2hlY2tcbiAgICBpZiAoaGVhbHRoQ2hlY2spIHtcbiAgICAgIGNhZGR5Q29uZmlnICs9IGAgIGhlYWx0aF91cmkgJHtoZWFsdGhDaGVja31cXG5gO1xuICAgIH1cblxuICAgIC8vIFJldmVyc2UgUHJveHlcbiAgICBjYWRkeUNvbmZpZyArPSBgICByZXZlcnNlX3Byb3h5ICR7aXB9OiR7cG9ydH0ge1xcbmA7XG4gICAgaWYgKHVwc3RyZWFtUGF0aCAmJiB1cHN0cmVhbVBhdGggIT09ICcvJykge1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICByZXdyaXRlICR7dXBzdHJlYW1QYXRofVxcbmA7XG4gICAgfVxuICAgIGlmICh0aW1lb3V0ICYmIHRpbWVvdXQgIT09IDMwKSB7XG4gICAgICBjYWRkeUNvbmZpZyArPSBgICAgIHRyYW5zcG9ydCBodHRwIHtcXG5gO1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICAgIGRpYWxfdGltZW91dCAke3RpbWVvdXR9c1xcbmA7XG4gICAgICBjYWRkeUNvbmZpZyArPSBgICAgICAgcmVzcG9uc2VfaGVhZGVyX3RpbWVvdXQgJHt0aW1lb3V0fXNcXG5gO1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICB9XFxuYDtcbiAgICB9XG4gICAgY2FkZHlDb25maWcgKz0gYCAgfVxcbmA7XG5cbiAgICBjYWRkeUNvbmZpZyArPSBgfVxcbmA7XG5cbiAgICByZXR1cm4gY2FkZHlDb25maWc7XG4gIH1cblxuICAvLyA9PT09PSBDUkVBVEUgRE5TIFJFQ09SRCA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURuc1JlY29yZChzdWJkb21haW4sIGlwLCB0dGwgPSBEQy5ERUZBVUxUUy5UVEwpIHtcbiAgICBjb25zdCBkbnNUb2tlbiA9IHdpbmRvdy5nZXRUb2tlbihnZXRQcmltYXJ5RG5zSWQoKSwgJ2FkbWluJyk7XG5cbiAgICBpZiAoIWRuc1Rva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ROUyBhZG1pbiB0b2tlbiBub3QgY29uZmlndXJlZC4gUGxlYXNlIHNldCBpdCBpbiB0aGUgVG9rZW5zIG1lbnUuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZG9tYWluID0gYnVpbGREb21haW4oc3ViZG9tYWluKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvZG5zL3JlY29yZCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgICBpcDogaXAsXG4gICAgICAgIHR0bDogdHRsLFxuICAgICAgICB0b2tlbjogZG5zVG9rZW4sXG4gICAgICAgIHNlcnZlcjogU0lURS5kbnNJcFxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRE5TIEFQSSBFcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9IC0gJHtlcnJvclRleHR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRE5TIEVycm9yOiAke3Jlc3VsdC5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vID09PT09IEFERCBTRVJWSUNFIFRPIENPTkZJRyA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGFkZFNlcnZpY2VUb0NvbmZpZyhzZXJ2aWNlQ29uZmlnKSB7XG4gICAgY29uc3QgbmV3U2VydmljZSA9IHtcbiAgICAgIGlkOiBzZXJ2aWNlQ29uZmlnLnN1YmRvbWFpbixcbiAgICAgIG5hbWU6IHNlcnZpY2VDb25maWcubmFtZSxcbiAgICAgIGxvZ286IHNlcnZpY2VDb25maWcubG9nbyB8fCBgL2Fzc2V0cy8ke3NlcnZpY2VDb25maWcuc3ViZG9tYWlufS5wbmdgXG4gICAgfTtcbiAgICAvLyBGb3J3YXJkIG9wdGlvbmFsIG1ldGFkYXRhIGZpZWxkcyBpZiBwcm92aWRlZFxuICAgIGlmIChzZXJ2aWNlQ29uZmlnLmNhdGVnb3J5KSBuZXdTZXJ2aWNlLmNhdGVnb3J5ID0gc2VydmljZUNvbmZpZy5jYXRlZ29yeTtcbiAgICBpZiAoc2VydmljZUNvbmZpZy5jb250YWluZXJJZCkgbmV3U2VydmljZS5jb250YWluZXJJZCA9IHNlcnZpY2VDb25maWcuY29udGFpbmVySWQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS9zZXJ2aWNlcycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuZXdTZXJ2aWNlKVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgc2VydmljZScpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB3aW5kb3cubG9hZFNlcnZpY2VzKCk7XG4gICAgICB3aW5kb3cuYnVpbGRHcmlkKCk7XG5cbiAgICAgIHJldHVybiBuZXdTZXJ2aWNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYWRkIHNlcnZpY2UgdG8gY29uZmlnOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09IEFERCBUTyBDQUREWUZJTEUgPT09PT1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRUb0NhZGR5ZmlsZShjb25maWcpIHtcbiAgICBjb25zdCBzdWJkb21haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1zdWJkb21haW4taW5wdXQnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgaXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1pcC1pbnB1dCcpLnZhbHVlLnRyaW0oKSB8fCAnbG9jYWxob3N0JztcbiAgICBjb25zdCBwb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtcG9ydC1pbnB1dCcpLnZhbHVlLnRyaW0oKSB8fCAnODAnO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS9zaXRlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZG9tYWluOiBidWlsZERvbWFpbihzdWJkb21haW4pLFxuICAgICAgICB1cHN0cmVhbTogYCR7aXB9OiR7cG9ydH1gLFxuICAgICAgICBjb25maWc6IGNvbmZpZ1xuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8ICFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvciB8fCBgQ2FkZHkgQVBJIEVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vID09PT09IFdJTkRPVyBFWFBPUlRTID09PT09XG5cbiAgd2luZG93LmxvYWRFeGlzdGluZ0NBcyA9IGxvYWRFeGlzdGluZ0NBcztcbiAgd2luZG93LmdlbmVyYXRlQ2FkZHlDb25maWcgPSBnZW5lcmF0ZUNhZGR5Q29uZmlnO1xuICB3aW5kb3cuY3JlYXRlRG5zUmVjb3JkID0gY3JlYXRlRG5zUmVjb3JkO1xuICB3aW5kb3cuYWRkU2VydmljZVRvQ29uZmlnID0gYWRkU2VydmljZVRvQ29uZmlnO1xuICB3aW5kb3cuYWRkVG9DYWRkeWZpbGUgPSBhZGRUb0NhZGR5ZmlsZTtcblxufSkoKTtcbjtcbi8vID09PT09PT09PT0gU0VSVklDRSBDUlVEID09PT09PT09PT1cbi8vIEVkaXQsIGRlbGV0ZSwgYW5kIHVwZGF0ZSBvcGVyYXRpb25zIGZvciBleGlzdGluZyBzZXJ2aWNlcy5cbihmdW5jdGlvbiAoKSB7XG5cbiAgLy8gPT09PT0gU0VSVklDRSBFRElUIE1PREFMID09PT09XG4gIGxldCBjdXJyZW50RWRpdFNlcnZpY2UgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIG9wZW5TZXJ2aWNlRWRpdE1vZGFsKHNlcnZpY2UpIHtcbiAgICBjdXJyZW50RWRpdFNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZWRpdC1tb2RhbCcpO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZWRpdC10aXRsZScpLnRleHRDb250ZW50ID0gYEVkaXQgJHtzZXJ2aWNlLm5hbWV9YDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLW5hbWUnKS52YWx1ZSA9IHNlcnZpY2UubmFtZTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLXVybC1kaXNwbGF5JykudGV4dENvbnRlbnQgPSBzZXJ2aWNlLnVybCB8fCBidWlsZFNlcnZpY2VVcmwoc2VydmljZS5pZCk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtc2VydmljZS1sb2dvLXByZXZpZXcnKS5zcmMgPSBzZXJ2aWNlLmxvZ28gfHwgYC9hc3NldHMvJHtzZXJ2aWNlLmlkfS5wbmdgO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LXN1YmRvbWFpbicpLnZhbHVlID0gc2VydmljZS5pZDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1wb3J0JykudmFsdWUgPSBzZXJ2aWNlLnBvcnQgfHwgJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtaXAnKS52YWx1ZSA9IHNlcnZpY2UuaXAgfHwgJ2xvY2FsaG9zdCc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtdGFpbHNjYWxlLW9ubHknKS5jaGVja2VkID0gc2VydmljZS50YWlsc2NhbGVPbmx5IHx8IGZhbHNlO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LWxvZ28tdXJsJykudmFsdWUgPSBzZXJ2aWNlLmxvZ28gfHwgJyc7XG5cbiAgICAvLyBQb3B1bGF0ZSB0aGUgY2F0ZWdvcnkgc2VsZWN0IGZvciB0aGlzIHNlcnZpY2UsIHRoZW4gc2V0IHRoZSBjdXJyZW50IHZhbHVlLlxuICAgIC8vIHBvcHVsYXRlQ2F0ZWdvcnlTZWxlY3RzKCkgdXNlcyBkYXRhLWN1cnJlbnQgc28gd2Ugc2V0IGl0IGZpcnN0LCB0aGVuIGNhbGwuXG4gICAgY29uc3QgY2F0ZWdvcnlTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLWNhdGVnb3J5Jyk7XG4gICAgaWYgKGNhdGVnb3J5U2VsZWN0KSB7XG4gICAgICBjYXRlZ29yeVNlbGVjdC5kYXRhc2V0LmN1cnJlbnQgPSBzZXJ2aWNlLmNhdGVnb3J5IHx8ICcnO1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cucG9wdWxhdGVDYXRlZ29yeVNlbGVjdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2luZG93LnBvcHVsYXRlQ2F0ZWdvcnlTZWxlY3RzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTZXJ2aWNlRWRpdE1vZGFsKCkge1xuICAgIGNsb3NlTW9kYWwoJ3NlcnZpY2UtZWRpdC1tb2RhbCcpO1xuICAgIGN1cnJlbnRFZGl0U2VydmljZSA9IG51bGw7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzYXZlU2VydmljZUNoYW5nZXMoKSB7XG4gICAgaWYgKCFjdXJyZW50RWRpdFNlcnZpY2UpIHJldHVybjtcblxuICAgIGNvbnN0IG5ld1N1YmRvbWFpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LXN1YmRvbWFpbicpLnZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG5ld05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLW5hbWUnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbmV3UG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LXBvcnQnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbmV3SXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1pcCcpLnZhbHVlLnRyaW0oKSB8fCAnbG9jYWxob3N0JztcbiAgICBjb25zdCB0YWlsc2NhbGVPbmx5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtdGFpbHNjYWxlLW9ubHknKS5jaGVja2VkO1xuICAgIGNvbnN0IG5ld0xvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1sb2dvLXVybCcpLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBuZXdDYXRlZ29yeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LXNlcnZpY2UtY2F0ZWdvcnknKT8udmFsdWUgfHwgJyc7XG5cbiAgICBpZiAoIW5ld1N1YmRvbWFpbikge1xuICAgICAgc2hvd05vdGlmaWNhdGlvbignU3ViZG9tYWluIGlzIHJlcXVpcmVkJywgJ3dhcm5pbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRTdWJkb21haW4gPSBjdXJyZW50RWRpdFNlcnZpY2UuaWQ7XG4gICAgY29uc3QgY2hhbmdlcyA9IFtdO1xuXG4gICAgaWYgKG5ld1N1YmRvbWFpbiAhPT0gb2xkU3ViZG9tYWluKSBjaGFuZ2VzLnB1c2goJ3N1YmRvbWFpbicpO1xuICAgIGlmIChuZXdOYW1lICYmIG5ld05hbWUgIT09IGN1cnJlbnRFZGl0U2VydmljZS5uYW1lKSBjaGFuZ2VzLnB1c2goJ25hbWUnKTtcbiAgICBpZiAobmV3UG9ydCAmJiBuZXdQb3J0ICE9PSBTdHJpbmcoY3VycmVudEVkaXRTZXJ2aWNlLnBvcnQpKSBjaGFuZ2VzLnB1c2goJ3BvcnQnKTtcbiAgICBpZiAobmV3SXAgIT09IGN1cnJlbnRFZGl0U2VydmljZS5pcCkgY2hhbmdlcy5wdXNoKCdpcCcpO1xuICAgIGlmICh0YWlsc2NhbGVPbmx5ICE9PSAoY3VycmVudEVkaXRTZXJ2aWNlLnRhaWxzY2FsZU9ubHkgfHwgZmFsc2UpKSBjaGFuZ2VzLnB1c2goJ3RhaWxzY2FsZScpO1xuICAgIGlmIChuZXdMb2dvICYmIG5ld0xvZ28gIT09IGN1cnJlbnRFZGl0U2VydmljZS5sb2dvKSBjaGFuZ2VzLnB1c2goJ2xvZ28nKTtcbiAgICBpZiAobmV3Q2F0ZWdvcnkgIT09IChjdXJyZW50RWRpdFNlcnZpY2UuY2F0ZWdvcnkgfHwgJycpKSBjaGFuZ2VzLnB1c2goJ2NhdGVnb3J5Jyk7XG5cbiAgICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNsb3NlU2VydmljZUVkaXRNb2RhbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1lZGl0LXNhdmUnKTtcbiAgICBzYXZlQnRuLnRleHRDb250ZW50ID0gJ1NhdmluZy4uLic7XG4gICAgc2F2ZUJ0bi5kaXNhYmxlZCA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS9zZXJ2aWNlcy91cGRhdGUnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG9sZFN1YmRvbWFpbixcbiAgICAgICAgICBuZXdTdWJkb21haW4sXG4gICAgICAgICAgbmFtZTogbmV3TmFtZSB8fCBjdXJyZW50RWRpdFNlcnZpY2UubmFtZSxcbiAgICAgICAgICBwb3J0OiBuZXdQb3J0IHx8IGN1cnJlbnRFZGl0U2VydmljZS5wb3J0LFxuICAgICAgICAgIGlwOiBuZXdJcCxcbiAgICAgICAgICB0YWlsc2NhbGVPbmx5LFxuICAgICAgICAgIGxvZ286IG5ld0xvZ28gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGNhdGVnb3J5OiBuZXdDYXRlZ29yeVxuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvciB8fCAnRmFpbGVkIHRvIHVwZGF0ZSBzZXJ2aWNlJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBsb2NhbCBBUFBTIGFycmF5IHRvIG1hdGNoXG4gICAgICBjb25zdCBhcHBJbmRleCA9IHdpbmRvdy5BUFBTLmZpbmRJbmRleChhID0+IGEuaWQgPT09IG9sZFN1YmRvbWFpbik7XG4gICAgICBpZiAoYXBwSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHdpbmRvdy5BUFBTW2FwcEluZGV4XSA9IHtcbiAgICAgICAgICAuLi53aW5kb3cuQVBQU1thcHBJbmRleF0sXG4gICAgICAgICAgaWQ6IG5ld1N1YmRvbWFpbixcbiAgICAgICAgICBuYW1lOiBuZXdOYW1lIHx8IHdpbmRvdy5BUFBTW2FwcEluZGV4XS5uYW1lLFxuICAgICAgICAgIHBvcnQ6IG5ld1BvcnQgfHwgd2luZG93LkFQUFNbYXBwSW5kZXhdLnBvcnQsXG4gICAgICAgICAgaXA6IG5ld0lwLFxuICAgICAgICAgIHRhaWxzY2FsZU9ubHksXG4gICAgICAgICAgbG9nbzogbmV3TG9nbyB8fCB3aW5kb3cuQVBQU1thcHBJbmRleF0ubG9nbyxcbiAgICAgICAgICBjYXRlZ29yeTogbmV3Q2F0ZWdvcnkgfHwgdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNsb3NlU2VydmljZUVkaXRNb2RhbCgpO1xuICAgICAgd2luZG93LmJ1aWxkR3JpZCgpO1xuICAgICAgd2luZG93LnJlZnJlc2hBbGwoKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgc2VydmljZSBjaGFuZ2VzOicsIGVycm9yKTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oYEVycm9yIHNhdmluZyBjaGFuZ2VzOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNhdmVCdG4udGV4dENvbnRlbnQgPSAnU2F2ZSBDaGFuZ2VzJztcbiAgICAgIHNhdmVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBMb2dvIGZpbGUgdXBsb2FkIGhhbmRsZXJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtbG9nby1maWxlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGFzeW5jIChlKSA9PiB7XG4gICAgY29uc3QgZmlsZSA9IGUudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmICghZmlsZSkgcmV0dXJuO1xuXG4gICAgaWYgKCFmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ1BsZWFzZSBzZWxlY3QgYW4gaW1hZ2UgZmlsZScsICd3YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhVXJsID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtc2VydmljZS1sb2dvLXByZXZpZXcnKS5zcmMgPSBkYXRhVXJsO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtbG9nby11cmwnKS52YWx1ZSA9IGRhdGFVcmw7XG5cbiAgICAgIGlmIChjdXJyZW50RWRpdFNlcnZpY2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2Fzc2V0cy91cGxvYWQnLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBmaWxlbmFtZTogYCR7Y3VycmVudEVkaXRTZXJ2aWNlLmlkfS5wbmdgLFxuICAgICAgICAgICAgICBkYXRhOiBkYXRhVXJsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LnBhdGgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LWxvZ28tdXJsJykudmFsdWUgPSByZXN1bHQucGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGRhdGEgVVJMXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9KTtcblxuICAvLyBTZXJ2aWNlIGVkaXQgbW9kYWwgZXZlbnQgbGlzdGVuZXJzXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWVkaXQtY2FuY2VsJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2VTZXJ2aWNlRWRpdE1vZGFsKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZWRpdC1zYXZlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2F2ZVNlcnZpY2VDaGFuZ2VzKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZWRpdC1tb2RhbCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmlkID09PSAnc2VydmljZS1lZGl0LW1vZGFsJykgY2xvc2VTZXJ2aWNlRWRpdE1vZGFsKCk7XG4gIH0pO1xuXG4gIC8vID09PT09IERFTEVURSBTRVJWSUNFIE1PREFMID09PT09XG5cbiAgZnVuY3Rpb24gc2hvd0RlbGV0ZU1vZGFsKHNlcnZpY2VOYW1lLCBoYXNDb250YWluZXIsIGNvbnRhaW5lcklkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGUtc2VydmljZS1tb2RhbCcpO1xuICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlLW1vZGFsLXRpdGxlJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZS1tb2RhbC1tZXNzYWdlJyk7XG4gICAgICBjb25zdCBjb250YWluZXJJbmZvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZS1tb2RhbC1jb250YWluZXItaW5mbycpO1xuICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGUtbW9kYWwtY29udGFpbmVyLW5hbWUnKTtcbiAgICAgIGNvbnN0IGhlbHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlLW1vZGFsLWhlbHAnKTtcbiAgICAgIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGUtbW9kYWwtY2FuY2VsJyk7XG4gICAgICBjb25zdCByZW1vdmVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlLW1vZGFsLXJlbW92ZScpO1xuICAgICAgY29uc3QgZGVsZXRlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZS1tb2RhbC1kZWxldGUnKTtcblxuICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSBgRGVsZXRlIFwiJHtzZXJ2aWNlTmFtZX1cImA7XG5cbiAgICAgIGlmIChoYXNDb250YWluZXIpIHtcbiAgICAgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnVGhpcyBzZXJ2aWNlIGhhcyBhbiBhc3NvY2lhdGVkIERvY2tlciBjb250YWluZXIuPGJyPkNob29zZSBob3cgdG8gcHJvY2VlZDonO1xuICAgICAgICBjb250YWluZXJJbmZvLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBjb250YWluZXJOYW1lLnRleHRDb250ZW50ID0gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZD8uc2xpY2UoMCwgMTIpIHx8ICdVbmtub3duJ31gO1xuICAgICAgICBoZWxwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBkZWxldGVCdG4uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlLnRleHRDb250ZW50ID0gJ1JlbW92ZSB0aGlzIHNlcnZpY2UgZnJvbSB0aGUgZGFzaGJvYXJkPyc7XG4gICAgICAgIGNvbnRhaW5lckluZm8uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgaGVscC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkZWxldGVCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgbW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xuICAgICAgICBjYW5jZWxCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDYW5jZWwpO1xuICAgICAgICByZW1vdmVCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVSZW1vdmUpO1xuICAgICAgICBkZWxldGVCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVEZWxldGUpO1xuICAgICAgICBtb2RhbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUJhY2tkcm9wKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHsgY2xlYW51cCgpOyByZXNvbHZlKG51bGwpOyB9O1xuICAgICAgY29uc3QgaGFuZGxlUmVtb3ZlID0gKCkgPT4geyBjbGVhbnVwKCk7IHJlc29sdmUoZmFsc2UpOyB9O1xuICAgICAgY29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4geyBjbGVhbnVwKCk7IHJlc29sdmUodHJ1ZSk7IH07XG4gICAgICBjb25zdCBoYW5kbGVCYWNrZHJvcCA9IChlKSA9PiB7IGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIHsgY2xlYW51cCgpOyByZXNvbHZlKG51bGwpOyB9IH07XG5cbiAgICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNhbmNlbCk7XG4gICAgICByZW1vdmVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVSZW1vdmUpO1xuICAgICAgZGVsZXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlRGVsZXRlKTtcbiAgICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQmFja2Ryb3ApO1xuXG4gICAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PSBVUERBVEUgQ09OVEFJTkVSID09PT09XG5cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGNvbnRhaW5lcklkLCBzZXJ2aWNlTmFtZSwgc2VydmljZUlkKSB7XG4gICAgY29uc3QgdXBkYXRlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHVwZGF0ZS1idG4tJHtzZXJ2aWNlSWR9YCk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gdXBkYXRlQnRuPy50ZXh0Q29udGVudDtcblxuICAgIGlmICghY29uZmlybShgVXBkYXRlICR7c2VydmljZU5hbWV9IHRvIHRoZSBsYXRlc3QgdmVyc2lvbj9cXG5cXG5UaGlzIHdpbGw6XFxuMS4gUHVsbCB0aGUgbGF0ZXN0IGltYWdlXFxuMi4gU3RvcCB0aGUgY29udGFpbmVyXFxuMy4gUmVjcmVhdGUgd2l0aCBzYW1lIHNldHRpbmdzXFxuXFxuVGhlIHNlcnZpY2Ugd2lsbCBiZSBicmllZmx5IHVuYXZhaWxhYmxlLmApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh1cGRhdGVCdG4pIHtcbiAgICAgICAgdXBkYXRlQnRuLnRleHRDb250ZW50ID0gJ1xcdXsxRjUwNH0nO1xuICAgICAgICB1cGRhdGVCdG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB1cGRhdGVCdG4udGl0bGUgPSAnVXBkYXRpbmcuLi4nO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL2NvbnRhaW5lcnMvJHtjb250YWluZXJJZH0vdXBkYXRlYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2UgPSB3aW5kb3cuQVBQUy5maW5kKGFwcCA9PiBhcHAuaWQgPT09IHNlcnZpY2VJZCk7XG4gICAgICAgIGlmIChzZXJ2aWNlICYmIHJlc3VsdC5uZXdDb250YWluZXJJZCkge1xuICAgICAgICAgIHNlcnZpY2UuY29udGFpbmVySWQgPSByZXN1bHQubmV3Q29udGFpbmVySWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBkYXRlQnRuKSB7XG4gICAgICAgICAgdXBkYXRlQnRuLnRleHRDb250ZW50ID0gJ1xcdXsyNzA1fSc7XG4gICAgICAgICAgdXBkYXRlQnRuLnRpdGxlID0gJ1VwZGF0ZWQgc3VjY2Vzc2Z1bGx5ISc7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVCdG4udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7XG4gICAgICAgICAgICB1cGRhdGVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHVwZGF0ZUJ0bi50aXRsZSA9ICdVcGRhdGUgY29udGFpbmVyIHRvIGxhdGVzdCB2ZXJzaW9uJztcbiAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gd2luZG93LnJlZnJlc2hBbGwoKSwgMjAwMCk7XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24oYCR7c2VydmljZU5hbWV9IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IWAsICdzdWNjZXNzJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yIHx8ICdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VwZGF0ZSBlcnJvcjonLCBlcnJvcik7XG5cbiAgICAgIGlmICh1cGRhdGVCdG4pIHtcbiAgICAgICAgdXBkYXRlQnRuLnRleHRDb250ZW50ID0gJ1xcdXsyNzRDfSc7XG4gICAgICAgIHVwZGF0ZUJ0bi50aXRsZSA9ICdVcGRhdGUgZmFpbGVkJztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlQnRuLnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0O1xuICAgICAgICAgIHVwZGF0ZUJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHVwZGF0ZUJ0bi50aXRsZSA9ICdVcGRhdGUgY29udGFpbmVyIHRvIGxhdGVzdCB2ZXJzaW9uJztcbiAgICAgICAgfSwgMzAwMCk7XG4gICAgICB9XG5cbiAgICAgIHNob3dOb3RpZmljYXRpb24oYEZhaWxlZCB0byB1cGRhdGUgJHtzZXJ2aWNlTmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PSBERUxFVEUgU0VSVklDRSA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVNlcnZpY2Uoc2VydmljZUlkLCBzZXJ2aWNlTmFtZSkge1xuICAgIGNvbnN0IHNlcnZpY2UgPSB3aW5kb3cuQVBQUy5maW5kKGFwcCA9PiBhcHAuaWQgPT09IHNlcnZpY2VJZCk7XG4gICAgY29uc3QgZG9tYWluID0gc2VydmljZSA/IGJ1aWxkRG9tYWluKHNlcnZpY2UuaWQpIDogbnVsbDtcbiAgICBjb25zdCBoYXNDb250YWluZXIgPSBzZXJ2aWNlPy5jb250YWluZXJJZDtcblxuICAgIGNvbnN0IGRlbGV0ZUNvbnRhaW5lciA9IGF3YWl0IHNob3dEZWxldGVNb2RhbChzZXJ2aWNlTmFtZSB8fCBzZXJ2aWNlSWQsIGhhc0NvbnRhaW5lciwgc2VydmljZT8uY29udGFpbmVySWQpO1xuXG4gICAgaWYgKGRlbGV0ZUNvbnRhaW5lciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuOyAvLyBVc2VyIGNhbmNlbGxlZFxuICAgIH1cblxuICAgIGxldCByZXN1bHRzID0ge1xuICAgICAgZGFzaGJvYXJkOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5lcjogbnVsbCxcbiAgICAgIGRuczogbnVsbCxcbiAgICAgIGNhZGR5OiBudWxsLFxuICAgICAgc2VydmljZTogbnVsbFxuICAgIH07XG5cbiAgICAvLyBGdWxsIHJlbW92YWwgd2l0aCBjb250YWluZXJcbiAgICBpZiAoZGVsZXRlQ29udGFpbmVyICYmIGhhc0NvbnRhaW5lcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgY29udGFpbmVySWQ6IHNlcnZpY2UuY29udGFpbmVySWQsXG4gICAgICAgICAgc3ViZG9tYWluOiBzZXJ2aWNlLmlkLFxuICAgICAgICAgIGlwOiBzZXJ2aWNlLmlwIHx8ICdsb2NhbGhvc3QnLFxuICAgICAgICAgIGRlbGV0ZUNvbnRhaW5lcjogJ3RydWUnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VjdXJlRmV0Y2goYC9hcGkvdjEvYXBwcy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXJ2aWNlLmlkKX0/JHtwYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnREVMRVRFJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3VsdHMgPSB7IC4uLnJlc3VsdHMsIC4uLnJlc3VsdC5yZXN1bHRzLCBkYXNoYm9hcmQ6IGZhbHNlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignQXBwIHJlbW92YWwgZmFpbGVkOicsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcCByZW1vdmFsIGVycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlbGV0ZUNvbnRhaW5lciAmJiBkb21haW4pIHtcbiAgICAgIC8vIEZhbGxiYWNrIGZvciBtYW51YWxseSBhZGRlZCBzZXJ2aWNlc1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2VydmljZUlQID0gc2VydmljZT8uaXAgfHwgJ2xvY2FsaG9zdCc7XG4gICAgICAgIGNvbnN0IGRuc1Jlc3BvbnNlID0gYXdhaXQgc2VjdXJlRmV0Y2goYC9hcGkvdjEvZG5zL3JlY29yZD9kb21haW49JHtlbmNvZGVVUklDb21wb25lbnQoZG9tYWluKX0mdHlwZT1BJmlwQWRkcmVzcz0ke2VuY29kZVVSSUNvbXBvbmVudChzZXJ2aWNlSVApfSZzZXJ2ZXI9JHtTSVRFLmRuc0lwfWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkbnNSZXN1bHQgPSBhd2FpdCBkbnNSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJlc3VsdHMuZG5zID0gZG5zUmVzdWx0LnN1Y2Nlc3MgPyAnZGVsZXRlZCcgOiAoZG5zUmVzdWx0LmVycm9yIHx8ICdmYWlsZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVzdWx0cy5kbnMgPSBlLm1lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhZGR5UmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaChgL2FwaS92MS9zaXRlLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGRvbWFpbil9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURSdcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNhZGR5UmVzdWx0ID0gYXdhaXQgY2FkZHlSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJlc3VsdHMuY2FkZHkgPSAoY2FkZHlSZXN1bHQuc3VjY2VzcyB8fCAoY2FkZHlSZXN1bHQuZXJyb3IgJiYgY2FkZHlSZXN1bHQuZXJyb3IuaW5jbHVkZXMoJ25vdCBmb3VuZCcpKSkgPyAncmVtb3ZlZCcgOiAoY2FkZHlSZXN1bHQuZXJyb3IgfHwgJ2ZhaWxlZCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXN1bHRzLmNhZGR5ID0gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmcm9tIEFQUFMgYXJyYXlcbiAgICBjb25zdCBpbmRleCA9IHdpbmRvdy5BUFBTLmZpbmRJbmRleChhcHAgPT4gYXBwLmlkID09PSBzZXJ2aWNlSWQpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB3aW5kb3cuQVBQUy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmVzdWx0cy5kYXNoYm9hcmQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsU3RvcmFnZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXN0b21BcHBzID0gc2FmZUdldEpTT04oJ2N1c3RvbS1hcHBzJywgW10pO1xuICAgICAgY29uc3QgbG9jYWxJbmRleCA9IGN1c3RvbUFwcHMuZmluZEluZGV4KGFwcCA9PiBhcHAuaWQgPT09IHNlcnZpY2VJZCk7XG4gICAgICBpZiAobG9jYWxJbmRleCA+IC0xKSB7XG4gICAgICAgIGN1c3RvbUFwcHMuc3BsaWNlKGxvY2FsSW5kZXgsIDEpO1xuICAgICAgICBzYWZlU2V0KCdjdXN0b20tYXBwcycsIEpTT04uc3RyaW5naWZ5KGN1c3RvbUFwcHMpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZ25vcmUgbG9jYWxTdG9yYWdlIGVycm9yc1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmcm9tIHNlcnZpY2VzLmpzb24gdmlhIEFQSVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXJ2aWNlUmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaChgL2FwaS92MS9zZXJ2aWNlcy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXJ2aWNlSWQpfWAsIHtcbiAgICAgICAgbWV0aG9kOiAnREVMRVRFJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXJ2aWNlUmVzdWx0ID0gYXdhaXQgc2VydmljZVJlc3BvbnNlLmpzb24oKTtcbiAgICAgIHJlc3VsdHMuc2VydmljZSA9IHNlcnZpY2VSZXN1bHQuc3VjY2VzcyA/ICdyZW1vdmVkJyA6IChzZXJ2aWNlUmVzdWx0LmVycm9yIHx8ICdmYWlsZWQnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXN1bHRzLnNlcnZpY2UgPSBlLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgd2luZG93LmJ1aWxkR3JpZCgpO1xuICAgIHdpbmRvdy5yZWZyZXNoQWxsKCk7XG5cbiAgICAvLyBPbmx5IHNob3cgYWxlcnQgaWYgdGhlcmUgYXJlIGFjdHVhbCBlcnJvcnNcbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgbGV0IGVycm9yTWVzc2FnZXMgPSBbXTtcblxuICAgIGlmICghcmVzdWx0cy5kYXNoYm9hcmQpIHtcbiAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICBlcnJvck1lc3NhZ2VzLnB1c2goJ1xcdXsyNzE3fSBGYWlsZWQgdG8gcmVtb3ZlIGZyb20gZGFzaGJvYXJkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VjY2Vzc1N0YXRlcyA9IFsncmVtb3ZlZCcsICdhbHJlYWR5IHJlbW92ZWQnLCAnbm90IGZvdW5kJywgJ2RlbGV0ZWQnLCAna2VwdCAodXNlciBjaG9pY2UpJywgJ3NraXBwZWQnLCAnbm8gc3VjaCByZWNvcmQnLCAnZG9lcyBub3QgZXhpc3QnXTtcbiAgICBjb25zdCBpc1N1Y2Nlc3MgPSAodmFsKSA9PiAhdmFsIHx8IHN1Y2Nlc3NTdGF0ZXMuc29tZShzID0+IHZhbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKHJlc3VsdHMuY29udGFpbmVyICYmICFpc1N1Y2Nlc3MocmVzdWx0cy5jb250YWluZXIpKSB7XG4gICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBcXHV7MjZBMH0gQ29udGFpbmVyOiAke3Jlc3VsdHMuY29udGFpbmVyfWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0cy5kbnMgJiYgIWlzU3VjY2VzcyhyZXN1bHRzLmRucykpIHtcbiAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICBlcnJvck1lc3NhZ2VzLnB1c2goYFxcdXsyNkEwfSBETlMgUmVjb3JkOiAke3Jlc3VsdHMuZG5zfWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0cy5jYWRkeSAmJiAhaXNTdWNjZXNzKHJlc3VsdHMuY2FkZHkpKSB7XG4gICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBcXHV7MjZBMH0gQ2FkZHkgQ29uZmlnOiAke3Jlc3VsdHMuY2FkZHl9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHRzLnNlcnZpY2UgJiYgIWlzU3VjY2VzcyhyZXN1bHRzLnNlcnZpY2UpKSB7XG4gICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBcXHV7MjZBMH0gU2VydmljZSBGaWxlOiAke3Jlc3VsdHMuc2VydmljZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKGBFcnJvciBkZWxldGluZyBcIiR7c2VydmljZU5hbWUgfHwgc2VydmljZUlkfVwiOiAke2Vycm9yTWVzc2FnZXMuam9pbignLCAnKX1gLCAnZXJyb3InLCA2MDAwKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PSBXSU5ET1cgRVhQT1JUUyA9PT09PVxuXG4gIHdpbmRvdy5vcGVuU2VydmljZUVkaXRNb2RhbCA9IG9wZW5TZXJ2aWNlRWRpdE1vZGFsO1xuICB3aW5kb3cuc2hvd0RlbGV0ZU1vZGFsID0gc2hvd0RlbGV0ZU1vZGFsO1xuICB3aW5kb3cudXBkYXRlQ29udGFpbmVyID0gdXBkYXRlQ29udGFpbmVyO1xuICB3aW5kb3cuZGVsZXRlU2VydmljZSA9IGRlbGV0ZVNlcnZpY2U7XG5cbn0pKCk7XG47XG4vLyA9PT09PT09PT09IFNFUlZJQ0UgQ1JFQVRJT04gPT09PT09PT09PVxuLy8gQWRkIHNlcnZpY2UgbW9kYWwsIGxvY2FsL2V4dGVybmFsIHNlcnZpY2UgY3JlYXRpb24gZmxvd3MsIGFuZCBldmVudCB3aXJpbmcuXG4oZnVuY3Rpb24gKCkge1xuXG4gIC8vID09PT09IFNVQkRPTUFJTiBBVVRPLURFUklWRSA9PT09PVxuXG4gIGZ1bmN0aW9uIGRlcml2ZVN1YmRvbWFpbihuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJykucmVwbGFjZSgvW15hLXowLTktXS9nLCAnJykucmVwbGFjZSgvLSsvZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTbWFydFNzbERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIFNJVEUuZGVmYXVsdHM/LnNzbFR5cGUgfHwgKFNJVEUuY29uZmlndXJhdGlvblR5cGUgPT09ICdwdWJsaWMnID8gJ2xldHNlbmNyeXB0JyA6ICdjYWRkeS1tYW5hZ2VkJyk7XG4gIH1cblxuICAvLyA9PT09PSBTRVJWSUNFIFBSRVZJRVcgPT09PT1cblxuICBmdW5jdGlvbiB1cGRhdGVTZXJ2aWNlUHJldmlldygpIHtcbiAgICBjb25zdCBzdWJkb21haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1zdWJkb21haW4taW5wdXQnKS52YWx1ZSB8fCAnc3ViZG9tYWluJztcbiAgICBjb25zdCBpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWlwLWlucHV0JykudmFsdWUgfHwgUVVJQ0tfSVBTLmxhbiB8fCAnbG9jYWxob3N0JztcbiAgICBjb25zdCBwb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtcG9ydC1pbnB1dCcpLnZhbHVlIHx8IERDLkRFRkFVTFRTLlNFUlZJQ0VfUE9SVDtcbiAgICBjb25zdCBzc2xUeXBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NzbC10eXBlLXNlbGVjdCcpLnZhbHVlO1xuICAgIGNvbnN0IGNhTmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYS1uYW1lLWlucHV0JykudmFsdWUgfHwgJ3NhbWktY2EnO1xuICAgIGNvbnN0IGV4aXN0aW5nQ2EgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhpc3RpbmctY2Etc2VsZWN0JykudmFsdWU7XG4gICAgY29uc3QgZW5hYmxlQXV0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtYXV0aCcpLmNoZWNrZWQ7XG4gICAgY29uc3QgZW5hYmxlQ29ycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtY29ycycpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b20taGVhZGVycy1pbnB1dCcpLnZhbHVlO1xuICAgIGNvbnN0IHVwc3RyZWFtUGF0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cHN0cmVhbS1wYXRoLWlucHV0JykudmFsdWUgfHwgJy8nO1xuICAgIGNvbnN0IGhlYWx0aENoZWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWx0aC1jaGVjay1pbnB1dCcpLnZhbHVlO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZW91dC1pbnB1dCcpLnZhbHVlIHx8IDMwO1xuXG4gICAgY29uc3QgZG5zUHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkbnMtcHJldmlldycpO1xuICAgIGlmIChkbnNQcmV2aWV3KSBkbnNQcmV2aWV3LnRleHRDb250ZW50ID0gYCR7YnVpbGREb21haW4oc3ViZG9tYWluKX0gXFx1MjE5MiAke2lwfWA7XG5cbiAgICBjb25zdCB1cmxQcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybC1wcmV2aWV3Jyk7XG4gICAgaWYgKHVybFByZXZpZXcpIHVybFByZXZpZXcudGV4dENvbnRlbnQgPSBidWlsZFNlcnZpY2VVcmwoc3ViZG9tYWluKTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIHN1YmRvbWFpbiwgcG9ydCwgaXAsIHNzbFR5cGUsIGNhTmFtZSwgZXhpc3RpbmdDYSxcbiAgICAgIGVuYWJsZUF1dGgsIGVuYWJsZUNvcnMsIGN1c3RvbUhlYWRlcnMsIHVwc3RyZWFtUGF0aCwgaGVhbHRoQ2hlY2ssIHRpbWVvdXRcbiAgICB9O1xuXG4gICAgY29uc3QgY2FkZHlDb25maWcgPSB3aW5kb3cuZ2VuZXJhdGVDYWRkeUNvbmZpZyhjb25maWcpO1xuICAgIGNvbnN0IGNvbmZpZ1ByZXZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FkZHktY29uZmlnLXByZXZpZXcnKTtcbiAgICBpZiAoY29uZmlnUHJldmlldykgY29uZmlnUHJldmlldy52YWx1ZSA9IGNhZGR5Q29uZmlnO1xuICB9XG5cbiAgLy8gPT09PT0gUVVJQ0sgSVAgQ09ORklHVVJBVElPTiA9PT09PVxuXG4gIGNvbnN0IFFVSUNLX0lQUyA9IHtcbiAgICBsb2NhbGhvc3Q6ICcxMjcuMC4wLjEnLFxuICAgIGxhbjogJycsXG4gICAgdGFpbHNjYWxlOiAnJ1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGRldGVjdE5ldHdvcmtJUHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvdjEvbmV0d29yay9pcHMnLCB7XG4gICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgyMDAwKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgaWYgKGRhdGEubGFuKSBRVUlDS19JUFMubGFuID0gZGF0YS5sYW47XG4gICAgICAgIGlmIChkYXRhLnRhaWxzY2FsZSkgUVVJQ0tfSVBTLnRhaWxzY2FsZSA9IGRhdGEudGFpbHNjYWxlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEFQSSBub3QgYXZhaWxhYmxlXG4gICAgfVxuXG4gICAgY29uc3QgbGFuQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1aWNrLWlwLWxhbicpO1xuICAgIGNvbnN0IHRzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1aWNrLWlwLXRhaWxzY2FsZScpO1xuICAgIGlmIChsYW5CdG4pIHtcbiAgICAgIGlmIChRVUlDS19JUFMubGFuKSB7XG4gICAgICAgIGxhbkJ0bi5kYXRhc2V0LmlwID0gUVVJQ0tfSVBTLmxhbjtcbiAgICAgICAgbGFuQnRuLnRleHRDb250ZW50ID0gYExBTiAoJHtRVUlDS19JUFMubGFufSlgO1xuICAgICAgICBsYW5CdG4udGl0bGUgPSBgTEFOIElQOiAke1FVSUNLX0lQUy5sYW59YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhbkJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHNCdG4pIHtcbiAgICAgIGlmIChRVUlDS19JUFMudGFpbHNjYWxlKSB7XG4gICAgICAgIHRzQnRuLmRhdGFzZXQuaXAgPSBRVUlDS19JUFMudGFpbHNjYWxlO1xuICAgICAgICB0c0J0bi50ZXh0Q29udGVudCA9IGBUYWlsc2NhbGUgKCR7UVVJQ0tfSVBTLnRhaWxzY2FsZX0pYDtcbiAgICAgICAgdHNCdG4udGl0bGUgPSBgVGFpbHNjYWxlIElQOiAke1FVSUNLX0lQUy50YWlsc2NhbGV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRzQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1pcC1pbnB1dCcpO1xuICAgIGlmIChpcElucHV0ICYmICFpcElucHV0LnZhbHVlICYmIFFVSUNLX0lQUy5sYW4pIGlwSW5wdXQudmFsdWUgPSBRVUlDS19JUFMubGFuO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdFF1aWNrSVBCdXR0b25zKCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xdWljay1pcC1idG4nKS5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlwID0gYnRuLmRhdGFzZXQuaXA7XG4gICAgICAgIGlmIChpcCkge1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWlwLWlucHV0JykudmFsdWUgPSBpcDtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucXVpY2staXAtYnRuJykuZm9yRWFjaChiID0+IGIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgICB1cGRhdGVTZXJ2aWNlUHJldmlldygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWlwLWlucHV0Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJUCA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnF1aWNrLWlwLWJ0bicpLmZvckVhY2goYnRuID0+IHtcbiAgICAgICAgYnRuLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIGJ0bi5kYXRhc2V0LmlwID09PSBjdXJyZW50SVApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PSBBREQgU0VSVklDRSBNT0RBTCA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5BZGRTZXJ2aWNlTW9kYWwoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRkLXNlcnZpY2UtbW9kYWwnKTtcbiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICBjb25zdCBtb2RhbENvbnRlbnQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcud2VhdGhlci1tb2RhbC1jb250ZW50Jyk7XG4gICAgaWYgKG1vZGFsQ29udGVudCkgbW9kYWxDb250ZW50LnNjcm9sbFRvcCA9IDA7XG5cbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cbiAgICAvLyBTZXQgc21hcnQgU1NMIGRlZmF1bHRcbiAgICBjb25zdCBzc2xTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3NsLXR5cGUtc2VsZWN0Jyk7XG4gICAgaWYgKHNzbFNlbGVjdCkgc3NsU2VsZWN0LnZhbHVlID0gZ2V0U21hcnRTc2xEZWZhdWx0KCk7XG5cbiAgICBhd2FpdCBkZXRlY3ROZXR3b3JrSVBzKCk7XG5cbiAgICBjb25zdCBjYWRkeWZpbGVQYXRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhZGR5ZmlsZS1wYXRoLWlucHV0JykudmFsdWUgfHwgREMuREVGQVVMVFMuQ0FERFlGSUxFO1xuICAgIGF3YWl0IHdpbmRvdy5sb2FkRXhpc3RpbmdDQXMoY2FkZHlmaWxlUGF0aCk7XG5cbiAgICAvLyBDaGVjayBUYWlsc2NhbGUgc3RhdHVzXG4gICAgY29uc3QgdGFpbHNjYWxlU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hbnVhbC10YWlsc2NhbGUtc3RhdHVzJyk7XG4gICAgY29uc3QgdGFpbHNjYWxlQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFudWFsLXRhaWxzY2FsZS1vbmx5Jyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvdjEvdGFpbHNjYWxlL3N0YXR1cycpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MgJiYgZGF0YS5pbnN0YWxsZWQgJiYgZGF0YS5jb25uZWN0ZWQpIHtcbiAgICAgICAgdGFpbHNjYWxlU3RhdHVzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjNGNhZjUwO1wiPlxcdTI3MTMgQ29ubmVjdGVkPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWxlZnQ6IDZweDtcIj4ke2RhdGEuc2VsZj8uaG9zdG5hbWV9ICgke2RhdGEuc2VsZj8uaXB9KTwvc3Bhbj5cbiAgICAgICAgYDtcbiAgICAgICAgdGFpbHNjYWxlQ2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5pbnN0YWxsZWQpIHtcbiAgICAgICAgdGFpbHNjYWxlU3RhdHVzLmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT1cImNvbG9yOiAjZmY5ODAwO1wiPlxcdTI2QTAgTm90IGNvbm5lY3RlZDwvc3Bhbj5gO1xuICAgICAgICB0YWlsc2NhbGVDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWlsc2NhbGVTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTtcIj5Ob3QgYXZhaWxhYmxlPC9zcGFuPmA7XG4gICAgICAgIHRhaWxzY2FsZUNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0YWlsc2NhbGVTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTtcIj5Db3VsZCBub3QgY2hlY2s8L3NwYW4+YDtcbiAgICAgIHRhaWxzY2FsZUNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGFpbHNjYWxlQ2hlY2tib3guY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgdXBkYXRlU2VydmljZVByZXZpZXcoKTtcbiAgfVxuXG4gIC8vID09PT09IFNFUlZJQ0UgVFlQRSBTV0lUQ0hJTkcgKFRBQiBTVFlMRSkgPT09PT1cblxuICBmdW5jdGlvbiBzZXR1cFNlcnZpY2VUeXBlU3dpdGNoaW5nKCkge1xuICAgIGNvbnN0IGxvY2FsUmFkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS10eXBlLWxvY2FsJyk7XG4gICAgY29uc3QgZXh0ZXJuYWxSYWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLXR5cGUtZXh0ZXJuYWwnKTtcbiAgICBjb25zdCBsb2NhbENvbmZpZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhbC1zZXJ2aWNlLWNvbmZpZycpO1xuICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXNlcnZpY2UtY29uZmlnJyk7XG4gICAgY29uc3QgdGFiTG9jYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWxvY2FsJyk7XG4gICAgY29uc3QgdGFiRXh0ZXJuYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWV4dGVybmFsJyk7XG5cbiAgICBmdW5jdGlvbiBzd2l0Y2hTZXJ2aWNlVHlwZSgpIHtcbiAgICAgIGlmIChsb2NhbFJhZGlvLmNoZWNrZWQpIHtcbiAgICAgICAgbG9jYWxDb25maWcuc3R5bGUuZGlzcGxheSA9ICdncmlkJztcbiAgICAgICAgZXh0ZXJuYWxDb25maWcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgaWYgKHRhYkxvY2FsKSB7IHRhYkxvY2FsLnN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tYWNjZW50KSc7IHRhYkxvY2FsLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWJnKSc7IH1cbiAgICAgICAgaWYgKHRhYkV4dGVybmFsKSB7IHRhYkV4dGVybmFsLnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnOyB0YWJFeHRlcm5hbC5zdHlsZS5jb2xvciA9ICd2YXIoLS1tdXRlZCknOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhbENvbmZpZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBleHRlcm5hbENvbmZpZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgaWYgKHRhYkV4dGVybmFsKSB7IHRhYkV4dGVybmFsLnN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tYWNjZW50KSc7IHRhYkV4dGVybmFsLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWJnKSc7IH1cbiAgICAgICAgaWYgKHRhYkxvY2FsKSB7IHRhYkxvY2FsLnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnOyB0YWJMb2NhbC5zdHlsZS5jb2xvciA9ICd2YXIoLS1tdXRlZCknOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9jYWxSYWRpbz8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc3dpdGNoU2VydmljZVR5cGUpO1xuICAgIGV4dGVybmFsUmFkaW8/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHN3aXRjaFNlcnZpY2VUeXBlKTtcbiAgfVxuXG4gIC8vID09PT09IEFVVE8tREVSSVZFIFNVQkRPTUFJTiBGUk9NIE5BTUUgPT09PT1cblxuICBmdW5jdGlvbiBzZXR1cEF1dG9TdWJkb21haW4oKSB7XG4gICAgLy8gTG9jYWwgc2VydmljZTogbmFtZSBcdTIxOTIgc3ViZG9tYWluICsgcHJldmlld1xuICAgIGNvbnN0IG5hbWVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLW5hbWUtaW5wdXQnKTtcbiAgICBjb25zdCBzdWJkb21haW5JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLXN1YmRvbWFpbi1pbnB1dCcpO1xuICAgIGNvbnN0IHN1YmRvbWFpblByZXZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViZG9tYWluLXByZXZpZXcnKTtcbiAgICBsZXQgdXNlckVkaXRlZFN1YmRvbWFpbiA9IGZhbHNlO1xuXG4gICAgbmFtZUlucHV0Py5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdWJkb21haW4obmFtZUlucHV0LnZhbHVlKTtcbiAgICAgIGlmICghdXNlckVkaXRlZFN1YmRvbWFpbiAmJiBzdWJkb21haW5JbnB1dCkge1xuICAgICAgICBzdWJkb21haW5JbnB1dC52YWx1ZSA9IGRlcml2ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoc3ViZG9tYWluUHJldmlldykge1xuICAgICAgICBzdWJkb21haW5QcmV2aWV3LnRleHRDb250ZW50ID0gZGVyaXZlZCA/IGBcXHUyMTkyICR7YnVpbGREb21haW4oZGVyaXZlZCl9YCA6ICcnO1xuICAgICAgfVxuICAgICAgdXBkYXRlU2VydmljZVByZXZpZXcoKTtcbiAgICB9KTtcblxuICAgIHN1YmRvbWFpbklucHV0Py5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgICAgIHVzZXJFZGl0ZWRTdWJkb21haW4gPSBzdWJkb21haW5JbnB1dC52YWx1ZSAhPT0gZGVyaXZlU3ViZG9tYWluKG5hbWVJbnB1dD8udmFsdWUgfHwgJycpO1xuICAgICAgY29uc3Qgc3ViID0gc3ViZG9tYWluSW5wdXQudmFsdWUudHJpbSgpIHx8IGRlcml2ZVN1YmRvbWFpbihuYW1lSW5wdXQ/LnZhbHVlIHx8ICcnKTtcbiAgICAgIGlmIChzdWJkb21haW5QcmV2aWV3KSB7XG4gICAgICAgIHN1YmRvbWFpblByZXZpZXcudGV4dENvbnRlbnQgPSBzdWIgPyBgXFx1MjE5MiAke2J1aWxkRG9tYWluKHN1Yil9YCA6ICcnO1xuICAgICAgfVxuICAgICAgdXBkYXRlU2VydmljZVByZXZpZXcoKTtcbiAgICB9KTtcblxuICAgIC8vIEV4dGVybmFsIHNlcnZpY2U6IG5hbWUgXHUyMTkyIHN1YmRvbWFpbiArIHByZXZpZXdcbiAgICBjb25zdCBleHROYW1lSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1uYW1lJyk7XG4gICAgY29uc3QgZXh0U3ViZG9tYWluSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1zdWJkb21haW4nKTtcbiAgICBjb25zdCBleHRTdWJkb21haW5QcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXN1YmRvbWFpbi1wcmV2aWV3Jyk7XG4gICAgY29uc3QgZXh0RG9tYWluUHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1kb21haW4tcHJldmlldycpO1xuICAgIGxldCB1c2VyRWRpdGVkRXh0U3ViZG9tYWluID0gZmFsc2U7XG5cbiAgICBleHROYW1lSW5wdXQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVN1YmRvbWFpbihleHROYW1lSW5wdXQudmFsdWUpO1xuICAgICAgaWYgKCF1c2VyRWRpdGVkRXh0U3ViZG9tYWluICYmIGV4dFN1YmRvbWFpbklucHV0KSB7XG4gICAgICAgIGV4dFN1YmRvbWFpbklucHV0LnZhbHVlID0gZGVyaXZlZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YiA9IGV4dFN1YmRvbWFpbklucHV0Py52YWx1ZSB8fCBkZXJpdmVkO1xuICAgICAgaWYgKGV4dFN1YmRvbWFpblByZXZpZXcpIHtcbiAgICAgICAgZXh0U3ViZG9tYWluUHJldmlldy50ZXh0Q29udGVudCA9IHN1YiA/IGBcXHUyMTkyICR7YnVpbGREb21haW4oc3ViKX1gIDogJyc7XG4gICAgICB9XG4gICAgICBpZiAoZXh0RG9tYWluUHJldmlldykge1xuICAgICAgICBleHREb21haW5QcmV2aWV3LnRleHRDb250ZW50ID0gc3ViID8gYnVpbGREb21haW4oc3ViKSA6ICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZXh0U3ViZG9tYWluSW5wdXQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgdXNlckVkaXRlZEV4dFN1YmRvbWFpbiA9IGV4dFN1YmRvbWFpbklucHV0LnZhbHVlICE9PSBkZXJpdmVTdWJkb21haW4oZXh0TmFtZUlucHV0Py52YWx1ZSB8fCAnJyk7XG4gICAgICBjb25zdCBzdWIgPSBleHRTdWJkb21haW5JbnB1dC52YWx1ZS50cmltKCkgfHwgZGVyaXZlU3ViZG9tYWluKGV4dE5hbWVJbnB1dD8udmFsdWUgfHwgJycpO1xuICAgICAgaWYgKGV4dFN1YmRvbWFpblByZXZpZXcpIHtcbiAgICAgICAgZXh0U3ViZG9tYWluUHJldmlldy50ZXh0Q29udGVudCA9IHN1YiA/IGBcXHUyMTkyICR7YnVpbGREb21haW4oc3ViKX1gIDogJyc7XG4gICAgICB9XG4gICAgICBpZiAoZXh0RG9tYWluUHJldmlldykge1xuICAgICAgICBleHREb21haW5QcmV2aWV3LnRleHRDb250ZW50ID0gc3ViID8gYnVpbGREb21haW4oc3ViKSA6ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT0gQ1JFQVRFIEVYVEVSTkFMIFNFUlZJQ0UgPT09PT1cblxuICBhc3luYyBmdW5jdGlvbiBjcmVhdGVFeHRlcm5hbFNlcnZpY2UoKSB7XG4gICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLW5hbWUnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgZXh0ZXJuYWxVcmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS11cmwnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3Qgc3ViZG9tYWluID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLXN1YmRvbWFpbicpLnZhbHVlLnRyaW0oKSB8fCBkZXJpdmVTdWJkb21haW4obmFtZSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLWxvZ28nKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgaWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLWljb24nKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgY3JlYXRlRG5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLWNyZWF0ZS1kbnMnKS5jaGVja2VkO1xuICAgIGNvbnN0IGNyZWF0ZUNhZGR5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLWNyZWF0ZS1jYWRkeScpLmNoZWNrZWQ7XG4gICAgY29uc3QgcHJveHlJcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1wcm94eS1pcCcpLnZhbHVlLnRyaW0oKSB8fCBTSVRFLmRuc0lwIHx8ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IHByZXNlcnZlSG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1wcmVzZXJ2ZS1ob3N0JykuY2hlY2tlZDtcbiAgICBjb25zdCBmb2xsb3dSZWRpcmVjdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtZm9sbG93LXJlZGlyZWN0cycpLmNoZWNrZWQ7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1jYXRlZ29yeScpPy52YWx1ZSB8fCAnJztcblxuICAgIGlmICghbmFtZSB8fCAhZXh0ZXJuYWxVcmwpIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ1BsZWFzZSBmaWxsIGluIE5hbWUgYW5kIEV4dGVybmFsIFVSTCcsICd3YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFzdWJkb21haW4pIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ0NvdWxkIG5vdCBkZXJpdmUgc3ViZG9tYWluIGZyb20gbmFtZS4gUGxlYXNlIHNldCBvbmUgaW4gT3B0aW9ucy4nLCAnd2FybmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZXh0ZXJuYWxVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFleHRlcm5hbFVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdFeHRlcm5hbCBVUkwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nLCAnd2FybmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRvbWFpbiA9IGJ1aWxkRG9tYWluKHN1YmRvbWFpbik7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IHsgZG5zOiBudWxsLCBjYWRkeTogbnVsbCwgZGFzaGJvYXJkOiBmYWxzZSB9O1xuXG4gICAgICBpZiAoY3JlYXRlRG5zKSB7XG4gICAgICAgIGNvbnN0IGFkbWluVG9rZW4gPSB3aW5kb3cuZ2V0VG9rZW4oZ2V0UHJpbWFyeURuc0lkKCksICdhZG1pbicpO1xuICAgICAgICBpZiAoYWRtaW5Ub2tlbikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkbnNSZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2Rucy9yZWNvcmQnLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgICAgICAgICAgIGlwOiBwcm94eUlwLFxuICAgICAgICAgICAgICAgIHR0bDogREMuREVGQVVMVFMuVFRMLFxuICAgICAgICAgICAgICAgIHNlcnZlcjogU0lURS5kbnNJcFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBkbnNSZXN1bHQgPSBhd2FpdCBkbnNSZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICByZXN1bHRzLmRucyA9IGRuc1Jlc3VsdC5zdWNjZXNzID8gJ2NyZWF0ZWQnIDogKGRuc1Jlc3VsdC5lcnJvciB8fCAnZmFpbGVkJyk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVzdWx0cy5kbnMgPSBlLm1lc3NhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdHMuZG5zID0gJ25vIGFkbWluIHRva2VuIChjb25maWd1cmUgaW4gXFx1RDgzRFxcdUREMTEgVG9rZW5zKSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNyZWF0ZUNhZGR5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2FkZHlDb25maWcgPSB7XG4gICAgICAgICAgICBzdWJkb21haW46IHN1YmRvbWFpbixcbiAgICAgICAgICAgIGV4dGVybmFsVXJsOiBleHRlcm5hbFVybCxcbiAgICAgICAgICAgIHByZXNlcnZlSG9zdDogcHJlc2VydmVIb3N0LFxuICAgICAgICAgICAgZm9sbG93UmVkaXJlY3RzOiBmb2xsb3dSZWRpcmVjdHMsXG4gICAgICAgICAgICBzc2xUeXBlOiAnY2FkZHktbWFuYWdlZCcsXG4gICAgICAgICAgICBjYWRkeWZpbGVQYXRoOiBEQy5ERUZBVUxUUy5DQUREWUZJTEUsXG4gICAgICAgICAgICByZWxvYWRDYWRkeTogdHJ1ZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBjYWRkeVJlc3BvbnNlID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvc2l0ZS9leHRlcm5hbCcsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShjYWRkeUNvbmZpZylcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGNhZGR5UmVzdWx0ID0gYXdhaXQgY2FkZHlSZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgcmVzdWx0cy5jYWRkeSA9IGNhZGR5UmVzdWx0LnN1Y2Nlc3MgPyAnY3JlYXRlZCcgOiAoY2FkZHlSZXN1bHQuZXJyb3IgfHwgJ2ZhaWxlZCcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzdWx0cy5jYWRkeSA9IGUubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdTZXJ2aWNlID0ge1xuICAgICAgICBpZDogc3ViZG9tYWluLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB1cmw6IGBodHRwczovLyR7ZG9tYWlufWAsXG4gICAgICAgIGV4dGVybmFsVXJsOiBleHRlcm5hbFVybCxcbiAgICAgICAgbG9nbzogbG9nbyB8fCBpY29uIHx8ICdcXHVEODNDXFx1REYxMCcsXG4gICAgICAgIGlzRXh0ZXJuYWw6IHRydWUsXG4gICAgICAgIGlzQ3VzdG9tOiB0cnVlXG4gICAgICB9O1xuICAgICAgLy8gT25seSBhdHRhY2ggY2F0ZWdvcnkgaWYgdXNlciBhY3R1YWxseSBwaWNrZWQgb25lXG4gICAgICBpZiAoY2F0ZWdvcnkpIG5ld1NlcnZpY2UuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcblxuICAgICAgd2luZG93LkFQUFMucHVzaChuZXdTZXJ2aWNlKTtcbiAgICAgIHJlc3VsdHMuZGFzaGJvYXJkID0gdHJ1ZTtcblxuICAgICAgY29uc3QgZGVmYXVsdFNlcnZpY2VzID0gWydwbGV4JywgJ3JvdXRlcicsICdjaGF0JywgJ3N5bmMnLCAndG9ycmVudCcsICdyYWRhcnInLCAnc29uYXJyJywgJ3Byb3dsYXJyJywgJ3BvcnRhaW5lcicsICdyZXF1ZXN0cycsICdqZWxseWZpbicsICdlbWJ5J107XG4gICAgICBjb25zdCBjdXN0b21TZXJ2aWNlcyA9IHdpbmRvdy5BUFBTLmZpbHRlcihhcHAgPT4gIWRlZmF1bHRTZXJ2aWNlcy5pbmNsdWRlcyhhcHAuaWQpKTtcbiAgICAgIHNhZmVTZXQoJ2N1c3RvbS1zZXJ2aWNlcycsIEpTT04uc3RyaW5naWZ5KGN1c3RvbVNlcnZpY2VzKSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3NlcnZpY2VzJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHdpbmRvdy5BUFBTKVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSB0byBzZXJ2aWNlcy5qc29uOicsIGUpO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuYnVpbGRHcmlkKCk7XG4gICAgICB3aW5kb3cucmVmcmVzaEFsbCgpO1xuXG4gICAgICBjbG9zZUFkZFNlcnZpY2VNb2RhbCgpO1xuXG4gICAgICBjb25zdCBwYXJ0cyA9IFtgRXh0ZXJuYWwgc2VydmljZSBcIiR7bmFtZX1cIiBhZGRlZCFgXTtcbiAgICAgIGlmIChjcmVhdGVEbnMpIHBhcnRzLnB1c2goYEROUzogJHtyZXN1bHRzLmRucyA9PT0gJ2NyZWF0ZWQnID8gJ1xcdTI3MTMnIDogJ1xcdTI2QTAgJyArIHJlc3VsdHMuZG5zfWApO1xuICAgICAgaWYgKGNyZWF0ZUNhZGR5KSBwYXJ0cy5wdXNoKGBDYWRkeTogJHtyZXN1bHRzLmNhZGR5ID09PSAnY3JlYXRlZCcgPyAnXFx1MjcxMycgOiAnXFx1MjZBMCAnICsgcmVzdWx0cy5jYWRkeX1gKTtcbiAgICAgIHBhcnRzLnB1c2goYEFjY2VzcyBhdDogaHR0cHM6Ly8ke2RvbWFpbn1gKTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24ocGFydHMuam9pbignIHwgJyksICdzdWNjZXNzJywgNjAwMCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBleHRlcm5hbCBzZXJ2aWNlOicsIGVycm9yKTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oYEZhaWxlZCB0byBjcmVhdGUgZXh0ZXJuYWwgc2VydmljZTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09IENMT1NFIEFERCBTRVJWSUNFIE1PREFMID09PT09XG5cbiAgZnVuY3Rpb24gY2xvc2VBZGRTZXJ2aWNlTW9kYWwoKSB7XG4gICAgY2xvc2VNb2RhbCgnYWRkLXNlcnZpY2UtbW9kYWwnKTtcblxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLW5hbWUtaW5wdXQnKS52YWx1ZSA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLXN1YmRvbWFpbi1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtcG9ydC1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtaXAtaW5wdXQnKS52YWx1ZSA9IFFVSUNLX0lQUy5sYW4gfHwgJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtbG9nby1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rucy10dGwtaW5wdXQnKS52YWx1ZSA9IERDLkRFRkFVTFRTLlRUTDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3NsLXR5cGUtc2VsZWN0JykudmFsdWUgPSBnZXRTbWFydFNzbERlZmF1bHQoKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2EtbmFtZS1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuYWJsZS1hdXRoJykuY2hlY2tlZCA9IGZhbHNlO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtY29ycycpLmNoZWNrZWQgPSBmYWxzZTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tLWhlYWRlcnMtaW5wdXQnKS52YWx1ZSA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cHN0cmVhbS1wYXRoLWlucHV0JykudmFsdWUgPSAnLyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWx0aC1jaGVjay1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpbWVvdXQtaW5wdXQnKS52YWx1ZSA9ICczMCc7XG5cbiAgICAvLyBDbGVhciBzdWJkb21haW4gcHJldmlld3NcbiAgICBjb25zdCBzdWJQcmV2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YmRvbWFpbi1wcmV2aWV3Jyk7XG4gICAgaWYgKHN1YlByZXYpIHN1YlByZXYudGV4dENvbnRlbnQgPSAnJztcbiAgICBjb25zdCBleHRTdWJQcmV2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXN1YmRvbWFpbi1wcmV2aWV3Jyk7XG4gICAgaWYgKGV4dFN1YlByZXYpIGV4dFN1YlByZXYudGV4dENvbnRlbnQgPSAnJztcblxuICAgIC8vIENsZWFyIGV4dGVybmFsIGZpZWxkc1xuICAgIGNvbnN0IGV4dE5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1uYW1lJyk7XG4gICAgaWYgKGV4dE5hbWUpIGV4dE5hbWUudmFsdWUgPSAnJztcbiAgICBjb25zdCBleHRTdWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1zdWJkb21haW4nKTtcbiAgICBpZiAoZXh0U3ViKSBleHRTdWIudmFsdWUgPSAnJztcbiAgICBjb25zdCBleHRVcmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS11cmwnKTtcbiAgICBpZiAoZXh0VXJsKSBleHRVcmwudmFsdWUgPSAnJztcbiAgICBjb25zdCBleHRMb2dvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXNlcnZpY2UtbG9nbycpO1xuICAgIGlmIChleHRMb2dvKSBleHRMb2dvLnZhbHVlID0gJyc7XG4gICAgY29uc3QgZXh0SWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLWljb24nKTtcbiAgICBpZiAoZXh0SWNvbikgZXh0SWNvbi52YWx1ZSA9ICcnO1xuXG4gICAgLy8gQ29sbGFwc2Ugb3B0aW9uc1xuICAgIGNvbnN0IGxvY2FsT3B0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhbC1hZHZhbmNlZC1vcHRpb25zJyk7XG4gICAgaWYgKGxvY2FsT3B0cykgbG9jYWxPcHRzLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpO1xuICAgIGNvbnN0IGV4dE9wdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtYWR2YW5jZWQtb3B0aW9ucycpO1xuICAgIGlmIChleHRPcHRzKSBleHRPcHRzLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpO1xuXG4gICAgLy8gUmVzZXQgdG8gbG9jYWwgdGFiXG4gICAgY29uc3QgbG9jYWxSYWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLXR5cGUtbG9jYWwnKTtcbiAgICBpZiAobG9jYWxSYWRpbykgbG9jYWxSYWRpby5jaGVja2VkID0gdHJ1ZTtcbiAgICBjb25zdCBsb2NhbENvbmZpZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhbC1zZXJ2aWNlLWNvbmZpZycpO1xuICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXNlcnZpY2UtY29uZmlnJyk7XG4gICAgaWYgKGxvY2FsQ29uZmlnKSBsb2NhbENvbmZpZy5zdHlsZS5kaXNwbGF5ID0gJ2dyaWQnO1xuICAgIGlmIChleHRlcm5hbENvbmZpZykgZXh0ZXJuYWxDb25maWcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBjb25zdCB0YWJMb2NhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItbG9jYWwnKTtcbiAgICBjb25zdCB0YWJFeHRlcm5hbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItZXh0ZXJuYWwnKTtcbiAgICBpZiAodGFiTG9jYWwpIHsgdGFiTG9jYWwuc3R5bGUuYmFja2dyb3VuZCA9ICd2YXIoLS1hY2NlbnQpJzsgdGFiTG9jYWwuc3R5bGUuY29sb3IgPSAndmFyKC0tYmcpJzsgfVxuICAgIGlmICh0YWJFeHRlcm5hbCkgeyB0YWJFeHRlcm5hbC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JzsgdGFiRXh0ZXJuYWwuc3R5bGUuY29sb3IgPSAndmFyKC0tbXV0ZWQpJzsgfVxuICB9XG5cbiAgLy8gPT09PT0gQ1JFQVRFIE5FVyBTRVJWSUNFID09PT09XG5cbiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlTmV3U2VydmljZSgpIHtcbiAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtbmFtZS1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBzdWJkb21haW4gPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2Utc3ViZG9tYWluLWlucHV0JykudmFsdWUudHJpbSgpIHx8IGRlcml2ZVN1YmRvbWFpbihuYW1lKSkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBwb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtcG9ydC1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWlwLWlucHV0JykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1sb2dvLWlucHV0JykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGNyZWF0ZURucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcmVhdGUtZG5zLXJlY29yZCcpLmNoZWNrZWQ7XG4gICAgY29uc3QgdHRsID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rucy10dGwtaW5wdXQnKS52YWx1ZSkgfHwgREMuREVGQVVMVFMuVFRMO1xuICAgIGNvbnN0IHRhaWxzY2FsZU9ubHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFudWFsLXRhaWxzY2FsZS1vbmx5Jyk/LmNoZWNrZWQgfHwgZmFsc2U7XG5cbiAgICBjb25zdCBzc2xUeXBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NzbC10eXBlLXNlbGVjdCcpPy52YWx1ZSB8fCAnY2FkZHktbWFuYWdlZCc7XG4gICAgY29uc3QgY2FOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhLW5hbWUtaW5wdXQnKT8udmFsdWUgfHwgJyc7XG4gICAgY29uc3QgZXhpc3RpbmdDYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGlzdGluZy1jYS1zZWxlY3QnKT8udmFsdWUgfHwgJyc7XG4gICAgY29uc3QgZW5hYmxlQXV0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtYXV0aCcpPy5jaGVja2VkIHx8IGZhbHNlO1xuICAgIGNvbnN0IGVuYWJsZUNvcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5hYmxlLWNvcnMnKT8uY2hlY2tlZCB8fCBmYWxzZTtcbiAgICBjb25zdCBjdXN0b21IZWFkZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbS1oZWFkZXJzLWlucHV0Jyk/LnZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IHVwc3RyZWFtUGF0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cHN0cmVhbS1wYXRoLWlucHV0Jyk/LnZhbHVlIHx8ICcvJztcbiAgICBjb25zdCBoZWFsdGhDaGVjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFsdGgtY2hlY2staW5wdXQnKT8udmFsdWUgfHwgJyc7XG4gICAgY29uc3QgdGltZW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW1lb3V0LWlucHV0Jyk/LnZhbHVlIHx8IDMwO1xuXG4gICAgLy8gQ2F0ZWdvcnkgaXMgb3B0aW9uYWwgXHUyMDE0IHB1bGxlZCBmcm9tIGVpdGhlciBsb2NhbCBvciBleHRlcm5hbCBzZWxlY3QgYnkgdGhlXG4gICAgLy8gb3BlbkFkZFNlcnZpY2VNb2RhbCByZXNldC4gSWYgdXNlciBkb2Vzbid0IGNob29zZSBvbmUsIGl0IHN0YXlzIHVuZGVmaW5lZFxuICAgIC8vIGFuZCB3ZSBkb24ndCBzZW5kIGl0IChzbyB0aGUgYmFja2VuZCBrZWVwcyB0aGUgZXhpc3RpbmcgYmVoYXZpb3IpLlxuICAgIGNvbnN0IGNhdGVnb3J5RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1jYXRlZ29yeS1pbnB1dCcpXG4gICAgICB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1jYXRlZ29yeScpO1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnlFbD8udmFsdWUgfHwgJyc7XG5cbiAgICBjb25zdCBkbnNUb2tlbiA9IHdpbmRvdy5nZXRUb2tlbihnZXRQcmltYXJ5RG5zSWQoKSwgJ2FkbWluJyk7XG5cbiAgICBpZiAoIW5hbWUgfHwgIXBvcnQgfHwgIWlwKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdQbGVhc2UgZmlsbCBpbiBOYW1lLCBQb3J0LCBhbmQgSVAgQWRkcmVzcycsICd3YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFzdWJkb21haW4pIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ0NvdWxkIG5vdCBkZXJpdmUgc3ViZG9tYWluIGZyb20gbmFtZS4gUGxlYXNlIHNldCBvbmUgaW4gT3B0aW9ucy4nLCAnd2FybmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVEbnMgJiYgIWRuc1Rva2VuKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdETlMgQWRtaW4gdG9rZW4gcmVxdWlyZWQuIENvbmZpZ3VyZSBpdCBpbiB0aGUgVG9rZW5zIG1lbnUgZmlyc3QuJywgJ3dhcm5pbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0geyBkbnM6IG51bGwsIGNhZGR5OiBudWxsLCBkYXNoYm9hcmQ6IGZhbHNlIH07XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGNyZWF0ZURucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdpbmRvdy5jcmVhdGVEbnNSZWNvcmQoc3ViZG9tYWluLCBpcCwgdHRsKTtcbiAgICAgICAgICByZXN1bHRzLmRucyA9ICdjcmVhdGVkJztcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdETlMgY3JlYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgICAgICByZXN1bHRzLmRucyA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBETlMgY3JlYXRpb24gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHMuZG5zID0gJ3NraXBwZWQnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWRkeUNvbmZpZyA9IHdpbmRvdy5nZW5lcmF0ZUNhZGR5Q29uZmlnKHtcbiAgICAgICAgc3ViZG9tYWluLCBwb3J0LCBpcCwgc3NsVHlwZSwgY2FOYW1lLCBleGlzdGluZ0NhLFxuICAgICAgICBlbmFibGVBdXRoLCBlbmFibGVDb3JzLCBjdXN0b21IZWFkZXJzLCB1cHN0cmVhbVBhdGgsIGhlYWx0aENoZWNrLCB0aW1lb3V0LCB0YWlsc2NhbGVPbmx5XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FkZHlSZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3NpdGUnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZG9tYWluOiBidWlsZERvbWFpbihzdWJkb21haW4pLFxuICAgICAgICAgICAgdXBzdHJlYW06IGAke2lwfToke3BvcnR9YCxcbiAgICAgICAgICAgIGNvbmZpZzogY2FkZHlDb25maWdcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjYWRkeVJlc3VsdCA9IGF3YWl0IGNhZGR5UmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAoY2FkZHlSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3VsdHMuY2FkZHkgPSAnYWRkZWQgJiByZWxvYWRlZCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignQ2FkZHkgY29uZmlndXJhdGlvbiBmYWlsZWQ6JywgY2FkZHlSZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIHJlc3VsdHMuY2FkZHkgPSBjYWRkeVJlc3VsdC5lcnJvciB8fCAnZmFpbGVkJztcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhZGR5IGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAke2NhZGR5UmVzdWx0LmVycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDYWRkeSBBUEkgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICByZXN1bHRzLmNhZGR5ID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYWRkeSBBUEkgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VydmljZUNvbmZpZyA9IHtcbiAgICAgICAgbmFtZSwgc3ViZG9tYWluLCBwb3J0LCBpcCxcbiAgICAgICAgbG9nbzogbG9nbyB8fCBgL2Fzc2V0cy8ke3N1YmRvbWFpbn0ucG5nYCxcbiAgICAgICAgdGFpbHNjYWxlT25seTogdGFpbHNjYWxlT25seSB8fCBmYWxzZVxuICAgICAgfTtcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBjYXRlZ29yeSBpZiB1c2VyIGFjdHVhbGx5IHBpY2tlZCBvbmVcbiAgICAgIGlmIChjYXRlZ29yeSkgc2VydmljZUNvbmZpZy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuXG4gICAgICBhd2FpdCB3aW5kb3cuYWRkU2VydmljZVRvQ29uZmlnKHNlcnZpY2VDb25maWcpO1xuICAgICAgcmVzdWx0cy5kYXNoYm9hcmQgPSB0cnVlO1xuXG4gICAgICBjb25zdCBzdGF0dXNQYXJ0cyA9IFtcbiAgICAgICAgYEROUzogJHtyZXN1bHRzLmRucyA9PT0gJ2NyZWF0ZWQnID8gJ1xcdTI3MTMnIDogcmVzdWx0cy5kbnMgPT09ICdza2lwcGVkJyA/ICdcXHUyNUNCJyA6ICdcXHUyNzE3J31gLFxuICAgICAgICBgQ2FkZHk6ICR7cmVzdWx0cy5jYWRkeSA9PT0gJ2FkZGVkICYgcmVsb2FkZWQnID8gJ1xcdTI3MTMnIDogJ1xcdTI3MTcnfWAsXG4gICAgICAgIGBEYXNoYm9hcmQ6ICR7cmVzdWx0cy5kYXNoYm9hcmQgPyAnXFx1MjcxMycgOiAnXFx1MjcxNyd9YFxuICAgICAgXTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oYFNlcnZpY2UgXCIke25hbWV9XCIgY3JlYXRlZCEgJHtzdGF0dXNQYXJ0cy5qb2luKCcgfCAnKX0gXFx1MjAxNCAke2J1aWxkU2VydmljZVVybChzdWJkb21haW4pfSR7dGFpbHNjYWxlT25seSA/ICcgKFRhaWxzY2FsZSknIDogJyd9YCwgJ3N1Y2Nlc3MnLCA2MDAwKTtcblxuICAgICAgY2xvc2VBZGRTZXJ2aWNlTW9kYWwoKTtcblxuICAgICAgd2luZG93LmJ1aWxkR3JpZCgpO1xuICAgICAgd2luZG93LnJlZnJlc2hBbGwoKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyBzZXJ2aWNlOicsIGVycm9yKTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oYEVycm9yIGNyZWF0aW5nIFwiJHtuYW1lfVwiOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgNjAwMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT0gRVZFTlQgTElTVEVORVJTID09PT09XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkZC1zZXJ2aWNlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb3BlbkFkZFNlcnZpY2VNb2RhbCk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGQtc2VydmljZS1jYW5jZWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUFkZFNlcnZpY2VNb2RhbCk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGQtc2VydmljZS1jcmVhdGUnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZVR5cGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic2VydmljZS10eXBlXCJdOmNoZWNrZWQnKT8udmFsdWU7XG4gICAgaWYgKHNlcnZpY2VUeXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICBjcmVhdGVFeHRlcm5hbFNlcnZpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3JlYXRlTmV3U2VydmljZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgc2V0dXBTZXJ2aWNlVHlwZVN3aXRjaGluZygpO1xuICBzZXR1cEF1dG9TdWJkb21haW4oKTtcbiAgaW5pdFF1aWNrSVBCdXR0b25zKCk7XG5cbiAgLy8gU1NMIHR5cGUgY2hhbmdlIGhhbmRsZXJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NzbC10eXBlLXNlbGVjdCcpPy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nQ2FDb25maWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhpc3RpbmctY2EtY29uZmlnJyk7XG4gICAgY29uc3QgY3VzdG9tQ2FDb25maWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tLWNhLWNvbmZpZycpO1xuXG4gICAgZXhpc3RpbmdDYUNvbmZpZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGN1c3RvbUNhQ29uZmlnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBpZiAoZS50YXJnZXQudmFsdWUgPT09ICdleGlzdGluZy1jYScpIHtcbiAgICAgIGV4aXN0aW5nQ2FDb25maWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfSBlbHNlIGlmIChlLnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbS1jYScpIHtcbiAgICAgIGN1c3RvbUNhQ29uZmlnLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cblxuICAgIHVwZGF0ZVNlcnZpY2VQcmV2aWV3KCk7XG4gIH0pO1xuXG4gIC8vIFJlZnJlc2ggQ0FzIGJ1dHRvblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVmcmVzaC1jYXMnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZnJlc2gtY2FzJyk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYnV0dG9uLnRleHRDb250ZW50O1xuICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdcXHUyMzFCIExvYWRpbmcuLi4nO1xuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FkZHlmaWxlUGF0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWRkeWZpbGUtcGF0aC1pbnB1dCcpLnZhbHVlIHx8IERDLkRFRkFVTFRTLkNBRERZRklMRTtcbiAgICAgIGF3YWl0IHdpbmRvdy5sb2FkRXhpc3RpbmdDQXMoY2FkZHlmaWxlUGF0aCk7XG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnXFx1MjcwNSBSZWZyZXNoZWQnO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnXFx1Mjc0QyBGYWlsZWQnO1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlZnJlc2ggQ0FzOicsIGVycm9yKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IG9yaWdpbmFsVGV4dDtcbiAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0sIDIwMDApO1xuICB9KTtcblxuICAvLyBETlMgcmVjb3JkIGNoZWNrYm94IGhhbmRsZXJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NyZWF0ZS1kbnMtcmVjb3JkJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgY29uc3QgZG5zQ29uZmlnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rucy1jb25maWcnKTtcbiAgICBkbnNDb25maWcuc3R5bGUuZGlzcGxheSA9IGUudGFyZ2V0LmNoZWNrZWQgPyAnYmxvY2snIDogJ25vbmUnO1xuICB9KTtcblxuICAvLyBSZWFsLXRpbWUgcHJldmlldyB1cGRhdGVzXG4gIFsnc2VydmljZS1zdWJkb21haW4taW5wdXQnLCAnc2VydmljZS1pcC1pbnB1dCcsICdzZXJ2aWNlLXBvcnQtaW5wdXQnLCAnY2EtbmFtZS1pbnB1dCcsXG4gICAnZXhpc3RpbmctY2Etc2VsZWN0JywgJ2VuYWJsZS1hdXRoJywgJ2VuYWJsZS1jb3JzJywgJ2N1c3RvbS1oZWFkZXJzLWlucHV0JywgJ3Vwc3RyZWFtLXBhdGgtaW5wdXQnLFxuICAgJ2hlYWx0aC1jaGVjay1pbnB1dCcsICd0aW1lb3V0LWlucHV0J10uZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHVwZGF0ZVNlcnZpY2VQcmV2aWV3KTtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlU2VydmljZVByZXZpZXcpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gPT09PT0gQ1VTVE9NIFNFUlZJQ0VTIEZST00gTE9DQUxTVE9SQUdFID09PT09XG5cbiAgZnVuY3Rpb24gbG9hZEN1c3RvbVNlcnZpY2VzKCkge1xuICAgIGNvbnN0IGN1c3RvbVNlcnZpY2VzID0gc2FmZUdldCgnY3VzdG9tLXNlcnZpY2VzJyk7XG4gICAgaWYgKGN1c3RvbVNlcnZpY2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IEpTT04ucGFyc2UoY3VzdG9tU2VydmljZXMpO1xuICAgICAgICBzZXJ2aWNlcy5mb3JFYWNoKHNlcnZpY2UgPT4ge1xuICAgICAgICAgIGlmICghd2luZG93LkFQUFMuZmluZChhcHAgPT4gYXBwLmlkID09PSBzZXJ2aWNlLmlkKSkge1xuICAgICAgICAgICAgd2luZG93LkFQUFMucHVzaChzZXJ2aWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGN1c3RvbSBzZXJ2aWNlczonLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkQ3VzdG9tU2VydmljZXMoKTtcblxuICAvLyA9PT09PSBXSU5ET1cgRVhQT1JUUyA9PT09PVxuXG4gIHdpbmRvdy5vcGVuQWRkU2VydmljZU1vZGFsID0gb3BlbkFkZFNlcnZpY2VNb2RhbDtcbiAgd2luZG93LmNsb3NlQWRkU2VydmljZU1vZGFsID0gY2xvc2VBZGRTZXJ2aWNlTW9kYWw7XG5cbn0pKCk7XG47XG4vLyA9PT09PT09PT09IExJVkUgREFTSEJPQVJEIEVWRU5UUyAoU1NFKSA9PT09PT09PT09XG4oZnVuY3Rpb24oKSB7XG4gIGxldCBlcyA9IG51bGw7XG4gIGxldCByZWNvbm5lY3REZWxheSA9IDEwMDA7XG4gIGNvbnN0IE1BWF9SRUNPTk5FQ1QgPSAzMDAwMDtcblxuICBmdW5jdGlvbiBjb25uZWN0KCkge1xuICAgIGlmIChlcykgeyB0cnkgeyBlcy5jbG9zZSgpOyB9IGNhdGNoIChfKSB7fSB9XG5cbiAgICBlcyA9IG5ldyBFdmVudFNvdXJjZSgnL2FwaS92MS9ldmVudHMvc3RyZWFtJyk7XG5cbiAgICBlcy5hZGRFdmVudExpc3RlbmVyKCdjb25uZWN0ZWQnLCAoKSA9PiB7XG4gICAgICByZWNvbm5lY3REZWxheSA9IDEwMDA7IC8vIHJlc2V0IGJhY2tvZmZcbiAgICAgIGRlYnVnKCdbU1NFXSBDb25uZWN0ZWQgdG8gZXZlbnQgc3RyZWFtJyk7XG4gICAgfSk7XG5cbiAgICAvLyBIZWFsdGggc3RhdHVzIGNoYW5nZXMgXHUyMTkyIHVwZGF0ZSBjYXJkIGRvdHMvYmFkZ2VzIGluIHJlYWwgdGltZVxuICAgIGVzLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXR1cy1jaGFuZ2UnLCAoZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGQuc2VydmljZUlkICYmIHR5cGVvZiB3aW5kb3cuc2V0QmFkZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCB1cCA9IGQuc3RhdHVzID09PSAndXAnIHx8IGQuc3RhdHVzID09PSAnaGVhbHRoeSc7XG4gICAgICAgICAgd2luZG93LnNldEJhZGdlKGQuc2VydmljZUlkLCB1cCwgZC5yZXNwb25zZVRpbWUgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSk7XG5cbiAgICAvLyBSZXNvdXJjZSBhbGVydHMgXHUyMTkyIHRvYXN0IG5vdGlmaWNhdGlvblxuICAgIGVzLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc291cmNlLWFsZXJ0JywgKGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgIGNvbnN0IG1zZyA9IGAke2QuY29udGFpbmVyTmFtZSB8fCBkLmNvbnRhaW5lcklkfTogJHtkLm1ldHJpY30gYXQgJHtkLnZhbHVlfSUgKHRocmVzaG9sZDogJHtkLnRocmVzaG9sZH0lKWA7XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvd05vdGlmaWNhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24obXNnLCAnd2FybmluZycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH0pO1xuXG4gICAgLy8gQ29udGFpbmVyIGF1dG8tcmVzdGFydFxuICAgIGVzLmFkZEV2ZW50TGlzdGVuZXIoJ2F1dG8tcmVzdGFydCcsIChlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIHNob3dOb3RpZmljYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKGBDb250YWluZXIgXCIke2QuY29udGFpbmVyTmFtZX1cIiB3YXMgYXV0by1yZXN0YXJ0ZWRgLCAnaW5mbycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIGF2YWlsYWJsZSBcdTIxOTIgc2hvdyBub3RpZmljYXRpb24gZG90IG9uIFVwZGF0ZXMgYnV0dG9uXG4gICAgZXMuYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlLWF2YWlsYWJsZScsIChlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICBjb25zdCB1cGRhdGVzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZXMtYnRuJyk7XG4gICAgICAgIGlmICh1cGRhdGVzQnRuICYmICF1cGRhdGVzQnRuLnF1ZXJ5U2VsZWN0b3IoJy5zc2UtZG90JykpIHtcbiAgICAgICAgICBjb25zdCBkb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgZG90LmNsYXNzTmFtZSA9ICdzc2UtZG90JztcbiAgICAgICAgICBkb3Quc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo4cHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7bWFyZ2luLWxlZnQ6NnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsnO1xuICAgICAgICAgIHVwZGF0ZXNCdG4uYXBwZW5kQ2hpbGQoZG90KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3dOb3RpZmljYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKGBVcGRhdGUgYXZhaWxhYmxlIGZvciAke2QuY29udGFpbmVyTmFtZSB8fCBkLmNvbnRhaW5lcklkfWAsICdpbmZvJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgc3RhcnQvY29tcGxldGUvZmFpbGVkXG4gICAgZXMuYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlLWNvbXBsZXRlJywgKGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvd05vdGlmaWNhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oYFVwZGF0ZSBjb21wbGV0ZWQ6ICR7ZC5jb250YWluZXJOYW1lIHx8IGQuY29udGFpbmVySWR9YCwgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmlnZ2VyIGEgZGFzaGJvYXJkIHJlZnJlc2hcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cucmVmcmVzaEFsbCA9PT0gJ2Z1bmN0aW9uJykgd2luZG93LnJlZnJlc2hBbGwoKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSk7XG5cbiAgICBlcy5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGUtZmFpbGVkJywgKGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvd05vdGlmaWNhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oYFVwZGF0ZSBmYWlsZWQ6ICR7ZC5jb250YWluZXJOYW1lIHx8IGQuY29udGFpbmVySWR9IFx1MjAxNCAke2QuZXJyb3IgfHwgJ3Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH0pO1xuXG4gICAgLy8gSW5jaWRlbnRzXG4gICAgZXMuYWRkRXZlbnRMaXN0ZW5lcignaW5jaWRlbnQnLCAoZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzaG93Tm90aWZpY2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKGQudHlwZSA9PT0gJ2NyZWF0ZWQnKSB7XG4gICAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKGBJbmNpZGVudDogJHtkLm1lc3NhZ2UgfHwgZC5zZXJ2aWNlSWR9YCwgJ2Vycm9yJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkLnR5cGUgPT09ICdyZXNvbHZlZCcpIHtcbiAgICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oYFJlc29sdmVkOiAke2Quc2VydmljZUlkIHx8ICdpbmNpZGVudCd9YCwgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSk7XG5cbiAgICAvLyBSZWNvbm5lY3Qgb24gZXJyb3JcbiAgICBlcy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgZXMuY2xvc2UoKTtcbiAgICAgIGNvbnNvbGUud2FybihgW1NTRV0gRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgaW4gJHtyZWNvbm5lY3REZWxheSAvIDEwMDB9cy4uLmApO1xuICAgICAgc2V0VGltZW91dChjb25uZWN0LCByZWNvbm5lY3REZWxheSk7XG4gICAgICByZWNvbm5lY3REZWxheSA9IE1hdGgubWluKHJlY29ubmVjdERlbGF5ICogMiwgTUFYX1JFQ09OTkVDVCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFN0YXJ0IG9uIHBhZ2UgbG9hZFxuICBjb25uZWN0KCk7XG5cbiAgLy8gRXhwb3NlIGZvciBkZWJ1Z2dpbmdcbiAgd2luZG93Ll9zc2VSZWNvbm5lY3QgPSBjb25uZWN0O1xufSkoKTtcbjtcbi8vID09PT09PT09PT0gU0VSVklDRSBGSUxURVIgPT09PT09PT09PVxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCBzZWFyY2hJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWZpbHRlci1zZWFyY2gnKTtcbiAgY29uc3Qgc3RhdHVzU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZmlsdGVyLXN0YXR1cycpO1xuICBjb25zdCBjYXRlZ29yeVNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWZpbHRlci1jYXRlZ29yeScpO1xuICBjb25zdCBjb3VudFNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1maWx0ZXItY291bnQnKTtcblxuICAvLyBCdWlsZCBhIHNpbmdsZSBjYXRlZ29yeSBsaXN0IGZyb20gYm90aCB0aGUgQVBJIGNhdGVnb3JpZXMgYW5kIGFueVxuICAvLyBjYXRlZ29yaWVzIHByZXNlbnQgb24gdGhlIGFjdHVhbCByZW5kZXJlZCBjYXJkcyAoY292ZXJzIGN1c3RvbSBzZXJ2aWNlc1xuICAvLyB3aG9zZSBjYXRlZ29yeSBpc24ndCBpbiBURU1QTEFURV9DQVRFR09SSUVTKS5cbiAgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlMaXN0KCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZnJvbUNhcmRzID0gbmV3IFNldCgpO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNjYXJkcyAuY2FyZFtkYXRhLWNhdGVnb3J5XScpLmZvckVhY2goYyA9PiB7XG4gICAgICBjb25zdCBjYXQgPSBjLmRhdGFzZXQuY2F0ZWdvcnkudHJpbSgpO1xuICAgICAgaWYgKGNhdCkgZnJvbUNhcmRzLmFkZChjYXQpO1xuICAgIH0pO1xuICAgIGNvbnN0IGFwaUNhdHMgPSAod2luZG93LkRDX0NBVEVHT1JJRVMgfHwgKHR5cGVvZiBEQyAhPT0gJ3VuZGVmaW5lZCcgJiYgREMuQ0FURUdPUklFUykpIHx8IHt9O1xuICAgIGNvbnN0IGFsbCA9IE9iamVjdC5rZXlzKGFwaUNhdHMpLmNvbmNhdChbLi4uZnJvbUNhcmRzXS5maWx0ZXIoYyA9PiAhYXBpQ2F0c1tjXSkpO1xuICAgIGFsbC5mb3JFYWNoKGMgPT4gc2Vlbi5hZGQoYykpO1xuICAgIHJldHVybiB7IGxpc3Q6IFsuLi5zZWVuXSwgYXBpQ2F0cyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaENhdGVnb3J5RHJvcGRvd24oKSB7XG4gICAgaWYgKCFjYXRlZ29yeVNlbGVjdCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgbGlzdCwgYXBpQ2F0cyB9ID0gZ2V0Q2F0ZWdvcnlMaXN0KCk7XG4gICAgY29uc3QgY3VycmVudCA9IGNhdGVnb3J5U2VsZWN0LnZhbHVlO1xuICAgIGNhdGVnb3J5U2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIENhdGVnb3JpZXM8L29wdGlvbj4nO1xuICAgIGxpc3Quc29ydCgpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICBjb25zdCBpbmZvID0gYXBpQ2F0c1tuYW1lXTtcbiAgICAgIGNvbnN0IG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgb3B0LnZhbHVlID0gbmFtZTtcbiAgICAgIG9wdC50ZXh0Q29udGVudCA9IGluZm8gPyBgJHtpbmZvLmljb24gfHwgJyd9ICR7bmFtZX1gLnRyaW0oKSA6IG5hbWU7XG4gICAgICBjYXRlZ29yeVNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgIH0pO1xuICAgIC8vIFJlc3RvcmUgc2VsZWN0aW9uIGlmIGl0IHN0aWxsIGV4aXN0c1xuICAgIGlmIChjdXJyZW50ICYmIFsuLi5jYXRlZ29yeVNlbGVjdC5vcHRpb25zXS5zb21lKG8gPT4gby52YWx1ZSA9PT0gY3VycmVudCkpIHtcbiAgICAgIGNhdGVnb3J5U2VsZWN0LnZhbHVlID0gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2F0ZWdvcnlTZWxlY3QudmFsdWUgPSAnYWxsJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGaWx0ZXIoKSB7XG4gICAgcmVmcmVzaENhdGVnb3J5RHJvcGRvd24oKTtcbiAgICBjb25zdCBxdWVyeSA9IHNlYXJjaElucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IHN0YXR1c0ZpbHRlciA9IHN0YXR1c1NlbGVjdC52YWx1ZTsgLy8gJ2FsbCcsICdvbicsIG9yICdvZmYnXG4gICAgY29uc3QgY2F0ZWdvcnlGaWx0ZXIgPSBjYXRlZ29yeVNlbGVjdCA/IGNhdGVnb3J5U2VsZWN0LnZhbHVlIDogJ2FsbCc7XG5cbiAgICBjb25zdCBjYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNjYXJkcyAuY2FyZCcpO1xuICAgIGxldCB2aXNpYmxlQ291bnQgPSAwO1xuXG4gICAgY2FyZHMuZm9yRWFjaChjYXJkID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5uYW1lJyk/LnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgY29uc3QgYXBwID0gY2FyZC5kYXRhc2V0LmFwcD8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGNhcmQuZGF0YXNldC5zdGF0dXMgfHwgJ29mZic7IC8vICdvbicgb3IgJ29mZidcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gY2FyZC5kYXRhc2V0LmNhdGVnb3J5IHx8ICcnO1xuXG4gICAgICBjb25zdCBtYXRjaGVzU2VhcmNoID0gIXF1ZXJ5IHx8IG5hbWUuaW5jbHVkZXMocXVlcnkpIHx8IGFwcC5pbmNsdWRlcyhxdWVyeSk7XG4gICAgICBjb25zdCBtYXRjaGVzU3RhdHVzID0gc3RhdHVzRmlsdGVyID09PSAnYWxsJyB8fCBzdGF0dXMgPT09IHN0YXR1c0ZpbHRlcjtcbiAgICAgIGNvbnN0IG1hdGNoZXNDYXRlZ29yeSA9IGNhdGVnb3J5RmlsdGVyID09PSAnYWxsJyB8fCBjYXRlZ29yeSA9PT0gY2F0ZWdvcnlGaWx0ZXI7XG5cbiAgICAgIGlmIChtYXRjaGVzU2VhcmNoICYmIG1hdGNoZXNTdGF0dXMgJiYgbWF0Y2hlc0NhdGVnb3J5KSB7XG4gICAgICAgIGNhcmQuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgICB2aXNpYmxlQ291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcmQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChjb3VudFNwYW4pIHtcbiAgICAgIGNvbnN0IHRvdGFsID0gY2FyZHMubGVuZ3RoO1xuICAgICAgY291bnRTcGFuLnRleHRDb250ZW50ID0gYCR7dmlzaWJsZUNvdW50fSBvZiAke3RvdGFsfSBzZXJ2aWNlc2A7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVib3VuY2UgaGVscGVyXG4gIGZ1bmN0aW9uIGRlYm91bmNlKGZuLCBkZWxheSkge1xuICAgIGxldCB0aW1lb3V0O1xuICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBmbi5hcHBseSh0aGlzLCBhcmdzKSwgZGVsYXkpO1xuICAgIH07XG4gIH1cblxuICBzZWFyY2hJbnB1dD8uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBkZWJvdW5jZSh1cGRhdGVGaWx0ZXIsIDIwMCkpO1xuICBzdGF0dXNTZWxlY3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZUZpbHRlcik7XG4gIGNhdGVnb3J5U2VsZWN0Py5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGaWx0ZXIpO1xuXG4gIC8vIEluaXRpYWwgY291bnQgb24gcGFnZSBsb2FkXG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gc2V0VGltZW91dCh1cGRhdGVGaWx0ZXIsIDUwMCkpO1xuICB9IGVsc2Uge1xuICAgIHNldFRpbWVvdXQodXBkYXRlRmlsdGVyLCA1MDApO1xuICB9XG5cbiAgLy8gRXhwb3NlIGZvciBleHRlcm5hbCB0cmlnZ2VycyAoY2FsbGVkIGFmdGVyIGJ1aWxkR3JpZCB0byByZXBvcHVsYXRlIGNhdGVnb3JpZXMpXG4gIHdpbmRvdy5yZWZyZXNoU2VydmljZUZpbHRlciA9IHVwZGF0ZUZpbHRlcjtcbiAgd2luZG93LnJlZnJlc2hDYXRlZ29yeURyb3Bkb3duID0gcmVmcmVzaENhdGVnb3J5RHJvcGRvd247XG59KSgpO1xuO1xuLy8gPT09PT09PT09PSBCQVRDSCBDT05UQUlORVIgT1BFUkFUSU9OUyA9PT09PT09PT09XG4oZnVuY3Rpb24oKSB7XG4gIGNvbnN0IGJhdGNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdGNoLW9wZXJhdGlvbnMtYnRuJyk7XG4gIGNvbnN0IGJhdGNoQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdGNoLWFjdGlvbi1iYXInKTtcbiAgY29uc3QgYmF0Y2hDb3VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXRjaC1zZWxlY3RlZC1jb3VudCcpO1xuICBjb25zdCBzdGFydEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXRjaC1zdGFydC1idG4nKTtcbiAgY29uc3Qgc3RvcEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXRjaC1zdG9wLWJ0bicpO1xuICBjb25zdCByZXN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdGNoLXJlc3RhcnQtYnRuJyk7XG4gIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXRjaC1jYW5jZWwtYnRuJyk7XG5cbiAgbGV0IGJhdGNoTW9kZSA9IGZhbHNlO1xuICBsZXQgc2VsZWN0ZWRDb250YWluZXJzID0gbmV3IFNldCgpO1xuXG4gIGZ1bmN0aW9uIGVudGVyQmF0Y2hNb2RlKCkge1xuICAgIGJhdGNoTW9kZSA9IHRydWU7XG4gICAgc2VsZWN0ZWRDb250YWluZXJzLmNsZWFyKCk7XG4gICAgYmF0Y2hCYXIuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIGJhdGNoQnRuLnRleHRDb250ZW50ID0gJ1x1MjcxMyBFeGl0IEJhdGNoIE1vZGUnO1xuICAgIHVwZGF0ZVNlbGVjdGVkQ291bnQoKTtcbiAgICBcbiAgICAvLyBBZGQgY2hlY2tib3hlcyB0byBhbGwgY2FyZHMgd2l0aCBjb250YWluZXJJZFxuICAgIGNvbnN0IGNhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2NhcmRzIC5jYXJkW2RhdGEtYXBwXScpO1xuICAgIGNhcmRzLmZvckVhY2goY2FyZCA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJJZCA9IGNhcmQuZGF0YXNldC5jb250YWluZXJJZDtcbiAgICAgIGlmICghY29udGFpbmVySWQpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGNoZWNrYm94IGlmIGFueVxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5iYXRjaC1jaGVja2JveCcpO1xuICAgICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5yZW1vdmUoKTtcbiAgICAgIFxuICAgICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgY2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICBjaGVja2JveC5jbGFzc05hbWUgPSAnYmF0Y2gtY2hlY2tib3gnO1xuICAgICAgY2hlY2tib3guZGF0YXNldC5jb250YWluZXJJZCA9IGNvbnRhaW5lcklkO1xuICAgICAgY2hlY2tib3guZGF0YXNldC5zZXJ2aWNlTmFtZSA9IGNhcmQucXVlcnlTZWxlY3RvcignLm5hbWUnKT8udGV4dENvbnRlbnQgfHwgY29udGFpbmVySWQ7XG4gICAgICBjaGVja2JveC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA4cHg7IGxlZnQ6IDhweDsgei1pbmRleDogMTA7IHdpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7IGN1cnNvcjogcG9pbnRlcjsnO1xuICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZENvbnRhaW5lcnMuYWRkKGNvbnRhaW5lcklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxlY3RlZENvbnRhaW5lcnMuZGVsZXRlKGNvbnRhaW5lcklkKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTZWxlY3RlZENvdW50KCk7XG4gICAgICB9KTtcbiAgICAgIGNhcmQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgICAgY2FyZC5pbnNlcnRCZWZvcmUoY2hlY2tib3gsIGNhcmQuZmlyc3RDaGlsZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBleGl0QmF0Y2hNb2RlKCkge1xuICAgIGJhdGNoTW9kZSA9IGZhbHNlO1xuICAgIHNlbGVjdGVkQ29udGFpbmVycy5jbGVhcigpO1xuICAgIGJhdGNoQmFyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgYmF0Y2hCdG4udGV4dENvbnRlbnQgPSAnXHUyNjMwIEJhdGNoIE9wZXJhdGlvbnMnO1xuICAgIFxuICAgIC8vIFJlbW92ZSBhbGwgY2hlY2tib3hlc1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYXRjaC1jaGVja2JveCcpLmZvckVhY2goY2IgPT4gY2IucmVtb3ZlKCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0ZWRDb3VudCgpIHtcbiAgICBjb25zdCBjb3VudCA9IHNlbGVjdGVkQ29udGFpbmVycy5zaXplO1xuICAgIGJhdGNoQ291bnQudGV4dENvbnRlbnQgPSBgJHtjb3VudH0gc2VsZWN0ZWRgO1xuICAgIHN0YXJ0QnRuLmRpc2FibGVkID0gY291bnQgPT09IDA7XG4gICAgc3RvcEJ0bi5kaXNhYmxlZCA9IGNvdW50ID09PSAwO1xuICAgIHJlc3RhcnRCdG4uZGlzYWJsZWQgPSBjb3VudCA9PT0gMDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGJhdGNoQWN0aW9uKGFjdGlvbikge1xuICAgIGlmIChzZWxlY3RlZENvbnRhaW5lcnMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBBcnJheS5mcm9tKHNlbGVjdGVkQ29udGFpbmVycyk7XG4gICAgY29uc3QgYWN0aW9uTGFiZWwgPSB7IHN0YXJ0OiAnU3RhcnRpbmcnLCBzdG9wOiAnU3RvcHBpbmcnLCByZXN0YXJ0OiAnUmVzdGFydGluZycgfVthY3Rpb25dO1xuICAgIFxuICAgIGlmICghY29uZmlybShgJHthY3Rpb25MYWJlbH0gJHtjb250YWluZXJzLmxlbmd0aH0gY29udGFpbmVyKHMpPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCkpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBidG5zID0gW3N0YXJ0QnRuLCBzdG9wQnRuLCByZXN0YXJ0QnRuXTtcbiAgICBidG5zLmZvckVhY2goYiA9PiB7IGIuZGlzYWJsZWQgPSB0cnVlOyBiLnRleHRDb250ZW50ID0gJy4uLic7IH0pO1xuICAgIFxuICAgIGxldCBzdWNjZXNzID0gMDtcbiAgICBsZXQgZmFpbGVkID0gMDtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGNvbnRhaW5lcklkIG9mIGNvbnRhaW5lcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL2NvbnRhaW5lcnMvJHtlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVySWQpfS8ke2FjdGlvbn1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICBzdWNjZXNzKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFpbGVkKys7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICAgICAgZXJyb3JzLnB1c2goYCR7Y29udGFpbmVySWR9OiAke2RhdGEuZXJyb3IgfHwgcmVzLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbGVkKys7XG4gICAgICAgIGVycm9ycy5wdXNoKGAke2NvbnRhaW5lcklkfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFJlc3RvcmUgYnV0dG9uc1xuICAgIGJ0bnNbMF0udGV4dENvbnRlbnQgPSAnXHUyNUI2IFN0YXJ0IEFsbCc7XG4gICAgYnRuc1sxXS50ZXh0Q29udGVudCA9ICdcdTJCMUIgU3RvcCBBbGwnO1xuICAgIGJ0bnNbMl0udGV4dENvbnRlbnQgPSAnXHVEODNEXHVERDA0IFJlc3RhcnQgQWxsJztcbiAgICB1cGRhdGVTZWxlY3RlZENvdW50KCk7XG4gICAgXG4gICAgLy8gU2hvdyByZXN1bHRzXG4gICAgaWYgKGZhaWxlZCA9PT0gMCkge1xuICAgICAgaWYgKHR5cGVvZiBzaG93Tm90aWZpY2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24oYCR7YWN0aW9uTGFiZWx9IGNvbXBsZXRlZDogJHtzdWNjZXNzfSBjb250YWluZXIocylgLCAnc3VjY2VzcycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHNob3dOb3RpZmljYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2hvd05vdGlmaWNhdGlvbihgJHthY3Rpb25MYWJlbH06ICR7c3VjY2Vzc30gc3VjY2VlZGVkLCAke2ZhaWxlZH0gZmFpbGVkYCwgJ3dhcm5pbmcnKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0JhdGNoIG9wZXJhdGlvbiBlcnJvcnM6JywgZXJyb3JzKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVmcmVzaCBkYXNoYm9hcmQgYWZ0ZXIgYSBzaG9ydCBkZWxheVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZWZyZXNoQWxsID09PSAnZnVuY3Rpb24nKSByZWZyZXNoQWxsKCk7XG4gICAgfSwgMTUwMCk7XG4gIH1cblxuICBiYXRjaEJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgaWYgKGJhdGNoTW9kZSkge1xuICAgICAgZXhpdEJhdGNoTW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlckJhdGNoTW9kZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgc3RhcnRCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYmF0Y2hBY3Rpb24oJ3N0YXJ0JykpO1xuICBzdG9wQnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGJhdGNoQWN0aW9uKCdzdG9wJykpO1xuICByZXN0YXJ0QnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGJhdGNoQWN0aW9uKCdyZXN0YXJ0JykpO1xuICBjYW5jZWxCdG4/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QUFXLFVBQVcsVUFBVyxPQUFRLFVBQVcsTUFBTyxVQUFXLGFBQWMsVUFBVyxLQUFNLFVBQVcsUUFBUyxVQUFXLFFBQVMsVUFBVyxTQUFVLFVBQVcsU0FBVSxVQUFXLFNBQVUsVUFBVyxVQUFXLFVBQVcsT0FBUSxVQUFXLFFBQVMsVUFBVyxNQUFPLFVBQVcsUUFBUyxVQUFXLE9BQVEsVUFBVyxnQkFBaUIsU0FBVSxFQUNoZCxrQkFBa0IsQ0FBRSxHQUFJLFVBQVcsR0FBSSxVQUFXLE1BQU8sVUFBVyxXQUFZLFVBQVcsWUFBYSxVQUFXLFVBQVcsVUFBVyxPQUFRLFVBQVcsTUFBTyxVQUFXLGFBQWMsVUFBVyxLQUFNLFVBQVcsUUFBUyxVQUFXLFFBQVMsVUFBVyxTQUFVLFVBQVcsU0FBVSxVQUFXLFNBQVUsVUFBVyxVQUFXLFVBQVcsT0FBUSxVQUFXLFFBQVMsVUFBVyxNQUFPLFVBQVcsUUFBUyxVQUFXLE9BQVEsVUFBVyxnQkFBaUIsVUFBVyxRQUFTLEVBQUssRUFDL2QsS0FBa0IsQ0FBRSxHQUFJLFVBQVcsR0FBSSxVQUFXLE1BQU8sVUFBVyxXQUFZLFVBQVcsWUFBYSxVQUFXLFVBQVcsVUFBVyxPQUFRLFVBQVcsTUFBTyxVQUFXLGFBQWMsVUFBVyxLQUFNLFVBQVcsUUFBUyxVQUFXLFFBQVMsVUFBVyxTQUFVLFVBQVcsU0FBVSxVQUFXLFNBQVUsVUFBVyxVQUFXLFVBQVcsT0FBUSxVQUFXLFFBQVMsVUFBVyxNQUFPLFVBQVcsUUFBUyxVQUFXLE9BQVEsVUFBVyxnQkFBaUIsVUFBVyxRQUFTLEVBQUssRUFDL2QsTUFBa0IsQ0FBRSxHQUFJLFVBQVcsR0FBSSxVQUFXLE1BQU8sVUFBVyxXQUFZLFVBQVcsWUFBYSxVQUFXLFVBQVcsVUFBVyxPQUFRLFVBQVcsTUFBTyxVQUFXLGFBQWMsVUFBVyxLQUFNLFVBQVcsUUFBUyxVQUFXLFFBQVMsVUFBVyxTQUFVLFVBQVcsU0FBVSxVQUFXLFNBQVUsVUFBVyxVQUFXLFVBQVcsT0FBUSxVQUFXLFFBQVMsVUFBVyxNQUFPLFVBQVcsUUFBUyxVQUFXLE9BQVEsVUFB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QTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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SXhnQixFQUFJLEdBQ040Z0IsUUFDSyxDQUNMQyxJQUNBLE1BQU14bkIsRUFBTyxNQUFNMkcsRUFBSSxLQUFLLEVBQUUsTUFBTSxLQUFPLENBQUMsRUFBRSxFQUM5QzhnQixFQUFPLEtBQUssR0FBRzFNLENBQVcsS0FBSy9hLEVBQUssT0FBUzJHLEVBQUksVUFBVSxFQUFFLENBQy9ELENBQ0YsT0FBU2hHLEVBQUcsQ0FDVjZtQixJQUNBQyxFQUFPLEtBQUssR0FBRzFNLENBQVcsS0FBS3BhLEVBQUUsT0FBTyxFQUFFLENBQzVDLENBSUYybUIsRUFBSyxDQUFDLEVBQUUsWUFBYyxtQkFDdEJBLEVBQUssQ0FBQyxFQUFFLFlBQWMsa0JBQ3RCQSxFQUFLLENBQUMsRUFBRSxZQUFjLHdCQUN0QlIsRUFBb0IsRUFHaEJVLElBQVcsRUFDVCxPQUFPLGtCQUFxQixZQUM5QixpQkFBaUIsR0FBR0gsQ0FBVyxlQUFlRSxDQUFPLGdCQUFpQixTQUFTLEdBRzdFLE9BQU8sa0JBQXFCLFlBQzlCLGlCQUFpQixHQUFHRixDQUFXLEtBQUtFLENBQU8sZUFBZUMsQ0FBTSxVQUFXLFNBQVMsRUFFdEYsUUFBUSxNQUFNLDBCQUEyQkMsQ0FBTSxHQUlqRCxXQUFXLElBQU0sQ0FDWCxPQUFPLFlBQWUsWUFBWSxXQUFXLENBQ25ELEVBQUcsSUFBSSxDQUNULENBRUFuQixHQUFVLGlCQUFpQixRQUFTLElBQU0sQ0FDcENLLEVBQ0ZLLEVBQWMsRUFFZEgsRUFBZSxDQUVuQixDQUFDLEVBRURKLEdBQVUsaUJBQWlCLFFBQVMsSUFBTVMsRUFBWSxPQUFPLENBQUMsRUFDOURSLEdBQVMsaUJBQWlCLFFBQVMsSUFBTVEsRUFBWSxNQUFNLENBQUMsRUFDNURyUCxHQUFZLGlCQUFpQixRQUFTLElBQU1xUCxFQUFZLFNBQVMsQ0FBQyxFQUNsRWpJLEdBQVcsaUJBQWlCLFFBQVMrSCxDQUFhLENBQ3BELEdBQUciLAogICJuYW1lcyI6IFsid2luZG93IiwgIkVycm9ySGFuZGxlciIsICJjb250ZXh0IiwgImVycm9yIiwgIm1ldGFkYXRhIiwgImVycm9yRW50cnkiLCAiY3VycmVudFN0ZXAiLCAibWVzc2FnZSIsICJzdGF0cyIsICJ0eXBlIiwgImZhbGxiYWNrTWVzc2FnZSIsICJtZW1vcnlTdG9yYWdlIiwgImtleSIsICJ2YWx1ZSIsICJyYXciLCAicyIsICJyIiwgImMiLCAiayIsICJ2IiwgInRva2Vuc0J0biIsICJlbCIsICJ0bGRTdWZmaXgiLCAicHJveHlJcElucHV0IiwgInN1YiIsICJkbnNJZCIsICJpZCIsICJpbmZvIiwgInRvcFJvdyIsICJkbnNJZHMiLCAic3ZnSWNvbiIsICJmaXJzdENoaWxkIiwgInNhZmVJZCIsICJsYWJlbCIsICJjYXJkIiwgInJlc3BvbnNlIiwgInVybCIsICJvcHRpb25zIiwgIm1ldGhvZCIsICJuZWVkc0NzcmYiLCAidG9rZW4iLCAiYm9keSIsICJmcmVzaFRva2VuIiwgImRhdGEiLCAicmVzcCIsICJyZXN1bHQiLCAibXNnIiwgImJ0biIsICJsb2FkaW5nVGV4dCIsICJhc3luY0ZuIiwgIm9wdHMiLCAib3JpZ2luYWwiLCAic3VjY2Vzc1RleHQiLCAicmVzZXREZWxheSIsICJlIiwgIm1vZGFsIiwgImNsb3NlQnRucyIsICJ0ZXh0IiwgImR1cmF0aW9uIiwgImV4aXN0aW5nTm90aWYiLCAiY29sb3JzIiwgInRzIiwgImRpZmYiLCAiZmFsbGJhY2siLCAiaHRtbCIsICJldmVudCIsICJmbiIsICJfYSIsICJoIiwgImFwcHMiLCAiYSIsICJhcHAiLCAiaWR4IiwgImNoYW5nZXMiLCAiY3JlYXRlU2tlbGV0b25DYXJkIiwgInNob3dTa2VsZXRvbnMiLCAiY291bnQiLCAiZ3JpZCIsICJpIiwgInNrIiwgImhpZGVTa2VsZXRvbnMiLCAic2tlbGV0b25zIiwgIlRIRU1FX0tFWSIsICJVU0VSX1RIRU1FU19LRVkiLCAiTEVHQUNZX0NVU1RPTV9LRVkiLCAiQlVJTFRJTl9USEVNRVMiLCAiVEhFTUVTIiwgIlRIRU1FX1BST1BTIiwgIkJBU0VfUFJPUFMiLCAiREVSSVZFRF9QUk9QUyIsICJUSEVNRV9DT0xPUlMiLCAiaGV4VG9SZ2IiLCAiaGV4IiwgInJnYlRvSGV4IiwgImciLCAiYiIsICJ4IiwgImJsZW5kQ29sb3JzIiwgImhleDEiLCAiaGV4MiIsICJyYXRpbyIsICJjMSIsICJjMiIsICJoZXhMdW1pbmFuY2UiLCAiZGVyaXZlRXh0ZW5kZWRDb2xvcnMiLCAiYmciLCAiZmciLCAibXV0ZWQiLCAiY2FyZEJhc2UiLCAiZG90T2siLCAiZG90QmFkIiwgImlzTGlnaHQiLCAiZGVyaXZlZCIsICJnZW5lcmF0ZUJvZHlCYWNrZ3JvdW5kQ1NTIiwgInNsdWciLCAiYWNjZW50IiwgImFjY2VudFJnYiIsICJnZW5lcmF0ZUJ1dHRvbkhvdmVyQ1NTIiwgImdldFN5c3RlbVRoZW1lIiwgImNsZWFyQ3VzdG9tUHJvcGVydGllcyIsICJwcm9wIiwgInNsdWdpZnkiLCAibmFtZSIsICJjdXJyZW50U2x1ZyIsICJjYWNoZWQiLCAiYmFzZSIsICJjb3VudGVyIiwgImluamVjdFVzZXJUaGVtZVN0eWxlcyIsICJ0aGVtZXNEYXRhIiwgImV4aXN0aW5nIiwgInVzZXJUaGVtZXMiLCAic2x1Z3MiLCAiY3NzIiwgInRoZW1lIiwgImNvbG9yTWFwIiwgInAiLCAic3R5bGUiLCAic3luY1RoZW1lc0Zyb21TZXJ2ZXIiLCAic2VydmVyVGhlbWVzIiwgImN1cnJlbnQiLCAiYXBwbHlUaGVtZSIsICJtaWdyYXRlTGVnYWN5Q3VzdG9tVGhlbWUiLCAibGVnYWN5IiwgInRoZW1lRGF0YSIsICJtb2RlIiwgInQiLCAibWV0YSIsICJzYXZlZFRoZW1lIiwgIm1ldGhvZHNDYWNoZSIsICJmZXRjaE1ldGhvZHMiLCAicmVzIiwgInNob3dQcm92aWRlclNlbGVjdG9yIiwgInByb3ZpZGVycyIsICJvdmVybGF5IiwgIm9yaWdpbmFsQm9keSIsICJwcm92aWRlckJ1dHRvbnMiLCAicHJvdmlkZXIiLCAicmVuZGVyUHJvdmlkZXJDaGFsbGVuZ2UiLCAicmVzdG9yZU9yaWdpbmFsQm9keSIsICJpbnB1dCIsICJzdWJtaXQiLCAic3RhdHVzIiwgImJhY2siLCAiZW1haWwiLCAidmlhIiwgIm1hc2tlZCIsICJzaG93IiwgInNob3dUb3RwV2l0aEVtYWlsRmFsbGJhY2siLCAidG90cFByb3ZpZGVyIiwgImVtYWlsRW5hYmxlZCIsICJkaXYiLCAiaXNBbGxvd2VkUmV0dXJuVXJsIiwgInJldHVyblVybCIsICJwYXJzZWQiLCAic3VmZml4IiwgInVybFBhcmFtcyIsICJ1cGRhdGVUb3RwTG9nbyIsICJtIiwgImx1bSIsICJkYXJrIiwgImxpZ2h0IiwgInNob3dUb3RwT3ZlcmxheSIsICJmaXJzdElucHV0IiwgImhpZGVUb3RwT3ZlcmxheSIsICJidWlsZFNzb0hhbmRvZmZUYXJnZXQiLCAicmVkaXJlY3QiLCAiaXNQcml2YXRlSG9zdCIsICJyZXR1cm5QYXRoIiwgImNvbnRhaW5lciIsICJpbnB1dHMiLCAidmFsIiwgImNvZGUiLCAic3VibWl0VG90cENvZGUiLCAicGFzdGVkIiwgImlucCIsICJlcnJvckVsIiwgInRhcmdldCIsICJob3N0bmFtZSIsICJpc1NhbWVPcmlnaW4iLCAiaXNPdXJUbGQiLCAiZmV0Y2hSZWNvdmVyeUluZm8iLCAic2hvd1JlY292ZXJ5TGluayIsICJsaW5rIiwgIm9wZW5SZWNvdmVyeVBhbmVsIiwgInBhbmVsIiwgInN0YXR1c0VsIiwgImltcG9ydEVsIiwgInZlcmlmeUVsIiwgImNsb3NlUmVjb3ZlcnlQYW5lbCIsICJzdWJtaXRSZWNvdmVyeVNlY3JldCIsICJzZWNyZXQiLCAic3VibWl0UmVjb3ZlcnlDb2RlIiwgImVycm9ySGFuZGxlciIsICJjdXJyZW50U2VydmljZSIsICJhcnJTZXJ2aWNlcyIsICJxdWFsaXR5UHJvZmlsZVNlcnZpY2VzIiwgImdldFNlcnZpY2VVcmwiLCAic2VydmljZSIsICJzaG93RXJyb3IiLCAiaGlkZUVycm9yIiwgInRpdGxlIiwgImRlc2MiLCAic2VlZGhvc3RTZWN0aW9uIiwgImFwaWtleVNlY3Rpb24iLCAiYmFzaWNTZWN0aW9uIiwgInF1YWxpdHlTZWN0aW9uIiwgImlzRXh0IiwgImlzQXJyIiwgImhhc1F1YWxpdHkiLCAicXVhbFNlbGVjdCIsICJsb2FkU2VydmljZUNyZWRzIiwgImRvdCIsICJjbGVhckJ0biIsICJoYXNDcmVkcyIsICJzdmNJZCIsICJsb2FkUXVhbGl0eVByb2ZpbGVzIiwgInF1YWxTdGF0dXMiLCAic3ZjVXJsIiwgInBhcmFtcyIsICJvcHQiLCAibWF0Y2g3MjAiLCAiYXBpS2V5IiwgInNhdmVCdG4iLCAidXNlciIsICJwYXNzIiwgInF1YWxpdHlQcm9maWxlSWQiLCAicXVhbGl0eVByb2ZpbGVOYW1lIiwgInNlZWREYXRhIiwgImQiLCAibG9hZFRvdHBTZXR0aW5ncyIsICJlbmFibGVkIiwgInNlc3Npb25EdXJhdGlvbiIsICJpc1NldFVwIiwgInN0YXR1c0RvdCIsICJzdGF0dXNUZXh0IiwgInN0YXR1c0Jhbm5lciIsICJzZXR1cFNlY3Rpb24iLCAicXJTZWN0aW9uIiwgImR1cmF0aW9uU2VjdGlvbiIsICJkaXNhYmxlU2VjdGlvbiIsICJzZXR1cEJ0biIsICJ1cGRhdGVBdXRoQ2FyZCIsICJEVVJBVElPTl9MQUJFTFMiLCAiYWN0aXZlIiwgInBpbGwiLCAicGF5bG9hZCIsICJibG9iIiwgImVyciIsICJBUEkiLCAiX2VsIiwgInRhZyIsICJhdHRycyIsICJjaGlsZHJlbiIsICJub2RlIiwgIl9mZXRjaEpTT04iLCAiY3NyZiIsICJfcmVuZGVyQmFkZ2UiLCAicm9sZSIsICJfcmVuZGVyVXNlcnNMaXN0IiwgInVzZXJzIiwgIm9uQ2hhbmdlIiwgInRhYmxlIiwgInRib2R5IiwgInUiLCAicm93IiwgImVtYWlsQ2VsbCIsICJyb2xlQ2VsbCIsICJhY3Rpb25zQ2VsbCIsICJyb2xlU2VsZWN0IiwgImV2IiwgImRlbEJ0biIsICJfcmVuZGVySW52aXRlRm9ybSIsICJvbklzc3VlZCIsICJmb3JtIiwgImZkIiwgInJvbGVTZWwiLCAiX3JlbmRlckludml0ZXNMaXN0IiwgImludml0ZXMiLCAiaW52IiwgIl9yZW5kZXJJc3N1ZWRJbnZpdGVCYW5uZXIiLCAiaW52aXRlIiwgInBhcmVudCIsICJiYW5uZXIiLCAiY29weUJ0biIsICJtb3VudCIsICJtZURhdGEiLCAicmVmcmVzaEJ0biIsICJ1c2Vyc0hlYWRlciIsICJ1c2Vyc0xpc3QiLCAidXNlcnNEYXRhIiwgImFkZFVzZXJGb3JtIiwgImludml0ZUZvcm1Db250YWluZXIiLCAiaW52aXRlc0xpc3QiLCAiaW52aXRlc0RhdGEiLCAiaXNzdWVkIiwgIm9wZW4iLCAiYmFja2Ryb3AiLCAiY2xvc2UiLCAiYXR0YWNoVHJpZ2dlciIsICJiYXJDb250YWluZXIiLCAiX21heWJlU2hvdyIsICJtZSIsICJnZXREbnNJZHMiLCAiZ2V0RG5zRGlzcGxheU5hbWUiLCAiYnVpbGRDcmVkZW50aWFsU2VjdGlvbnMiLCAiZ2V0RW5jcnlwdGlvbktleSIsICJvbGRLZXkiLCAiYXJyYXkiLCAiRU5DUllQVElPTl9LRVkiLCAiY3JlZGVudGlhbEVuY3J5cHQiLCAiaXYiLCAiaXZIZXgiLCAia2V5Qnl0ZXMiLCAiY2hhckNvZGUiLCAiY3JlZGVudGlhbERlY3J5cHQiLCAiZW5jcnlwdGVkVGV4dCIsICJkZWNvZGVkIiwgImdldENyZWRlbnRpYWwiLCAidG9rZW5UeXBlIiwgImNyZWRUeXBlIiwgImVuY3J5cHRlZCIsICJzZXRDcmVkZW50aWFsIiwgImdldFRva2VuIiwgImdldFVzZXJuYW1lIiwgInNldFRva2VuIiwgInNldFVzZXJuYW1lIiwgInVzZXJuYW1lIiwgImdldEFsbENyZWRlbnRpYWxzIiwgImNsZWFyQWxsQ3JlZGVudGlhbHMiLCAiZ2V0U3RvcmVkQ3JlZGVudGlhbHMiLCAicmVhZG9ubHlUb2tlbiIsICJyZWFkb25seVVzZXJuYW1lIiwgImFkbWluVG9rZW4iLCAiYWRtaW5Vc2VybmFtZSIsICJvbGRUb2tlbiIsICJvbGRVc2VybmFtZSIsICJjcmVkcyIsICJ0YXJnZXRJZCIsICJzZXJ2ZXJzIiwgImhhc0FueUNyZWRzIiwgImVudHJ5IiwgInJvVXNlciIsICJyb1Bhc3MiLCAiYWRtaW5Vc2VyIiwgImFkbWluUGFzcyIsICJzZXRRdWljayIsICJ1cCIsICJyZXNwb25zZVRpbWUiLCAidGltZUVsIiwgImdldFJlc3BvbnNlVGltZUNsYXNzIiwgInRpbWUiLCAiaXNVcCIsICJjaGVja1NlcnZpY2VXaXRoVGltaW5nIiwgInN0YXJ0VGltZSIsICJlbmRUaW1lIiwgInJlZnJlc2hJbkZsaWdodCIsICJyZWZyZXNoUXVldWVkIiwgImxvYWRTZXJ2aWNlcyIsICJzZXJ2aWNlVXJsIiwgInN2YyIsICJkbnMiLCAiY2xzIiwgInR4dCIsICJidWlsZEdyaWQiLCAicm9vdCIsICJ3cmFwIiwgImltZyIsICJhcHBJZCIsICJjZG5VcmxzIiwgInVuaXF1ZVVybHMiLCAibmV4dEluZGV4IiwgIm5hbWVTcGFuIiwgInRzQmFkZ2UiLCAiY2F0SW5mbyIsICJjYXRCYWRnZSIsICJ1cGRhdGVCYWRnZSIsICJyZXNwb25zZVJvdyIsICJ0aW1lU3BhbiIsICJoZWFsdGhSb3ciLCAidXB0aW1lQ2hpcCIsICJ1cHRpbWVNaW5pQmFyIiwgInVwdGltZUZpbGwiLCAiYnRuUm93IiwgImxvZ3NCdG4iLCAidXBkYXRlQnRuIiwgImV4ZWNCdG4iLCAiY3JlZHNCdG4iLCAib3B0QnRuIiwgInNoYXJlQnRuIiwgInNldEJhZGdlIiwgInJlZnJlc2hBbGwiLCAidXBkYXRlU3RhbXAiLCAiY2hlY2tlZEF0IiwgInN0YW1wIiwgImFwcGx5QmF0Y2hSZXN1bHRzIiwgInN0YXR1c2VzIiwgInJlZnJlc2hGYWxsYmFjayIsICJ0b3BDaGVja3MiLCAidG9wUmVzdWx0cyIsICJpbnRlcm5ldFJlc3VsdCIsICJiYXRjaEVycm9yIiwgImZhbGxiYWNrRXJyb3IiLCAib3BlbkJ0biIsICJyZXN0YXJ0RG5zU2VydmljZSIsICJyZXN0YXJ0QnRuIiwgInVwZGF0ZURuc1NlcnZlciIsICJzZXJ2ZXJJcCIsICJvcmlnaW5hbFRleHQiLCAiY2hlY2tSZXN1bHQiLCAidXBkYXRlUmVzdWx0IiwgImRvd25sb2FkSW5mbyIsICJpbnN0cnVjdGlvbnNJbmZvIiwgImN1cnJlbnREbnNJZCIsICJvcGVuRG5zU2V0dGluZ3MiLCAic2VydmVyIiwgInNhdmVEbnNTZXR0aW5ncyIsICJpcCIsICJwb3J0IiwgInVwZGF0ZSIsICJjbG9zZURuc1NldHRpbmdzIiwgInJlbW92ZURuc1NlcnZlciIsICJjb25maWciLCAic2V0dGluZ3NCdG4iLCAiY3VycmVudERuc1NlcnZpY2UiLCAibG9nc0ludGVydmFsIiwgImxvZ3NQYXVzZWQiLCAiY3VycmVudENvbnRhaW5lcklkIiwgImN1cnJlbnRDb250YWluZXJOYW1lIiwgImNvbnRhaW5lckxvZ3NNb2RlIiwgImN1cnJlbnRMb2dQYXRoIiwgImN1cnJlbnRMb2dTZXJ2aWNlTmFtZSIsICJmaWxlTG9nc01vZGUiLCAibG9nRXZlbnRTb3VyY2UiLCAiaXNTdHJlYW1pbmciLCAiZmV0Y2hEbnNMb2dzIiwgImxpbmVzIiwgInNlcnZlcklQIiwgImdldFJjb2RlQ29sb3IiLCAicmNvZGUiLCAicmVuZGVyRG5zTG9nRW50cnkiLCAibG9nIiwgInJjb2RlQ29sb3IiLCAiaXNCbG9ja2VkIiwgInVwZGF0ZUxvZ3NEaXNwbGF5IiwgInVwZGF0ZUZpbGVMb2dzRGlzcGxheSIsICJ1cGRhdGVDb250YWluZXJMb2dzRGlzcGxheSIsICJsb2dzQ29udGVudCIsICJsb2dFbGVtZW50IiwgIm9wZW5Mb2dzTW9kYWwiLCAicGF1c2VCdG4iLCAic3RyZWFtQnRuIiwgImNsb3NlTG9nc01vZGFsIiwgInN0b3BMb2dTdHJlYW1pbmciLCAic3RhcnRMb2dTdHJlYW1pbmciLCAiY29udGFpbmVySWQiLCAiaXNFcnJvciIsICJsZXZlbENvbG9yIiwgImxldmVsQmFkZ2UiLCAiZmV0Y2hDb250YWluZXJMb2dzIiwgImVuZHBvaW50IiwgInJlbmRlckNvbnRhaW5lckxvZ0VudHJ5IiwgInN0cmVhbUNvbG9yIiwgInN0cmVhbUJhZGdlIiwgIm9wZW5Db250YWluZXJMb2dzTW9kYWwiLCAiY29udGFpbmVyTmFtZSIsICJmZXRjaEZpbGVMb2dzIiwgImxvZ1BhdGgiLCAicmVuZGVyRmlsZUxvZ0VudHJ5IiwgImxvZ0xldmVsIiwgIm9wZW5GaWxlTG9nc01vZGFsIiwgInNlcnZpY2VOYW1lIiwgImxvYWRFeGlzdGluZ0NBcyIsICJjYWRkeWZpbGVQYXRoIiwgInNlbGVjdCIsICJjYSIsICJvcHRpb24iLCAiZ2VuZXJhdGVDYWRkeUNvbmZpZyIsICJzdWJkb21haW4iLCAic3NsVHlwZSIsICJjYU5hbWUiLCAiZXhpc3RpbmdDYSIsICJlbmFibGVBdXRoIiwgImVuYWJsZUNvcnMiLCAiY3VzdG9tSGVhZGVycyIsICJ1cHN0cmVhbVBhdGgiLCAiaGVhbHRoQ2hlY2siLCAidGltZW91dCIsICJ0YWlsc2NhbGVPbmx5IiwgImNhZGR5Q29uZmlnIiwgImhlYWRlcnMiLCAiY3JlYXRlRG5zUmVjb3JkIiwgInR0bCIsICJkbnNUb2tlbiIsICJkb21haW4iLCAiZXJyb3JUZXh0IiwgImFkZFNlcnZpY2VUb0NvbmZpZyIsICJzZXJ2aWNlQ29uZmlnIiwgIm5ld1NlcnZpY2UiLCAiYWRkVG9DYWRkeWZpbGUiLCAiY3VycmVudEVkaXRTZXJ2aWNlIiwgIm9wZW5TZXJ2aWNlRWRpdE1vZGFsIiwgImNhdGVnb3J5U2VsZWN0IiwgImNsb3NlU2VydmljZUVkaXRNb2RhbCIsICJzYXZlU2VydmljZUNoYW5nZXMiLCAibmV3U3ViZG9tYWluIiwgIm5ld05hbWUiLCAibmV3UG9ydCIsICJuZXdJcCIsICJuZXdMb2dvIiwgIm5ld0NhdGVnb3J5IiwgIm9sZFN1YmRvbWFpbiIsICJhcHBJbmRleCIsICJmaWxlIiwgInJlYWRlciIsICJkYXRhVXJsIiwgInNob3dEZWxldGVNb2RhbCIsICJoYXNDb250YWluZXIiLCAicmVzb2x2ZSIsICJjb250YWluZXJJbmZvIiwgImhlbHAiLCAiY2FuY2VsQnRuIiwgInJlbW92ZUJ0biIsICJkZWxldGVCdG4iLCAiY2xlYW51cCIsICJoYW5kbGVDYW5jZWwiLCAiaGFuZGxlUmVtb3ZlIiwgImhhbmRsZURlbGV0ZSIsICJoYW5kbGVCYWNrZHJvcCIsICJ1cGRhdGVDb250YWluZXIiLCAic2VydmljZUlkIiwgImRlbGV0ZVNlcnZpY2UiLCAiZGVsZXRlQ29udGFpbmVyIiwgInJlc3VsdHMiLCAic2VydmljZUlQIiwgImRuc1Jlc3VsdCIsICJjYWRkeVJlc3VsdCIsICJpbmRleCIsICJjdXN0b21BcHBzIiwgImxvY2FsSW5kZXgiLCAic2VydmljZVJlc3VsdCIsICJoYXNFcnJvcnMiLCAiZXJyb3JNZXNzYWdlcyIsICJzdWNjZXNzU3RhdGVzIiwgImlzU3VjY2VzcyIsICJkZXJpdmVTdWJkb21haW4iLCAiZ2V0U21hcnRTc2xEZWZhdWx0IiwgInVwZGF0ZVNlcnZpY2VQcmV2aWV3IiwgIlFVSUNLX0lQUyIsICJkbnNQcmV2aWV3IiwgInVybFByZXZpZXciLCAiY29uZmlnUHJldmlldyIsICJkZXRlY3ROZXR3b3JrSVBzIiwgImxhbkJ0biIsICJ0c0J0biIsICJpcElucHV0IiwgImluaXRRdWlja0lQQnV0dG9ucyIsICJjdXJyZW50SVAiLCAib3BlbkFkZFNlcnZpY2VNb2RhbCIsICJtb2RhbENvbnRlbnQiLCAic3NsU2VsZWN0IiwgInRhaWxzY2FsZVN0YXR1cyIsICJ0YWlsc2NhbGVDaGVja2JveCIsICJzZXR1cFNlcnZpY2VUeXBlU3dpdGNoaW5nIiwgImxvY2FsUmFkaW8iLCAiZXh0ZXJuYWxSYWRpbyIsICJsb2NhbENvbmZpZyIsICJleHRlcm5hbENvbmZpZyIsICJ0YWJMb2NhbCIsICJ0YWJFeHRlcm5hbCIsICJzd2l0Y2hTZXJ2aWNlVHlwZSIsICJzZXR1cEF1dG9TdWJkb21haW4iLCAibmFtZUlucHV0IiwgInN1YmRvbWFpbklucHV0IiwgInN1YmRvbWFpblByZXZpZXciLCAidXNlckVkaXRlZFN1YmRvbWFpbiIsICJleHROYW1lSW5wdXQiLCAiZXh0U3ViZG9tYWluSW5wdXQiLCAiZXh0U3ViZG9tYWluUHJldmlldyIsICJleHREb21haW5QcmV2aWV3IiwgInVzZXJFZGl0ZWRFeHRTdWJkb21haW4iLCAiY3JlYXRlRXh0ZXJuYWxTZXJ2aWNlIiwgImV4dGVybmFsVXJsIiwgImxvZ28iLCAiaWNvbiIsICJjcmVhdGVEbnMiLCAiY3JlYXRlQ2FkZHkiLCAicHJveHlJcCIsICJwcmVzZXJ2ZUhvc3QiLCAiZm9sbG93UmVkaXJlY3RzIiwgImNhdGVnb3J5IiwgImRlZmF1bHRTZXJ2aWNlcyIsICJjdXN0b21TZXJ2aWNlcyIsICJjbG9zZUFkZFNlcnZpY2VNb2RhbCIsICJwYXJ0cyIsICJzdWJQcmV2IiwgImV4dFN1YlByZXYiLCAiZXh0TmFtZSIsICJleHRTdWIiLCAiZXh0VXJsIiwgImV4dExvZ28iLCAiZXh0SWNvbiIsICJsb2NhbE9wdHMiLCAiZXh0T3B0cyIsICJjcmVhdGVOZXdTZXJ2aWNlIiwgInN0YXR1c1BhcnRzIiwgImV4aXN0aW5nQ2FDb25maWciLCAiY3VzdG9tQ2FDb25maWciLCAiYnV0dG9uIiwgImRuc0NvbmZpZyIsICJlbGVtZW50IiwgImxvYWRDdXN0b21TZXJ2aWNlcyIsICJlcyIsICJyZWNvbm5lY3REZWxheSIsICJNQVhfUkVDT05ORUNUIiwgImNvbm5lY3QiLCAidXBkYXRlc0J0biIsICJzZWFyY2hJbnB1dCIsICJzdGF0dXNTZWxlY3QiLCAiY291bnRTcGFuIiwgImdldENhdGVnb3J5TGlzdCIsICJzZWVuIiwgImZyb21DYXJkcyIsICJjYXQiLCAiYXBpQ2F0cyIsICJyZWZyZXNoQ2F0ZWdvcnlEcm9wZG93biIsICJsaXN0IiwgIm8iLCAidXBkYXRlRmlsdGVyIiwgInF1ZXJ5IiwgInN0YXR1c0ZpbHRlciIsICJjYXRlZ29yeUZpbHRlciIsICJjYXJkcyIsICJ2aXNpYmxlQ291bnQiLCAidG90YWwiLCAiZGVib3VuY2UiLCAiZGVsYXkiLCAiYXJncyIsICJiYXRjaEJ0biIsICJiYXRjaEJhciIsICJiYXRjaENvdW50IiwgInN0YXJ0QnRuIiwgInN0b3BCdG4iLCAiYmF0Y2hNb2RlIiwgInNlbGVjdGVkQ29udGFpbmVycyIsICJlbnRlckJhdGNoTW9kZSIsICJ1cGRhdGVTZWxlY3RlZENvdW50IiwgImNoZWNrYm94IiwgImV4aXRCYXRjaE1vZGUiLCAiY2IiLCAiYmF0Y2hBY3Rpb24iLCAiYWN0aW9uIiwgImNvbnRhaW5lcnMiLCAiYWN0aW9uTGFiZWwiLCAiYnRucyIsICJzdWNjZXNzIiwgImZhaWxlZCIsICJlcnJvcnMiXQp9Cg==
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBFcnJvciBIYW5kbGVyXG4gKiBIYW5kbGVzIGVycm9ycyBncmFjZWZ1bGx5IHdpdGhvdXQgYnJlYWtpbmcgdGhlIG9uYm9hcmRpbmcgdG91clxuICovXG5cbihmdW5jdGlvbih3aW5kb3cpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGNsYXNzIEVycm9ySGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgICAgdGhpcy5tYXhFcnJvcnMgPSA1MDsgLy8gS2VlcCBsYXN0IDUwIGVycm9yc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvZyBhbiBlcnJvciB3aXRob3V0IGJyZWFraW5nIHRoZSB0b3VyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgLSBDb250ZXh0IHdoZXJlIGVycm9yIG9jY3VycmVkXG4gICAgICogQHBhcmFtIHtFcnJvcnxzdHJpbmd9IGVycm9yIC0gVGhlIGVycm9yIG9iamVjdCBvciBtZXNzYWdlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhIC0gQWRkaXRpb25hbCBtZXRhZGF0YVxuICAgICAqL1xuICAgIGxvZ0Vycm9yKGNvbnRleHQsIGVycm9yLCBtZXRhZGF0YSA9IHt9KSB7XG4gICAgICBjb25zdCBlcnJvckVudHJ5ID0ge1xuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcixcbiAgICAgICAgc3RhY2s6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IG51bGwsXG4gICAgICAgIG1ldGFkYXRhXG4gICAgICB9O1xuXG4gICAgICAvLyBBZGQgdG8gZXJyb3JzIGFycmF5XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yRW50cnkpO1xuXG4gICAgICAvLyBLZWVwIG9ubHkgbGFzdCBtYXhFcnJvcnNcbiAgICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPiB0aGlzLm1heEVycm9ycykge1xuICAgICAgICB0aGlzLmVycm9ycy5zaGlmdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2cgdG8gY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgW09uYm9hcmRpbmcgRXJyb3JdICR7Y29udGV4dH06YCwgZXJyb3IsIG1ldGFkYXRhKTtcblxuICAgICAgLy8gT3B0aW9uYWxseSBzZW5kIHRvIGVycm9yIHRyYWNraW5nIHNlcnZpY2VcbiAgICAgIC8vIHRoaXMuc2VuZFRvRXJyb3JUcmFja2luZyhlcnJvckVudHJ5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBhbiBlcnJvciBhbmQgY29udGludWUgdG91clxuICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIC0gVGhlIGVycm9yIG9iamVjdFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50U3RlcCAtIEN1cnJlbnQgc3RlcCBpbmRleFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJlY292ZXJ5IGFjdGlvblxuICAgICAqL1xuICAgIHJlY292ZXJGcm9tRXJyb3IoZXJyb3IsIGN1cnJlbnRTdGVwKSB7XG4gICAgICBjb25zdCBlcnJvclR5cGUgPSB0aGlzLmNsYXNzaWZ5RXJyb3IoZXJyb3IpO1xuXG4gICAgICBzd2l0Y2ggKGVycm9yVHlwZSkge1xuICAgICAgICBjYXNlICdFTEVNRU5UX05PVF9GT1VORCc6XG4gICAgICAgICAgdGhpcy5sb2dFcnJvcignRWxlbWVudCBOb3QgRm91bmQnLCBlcnJvciwgeyBjdXJyZW50U3RlcCB9KTtcbiAgICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAgIGFjdGlvbjogJ1NLSVBfU1RFUCcsIFxuICAgICAgICAgICAgbmV4dFN0ZXA6IGN1cnJlbnRTdGVwICsgMSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdUYXJnZXQgZWxlbWVudCBub3QgZm91bmQsIHNraXBwaW5nIHRvIG5leHQgc3RlcCdcbiAgICAgICAgICB9O1xuXG4gICAgICAgIGNhc2UgJ1NUT1JBR0VfVU5BVkFJTEFCTEUnOlxuICAgICAgICAgIHRoaXMubG9nRXJyb3IoJ1N0b3JhZ2UgVW5hdmFpbGFibGUnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgICBhY3Rpb246ICdVU0VfTUVNT1JZX1NUT1JBR0UnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0xvY2FsIHN0b3JhZ2UgdW5hdmFpbGFibGUsIHVzaW5nIGluLW1lbW9yeSBzdG9yYWdlJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgY2FzZSAnRFJJVkVSX05PVF9MT0FERUQnOlxuICAgICAgICAgIHRoaXMubG9nRXJyb3IoJ0RyaXZlci5qcyBOb3QgTG9hZGVkJywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3Rpb246ICdBQk9SVF9UT1VSJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdEcml2ZXIuanMgbGlicmFyeSBub3QgbG9hZGVkLCBjYW5ub3Qgc3RhcnQgdG91cidcbiAgICAgICAgICB9O1xuXG4gICAgICAgIGNhc2UgJ0lOVkFMSURfVE9PTFRJUCc6XG4gICAgICAgICAgdGhpcy5sb2dFcnJvcignSW52YWxpZCBUb29sdGlwIENvbmZpZ3VyYXRpb24nLCBlcnJvciwgeyBjdXJyZW50U3RlcCB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aW9uOiAnU0tJUF9TVEVQJyxcbiAgICAgICAgICAgIG5leHRTdGVwOiBjdXJyZW50U3RlcCArIDEsXG4gICAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCB0b29sdGlwIGNvbmZpZ3VyYXRpb24sIHNraXBwaW5nJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgY2FzZSAnVEhFTUVfREVURUNUSU9OX0ZBSUxFRCc6XG4gICAgICAgICAgdGhpcy5sb2dFcnJvcignVGhlbWUgRGV0ZWN0aW9uIEZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aW9uOiAnVVNFX0RFRkFVTFRfVEhFTUUnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1VzaW5nIGRlZmF1bHQgZGFyayB0aGVtZSdcbiAgICAgICAgICB9O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5sb2dFcnJvcignVW5rbm93biBFcnJvcicsIGVycm9yLCB7IGN1cnJlbnRTdGVwIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3Rpb246ICdBQk9SVF9UT1VSJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdVbmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLCBhYm9ydGluZyB0b3VyJ1xuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xhc3NpZnkgZXJyb3IgdHlwZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBUaGUgZXJyb3Igb2JqZWN0XG4gICAgICogQHJldHVybnMge3N0cmluZ30gRXJyb3IgdHlwZVxuICAgICAqL1xuICAgIGNsYXNzaWZ5RXJyb3IoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8IGVycm9yLnRvU3RyaW5nKCk7XG5cbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdlbGVtZW50JykgJiYgbWVzc2FnZS5pbmNsdWRlcygnbm90IGZvdW5kJykpIHtcbiAgICAgICAgcmV0dXJuICdFTEVNRU5UX05PVF9GT1VORCc7XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnc3RvcmFnZScpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ3F1b3RhJykpIHtcbiAgICAgICAgcmV0dXJuICdTVE9SQUdFX1VOQVZBSUxBQkxFJztcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdkcml2ZXInKSB8fCBtZXNzYWdlLmluY2x1ZGVzKCd1bmRlZmluZWQnKSkge1xuICAgICAgICByZXR1cm4gJ0RSSVZFUl9OT1RfTE9BREVEJztcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdpbnZhbGlkJykgfHwgbWVzc2FnZS5pbmNsdWRlcygndmFsaWRhdGlvbicpKSB7XG4gICAgICAgIHJldHVybiAnSU5WQUxJRF9UT09MVElQJztcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCd0aGVtZScpKSB7XG4gICAgICAgIHJldHVybiAnVEhFTUVfREVURUNUSU9OX0ZBSUxFRCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnVU5LTk9XTic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBsb2dnZWQgZXJyb3JzXG4gICAgICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiBlcnJvciBlbnRyaWVzXG4gICAgICovXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIFsuLi50aGlzLmVycm9yc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGxvZ2dlZCBlcnJvcnNcbiAgICAgKi9cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGVycm9yIHN0YXRpc3RpY3NcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBFcnJvciBzdGF0aXN0aWNzXG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljcygpIHtcbiAgICAgIGNvbnN0IHN0YXRzID0ge1xuICAgICAgICB0b3RhbDogdGhpcy5lcnJvcnMubGVuZ3RoLFxuICAgICAgICBieUNvbnRleHQ6IHt9LFxuICAgICAgICBieVR5cGU6IHt9LFxuICAgICAgICByZWNlbnQ6IHRoaXMuZXJyb3JzLnNsaWNlKC0xMClcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZXJyb3JzLmZvckVhY2goZXJyb3IgPT4ge1xuICAgICAgICAvLyBDb3VudCBieSBjb250ZXh0XG4gICAgICAgIHN0YXRzLmJ5Q29udGV4dFtlcnJvci5jb250ZXh0XSA9IChzdGF0cy5ieUNvbnRleHRbZXJyb3IuY29udGV4dF0gfHwgMCkgKyAxO1xuXG4gICAgICAgIC8vIENvdW50IGJ5IHR5cGVcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY2xhc3NpZnlFcnJvcih7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHN0YXRzLmJ5VHlwZVt0eXBlXSA9IChzdGF0cy5ieVR5cGVbdHlwZV0gfHwgMCkgKyAxO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgZ3JhY2VmdWwgZGVncmFkYXRpb24gd2hlbiBEcml2ZXIuanMgZmFpbHMgdG8gbG9hZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGZhbGxiYWNrIHdhcyBzdWNjZXNzZnVsXG4gICAgICovXG4gICAgaGFuZGxlRHJpdmVyTG9hZEZhaWx1cmUoKSB7XG4gICAgICB0aGlzLmxvZ0Vycm9yKCdEcml2ZXIuanMgTG9hZCBGYWlsdXJlJywgJ0RyaXZlci5qcyBsaWJyYXJ5IGZhaWxlZCB0byBsb2FkJyk7XG5cbiAgICAgIC8vIFNob3cgZmFsbGJhY2sgbWVzc2FnZVxuICAgICAgY29uc3QgZmFsbGJhY2tNZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBmYWxsYmFja01lc3NhZ2UuaWQgPSAnb25ib2FyZGluZy1mYWxsYmFjayc7XG4gICAgICBmYWxsYmFja01lc3NhZ2Uuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBib3R0b206IDIwcHg7XG4gICAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJhc2UsICMyYTJhMmEpO1xuICAgICAgICBjb2xvcjogdmFyKC0tZmcsICNmZmZmZmYpO1xuICAgICAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMyk7XG4gICAgICAgIHotaW5kZXg6IDk5OTk7XG4gICAgICAgIG1heC13aWR0aDogMzAwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGA7XG4gICAgICBmYWxsYmFja01lc3NhZ2UuaW5uZXJIVE1MID0gYFxuICAgICAgICA8c3Ryb25nPldlbGNvbWUgdG8gRGFzaENhZGR5ITwvc3Ryb25nPjxicj5cbiAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46IDEwcHggMCAwIDA7IGZvbnQtc2l6ZTogMTJweDtcIj5cbiAgICAgICAgICBUaGUgaW50ZXJhY3RpdmUgdG91ciBpcyB1bmF2YWlsYWJsZSwgYnV0IHlvdSBjYW4gZXhwbG9yZSB0aGUgZGFzaGJvYXJkIGZyZWVseS5cbiAgICAgICAgICBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgaGVscCBnZXR0aW5nIHN0YXJ0ZWQuXG4gICAgICAgIDwvcD5cbiAgICAgIGA7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZmFsbGJhY2tNZXNzYWdlKTtcblxuICAgICAgLy8gQXV0by1yZW1vdmUgYWZ0ZXIgMTAgc2Vjb25kc1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChmYWxsYmFja01lc3NhZ2UucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGZhbGxiYWNrTWVzc2FnZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZhbGxiYWNrTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDAwKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHN0b3JhZ2UgdW5hdmFpbGFibGUgc2NlbmFyaW9cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBJbi1tZW1vcnkgc3RvcmFnZSBmYWxsYmFja1xuICAgICAqL1xuICAgIGhhbmRsZVN0b3JhZ2VVbmF2YWlsYWJsZSgpIHtcbiAgICAgIHRoaXMubG9nRXJyb3IoJ1N0b3JhZ2UgVW5hdmFpbGFibGUnLCAnTG9jYWwgc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlJyk7XG5cbiAgICAgIC8vIENyZWF0ZSBpbi1tZW1vcnkgc3RvcmFnZVxuICAgICAgY29uc3QgbWVtb3J5U3RvcmFnZSA9IHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGdldEl0ZW0oa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUl0ZW0oa2V5KSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtrZXldO1xuICAgICAgICB9LFxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc29sZS53YXJuKCdbRXJyb3JIYW5kbGVyXSBVc2luZyBpbi1tZW1vcnkgc3RvcmFnZSAtIHByb2dyZXNzIHdpbGwgbm90IHBlcnNpc3QnKTtcbiAgICAgIHJldHVybiBtZW1vcnlTdG9yYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbmQgZXJyb3IgdG8gdHJhY2tpbmcgc2VydmljZSAocGxhY2Vob2xkZXIpXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZXJyb3JFbnRyeSAtIEVycm9yIGVudHJ5IHRvIHNlbmRcbiAgICAgKi9cbiAgICBzZW5kVG9FcnJvclRyYWNraW5nKGVycm9yRW50cnkpIHtcbiAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciBlcnJvciB0cmFja2luZyBpbnRlZ3JhdGlvblxuICAgICAgLy8gQ291bGQgaW50ZWdyYXRlIHdpdGggU2VudHJ5LCBMb2dSb2NrZXQsIGV0Yy5cbiAgICAgIC8vIEV4YW1wbGU6XG4gICAgICAvLyBpZiAod2luZG93LlNlbnRyeSkge1xuICAgICAgLy8gICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihuZXcgRXJyb3IoZXJyb3JFbnRyeS5tZXNzYWdlKSwge1xuICAgICAgLy8gICAgIGV4dHJhOiBlcnJvckVudHJ5Lm1ldGFkYXRhXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5FcnJvckhhbmRsZXIgPSBFcnJvckhhbmRsZXI7XG4gIGNvbnNvbGUubG9nKCdbRXJyb3JIYW5kbGVyXSBNb2R1bGUgbG9hZGVkJyk7XG5cbn0pKHdpbmRvdyk7XG47XG4vLyA9PT09PSBEQVNIQk9BUkQgQ09OU1RBTlRTID09PT09XG4vLyBIb25vciBwZXJzaXN0ZWQgaGVhbHRoIHJldGVudGlvbiBzZXR0aW5ncyBmb3IgcG9sbGluZyBjYWRlbmNlcyBzbyB0aGVcbi8vIFNldHRpbmdzIFx1MjE5MiBIZWFsdGggXHUyMTkyIEdsb2JhbCBTZXR0aW5ncyBwYW5lbCBhY3R1YWxseSB0YWtlcyBlZmZlY3QuIFRoZVxuLy8gU1RBVFMgaW50ZXJ2YWwgKHJlc291cmNlL2NvbnRhaW5lciBzdGF0IHNhbXBsaW5nKSBpcyBkcml2ZW4gZnJvbSB0aGVcbi8vIHVzZXItY29uZmlndXJhYmxlIHN0YXRzUG9sbGluZ0ludGVydmFsLiBIRUFMVEggaXMgdGhlIGxpZ2h0d2VpZ2h0IGNhcmRcbi8vIGJhZGdlIHJlZnJlc2ggYW5kIHN0YXlzIGF0IGl0cyBmYXN0IGRlZmF1bHQgdW5sZXNzIG92ZXJyaWRkZW4uXG4oZnVuY3Rpb24gYXBwbHlIZWFsdGhQb2xsaW5nU2V0dGluZ3MoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHJhdyA9ICh0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGFzaGNhZGR5LWhlYWx0aC1zZXR0aW5ncycpKSB8fCBudWxsO1xuICAgIGlmIChyYXcpIHtcbiAgICAgIHZhciBzID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgLy8gdmFsdWVzIGFyZSBzdG9yZWQgaW4gc2Vjb25kczsgREMuUE9MTCBleHBlY3RzIG1pbGxpc2Vjb25kc1xuICAgICAgaWYgKHMuc3RhdHNQb2xsaW5nSW50ZXJ2YWwgJiYgcy5zdGF0c1BvbGxpbmdJbnRlcnZhbCA+PSA1ICYmIHMuc3RhdHNQb2xsaW5nSW50ZXJ2YWwgPD0gMzYwMCkge1xuICAgICAgICB3aW5kb3cuX19EQ19TVEFUU19PVkVSUklERSA9IHMuc3RhdHNQb2xsaW5nSW50ZXJ2YWwgKiAxMDAwO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoXykgeyAvKiBpZ25vcmUgXHUyMDE0IGZhbGwgYmFjayB0byBkZWZhdWx0cyBiZWxvdyAqLyB9XG59KSgpO1xuXG5jb25zdCBEQyA9IHtcbiAgTkFNRTogJ0Rhc2hDYWRkeScsXG4gIFBPTEw6IHtcbiAgICBEQVNIQk9BUkQ6ICAxMDAwMCwgICAvLyAxMHMgXHUyMDE0IG1haW4gcmVmcmVzaEFsbCBpbnRlcnZhbFxuICAgIExPR1M6ICAgICAgIDMwMDAsICAgIC8vIDNzICBcdTIwMTQgbG9nIHZpZXdlciB1cGRhdGVzXG4gICAgU1RBVFM6ICAgICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5fX0RDX1NUQVRTX09WRVJSSURFKSB8fCA1MDAwLCAgIC8vIDVzIGRlZmF1bHQgXHUyMDE0IHJlc291cmNlIG1vbml0b3IgcmVmcmVzaCAob3ZlcnJpZGFibGUgdmlhIFNldHRpbmdzIFx1MjE5MiBIZWFsdGgpXG4gICAgV0VBVEhFUjogICAgNjAwMDAwLCAgLy8gMTBtIFx1MjAxNCB3ZWF0aGVyIHdpZGdldCByZWZyZXNoXG4gICAgSEVBTFRIOiAgICAgMTAwMCwgICAgLy8gMXMgIFx1MjAxNCBjYXJkIGhlYWx0aCBiYWRnZSByZWZyZXNoXG4gICAgREVQTE9ZX1NTTDogNTAwMCwgICAgLy8gNXMgIFx1MjAxNCBTU0wgY2VydCBjaGVjayBkdXJpbmcgZGVwbG95XG4gIH0sXG4gIERFTEFZUzoge1xuICAgIEJUTl9SRVNFVDogIDIwMDAsICAgIC8vIEJ1dHRvbiB0ZXh0IHJlc2V0IGFmdGVyIGFjdGlvblxuICAgIFJFTE9BRDogICAgIDUwMDAsICAgIC8vIFBhZ2UgcmVsb2FkIGFmdGVyIHJlc3RhcnRcbiAgICBNT0RBTF9DTE9TRTogNTAwLCAgICAvLyBNb2RhbCBjbG9zZSBhbmltYXRpb25cbiAgICBQT1JUX0NIRUNLOiA1MDAsICAgICAvLyBEZWJvdW5jZSBmb3IgcG9ydCBhdmFpbGFiaWxpdHkgY2hlY2tcbiAgICBERVBMT1lfSU5JVDogMzAwMCwgICAvLyBJbml0aWFsIGRlcGxveSBjZXJ0IGNoZWNrIGRlbGF5XG4gIH0sXG4gIERFRkFVTFRTOiB7XG4gICAgRE5TX1BPUlQ6ICAgICc1MzgwJyxcbiAgICBTRVJWSUNFX1BPUlQ6ICc4MDgwJyxcbiAgICBUVEw6ICAgICAgICAgMzAwLFxuICAgIENBRERZRklMRTogICAnQzpcXFxcY2FkZHlcXFxcQ2FkZHlmaWxlJyxcbiAgfSxcbn07XG5cbi8vIEVycm9yIGhhbmRsZXIgZm9yIHRyYWNraW5nIGlzc3Vlc1xuY29uc3QgZXJyb3JIYW5kbGVyID0gbmV3IEVycm9ySGFuZGxlcigpO1xuXG4vLyA9PT09PSBHTE9CQUwgU0lURSBDT05GSUcgKGxvYWRlZCBmcm9tIHNlcnZlciwgY2FjaGVkIGluIGxvY2FsU3RvcmFnZSkgPT09PT1cbi8vIE9ubHkgbm9uLXNlbnNpdGl2ZSBkaXNwbGF5IHByZWZlcmVuY2VzIGFyZSBjYWNoZWQ7IEROUyBJUHMvdG9wb2xvZ3kgYXJlIGZldGNoZWQgZnJvbSBBUElcbmNvbnN0IF9jYWNoZWRDZmcgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXNoY2FkZHlfc2l0ZV9jb25maWcnKSB8fCAnbnVsbCcpO1xuY29uc3QgU0lURSA9IHtcbiAgdGxkOiAoX2NhY2hlZENmZyAmJiBfY2FjaGVkQ2ZnLnRsZCkgfHwgJy5ob21lJyxcbiAgZG5zSXA6ICcnLFxuICBkbnNQb3J0OiBEQy5ERUZBVUxUUy5ETlNfUE9SVCxcbiAgZG5zU2VydmVyczoge30sXG4gIGNvbmZpZ3VyYXRpb25UeXBlOiAoX2NhY2hlZENmZyAmJiBfY2FjaGVkQ2ZnLmNvbmZpZ3VyYXRpb25UeXBlKSB8fCAnaG9tZWxhYicsXG4gIGRvbWFpbjogKF9jYWNoZWRDZmcgJiYgX2NhY2hlZENmZy5kb21haW4pIHx8ICcnLFxuICBkZWZhdWx0czogKF9jYWNoZWRDZmcgJiYgX2NhY2hlZENmZy5kZWZhdWx0cykgfHwge30sXG4gIHJvdXRpbmdNb2RlOiAoX2NhY2hlZENmZyAmJiBfY2FjaGVkQ2ZnLnJvdXRpbmdNb2RlKSB8fCAnc3ViZG9tYWluJyxcbiAgb25ib2FyZGluZ0NvbXBsZXRlZDogZmFsc2Vcbn07XG53aW5kb3cuX19kYXNoY2FkZHlTaXRlQ29uZmlnTG9hZGVkID0gKGFzeW5jIGZ1bmN0aW9uIGxvYWRTaXRlQ29uZmlnKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS9jb25maWcnKTtcbiAgICBpZiAoci5vaykge1xuICAgICAgY29uc3QgYyA9IGF3YWl0IHIuanNvbigpO1xuICAgICAgaWYgKGMudGxkKSBTSVRFLnRsZCA9IGMudGxkLnN0YXJ0c1dpdGgoJy4nKSA/IGMudGxkIDogJy4nICsgYy50bGQ7XG4gICAgICBpZiAoYy5kbnMpIHtcbiAgICAgICAgU0lURS5kbnNJcCA9IGMuZG5zLmlwIHx8ICcnO1xuICAgICAgICBTSVRFLmRuc1BvcnQgPSBjLmRucy5wb3J0IHx8IERDLkRFRkFVTFRTLkROU19QT1JUO1xuICAgICAgfVxuICAgICAgaWYgKGMuZG5zU2VydmVycyAmJiB0eXBlb2YgYy5kbnNTZXJ2ZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhjLmRuc1NlcnZlcnMpKSB7XG4gICAgICAgICAgaWYgKGsgIT09ICdfX3Byb3RvX18nICYmIGsgIT09ICdjb25zdHJ1Y3RvcicgJiYgayAhPT0gJ3Byb3RvdHlwZScpIFNJVEUuZG5zU2VydmVyc1trXSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLmNvbmZpZ3VyYXRpb25UeXBlKSBTSVRFLmNvbmZpZ3VyYXRpb25UeXBlID0gYy5jb25maWd1cmF0aW9uVHlwZTtcbiAgICAgIGlmIChjLmRvbWFpbikgU0lURS5kb21haW4gPSBjLmRvbWFpbjtcbiAgICAgIGlmIChjLmRlZmF1bHRzKSBTSVRFLmRlZmF1bHRzID0gYy5kZWZhdWx0cztcbiAgICAgIGlmIChjLnJvdXRpbmdNb2RlKSBTSVRFLnJvdXRpbmdNb2RlID0gYy5yb3V0aW5nTW9kZTtcbiAgICAgIFNJVEUub25ib2FyZGluZ0NvbXBsZXRlZCA9IGMub25ib2FyZGluZ0NvbXBsZXRlZCA9PT0gdHJ1ZTtcbiAgICAgIC8vIENhY2hlIG9ubHkgbm9uLXNlbnNpdGl2ZSBkaXNwbGF5IGNvbmZpZyAoVExELCBkb21haW4sIHJvdXRpbmcgbW9kZSlcbiAgICAgIC8vIEROUyBJUHMgYW5kIHNlcnZlciB0b3BvbG9neSBhcmUgTk9UIGNhY2hlZCBcdTIwMTQgZmV0Y2hlZCBmcm9tIEFQSSBlYWNoIGxvYWRcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkYXNoY2FkZHlfc2l0ZV9jb25maWcnLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHRsZDogU0lURS50bGQsIGNvbmZpZ3VyYXRpb25UeXBlOiBTSVRFLmNvbmZpZ3VyYXRpb25UeXBlLFxuICAgICAgICBkb21haW46IFNJVEUuZG9tYWluLCByb3V0aW5nTW9kZTogU0lURS5yb3V0aW5nTW9kZVxuICAgICAgfSkpO1xuICAgICAgLy8gUmVuZGVyIEROUyBjYXJkcyBkeW5hbWljYWxseSBiYXNlZCBvbiBjb25maWd1cmVkIHNlcnZlcnNcbiAgICAgIHJlbmRlckRuc0NhcmRzKCk7XG4gICAgICAvLyBIaWRlIFRva2VucyBidXR0b24gaWYgbm8gRE5TIHNlcnZlcnMgY29uZmlndXJlZFxuICAgICAgY29uc3QgdG9rZW5zQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hbmFnZS10b2tlbnMnKTtcbiAgICAgIGlmICh0b2tlbnNCdG4pIHRva2Vuc0J0bi5zdHlsZS5kaXNwbGF5ID0gT2JqZWN0LmtleXMoU0lURS5kbnNTZXJ2ZXJzKS5sZW5ndGggPyAnJyA6ICdub25lJztcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHt9XG4gIC8vIFVwZGF0ZSBzdGF0aWMgSFRNTCBlbGVtZW50cyB3aXRoIGNvbmZpZ3VyZWQgVExEXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXRsZF0nKS5mb3JFYWNoKGVsID0+IGVsLnRleHRDb250ZW50ID0gU0lURS50bGQpO1xuICBjb25zdCB0bGRTdWZmaXggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC10bGQtc3VmZml4Jyk7XG4gIGlmICh0bGRTdWZmaXgpIHRsZFN1ZmZpeC50ZXh0Q29udGVudCA9IFNJVEUudGxkO1xuICBjb25zdCBwcm94eUlwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtcHJveHktaXAnKTtcbiAgaWYgKHByb3h5SXBJbnB1dCAmJiBTSVRFLmRuc0lwKSB7IHByb3h5SXBJbnB1dC52YWx1ZSA9IFNJVEUuZG5zSXA7IHByb3h5SXBJbnB1dC5wbGFjZWhvbGRlciA9IFNJVEUuZG5zSXA7IH1cbn0pKCk7XG5mdW5jdGlvbiBidWlsZERvbWFpbihzdWIpIHsgcmV0dXJuIHN1YiArIFNJVEUudGxkOyB9XG5mdW5jdGlvbiBidWlsZFNlcnZpY2VVcmwoc3ViKSB7XG4gIGlmIChTSVRFLnJvdXRpbmdNb2RlID09PSAnc3ViZGlyZWN0b3J5JyAmJiBTSVRFLmRvbWFpbikgcmV0dXJuICdodHRwczovLycgKyBTSVRFLmRvbWFpbiArICcvJyArIHN1YjtcbiAgaWYgKFNJVEUuY29uZmlndXJhdGlvblR5cGUgPT09ICdwdWJsaWMnICYmIFNJVEUuZG9tYWluKSByZXR1cm4gJ2h0dHBzOi8vJyArIHN1YiArICcuJyArIFNJVEUuZG9tYWluO1xuICByZXR1cm4gJ2h0dHBzOi8vJyArIGJ1aWxkRG9tYWluKHN1Yik7XG59XG5mdW5jdGlvbiBnZXREbnNTZXJ2ZXJBZGRyKGRuc0lkKSB7XG4gIGNvbnN0IHMgPSBTSVRFLmRuc1NlcnZlcnNbZG5zSWRdO1xuICByZXR1cm4gcyA/IGAke3MuaXB9OiR7cy5wb3J0fWAgOiBidWlsZERvbWFpbihkbnNJZCk7XG59XG4vKiogR2V0IHRoZSBETlMgSUQgd2hvc2UgSVAgbWF0Y2hlcyB0aGUgcHJpbWFyeSBETlMgY29uZmlnIChkbnMuaXApICovXG5mdW5jdGlvbiBnZXRQcmltYXJ5RG5zSWQoKSB7XG4gIGlmICghU0lURS5kbnNJcCkgcmV0dXJuIG51bGw7XG4gIGZvciAoY29uc3QgW2lkLCBpbmZvXSBvZiBPYmplY3QuZW50cmllcyhTSVRFLmRuc1NlcnZlcnMpKSB7XG4gICAgaWYgKGluZm8uaXAgPT09IFNJVEUuZG5zSXApIHJldHVybiBpZDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gPT09PT0gRFlOQU1JQyBETlMgQ0FSRCBSRU5ERVJFUiA9PT09PVxuZnVuY3Rpb24gcmVuZGVyRG5zQ2FyZHMoKSB7XG4gIGNvbnN0IHRvcFJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b3AnKTtcbiAgaWYgKCF0b3BSb3cpIHJldHVybjtcbiAgY29uc3QgZG5zSWRzID0gT2JqZWN0LmtleXMoU0lURS5kbnNTZXJ2ZXJzKTtcbiAgaWYgKCFkbnNJZHMubGVuZ3RoKSByZXR1cm47IC8vIE5vIEROUyBzZXJ2ZXJzIGNvbmZpZ3VyZWQgXHUyMDE0IHNob3cgbm90aGluZ1xuXG4gIGNvbnN0IHN2Z0ljb24gPSAnPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJzZXJ2aWNlLWljb25cIj4nXG4gICAgKyAnPHJlY3QgeD1cIjNcIiB5PVwiNFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxNlwiIHJ4PVwiMlwiIGZpbGw9XCIjMzQ0OTVlXCIvPidcbiAgICArICc8cmVjdCB4PVwiNVwiIHk9XCI2XCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjJcIiByeD1cIjFcIiBmaWxsPVwiIzM0OThkYlwiLz4nXG4gICAgKyAnPHJlY3QgeD1cIjVcIiB5PVwiOVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxXCIgZmlsbD1cIiNlY2YwZjFcIi8+J1xuICAgICsgJzxyZWN0IHg9XCI1XCIgeT1cIjExXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjFcIiBmaWxsPVwiI2VjZjBmMVwiLz4nXG4gICAgKyAnPHJlY3QgeD1cIjVcIiB5PVwiMTNcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIxXCIgZmlsbD1cIiNlY2YwZjFcIi8+J1xuICAgICsgJzxyZWN0IHg9XCI1XCIgeT1cIjE1XCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjFcIiBmaWxsPVwiI2VjZjBmMVwiLz4nXG4gICAgKyAnPGNpcmNsZSBjeD1cIjE3XCIgY3k9XCIxMVwiIHI9XCIyXCIgZmlsbD1cIiNlNzRjM2NcIi8+J1xuICAgICsgJzxwYXRoIGQ9XCJNMTcgOXY0TTE1IDExaDRcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjFcIi8+PC9zdmc+JztcblxuICBjb25zdCBmaXJzdENoaWxkID0gdG9wUm93LmZpcnN0RWxlbWVudENoaWxkO1xuICBkbnNJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3Qgc2FmZUlkID0gZXNjYXBlSHRtbChpZCk7XG4gICAgY29uc3QgbGFiZWwgPSBlc2NhcGVIdG1sKChTSVRFLmRuc1NlcnZlcnNbaWRdLm5hbWUgfHwgaWQpLnRvVXBwZXJDYXNlKCkpO1xuICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjYXJkLmNsYXNzTmFtZSA9ICdjYXJkJztcbiAgICBjYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1hcHAnLCBpZCk7XG4gICAgY2FyZC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHVzJywgJ29mZicpO1xuICAgIGNhcmQuaW5uZXJIVE1MID1cbiAgICAgIGA8c3BhbiBpZD1cIiR7c2FmZUlkfS1kb3RcIiBjbGFzcz1cImRvdCBiYWQgYXQtYmxcIj48L3NwYW4+YFxuICAgICAgKyBgPGRpdiBjbGFzcz1cInJvd1wiPjxkaXYgY2xhc3M9XCJsb2dvLXdyYXBcIj4ke3N2Z0ljb259PC9kaXY+YFxuICAgICAgKyBgPHNwYW4gY2xhc3M9XCJuYW1lXCI+JHtsYWJlbH08L3NwYW4+PHNwYW4gY2xhc3M9XCJzcGFjZXJcIj48L3NwYW4+YFxuICAgICAgKyBgPHNwYW4gaWQ9XCIke3NhZmVJZH0tcGlsbFwiIGNsYXNzPVwiYmFkZ2Ugb2ZmXCI+T0ZGPC9zcGFuPjwvZGl2PmBcbiAgICAgICsgYDxkaXYgY2xhc3M9XCJyZXNwb25zZS1yb3dcIj48c3BhbiBpZD1cIiR7c2FmZUlkfS10aW1lXCIgY2xhc3M9XCJyZXNwb25zZS10aW1lXCI+LS08L3NwYW4+PC9kaXY+YFxuICAgICAgKyBgPGRpdiBjbGFzcz1cImhlYWx0aC1yb3dcIiBpZD1cImhlYWx0aC0ke3NhZmVJZH1cIj48c3BhbiBpZD1cInVwdGltZS0ke3NhZmVJZH1cIiBjbGFzcz1cInVwdGltZS1jaGlwXCI+LS08L3NwYW4+PGRpdiBjbGFzcz1cInVwdGltZS1taW5pLWJhclwiPjxkaXYgY2xhc3M9XCJmaWxsXCIgaWQ9XCJ1cHRpbWUtYmFyLSR7c2FmZUlkfVwiIHN0eWxlPVwid2lkdGg6IDAlXCI+PC9kaXY+PC9kaXY+PC9kaXY+YFxuICAgICAgKyBgPGRpdiBjbGFzcz1cImJ0bi1yb3dcIj5gXG4gICAgICArIGA8YnV0dG9uIGlkPVwiJHtzYWZlSWR9LXJlc3RhcnRcIiBjbGFzcz1cInJlc3RhcnQtYnRuXCI+UmVzdGFydDwvYnV0dG9uPmBcbiAgICAgICsgYDxidXR0b24gaWQ9XCIke3NhZmVJZH0tdXBkYXRlXCIgY2xhc3M9XCJ1cGRhdGUtYnRuXCIgdGl0bGU9XCJVcGRhdGUgRE5TIHNlcnZlclwiPlx1MkIwNlx1RkUwRjwvYnV0dG9uPmBcbiAgICAgICsgYDxidXR0b24gaWQ9XCIke3NhZmVJZH0tb3BlblwiPk9wZW48L2J1dHRvbj5gXG4gICAgICArIGA8YnV0dG9uIGlkPVwiJHtzYWZlSWR9LWxvZ3NcIiBjbGFzcz1cImxvZ3MtYnRuXCI+TG9nczwvYnV0dG9uPmBcbiAgICAgICsgYDxidXR0b24gaWQ9XCIke3NhZmVJZH0tc2V0dGluZ3NcIiBjbGFzcz1cInNldHRpbmdzLWJ0blwiPlx1MjY5OVx1RkUwRjwvYnV0dG9uPmBcbiAgICAgICsgYDwvZGl2PmA7XG4gICAgdG9wUm93Lmluc2VydEJlZm9yZShjYXJkLCBmaXJzdENoaWxkKTtcbiAgfSk7XG59XG53aW5kb3cucmVuZGVyRG5zQ2FyZHMgPSByZW5kZXJEbnNDYXJkcztcblxuLy8gPT09PT0gQ1NSRiBQUk9URUNUSU9OID09PT09XG5sZXQgY3NyZlRva2VuID0gbnVsbDtcblxuLyoqXG4gKiBHZXQgQ1NSRiB0b2tlbiBmcm9tIHNlcnZlciAoY2FjaGVkKVxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gQ1NSRiB0b2tlblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDU1JGVG9rZW4oKSB7XG4gIGlmIChjc3JmVG9rZW4pIHJldHVybiBjc3JmVG9rZW47XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3YxL2NzcmYtdG9rZW4nKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBDU1JGIHRva2VuJyk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgY3NyZlRva2VuID0gZGF0YS50b2tlbjtcbiAgICByZXR1cm4gY3NyZlRva2VuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVycm9ySGFuZGxlci5sb2dFcnJvcignW0NTUkZdIEdldCBUb2tlbicsIGVycm9yLCB7IGZ1bmN0aW9uOiAnZ2V0Q1NSRlRva2VuJyB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFNlY3VyZSBmZXRjaCB3cmFwcGVyIHRoYXQgYXV0b21hdGljYWxseSBhZGRzIENTUkYgdG9rZW4gdG8gc3RhdGUtY2hhbmdpbmcgcmVxdWVzdHMuXG4gKiBJZiB0aGUgc2VydmVyIHJldHVybnMgYSBDU1JGIGVycm9yICg0MDMgd2l0aCBEQy0xMDAvREMtMTAxKSwgYXV0b21hdGljYWxseVxuICogcmVmcmVzaGVzIHRoZSB0b2tlbiBhbmQgcmV0cmllcyBvbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFVSTCB0byBmZXRjaFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBGZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZXNwb25zZT59IEZldGNoIHJlc3BvbnNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlY3VyZUZldGNoKHVybCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG1ldGhvZCA9IChvcHRpb25zLm1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgbmVlZHNDc3JmID0gIVsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUyddLmluY2x1ZGVzKG1ldGhvZCk7XG5cbiAgaWYgKG5lZWRzQ3NyZikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldENTUkZUb2tlbigpO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgICdYLUNTUkYtVG9rZW4nOiB0b2tlblxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdbQ1NSRl0gQWRkIHRvIFJlcXVlc3QnLCBlcnJvciwgeyBmdW5jdGlvbjogJ3NlY3VyZUZldGNoJyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBEZWZhdWx0IDE1cyB0aW1lb3V0IGlmIG5vIHNpZ25hbCBwcm92aWRlZCAocHJldmVudHMgaGFuZ2luZyByZXF1ZXN0cylcbiAgaWYgKCFvcHRpb25zLnNpZ25hbCkge1xuICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgxNTAwMCkgfTtcbiAgfVxuXG4gIG9wdGlvbnMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbic7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBvcHRpb25zKTtcblxuICAvLyBBdXRvLXJldHJ5IG9uY2Ugb24gQ1NSRiBmYWlsdXJlICh0b2tlbiBtYXkgaGF2ZSBiZWVuIHJvdGF0ZWQgYnkgVE9UUCByZS1hdXRoKVxuICBpZiAobmVlZHNDc3JmICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgIGlmIChib2R5LmVycm9yICYmIChib2R5LmVycm9yLmluY2x1ZGVzKCdEQy0xMDAnKSB8fCBib2R5LmVycm9yLmluY2x1ZGVzKCdEQy0xMDEnKSkpIHtcbiAgICAgICAgY3NyZlRva2VuID0gbnVsbDsgLy8gQ2xlYXIgY2FjaGVkIHRva2VuXG4gICAgICAgIGNvbnN0IGZyZXNoVG9rZW4gPSBhd2FpdCBnZXRDU1JGVG9rZW4oKTtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0geyAuLi5vcHRpb25zLmhlYWRlcnMsICdYLUNTUkYtVG9rZW4nOiBmcmVzaFRva2VuIH07XG4gICAgICAgIC8vIE5ldyBzaWduYWwgZm9yIHJldHJ5IChvbGQgb25lIG1heSBoYXZlIGJlZW4gY29uc3VtZWQpXG4gICAgICAgIG9wdGlvbnMuc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgxNTAwMCk7XG4gICAgICAgIHJldHVybiBmZXRjaCh1cmwsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIC8vIElmIGNsb25lL2pzb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCByZXNwb25zZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gPT09PT0gQVBJIENBTEwgSEVMUEVSUyA9PT09PVxuXG4vKiogUE9TVCBKU09OIGFuZCByZXR1cm4gcGFyc2VkIHJlc3BvbnNlLiBUaHJvd3Mgb24gSFRUUCBvciBBUEkgZXJyb3IuICovXG5hc3luYyBmdW5jdGlvbiBwb3N0SlNPTih1cmwsIGRhdGEpIHtcbiAgY29uc3QgcmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKHVybCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcC5qc29uKCk7XG4gIGlmICghcmVzcC5vayB8fCByZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yIHx8IGBSZXF1ZXN0IGZhaWxlZCAoJHtyZXNwLnN0YXR1c30pYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIEdFVCBKU09OIGFuZCByZXR1cm4gcGFyc2VkIHJlc3BvbnNlLiBUaHJvd3Mgb24gSFRUUCBlcnJvciB3aXRoIHNlcnZlciBtZXNzYWdlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgY29uc3QgcmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKHVybCk7XG4gIGlmICghcmVzcC5vaykge1xuICAgIGxldCBtc2cgPSBgUmVxdWVzdCBmYWlsZWQgKCR7cmVzcC5zdGF0dXN9KWA7XG4gICAgdHJ5IHsgY29uc3QgYm9keSA9IGF3YWl0IHJlc3AuanNvbigpOyBtc2cgPSBib2R5LmVycm9yIHx8IG1zZzsgfSBjYXRjaCAoXykge31cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gcmVzcC5qc29uKCk7XG59XG5cbi8qKiBERUxFVEUgcmVxdWVzdC4gUmV0dXJucyBwYXJzZWQgSlNPTiByZXNwb25zZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFQSSh1cmwpIHtcbiAgY29uc3QgcmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKHVybCwgeyBtZXRob2Q6ICdERUxFVEUnIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwLmpzb24oKTtcbiAgaWYgKCFyZXNwLm9rIHx8IHJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IgfHwgYERlbGV0ZSBmYWlsZWQgKCR7cmVzcC5zdGF0dXN9KWApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUnVuIGFuIGFzeW5jIG9wZXJhdGlvbiB3aXRoIGJ1dHRvbiBsb2FkaW5nIHN0YXRlLlxuICogRGlzYWJsZXMgdGhlIGJ1dHRvbiwgc2hvd3MgbG9hZGluZyB0ZXh0LCByZXN0b3JlcyBvbiBjb21wbGV0ZS5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJ0biAtIEJ1dHRvbiBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbG9hZGluZ1RleHQgLSBUZXh0IHRvIHNob3cgd2hpbGUgbG9hZGluZyAoZS5nLiAnU2F2aW5nLi4uJylcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGFzeW5jRm4gLSBBc3luYyBmdW5jdGlvbiB0byBleGVjdXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnM6IHsgc3VjY2Vzc1RleHQsIHJlc2V0RGVsYXkgfVxuICovXG5hc3luYyBmdW5jdGlvbiB3aXRoQnV0dG9uKGJ0biwgbG9hZGluZ1RleHQsIGFzeW5jRm4sIG9wdHMgPSB7fSkge1xuICBjb25zdCBvcmlnaW5hbCA9IGJ0bi5pbm5lckhUTUw7XG4gIGNvbnN0IHsgc3VjY2Vzc1RleHQgPSAnXHUyNzA1JywgcmVzZXREZWxheSA9IERDLkRFTEFZUy5CVE5fUkVTRVQgfSA9IG9wdHM7XG4gIGJ0bi5kaXNhYmxlZCA9IHRydWU7XG4gIGJ0bi5pbm5lckhUTUwgPSBsb2FkaW5nVGV4dDtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhc3luY0ZuKCk7XG4gICAgYnRuLmlubmVySFRNTCA9IHN1Y2Nlc3NUZXh0O1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyBidG4uaW5uZXJIVE1MID0gb3JpZ2luYWw7IGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyB9LCByZXNldERlbGF5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgYnRuLmlubmVySFRNTCA9IG9yaWdpbmFsO1xuICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRocm93IGU7XG4gIH1cbn1cblxuLyoqIFNob3cvaGlkZSBhIG1vZGFsIGJ5IElEICovXG5mdW5jdGlvbiBvcGVuTW9kYWwoaWQpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpPy5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG59XG5mdW5jdGlvbiBjbG9zZU1vZGFsKGlkKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKT8uY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xufVxuXG4vKiogV2lyZSBiYWNrZHJvcC1jbGljayBjbG9zZSArIG9wdGlvbmFsIGNsb3NlIGJ1dHRvbnMgZm9yIGEgbW9kYWwgZWxlbWVudCAqL1xuZnVuY3Rpb24gd2lyZU1vZGFsKG1vZGFsLCAuLi5jbG9zZUJ0bnMpIHtcbiAgaWYgKCFtb2RhbCkgcmV0dXJuO1xuICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsgfSk7XG4gIC8vIFNraXAgYW55dGhpbmcgdGhhdCBpc24ndCBhIHJlYWwgbGlzdGVuZXIgdGFyZ2V0LiBXaXRob3V0IHRoaXMgZ3VhcmQsIGFcbiAgLy8gc2luZ2xlIHR5cG8gKGUuZy4gcGFzc2luZyBhIGZ1bmN0aW9uIG9yIG51bGwgaW5zdGVhZCBvZiBhIGJ1dHRvbiBlbGVtZW50KVxuICAvLyB0aHJvd3MgYW5kIGFib3J0cyB0aGUgcmVzdCBvZiB0aGUgY2FsbGluZyBtb2R1bGUncyBpbml0IFx1MjAxNCB3aGljaCBjYW4gdGFrZVxuICAvLyBkb3duIGxpY2Vuc2UuanMgKEZSRUUgVElFUiBiYWRnZSksIFRPVFAgd2lyaW5nLCBldGMuXG4gIGNsb3NlQnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgaWYgKGJ0biAmJiB0eXBlb2YgYnRuLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFRvYXN0LXN0eWxlIG5vdGlmaWNhdGlvbiAocmVwbGFjZXMgYWxsIGFsZXJ0KCkgdXNhZ2UpICovXG5mdW5jdGlvbiBzaG93Tm90aWZpY2F0aW9uKHRleHQsIHR5cGUgPSAnaW5mbycsIGR1cmF0aW9uID0gMzAwMCkge1xuICBjb25zdCBleGlzdGluZ05vdGlmID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRlcGxveS1ub3RpZmljYXRpb24nKTtcbiAgaWYgKGV4aXN0aW5nTm90aWYpIGV4aXN0aW5nTm90aWYucmVtb3ZlKCk7XG5cbiAgY29uc3QgY29sb3JzID0ge1xuICAgIGluZm86ICAgIHsgYmc6ICcjMjE5NkYzJywgICAgICAgZmc6ICcjZmZmJyB9LFxuICAgIHN1Y2Nlc3M6IHsgYmc6ICd2YXIoLS1vay1iZyknLCAgZmc6ICd2YXIoLS1vay1mZyknIH0sXG4gICAgZXJyb3I6ICAgeyBiZzogJyNmNDQzMzYnLCAgICAgICBmZzogJyNmZmYnIH0sXG4gICAgd2FybmluZzogeyBiZzogJyNmZjk4MDAnLCAgICAgICBmZzogJyNmZmYnIH1cbiAgfTtcblxuICBjb25zdCBjID0gY29sb3JzW3R5cGVdIHx8IGNvbG9ycy5pbmZvO1xuICBjb25zdCBtc2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbXNnLmNsYXNzTmFtZSA9ICdkZXBsb3ktbm90aWZpY2F0aW9uJztcbiAgbXNnLnRleHRDb250ZW50ID0gdGV4dDtcbiAgbXNnLnN0eWxlLmNzc1RleHQgPSBgXG4gICAgcG9zaXRpb246IGZpeGVkOyB0b3A6IDIwcHg7IHJpZ2h0OiAyMHB4O1xuICAgIGJhY2tncm91bmQ6ICR7Yy5iZ307IGNvbG9yOiAke2MuZmd9O1xuICAgIHBhZGRpbmc6IDE2cHggMjRweDsgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLDAsMCwuMyk7XG4gICAgei1pbmRleDogMTAwMDA7IGFuaW1hdGlvbjogc2xpZGVJbiAwLjNzIGVhc2Utb3V0O1xuICAgIG1heC13aWR0aDogNDAwcHg7IHdoaXRlLXNwYWNlOiBwcmUtbGluZTsgZm9udC1zaXplOiAxNHB4O1xuICBgO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1zZyk7XG4gIGlmIChkdXJhdGlvbiA+IDApIHNldFRpbWVvdXQoKCkgPT4gbXNnLnJlbW92ZSgpLCBkdXJhdGlvbik7XG59XG5cbi8qKiBSZWxhdGl2ZSB0aW1lIGRpc3BsYXkgKGUuZy4gXCI1bSBhZ29cIiwgXCIyaCBhZ29cIikgKi9cbmZ1bmN0aW9uIHRpbWVBZ28odHMpIHtcbiAgY29uc3QgZGlmZiA9IERhdGUubm93KCkgLSBuZXcgRGF0ZSh0cykuZ2V0VGltZSgpO1xuICBpZiAoZGlmZiA8IDYwMDAwKSByZXR1cm4gJ2p1c3Qgbm93JztcbiAgaWYgKGRpZmYgPCAzNjAwMDAwKSByZXR1cm4gTWF0aC5mbG9vcihkaWZmIC8gNjAwMDApICsgJ20gYWdvJztcbiAgaWYgKGRpZmYgPCA4NjQwMDAwMCkgcmV0dXJuIE1hdGguZmxvb3IoZGlmZiAvIDM2MDAwMDApICsgJ2ggYWdvJztcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZiAvIDg2NDAwMDAwKSArICdkIGFnbyc7XG59XG5cbi8vID09PT09IFNBRkUgU1RPUkFHRSBXUkFQUEVSUyA9PT09PVxuLy8gUHJldmVudHMgY3Jhc2hlcyBpbiBTYWZhcmkgcHJpdmF0ZSBicm93c2luZywgcXVvdGEgZXhjZWVkZWQsIG9yIHJlc3RyaWN0ZWQgZW52aXJvbm1lbnRzXG5mdW5jdGlvbiBzYWZlR2V0KGtleSwgZmFsbGJhY2sgPSBudWxsKSB7XG4gIHRyeSB7IGNvbnN0IHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOyByZXR1cm4gdiAhPT0gbnVsbCA/IHYgOiBmYWxsYmFjazsgfSBjYXRjaCAoXykgeyByZXR1cm4gZmFsbGJhY2s7IH1cbn1cbmZ1bmN0aW9uIHNhZmVTZXQoa2V5LCB2YWx1ZSkge1xuICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTsgfSBjYXRjaCAoXykgeyAvKiBxdW90YSBleGNlZWRlZCBvciBwcml2YXRlIG1vZGUgKi8gfVxufVxuZnVuY3Rpb24gc2FmZVJlbW92ZShrZXkpIHtcbiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTsgfSBjYXRjaCAoXykge31cbn1cbmZ1bmN0aW9uIHNhZmVTZXNzaW9uR2V0KGtleSwgZmFsbGJhY2sgPSBudWxsKSB7XG4gIHRyeSB7IGNvbnN0IHYgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7IHJldHVybiB2ICE9PSBudWxsID8gdiA6IGZhbGxiYWNrOyB9IGNhdGNoIChfKSB7IHJldHVybiBmYWxsYmFjazsgfVxufVxuZnVuY3Rpb24gc2FmZVNlc3Npb25TZXQoa2V5LCB2YWx1ZSkge1xuICB0cnkgeyBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpOyB9IGNhdGNoIChfKSB7fVxufVxuLyoqIFBhcnNlIEpTT04gZnJvbSBsb2NhbFN0b3JhZ2Ugd2l0aCBmYWxsYmFjayBcdTIwMTQgYXZvaWRzIHRyeS9jYXRjaCBhdCBldmVyeSBjYWxsIHNpdGUgKi9cbmZ1bmN0aW9uIHNhZmVHZXRKU09OKGtleSwgZmFsbGJhY2sgPSBudWxsKSB7XG4gIHRyeSB7IGNvbnN0IHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOyByZXR1cm4gdiA/IEpTT04ucGFyc2UodikgOiBmYWxsYmFjazsgfSBjYXRjaCAoXykgeyByZXR1cm4gZmFsbGJhY2s7IH1cbn1cblxuLyoqIEVzY2FwZSBIVE1MIGVudGl0aWVzIGZvciBzYWZlIGlubmVySFRNTCBpbnNlcnRpb24gKGhhbmRsZXMgYm90aCBjb250ZW50IGFuZCBhdHRyaWJ1dGVzKSAqL1xuZnVuY3Rpb24gZXNjYXBlSHRtbCh0ZXh0KSB7XG4gIHJldHVybiBTdHJpbmcodGV4dCA/PyAnJykucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpO1xufVxuXG4vKiogSW5qZWN0IG1vZGFsIEhUTUwgaW50byBET00gKGlkZW1wb3RlbnQgXHUyMDE0IHNraXBzIGlmIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMpICovXG5mdW5jdGlvbiBpbmplY3RNb2RhbChpZCwgaHRtbCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKSByZXR1cm47XG4gIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBodG1sKTtcbn1cblxuLy8gPT09PT0gRVZFTlQgQlVTID09PT09XG4vLyBMaWdodHdlaWdodCBwdWIvc3ViIGZvciBjcm9zcy1tb2R1bGUgY29tbXVuaWNhdGlvbiB3aXRob3V0IHdpbmRvdyBnbG9iYWxzLlxuLy8gVXNhZ2U6IERDX0JVUy5vbignc2VydmljZXM6bG9hZGVkJywgaGFuZGxlcik7IERDX0JVUy5lbWl0KCdzZXJ2aWNlczpsb2FkZWQnLCBkYXRhKTtcbmNvbnN0IERDX0JVUyA9IHtcbiAgX2hhbmRsZXJzOiB7fSxcbiAgb24oZXZlbnQsIGZuKSB7ICh0aGlzLl9oYW5kbGVyc1tldmVudF0gfHw9IFtdKS5wdXNoKGZuKTsgfSxcbiAgb2ZmKGV2ZW50LCBmbikgeyB0aGlzLl9oYW5kbGVyc1tldmVudF0gPSB0aGlzLl9oYW5kbGVyc1tldmVudF0/LmZpbHRlcihoID0+IGggIT09IGZuKTsgfSxcbiAgZW1pdChldmVudCwgZGF0YSkgeyB0aGlzLl9oYW5kbGVyc1tldmVudF0/LmZvckVhY2goZm4gPT4gZm4oZGF0YSkpOyB9XG59O1xuXG4vLyA9PT09PSBDRU5UUkFMSVpFRCBBUFAgU1RBVEUgPT09PT1cbi8vIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBzZXJ2aWNlcyBhcnJheS4gTW9kdWxlcyBzaG91bGQgdXNlIEFwcFN0YXRlXG4vLyBpbnN0ZWFkIG9mIG11dGF0aW5nIHdpbmRvdy5BUFBTIGRpcmVjdGx5LiBFbWl0cyAnYXBwczpjaGFuZ2VkJyBvbiB1cGRhdGVzLlxuY29uc3QgQXBwU3RhdGUgPSB7XG4gIF9hcHBzOiBbXSxcbiAgZ2V0QXBwcygpIHsgcmV0dXJuIHRoaXMuX2FwcHM7IH0sXG4gIHNldEFwcHMoYXBwcykgeyB0aGlzLl9hcHBzID0gYXBwczsgd2luZG93LkFQUFMgPSBhcHBzOyBEQ19CVVMuZW1pdCgnYXBwczpjaGFuZ2VkJywgYXBwcyk7IH0sXG4gIGZpbmRBcHAoaWQpIHsgcmV0dXJuIHRoaXMuX2FwcHMuZmluZChhID0+IGEuaWQgPT09IGlkKTsgfSxcbiAgYWRkQXBwKGFwcCkgeyB0aGlzLl9hcHBzLnB1c2goYXBwKTsgd2luZG93LkFQUFMgPSB0aGlzLl9hcHBzOyBEQ19CVVMuZW1pdCgnYXBwczpjaGFuZ2VkJywgdGhpcy5fYXBwcyk7IH0sXG4gIHJlbW92ZUFwcChpZCkge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuX2FwcHMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICAgIGlmIChpZHggPiAtMSkgeyB0aGlzLl9hcHBzLnNwbGljZShpZHgsIDEpOyB3aW5kb3cuQVBQUyA9IHRoaXMuX2FwcHM7IERDX0JVUy5lbWl0KCdhcHBzOmNoYW5nZWQnLCB0aGlzLl9hcHBzKTsgfVxuICAgIHJldHVybiBpZHggPiAtMTtcbiAgfSxcbiAgdXBkYXRlQXBwKGlkLCBjaGFuZ2VzKSB7XG4gICAgY29uc3QgYXBwID0gdGhpcy5fYXBwcy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICAgIGlmIChhcHApIHtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpKSB7XG4gICAgICAgIGlmIChrICE9PSAnX19wcm90b19fJyAmJiBrICE9PSAnY29uc3RydWN0b3InICYmIGsgIT09ICdwcm90b3R5cGUnKSBhcHBba10gPSB2O1xuICAgICAgfVxuICAgICAgRENfQlVTLmVtaXQoJ2FwcHM6Y2hhbmdlZCcsIHRoaXMuX2FwcHMpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwO1xuICB9XG59O1xuO1xuLy8gPT09PT09PT09PSBTS0VMRVRPTiBMT0FESU5HIFBMQUNFSE9MREVSUyA9PT09PT09PT09XG4oZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNrZWxldG9uQ2FyZCgpIHtcbiAgICBjb25zdCBjYXJkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY2FyZC5jbGFzc05hbWUgPSAnc2tlbGV0b24tY2FyZCc7XG4gICAgY2FyZC5pbm5lckhUTUwgPVxuICAgICAgJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTJweFwiPicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNrZWxldG9uLWJhclwiIHN0eWxlPVwid2lkdGg6NDhweDtoZWlnaHQ6NDhweDtib3JkZXItcmFkaXVzOjhweDtmbGV4LXNocmluazowXCI+PC9kaXY+JyArXG4gICAgICAgICc8ZGl2IHN0eWxlPVwiZmxleDoxXCI+JyArXG4gICAgICAgICAgJzxkaXYgY2xhc3M9XCJza2VsZXRvbi1iYXJcIiBzdHlsZT1cIndpZHRoOjYwJTtoZWlnaHQ6MTRweDttYXJnaW4tYm90dG9tOjZweFwiPjwvZGl2PicgK1xuICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2tlbGV0b24tYmFyXCIgc3R5bGU9XCJ3aWR0aDozNSU7aGVpZ2h0OjEwcHhcIj48L2Rpdj4nICtcbiAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNrZWxldG9uLWJhclwiIHN0eWxlPVwid2lkdGg6NDJweDtoZWlnaHQ6MjJweDtib3JkZXItcmFkaXVzOjExcHhcIj48L2Rpdj4nICtcbiAgICAgICc8L2Rpdj4nICtcbiAgICAgICc8ZGl2IGNsYXNzPVwic2tlbGV0b24tYmFyXCIgc3R5bGU9XCJ3aWR0aDo0NSU7aGVpZ2h0OjEycHg7bWFyZ2luLWJvdHRvbToxMHB4XCI+PC9kaXY+JyArXG4gICAgICAnPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6YXV0b1wiPicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNrZWxldG9uLWJhclwiIHN0eWxlPVwid2lkdGg6NjRweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjhweFwiPjwvZGl2PicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNrZWxldG9uLWJhclwiIHN0eWxlPVwid2lkdGg6NjRweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjhweFwiPjwvZGl2PicgK1xuICAgICAgJzwvZGl2Pic7XG4gICAgcmV0dXJuIGNhcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBzaG93U2tlbGV0b25zKGNvdW50KSB7XG4gICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXJkcycpO1xuICAgIGlmICghZ3JpZCB8fCBncmlkLnF1ZXJ5U2VsZWN0b3IoJy5jYXJkJykpIHJldHVybjsgLy8gRG9uJ3Qgc2hvdyBpZiByZWFsIGNhcmRzIGV4aXN0XG4gICAgY291bnQgPSBjb3VudCB8fCA2O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBzayA9IGNyZWF0ZVNrZWxldG9uQ2FyZCgpO1xuICAgICAgZ3JpZC5hcHBlbmRDaGlsZChzayk7XG4gICAgICAvLyBTdGFnZ2VyIGZhZGUtaW5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzay5jbGFzc0xpc3QuYWRkKCdsb2FkZWQnKTsgfSwgaSAqIDYwKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoaWRlU2tlbGV0b25zKCkge1xuICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FyZHMnKTtcbiAgICBpZiAoIWdyaWQpIHJldHVybjtcbiAgICB2YXIgc2tlbGV0b25zID0gZ3JpZC5xdWVyeVNlbGVjdG9yQWxsKCcuc2tlbGV0b24tY2FyZCcpO1xuICAgIGlmICghc2tlbGV0b25zLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgc2tlbGV0b25zLmZvckVhY2goZnVuY3Rpb24gKHNrLCBpKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2suc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgICAgc2suc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVkoLTEwcHgpJztcbiAgICAgIH0sIGkgKiAyNSk7XG4gICAgfSk7XG4gICAgLy8gUmVtb3ZlIGFmdGVyIGFuaW1hdGlvblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2tlbGV0b25zLmZvckVhY2goZnVuY3Rpb24gKHNrKSB7IGlmIChzay5wYXJlbnROb2RlKSBzay5yZW1vdmUoKTsgfSk7XG4gICAgfSwgc2tlbGV0b25zLmxlbmd0aCAqIDI1ICsgMzAwKTtcbiAgfVxuXG4gIHdpbmRvdy5Ta2VsZXRvbkxvYWRlciA9IHsgc2hvdzogc2hvd1NrZWxldG9ucywgaGlkZTogaGlkZVNrZWxldG9ucyB9O1xufSkoKTtcbjtcbi8vID09PT09PT09PT0gVEhFTUUgQ09OVFJPTExFUiA9PT09PT09PT09XG4vLyBVc2VyLWNyZWF0ZWQgdGhlbWVzIGFyZSBzdG9yZWQgc2VydmVyLXNpZGUgYXMgaW5kaXZpZHVhbCBKU09OIGZpbGVzLlxuLy8gbG9jYWxTdG9yYWdlIGNhY2hlcyB0aGVtIGZvciBpbnN0YW50IGxvYWQ7IHNlcnZlciBpcyBzb3VyY2Ugb2YgdHJ1dGguXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgVEhFTUVfS0VZID0gJ3RoZW1lJztcbiAgdmFyIFVTRVJfVEhFTUVTX0tFWSA9ICd1c2VyLXRoZW1lcyc7XG4gIHZhciBMRUdBQ1lfQ1VTVE9NX0tFWSA9ICdjdXN0b20tdGhlbWUnO1xuXG4gIHZhciBCVUlMVElOX1RIRU1FUyA9IFsnZGFyaycsICdsaWdodCcsICdibHVlJywgJ2JsYWNrJywgJ25vcmQnLCAnZHJhY3VsYScsICdzb2xhcml6ZWQtZGFyaycsICdzb2xhcml6ZWQtbGlnaHQnLCAndGF4aScsICdvY2VhbiddO1xuICB2YXIgVEhFTUVTID0gQlVJTFRJTl9USEVNRVMuc2xpY2UoKTtcblxuICB2YXIgVEhFTUVfUFJPUFMgPSBbXG4gICAgJ2JnJywgJ2ZnJywgJ211dGVkJywgJ2ZnLW11dGVkJywgJ2NhcmQtYmFzZScsICdjYXJkLWJnJywgJ2JvcmRlcicsXG4gICAgJ2hvdmVyJywgJ2NhcmQtaG92ZXInLCAnYmFzZScsXG4gICAgJ29rLWJnJywgJ29rLWZnJywgJ2JhZC1iZycsICdiYWQtZmcnLCAnZG90LW9rJywgJ2RvdC1iYWQnLCAndXB0aW1lJyxcbiAgICAnc3VjY2VzcycsICdlcnJvcicsICd3YXJuaW5nJyxcbiAgICAnYWNjZW50JywgJ2FjY2VudC1zdHJvbmcnXG4gIF07XG5cbiAgLy8gQmFzZSBwcm9wcyB0aGUgdXNlciBwaWNrcyBpbiB0aGUgYnVpbGRlciAoc3Vic2V0IG9mIFRIRU1FX1BST1BTKVxuICB2YXIgQkFTRV9QUk9QUyA9IFtcbiAgICAnYmcnLCAnZmcnLCAnbXV0ZWQnLCAnY2FyZC1iYXNlJywgJ2NhcmQtYmcnLCAnYm9yZGVyJyxcbiAgICAnb2stYmcnLCAnb2stZmcnLCAnYmFkLWJnJywgJ2JhZC1mZycsICdkb3Qtb2snLCAnZG90LWJhZCcsICd1cHRpbWUnLFxuICAgICdhY2NlbnQnLCAnYWNjZW50LXN0cm9uZydcbiAgXTtcblxuICAvLyBQcm9wcyB0aGF0IGFyZSBhdXRvLWRlcml2ZWQgaWYgbm90IGV4cGxpY2l0bHkgc2V0XG4gIHZhciBERVJJVkVEX1BST1BTID0gWydmZy1tdXRlZCcsICdob3ZlcicsICdjYXJkLWhvdmVyJywgJ2Jhc2UnLCAnc3VjY2VzcycsICdlcnJvcicsICd3YXJuaW5nJ107XG5cbiAgdmFyIFRIRU1FX0NPTE9SUyA9IHtcbiAgICBkYXJrOiAgICAgICAgICAgICB7IGJnOiAnIzBiMGYxYScsIGZnOiAnI2U4ZWNmNScsIG11dGVkOiAnIzlhYTZiZicsICdmZy1tdXRlZCc6ICcjNmI3YTk0JywgJ2NhcmQtYmFzZSc6ICcjMTIxODI2JywgJ2NhcmQtYmcnOiAnIzEyMTgyNicsIGJvcmRlcjogJyMyNjM1NTInLCBob3ZlcjogJyMxYTIyMzUnLCAnY2FyZC1ob3Zlcic6ICcjMTYxZTJlJywgYmFzZTogJyMxNTFjMmInLCAnb2stYmcnOiAnIzBjMjQzMCcsICdvay1mZyc6ICcjN2VmMmZmJywgJ2JhZC1iZyc6ICcjMmExMjFhJywgJ2JhZC1mZyc6ICcjZmY5YWEzJywgJ2RvdC1vayc6ICcjMzVkMWZmJywgJ2RvdC1iYWQnOiAnI2ZmNWY3YScsIHVwdGltZTogJyMzNWQxZmYnLCBzdWNjZXNzOiAnIzRjYWY1MCcsIGVycm9yOiAnI2U3NGMzYycsIHdhcm5pbmc6ICcjZjM5YzEyJywgYWNjZW50OiAnIzhGRDZGRicsICdhY2NlbnQtc3Ryb25nJzogJyMxRjdCRkYnIH0sXG4gICAgbGlnaHQ6ICAgICAgICAgICAgeyBiZzogJyNmNmY3ZmInLCBmZzogJyMwZjExMTUnLCBtdXRlZDogJyM1ZjZiN2EnLCAnZmctbXV0ZWQnOiAnIzg5OTNhNCcsICdjYXJkLWJhc2UnOiAnI2ZmZmZmZicsICdjYXJkLWJnJzogJyNmZmZmZmYnLCBib3JkZXI6ICcjZTJlN2VmJywgaG92ZXI6ICcjZWVmMWY2JywgJ2NhcmQtaG92ZXInOiAnI2Y1ZjZmYScsIGJhc2U6ICcjZWJlZWYzJywgJ29rLWJnJzogJyNlYWZmZjEnLCAnb2stZmcnOiAnIzBhN2MzYScsICdiYWQtYmcnOiAnI2ZmZWZlZicsICdiYWQtZmcnOiAnI2IwMDAyMCcsICdkb3Qtb2snOiAnIzBmYjE1YScsICdkb3QtYmFkJzogJyNkOTNiM2InLCB1cHRpbWU6ICcjMGZiMTVhJywgc3VjY2VzczogJyMwYTdjM2EnLCBlcnJvcjogJyNiMDAwMjAnLCB3YXJuaW5nOiAnI2Q2OGEwMCcsIGFjY2VudDogJyM0YTkwZDknLCAnYWNjZW50LXN0cm9uZyc6ICcjMjU2M2ViJywgbGlnaHRCZzogdHJ1ZSB9LFxuICAgIGJsdWU6ICAgICAgICAgICAgIHsgYmc6ICcjMTkwOEFDJywgZmc6ICcjZThmMWZmJywgbXV0ZWQ6ICcjZDZlMmZmJywgJ2ZnLW11dGVkJzogJyM5ZWFmZGInLCAnY2FyZC1iYXNlJzogJyMwZDE1MzMnLCAnY2FyZC1iZyc6ICcjMGQxNTMzJywgYm9yZGVyOiAnIzFjMmQ2YScsIGhvdmVyOiAnIzE0MWY0YScsICdjYXJkLWhvdmVyJzogJyMxMTFhM2UnLCBiYXNlOiAnIzBmMTg0MCcsICdvay1iZyc6ICcjMTYyMDQwJywgJ29rLWZnJzogJyNlZGZmZmYnLCAnYmFkLWJnJzogJyMwYTBlMjQnLCAnYmFkLWZnJzogJyNmZmIzYzAnLCAnZG90LW9rJzogJyNjN2U1ZmYnLCAnZG90LWJhZCc6ICcjZmZkNmRjJywgdXB0aW1lOiAnIzdlYzhmZicsIHN1Y2Nlc3M6ICcjN2VjOGZmJywgZXJyb3I6ICcjZmZiM2MwJywgd2FybmluZzogJyNmZmQwODAnLCBhY2NlbnQ6ICcjOWNkNGZmJywgJ2FjY2VudC1zdHJvbmcnOiAnIzZmYjJmZicgfSxcbiAgICBibGFjazogICAgICAgICAgICB7IGJnOiAnIzBlMGUwZScsIGZnOiAnI2Y1ZjVmNScsIG11dGVkOiAnIzk5OTk5OScsICdmZy1tdXRlZCc6ICcjNjY2NjY2JywgJ2NhcmQtYmFzZSc6ICcjMWExYTFhJywgJ2NhcmQtYmcnOiAnIzFhMWExYScsIGJvcmRlcjogJyMyZTJlMmUnLCBob3ZlcjogJyMyNDI0MjQnLCAnY2FyZC1ob3Zlcic6ICcjMjAyMDIwJywgYmFzZTogJyMxNjE2MTYnLCAnb2stYmcnOiAnIzBmMmExMicsICdvay1mZyc6ICcjNjZmZjdhJywgJ2JhZC1iZyc6ICcjMmEwZjBmJywgJ2JhZC1mZyc6ICcjZmY2YjZiJywgJ2RvdC1vayc6ICcjNGNhZjUwJywgJ2RvdC1iYWQnOiAnI2ZmNDQ0NCcsIHVwdGltZTogJyNlMGUwZTAnLCBzdWNjZXNzOiAnIzRjYWY1MCcsIGVycm9yOiAnI2ZmNDQ0NCcsIHdhcm5pbmc6ICcjZmY5ODAwJywgYWNjZW50OiAnI0U2Mzk0NicsICdhY2NlbnQtc3Ryb25nJzogJyNDNjI4MjgnIH0sXG4gICAgbm9yZDogICAgICAgICAgICAgeyBiZzogJyMyZTM0NDAnLCBmZzogJyNlY2VmZjQnLCBtdXRlZDogJyM4MWExYzEnLCAnZmctbXV0ZWQnOiAnIzY4ODJhMCcsICdjYXJkLWJhc2UnOiAnIzNiNDI1MicsICdjYXJkLWJnJzogJyMzYjQyNTInLCBib3JkZXI6ICcjNGM1NjZhJywgaG92ZXI6ICcjNDM0YzVlJywgJ2NhcmQtaG92ZXInOiAnIzNmNDg1OCcsIGJhc2U6ICcjMzUzYzRhJywgJ29rLWJnJzogJyMyZDRmM2UnLCAnb2stZmcnOiAnI2EzYmU4YycsICdiYWQtYmcnOiAnIzRhMmMyYScsICdiYWQtZmcnOiAnI2JmNjE2YScsICdkb3Qtb2snOiAnI2EzYmU4YycsICdkb3QtYmFkJzogJyNiZjYxNmEnLCB1cHRpbWU6ICcjYTNiZThjJywgc3VjY2VzczogJyNhM2JlOGMnLCBlcnJvcjogJyNiZjYxNmEnLCB3YXJuaW5nOiAnI2ViY2I4YicsIGFjY2VudDogJyM4OGMwZDAnLCAnYWNjZW50LXN0cm9uZyc6ICcjNWU4MWFjJyB9LFxuICAgIGRyYWN1bGE6ICAgICAgICAgIHsgYmc6ICcjMjgyYTM2JywgZmc6ICcjZjhmOGYyJywgbXV0ZWQ6ICcjNjI3MmE0JywgJ2ZnLW11dGVkJzogJyM1MTVkODUnLCAnY2FyZC1iYXNlJzogJyM0NDQ3NWEnLCAnY2FyZC1iZyc6ICcjNDQ0NzVhJywgYm9yZGVyOiAnIzYyNzJhNCcsIGhvdmVyOiAnIzRlNTE3MCcsICdjYXJkLWhvdmVyJzogJyM0OTRjNjMnLCBiYXNlOiAnIzM2Mzg0OCcsICdvay1iZyc6ICcjMWUzYTJlJywgJ29rLWZnJzogJyM1MGZhN2InLCAnYmFkLWJnJzogJyMzZDFhMWEnLCAnYmFkLWZnJzogJyNmZjU1NTUnLCAnZG90LW9rJzogJyM1MGZhN2InLCAnZG90LWJhZCc6ICcjZmY1NTU1JywgdXB0aW1lOiAnIzUwZmE3YicsIHN1Y2Nlc3M6ICcjNTBmYTdiJywgZXJyb3I6ICcjZmY1NTU1Jywgd2FybmluZzogJyNmMWZhOGMnLCBhY2NlbnQ6ICcjYmQ5M2Y5JywgJ2FjY2VudC1zdHJvbmcnOiAnIzhiZTlmZCcgfSxcbiAgICAnc29sYXJpemVkLWRhcmsnOiB7IGJnOiAnIzAwMmIzNicsIGZnOiAnIzgzOTQ5NicsIG11dGVkOiAnIzU4NmU3NScsICdmZy1tdXRlZCc6ICcjNGE1ZjY1JywgJ2NhcmQtYmFzZSc6ICcjMDczNjQyJywgJ2NhcmQtYmcnOiAnIzA3MzY0MicsIGJvcmRlcjogJyM1ODZlNzUnLCBob3ZlcjogJyMwZDQwNTAnLCAnY2FyZC1ob3Zlcic6ICcjMGEzYTQ4JywgYmFzZTogJyMwNTMzNDAnLCAnb2stYmcnOiAnIzBkM2QyYycsICdvay1mZyc6ICcjODU5OTAwJywgJ2JhZC1iZyc6ICcjM2QxYTFhJywgJ2JhZC1mZyc6ICcjZGMzMjJmJywgJ2RvdC1vayc6ICcjODU5OTAwJywgJ2RvdC1iYWQnOiAnI2RjMzIyZicsIHVwdGltZTogJyNiNWJkNjgnLCBzdWNjZXNzOiAnIzg1OTkwMCcsIGVycm9yOiAnI2RjMzIyZicsIHdhcm5pbmc6ICcjYjU4OTAwJywgYWNjZW50OiAnIzI2OGJkMicsICdhY2NlbnQtc3Ryb25nJzogJyMyYWExOTgnIH0sXG4gICAgJ3NvbGFyaXplZC1saWdodCc6eyBiZzogJyNmZGY2ZTMnLCBmZzogJyM2NTdiODMnLCBtdXRlZDogJyM5M2ExYTEnLCAnZmctbXV0ZWQnOiAnI2FkYjhiOCcsICdjYXJkLWJhc2UnOiAnI2VlZThkNScsICdjYXJkLWJnJzogJyNlZWU4ZDUnLCBib3JkZXI6ICcjOTNhMWExJywgaG92ZXI6ICcjZTZkZmNiJywgJ2NhcmQtaG92ZXInOiAnI2VhZTNjZicsIGJhc2U6ICcjZThlMWNkJywgJ29rLWJnJzogJyNlOGY1ZTgnLCAnb2stZmcnOiAnIzg1OTkwMCcsICdiYWQtYmcnOiAnI2ZkZjJmMicsICdiYWQtZmcnOiAnI2RjMzIyZicsICdkb3Qtb2snOiAnIzg1OTkwMCcsICdkb3QtYmFkJzogJyNkYzMyMmYnLCB1cHRpbWU6ICcjODU5OTAwJywgc3VjY2VzczogJyM4NTk5MDAnLCBlcnJvcjogJyNkYzMyMmYnLCB3YXJuaW5nOiAnI2I1ODkwMCcsIGFjY2VudDogJyMyNjhiZDInLCAnYWNjZW50LXN0cm9uZyc6ICcjMmFhMTk4JywgbGlnaHRCZzogdHJ1ZSB9LFxuICAgIHRheGk6ICAgICAgICAgICAgIHsgYmc6ICcjZjNkMzIxJywgZmc6ICcjMGUwZTAwJywgbXV0ZWQ6ICcjNGE0YTEwJywgJ2ZnLW11dGVkJzogJyM2YjZiMzAnLCAnY2FyZC1iYXNlJzogJyNmZmQ3MDAnLCAnY2FyZC1iZyc6ICcjZmZkNzAwJywgYm9yZGVyOiAnI2I4YTg0MCcsIGhvdmVyOiAnI2ZmZTg0ZCcsICdjYXJkLWhvdmVyJzogJyNmZmUwMzMnLCBiYXNlOiAnI2YwZDAwMCcsICdvay1iZyc6ICcjZDRmZmQ5JywgJ29rLWZnJzogJyMwZjJhMGYnLCAnYmFkLWJnJzogJyNmZmQ0ZDQnLCAnYmFkLWZnJzogJyMyYTBmMGYnLCAnZG90LW9rJzogJyM0Y2FmNTAnLCAnZG90LWJhZCc6ICcjZmY0NDQ0JywgdXB0aW1lOiAnIzBlMGUwMCcsIHN1Y2Nlc3M6ICcjMmU3ZDMyJywgZXJyb3I6ICcjYzYyODI4Jywgd2FybmluZzogJyNlNjUxMDAnLCBhY2NlbnQ6ICcjN2E0YTAwJywgJ2FjY2VudC1zdHJvbmcnOiAnIzVjMzgwMCcsIGxpZ2h0Qmc6IHRydWUgfSxcbiAgICBvY2VhbjogICAgICAgICAgICB7IGJnOiAnIzIwNjBiMCcsIGZnOiAnI2ZhZjVlYicsIG11dGVkOiAnI2RjZDJjMCcsICdmZy1tdXRlZCc6ICcjYjBhODkwJywgJ2NhcmQtYmFzZSc6ICcjN2E5NGVkJywgJ2NhcmQtYmcnOiAnIzdhOTRlZCcsIGJvcmRlcjogJyNkZWI2N2EnLCBob3ZlcjogJyM4YWEwZjAnLCAnY2FyZC1ob3Zlcic6ICcjODI5OGU4JywgYmFzZTogJyM2ODg4ZTAnLCAnb2stYmcnOiAnIzRmNWJiMCcsICdvay1mZyc6ICcjYzdkN2ViJywgJ2JhZC1iZyc6ICcjZjQxYTNhJywgJ2JhZC1mZyc6ICcjNmExODE4JywgJ2RvdC1vayc6ICcjMzBhMDUwJywgJ2RvdC1iYWQnOiAnI2QwNDA0MCcsIHVwdGltZTogJyMyZDMyZjInLCBzdWNjZXNzOiAnIzMwYTA1MCcsIGVycm9yOiAnI2QwNDA0MCcsIHdhcm5pbmc6ICcjZTZhMDMwJywgYWNjZW50OiAnIzE4NjBhMCcsICdhY2NlbnQtc3Ryb25nJzogJyMxMDQwODAnIH0sXG4gIH07XG5cbiAgLy8gXHUyNTAwXHUyNTAwXHUyNTAwIENvbG9yIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbiAgZnVuY3Rpb24gaGV4VG9SZ2IoaGV4KSB7XG4gICAgaWYgKCFoZXggfHwgdHlwZW9mIGhleCAhPT0gJ3N0cmluZycpIHJldHVybiB7IHI6IDAsIGc6IDAsIGI6IDAgfTtcbiAgICBoZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50KGhleC5zdWJzdHIoMCwgMiksIDE2KSB8fCAwLFxuICAgICAgZzogcGFyc2VJbnQoaGV4LnN1YnN0cigyLCAyKSwgMTYpIHx8IDAsXG4gICAgICBiOiBwYXJzZUludChoZXguc3Vic3RyKDQsIDIpLCAxNikgfHwgMFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiByZ2JUb0hleChyLCBnLCBiKSB7XG4gICAgcmV0dXJuICcjJyArIFtyLCBnLCBiXS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHZhciBoID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHgpKSkudG9TdHJpbmcoMTYpO1xuICAgICAgcmV0dXJuIGgubGVuZ3RoID09PSAxID8gJzAnICsgaCA6IGg7XG4gICAgfSkuam9pbignJyk7XG4gIH1cblxuICBmdW5jdGlvbiBibGVuZENvbG9ycyhoZXgxLCBoZXgyLCByYXRpbykge1xuICAgIHZhciBjMSA9IGhleFRvUmdiKGhleDEpO1xuICAgIHZhciBjMiA9IGhleFRvUmdiKGhleDIpO1xuICAgIHJldHVybiByZ2JUb0hleChcbiAgICAgIGMxLnIgKyAoYzIuciAtIGMxLnIpICogcmF0aW8sXG4gICAgICBjMS5nICsgKGMyLmcgLSBjMS5nKSAqIHJhdGlvLFxuICAgICAgYzEuYiArIChjMi5iIC0gYzEuYikgKiByYXRpb1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBoZXhMdW1pbmFuY2UoaGV4KSB7XG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgaWYgKGhleC5sZW5ndGggPT09IDMpIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xuICAgIHZhciByID0gcGFyc2VJbnQoaGV4LnN1YnN0cigwLCAyKSwgMTYpIC8gMjU1O1xuICAgIHZhciBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cigyLCAyKSwgMTYpIC8gMjU1O1xuICAgIHZhciBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cig0LCAyKSwgMTYpIC8gMjU1O1xuICAgIHIgPSByIDw9IDAuMDM5MjggPyByIC8gMTIuOTIgOiBNYXRoLnBvdygociArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGcgPSBnIDw9IDAuMDM5MjggPyBnIC8gMTIuOTIgOiBNYXRoLnBvdygoZyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGIgPSBiIDw9IDAuMDM5MjggPyBiIC8gMTIuOTIgOiBNYXRoLnBvdygoYiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIHJldHVybiAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDBcdTI1MDAgQXV0by1kZXJpdmUgZXh0ZW5kZWQgY29sb3JzIGZyb20gYmFzZSBwYWxldHRlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4gIGZ1bmN0aW9uIGRlcml2ZUV4dGVuZGVkQ29sb3JzKGNvbG9ycykge1xuICAgIHZhciBiZyA9IGNvbG9ycy5iZyB8fCAnIzBiMGYxYSc7XG4gICAgdmFyIGZnID0gY29sb3JzLmZnIHx8ICcjZThlY2Y1JztcbiAgICB2YXIgbXV0ZWQgPSBjb2xvcnMubXV0ZWQgfHwgJyM5YWE2YmYnO1xuICAgIHZhciBjYXJkQmFzZSA9IGNvbG9yc1snY2FyZC1iYXNlJ10gfHwgY29sb3JzLmJnIHx8ICcjMTIxODI2JztcbiAgICB2YXIgZG90T2sgPSBjb2xvcnNbJ2RvdC1vayddIHx8ICcjNGNhZjUwJztcbiAgICB2YXIgZG90QmFkID0gY29sb3JzWydkb3QtYmFkJ10gfHwgJyNlNzRjM2MnO1xuICAgIHZhciBpc0xpZ2h0ID0gY29sb3JzLmxpZ2h0QmcgfHwgKGJnICYmIGhleEx1bWluYW5jZShiZykgPiAwLjQpO1xuXG4gICAgdmFyIGRlcml2ZWQgPSB7fTtcblxuICAgIC8vIGhvdmVyOiBzdWJ0bGUgc2hpZnQgb2YgY2FyZC1iYXNlIHRvd2FyZCBmZyAoZGFyaykgb3IgdG93YXJkIGJnIChsaWdodClcbiAgICBkZXJpdmVkLmhvdmVyID0gaXNMaWdodFxuICAgICAgPyBibGVuZENvbG9ycyhjYXJkQmFzZSwgYmcsIDAuMzUpXG4gICAgICA6IGJsZW5kQ29sb3JzKGNhcmRCYXNlLCBmZywgMC4wOCk7XG5cbiAgICAvLyBjYXJkLWhvdmVyOiBtaWRwb2ludCBiZXR3ZWVuIGNhcmQtYmFzZSBhbmQgaG92ZXJcbiAgICBkZXJpdmVkWydjYXJkLWhvdmVyJ10gPSBibGVuZENvbG9ycyhjYXJkQmFzZSwgZGVyaXZlZC5ob3ZlciwgMC41KTtcblxuICAgIC8vIGJhc2U6IHN1YmR1ZWQgYmFja2dyb3VuZCBiZXR3ZWVuIGJnIGFuZCBjYXJkLWJhc2VcbiAgICBkZXJpdmVkLmJhc2UgPSBibGVuZENvbG9ycyhiZywgY2FyZEJhc2UsIDAuNik7XG5cbiAgICAvLyBmZy1tdXRlZDogZGltbWVyIHRoYW4gbXV0ZWQsIGJsZW5kIHRvd2FyZCBiZ1xuICAgIGRlcml2ZWRbJ2ZnLW11dGVkJ10gPSBibGVuZENvbG9ycyhtdXRlZCwgYmcsIDAuMzUpO1xuXG4gICAgLy8gc3VjY2VzczogcmV1c2UgZG90LW9rICh0aGUgZ3JlZW4gb2YgdGhpcyB0aGVtZSlcbiAgICBkZXJpdmVkLnN1Y2Nlc3MgPSBkb3RPaztcblxuICAgIC8vIGVycm9yOiByZXVzZSBkb3QtYmFkICh0aGUgcmVkIG9mIHRoaXMgdGhlbWUpXG4gICAgZGVyaXZlZC5lcnJvciA9IGRvdEJhZDtcblxuICAgIC8vIHdhcm5pbmc6IHdhcm0gYW1iZXIsIGFkanVzdGVkIGZvciBjb250cmFzdFxuICAgIGRlcml2ZWQud2FybmluZyA9IGlzTGlnaHQgPyAnI2Q2OGEwMCcgOiAnI2YzOWMxMic7XG5cbiAgICByZXR1cm4gZGVyaXZlZDtcbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMFx1MjUwMCBHZW5lcmF0ZSBib2R5IGJhY2tncm91bmQgQ1NTIGZvciB1c2VyIHRoZW1lcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuICBmdW5jdGlvbiBnZW5lcmF0ZUJvZHlCYWNrZ3JvdW5kQ1NTKHNsdWcsIGNvbG9ycykge1xuICAgIHZhciBpc0xpZ2h0ID0gY29sb3JzLmxpZ2h0QmcgfHwgKGNvbG9ycy5iZyAmJiBoZXhMdW1pbmFuY2UoY29sb3JzLmJnKSA+IDAuNCk7XG4gICAgdmFyIGFjY2VudCA9IGNvbG9ycy5hY2NlbnQgfHwgY29sb3JzWydhY2NlbnQtc3Ryb25nJ10gfHwgJyM4ODg4ODgnO1xuICAgIHZhciBhY2NlbnRSZ2IgPSBoZXhUb1JnYihhY2NlbnQpO1xuXG4gICAgaWYgKGlzTGlnaHQpIHtcbiAgICAgIHJldHVybiAnOnJvb3QuJyArIHNsdWcgKyAnIGJvZHkge1xcbicgK1xuICAgICAgICAnICBiYWNrZ3JvdW5kOlxcbicgK1xuICAgICAgICAnICAgIHJhZGlhbC1ncmFkaWVudCgxMjAwcHggODAwcHggYXQgMTAlIC0xMCUsIHJnYmEoJyArIGFjY2VudFJnYi5yICsgJywnICsgYWNjZW50UmdiLmcgKyAnLCcgKyBhY2NlbnRSZ2IuYiArICcsIC4wOCksIHRyYW5zcGFyZW50IDYwJSksXFxuJyArXG4gICAgICAgICcgICAgcmFkaWFsLWdyYWRpZW50KDEwMDBweCA3MDBweCBhdCAxMTAlIDEwJSwgcmdiYSgnICsgYWNjZW50UmdiLnIgKyAnLCcgKyBhY2NlbnRSZ2IuZyArICcsJyArIGFjY2VudFJnYi5iICsgJywgLjA1KSwgdHJhbnNwYXJlbnQgNTUlKSxcXG4nICtcbiAgICAgICAgJyAgICB2YXIoLS1iZyk7XFxuJyArXG4gICAgICAgICd9XFxuJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc6cm9vdC4nICsgc2x1ZyArICcgYm9keSB7XFxuJyArXG4gICAgICAgICcgIGJhY2tncm91bmQ6XFxuJyArXG4gICAgICAgICcgICAgcmFkaWFsLWdyYWRpZW50KDEyMDBweCA5MDBweCBhdCA4JSAtMTIlLCByZ2JhKCcgKyBhY2NlbnRSZ2IuciArICcsJyArIGFjY2VudFJnYi5nICsgJywnICsgYWNjZW50UmdiLmIgKyAnLCAuMTApLCB0cmFuc3BhcmVudCA2MCUpLFxcbicgK1xuICAgICAgICAnICAgIHJhZGlhbC1ncmFkaWVudCgxMDAwcHggNzAwcHggYXQgMTEwJSAtMTAlLCByZ2JhKCcgKyBhY2NlbnRSZ2IuciArICcsJyArIGFjY2VudFJnYi5nICsgJywnICsgYWNjZW50UmdiLmIgKyAnLCAuMDcpLCB0cmFuc3BhcmVudCA1NSUpLFxcbicgK1xuICAgICAgICAnICAgIHZhcigtLWJnKTtcXG4nICtcbiAgICAgICAgJ31cXG4nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMFx1MjUwMCBHZW5lcmF0ZSBidXR0b24gaG92ZXIgQ1NTIGZvciB1c2VyIHRoZW1lcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuICBmdW5jdGlvbiBnZW5lcmF0ZUJ1dHRvbkhvdmVyQ1NTKHNsdWcsIGNvbG9ycykge1xuICAgIHZhciBpc0xpZ2h0ID0gY29sb3JzLmxpZ2h0QmcgfHwgKGNvbG9ycy5iZyAmJiBoZXhMdW1pbmFuY2UoY29sb3JzLmJnKSA+IDAuNCk7XG5cbiAgICBpZiAoaXNMaWdodCkge1xuICAgICAgcmV0dXJuICc6cm9vdC4nICsgc2x1ZyArICcgYnV0dG9uOmhvdmVyIHtcXG4nICtcbiAgICAgICAgJyAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1zdHJvbmcpIDEyJSwgd2hpdGUgODglKTtcXG4nICtcbiAgICAgICAgJyAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4xNSk7XFxuJyArXG4gICAgICAgICcgIGJveC1zaGFkb3c6IDAgMXB4IDZweCByZ2JhKDAsIDAsIDAsIC4wOCksIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuOCk7XFxuJyArXG4gICAgICAgICd9XFxuJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc6cm9vdC4nICsgc2x1ZyArICcgYnV0dG9uOmhvdmVyIHtcXG4nICtcbiAgICAgICAgJyAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMTglLCB0cmFuc3BhcmVudCk7XFxuJyArXG4gICAgICAgICcgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMzUlLCB2YXIoLS1ib3JkZXIpKTtcXG4nICtcbiAgICAgICAgJ31cXG4nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMFx1MjUwMCBDb3JlIHRoZW1lIGZ1bmN0aW9ucyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuICBmdW5jdGlvbiBnZXRTeXN0ZW1UaGVtZSgpIHtcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzID8gJ2RhcmsnIDogJ2xpZ2h0JztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQ3VzdG9tUHJvcGVydGllcygpIHtcbiAgICBUSEVNRV9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tJyArIHByb3ApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2x1Z2lmeShuYW1lLCBjdXJyZW50U2x1Zykge1xuICAgIHZhciBzbHVnID0gbmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gICAgaWYgKCFzbHVnKSBzbHVnID0gJ2N1c3RvbSc7XG4gICAgaWYgKEJVSUxUSU5fVEhFTUVTLmluZGV4T2Yoc2x1ZykgIT09IC0xKSBzbHVnID0gc2x1ZyArICctY3VzdG9tJztcbiAgICB2YXIgY2FjaGVkID0gc2FmZUdldEpTT04oVVNFUl9USEVNRVNfS0VZLCB7fSk7XG4gICAgdmFyIGJhc2UgPSBzbHVnO1xuICAgIHZhciBjb3VudGVyID0gMjtcbiAgICB3aGlsZSAoY2FjaGVkW3NsdWddICYmIHNsdWcgIT09IGN1cnJlbnRTbHVnKSB7XG4gICAgICBzbHVnID0gYmFzZSArICctJyArIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIHNsdWc7XG4gIH1cblxuICAvLyBJbmplY3QgdXNlciB0aGVtZXMgZnJvbSBhIHRoZW1lcyBvYmplY3QgaW50byBET00gKyBydW50aW1lXG4gIGZ1bmN0aW9uIGluamVjdFVzZXJUaGVtZVN0eWxlcyh0aGVtZXNEYXRhKSB7XG4gICAgdmFyIGV4aXN0aW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItdGhlbWUtc3R5bGVzJyk7XG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5yZW1vdmUoKTtcblxuICAgIFRIRU1FUy5sZW5ndGggPSBCVUlMVElOX1RIRU1FUy5sZW5ndGg7XG4gICAgT2JqZWN0LmtleXMoVEhFTUVfQ09MT1JTKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICBpZiAoQlVJTFRJTl9USEVNRVMuaW5kZXhPZihrKSA9PT0gLTEpIGRlbGV0ZSBUSEVNRV9DT0xPUlNba107XG4gICAgfSk7XG5cbiAgICAvLyBVc2UgcHJvdmlkZWQgZGF0YSwgb3IgZmFsbCBiYWNrIHRvIGxvY2FsU3RvcmFnZSBjYWNoZVxuICAgIHZhciB1c2VyVGhlbWVzID0gdGhlbWVzRGF0YSB8fCBzYWZlR2V0SlNPTihVU0VSX1RIRU1FU19LRVksIHt9KTtcbiAgICB2YXIgc2x1Z3MgPSBPYmplY3Qua2V5cyh1c2VyVGhlbWVzKTtcblxuICAgIC8vIEZpbHRlciBvdXQgYW55IHVzZXIgdGhlbWVzIHRoYXQgY29sbGlkZSB3aXRoIGJ1aWx0LWluIHNsdWdzXG4gICAgc2x1Z3MgPSBzbHVncy5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIEJVSUxUSU5fVEhFTUVTLmluZGV4T2YocykgPT09IC0xOyB9KTtcblxuICAgIGlmICghc2x1Z3MubGVuZ3RoKSByZXR1cm47XG5cbiAgICB2YXIgY3NzID0gJyc7XG4gICAgc2x1Z3MuZm9yRWFjaChmdW5jdGlvbiAoc2x1Zykge1xuICAgICAgdmFyIHRoZW1lID0gdXNlclRoZW1lc1tzbHVnXTtcbiAgICAgIGlmIChUSEVNRVMuaW5kZXhPZihzbHVnKSA9PT0gLTEpIFRIRU1FUy5wdXNoKHNsdWcpO1xuXG4gICAgICAvLyBCdWlsZCBjb2xvciBtYXAgZnJvbSBzYXZlZCBkYXRhXG4gICAgICB2YXIgY29sb3JNYXAgPSB7fTtcbiAgICAgIFRIRU1FX1BST1BTLmZvckVhY2goZnVuY3Rpb24gKHApIHsgaWYgKHRoZW1lW3BdKSBjb2xvck1hcFtwXSA9IHRoZW1lW3BdOyB9KTtcbiAgICAgIGNvbG9yTWFwWydjYXJkLWJnJ10gPSB0aGVtZVsnY2FyZC1iYXNlJ10gfHwgdGhlbWUuYmc7XG4gICAgICBpZiAodGhlbWUubGlnaHRCZykgY29sb3JNYXAubGlnaHRCZyA9IHRydWU7XG5cbiAgICAgIC8vIEF1dG8tZGVyaXZlIGFueSBtaXNzaW5nIGV4dGVuZGVkIGNvbG9yc1xuICAgICAgdmFyIGRlcml2ZWQgPSBkZXJpdmVFeHRlbmRlZENvbG9ycyhjb2xvck1hcCk7XG4gICAgICBERVJJVkVEX1BST1BTLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgaWYgKCFjb2xvck1hcFtwXSAmJiBkZXJpdmVkW3BdKSBjb2xvck1hcFtwXSA9IGRlcml2ZWRbcF07XG4gICAgICB9KTtcblxuICAgICAgVEhFTUVfQ09MT1JTW3NsdWddID0gY29sb3JNYXA7XG5cbiAgICAgIC8vIEVtaXQgbWFpbiB2YXJpYWJsZSBibG9ja1xuICAgICAgY3NzICs9ICc6cm9vdC4nICsgc2x1ZyArICcge1xcbic7XG4gICAgICBUSEVNRV9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGlmIChjb2xvck1hcFtwXSkgY3NzICs9ICcgIC0tJyArIHAgKyAnOiAnICsgY29sb3JNYXBbcF0gKyAnO1xcbic7XG4gICAgICB9KTtcbiAgICAgIGNzcyArPSAnfVxcbic7XG5cbiAgICAgIC8vIEVtaXQgYm9keSBiYWNrZ3JvdW5kIGdyYWRpZW50XG4gICAgICBjc3MgKz0gZ2VuZXJhdGVCb2R5QmFja2dyb3VuZENTUyhzbHVnLCBjb2xvck1hcCk7XG5cbiAgICAgIC8vIEVtaXQgYnV0dG9uIGhvdmVyIG92ZXJyaWRlXG4gICAgICBjc3MgKz0gZ2VuZXJhdGVCdXR0b25Ib3ZlckNTUyhzbHVnLCBjb2xvck1hcCk7XG4gICAgfSk7XG5cbiAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlLmlkID0gJ3VzZXItdGhlbWUtc3R5bGVzJztcbiAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzcztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIC8vIEZldGNoIHRoZW1lcyBmcm9tIHNlcnZlciwgdXBkYXRlIGNhY2hlLCByZS1pbmplY3QgaWYgY2hhbmdlZFxuICBmdW5jdGlvbiBzeW5jVGhlbWVzRnJvbVNlcnZlcigpIHtcbiAgICBzZWN1cmVGZXRjaCgnL2FwaS92MS90aGVtZXMnKS50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLmpzb24oKTsgfSkudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaWYgKCFkYXRhLnN1Y2Nlc3MgfHwgIWRhdGEudGhlbWVzKSByZXR1cm47XG4gICAgICB2YXIgc2VydmVyVGhlbWVzID0gZGF0YS50aGVtZXM7XG4gICAgICB2YXIgY2FjaGVkID0gc2FmZUdldEpTT04oVVNFUl9USEVNRVNfS0VZLCB7fSk7XG4gICAgICAvLyBPbmx5IHVwZGF0ZSBpZiBkaWZmZXJlbnRcbiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShzZXJ2ZXJUaGVtZXMpICE9PSBKU09OLnN0cmluZ2lmeShjYWNoZWQpKSB7XG4gICAgICAgIHNhZmVTZXQoVVNFUl9USEVNRVNfS0VZLCBKU09OLnN0cmluZ2lmeShzZXJ2ZXJUaGVtZXMpKTtcbiAgICAgICAgaW5qZWN0VXNlclRoZW1lU3R5bGVzKHNlcnZlclRoZW1lcyk7XG4gICAgICAgIC8vIFJlLWFwcGx5IGN1cnJlbnQgdGhlbWUgaW4gY2FzZSBpdCB3YXMganVzdCBzeW5jZWRcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBzYWZlR2V0KFRIRU1FX0tFWSk7XG4gICAgICAgIGlmIChjdXJyZW50ICYmIFRIRU1FUy5pbmRleE9mKGN1cnJlbnQpICE9PSAtMSkge1xuICAgICAgICAgIGFwcGx5VGhlbWUoY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gIH1cblxuICAvLyBNaWdyYXRlIGxlZ2FjeSBjdXN0b20tdGhlbWUgdG8gc2VydmVyXG4gIGZ1bmN0aW9uIG1pZ3JhdGVMZWdhY3lDdXN0b21UaGVtZSgpIHtcbiAgICB2YXIgbGVnYWN5ID0gc2FmZUdldEpTT04oTEVHQUNZX0NVU1RPTV9LRVkpO1xuICAgIGlmICghbGVnYWN5KSByZXR1cm47XG5cbiAgICB2YXIgbmFtZSA9IGxlZ2FjeS5uYW1lIHx8ICdDdXN0b20nO1xuICAgIHZhciBzbHVnID0gc2x1Z2lmeShuYW1lKTtcblxuICAgIHZhciB0aGVtZURhdGEgPSB7IG5hbWU6IG5hbWUgfTtcbiAgICBUSEVNRV9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICBpZiAobGVnYWN5W3BdKSB0aGVtZURhdGFbcF0gPSBsZWdhY3lbcF07XG4gICAgfSk7XG5cbiAgICAvLyBTYXZlIHRvIGxvY2FsU3RvcmFnZSBjYWNoZSBpbW1lZGlhdGVseVxuICAgIHZhciBjYWNoZWQgPSBzYWZlR2V0SlNPTihVU0VSX1RIRU1FU19LRVksIHt9KTtcbiAgICBjYWNoZWRbc2x1Z10gPSB0aGVtZURhdGE7XG4gICAgc2FmZVNldChVU0VSX1RIRU1FU19LRVksIEpTT04uc3RyaW5naWZ5KGNhY2hlZCkpO1xuXG4gICAgLy8gVXBkYXRlIGFjdGl2ZSB0aGVtZSByZWZlcmVuY2VcbiAgICBpZiAoc2FmZUdldChUSEVNRV9LRVkpID09PSAnY3VzdG9tJykge1xuICAgICAgc2FmZVNldChUSEVNRV9LRVksIHNsdWcpO1xuICAgIH1cblxuICAgIHNhZmVSZW1vdmUoTEVHQUNZX0NVU1RPTV9LRVkpO1xuXG4gICAgLy8gQWxzbyBwdXNoIHRvIHNlcnZlclxuICAgIHZhciBjb2xvcnMgPSB7fTtcbiAgICBUSEVNRV9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7IGlmICh0aGVtZURhdGFbcF0pIGNvbG9yc1twXSA9IHRoZW1lRGF0YVtwXTsgfSk7XG4gICAgZmV0Y2goJy9hcGkvdjEvdGhlbWVzLycgKyBzbHVnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBuYW1lLCBjb2xvcnM6IGNvbG9ycyB9KVxuICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VGhlbWUobW9kZSkge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0aGVtZS10cmFuc2l0aW9uaW5nJyk7XG5cbiAgICBUSEVNRVMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgaWYgKHQgIT09ICdkYXJrJykgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodCk7XG4gICAgfSk7XG5cbiAgICBjbGVhckN1c3RvbVByb3BlcnRpZXMoKTtcblxuICAgIGlmIChtb2RlICE9PSAnZGFyaycpIHtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKG1vZGUpO1xuICAgIH1cblxuICAgIHNhZmVTZXQoVEhFTUVfS0VZLCBtb2RlKTtcblxuICAgIHZhciBjb2xvcnMgPSBUSEVNRV9DT0xPUlNbbW9kZV07XG4gICAgdmFyIG1ldGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJ0aGVtZS1jb2xvclwiXScpO1xuICAgIGlmIChtZXRhICYmIGNvbG9ycykgbWV0YS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnLCBjb2xvcnMuYmcpO1xuXG4gICAgLy8gVG9nZ2xlIGxpZ2h0LWJnIGNsYXNzOiBleHBsaWNpdCBmbGFnIGZpcnN0LCB0aGVuIGF1dG8tZGV0ZWN0IGZyb20gbHVtaW5hbmNlXG4gICAgdmFyIGlzTGlnaHQgPSBjb2xvcnMgJiYgY29sb3JzLmxpZ2h0Qmc7XG4gICAgaWYgKCFpc0xpZ2h0ICYmIGNvbG9ycyAmJiBjb2xvcnMuYmcpIGlzTGlnaHQgPSBoZXhMdW1pbmFuY2UoY29sb3JzLmJnKSA+IDAuNDtcbiAgICBpZiAoaXNMaWdodCkge1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xpZ2h0LWJnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdsaWdodC1iZycpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RoZW1lLXRyYW5zaXRpb25pbmcnKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgLy8gLS0tIEluaXRpYWxpemF0aW9uIC0tLVxuICBtaWdyYXRlTGVnYWN5Q3VzdG9tVGhlbWUoKTtcbiAgLy8gSW5zdGFudCBsb2FkIGZyb20gY2FjaGVcbiAgaW5qZWN0VXNlclRoZW1lU3R5bGVzKCk7XG5cbiAgdmFyIHNhdmVkVGhlbWUgPSBzYWZlR2V0KFRIRU1FX0tFWSk7XG4gIGlmIChzYXZlZFRoZW1lID09PSAncmVkJykgeyBzYXZlZFRoZW1lID0gJ2JsYWNrJzsgc2FmZVNldChUSEVNRV9LRVksICdibGFjaycpOyB9XG4gIGlmIChzYXZlZFRoZW1lICYmIHNhdmVkVGhlbWUgIT09ICdkYXJrJyAmJiBUSEVNRVMuaW5kZXhPZihzYXZlZFRoZW1lKSA9PT0gLTEpIHtcbiAgICBzYXZlZFRoZW1lID0gbnVsbDtcbiAgfVxuICBhcHBseVRoZW1lKHNhdmVkVGhlbWUgfHwgZ2V0U3lzdGVtVGhlbWUoKSk7XG5cbiAgLy8gU3luYyBmcm9tIHNlcnZlciBpbiBiYWNrZ3JvdW5kICh1cGRhdGVzIGNhY2hlIGlmIHNlcnZlciBoYXMgbmV3ZXIgZGF0YSlcbiAgc3luY1RoZW1lc0Zyb21TZXJ2ZXIoKTtcblxuICB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFzYWZlR2V0KFRIRU1FX0tFWSkpIHtcbiAgICAgIGFwcGx5VGhlbWUoZS5tYXRjaGVzID8gJ2RhcmsnIDogJ2xpZ2h0Jyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBFeHBvc2UgQVBJXG4gIHdpbmRvdy5USEVNRVMgPSBUSEVNRVM7XG4gIHdpbmRvdy5CVUlMVElOX1RIRU1FUyA9IEJVSUxUSU5fVEhFTUVTO1xuICB3aW5kb3cuVEhFTUVfQ09MT1JTID0gVEhFTUVfQ09MT1JTO1xuICB3aW5kb3cuVEhFTUVfUFJPUFMgPSBUSEVNRV9QUk9QUztcbiAgd2luZG93LkJBU0VfUFJPUFMgPSBCQVNFX1BST1BTO1xuICB3aW5kb3cuREVSSVZFRF9QUk9QUyA9IERFUklWRURfUFJPUFM7XG4gIHdpbmRvdy5VU0VSX1RIRU1FU19LRVkgPSBVU0VSX1RIRU1FU19LRVk7XG4gIHdpbmRvdy5hcHBseVRoZW1lID0gYXBwbHlUaGVtZTtcbiAgd2luZG93LmNsZWFyQ3VzdG9tUHJvcGVydGllcyA9IGNsZWFyQ3VzdG9tUHJvcGVydGllcztcbiAgd2luZG93LmluamVjdFVzZXJUaGVtZVN0eWxlcyA9IGluamVjdFVzZXJUaGVtZVN0eWxlcztcbiAgd2luZG93LnN5bmNUaGVtZXNGcm9tU2VydmVyID0gc3luY1RoZW1lc0Zyb21TZXJ2ZXI7XG4gIHdpbmRvdy5zbHVnaWZ5VGhlbWVOYW1lID0gc2x1Z2lmeTtcbiAgd2luZG93LmdldEFjdGl2ZVRoZW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2FmZUdldChUSEVNRV9LRVkpIHx8IGdldFN5c3RlbVRoZW1lKCk7IH07XG4gIHdpbmRvdy5kZXJpdmVFeHRlbmRlZENvbG9ycyA9IGRlcml2ZUV4dGVuZGVkQ29sb3JzO1xuICB3aW5kb3cuaGV4VG9SZ2IgPSBoZXhUb1JnYjtcbiAgd2luZG93LnJnYlRvSGV4ID0gcmdiVG9IZXg7XG4gIHdpbmRvdy5ibGVuZENvbG9ycyA9IGJsZW5kQ29sb3JzO1xufSkoKTtcbjtcbi8vID09PT09IFBMVUdHQUJMRSBBVVRIIEdBVEUgKERDLTA0OSkgPT09PT1cbi8vXG4vLyBPbiBDYWRkeSByZWRpcmVjdCB0byA/YXV0aD1yZXF1aXJlZCwgdGhpcyBtb2R1bGUgcXVlcmllc1xuLy8gR0VUIC9hcGkvdjEvYXV0aC9sb2dpbi9tZXRob2RzIHRvIGRpc2NvdmVyIHdoaWNoIEF1dGhQcm92aWRlcnMgYXJlIGVuYWJsZWQuXG4vLyBJZiBvbmx5IG9uZSBwcm92aWRlciBpcyBlbmFibGVkLCBqdW1wIHN0cmFpZ2h0IHRvIGl0cyBjaGFsbGVuZ2UgVUlcbi8vIChUT1RQLW9ubHkgaW5zdGFsbGF0aW9ucyB0b2RheSkuIElmIG11bHRpcGxlIHByb3ZpZGVycyBleGlzdCwgcmVuZGVyIGFcbi8vIHNlbGVjdG9yIGZpcnN0IHNvIHRoZSB1c2VyIHBpY2tzIGhvdyB0byBzaWduIGluLlxuLy9cbi8vIFRvZGF5OlxuLy8gICAtIHRvdHA6ICAgIGNoYWxsZW5nZSBpcyA2LWRpZ2l0IGNvZGUgdmlhIHRoZSBleGlzdGluZyBUT1RQIG92ZXJsYXlcbi8vICAgLSBlbWFpbDogICBjaGFsbGVuZ2UgaXMgZW1haWwgYWRkcmVzcyBcdTIxOTIgUE9TVCAvYXBpL3YxL2F1dGgvbG9naW4vZW1haWwvaW5pdGlhdGVcbi8vICAgICAgICAgICAgICBcdTIxOTIgc2VydmVyIGVtYWlscyBtYWdpYyBsaW5rIChvciBsb2dzIGl0IHRvIGNvbnNvbGUgaW4gZGV2KSBcdTIxOTJcbi8vICAgICAgICAgICAgICB3YWl0aW5nIGZvciB2ZXJpZmljYXRpb24gKG5vIGF1dG8tcHJvbW90aW9uOyB1c2VyIHJlbG9hZHMgdmlhXG4vLyAgICAgICAgICAgICAgZW1haWwgbGluaywgd2hpY2ggcm91dGVzIHRocm91Z2ggL2FwaS92MS9hdXRoL2xvZ2luL2VtYWlsL3ZlcmlmeSlcbi8vXG4vLyBUaGlzIG1vZHVsZSB3aXJlcyBpbnRvIHRoZSBleGlzdGluZyB0b3RwLWF1dGguanMgc3VibWl0VG90cENvZGUoKSBmbG93IHNvXG4vLyB0aGUgbGVnYWN5IFRPVFAgaGFwcHktcGF0aCBpcyB1bmNoYW5nZWQ6IHdoZW4gbWV0aG9kcyByZXR1cm5zIG9ubHlcbi8vIGB0b3RwYCwgdGhpcyBtb2R1bGUganVzdCBzaG93cyB0aGUgVE9UUCBvdmVybGF5IGFuZCBleGl0cy5cblxuKGZ1bmN0aW9uKCkge1xuICAvLyAtLS0tIERPTSByZWZzIChjcmVhdGVkIGxhemlseSBiZWxvdzsgZXhpc3RpbmcgVE9UUCBtYXJrdXAgc3VwcGxpZXMgdGhlbSkgLS0tLVxuICBsZXQgbWV0aG9kc0NhY2hlID0gbnVsbDtcblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaE1ldGhvZHMoKSB7XG4gICAgaWYgKG1ldGhvZHNDYWNoZSkgcmV0dXJuIG1ldGhvZHNDYWNoZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvdjEvYXV0aC9sb2dpbi9tZXRob2RzJywgeyBjYWNoZTogJ25vLXN0b3JlJyB9KTtcbiAgICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYG1ldGhvZHMgSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIG1ldGhvZHNDYWNoZSA9IEFycmF5LmlzQXJyYXkoZGF0YS5wcm92aWRlcnMpID8gZGF0YS5wcm92aWRlcnMgOiBbXTtcbiAgICAgIHJldHVybiBtZXRob2RzQ2FjaGU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gUHVibGljIGVuZHBvaW50IFx1MjAxNCBpZiBpdCBmYWlscywgZmFsbCB0aHJvdWdoIHRvIGxlZ2FjeSBUT1RQIHBhdGguXG4gICAgICBjb25zb2xlLndhcm4oJ1thdXRoLWdhdGVdIG1ldGhvZHMgZmV0Y2ggZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gVE9UUC1vbmx5JywgZSk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvd1Byb3ZpZGVyU2VsZWN0b3IocHJvdmlkZXJzKSB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW92ZXJsYXknKTtcbiAgICBpZiAoIW92ZXJsYXkpIHJldHVybjtcbiAgICBjb25zdCBjYXJkID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcudG90cC1jYXJkJyk7XG4gICAgaWYgKCFjYXJkKSByZXR1cm47XG5cbiAgICAvLyBTYXZlIHRoZSBleGlzdGluZyBUT1RQLWNoYWxsZW5nZSBib2R5IHNvIHdlIGNhbiByZXN0b3JlIGl0IG9uIGNhbmNlbC5cbiAgICBjb25zdCBvcmlnaW5hbEJvZHkgPSBjYXJkLmlubmVySFRNTDtcbiAgICBpZiAoIWNhcmQuZGF0YXNldC5vcmlnaW5hbEJvZHkpIGNhcmQuZGF0YXNldC5vcmlnaW5hbEJvZHkgPSBvcmlnaW5hbEJvZHk7XG5cbiAgICBjb25zdCBwcm92aWRlckJ1dHRvbnMgPSBwcm92aWRlcnMubWFwKHAgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSAocC5jb25maWcgJiYgKHAuY29uZmlnLmxhYmVsIHx8IHAubmFtZSkpIHx8IHAubmFtZTtcbiAgICAgIGNvbnN0IGJ0biA9IGA8YnV0dG9uIGNsYXNzPVwicHJvdmlkZXItYnRuXCIgZGF0YS1wcm92aWRlcj1cIiR7cC5uYW1lfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiA2cHggNHB4OyBwYWRkaW5nOiAxMHB4IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiAwOyBib3JkZXItcmFkaXVzOiA2cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAwLjk1cmVtO1wiPlxuICAgICAgICBTaWduIGluIHdpdGggJHtsYWJlbH1cbiAgICAgIDwvYnV0dG9uPmA7XG4gICAgICByZXR1cm4gYnRuO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuXG4gICAgY2FyZC5pbm5lckhUTUwgPSBgXG4gICAgICA8aW1nIGNsYXNzPVwidG90cC1sb2dvIHRvdHAtbG9nby1kYXJrXCIgc3JjPVwiL2Fzc2V0cy9kYXNoY2FkZHktbG9nby1kYXJrLnBuZ1wiIGFsdD1cIkRhc2hDYWRkeVwiIG9uZXJyb3I9XCJ0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnXCI+XG4gICAgICA8aW1nIGNsYXNzPVwidG90cC1sb2dvIHRvdHAtbG9nby1saWdodFwiIHNyYz1cIi9hc3NldHMvZGFzaGNhZGR5LWxvZ28tbGlnaHQucG5nXCIgYWx0PVwiRGFzaENhZGR5XCIgb25lcnJvcj1cInRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSdcIj5cbiAgICAgIDxwIGNsYXNzPVwic3VidGl0bGVcIj5DaG9vc2UgaG93IHRvIHNpZ24gaW48L3A+XG4gICAgICA8ZGl2IGlkPVwiYXV0aC1nYXRlLXByb3ZpZGVyc1wiIHN0eWxlPVwibWFyZ2luOiAxNHB4IDAgMTBweDtcIj4ke3Byb3ZpZGVyQnV0dG9uc308L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJhdXRoLWdhdGUtbWVzc2FnZVwiIHN0eWxlPVwibWFyZ2luLXRvcDogOHB4OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDAuOHJlbTtcIj48L2Rpdj5cbiAgICBgO1xuXG4gICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICAvLyBXaXJlIGVhY2ggYnV0dG9uXG4gICAgY2FyZC5xdWVyeVNlbGVjdG9yQWxsKCcucHJvdmlkZXItYnRuJykuZm9yRWFjaChidG4gPT4ge1xuICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gYnRuLmRhdGFzZXQucHJvdmlkZXI7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gcHJvdmlkZXJzLmZpbmQocCA9PiBwLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICByZW5kZXJQcm92aWRlckNoYWxsZW5nZShwcm92aWRlcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVPcmlnaW5hbEJvZHkoKSB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW92ZXJsYXknKTtcbiAgICBpZiAoIW92ZXJsYXkpIHJldHVybjtcbiAgICBjb25zdCBjYXJkID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcudG90cC1jYXJkJyk7XG4gICAgaWYgKCFjYXJkIHx8ICFjYXJkLmRhdGFzZXQub3JpZ2luYWxCb2R5KSByZXR1cm47XG4gICAgY2FyZC5pbm5lckhUTUwgPSBjYXJkLmRhdGFzZXQub3JpZ2luYWxCb2R5O1xuICAgIC8vIFJlLWJpbmQgdGhlIG9yaWdpbmFsIGRpZ2l0IGlucHV0IGhhbmRsZXJzIGJ5IHJlLXJ1bm5pbmcgdGhlIHRvdHAtYXV0aFxuICAgIC8vIGJvb3RzdHJhcC4gVGhlIHNpbXBsZXN0IHBhdGg6IHJlbG9hZCB0aGUgcGFnZSwgd2hpY2ggcmUtcnVucyBhbGwgSUlGRXMuXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyUHJvdmlkZXJDaGFsbGVuZ2UocHJvdmlkZXIpIHtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtb3ZlcmxheScpO1xuICAgIGlmICghb3ZlcmxheSkgcmV0dXJuO1xuICAgIGNvbnN0IGNhcmQgPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy50b3RwLWNhcmQnKTtcbiAgICBpZiAoIWNhcmQpIHJldHVybjtcblxuICAgIGlmIChwcm92aWRlci5uYW1lID09PSAndG90cCcpIHtcbiAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFRPVFAgbWFya3VwIFx1MjE5MiBleGlzdGluZyB0b3RwLWF1dGguanMgc3VibWl0VG90cENvZGVcbiAgICAgIC8vIHBhdGggaGFuZGxlcyB0aGUgcmVzdC4gKFJlbG9hZCBpcyB0aGUgY2xlYW5lc3QgcGF0aCBiZWNhdXNlXG4gICAgICAvLyB0b3RwLWF1dGguanMgd2lyZXMgaXRzIGlucHV0IGhhbmRsZXJzIGF0IHRvcC1sZXZlbCBJSUZFIHRpbWUuKVxuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlci5uYW1lID09PSAnZW1haWwnKSB7XG4gICAgICBjYXJkLmlubmVySFRNTCA9IGBcbiAgICAgICAgPGltZyBjbGFzcz1cInRvdHAtbG9nbyB0b3RwLWxvZ28tZGFya1wiIHNyYz1cIi9hc3NldHMvZGFzaGNhZGR5LWxvZ28tZGFyay5wbmdcIiBhbHQ9XCJEYXNoQ2FkZHlcIiBvbmVycm9yPVwidGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJ1wiPlxuICAgICAgICA8aW1nIGNsYXNzPVwidG90cC1sb2dvIHRvdHAtbG9nby1saWdodFwiIHNyYz1cIi9hc3NldHMvZGFzaGNhZGR5LWxvZ28tbGlnaHQucG5nXCIgYWx0PVwiRGFzaENhZGR5XCIgb25lcnJvcj1cInRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSdcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJzdWJ0aXRsZVwiPlNpZ24gaW4gd2l0aCBlbWFpbDwvcD5cbiAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46IDZweCAwIDE0cHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgY29sb3I6IHZhcigtLW11dGVkKTtcIj5cbiAgICAgICAgICBXZSdsbCBlbWFpbCB5b3UgYSBvbmUtdGltZSBzaWduLWluIGxpbmsuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1nYXRlLWVtYWlsLWlucHV0XCIgdHlwZT1cImVtYWlsXCIgaW5wdXRtb2RlPVwiZW1haWxcIiBhdXRvY29tcGxldGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInlvdUBleGFtcGxlLmNvbVwiXG4gICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAxMHB4IDEycHg7IGZvbnQtc2l6ZTogMXJlbTsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBjb2xvcjogdmFyKC0tdGV4dCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImF1dGgtZ2F0ZS1lbWFpbC1zdWJtaXRcIiBjbGFzcz1cInByb3ZpZGVyLWJ0blwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOiAxNHB4OyBwYWRkaW5nOiAxMHB4IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiAwOyBib3JkZXItcmFkaXVzOiA2cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAwLjk1cmVtOyB3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICBTZW5kIHNpZ24taW4gbGlua1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBpZD1cImF1dGgtZ2F0ZS1lbWFpbC1zdGF0dXNcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEycHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgbGluZS1oZWlnaHQ6IDEuNDtcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDE2cHg7XCI+XG4gICAgICAgICAgPGEgaHJlZj1cIiNcIiBpZD1cImF1dGgtZ2F0ZS1iYWNrXCIgc3R5bGU9XCJjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDAuOHJlbTtcIj5cdTIxOTAgQmFjazwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gICAgICBjb25zdCBpbnB1dCA9IGNhcmQucXVlcnlTZWxlY3RvcignI2F1dGgtZ2F0ZS1lbWFpbC1pbnB1dCcpO1xuICAgICAgY29uc3Qgc3VibWl0ID0gY2FyZC5xdWVyeVNlbGVjdG9yKCcjYXV0aC1nYXRlLWVtYWlsLXN1Ym1pdCcpO1xuICAgICAgY29uc3Qgc3RhdHVzID0gY2FyZC5xdWVyeVNlbGVjdG9yKCcjYXV0aC1nYXRlLWVtYWlsLXN0YXR1cycpO1xuICAgICAgY29uc3QgYmFjayA9IGNhcmQucXVlcnlTZWxlY3RvcignI2F1dGgtZ2F0ZS1iYWNrJyk7XG5cbiAgICAgIHN1Ym1pdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZW1haWwgPSAoaW5wdXQudmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKCFlbWFpbCB8fCAhZW1haWwuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICdFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuJztcbiAgICAgICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAndmFyKC0tZXJyb3IsICNkMzMpJztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VibWl0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gJ1NlbmRpbmdcdTIwMjYnO1xuICAgICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS9hdXRoL2xvZ2luL2VtYWlsL2luaXRpYXRlJywge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZW1haWwgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgdmlhID0gZGF0YS5kZWxpdmVyZWRWaWEgfHwgJ2VtYWlsJztcbiAgICAgICAgICAgIGNvbnN0IG1hc2tlZCA9IGRhdGEubWFza2VkRW1haWwgfHwgZW1haWw7XG4gICAgICAgICAgICBpZiAodmlhID09PSAnZGV2LWNvbnNvbGUnKSB7XG4gICAgICAgICAgICAgIHN0YXR1cy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgQ2hlY2sgdGhlIHNlcnZlciBsb2dzIGZvciB5b3VyIG9uZS10aW1lIGxpbmsuXG4gICAgICAgICAgICAgICAgKERldiBtb2RlOiBubyBTTVRQIGNvbmZpZ3VyZWQuIEluIHByb2R1Y3Rpb24gdGhpcyB3b3VsZCBlbWFpbCA8c3Ryb25nPiR7bWFza2VkfTwvc3Ryb25nPi4pYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXR1cy5pbm5lckhUTUwgPSBgU2lnbi1pbiBsaW5rIHNlbnQgdG8gPHN0cm9uZz4ke21hc2tlZH08L3N0cm9uZz4uXG4gICAgICAgICAgICAgICAgQ2hlY2sgeW91ciBpbmJveCAoYW5kIHNwYW0gZm9sZGVyKS5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLXN1Y2Nlc3MsICMyYTcpJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gZGF0YS5lcnJvciB8fCAnQ291bGQgbm90IHNlbmQgbGluay4nO1xuICAgICAgICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWVycm9yLCAjZDMzKSc7XG4gICAgICAgICAgICBzdWJtaXQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnQ29ubmVjdGlvbiBlcnJvci4gVHJ5IGFnYWluLic7XG4gICAgICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWVycm9yLCAjZDMzKSc7XG4gICAgICAgICAgc3VibWl0LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgc3VibWl0LmNsaWNrKCk7XG4gICAgICB9KTtcblxuICAgICAgYmFjay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNob3dQcm92aWRlclNlbGVjdG9yKHByb3ZpZGVycyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVbmtub3duIHByb3ZpZGVyIFx1MjE5MiByZXN0b3JlIFRPVFAgcGF0aCBhcyBhIGxhc3QgcmVzb3J0XG4gICAgY29uc29sZS53YXJuKCdbYXV0aC1nYXRlXSB1bmtub3duIHByb3ZpZGVyJywgcHJvdmlkZXIubmFtZSk7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2hvdygpIHtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtb3ZlcmxheScpO1xuICAgIGlmICghb3ZlcmxheSkgcmV0dXJuOyAvLyBUT1RQLW9ubHkgYnVpbGQgd2l0aG91dCBvdXIgb3ZlcmxheSBjaGFuZ2VzXG5cbiAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCBmZXRjaE1ldGhvZHMoKTtcbiAgICBpZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRWl0aGVyIHRoZSBlbmRwb2ludCBpc24ndCByZWFjaGFibGUgT1Igbm8gcHJvdmlkZXIgcmVwb3J0cyBlbmFibGVkLlxuICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBsZWdhY3kgVE9UUCBvdmVybGF5IFx1MjAxNCBleGlzdGluZyB0b3RwLWF1dGguanMgaGFuZGxlcyBpdC5cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93Ll9zaG93VG90cE92ZXJsYXkgPT09ICdmdW5jdGlvbicpIHdpbmRvdy5fc2hvd1RvdHBPdmVybGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAxICYmIHByb3ZpZGVyc1swXS5uYW1lID09PSAndG90cCcpIHtcbiAgICAgIC8vIFNpbmdsZSBUT1RQIHByb3ZpZGVyIFx1MjE5MiBzaG93IHRoZSBvcmlnaW5hbCBUT1RQIG92ZXJsYXkgdW5jaGFuZ2VkLFxuICAgICAgLy8gYnV0IHdpdGggYW4gXCJPciBzaWduIGluIHdpdGggZW1haWxcIiBsaW5rIGJlbG93IHNvIHRoZSBlbWFpbCBwYXRoXG4gICAgICAvLyBpcyByZWFjaGFibGUgYXMgdGhlIHJlY292ZXJ5IC8gcGhvbmUtZnJpZW5kbHkgYWx0ZXJuYXRpdmUuIE1vc3RcbiAgICAgIC8vIHVzZXJzIHN0aWxsIHdhbnQgdGhlaXIgcHJpbWFyeSBtZXRob2QgKFRPVFApIGZyb250LWFuZC1jZW50ZXIuXG4gICAgICBzaG93VG90cFdpdGhFbWFpbEZhbGxiYWNrKHByb3ZpZGVyc1swXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNob3dQcm92aWRlclNlbGVjdG9yKHByb3ZpZGVycyk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG93VG90cFdpdGhFbWFpbEZhbGxiYWNrKHRvdHBQcm92aWRlcikge1xuICAgIGNvbnN0IGVtYWlsRW5hYmxlZCA9IG1ldGhvZHNDYWNoZSAmJiBtZXRob2RzQ2FjaGUuZmluZChwID0+IHAubmFtZSA9PT0gJ2VtYWlsJyk7XG4gICAgaWYgKCFlbWFpbEVuYWJsZWQpIHtcbiAgICAgIC8vIFRydWx5IHNpbmdsZS1wcm92aWRlciBwYXRoOiBsZWdhY3kgVE9UUCBvdmVybGF5LCBubyBhbHQgbGluay5cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93Ll9zaG93VG90cE92ZXJsYXkgPT09ICdmdW5jdGlvbicpIHdpbmRvdy5fc2hvd1RvdHBPdmVybGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1vdmVybGF5Jyk7XG4gICAgY29uc3QgY2FyZCA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignLnRvdHAtY2FyZCcpO1xuICAgIGlmICghY2FyZCkgcmV0dXJuO1xuXG4gICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgVE9UUCBtYXJrdXAgc28gd2UgY2FuIHJlc3RvcmUgb24gYWx0LWxpbmsgY2xpY2sgb2ZmLlxuICAgIGlmICghY2FyZC5kYXRhc2V0Lm9yaWdpbmFsQm9keSkgY2FyZC5kYXRhc2V0Lm9yaWdpbmFsQm9keSA9IGNhcmQuaW5uZXJIVE1MO1xuXG4gICAgLy8gQWRkIGEgc21hbGwgXCJvclwiIGxpbmsgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZXhpc3RpbmcgY2FyZCBXSVRIT1VUXG4gICAgLy8gdG91Y2hpbmcgdGhlIFRPVFAgaW5wdXQgbWFya3VwIFx1MjAxNCBrZWVwcyB0b3RwLWF1dGguanMncyBzdWJtaXRUb3RwQ29kZVxuICAgIC8vIGJpbmRpbmcgaW50YWN0LlxuICAgIGxldCBhbHQgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJyNhdXRoLWdhdGUtZW1haWwtYWx0Jyk7XG4gICAgaWYgKCFhbHQpIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlkID0gJ2F1dGgtZ2F0ZS1lbWFpbC1hbHQnO1xuICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luLXRvcDogMThweDsgcGFkZGluZy10b3A6IDE0cHg7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBmb250LXNpemU6IDAuODVyZW07JztcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBgPGEgaHJlZj1cIiNcIiBpZD1cImF1dGgtZ2F0ZS1lbWFpbC1hbHQtbGlua1wiXG4gICAgICAgIHN0eWxlPVwiY29sb3I6IHZhcigtLWFjY2VudCk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTtcIj5cbiAgICAgICAgT3Igc2lnbiBpbiB3aXRoIGVtYWlsIGluc3RlYWQgXHUyMTkyXG4gICAgICA8L2E+YDtcbiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgIGRpdi5xdWVyeVNlbGVjdG9yKCcjYXV0aC1nYXRlLWVtYWlsLWFsdC1saW5rJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZW5kZXJQcm92aWRlckNoYWxsZW5nZShlbWFpbEVuYWJsZWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICB9XG5cbiAgLy8gLS0tLSBUcmlnZ2VyIHBvaW50cyAtLS0tXG4gIC8vIDEuIFNTTyByZWRpcmVjdCBmcm9tIENhZGR5OiA/YXV0aD1yZXF1aXJlZFxuICAvLyAgICBXZSBjbGFpbSBvd25lcnNoaXAgaGVyZSAoc2V0IHdpbmRvdy5fX2RjXzA0OV9oYW5kbGVkID0gdHJ1ZSlcbiAgLy8gICAgQkVGT1JFIHRvdHAtYXV0aC5qcydzIG93biA/YXV0aD1yZXF1aXJlZCBjaGVjayBydW5zLCBzbyB0aGUgbGVnYWN5XG4gIC8vICAgIFRPVFAtb25seSBvdmVybGF5IGRvZXNuJ3QgZmxpY2tlciBpbiBmb3IgbXVsdGktcHJvdmlkZXIgaW5zdGFsbHMuXG4gIC8vICAgIFNpbmdsZS1wcm92aWRlciBUT1RQLW9ubHkgaW5zdGFsbHMgd29yayBiZWNhdXNlIHdlIHN0aWxsIGRlbGVnYXRlXG4gIC8vICAgIGJhY2sgdG8gd2luZG93Ll9zaG93VG90cE92ZXJsYXkoKSBpbiBgc2hvdygpYCBiZWxvdy5cbiAgd2luZG93Ll9fZGNfMDQ5X2hhbmRsZWQgPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIGlzQWxsb3dlZFJldHVyblVybChyZXR1cm5VcmwpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTChyZXR1cm5VcmwsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgaWYgKCFbJ2h0dHA6JywgJ2h0dHBzOiddLmluY2x1ZGVzKHBhcnNlZC5wcm90b2NvbCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChwYXJzZWQub3JpZ2luID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChwYXJzZWQucHJvdG9jb2wgIT09ICdodHRwczonKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGdsb2JhbHMuanMgaXMgY29uY2F0ZW5hdGVkIGJlZm9yZSB0aGlzIG1vZHVsZSBpbiBjb3JlLmpzLCBzbyBTSVRFIGlzXG4gICAgICAvLyBhdmFpbGFibGUgaGVyZS4gUGVybWl0IGV4YWN0IGhvc3RzIGFuZCBzdWJkb21haW5zIHVuZGVyIHRoZSBjb25maWd1cmVkXG4gICAgICAvLyBwcml2YXRlIFRMRCAoZm9yIGV4YW1wbGUgcGxleC5zYW1pKSwgd2hpbGUgcmVqZWN0aW5nIGxvb2thbGlrZXMgc3VjaCBhc1xuICAgICAgLy8gcGxleC5zYW1pLmV2aWwuZXhhbXBsZS5cbiAgICAgIGNvbnN0IHN1ZmZpeCA9IFNJVEUudGxkLnN0YXJ0c1dpdGgoJy4nKSA/IFNJVEUudGxkIDogYC4ke1NJVEUudGxkfWA7XG4gICAgICByZXR1cm4gcGFyc2VkLmhvc3RuYW1lID09PSBzdWZmaXguc2xpY2UoMSkgfHwgcGFyc2VkLmhvc3RuYW1lLmVuZHNXaXRoKHN1ZmZpeCk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIGlmICh1cmxQYXJhbXMuZ2V0KCdhdXRoJykgPT09ICdyZXF1aXJlZCcpIHtcbiAgICAvLyBQcmVzZXJ2ZSB0aGUgZ2F0ZWQgc2VydmljZSBkZXN0aW5hdGlvbiBzbyBzdWJtaXRUb3RwQ29kZSgpIGNhbiBhcHBlbmRcbiAgICAvLyB0aGUgb25lLXRpbWUgU1NPIGhhbmRvZmYgdG9rZW4gYW5kIHJldHVybiB0aGUgYnJvd3NlciB0byB0aGF0IGhvc3QuXG4gICAgY29uc3QgcmV0dXJuVXJsID0gdXJsUGFyYW1zLmdldCgncmV0dXJuJyk7XG4gICAgaWYgKHJldHVyblVybCAmJiBpc0FsbG93ZWRSZXR1cm5VcmwocmV0dXJuVXJsKSkge1xuICAgICAgdHJ5IHsgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndG90cF9yZWRpcmVjdCcsIHJldHVyblVybCk7IH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICAgIC8vIENsZWFuIFVSTCBcdTIwMTQgaGFwcGVucyBhZnRlciB3ZSd2ZSBjYXB0dXJlZCB0aGUgcmVkaXJlY3RcbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIC8vIFNob3cgb24gbmV4dCB0aWNrIHNvIHRoZSBET00gKHRoZSAudG90cC1jYXJkKSBpcyByZWFkeVxuICAgIHNldFRpbWVvdXQoc2hvdywgMCk7XG4gIH1cblxuICAvLyBFeHBvc2UgZm9yIGhvdC10cmlnZ2VyIGZyb20gb3RoZXIgbW9kdWxlcyAoZS5nLiBsb2dvdXQpXG4gIHdpbmRvdy5fc2hvd0F1dGhHYXRlID0gc2hvdztcbiAgd2luZG93Ll9hdXRoR2F0ZU1ldGhvZHMgPSBmZXRjaE1ldGhvZHM7XG59KSgpO1xuO1xuLy8gPT09PT0gVE9UUCBBVVRIRU5USUNBVElPTiBHQVRFID09PT09XG4oZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHVwZGF0ZVRvdHBMb2dvKCkge1xuICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG90cC1jYXJkJyk7XG4gICAgaWYgKCFjYXJkKSByZXR1cm47XG4gICAgY29uc3QgYmcgPSBnZXRDb21wdXRlZFN0eWxlKGNhcmQpLmJhY2tncm91bmRDb2xvcjtcbiAgICBjb25zdCBtID0gYmcubWF0Y2goL1xcZCsvZyk7XG4gICAgaWYgKCFtKSByZXR1cm47XG4gICAgY29uc3QgbHVtID0gKDAuMjk5ICogK21bMF0gKyAwLjU4NyAqICttWzFdICsgMC4xMTQgKiArbVsyXSkgLyAyNTU7XG4gICAgY29uc3QgZGFyayA9IGNhcmQucXVlcnlTZWxlY3RvcignLnRvdHAtbG9nby1kYXJrJyk7XG4gICAgY29uc3QgbGlnaHQgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy50b3RwLWxvZ28tbGlnaHQnKTtcbiAgICBpZiAoZGFyaykgZGFyay5zdHlsZS5kaXNwbGF5ID0gbHVtID4gMC41ID8gJ25vbmUnIDogJyc7XG4gICAgaWYgKGxpZ2h0KSBsaWdodC5zdHlsZS5kaXNwbGF5ID0gbHVtID4gMC41ID8gJycgOiAnbm9uZSc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG93VG90cE92ZXJsYXkoKSB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW92ZXJsYXknKTtcbiAgICBpZiAob3ZlcmxheSkge1xuICAgICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gICAgICBzZXRUaW1lb3V0KHVwZGF0ZVRvdHBMb2dvLCA1MCk7XG4gICAgICBjb25zdCBmaXJzdElucHV0ID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcudG90cC1kaWdpdHMgaW5wdXQnKTtcbiAgICAgIGlmIChmaXJzdElucHV0KSBzZXRUaW1lb3V0KCgpID0+IGZpcnN0SW5wdXQuZm9jdXMoKSwgMTAwKTtcbiAgICB9XG4gICAgLy8gUmVmcmVzaCB0aGUgXCJMb3N0IGFjY2Vzcz9cIiByZWNvdmVyeSBsaW5rIHZpc2liaWxpdHkgYmFzZWQgb24gc2VydmVyIHN0YXRlLlxuICAgIC8vIEhpZGVzIGl0c2VsZiBpZiBUT1RQIGlzIGhlYWx0aHk7IHNob3dzIGlmIHVucmVhZGFibGUvY29ycnVwdC4gVGhlIHVzZXJcbiAgICAvLyBjYW4gc3RpbGwgY2xpY2sgaXQgZXZlbiB3aGVuIGhlYWx0aHkgXHUyMDE0IGJ1dCB0aGUgcGFuZWwgd2lsbCBleHBsYWluIHRoZXJlJ3NcbiAgICAvLyBubyByZWNvdmVyeSBuZWVkZWQuIENoZWFwZXIgdGhhbiBnYXRpbmcgaXQuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuX3JlZnJlc2hSZWNvdmVyeUxpbmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdpbmRvdy5fcmVmcmVzaFJlY292ZXJ5TGluaygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhpZGVUb3RwT3ZlcmxheSgpIHtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtb3ZlcmxheScpO1xuICAgIGlmIChvdmVybGF5KSBvdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkU3NvSGFuZG9mZlRhcmdldChyZWRpcmVjdCwgdG9rZW4pIHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHJlZGlyZWN0LCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICBpZiAocGFyc2VkLm9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xuXG4gICAgY29uc3Qgc3VmZml4ID0gU0lURS50bGQuc3RhcnRzV2l0aCgnLicpID8gU0lURS50bGQgOiBgLiR7U0lURS50bGR9YDtcbiAgICBjb25zdCBpc1ByaXZhdGVIb3N0ID0gcGFyc2VkLmhvc3RuYW1lID09PSBzdWZmaXguc2xpY2UoMSkgfHwgcGFyc2VkLmhvc3RuYW1lLmVuZHNXaXRoKHN1ZmZpeCk7XG4gICAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gJ2h0dHBzOicgfHwgIWlzUHJpdmF0ZUhvc3QpIHJldHVybiBudWxsO1xuICAgIGlmICghdG9rZW4pIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IHJldHVyblBhdGggPSBgJHtwYXJzZWQucGF0aG5hbWV9JHtwYXJzZWQuc2VhcmNofSR7cGFyc2VkLmhhc2h9YDtcbiAgICBwYXJzZWQucGF0aG5hbWUgPSAnL2Rhc2hjYWRkeS1zc28nO1xuICAgIHBhcnNlZC5zZWFyY2ggPSAnJztcbiAgICBwYXJzZWQuaGFzaCA9ICcnO1xuICAgIHBhcnNlZC5zZWFyY2hQYXJhbXMuc2V0KCd0b2tlbicsIHRva2VuKTtcbiAgICBwYXJzZWQuc2VhcmNoUGFyYW1zLnNldCgncmV0dXJuJywgcmV0dXJuUGF0aCk7XG4gICAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xuICB9XG5cbiAgLy8gU2V0dXAgZGlnaXQgaW5wdXQgVVhcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtZGlnaXRzJyk7XG4gIGlmIChjb250YWluZXIpIHtcbiAgICBjb25zdCBpbnB1dHMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKTtcbiAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGlkeCkgPT4ge1xuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbC5zbGljZSgwLCAxKTtcbiAgICAgICAgaWYgKHZhbCAmJiBpZHggPCBpbnB1dHMubGVuZ3RoIC0gMSkgaW5wdXRzW2lkeCArIDFdLmZvY3VzKCk7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBBcnJheS5mcm9tKGlucHV0cykubWFwKGkgPT4gaS52YWx1ZSkuam9pbignJyk7XG4gICAgICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gNikgc3VibWl0VG90cENvZGUoY29kZSk7XG4gICAgICB9KTtcblxuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0JhY2tzcGFjZScgJiYgIWUudGFyZ2V0LnZhbHVlICYmIGlkeCA+IDApIHtcbiAgICAgICAgICBpbnB1dHNbaWR4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICBpbnB1dHNbaWR4IC0gMV0udmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBwYXN0ZWQgPSAoZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKSB8fCAnJykucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgICAgaWYgKHBhc3RlZC5sZW5ndGggPj0gNikge1xuICAgICAgICAgIGlucHV0cy5mb3JFYWNoKChpbnAsIGkpID0+IHsgaW5wLnZhbHVlID0gcGFzdGVkW2ldIHx8ICcnOyB9KTtcbiAgICAgICAgICBpbnB1dHNbNV0uZm9jdXMoKTtcbiAgICAgICAgICBzdWJtaXRUb3RwQ29kZShwYXN0ZWQuc2xpY2UoMCwgNikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFRvdHBDb2RlKGNvZGUpIHtcbiAgICBjb25zdCBlcnJvckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtZXJyb3InKTtcbiAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ1ZlcmlmeWluZy4uLic7XG4gICAgZXJyb3JFbC5jbGFzc05hbWUgPSAndG90cC1lcnJvciB2ZXJpZnlpbmcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3RvdHAvdmVyaWZ5Jywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgY29kZSB9KVxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIC8vIFVwZGF0ZSBjYWNoZWQgQ1NSRiB0b2tlbiBmcm9tIFRPVFAgcmVzcG9uc2UgKHNlcnZlciByb3RhdGVzIGl0IG9uIGxvZ2luKVxuICAgICAgICBpZiAoZGF0YS5jc3JmVG9rZW4pIHtcbiAgICAgICAgICBjc3JmVG9rZW4gPSBkYXRhLmNzcmZUb2tlbjtcbiAgICAgICAgfVxuICAgICAgICBoaWRlVG90cE92ZXJsYXkoKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcmVkaXJlY3RlZCBoZXJlIGZyb20gYW5vdGhlciBzZXJ2aWNlXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0ID0gc2FmZVNlc3Npb25HZXQoJ3RvdHBfcmVkaXJlY3QnKTtcbiAgICAgICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICAgICAgdHJ5IHsgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndG90cF9yZWRpcmVjdCcpOyB9IGNhdGNoIChfKSB7fVxuICAgICAgICAgIC8vIC5zYW1pIGlzIGFuIHVucmVnaXN0ZXJlZCBUTEQsIHNvIGJyb3dzZXJzIHNpbGVudGx5IGRyb3AgdGhlXG4gICAgICAgICAgLy8gRG9tYWluPS5zYW1pIHNlc3Npb24gY29va2llIG9uIGFueSBPVEhFUiAqLnNhbWkgc3ViZG9tYWluICh0aGV5XG4gICAgICAgICAgLy8gdHJlYXQgXCJzYW1pXCIgYXMgdGhlIGVmZmVjdGl2ZSBwdWJsaWMgc3VmZml4LCBzYW1lIHByb3RlY3Rpb25cbiAgICAgICAgICAvLyB0aGF0IGJsb2NrcyBhIERvbWFpbj0uY29tIHN1cGVyY29va2llKS4gVGhlIHRhcmdldCBzZXJ2aWNlIGNhbid0XG4gICAgICAgICAgLy8gc2VlIG91ciBzZXNzaW9uIGNvb2tpZSBubyBtYXR0ZXIgaG93IGl0J3MgYnVpbHQsIHNvIGluc3RlYWQgd2VcbiAgICAgICAgICAvLyBoYW5kIGl0IGEgb25lLXRpbWUgdG9rZW4gaW4gdGhlIFVSTDsgaXRzIGxvZ2luIHBhZ2UgZXhjaGFuZ2VzXG4gICAgICAgICAgLy8gdGhhdCBmb3IgaXRzIG93biBob3N0LW9ubHkgY29va2llIHZpYSAvYXV0aC9zc28tZXhjaGFuZ2UuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYnVpbGRTc29IYW5kb2ZmVGFyZ2V0KHJlZGlyZWN0LCBkYXRhLnNzb1Rva2VuKTtcbiAgICAgICAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbml0aWFsaXplIGRhc2hib2FyZFxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5pbml0aWFsaXplRGFzaGJvYXJkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2luZG93LmluaXRpYWxpemVEYXNoYm9hcmQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9IGRhdGEuZXJyb3IgfHwgJ0ludmFsaWQgY29kZSc7XG4gICAgICAgIGVycm9yRWwuY2xhc3NOYW1lID0gJ3RvdHAtZXJyb3InO1xuICAgICAgICBjb25zdCBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjdG90cC1kaWdpdHMgaW5wdXQnKTtcbiAgICAgICAgaW5wdXRzLmZvckVhY2goaSA9PiB7IGkudmFsdWUgPSAnJzsgfSk7XG4gICAgICAgIGlucHV0c1swXT8uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ0Nvbm5lY3Rpb24gZXJyb3InO1xuICAgICAgZXJyb3JFbC5jbGFzc05hbWUgPSAndG90cC1lcnJvcic7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlID9hdXRoPXJlcXVpcmVkIHJlZGlyZWN0IGZyb20gQ2FkZHkgU1NPLlxuICAvLyBEQy0wNDk6IGlmIHRoZSBhdXRoLWdhdGUgbW9kdWxlIHdpbGwgaGFuZGxlIHRoaXMgKG11bHRpLXByb3ZpZGVyXG4gIC8vIGluc3RhbGxzKSwgc2tpcCBvdXIgVE9UUC1vbmx5IGJyYW5jaCBlbnRpcmVseS4gU2luZ2xlLXByb3ZpZGVyXG4gIC8vIFRPVFAtb25seSBpbnN0YWxscyBjb250aW51ZSB0byB1c2UgdGhpcyBwYXRoIGJlY2F1c2UgYXV0aC1nYXRlLmpzXG4gIC8vIGRlbGVnYXRlcyBiYWNrIHRvIHdpbmRvdy5fc2hvd1RvdHBPdmVybGF5KCkuXG4gIGNvbnN0IF9fZGNfMDQ5X3NraXAgPSAhISh3aW5kb3cuX19kY18wNDlfaGFuZGxlZCk7XG4gIGlmICghX19kY18wNDlfc2tpcCAmJiB1cmxQYXJhbXMuZ2V0KCdhdXRoJykgPT09ICdyZXF1aXJlZCcpIHtcbiAgICBjb25zdCByZXR1cm5VcmwgPSB1cmxQYXJhbXMuZ2V0KCdyZXR1cm4nKTtcbiAgICBpZiAocmV0dXJuVXJsKSB7XG4gICAgICAvLyBWYWxpZGF0ZSByZWRpcmVjdCBVUkw6IG11c3QgYmUgc2FtZS1vcmlnaW4gb3IgaG9zdG5hbWUgbXVzdCBlbmQgd2l0aCBvdXIgVExEXG4gICAgICAvLyAocHJldmVudHMgb3BlbiByZWRpcmVjdCB2aWEgaW5jbHVkZXMoKSBieXBhc3MgbGlrZSBldmlsLmNvbT9xPS5zYW1pKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTChyZXR1cm5VcmwsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICBjb25zdCBob3N0bmFtZSA9IHBhcnNlZC5ob3N0bmFtZTtcbiAgICAgICAgY29uc3QgaXNTYW1lT3JpZ2luID0gcGFyc2VkLm9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3QgdGxkU3VmZml4ID0gU0lURS50bGQuc3RhcnRzV2l0aCgnLicpID8gU0lURS50bGQgOiAnLicgKyBTSVRFLnRsZDtcbiAgICAgICAgY29uc3QgaXNPdXJUbGQgPSBob3N0bmFtZS5lbmRzV2l0aCh0bGRTdWZmaXgpIHx8IGhvc3RuYW1lID09PSB0bGRTdWZmaXguc3Vic3RyaW5nKDEpO1xuICAgICAgICBpZiAoaXNTYW1lT3JpZ2luIHx8IGlzT3VyVGxkKSB7XG4gICAgICAgICAgc2FmZVNlc3Npb25TZXQoJ3RvdHBfcmVkaXJlY3QnLCByZXR1cm5VcmwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIC8vIEludmFsaWQgVVJMIFx1MjAxNCByZWplY3QgcmVkaXJlY3RcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2xlYW4gVVJMXG4gICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgfVxuXG4gIHdpbmRvdy5fc2hvd1RvdHBPdmVybGF5ID0gc2hvd1RvdHBPdmVybGF5O1xufSkoKTtcbjtcbi8vID09PT09IFRPVFAgUkVDT1ZFUlkgRkxPVyA9PT09PVxuLy8gUHVibGljLCB1bmF1dGhlbnRpY2F0ZWQgcmVjb3ZlcnkgcGF0aCBmb3IgdXNlcnMgd2hvIGNhbid0IGxvZyBpbi5cbi8vIERlc2lnbmVkIGZvciB0aGUgXCJlbmNyeXB0aW9uIGtleSByb3RhdGVkIGFuZCBsb3N0IG15IGF1dGhlbnRpY2F0b3JcIiBjYXNlLlxuLy8gVGhlIGZsb3cgaXM6XG4vL1xuLy8gIDEuIE9uIFRPVFAgb3ZlcmxheSBzaG93LCBjYWxsIC9hcGkvdjEvdG90cC9yZWNvdmVyeS1pbmZvIChwdWJsaWMpLlxuLy8gICAgIElmIHN0YXR1cyA9PT0gJ3VucmVhZGFibGUnLCBzaG93IHRoZSBcIkxvc3QgYWNjZXNzP1wiIGxpbmsgb24gdGhlIG92ZXJsYXkuXG4vLyAgMi4gVXNlciBjbGlja3MgbGluayBcdTIxOTIgb3BlbnMgcmVjb3ZlcnkgcGFuZWwuXG4vLyAgMy4gVXNlciBwYXN0ZXMgQmFzZTMyIHNlY3JldCBcdTIxOTIgUE9TVCAvYXBpL3YxL3RvdHAvc2V0dXAgd2l0aCB7c2VjcmV0OiAuLi59LlxuLy8gICAgIEJhY2tlbmQgc3RvcmVzIGFzIHRvdHAucGVuZGluZ19zZWNyZXQgKGVuY3J5cHRlZCB3aXRoIGN1cnJlbnQga2V5KS5cbi8vICA0LiBQYW5lbCBzd2l0Y2hlcyB0byBcInZlcmlmeVwiIG1vZGUuIFVzZXIgZW50ZXJzIGEgY29kZSBmcm9tIHRoZVxuLy8gICAgIG5ld2x5LWFkZGVkIGF1dGhlbnRpY2F0b3IgZW50cnkuIFBPU1QgL2FwaS92MS90b3RwL3ZlcmlmeS1zZXR1cFxuLy8gICAgIHByb21vdGVzIHBlbmRpbmcgXHUyMTkyIGFjdGl2ZSBhbmQgc3RhcnRzIGEgc2Vzc2lvbi5cbi8vICA1LiBoaWRlVG90cE92ZXJsYXkoKSBhbmQgaW5pdGlhbGl6ZURhc2hib2FyZCgpIFx1MjAxNCBzYW1lIGFzIG5vcm1hbCBsb2dpbi5cbi8vXG4vLyBUaGUgcmVjb3ZlcnkgZmxvdyBuZXZlciByZXF1aXJlcyB0aGUgdXNlciB0byBiZSBsb2dnZWQgaW4uIEl0IGRvZXMgcmVxdWlyZVxuLy8gdGhlbSB0byBoYXZlIHRoZWlyIEJhc2UzMiBzZWNyZXQgc2F2ZWQgKGUuZy4gcGFzc3dvcmQgbWFuYWdlciwgc2NyZWVuc2hvdCxcbi8vIHRoZSBcIkRvd25sb2FkIGJhY2t1cCBmaWxlXCIgd2Ugb2ZmZXIgYXQgc2V0dXAgdGltZSBcdTIwMTQgc2VlIHRvdHAtc2V0dGluZ3MuanMpLlxuXG4oZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBcdTI1MDBcdTI1MDAgSGVscGVycyBcdTI1MDBcdTI1MDBcbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hSZWNvdmVyeUluZm8oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS90b3RwL3JlY292ZXJ5LWluZm8nLCB7IGNhY2hlOiAnbm8tc3RvcmUnIH0pO1xuICAgICAgcmV0dXJuIGF3YWl0IHIuanNvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXM6ICd1bmtub3duJywgaGludDogJ0NvdWxkIG5vdCBjb250YWN0IHNlcnZlcicgfTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG93UmVjb3ZlcnlMaW5rKHNob3cpIHtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktbGluaycpO1xuICAgIGlmIChsaW5rKSBsaW5rLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gJycgOiAnbm9uZSc7XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUmVjb3ZlcnlQYW5lbCgpIHtcbiAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LXBhbmVsJyk7XG4gICAgaWYgKHBhbmVsKSBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1zdGF0dXMnKTtcbiAgICBjb25zdCBpbXBvcnRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWltcG9ydCcpO1xuICAgIGNvbnN0IHZlcmlmeUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktdmVyaWZ5Jyk7XG4gICAgaWYgKGltcG9ydEVsKSBpbXBvcnRFbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgaWYgKHZlcmlmeUVsKSB2ZXJpZnlFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIC8vIFJlc2V0IHN0YXRlXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktZXJyb3InKS50ZXh0Q29udGVudCA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWNvbmZpcm0tZXJyb3InKS50ZXh0Q29udGVudCA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LXNlY3JldCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktY29kZScpLnZhbHVlID0gJyc7XG4gICAgLy8gU2hvdyBjdXJyZW50IHN0YXR1c1xuICAgIGZldGNoUmVjb3ZlcnlJbmZvKCkudGhlbihpbmZvID0+IHtcbiAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gaW5mby5oaW50IHx8ICcnO1xuICAgICAgLy8gQ29sb3ItY29kZSB0aGUgc3RhdHVzIGJhbm5lclxuICAgICAgaWYgKGluZm8uc3RhdHVzID09PSAnaGVhbHRoeScpIHtcbiAgICAgICAgc3RhdHVzRWwuc3R5bGUuYm9yZGVyQ29sb3IgPSAndmFyKC0tb2stZmcsICM3ZWYyZmYpJztcbiAgICAgIH0gZWxzZSBpZiAoaW5mby5zdGF0dXMgPT09ICd1bnJlYWRhYmxlJykge1xuICAgICAgICBzdGF0dXNFbC5zdHlsZS5ib3JkZXJDb2xvciA9ICd2YXIoLS1iYWQtZmcsICNmZjlhYTMpJztcbiAgICAgICAgc3RhdHVzRWwuc3R5bGUuYmFja2dyb3VuZCA9ICdjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYmFkLWZnKSA2JSwgdHJhbnNwYXJlbnQpJztcbiAgICAgIH0gZWxzZSBpZiAoaW5mby5zdGF0dXMgPT09ICdub3RfY29uZmlndXJlZCcpIHtcbiAgICAgICAgc3RhdHVzRWwuc3R5bGUuYm9yZGVyQ29sb3IgPSAndmFyKC0tbXV0ZWQpJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c0VsLnN0eWxlLmJvcmRlckNvbG9yID0gJ3ZhcigtLWJvcmRlciknO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3Zlcnktc2VjcmV0Jyk/LmZvY3VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlUmVjb3ZlcnlQYW5lbCgpIHtcbiAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LXBhbmVsJyk7XG4gICAgaWYgKHBhbmVsKSBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVjb3ZlcnlTZWNyZXQoKSB7XG4gICAgY29uc3Qgc2VjcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3Zlcnktc2VjcmV0JykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGVycm9yRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1lcnJvcicpO1xuICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnJztcblxuICAgIGlmICghc2VjcmV0KSB7XG4gICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ1Bhc3RlIHlvdXIgQmFzZTMyIGtleSBmaXJzdCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghL15bQS1aYS16Mi03XFxzXSs9KiQvLnRlc3Qoc2VjcmV0KSkge1xuICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICdJbnZhbGlkIEJhc2UzMiBmb3JtYXQgXHUyMDE0IHNob3VsZCBiZSBsZXR0ZXJzIEEtWiBhbmQgZGlnaXRzIDItNyBvbmx5JztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQT1NUIC9hcGkvdjEvdG90cC9zZXR1cCB3aXRoIHtzZWNyZXR9IFx1MjAxNCBiYWNrZW5kIHN0b3JlcyBhcyBwZW5kaW5nXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS90b3RwL3NldHVwJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2VjcmV0IH0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByLmpzb24oKTtcbiAgICAgIGlmICghci5vayB8fCAhZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSBkYXRhLmVycm9yIHx8IGRhdGEubWVzc2FnZSB8fCAnUmVzdG9yZSBmYWlsZWQnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBTd2l0Y2ggcGFuZWwgdG8gdmVyaWZ5IG1vZGVcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWltcG9ydCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS12ZXJpZnknKS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWNvZGUnKT8uZm9jdXMoKSwgMTAwKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ05ldHdvcmsgZXJyb3IgXHUyMDE0IHRyeSBhZ2Fpbic7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVjb3ZlcnlDb2RlKCkge1xuICAgIGNvbnN0IGNvZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1jb2RlJykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGVycm9yRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1jb25maXJtLWVycm9yJyk7XG4gICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICcnO1xuXG4gICAgaWYgKCEvXlxcZHs2fSQvLnRlc3QoY29kZSkpIHtcbiAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnRW50ZXIgYSA2LWRpZ2l0IGNvZGUnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFBPU1QgL2FwaS92MS90b3RwL3ZlcmlmeS1zZXR1cCBcdTIwMTQgcHJvbW90ZXMgcGVuZGluZyBcdTIxOTIgYWN0aXZlICsgc3RhcnRzIHNlc3Npb25cbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IGZldGNoKCcvYXBpL3YxL3RvdHAvdmVyaWZ5LXNldHVwJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgY29kZSB9KVxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgci5qc29uKCk7XG4gICAgICBpZiAoIXIub2sgfHwgIWRhdGEuc3VjY2Vzcykge1xuICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gZGF0YS5lcnJvciB8fCBkYXRhLm1lc3NhZ2UgfHwgJ0ludmFsaWQgY29kZSc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWNvZGUnKS52YWx1ZSA9ICcnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1jb2RlJyk/LmZvY3VzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFN1Y2Nlc3MgXHUyMDE0IGhpZGUgZXZlcnl0aGluZyBhbmQgaW5pdGlhbGl6ZSBkYXNoYm9hcmRcbiAgICAgIGNsb3NlUmVjb3ZlcnlQYW5lbCgpO1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW92ZXJsYXknKTtcbiAgICAgIGlmIChvdmVybGF5KSBvdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93LmluaXRpYWxpemVEYXNoYm9hcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2luZG93LmluaXRpYWxpemVEYXNoYm9hcmQoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ05ldHdvcmsgZXJyb3IgXHUyMDE0IHRyeSBhZ2Fpbic7XG4gICAgfVxuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFdpcmUgdXAgaGFuZGxlcnMgXHUyNTAwXHUyNTAwXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNob3ctcmVjb3ZlcnknKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBvcGVuUmVjb3ZlcnlQYW5lbCgpO1xuICB9KTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcmVjb3ZlcnktY2xvc2UnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZVJlY292ZXJ5UGFuZWwpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1zdWJtaXQnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdWJtaXRSZWNvdmVyeVNlY3JldCk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXJlY292ZXJ5LWNvbmZpcm0nKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdWJtaXRSZWNvdmVyeUNvZGUpO1xuXG4gIC8vIEVudGVyIGtleSBzdWJtaXRzIGluIHNlY3JldCBmaWVsZFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1zZWNyZXQnKT8uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7IGUucHJldmVudERlZmF1bHQoKTsgc3VibWl0UmVjb3ZlcnlTZWNyZXQoKTsgfVxuICB9KTtcbiAgLy8gRW50ZXIga2V5IHN1Ym1pdHMgaW4gY29kZSBmaWVsZFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1yZWNvdmVyeS1jb2RlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgeyBlLnByZXZlbnREZWZhdWx0KCk7IHN1Ym1pdFJlY292ZXJ5Q29kZSgpOyB9XG4gIH0pO1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBQdWJsaWMgQVBJIFx1MjUwMFx1MjUwMFxuICAvLyBDYWxsZWQgYnkgdG90cC1hdXRoLmpzIGFmdGVyIHNob3dpbmcgdGhlIG92ZXJsYXksIHNvIHdlIGNhbiBkZWNpZGUgd2hldGhlclxuICAvLyB0byBzaG93IHRoZSByZWNvdmVyeSBsaW5rLiBXZSBkbyB0aGlzIHdpdGggYSBwdWJsaWMgZW5kcG9pbnQgdGhhdCBkb2Vzbid0XG4gIC8vIHJlcXVpcmUgYXV0aCBcdTIwMTQgcGVyZmVjdCBmb3IgdGhlIGxvY2tlZC1vdXQgc3RhdGUuXG4gIHdpbmRvdy5fcmVmcmVzaFJlY292ZXJ5TGluayA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBmZXRjaFJlY292ZXJ5SW5mbygpO1xuICAgIC8vIFNob3cgdGhlIGxpbmsgaW4gYW55IG5vbi1oZWFsdGh5IHN0YXRlICh1bnJlYWRhYmxlIC8gY29ycnVwdCAvIHVua25vd24pLlxuICAgIC8vIFRoZSBoaW50IGluc2lkZSB0aGUgcGFuZWwgdGVsbHMgdGhlIHVzZXIgd2hhdCB0aGUgYWN0dWFsIGlzc3VlIGlzLlxuICAgIGlmIChpbmZvICYmIGluZm8uc3VjY2VzcyAmJiBpbmZvLnN0YXR1cyAmJiBpbmZvLnN0YXR1cyAhPT0gJ2hlYWx0aHknKSB7XG4gICAgICBzaG93UmVjb3ZlcnlMaW5rKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93UmVjb3ZlcnlMaW5rKGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH07XG59KSgpO1xuO1xuLy8gPT09PT0gU0VSVklDRSBDUkVERU5USUFMUyA9PT09PVxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCBlcnJvckhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKCk7XG4gIGluamVjdE1vZGFsKCdmb2xkZXItYnJvd3Nlci1tb2RhbCcsIGA8ZGl2IGlkPVwiZm9sZGVyLWJyb3dzZXItbW9kYWxcIiBjbGFzcz1cIndlYXRoZXItbW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwid2VhdGhlci1tb2RhbC1jb250ZW50XCIgc3R5bGU9XCJtaW4td2lkdGg6IDUwMHB4OyBtYXgtd2lkdGg6IDcwMHB4OyBtYXgtaGVpZ2h0OiA4MHZoO1wiPlxuICAgICAgPGgzPlx1RDgzRFx1RENDMiBCcm93c2UgZm9yIE1lZGlhIEZvbGRlcnM8L2gzPlxuXG4gICAgICA8ZGl2IGlkPVwiZm9sZGVyLWJyb3dzZXItcGF0aFwiIHN0eWxlPVwicGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlci1yYWRpdXM6IDZweDsgbWFyZ2luLWJvdHRvbTogMTJweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgZm9udC1zaXplOiAwLjlyZW07IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcIj5cbiAgICAgICAgL1xuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgaWQ9XCJmb2xkZXItYnJvd3Nlci1saXN0XCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiA0MDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNnB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPkxvYWRpbmcuLi48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGlkPVwiZm9sZGVyLWJyb3dzZXItc2VsZWN0ZWRcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEycHg7IHBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zdWNjZXNzKSAxMCUsIHRyYW5zcGFyZW50KTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc3VjY2Vzcyk7IGJvcmRlci1yYWRpdXM6IDZweDsgZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMC44NXJlbTsgY29sb3I6IHZhcigtLXN1Y2Nlc3MpOyBtYXJnaW4tYm90dG9tOiA2cHg7XCI+U2VsZWN0ZWQgZm9sZGVyczo8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cImZvbGRlci1icm93c2VyLXNlbGVjdGVkLWxpc3RcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiA2cHg7XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDogMTZweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImZvbGRlci1icm93c2VyLXNlbGVjdC1jdXJyZW50XCIgY2xhc3M9XCJidG4tYWNjZW50XCI+XG4gICAgICAgICAgKyBBZGQgQ3VycmVudCBGb2xkZXJcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvdy1nYXBcIj5cbiAgICAgICAgICA8YnV0dG9uIGlkPVwiZm9sZGVyLWJyb3dzZXItY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImZvbGRlci1icm93c2VyLWRvbmVcIiBzdHlsZT1cImJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zdWNjZXNzKSAyMCUsIHRyYW5zcGFyZW50KTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1zdWNjZXNzKTsgY29sb3I6IHZhcigtLXN1Y2Nlc3MpO1wiPkRvbmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCk7XG5cbiAgaW5qZWN0TW9kYWwoJ3NlcnZpY2UtY3JlZHMtbW9kYWwnLCBgPGRpdiBpZD1cInNlcnZpY2UtY3JlZHMtbW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VydmljZS1jcmVkcy1jb250ZW50XCI+XG4gICAgICA8aDMgaWQ9XCJzdmMtY3JlZHMtdGl0bGVcIiBzdHlsZT1cIm1hcmdpbjogMCAwIDRweDsgZm9udC1zaXplOiAxLjA1cmVtO1wiPlNlcnZpY2UgQ3JlZGVudGlhbHM8L2gzPlxuICAgICAgPHAgaWQ9XCJzdmMtY3JlZHMtZGVzY1wiIHN0eWxlPVwiZm9udC1zaXplOiAwLjc1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW46IDAgMCAxNHB4O1wiPkNyZWRlbnRpYWxzIGFyZSBpbmplY3RlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYWNjZXNzaW5nIHRoaXMgc2VydmljZS48L3A+XG5cbiAgICAgIDwhLS0gU3RhdHVzIGluZGljYXRvciAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsgbWFyZ2luLWJvdHRvbTogMTJweDtcIj5cbiAgICAgICAgPHNwYW4gaWQ9XCJzdmMtY3JlZHMtZG90XCIgY2xhc3M9XCJzdGF0dXMtZG90XCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBpZD1cInN2Yy1jcmVkcy1zdGF0dXNcIiBjbGFzcz1cInRleHQtbXV0ZWQtc21cIj5ObyBjcmVkZW50aWFscyBzdG9yZWQ8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTZWVkaG9zdCBjcmVkZW50aWFscyAoc2hvd24gZm9yIGV4dGVybmFsIHNlcnZpY2VzKSAtLT5cbiAgICAgIDxkaXYgaWQ9XCJzdmMtY3JlZHMtc2VlZGhvc3RcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi1ib3R0b206IDE0cHg7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWJvbGRcIj5TZWVkaG9zdCBMb2dpbjwvbGFiZWw+XG4gICAgICAgIDxwIGNsYXNzPVwiaGludC1taWNyb1wiPlVzZXJuYW1lIHNoYXJlZCBhY3Jvc3MgYWxsIHNlcnZpY2VzLiBQYXNzd29yZCBpcyBwZXItc2VydmljZS48L3A+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic3ZjLXNlZWRob3N0LXVzZXJcIiBwbGFjZWhvbGRlcj1cIlVzZXJuYW1lIChzaGFyZWQpXCIgYXV0b2NvbXBsZXRlPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogOHB4IDEwcHg7IG1hcmdpbi1ib3R0b206IDZweDsgYmFja2dyb3VuZDogdmFyKC0tYmcpOyBjb2xvcjogdmFyKC0tZmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiA2cHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIiAvPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgaWQ9XCJzdmMtc2VlZGhvc3QtcGFzc1wiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBhdXRvY29tcGxldGU9XCJjdXJyZW50LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtY3JlZHNcIiAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQVBJIEtleSAoc2hvd24gZm9yIGFyciBzZXJ2aWNlcyBvciBzZXJ2aWNlcyB3aXRoIEFQSSBrZXkgc3VwcG9ydCkgLS0+XG4gICAgICA8ZGl2IGlkPVwic3ZjLWNyZWRzLWFwaWtleVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWFyZ2luLWJvdHRvbTogMTRweDtcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtYm9sZFwiPkFQSSBLZXk8L2xhYmVsPlxuICAgICAgICA8cCBjbGFzcz1cImhpbnQtbWljcm9cIj5CeXBhc3NlcyB0aGUgYXBwJ3Mgb3duIGxvZ2luIHNjcmVlbjwvcD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzdmMtYXBpa2V5LWlucHV0XCIgcGxhY2Vob2xkZXI9XCJBUEkga2V5XCJcbiAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDhweCAxMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZyk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAwLjg1cmVtOyBmb250LWZhbWlseTogbW9ub3NwYWNlOyBib3gtc2l6aW5nOiBib3JkZXItYm94O1wiIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBRdWFsaXR5IFByb2ZpbGUgKHNob3duIGZvciByYWRhcnIvc29uYXJyIG9ubHkpIC0tPlxuICAgICAgPGRpdiBpZD1cInN2Yy1jcmVkcy1xdWFsaXR5XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBtYXJnaW4tYm90dG9tOiAxNHB4O1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1ib2xkXCI+UXVhbGl0eSBQcm9maWxlPC9sYWJlbD5cbiAgICAgICAgPHAgY2xhc3M9XCJoaW50LW1pY3JvXCI+VXNlZCB3aGVuIHJlcXVlc3RpbmcgdmlhIFNlZXJyPC9wPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgPHNlbGVjdCBpZD1cInN2Yy1xdWFsaXR5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImZsZXg6IDE7IHBhZGRpbmc6IDhweCAxMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZyk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAwLjg1cmVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94O1wiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIEVudGVyIEFQSSBrZXkgZmlyc3QgLS08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8YnV0dG9uIGlkPVwic3ZjLXF1YWxpdHktZmV0Y2hcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogOHB4IDEycHg7IGZvbnQtc2l6ZTogMC43NXJlbTsgY3Vyc29yOiBwb2ludGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxuICAgICAgICAgICAgRmV0Y2hcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJzdmMtcXVhbGl0eS1zdGF0dXNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC43NXJlbTsgbWFyZ2luLXRvcDogNHB4OyBtaW4taGVpZ2h0OiAxZW07XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQZXItc2VydmljZSBCYXNpYyBBdXRoIChzaG93biBmb3Igbm9uLWV4dGVybmFsIHNlcnZpY2VzKSAtLT5cbiAgICAgIDxkaXYgaWQ9XCJzdmMtY3JlZHMtYmFzaWNcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi1ib3R0b206IDE0cHg7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWJvbGRcIj5TZXJ2aWNlIExvZ2luPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzdmMtYmFzaWMtdXNlclwiIHBsYWNlaG9sZGVyPVwiVXNlcm5hbWVcIiBhdXRvY29tcGxldGU9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiA4cHggMTBweDsgbWFyZ2luLXRvcDogNnB4OyBtYXJnaW4tYm90dG9tOiA2cHg7IGJhY2tncm91bmQ6IHZhcigtLWJnKTsgY29sb3I6IHZhcigtLWZnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDAuODVyZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7XCIgLz5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGlkPVwic3ZjLWJhc2ljLXBhc3NcIiBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCIgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNyZWRzXCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEVycm9yIG1lc3NhZ2UgLS0+XG4gICAgICA8ZGl2IGlkPVwic3ZjLWNyZWRzLWVycm9yXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBwYWRkaW5nOiA4cHggMTBweDsgbWFyZ2luLWJvdHRvbTogMTBweDsgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWVycm9yLCAjYzYyODI4KSAxMiUsIHRyYW5zcGFyZW50KTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZXJyb3IsICNjNjI4MjgpOyBib3JkZXItcmFkaXVzOiA2cHg7IGZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tZXJyb3IsICNjNjI4MjgpO1wiPjwvZGl2PlxuXG4gICAgICA8IS0tIEJ1dHRvbnMgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IG1hcmdpbi10b3A6IDE0cHg7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJzdmMtY3JlZHMtc2F2ZVwiIGNsYXNzPVwiYnRuLWFjY2VudC1zb2xpZFwiIHN0eWxlPVwiZmxleDogMTsgcGFkZGluZzogOXB4OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDAuODVyZW07XCI+XG4gICAgICAgICAgU2F2ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInN2Yy1jcmVkcy1jbGVhclwiIHN0eWxlPVwicGFkZGluZzogOXB4IDE0cHg7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogdmFyKC0tYmFkLWZnLCAjZmY5YWEzKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmFkLWZnLCAjZmY5YWEzKTsgYm9yZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtc2l6ZTogMC44NXJlbTsgZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgICBDbGVhclxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInN2Yy1jcmVkcy1jbG9zZVwiIHN0eWxlPVwicGFkZGluZzogOXB4IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDAuODVyZW07XCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PmApO1xuXG4gIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtY3JlZHMtbW9kYWwnKTtcbiAgbGV0IGN1cnJlbnRTZXJ2aWNlID0gbnVsbDtcbiAgY29uc3QgYXJyU2VydmljZXMgPSBbJ3NvbmFycicsICdyYWRhcnInLCAncHJvd2xhcnInLCAnb3ZlcnNlZXJyJ107XG4gIGNvbnN0IHF1YWxpdHlQcm9maWxlU2VydmljZXMgPSBbJ3NvbmFycicsICdyYWRhcnInXTtcblxuICBmdW5jdGlvbiBnZXRTZXJ2aWNlVXJsKHNlcnZpY2UpIHtcbiAgICByZXR1cm4gc2VydmljZS5leHRlcm5hbFVybCB8fCBzZXJ2aWNlLnVybCB8fCAnJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3dFcnJvcihtc2cpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtY3JlZHMtZXJyb3InKTtcbiAgICBlbC50ZXh0Q29udGVudCA9IG1zZztcbiAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIH1cblxuICBmdW5jdGlvbiBoaWRlRXJyb3IoKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLWVycm9yJyk7XG4gICAgZWwudGV4dENvbnRlbnQgPSAnJztcbiAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgd2luZG93Lm9wZW5TZXJ2aWNlQ3JlZHNNb2RhbCA9IGFzeW5jIGZ1bmN0aW9uKHNlcnZpY2UpIHtcbiAgICBjdXJyZW50U2VydmljZSA9IHNlcnZpY2U7XG4gICAgaGlkZUVycm9yKCk7XG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLXRpdGxlJyk7XG4gICAgY29uc3QgZGVzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtY3JlZHMtZGVzYycpO1xuICAgIGNvbnN0IHNlZWRob3N0U2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtY3JlZHMtc2VlZGhvc3QnKTtcbiAgICBjb25zdCBhcGlrZXlTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1hcGlrZXknKTtcbiAgICBjb25zdCBiYXNpY1NlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLWJhc2ljJyk7XG4gICAgY29uc3QgcXVhbGl0eVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLXF1YWxpdHknKTtcblxuICAgIHRpdGxlLnRleHRDb250ZW50ID0gc2VydmljZS5uYW1lICsgJyBDcmVkZW50aWFscyc7XG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNlY3Rpb25zIHRvIHNob3dcbiAgICBjb25zdCBpc0V4dCA9ICEhc2VydmljZS5pc0V4dGVybmFsO1xuICAgIGNvbnN0IGlzQXJyID0gYXJyU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCkgfHwgYXJyU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5hcHBUZW1wbGF0ZSk7XG4gICAgY29uc3QgaGFzUXVhbGl0eSA9IHF1YWxpdHlQcm9maWxlU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCkgfHwgcXVhbGl0eVByb2ZpbGVTZXJ2aWNlcy5pbmNsdWRlcyhzZXJ2aWNlLmFwcFRlbXBsYXRlKTtcblxuICAgIHNlZWRob3N0U2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gaXNFeHQgPyAnJyA6ICdub25lJztcbiAgICBhcGlrZXlTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSBpc0FyciA/ICcnIDogJ25vbmUnO1xuICAgIHF1YWxpdHlTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSBoYXNRdWFsaXR5ID8gJycgOiAnbm9uZSc7XG4gICAgYmFzaWNTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAhaXNFeHQgPyAnJyA6ICdub25lJztcblxuICAgIC8vIFJlc2V0IHF1YWxpdHkgZHJvcGRvd25cbiAgICBjb25zdCBxdWFsU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1xdWFsaXR5LXNlbGVjdCcpO1xuICAgIHF1YWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBFbnRlciBBUEkga2V5IGZpcnN0IC0tPC9vcHRpb24+JztcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXF1YWxpdHktc3RhdHVzJykudGV4dENvbnRlbnQgPSAnJztcblxuICAgIGlmIChpc0V4dCkge1xuICAgICAgZGVzYy50ZXh0Q29udGVudCA9ICdTZWVkaG9zdCBjcmVkZW50aWFscyBhdXRvLWxvZ2luIHBhc3QgdGhlIEhUVFAgcHJvbXB0LiBBUEkga2V5IGJ5cGFzc2VzIHRoZSBhcHAgbG9naW4uJztcbiAgICAgIC8vIFVwZGF0ZSBwYXNzd29yZCBwbGFjZWhvbGRlciB3aXRoIHNlcnZpY2UgbmFtZVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1zZWVkaG9zdC1wYXNzJykucGxhY2Vob2xkZXIgPSBgUGFzc3dvcmQgZm9yICR7c2VydmljZS5uYW1lfWA7XG4gICAgfSBlbHNlIGlmIChpc0Fycikge1xuICAgICAgZGVzYy50ZXh0Q29udGVudCA9ICdBUEkga2V5IGJ5cGFzc2VzIHRoZSBhcHAgbG9naW4gc2NyZWVuIGF1dG9tYXRpY2FsbHkuJztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVzYy50ZXh0Q29udGVudCA9ICdDcmVkZW50aWFscyBhcmUgaW5qZWN0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFjY2Vzc2luZyB0aGlzIHNlcnZpY2UuJztcbiAgICB9XG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIGNyZWRlbnRpYWxzXG4gICAgYXdhaXQgbG9hZFNlcnZpY2VDcmVkcyhzZXJ2aWNlKTtcbiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZFNlcnZpY2VDcmVkcyhzZXJ2aWNlKSB7XG4gICAgY29uc3QgZG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1kb3QnKTtcbiAgICBjb25zdCBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLXN0YXR1cycpO1xuICAgIGNvbnN0IGNsZWFyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1jbGVhcicpO1xuICAgIGxldCBoYXNDcmVkcyA9IGZhbHNlO1xuXG4gICAgLy8gTG9hZCBzZWVkaG9zdCBjcmVkcyAoc2hhcmVkIHVzZXJuYW1lICsgcGVyLXNlcnZpY2UgcGFzc3dvcmQpXG4gICAgaWYgKHNlcnZpY2UuaXNFeHRlcm5hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYC9hcGkvdjEvc2VlZGhvc3QtY3JlZHM/c2VydmljZUlkPSR7c2VydmljZS5pZH1gKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXNlZWRob3N0LXVzZXInKS52YWx1ZSA9IGRhdGEudXNlcm5hbWUgfHwgJyc7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzQ3JlZGVudGlhbHMpIGhhc0NyZWRzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXNlZWRob3N0LXVzZXInKS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXNlZWRob3N0LXBhc3MnKS52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIC8vIExvYWQgcGVyLXNlcnZpY2UgY3JlZHNcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYC9hcGkvdjEvc2VydmljZXMvJHtzZXJ2aWNlLmlkfS9jcmVkZW50aWFsc2ApO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIGlmIChkYXRhLmhhc0FwaUtleSkge1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtYXBpa2V5LWlucHV0JykudmFsdWUgPSAnXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyJztcbiAgICAgICAgICBoYXNDcmVkcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1hcGlrZXktaW5wdXQnKS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmhhc0Jhc2ljQXV0aCAmJiAhc2VydmljZS5pc0V4dGVybmFsKSB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1iYXNpYy11c2VyJykudmFsdWUgPSBkYXRhLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgICAgIGhhc0NyZWRzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWJhc2ljLXVzZXInKS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWJhc2ljLXBhc3MnKSkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1iYXNpYy1wYXNzJykudmFsdWUgPSAnJztcblxuICAgIC8vIExvYWQgcXVhbGl0eSBwcm9maWxlIGZvciBhcnIgc2VydmljZXNcbiAgICBjb25zdCBzdmNJZCA9IHNlcnZpY2UuaWQgfHwgc2VydmljZS5hcHBUZW1wbGF0ZTtcbiAgICBpZiAocXVhbGl0eVByb2ZpbGVTZXJ2aWNlcy5pbmNsdWRlcyhzdmNJZCkpIHtcbiAgICAgIGF3YWl0IGxvYWRRdWFsaXR5UHJvZmlsZXMoc2VydmljZSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0NyZWRzKSB7XG4gICAgICBkb3Quc3R5bGUuYmFja2dyb3VuZCA9ICd2YXIoLS1vay1mZywgIzc0ZGZjNCknO1xuICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLW9rLWZnLCAjNzRkZmM0KSc7XG4gICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnQ3JlZGVudGlhbHMgc3RvcmVkJztcbiAgICAgIGNsZWFyQnRuLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIC8vIFVwZGF0ZSB0aGUgY2FyZCBidXR0b25cbiAgICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjcmVkcy1idG4tJHtzZXJ2aWNlLmlkfWApO1xuICAgICAgaWYgKGJ0bikgYnRuLmNsYXNzTGlzdC5hZGQoJ2hhcy1jcmVkcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3Quc3R5bGUuYmFja2dyb3VuZCA9ICd2YXIoLS1tdXRlZCknO1xuICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJ3ZhcigtLW11dGVkKSc7XG4gICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnTm8gY3JlZGVudGlhbHMgc3RvcmVkJztcbiAgICAgIGNsZWFyQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgLy8gRmV0Y2ggYW5kIHBvcHVsYXRlIHF1YWxpdHkgcHJvZmlsZXMgZHJvcGRvd25cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZFF1YWxpdHlQcm9maWxlcyhzZXJ2aWNlKSB7XG4gICAgY29uc3QgcXVhbFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtcXVhbGl0eS1zZWxlY3QnKTtcbiAgICBjb25zdCBxdWFsU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1xdWFsaXR5LXN0YXR1cycpO1xuICAgIGNvbnN0IHN2Y0lkID0gc2VydmljZS5pZCB8fCBzZXJ2aWNlLmFwcFRlbXBsYXRlO1xuICAgIGNvbnN0IHN2Y1VybCA9IGdldFNlcnZpY2VVcmwoc2VydmljZSk7XG5cbiAgICBpZiAoIXN2Y1VybCkge1xuICAgICAgcXVhbFNlbGVjdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIE5vIHNlcnZpY2UgVVJMIC0tPC9vcHRpb24+JztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBxdWFsU2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiXCI+TG9hZGluZy4uLjwvb3B0aW9uPic7XG4gICAgcXVhbFN0YXR1cy50ZXh0Q29udGVudCA9ICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBzZXJ2aWNlOiBzdmNJZCwgdXJsOiBzdmNVcmwgfSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL2FwaS92MS9hcnIvcXVhbGl0eS1wcm9maWxlcz8ke3BhcmFtc31gKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICBpZiAoIWRhdGEuc3VjY2VzcyB8fCAhZGF0YS5wcm9maWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHF1YWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBObyBwcm9maWxlcyBmb3VuZCAoZW50ZXIgQVBJIGtleSBhbmQgY2xpY2sgRmV0Y2gpIC0tPC9vcHRpb24+JztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBxdWFsU2VsZWN0LmlubmVySFRNTCA9ICcnO1xuICAgICAgZm9yIChjb25zdCBwIG9mIGRhdGEucHJvZmlsZXMpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgIG9wdC52YWx1ZSA9IHAuaWQ7XG4gICAgICAgIG9wdC50ZXh0Q29udGVudCA9IHAubmFtZTtcbiAgICAgICAgcXVhbFNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmUtc2VsZWN0IHN0b3JlZCBwcm9maWxlIG9yIGJlc3QgbWF0Y2ggZm9yIFwiNzIwXCJcbiAgICAgIGlmIChkYXRhLnN0b3JlZFByb2ZpbGVJZCkge1xuICAgICAgICBxdWFsU2VsZWN0LnZhbHVlID0gU3RyaW5nKGRhdGEuc3RvcmVkUHJvZmlsZUlkKTtcbiAgICAgIH1cbiAgICAgIGlmICghcXVhbFNlbGVjdC52YWx1ZSkge1xuICAgICAgICAvLyBUcnkgdG8gZmluZCBhIDcyMHAtaXNoIHByb2ZpbGVcbiAgICAgICAgY29uc3QgbWF0Y2g3MjAgPSBkYXRhLnByb2ZpbGVzLmZpbmQocCA9PiAvNzIwL2kudGVzdChwLm5hbWUpKTtcbiAgICAgICAgaWYgKG1hdGNoNzIwKSBxdWFsU2VsZWN0LnZhbHVlID0gU3RyaW5nKG1hdGNoNzIwLmlkKTtcbiAgICAgIH1cbiAgICAgIGlmICghcXVhbFNlbGVjdC52YWx1ZSAmJiBkYXRhLnByb2ZpbGVzLmxlbmd0aCkge1xuICAgICAgICBxdWFsU2VsZWN0LnZhbHVlID0gU3RyaW5nKGRhdGEucHJvZmlsZXNbMF0uaWQpO1xuICAgICAgfVxuXG4gICAgICBxdWFsU3RhdHVzLmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1vay1mZyk7XCI+JHtkYXRhLnByb2ZpbGVzLmxlbmd0aH0gcHJvZmlsZXMgbG9hZGVkPC9zcGFuPmA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcXVhbFNlbGVjdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIEZhaWxlZCB0byBsb2FkIC0tPC9vcHRpb24+JztcbiAgICAgIHF1YWxTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLWVycm9yLCAjYzYyODI4KTtcIj5FcnJvcjogJHtlLm1lc3NhZ2V9PC9zcGFuPmA7XG4gICAgfVxuICB9XG5cbiAgLy8gRmV0Y2ggYnV0dG9uIGZvciBxdWFsaXR5IHByb2ZpbGVzXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtcXVhbGl0eS1mZXRjaCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWN1cnJlbnRTZXJ2aWNlKSByZXR1cm47XG4gICAgY29uc3Qgc3ZjSWQgPSBjdXJyZW50U2VydmljZS5pZCB8fCBjdXJyZW50U2VydmljZS5hcHBUZW1wbGF0ZTtcbiAgICBjb25zdCBzdmNVcmwgPSBnZXRTZXJ2aWNlVXJsKGN1cnJlbnRTZXJ2aWNlKTtcbiAgICBjb25zdCBhcGlLZXlJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtYXBpa2V5LWlucHV0Jyk7XG4gICAgY29uc3QgYXBpS2V5ID0gYXBpS2V5SW5wdXQ/LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBxdWFsU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1xdWFsaXR5LXNlbGVjdCcpO1xuICAgIGNvbnN0IHF1YWxTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLXF1YWxpdHktc3RhdHVzJyk7XG5cbiAgICBpZiAoIXN2Y1VybCkge1xuICAgICAgcXVhbFN0YXR1cy5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogdmFyKC0tZXJyb3IsICNjNjI4MjgpO1wiPk5vIHNlcnZpY2UgVVJMIGF2YWlsYWJsZTwvc3Bhbj4nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWFwaUtleSB8fCBhcGlLZXkgPT09ICdcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjJcdTIwMjInKSB7XG4gICAgICBxdWFsU3RhdHVzLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1lcnJvciwgI2M2MjgyOCk7XCI+RW50ZXIgYW4gQVBJIGtleSBmaXJzdDwvc3Bhbj4nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHF1YWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj5GZXRjaGluZy4uLjwvb3B0aW9uPic7XG4gICAgcXVhbFN0YXR1cy50ZXh0Q29udGVudCA9ICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBzZXJ2aWNlOiBzdmNJZCwgdXJsOiBzdmNVcmwsIGFwaUtleSB9KTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL2Fyci9xdWFsaXR5LXByb2ZpbGVzPyR7cGFyYW1zfWApO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgIGlmICghZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIHF1YWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBFcnJvciAtLTwvb3B0aW9uPic7XG4gICAgICAgIHF1YWxTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLWVycm9yLCAjYzYyODI4KTtcIj4ke2RhdGEuZXJyb3IgfHwgJ0ZhaWxlZCB0byBmZXRjaCBwcm9maWxlcyd9PC9zcGFuPmA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkYXRhLnByb2ZpbGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcXVhbFNlbGVjdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIE5vIHByb2ZpbGVzIGZvdW5kIC0tPC9vcHRpb24+JztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBxdWFsU2VsZWN0LmlubmVySFRNTCA9ICcnO1xuICAgICAgZm9yIChjb25zdCBwIG9mIGRhdGEucHJvZmlsZXMpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgIG9wdC52YWx1ZSA9IHAuaWQ7XG4gICAgICAgIG9wdC50ZXh0Q29udGVudCA9IHAubmFtZTtcbiAgICAgICAgcXVhbFNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmUtc2VsZWN0IDcyMHAgbWF0Y2hcbiAgICAgIGNvbnN0IG1hdGNoNzIwID0gZGF0YS5wcm9maWxlcy5maW5kKHAgPT4gLzcyMC9pLnRlc3QocC5uYW1lKSk7XG4gICAgICBpZiAobWF0Y2g3MjApIHF1YWxTZWxlY3QudmFsdWUgPSBTdHJpbmcobWF0Y2g3MjAuaWQpO1xuICAgICAgZWxzZSBpZiAoZGF0YS5wcm9maWxlcy5sZW5ndGgpIHF1YWxTZWxlY3QudmFsdWUgPSBTdHJpbmcoZGF0YS5wcm9maWxlc1swXS5pZCk7XG5cbiAgICAgIHF1YWxTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW9rLWZnKTtcIj4ke2RhdGEucHJvZmlsZXMubGVuZ3RofSBwcm9maWxlcyBsb2FkZWQ8L3NwYW4+YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBxdWFsU2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiXCI+LS0gRXJyb3IgLS08L29wdGlvbj4nO1xuICAgICAgcXVhbFN0YXR1cy5pbm5lckhUTUwgPSBgPHNwYW4gc3R5bGU9XCJjb2xvcjogdmFyKC0tZXJyb3IsICNjNjI4MjgpO1wiPiR7ZS5tZXNzYWdlfTwvc3Bhbj5gO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2F2ZSBidXR0b25cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1zYXZlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGlmICghY3VycmVudFNlcnZpY2UpIHJldHVybjtcbiAgICBjb25zdCBzYXZlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Yy1jcmVkcy1zYXZlJyk7XG4gICAgc2F2ZUJ0bi50ZXh0Q29udGVudCA9ICdTYXZpbmcuLi4nO1xuICAgIHNhdmVCdG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgIGhpZGVFcnJvcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlzQXJyID0gYXJyU2VydmljZXMuaW5jbHVkZXMoY3VycmVudFNlcnZpY2UuaWQpIHx8IGFyclNlcnZpY2VzLmluY2x1ZGVzKGN1cnJlbnRTZXJ2aWNlLmFwcFRlbXBsYXRlKTtcbiAgICAgIGNvbnN0IHN2Y0lkID0gY3VycmVudFNlcnZpY2UuaWQgfHwgY3VycmVudFNlcnZpY2UuYXBwVGVtcGxhdGU7XG5cbiAgICAgIC8vIFNhdmUgc2VlZGhvc3QgY3JlZHMgKHNoYXJlZCB1c2VybmFtZSArIHBlci1zZXJ2aWNlIHBhc3N3b3JkKVxuICAgICAgaWYgKGN1cnJlbnRTZXJ2aWNlLmlzRXh0ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtc2VlZGhvc3QtdXNlcicpLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgY29uc3QgcGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtc2VlZGhvc3QtcGFzcycpLnZhbHVlO1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3NlZWRob3N0LWNyZWRzJywge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdXNlcm5hbWU6IHVzZXIsIHBhc3N3b3JkOiBwYXNzIHx8IHVuZGVmaW5lZCwgc2VydmljZUlkOiBjdXJyZW50U2VydmljZS5pZCB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmUgQVBJIGtleSBcdTIwMTQgZm9yIGFyciBzZXJ2aWNlcywgdXNlIHRoZSBhcnIgY3JlZGVudGlhbHMgZW5kcG9pbnQgKGNvcnJlY3QgbmFtZXNwYWNlKVxuICAgICAgY29uc3QgYXBpS2V5SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWFwaWtleS1pbnB1dCcpO1xuICAgICAgY29uc3QgYXBpS2V5ID0gYXBpS2V5SW5wdXQ/LnZhbHVlLnRyaW0oKTtcbiAgICAgIGlmIChhcGlLZXkgJiYgYXBpS2V5ICE9PSAnXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyXHUyMDIyJykge1xuICAgICAgICBpZiAoaXNBcnIpIHtcbiAgICAgICAgICAvLyBVc2UgYXJyIGNyZWRlbnRpYWxzIGVuZHBvaW50IFx1MjAxNCB2YWxpZGF0ZXMga2V5LCB0ZXN0cyBjb25uZWN0aW9uLCBzdG9yZXMgaW4gYXJyLiogbmFtZXNwYWNlXG4gICAgICAgICAgY29uc3Qgc3ZjVXJsID0gZ2V0U2VydmljZVVybChjdXJyZW50U2VydmljZSk7XG4gICAgICAgICAgY29uc3QgcXVhbFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtcXVhbGl0eS1zZWxlY3QnKTtcbiAgICAgICAgICBjb25zdCBxdWFsaXR5UHJvZmlsZUlkID0gcXVhbFNlbGVjdD8udmFsdWUgPyBwYXJzZUludChxdWFsU2VsZWN0LnZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBxdWFsaXR5UHJvZmlsZU5hbWUgPSBxdWFsU2VsZWN0Py5zZWxlY3RlZE9wdGlvbnM/LlswXT8udGV4dENvbnRlbnQgfHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvYXJyL2NyZWRlbnRpYWxzJywge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgc2VydmljZTogc3ZjSWQsXG4gICAgICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgICAgICAgdXJsOiBzdmNVcmwgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBxdWFsaXR5UHJvZmlsZUlkOiBxdWFsaXR5UHJvZmlsZUlkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcXVhbGl0eVByb2ZpbGVOYW1lOiBxdWFsaXR5UHJvZmlsZU5hbWUgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgIGlmICghZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICBzaG93RXJyb3IoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgQVBJIGtleScpO1xuICAgICAgICAgICAgc2F2ZUJ0bi50ZXh0Q29udGVudCA9ICdTYXZlJztcbiAgICAgICAgICAgIHNhdmVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGEuY29ubmVjdGlvblRlc3QgJiYgIWRhdGEuY29ubmVjdGlvblRlc3Quc3VjY2Vzcykge1xuICAgICAgICAgICAgc2hvd0Vycm9yKGBBUEkga2V5IHNhdmVkIGJ1dCBjb25uZWN0aW9uIHRlc3QgZmFpbGVkOiAke2RhdGEuY29ubmVjdGlvblRlc3QuZXJyb3J9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vbi1hcnIgc2VydmljZXMgdXNlIHRoZSBnZW5lcmljIGVuZHBvaW50XG4gICAgICAgICAgYXdhaXQgc2VjdXJlRmV0Y2goYC9hcGkvdjEvc2VydmljZXMvJHtjdXJyZW50U2VydmljZS5pZH0vY3JlZGVudGlhbHNgLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhcGlLZXkgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0FyciAmJiBxdWFsaXR5UHJvZmlsZVNlcnZpY2VzLmluY2x1ZGVzKHN2Y0lkKSkge1xuICAgICAgICAvLyBBUEkga2V5IHVuY2hhbmdlZCBidXQgdXNlciBtYXkgaGF2ZSBjaGFuZ2VkIHF1YWxpdHkgcHJvZmlsZSBcdTIwMTQgc2F2ZSBwcm9maWxlIG9ubHlcbiAgICAgICAgY29uc3QgcXVhbFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtcXVhbGl0eS1zZWxlY3QnKTtcbiAgICAgICAgY29uc3QgcXVhbGl0eVByb2ZpbGVJZCA9IHF1YWxTZWxlY3Q/LnZhbHVlID8gcGFyc2VJbnQocXVhbFNlbGVjdC52YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHF1YWxpdHlQcm9maWxlTmFtZSA9IHF1YWxTZWxlY3Q/LnNlbGVjdGVkT3B0aW9ucz8uWzBdPy50ZXh0Q29udGVudCB8fCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChxdWFsaXR5UHJvZmlsZUlkKSB7XG4gICAgICAgICAgYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvYXJyL3F1YWxpdHktcHJvZmlsZXMnLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzZXJ2aWNlOiBzdmNJZCwgcXVhbGl0eVByb2ZpbGVJZCwgcXVhbGl0eVByb2ZpbGVOYW1lIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBwZXItc2VydmljZSBiYXNpYyBhdXRoXG4gICAgICBpZiAoIWN1cnJlbnRTZXJ2aWNlLmlzRXh0ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtYmFzaWMtdXNlcicpLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgY29uc3QgcGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtYmFzaWMtcGFzcycpLnZhbHVlO1xuICAgICAgICBpZiAodXNlciAmJiBwYXNzKSB7XG4gICAgICAgICAgYXdhaXQgc2VjdXJlRmV0Y2goYC9hcGkvdjEvc2VydmljZXMvJHtjdXJyZW50U2VydmljZS5pZH0vY3JlZGVudGlhbHNgLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB1c2VybmFtZTogdXNlciwgcGFzc3dvcmQ6IHBhc3MgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBsb2FkU2VydmljZUNyZWRzKGN1cnJlbnRTZXJ2aWNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckhhbmRsZXIubG9nRXJyb3IoJ1tTZXJ2aWNlQ3JlZGVudGlhbHNdIFNhdmUnLCBlLCB7IGZ1bmN0aW9uOiAnc2F2ZUNyZWRlbnRpYWxzJyB9KTtcbiAgICAgIHNob3dFcnJvcignRmFpbGVkIHRvIHNhdmU6ICcgKyAoZS5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJykpO1xuICAgIH1cbiAgICBzYXZlQnRuLnRleHRDb250ZW50ID0gJ1NhdmUnO1xuICAgIHNhdmVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gQ2xlYXIgYnV0dG9uXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmMtY3JlZHMtY2xlYXInKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFjdXJyZW50U2VydmljZSkgcmV0dXJuO1xuICAgIGlmICghY29uZmlybShgUmVtb3ZlIHN0b3JlZCBjcmVkZW50aWFscyBmb3IgJHtjdXJyZW50U2VydmljZS5uYW1lfT9gKSkgcmV0dXJuO1xuICAgIGhpZGVFcnJvcigpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdmNJZCA9IGN1cnJlbnRTZXJ2aWNlLmlkIHx8IGN1cnJlbnRTZXJ2aWNlLmFwcFRlbXBsYXRlO1xuICAgICAgY29uc3QgaXNBcnIgPSBhcnJTZXJ2aWNlcy5pbmNsdWRlcyhzdmNJZCk7XG4gICAgICBpZiAoY3VycmVudFNlcnZpY2UuaXNFeHRlcm5hbCkge1xuICAgICAgICBhd2FpdCBzZWN1cmVGZXRjaChgL2FwaS92MS9zZWVkaG9zdC1jcmVkcz9zZXJ2aWNlSWQ9JHtjdXJyZW50U2VydmljZS5pZH1gLCB7IG1ldGhvZDogJ0RFTEVURScgfSk7XG4gICAgICB9XG4gICAgICAvLyBEZWxldGUgZnJvbSBib3RoIG5hbWVzcGFjZXNcbiAgICAgIGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL3NlcnZpY2VzLyR7Y3VycmVudFNlcnZpY2UuaWR9L2NyZWRlbnRpYWxzYCwgeyBtZXRob2Q6ICdERUxFVEUnIH0pO1xuICAgICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL2Fyci9jcmVkZW50aWFscy8ke3N2Y0lkfWAsIHsgbWV0aG9kOiAnREVMRVRFJyB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjcmVkcy1idG4tJHtjdXJyZW50U2VydmljZS5pZH1gKTtcbiAgICAgIGlmIChidG4pIGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdoYXMtY3JlZHMnKTtcbiAgICAgIGF3YWl0IGxvYWRTZXJ2aWNlQ3JlZHMoY3VycmVudFNlcnZpY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9ySGFuZGxlci5sb2dFcnJvcignW1NlcnZpY2VDcmVkZW50aWFsc10gQ2xlYXInLCBlLCB7IGZ1bmN0aW9uOiAnY2xlYXJDcmVkZW50aWFscycgfSk7XG4gICAgICBzaG93RXJyb3IoJ0ZhaWxlZCB0byBjbGVhcjogJyArIChlLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDbG9zZSBidXR0b24gLyBiYWNrZHJvcFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZjLWNyZWRzLWNsb3NlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICBjdXJyZW50U2VydmljZSA9IG51bGw7XG4gIH0pO1xuICBtb2RhbD8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIHtcbiAgICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgIGN1cnJlbnRTZXJ2aWNlID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIENoZWNrIGNyZWRlbnRpYWwgc3RhdHVzIGZvciBhbGwgc2VydmljZXMgb24gcGFnZSBsb2FkICh1cGRhdGUga2V5IGJ1dHRvbiBoaWdobGlnaHRzKVxuICB3aW5kb3cucmVmcmVzaENyZWRzQnV0dG9ucyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IGFwcCBvZiAod2luZG93LkFQUFMgfHwgW10pKSB7XG4gICAgICAgIGlmICghYXBwLmlzRXh0ZXJuYWwgJiYgIWFwcC5hcHBUZW1wbGF0ZSAmJiAhYXBwLnVybCkgY29udGludWU7XG4gICAgICAgIGxldCBoYXNDcmVkcyA9IGZhbHNlO1xuICAgICAgICBpZiAoYXBwLmlzRXh0ZXJuYWwpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2VlZFJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL3NlZWRob3N0LWNyZWRzP3NlcnZpY2VJZD0ke2FwcC5pZH1gKTtcbiAgICAgICAgICAgIGNvbnN0IHNlZWREYXRhID0gYXdhaXQgc2VlZFJlcy5qc29uKCk7XG4gICAgICAgICAgICBpZiAoc2VlZERhdGEuc3VjY2VzcyAmJiBzZWVkRGF0YS5oYXNDcmVkZW50aWFscykgaGFzQ3JlZHMgPSB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaChgL2FwaS92MS9zZXJ2aWNlcy8ke2FwcC5pZH0vY3JlZGVudGlhbHNgKTtcbiAgICAgICAgICBjb25zdCBkID0gYXdhaXQgci5qc29uKCk7XG4gICAgICAgICAgaWYgKGQuc3VjY2VzcyAmJiAoZC5oYXNBcGlLZXkgfHwgZC5oYXNCYXNpY0F1dGgpKSBoYXNDcmVkcyA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNyZWRzLWJ0bi0ke2FwcC5pZH1gKTtcbiAgICAgICAgaWYgKGJ0bikgYnRuLmNsYXNzTGlzdC50b2dnbGUoJ2hhcy1jcmVkcycsIGhhc0NyZWRzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gIH07XG59KSgpO1xuO1xuLy8gPT09PT0gVE9UUCBTRVRUSU5HUyA9PT09PVxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCBlcnJvckhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKCk7XG4gIGluamVjdE1vZGFsKCd0b3RwLXNldHRpbmdzLW1vZGFsJywgYDxkaXYgaWQ9XCJ0b3RwLXNldHRpbmdzLW1vZGFsXCIgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtY29udGVudFwiIHN0eWxlPVwibWluLXdpZHRoOiA0MjBweDsgbWF4LXdpZHRoOiA1MjBweDtcIj5cbiAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjogMCAwIDE2cHg7IGZvbnQtc2l6ZTogMS4xcmVtO1wiPkF1dGhlbnRpY2F0aW9uIFNldHRpbmdzPC9oMz5cblxuICAgICAgPCEtLSBTdGF0dXMgQmFubmVyIC0tPlxuICAgICAgPGRpdiBpZD1cInRvdHAtc3RhdHVzLWJhbm5lclwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTZweDsgcGFkZGluZzogMTJweCAxNnB4OyBib3JkZXItcmFkaXVzOiA4cHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4O1wiPlxuICAgICAgICA8c3BhbiBpZD1cInRvdHAtc3RhdHVzLWRvdFwiIGNsYXNzPVwic3RhdHVzLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gaWQ9XCJ0b3RwLXN0YXR1cy10ZXh0XCIgc3R5bGU9XCJmb250LXNpemU6IDAuOXJlbTtcIj5UT1RQIGlzIG5vdCBjb25maWd1cmVkPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2V0dXAgQnV0dG9uIChub3QgY29uZmlndXJlZCBzdGF0ZSkgLS0+XG4gICAgICA8ZGl2IGlkPVwidG90cC1zZXR1cC1zZWN0aW9uXCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b3RwLXNldHVwLWJ0blwiIGNsYXNzPVwiYnRuLWFjY2VudC1zb2xpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDEycHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogOHB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMC45NXJlbTtcIj5cbiAgICAgICAgICBHZW5lcmF0ZSBOZXcgU2VjcmV0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IG1hcmdpbjogMTBweCAwIDA7XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXItbGluZVwiPjwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10aW55LW11dGVkXCI+b3I8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXItbGluZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1oaW50XCI+SW1wb3J0IGFuIGV4aXN0aW5nIHNlY3JldCBrZXk6PC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IG1hcmdpbi10b3A6IDZweDtcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwidG90cC1pbXBvcnQta2V5XCIgcGxhY2Vob2xkZXI9XCJQYXN0ZSB5b3VyIEJhc2UzMiBrZXlcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmxleDogMTsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogdmFyKC0tYmcpOyBjb2xvcjogdmFyKC0tZmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiA2cHg7IGZvbnQtc2l6ZTogMC45cmVtOyBmb250LWZhbWlseTogbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogMXB4OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1wiIC8+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwidG90cC1pbXBvcnQtYnRuXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDAuODVyZW07IHdoaXRlLXNwYWNlOiBub3dyYXA7XCI+XG4gICAgICAgICAgICAgIEltcG9ydFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBpZD1cInRvdHAtaW1wb3J0LWVycm9yXCIgc3R5bGU9XCJjb2xvcjogdmFyKC0tYmFkLWZnLCAjZmY5YWEzKTsgZm9udC1zaXplOiAwLjhyZW07IG1pbi1oZWlnaHQ6IDEuMmVtOyBtYXJnaW4tdG9wOiA2cHg7XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2VjcmV0IERpc3BsYXkgKHNldHVwIGZsb3cpIC0tPlxuICAgICAgPGRpdiBpZD1cInRvdHAtcXItc2VjdGlvblwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgPCEtLSBNYW51YWwgS2V5IChwcmltYXJ5IC0gZm9yIFdpbkF1dGgvZGVza3RvcCBhdXRoZW50aWNhdG9ycykgLS0+XG4gICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjg1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW46IDAgMCA4cHg7XCI+Q29weSB0aGlzIGtleSBpbnRvIHlvdXIgYXV0aGVudGljYXRvciBhcHA6PC9wPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IG1hcmdpbi1ib3R0b206IDhweDtcIj5cbiAgICAgICAgICA8Y29kZSBpZD1cInRvdHAtbWFudWFsLWtleVwiIHN0eWxlPVwiZmxleDogMTsgZGlzcGxheTogYmxvY2s7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6IHZhcigtLWJnLCAjMGIwZjFhKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDFyZW07IGZvbnQtZmFtaWx5OiAnU2FtaSBHcm90ZXNrJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogMnB4OyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHVzZXItc2VsZWN0OiBhbGw7IGNvbG9yOiB2YXIoLS1mZyk7XCI+PC9jb2RlPlxuICAgICAgICAgIDxidXR0b24gaWQ9XCJ0b3RwLWNvcHkta2V5XCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDE0cHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDFyZW07IHdoaXRlLXNwYWNlOiBub3dyYXA7IGNvbG9yOiB2YXIoLS1mZyk7XCIgdGl0bGU9XCJDb3B5IHRvIGNsaXBib2FyZFwiPlx1RDgzRFx1RENDQjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIERvd25sb2FkIGJhY2t1cCBmaWxlIChyZWNvdmVyeSBhaWQpIC0tPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTZweDsgcGFkZGluZzogMTBweCAxMnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZywgIzBiMGYxYSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmbGV4OiAxO1wiPlxuICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPVwiY29sb3I6IHZhcigtLWZnKTtcIj5TYXZlIGEgYmFja3VwIGZpbGU8L3N0cm9uZz4gXHUyMDE0IGlmIHlvdSBldmVyIGxvc2UgeW91ciBhdXRoZW50aWNhdG9yLFxuICAgICAgICAgICAgICB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byByZWNvdmVyIHdpdGhvdXQgU1NIIGFjY2VzcyB0byB0aGUgc2VydmVyLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInRvdHAtZG93bmxvYWQtYmFja3VwXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogOHB4IDE0cHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDAuODVyZW07IHdoaXRlLXNwYWNlOiBub3dyYXA7XCI+XG4gICAgICAgICAgICAgIFx1MkIwNyBEb3dubG9hZFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUVIgQ29kZSAoc2Vjb25kYXJ5IC0gZm9yIG1vYmlsZSBhcHBzKSAtLT5cbiAgICAgICAgPGRldGFpbHMgY2xhc3M9XCJtYi0xNlwiPlxuICAgICAgICAgIDxzdW1tYXJ5IHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDAuOHJlbTtcIj5TaG93IFFSIGNvZGUgKGZvciBtb2JpbGUgYXV0aGVudGljYXRvciBhcHBzKTwvc3VtbWFyeT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOiA4cHg7XCI+XG4gICAgICAgICAgICA8aW1nIGlkPVwidG90cC1xci1pbWFnZVwiIHN0eWxlPVwid2lkdGg6IDE4MHB4OyBoZWlnaHQ6IDE4MHB4OyBib3JkZXItcmFkaXVzOiA4cHg7XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kZXRhaWxzPlxuXG4gICAgICAgIDwhLS0gVmVyaWZ5IEZpcnN0IENvZGUgLS0+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgcGFkZGluZy10b3A6IDE2cHg7XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1ib2xkLXNtXCI+RW50ZXIgY29kZSB0byBjb25maXJtIHNldHVwOjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBtYXJnaW4tdG9wOiA4cHg7XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInRvdHAtc2V0dXAtY29kZVwiIG1heGxlbmd0aD1cIjZcIiBpbnB1dG1vZGU9XCJudW1lcmljXCIgcGF0dGVybj1cIlswLTldezZ9XCIgcGxhY2Vob2xkZXI9XCIwMDAwMDBcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmxleDogMTsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDEuM3JlbTsgcGFkZGluZzogMTBweDsgZm9udC1mYW1pbHk6ICdTYW1pIEdyb3Rlc2snLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiA0cHg7IGJhY2tncm91bmQ6IHZhcigtLWJnKTsgY29sb3I6IHZhcigtLWZnKTsgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogOHB4OyBvdXRsaW5lOiBub25lO1wiIC8+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwidG90cC1jb25maXJtLXNldHVwXCIgY2xhc3M9XCJidG4tYWNjZW50LXNvbGlkXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDIwcHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogOHB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7XCI+XG4gICAgICAgICAgICAgIENvbmZpcm1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgaWQ9XCJ0b3RwLXNldHVwLWVycm9yXCIgc3R5bGU9XCJjb2xvcjogdmFyKC0tYmFkLWZnLCAjZmY5YWEzKTsgZm9udC1zaXplOiAwLjhyZW07IG1pbi1oZWlnaHQ6IDEuMmVtOyBtYXJnaW4tdG9wOiA2cHg7XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2Vzc2lvbiBEdXJhdGlvbiAoYWN0aXZlIHN0YXRlKSAtLT5cbiAgICAgIDxkaXYgaWQ9XCJ0b3RwLWR1cmF0aW9uLXNlY3Rpb25cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi10b3A6IDEycHg7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtYm9sZC1zbVwiPlNlc3Npb24gRHVyYXRpb246PC9sYWJlbD5cbiAgICAgICAgPHNlbGVjdCBpZD1cInRvdHAtZHVyYXRpb24tc2VsZWN0XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogMTBweDsgbWFyZ2luLXRvcDogNnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZywgIzBiMGYxYSk7IGNvbG9yOiB2YXIoLS1mZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDhweDsgZm9udC1zaXplOiAwLjlyZW07IGN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTVtXCI+MTUgbWludXRlczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIzMG1cIj4zMCBtaW51dGVzPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFoXCI+MSBob3VyPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjJoXCI+MiBob3Vyczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI0aFwiPjQgaG91cnM8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiOGhcIj44IGhvdXJzPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEyaFwiPjEyIGhvdXJzPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjI0aFwiPjI0IGhvdXJzPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5ldmVyXCI+TmV2ZXIgKGRpc2FibGUgVE9UUCk8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjc1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW46IDRweCAwIDA7XCI+SG93IGxvbmcgYmVmb3JlIHlvdSBuZWVkIHRvIHJlLWVudGVyIHlvdXIgY29kZTwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIERpc2FibGUgQnV0dG9uIChhY3RpdmUgc3RhdGUpIC0tPlxuICAgICAgPGRpdiBpZD1cInRvdHAtZGlzYWJsZS1zZWN0aW9uXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBtYXJnaW4tdG9wOiAxNnB4OyBwYWRkaW5nLXRvcDogMTZweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b3RwLWRpc2FibGUtYnRuXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiB2YXIoLS1iYWQtZmcsICNmZjlhYTMpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1iYWQtZmcsICNmZjlhYTMpOyBib3JkZXItcmFkaXVzOiA4cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAwLjlyZW07XCI+XG4gICAgICAgICAgRGlzYWJsZSBUT1RQXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ2xvc2UgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMTZweDsgdGV4dC1hbGlnbjogcmlnaHQ7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b3RwLW1vZGFsLWNsb3NlXCIgc3R5bGU9XCJwYWRkaW5nOiA4cHggMjBweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iYXNlKTsgY29sb3I6IHZhcigtLWZnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogOHB4OyBjdXJzb3I6IHBvaW50ZXI7XCI+XG4gICAgICAgICAgQ2xvc2VcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZFRvdHBTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvdjEvdG90cC9jb25maWcnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgaWYgKCFkYXRhLnN1Y2Nlc3MpIHJldHVybjtcblxuICAgICAgY29uc3QgeyBlbmFibGVkLCBzZXNzaW9uRHVyYXRpb24sIGlzU2V0VXAgfSA9IGRhdGEuY29uZmlnO1xuICAgICAgY29uc3Qgc3RhdHVzRG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtc3RhdHVzLWRvdCcpO1xuICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXN0YXR1cy10ZXh0Jyk7XG4gICAgICBjb25zdCBzdGF0dXNCYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zdGF0dXMtYmFubmVyJyk7XG4gICAgICBjb25zdCBzZXR1cFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1zZWN0aW9uJyk7XG4gICAgICBjb25zdCBxclNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1xci1zZWN0aW9uJyk7XG4gICAgICBjb25zdCBkdXJhdGlvblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1kdXJhdGlvbi1zZWN0aW9uJyk7XG4gICAgICBjb25zdCBkaXNhYmxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLWRpc2FibGUtc2VjdGlvbicpO1xuXG4gICAgICBpZiAoZW5hYmxlZCAmJiBpc1NldFVwKSB7XG4gICAgICAgIHN0YXR1c0RvdC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3ZhcigtLW9rLWZnLCAjN2VmMmZmKSc7XG4gICAgICAgIHN0YXR1c0Jhbm5lci5zdHlsZS5ib3JkZXJDb2xvciA9ICd2YXIoLS1vay1mZywgIzdlZjJmZiknO1xuICAgICAgICBzdGF0dXNCYW5uZXIuc3R5bGUuYmFja2dyb3VuZCA9ICdjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tb2stZmcpIDglLCB0cmFuc3BhcmVudCknO1xuICAgICAgICBzdGF0dXNUZXh0LnRleHRDb250ZW50ID0gJ1RPVFAgaXMgYWN0aXZlJztcbiAgICAgICAgc3RhdHVzVGV4dC5zdHlsZS5jb2xvciA9ICd2YXIoLS1vay1mZywgIzdlZjJmZiknO1xuICAgICAgICAvLyBLZWVwIHRoZSBzZXR1cCBzZWN0aW9uIHZpc2libGUgKGNvbGxhcHNlZCkgc28gdGhlIFwiSW1wb3J0IGV4aXN0aW5nXG4gICAgICAgIC8vIHNlY3JldFwiIG9wdGlvbiBpcyBhbHdheXMgcmVhY2hhYmxlIFx1MjAxNCB1c2VycyBtYXkgbmVlZCB0byByZS1lbnJvbGxcbiAgICAgICAgLy8gdGhlaXIgYXV0aGVudGljYXRvciB3aXRoIHRoZSBzYW1lIHNlY3JldCBmcm9tIGEgYmFja3VwIGZpbGUuXG4gICAgICAgIHNldHVwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgY29uc3Qgc2V0dXBCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1idG4nKTtcbiAgICAgICAgaWYgKHNldHVwQnRuKSBzZXR1cEJ0bi50ZXh0Q29udGVudCA9ICdHZW5lcmF0ZSBOZXcgU2VjcmV0JztcbiAgICAgICAgLy8gSGlkZSB0aGUgUVIgc2VjdGlvbiBieSBkZWZhdWx0IGluIHRoZSBhY3RpdmUgc3RhdGUgXHUyMDE0IHNldHVwQnRuIGNsaWNrIHNob3dzIGl0XG4gICAgICAgIHFyU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkdXJhdGlvblNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGRpc2FibGVTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1kdXJhdGlvbi1zZWxlY3QnKS52YWx1ZSA9IHNlc3Npb25EdXJhdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c0RvdC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3ZhcigtLW11dGVkKSc7XG4gICAgICAgIHN0YXR1c0Jhbm5lci5zdHlsZS5ib3JkZXJDb2xvciA9ICd2YXIoLS1ib3JkZXIpJztcbiAgICAgICAgc3RhdHVzQmFubmVyLnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICBzdGF0dXNUZXh0LnRleHRDb250ZW50ID0gJ1RPVFAgaXMgbm90IGNvbmZpZ3VyZWQnO1xuICAgICAgICBzdGF0dXNUZXh0LnN0eWxlLmNvbG9yID0gJ3ZhcigtLW11dGVkKSc7XG4gICAgICAgIHNldHVwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgcXJTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGR1cmF0aW9uU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkaXNhYmxlU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIEF1dGggY2FyZCBpbiB0aGUgdG9wIHJvd1xuICAgICAgdXBkYXRlQXV0aENhcmQoZW5hYmxlZCAmJiBpc1NldFVwLCBzZXNzaW9uRHVyYXRpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvYWQgVE9UUCBzZXR0aW5nczonLCBlKTtcbiAgICB9XG4gIH1cblxuICAvLyBEdXJhdGlvbiBsYWJlbCBoZWxwZXJcbiAgY29uc3QgRFVSQVRJT05fTEFCRUxTID0ge1xuICAgICcxNW0nOiAnMTUgbWluJywgJzMwbSc6ICczMCBtaW4nLCAnMWgnOiAnMSBob3VyJywgJzJoJzogJzIgaG91cnMnLFxuICAgICc0aCc6ICc0IGhvdXJzJywgJzhoJzogJzggaG91cnMnLCAnMTJoJzogJzEyIGhvdXJzJywgJzI0aCc6ICcyNCBob3VycycsICduZXZlcic6ICdEaXNhYmxlZCdcbiAgfTtcblxuICBmdW5jdGlvbiB1cGRhdGVBdXRoQ2FyZChhY3RpdmUsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgY2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLWNhcmQnKTtcbiAgICBjb25zdCBwaWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGgtcGlsbCcpO1xuICAgIGNvbnN0IGRvdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLWRvdCcpO1xuICAgIGNvbnN0IHN0YXR1c1RleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1zdGF0dXMtdGV4dCcpO1xuICAgIGlmICghY2FyZCkgcmV0dXJuO1xuXG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgY2FyZC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHVzJywgJ29uJyk7XG4gICAgICBwaWxsLmNsYXNzTmFtZSA9ICdiYWRnZSBvbic7XG4gICAgICBwaWxsLnRleHRDb250ZW50ID0gJ1lFUyc7XG4gICAgICBkb3QuY2xhc3NOYW1lID0gJ2RvdCBvayBhdC1ibCc7XG4gICAgICBzdGF0dXNUZXh0LnRleHRDb250ZW50ID0gJ1Nlc3Npb246ICcgKyAoRFVSQVRJT05fTEFCRUxTW2R1cmF0aW9uXSB8fCBkdXJhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXR1cycsICdvZmYnKTtcbiAgICAgIHBpbGwuY2xhc3NOYW1lID0gJ2JhZGdlIG9mZic7XG4gICAgICBwaWxsLnRleHRDb250ZW50ID0gJ05PJztcbiAgICAgIGRvdC5jbGFzc05hbWUgPSAnZG90IGJhZCBhdC1ibCc7XG4gICAgICBzdGF0dXNUZXh0LnRleHRDb250ZW50ID0gJ05vdCBjb25maWd1cmVkJztcbiAgICB9XG4gIH1cblxuICAvLyBTZXR1cCBidXR0b24gKGdlbmVyYXRlIG5ldyBzZWNyZXQpXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLWJ0bicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvdG90cC9zZXR1cCcsIHsgbWV0aG9kOiAnUE9TVCcgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcXItaW1hZ2UnKS5zcmMgPSBkYXRhLnFyQ29kZTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtbWFudWFsLWtleScpLnRleHRDb250ZW50ID0gZGF0YS5tYW51YWxLZXk7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLXNlY3Rpb24nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1xci1zZWN0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLWNvZGUnKS52YWx1ZSA9ICcnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1lcnJvcicpLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLWNvZGUnKS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9ySGFuZGxlci5sb2dFcnJvcignW1RPVFBdIFNldHVwIEZhaWxlZCcsIGUsIHsgZnVuY3Rpb246ICdzZXR1cFRPVFAnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSW1wb3J0IGV4aXN0aW5nIHNlY3JldCBidXR0b25cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtaW1wb3J0LWJ0bicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZWNyZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1pbXBvcnQta2V5JykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGVycm9yRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1pbXBvcnQtZXJyb3InKTtcbiAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJyc7XG4gICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnUGFzdGUgYSBCYXNlMzIgc2VjcmV0IGtleSBmaXJzdCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS90b3RwL3NldHVwJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2VjcmV0IH0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXFyLWltYWdlJykuc3JjID0gZGF0YS5xckNvZGU7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW1hbnVhbC1rZXknKS50ZXh0Q29udGVudCA9IGRhdGEubWFudWFsS2V5O1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1zZWN0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtcXItc2VjdGlvbicpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1jb2RlJykudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtc2V0dXAtZXJyb3InKS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1jb2RlJykuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSBkYXRhLmVycm9yIHx8IGRhdGEubWVzc2FnZSB8fCAnSW1wb3J0IGZhaWxlZCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICdDb25uZWN0aW9uIGVycm9yIFx1MjAxNCB0cnkgcmVmcmVzaGluZyB0aGUgcGFnZSc7XG4gICAgfVxuICB9KTtcblxuICAvLyBDb3B5IGtleSBidXR0b25cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtY29weS1rZXknKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtbWFudWFsLWtleScpLnRleHRDb250ZW50O1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleSkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1jb3B5LWtleScpO1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcwNSc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1RENDQic7IH0sIDIwMDApO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBEb3dubG9hZCBiYWNrdXAgZmlsZSBcdTIwMTQgcGxhaW4gSlNPTiBzbyBpdCByb3VuZC10cmlwcyB0aHJvdWdoIGFueSBwYXNzd29yZFxuICAvLyBtYW5hZ2VyLCBjbG91ZCBiYWNrdXAsIG9yIHByaW50ZWQgcGFwZXIuIFRoZSBzZWNyZXQgSVMgcmVjb3ZlcmFibGUgcGxhaW50ZXh0XG4gIC8vICh0aGF0J3MgdGhlIHdob2xlIHBvaW50IG9mIHRoZSBiYWNrdXApLCBzbyB3YXJuIHRoZSB1c2VyIGFuZCByZWx5IG9uXG4gIC8vIHRoZW0gdG8ga2VlcCBpdCBzYWZlLlxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1kb3dubG9hZC1iYWNrdXAnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VjcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtbWFudWFsLWtleScpLnRleHRDb250ZW50LnRyaW0oKTtcbiAgICBpZiAoIXNlY3JldCkgcmV0dXJuO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBzZXJ2aWNlOiAnRGFzaENhZGR5JyxcbiAgICAgIHR5cGU6ICd0b3RwLXNlY3JldCcsXG4gICAgICBzZWNyZXQ6IHNlY3JldCxcbiAgICAgIGlzc3VlcjogJ0Rhc2hDYWRkeScsXG4gICAgICBhbGdvcml0aG06ICdTSEExJyxcbiAgICAgIGRpZ2l0czogNixcbiAgICAgIHBlcmlvZDogMzAsXG4gICAgICBpc3N1ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIC8vIFJlY292ZXJ5IGluc3RydWN0aW9ucyBiYWtlZCBpbnRvIHRoZSBmaWxlIHNvIGEgeWVhciBmcm9tIG5vdyB0aGVcbiAgICAgIC8vIHVzZXIgKG9yIHRoZWlyIGZ1dHVyZSBzZWxmKSBrbm93cyB3aGF0IHRoaXMgZmlsZSBpcyBhbmQgaG93IHRvIHVzZSBpdC5cbiAgICAgIHJlY292ZXJ5X3VybDogYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vICAobG9naW4gc2NyZWVuIFx1MjE5MiBcIkxvc3QgYWNjZXNzP1wiKWAsXG4gICAgICBub3RlOiAnS2VlcCB0aGlzIGZpbGUgc29tZXdoZXJlIHNhZmUuIEFueW9uZSB3aXRoIHRoaXMgc2VjcmV0IGNhbiBnZW5lcmF0ZSB5b3VyIGxvZ2luIGNvZGVzLiBVc2UgaXQgT05MWSB0byByZWNvdmVyIFRPVFAgYWNjZXNzIHZpYSB0aGUgXCJMb3N0IGFjY2Vzcz9cIiBsaW5rIG9uIHRoZSBEYXNoQ2FkZHkgbG9naW4gc2NyZWVuLidcbiAgICB9O1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMildLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gdXJsO1xuICAgIGEuZG93bmxvYWQgPSBgZGFzaGNhZGR5LXRvdHAtYmFja3VwLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKX0uanNvbmA7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICBhLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtZG93bmxvYWQtYmFja3VwJyk7XG4gICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcwNSBTYXZlZCc7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IGJ0bi50ZXh0Q29udGVudCA9ICdcdTJCMDcgRG93bmxvYWQnOyB9LCAyMDAwKTtcbiAgfSk7XG5cbiAgLy8gQ29uZmlybSBzZXR1cFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1jb25maXJtLXNldHVwJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1jb2RlJykudmFsdWU7XG4gICAgY29uc3QgZXJyb3JFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLXNldHVwLWVycm9yJyk7XG4gICAgaWYgKCEvXlxcZHs2fSQvLnRlc3QoY29kZSkpIHtcbiAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnRW50ZXIgYSA2LWRpZ2l0IGNvZGUnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS90b3RwL3ZlcmlmeS1zZXR1cCcsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGNvZGUgfSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgbG9hZFRvdHBTZXR0aW5ncygpOyAvLyBVcGRhdGVzIGJvdGggbW9kYWwgYW5kIGNhcmRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSBkYXRhLmVycm9yIHx8ICdJbnZhbGlkIGNvZGUnO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAnQ29ubmVjdGlvbiBlcnJvcic7XG4gICAgfVxuICB9KTtcblxuICAvLyBBbGxvdyBFbnRlciBrZXkgb24gc2V0dXAgY29kZSBpbnB1dFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1zZXR1cC1jb2RlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtY29uZmlybS1zZXR1cCcpPy5jbGljaygpO1xuICB9KTtcblxuICAvLyBEdXJhdGlvbiBjaGFuZ2VcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtZHVyYXRpb24tc2VsZWN0Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGFzeW5jIChlKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3RvdHAvY29uZmlnJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2Vzc2lvbkR1cmF0aW9uOiBlLnRhcmdldC52YWx1ZSB9KVxuICAgICAgfSk7XG4gICAgICBsb2FkVG90cFNldHRpbmdzKCk7IC8vIFJlZnJlc2ggbW9kYWwgKyBjYXJkIChoYW5kbGVzIFwibmV2ZXJcIiBkaXNhYmxpbmcgVE9UUClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycm9ySGFuZGxlci5sb2dFcnJvcignW1RPVFBdIFVwZGF0ZSBTZXNzaW9uIER1cmF0aW9uJywgZXJyLCB7IGZ1bmN0aW9uOiAndXBkYXRlU2Vzc2lvbkR1cmF0aW9uJyB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIERpc2FibGUgVE9UUFxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90cC1kaXNhYmxlLWJ0bicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNvbmZpcm0oJ0Rpc2FibGUgVE9UUCBhdXRoZW50aWNhdGlvbj8gQWxsIHNlcnZpY2VzIHdpbGwgYmUgYWNjZXNzaWJsZSB3aXRob3V0IGEgY29kZS4nKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS90b3RwL2Rpc2FibGUnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogJ3t9J1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIGxvYWRUb3RwU2V0dGluZ3MoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckhhbmRsZXIubG9nRXJyb3IoJ1tUT1RQXSBEaXNhYmxlIEZhaWxlZCcsIGUsIHsgZnVuY3Rpb246ICdkaXNhYmxlVE9UUCcgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBPcGVuIHNldHRpbmdzIG1vZGFsIGZyb20gQXV0aCBjYXJkXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLXNldHRpbmdzLWJ0bicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBsb2FkVG90cFNldHRpbmdzKCk7XG4gICAgb3Blbk1vZGFsKCd0b3RwLXNldHRpbmdzLW1vZGFsJyk7XG4gIH0pO1xuXG4gIC8vIENsb3NlIHNldHRpbmdzIG1vZGFsXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RwLW1vZGFsLWNsb3NlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGNsb3NlTW9kYWwoJ3RvdHAtc2V0dGluZ3MtbW9kYWwnKTtcbiAgfSk7XG5cbiAgLy8gQmFja2Ryb3AgY2xpY2sgdG8gY2xvc2VcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdHAtc2V0dGluZ3MtbW9kYWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldC5pZCA9PT0gJ3RvdHAtc2V0dGluZ3MtbW9kYWwnKSB7XG4gICAgICBjbG9zZU1vZGFsKCd0b3RwLXNldHRpbmdzLW1vZGFsJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBVcGRhdGUgYXV0aCBjYXJkIG9uIHBhZ2UgbG9hZFxuICB3aW5kb3cuX3VwZGF0ZUF1dGhDYXJkID0gdXBkYXRlQXV0aENhcmQ7XG4gIChhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3YxL3RvdHAvY29uZmlnJyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gZGF0YS5jb25maWcuZW5hYmxlZCAmJiBkYXRhLmNvbmZpZy5pc1NldFVwO1xuICAgICAgICB1cGRhdGVBdXRoQ2FyZChhY3RpdmUsIGRhdGEuY29uZmlnLnNlc3Npb25EdXJhdGlvbik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkgeyBlcnJvckhhbmRsZXIubG9nRXJyb3IoJ1tUT1RQXSBBdXRoQ2FyZCBVcGRhdGUnLCBlLCB7IGZ1bmN0aW9uOiAnYXV0aENhcmRVcGRhdGUnIH0pOyB9XG4gIH0pKCk7XG5cbn0pKCk7XG47XG4vKipcbiAqIEFkbWluIHBhbmVsIFx1MjAxNCBEQy0wNDguXG4gKlxuICogTWluaW1hbCBhZG1pbiBVSSBmb3IgbWFuYWdpbmcgdXNlcnMgKyBpbnZpdGVzLiBSZW5kZXJlZCBhcyBhIG1vZGFsIG92ZXJsYXlcbiAqIHRyaWdnZXJlZCBieSBhbiBcIkFkbWluXCIgYnV0dG9uIGluIHRoZSB0b3AgYmFyIHRoYXQgb25seSBhcHBlYXJzIHdoZW5cbiAqIC9hcGkvdjEvYXV0aC9tZSByZXR1cm5zIGlzQWRtaW49dHJ1ZS4gVGhlIHBhbmVsIHJlbmRlcnMgdGhyZWUgc2VjdGlvbnM6XG4gKlxuICogICAxLiBVc2VycyBcdTIwMTQgbGlzdCBvZiBhdXRob3JpemVkIHVzZXJzIHdpdGggcm9sZSBiYWRnZXMsIHJvbGUtZWRpdCxcbiAqICAgICAgZGVsZXRlIGFjdGlvbnMuXG4gKiAgIDIuIEludml0ZSBhIHVzZXIgXHUyMDE0IGZvcm0gdG8gaXNzdWUgYSBzaW5nbGUtdXNlIGludml0ZSAoZW1haWwsIHJvbGUsXG4gKiAgICAgIFRUTCkuIFRoZSBhY2NlcHQtbGluayBpcyBzaG93biBwb3N0LWlzc3VlIHNvIHRoZSBhZG1pbiBjYW4gY29weSBpdC5cbiAqICAgMy4gT3V0c3RhbmRpbmcgaW52aXRlcyBcdTIwMTQgbGlzdCBvZiBpc3N1ZWQtbm90LXlldC1hY2NlcHRlZCBpbnZpdGVzXG4gKiAgICAgIHdpdGggYSByZXZva2UgYnV0dG9uLlxuICpcbiAqIFRoZSBwYW5lbCBkb2VzIE5PVCBhZGQgYSB0YWIgdG8gdGhlIGRhc2hib2FyZCBuYXYgXHUyMDE0IGl0IGxpdmVzIGFzIGEgbW9kYWxcbiAqIHRvIGtlZXAgREMtMDQ4IHN1cmdpY2FsLiBGdXR1cmUgREMtMDQ5IHdvcmsgY2FuIHByb21vdGUgaXQgdG8gYSB0YWIuXG4gKlxuICogQmVoYXZpb3VyOlxuICogICAtIE9uIGxvYWQ6IEdFVCAvbWU7IGlmICFpc0FkbWluIFx1MjE5MiBzaG93IFwiYWRtaW4gb25seVwiIHBsYWNlaG9sZGVyXG4gKiAgIC0gVGhlbiBHRVQgL2FkbWluL3VzZXJzICsgL2FkbWluL2ludml0ZXMgaW4gcGFyYWxsZWxcbiAqICAgLSBGb3JtcyBQT1NUIHRvIHRoZSBhZG1pbiBlbmRwb2ludHMsIHJlZnJlc2ggbGlzdHMgb24gc3VjY2Vzc1xuICogICAtIFwiQ29weSBsaW5rXCIgYnV0dG9uIHdyaXRlcyB0aGUgYWNjZXB0VXJsIHRvIHRoZSBjbGlwYm9hcmRcbiAqXG4gKiBXaXJlcyBpbnRvIHRoZSBnbG9iYWwgZXJyb3ItaGFuZGxlciAod2luZG93LmVycm9ySGFuZGxlcikgZm9yIGZhaWx1cmVcbiAqIHN1cmZhY2VzLiBVc2VzIHdpbmRvdy5TSVRFIGZvciBhbnkgVUkgY29uc3RhbnRzIChub25lIGN1cnJlbnRseSkuXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGNvbnN0IEFQSSA9IHtcbiAgICBtZTogJy9hcGkvdjEvYXV0aC9tZScsXG4gICAgdXNlcnM6ICcvYXBpL3YxL2F1dGgvYWRtaW4vdXNlcnMnLFxuICAgIGFsbG93bGlzdDogJy9hcGkvdjEvYXV0aC9hZG1pbi9hbGxvd2xpc3QnLFxuICAgIGludml0ZXM6ICcvYXBpL3YxL2F1dGgvYWRtaW4vaW52aXRlcycsXG4gIH07XG5cbiAgZnVuY3Rpb24gX2VsKHRhZywgYXR0cnMsIC4uLmNoaWxkcmVuKSB7XG4gICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBpZiAoYXR0cnMpIHtcbiAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhhdHRycykpIHtcbiAgICAgICAgY29uc3QgdiA9IGF0dHJzW2tdO1xuICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoayA9PT0gJ2NsYXNzJykgbm9kZS5jbGFzc05hbWUgPSB2O1xuICAgICAgICBlbHNlIGlmIChrID09PSAndGV4dCcpIG5vZGUudGV4dENvbnRlbnQgPSB2O1xuICAgICAgICBlbHNlIGlmIChrID09PSAnaHRtbCcpIG5vZGUuaW5uZXJIVE1MID0gdjtcbiAgICAgICAgZWxzZSBpZiAoay5zdGFydHNXaXRoKCdvbicpICYmIHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSBub2RlLmFkZEV2ZW50TGlzdGVuZXIoay5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLCB2KTtcbiAgICAgICAgZWxzZSBub2RlLnNldEF0dHJpYnV0ZShrLCB2KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjIG9mIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoYyA9PT0gbnVsbCB8fCBjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgaWYgKHR5cGVvZiBjID09PSAnc3RyaW5nJykgbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjKSk7XG4gICAgICBlbHNlIG5vZGUuYXBwZW5kQ2hpbGQoYyk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gX2ZldGNoSlNPTih1cmwsIG9wdHMpIHtcbiAgICBjb25zdCBjc3JmID0gKHdpbmRvdy5TSVRFICYmIHdpbmRvdy5TSVRFLmNzcmZUb2tlbikgfHwgJyc7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgb3B0cy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgb3B0cy5oZWFkZXJzIHx8IHt9LFxuICAgICAgY3NyZiA/IHsgJ1gtQ1NSRi1Ub2tlbic6IGNzcmYgfSA6IHt9XG4gICAgKTtcbiAgICBpZiAob3B0cy5ib2R5ICYmIHR5cGVvZiBvcHRzLmJvZHkgIT09ICdzdHJpbmcnKSBvcHRzLmJvZHkgPSBKU09OLnN0cmluZ2lmeShvcHRzLmJvZHkpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdHMpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICBpZiAoIXIub2spIHtcbiAgICAgIGNvbnN0IG1zZyA9IChkYXRhICYmIChkYXRhLm1lc3NhZ2UgfHwgZGF0YS5lcnJvcikpIHx8ICgnSFRUUCAnICsgci5zdGF0dXMpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgICBlcnIuc3RhdHVzID0gci5zdGF0dXM7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlbmRlckJhZGdlKHJvbGUpIHtcbiAgICBjb25zdCBjb2xvcnMgPSB7XG4gICAgICBhZG1pbjogJ2JhY2tncm91bmQ6IzdjM2FlZDtjb2xvcjojZmZmJyxcbiAgICAgIG9wZXJhdG9yOiAnYmFja2dyb3VuZDojMjU2M2ViO2NvbG9yOiNmZmYnLFxuICAgICAgdmlld2VyOiAnYmFja2dyb3VuZDojNmI3MjgwO2NvbG9yOiNmZmYnLFxuICAgIH07XG4gICAgcmV0dXJuIF9lbCgnc3BhbicsIHtcbiAgICAgIGNsYXNzOiAncm9sZS1iYWRnZScsXG4gICAgICBzdHlsZTogJ2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC43NXJlbTtmb250LXdlaWdodDo2MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOycgK1xuICAgICAgICAoY29sb3JzW3JvbGVdIHx8IGNvbG9ycy52aWV3ZXIpLFxuICAgICAgdGV4dDogcm9sZSxcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9yZW5kZXJVc2Vyc0xpc3QoY29udGFpbmVyLCB1c2Vycywgb25DaGFuZ2UpIHtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgaWYgKCF1c2VycyB8fCB1c2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChfZWwoJ3AnLCB7IHN0eWxlOiAnY29sb3I6dmFyKC0tbXV0ZWQpJywgdGV4dDogJ05vIHVzZXJzIHlldC4nIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSBfZWwoJ3RhYmxlJywge1xuICAgICAgc3R5bGU6ICd3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MC45cmVtJyxcbiAgICB9KTtcbiAgICB0YWJsZS5hcHBlbmRDaGlsZChfZWwoJ3RoZWFkJywgbnVsbCxcbiAgICAgIF9lbCgndHInLCB7IHN0eWxlOiAnYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKScgfSxcbiAgICAgICAgX2VsKCd0aCcsIHsgc3R5bGU6ICd0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzo4cHgnLCB0ZXh0OiAnRW1haWwnIH0pLFxuICAgICAgICBfZWwoJ3RoJywgeyBzdHlsZTogJ3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjhweCcsIHRleHQ6ICdSb2xlJyB9KSxcbiAgICAgICAgX2VsKCd0aCcsIHsgc3R5bGU6ICd0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzo4cHgnLCB0ZXh0OiAnQ3JlYXRlZCcgfSksXG4gICAgICAgIF9lbCgndGgnLCB7IHN0eWxlOiAndGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4JywgdGV4dDogJ0xhc3QgbG9naW4nIH0pLFxuICAgICAgICBfZWwoJ3RoJywgeyBzdHlsZTogJ3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZzo4cHgnLCB0ZXh0OiAnQWN0aW9ucycgfSksXG4gICAgICApLFxuICAgICkpO1xuICAgIGNvbnN0IHRib2R5ID0gX2VsKCd0Ym9keScpO1xuICAgIGZvciAoY29uc3QgdSBvZiB1c2Vycykge1xuICAgICAgY29uc3Qgcm93ID0gX2VsKCd0cicsIHsgc3R5bGU6ICdib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpJyB9KTtcblxuICAgICAgY29uc3QgZW1haWxDZWxsID0gX2VsKCd0ZCcsIHsgc3R5bGU6ICdwYWRkaW5nOjhweCcgfSk7XG4gICAgICBlbWFpbENlbGwuYXBwZW5kQ2hpbGQoX2VsKCdzcGFuJywgeyB0ZXh0OiB1LmVtYWlsIHx8ICcobm8gZW1haWwpJyB9KSk7XG4gICAgICBpZiAodS5kaXNwbGF5TmFtZSAmJiB1LmRpc3BsYXlOYW1lICE9PSAodS5lbWFpbCB8fCAnJykuc3BsaXQoJ0AnKVswXSkge1xuICAgICAgICBlbWFpbENlbGwuYXBwZW5kQ2hpbGQoX2VsKCdicicpKTtcbiAgICAgICAgZW1haWxDZWxsLmFwcGVuZENoaWxkKF9lbCgnc21hbGwnLCB7XG4gICAgICAgICAgc3R5bGU6ICdjb2xvcjp2YXIoLS1tdXRlZCknLCB0ZXh0OiB1LmRpc3BsYXlOYW1lLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByb3cuYXBwZW5kQ2hpbGQoZW1haWxDZWxsKTtcblxuICAgICAgY29uc3Qgcm9sZUNlbGwgPSBfZWwoJ3RkJywgeyBzdHlsZTogJ3BhZGRpbmc6OHB4JyB9KTtcbiAgICAgIHJvbGVDZWxsLmFwcGVuZENoaWxkKF9yZW5kZXJCYWRnZSh1LnJvbGUpKTtcbiAgICAgIHJvdy5hcHBlbmRDaGlsZChyb2xlQ2VsbCk7XG5cbiAgICAgIHJvdy5hcHBlbmRDaGlsZChfZWwoJ3RkJywge1xuICAgICAgICBzdHlsZTogJ3BhZGRpbmc6OHB4O2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MC44NXJlbScsXG4gICAgICAgIHRleHQ6IHUuY3JlYXRlZEF0ID8gbmV3IERhdGUodS5jcmVhdGVkQXQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogJ1x1MjAxNCcsXG4gICAgICB9KSk7XG4gICAgICByb3cuYXBwZW5kQ2hpbGQoX2VsKCd0ZCcsIHtcbiAgICAgICAgc3R5bGU6ICdwYWRkaW5nOjhweDtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjAuODVyZW0nLFxuICAgICAgICB0ZXh0OiB1Lmxhc3RMb2dpbkF0ID8gbmV3IERhdGUodS5sYXN0TG9naW5BdCkudG9Mb2NhbGVTdHJpbmcoKSA6ICdcdTIwMTQnLFxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBhY3Rpb25zQ2VsbCA9IF9lbCgndGQnLCB7IHN0eWxlOiAncGFkZGluZzo4cHg7dGV4dC1hbGlnbjpyaWdodCcgfSk7XG4gICAgICBjb25zdCByb2xlU2VsZWN0ID0gX2VsKCdzZWxlY3QnLCB7XG4gICAgICAgIHN0eWxlOiAncGFkZGluZzoycHggNnB4O21hcmdpbi1yaWdodDo2cHgnLFxuICAgICAgICBvbmNoYW5nZTogYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IF9mZXRjaEpTT04oQVBJLnVzZXJzICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KHUuaWQpLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogJ1BBVENIJywgYm9keTogeyByb2xlOiBldi50YXJnZXQudmFsdWUgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB3aW5kb3cuZXJyb3JIYW5kbGVyICYmIHdpbmRvdy5lcnJvckhhbmRsZXIuc2hvdygnUm9sZSB1cGRhdGUgZmFpbGVkOiAnICsgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIGV2LnRhcmdldC52YWx1ZSA9IHUucm9sZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgciBvZiBbJ2FkbWluJywgJ29wZXJhdG9yJywgJ3ZpZXdlciddKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IF9lbCgnb3B0aW9uJywgeyB2YWx1ZTogciwgdGV4dDogciB9KTtcbiAgICAgICAgaWYgKHIgPT09IHUucm9sZSkgb3B0LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgcm9sZVNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgICAgfVxuICAgICAgYWN0aW9uc0NlbGwuYXBwZW5kQ2hpbGQocm9sZVNlbGVjdCk7XG5cbiAgICAgIGNvbnN0IGRlbEJ0biA9IF9lbCgnYnV0dG9uJywge1xuICAgICAgICBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncGFkZGluZzoycHggOHB4JyxcbiAgICAgICAgdGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIG9uY2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoIWNvbmZpcm0oJ0RlbGV0ZSB1c2VyICcgKyAodS5lbWFpbCB8fCB1LmlkKSArICc/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS4nKSkgcmV0dXJuO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBfZmV0Y2hKU09OKEFQSS51c2VycyArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudCh1LmlkKSwgeyBtZXRob2Q6ICdERUxFVEUnIH0pO1xuICAgICAgICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB3aW5kb3cuZXJyb3JIYW5kbGVyICYmIHdpbmRvdy5lcnJvckhhbmRsZXIuc2hvdygnRGVsZXRlIGZhaWxlZDogJyArIGUubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhY3Rpb25zQ2VsbC5hcHBlbmRDaGlsZChkZWxCdG4pO1xuICAgICAgcm93LmFwcGVuZENoaWxkKGFjdGlvbnNDZWxsKTtcblxuICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQocm93KTtcbiAgICB9XG4gICAgdGFibGUuYXBwZW5kQ2hpbGQodGJvZHkpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0YWJsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBfcmVuZGVySW52aXRlRm9ybShjb250YWluZXIsIG9uSXNzdWVkKSB7XG4gICAgY29uc3QgZm9ybSA9IF9lbCgnZm9ybScsIHtcbiAgICAgIHN0eWxlOiAnZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6ZW5kJyxcbiAgICAgIG9uc3VibWl0OiBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoZXYudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICBlbWFpbDogZmQuZ2V0KCdlbWFpbCcpLFxuICAgICAgICAgIHJvbGU6IGZkLmdldCgncm9sZScpLFxuICAgICAgICAgIHR0bEhvdXJzOiBwYXJzZUludChmZC5nZXQoJ3R0bEhvdXJzJyksIDEwKSB8fCAyNCxcbiAgICAgICAgICBzZW5kRW1haWw6IGZkLmdldCgnc2VuZEVtYWlsJykgPT09ICdvbicsXG4gICAgICAgIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgciA9IGF3YWl0IF9mZXRjaEpTT04oQVBJLmludml0ZXMsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHkgfSk7XG4gICAgICAgICAgZXYudGFyZ2V0LnJlc2V0KCk7XG4gICAgICAgICAgb25Jc3N1ZWQgJiYgb25Jc3N1ZWQocik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB3aW5kb3cuZXJyb3JIYW5kbGVyICYmIHdpbmRvdy5lcnJvckhhbmRsZXIuc2hvdygnSW52aXRlIGZhaWxlZDogJyArIGUubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZm9ybS5hcHBlbmRDaGlsZChfZWwoJ2xhYmVsJywgeyBzdHlsZTogJ2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDtmb250LXNpemU6MC44NXJlbScgfSxcbiAgICAgIF9lbCgnc3BhbicsIHsgdGV4dDogJ0VtYWlsJyB9KSxcbiAgICAgIF9lbCgnaW5wdXQnLCB7IG5hbWU6ICdlbWFpbCcsIHR5cGU6ICdlbWFpbCcsIHJlcXVpcmVkOiB0cnVlLCBwbGFjZWhvbGRlcjogJ3VzZXJAZXhhbXBsZS5jb20nLCBzdHlsZTogJ3BhZGRpbmc6NnB4JyB9KSxcbiAgICApKTtcbiAgICBjb25zdCByb2xlU2VsID0gX2VsKCdzZWxlY3QnLCB7IG5hbWU6ICdyb2xlJywgc3R5bGU6ICdwYWRkaW5nOjZweCcgfSk7XG4gICAgZm9yIChjb25zdCByIG9mIFsnb3BlcmF0b3InLCAndmlld2VyJywgJ2FkbWluJ10pIHtcbiAgICAgIHJvbGVTZWwuYXBwZW5kQ2hpbGQoX2VsKCdvcHRpb24nLCB7IHZhbHVlOiByLCB0ZXh0OiByIH0pKTtcbiAgICB9XG4gICAgZm9ybS5hcHBlbmRDaGlsZChfZWwoJ2xhYmVsJywgeyBzdHlsZTogJ2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDtmb250LXNpemU6MC44NXJlbScgfSxcbiAgICAgIF9lbCgnc3BhbicsIHsgdGV4dDogJ1JvbGUnIH0pLCByb2xlU2VsLFxuICAgICkpO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQoX2VsKCdsYWJlbCcsIHsgc3R5bGU6ICdkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHg7Zm9udC1zaXplOjAuODVyZW0nIH0sXG4gICAgICBfZWwoJ3NwYW4nLCB7IHRleHQ6ICdUVEwgKGhvdXJzKScgfSksXG4gICAgICBfZWwoJ2lucHV0JywgeyBuYW1lOiAndHRsSG91cnMnLCB0eXBlOiAnbnVtYmVyJywgbWluOiAnMScsIG1heDogJzE2OCcsIHZhbHVlOiAnMjQnLCBzdHlsZTogJ3BhZGRpbmc6NnB4O3dpZHRoOjgwcHgnIH0pLFxuICAgICkpO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQoX2VsKCdsYWJlbCcsIHsgc3R5bGU6ICdkaXNwbGF5OmZsZXg7Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjAuODVyZW0nIH0sXG4gICAgICBfZWwoJ2lucHV0JywgeyBuYW1lOiAnc2VuZEVtYWlsJywgdHlwZTogJ2NoZWNrYm94JywgY2hlY2tlZDogdHJ1ZSB9KSxcbiAgICAgIF9lbCgnc3BhbicsIHsgdGV4dDogJ1NlbmQgZW1haWwnIH0pLFxuICAgICkpO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQoX2VsKCdidXR0b24nLCB7IHR5cGU6ICdzdWJtaXQnLCBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncGFkZGluZzo2cHggMTJweCcsIHRleHQ6ICdJc3N1ZSBpbnZpdGUnIH0pKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIH1cblxuICBmdW5jdGlvbiBfcmVuZGVySW52aXRlc0xpc3QoY29udGFpbmVyLCBpbnZpdGVzLCBvbkNoYW5nZSkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICBpZiAoIWludml0ZXMgfHwgaW52aXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChfZWwoJ3AnLCB7IHN0eWxlOiAnY29sb3I6dmFyKC0tbXV0ZWQpJywgdGV4dDogJ05vIG91dHN0YW5kaW5nIGludml0ZXMuJyB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlID0gX2VsKCd0YWJsZScsIHtcbiAgICAgIHN0eWxlOiAnd2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjAuOXJlbScsXG4gICAgfSk7XG4gICAgdGFibGUuYXBwZW5kQ2hpbGQoX2VsKCd0aGVhZCcsIG51bGwsXG4gICAgICBfZWwoJ3RyJywgeyBzdHlsZTogJ2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlciknIH0sXG4gICAgICAgIF9lbCgndGgnLCB7IHN0eWxlOiAndGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4JywgdGV4dDogJ0VtYWlsJyB9KSxcbiAgICAgICAgX2VsKCd0aCcsIHsgc3R5bGU6ICd0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzo4cHgnLCB0ZXh0OiAnUm9sZScgfSksXG4gICAgICAgIF9lbCgndGgnLCB7IHN0eWxlOiAndGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4JywgdGV4dDogJ0ludml0ZWQgYnknIH0pLFxuICAgICAgICBfZWwoJ3RoJywgeyBzdHlsZTogJ3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjhweCcsIHRleHQ6ICdFeHBpcmVzJyB9KSxcbiAgICAgICAgX2VsKCd0aCcsIHsgc3R5bGU6ICd0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmc6OHB4JywgdGV4dDogJ0FjdGlvbnMnIH0pLFxuICAgICAgKSxcbiAgICApKTtcbiAgICBjb25zdCB0Ym9keSA9IF9lbCgndGJvZHknKTtcbiAgICBmb3IgKGNvbnN0IGludiBvZiBpbnZpdGVzKSB7XG4gICAgICBjb25zdCByb3cgPSBfZWwoJ3RyJywgeyBzdHlsZTogJ2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlciknIH0pO1xuICAgICAgcm93LmFwcGVuZENoaWxkKF9lbCgndGQnLCB7IHN0eWxlOiAncGFkZGluZzo4cHgnLCB0ZXh0OiBpbnYuZW1haWwgfSkpO1xuICAgICAgcm93LmFwcGVuZENoaWxkKF9lbCgndGQnLCB7IHN0eWxlOiAncGFkZGluZzo4cHgnIH0sIF9yZW5kZXJCYWRnZShpbnYucm9sZSkpKTtcbiAgICAgIHJvdy5hcHBlbmRDaGlsZChfZWwoJ3RkJywgeyBzdHlsZTogJ3BhZGRpbmc6OHB4O2NvbG9yOnZhcigtLW11dGVkKScsIHRleHQ6IGludi5pbnZpdGVkQnkgfHwgJ1x1MjAxNCcgfSkpO1xuICAgICAgcm93LmFwcGVuZENoaWxkKF9lbCgndGQnLCB7XG4gICAgICAgIHN0eWxlOiAncGFkZGluZzo4cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZTowLjg1cmVtJyxcbiAgICAgICAgdGV4dDogaW52LmV4cGlyZXNBdCA/IG5ldyBEYXRlKGludi5leHBpcmVzQXQpLnRvTG9jYWxlU3RyaW5nKCkgOiAnXHUyMDE0JyxcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGFjdGlvbnNDZWxsID0gX2VsKCd0ZCcsIHsgc3R5bGU6ICdwYWRkaW5nOjhweDt0ZXh0LWFsaWduOnJpZ2h0JyB9KTtcbiAgICAgIGFjdGlvbnNDZWxsLmFwcGVuZENoaWxkKF9lbCgnYnV0dG9uJywge1xuICAgICAgICBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncGFkZGluZzoycHggOHB4JyxcbiAgICAgICAgdGV4dDogJ1Jldm9rZScsXG4gICAgICAgIG9uY2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoIWNvbmZpcm0oJ1Jldm9rZSBpbnZpdGUgZm9yICcgKyBpbnYuZW1haWwgKyAnPycpKSByZXR1cm47XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IF9mZXRjaEpTT04oQVBJLmludml0ZXMgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoaW52LmlkKSwgeyBtZXRob2Q6ICdERUxFVEUnIH0pO1xuICAgICAgICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB3aW5kb3cuZXJyb3JIYW5kbGVyICYmIHdpbmRvdy5lcnJvckhhbmRsZXIuc2hvdygnUmV2b2tlIGZhaWxlZDogJyArIGUubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSkpO1xuICAgICAgcm93LmFwcGVuZENoaWxkKGFjdGlvbnNDZWxsKTtcbiAgICAgIHRib2R5LmFwcGVuZENoaWxkKHJvdyk7XG4gICAgfVxuICAgIHRhYmxlLmFwcGVuZENoaWxkKHRib2R5KTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGFibGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlbmRlcklzc3VlZEludml0ZUJhbm5lcihpbnZpdGUsIHBhcmVudCkge1xuICAgIGNvbnN0IGJhbm5lciA9IF9lbCgnZGl2Jywge1xuICAgICAgc3R5bGU6ICdtYXJnaW4tdG9wOjEycHg7cGFkZGluZzoxMnB4O2JvcmRlcjoxcHggc29saWQgIzE2YTM0YTtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiMwNTJlMWE7Y29sb3I6I2JiZjdkMDtmb250LXNpemU6MC44NXJlbScsXG4gICAgfSk7XG4gICAgYmFubmVyLmFwcGVuZENoaWxkKF9lbCgnc3Ryb25nJywgeyB0ZXh0OiAnSW52aXRlIGlzc3VlZCBcdTIwMTQgY29weSB0aGUgbGluayBiZWxvdy4gJyArXG4gICAgICAnSXQgd2lsbCBub3QgYmUgc2hvd24gYWdhaW4uJyB9KSk7XG4gICAgYmFubmVyLmFwcGVuZENoaWxkKF9lbCgnYnInKSk7XG4gICAgYmFubmVyLmFwcGVuZENoaWxkKF9lbCgnY29kZScsIHtcbiAgICAgIHN0eWxlOiAnZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjhweDtwYWRkaW5nOjhweDtiYWNrZ3JvdW5kOiMwMDA7Ym9yZGVyLXJhZGl1czo0cHg7d29yZC1icmVhazpicmVhay1hbGw7Y29sb3I6I2QxZmFlNScsXG4gICAgICB0ZXh0OiBpbnZpdGUuYWNjZXB0VXJsLFxuICAgIH0pKTtcbiAgICBjb25zdCBjb3B5QnRuID0gX2VsKCdidXR0b24nLCB7XG4gICAgICBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAnbWFyZ2luLXRvcDo4cHg7cGFkZGluZzo0cHggMTBweCcsXG4gICAgICB0ZXh0OiAnQ29weSBsaW5rJyxcbiAgICAgIG9uY2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChpbnZpdGUuYWNjZXB0VXJsKTtcbiAgICAgICAgICBjb3B5QnRuLnRleHRDb250ZW50ID0gJ0NvcGllZCEnO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBjb3B5QnRuLnRleHRDb250ZW50ID0gJ0NvcHkgbGluayc7IH0sIDIwMDApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgd2luZG93LmVycm9ySGFuZGxlciAmJiB3aW5kb3cuZXJyb3JIYW5kbGVyLnNob3coJ0NsaXBib2FyZCBibG9ja2VkOiBzZWxlY3QgdGhlIGxpbmsgbWFudWFsbHkuJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgYmFubmVyLmFwcGVuZENoaWxkKGNvcHlCdG4pO1xuICAgIGlmIChpbnZpdGUuZGVsaXZlcmVkVmlhID09PSAnZGV2LWNvbnNvbGUnKSB7XG4gICAgICBiYW5uZXIuYXBwZW5kQ2hpbGQoX2VsKCdwJywge1xuICAgICAgICBzdHlsZTogJ21hcmdpbi10b3A6OHB4O2NvbG9yOiNmYmJmMjQ7Zm9udC1zaXplOjAuOHJlbScsXG4gICAgICAgIHRleHQ6ICdTTVRQIG5vdCBjb25maWd1cmVkIFx1MjAxNCB0aGUgaW52aXRlIHdhcyBsb2dnZWQgdG8gdGhlIHNlcnZlciBjb25zb2xlIChzZWFyY2ggZm9yIFtEQy0wNDgtREVWLUlOVklURS1MSU5LXSkuJyxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKGludml0ZS5kZWxpdmVyZWRWaWEgPT09ICdlbWFpbCcpIHtcbiAgICAgIGJhbm5lci5hcHBlbmRDaGlsZChfZWwoJ3AnLCB7XG4gICAgICAgIHN0eWxlOiAnbWFyZ2luLXRvcDo4cHg7Y29sb3I6Izg2ZWZhYztmb250LXNpemU6MC44cmVtJyxcbiAgICAgICAgdGV4dDogJ0VtYWlsIHNlbnQgdG8gJyArIGludml0ZS5lbWFpbCArICcuJyxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcGFyZW50LmFwcGVuZENoaWxkKGJhbm5lcik7XG4gIH1cblxuICAvKipcbiAgICogTW91bnQgdGhlIGFkbWluIHBhbmVsLiBDYWxsZWQgYnkgdGhlIG9wZW4gdHJpZ2dlcjsgc2FmZSB0byBjYWxsIG11bHRpcGxlXG4gICAqIHRpbWVzIChyZS1yZW5kZXJzIGludG8gdGhlIHNhbWUgY29udGFpbmVyKS5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG1vdW50KGNvbnRhaW5lcikge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoX2VsKCdoMicsIHsgc3R5bGU6ICdtYXJnaW46MCAwIDE2cHgnLCB0ZXh0OiAnQWRtaW4gXHUwMEI3IFVzZXJzICYgSW52aXRlcycgfSkpO1xuXG4gICAgY29uc3QgbWVEYXRhID0gYXdhaXQgX2ZldGNoSlNPTihBUEkubWUpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIGlmICghbWVEYXRhIHx8ICFtZURhdGEudXNlciB8fCBtZURhdGEudXNlci5yb2xlICE9PSAnYWRtaW4nKSB7XG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoX2VsKCdwJywge1xuICAgICAgICBzdHlsZTogJ2NvbG9yOnZhcigtLW11dGVkKScsXG4gICAgICAgIHRleHQ6ICdBZG1pbiByb2xlIHJlcXVpcmVkIHRvIHZpZXcgdGhpcyBwYW5lbC4gSWYgbXVsdGktdXNlciBtb2RlIGlzIGVuYWJsZWQgYW5kIHlvdSBzaG91bGQgaGF2ZSBhY2Nlc3MsIGNoZWNrIC9hcGkvdjEvYXV0aC9tZS4nLFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlZnJlc2ggYnV0dG9uXG4gICAgY29uc3QgcmVmcmVzaEJ0biA9IF9lbCgnYnV0dG9uJywge1xuICAgICAgY2xhc3M6ICdidG4tc20nLCBzdHlsZTogJ2Zsb2F0OnJpZ2h0O3BhZGRpbmc6NHB4IDEwcHgnLFxuICAgICAgdGV4dDogJ1JlZnJlc2gnLFxuICAgICAgb25jbGljazogKCkgPT4gbW91bnQoY29udGFpbmVyKSxcbiAgICB9KTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQocmVmcmVzaEJ0bik7XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgVXNlcnMgc2VjdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCB1c2Vyc0hlYWRlciA9IF9lbCgnaDMnLCB7IHN0eWxlOiAnbWFyZ2luOjI0cHggMCA4cHg7Y2xlYXI6Ym90aCcsIHRleHQ6ICdVc2VycycgfSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHVzZXJzSGVhZGVyKTtcblxuICAgIGNvbnN0IHVzZXJzTGlzdCA9IF9lbCgnZGl2JywgeyBpZDogJ2FkbWluLXVzZXJzLWxpc3QnIH0pO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh1c2Vyc0xpc3QpO1xuXG4gICAgY29uc3QgdXNlcnNEYXRhID0gYXdhaXQgX2ZldGNoSlNPTihBUEkudXNlcnMpLmNhdGNoKCgpID0+ICh7IHVzZXJzOiBbXSB9KSk7XG4gICAgX3JlbmRlclVzZXJzTGlzdCh1c2Vyc0xpc3QsIHVzZXJzRGF0YS51c2VycywgKCkgPT4gbW91bnQoY29udGFpbmVyKSk7XG5cbiAgICAvLyBBZGQgdXNlciBmb3JtIChwcmUtYXV0aG9yaXplIGFuIGVtYWlsIHdpdGhvdXQgaXNzdWluZyBhbiBpbnZpdGUpLlxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChfZWwoJ2g0JywgeyBzdHlsZTogJ21hcmdpbjoyNHB4IDAgOHB4O2ZvbnQtc2l6ZTowLjk1cmVtJywgdGV4dDogJ1ByZS1hdXRob3JpemUgZW1haWwnIH0pKTtcbiAgICBjb25zdCBhZGRVc2VyRm9ybSA9IF9lbCgnZm9ybScsIHtcbiAgICAgIHN0eWxlOiAnZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kJyxcbiAgICAgIG9uc3VibWl0OiBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZW1haWwgPSBldi50YXJnZXQuZW1haWwudmFsdWUudHJpbSgpO1xuICAgICAgICBpZiAoIWVtYWlsKSByZXR1cm47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgX2ZldGNoSlNPTihBUEkudXNlcnMsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IHsgZW1haWwgfSB9KTtcbiAgICAgICAgICBldi50YXJnZXQucmVzZXQoKTtcbiAgICAgICAgICBtb3VudChjb250YWluZXIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgd2luZG93LmVycm9ySGFuZGxlciAmJiB3aW5kb3cuZXJyb3JIYW5kbGVyLnNob3coJ0FkZCBmYWlsZWQ6ICcgKyBlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGFkZFVzZXJGb3JtLmFwcGVuZENoaWxkKF9lbCgnaW5wdXQnLCB7IG5hbWU6ICdlbWFpbCcsIHR5cGU6ICdlbWFpbCcsIHJlcXVpcmVkOiB0cnVlLCBwbGFjZWhvbGRlcjogJ3VzZXJAZXhhbXBsZS5jb20nLCBzdHlsZTogJ3BhZGRpbmc6NnB4JyB9KSk7XG4gICAgYWRkVXNlckZvcm0uYXBwZW5kQ2hpbGQoX2VsKCdidXR0b24nLCB7IHR5cGU6ICdzdWJtaXQnLCBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncGFkZGluZzo2cHggMTJweCcsIHRleHQ6ICdBZGQgdG8gYWxsb3dsaXN0JyB9KSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGFkZFVzZXJGb3JtKTtcblxuICAgIC8vIFx1MjUwMFx1MjUwMCBJbnZpdGVzIHNlY3Rpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKF9lbCgnaDMnLCB7IHN0eWxlOiAnbWFyZ2luOjI0cHggMCA4cHgnLCB0ZXh0OiAnSXNzdWUgaW52aXRlJyB9KSk7XG4gICAgY29uc3QgaW52aXRlRm9ybUNvbnRhaW5lciA9IF9lbCgnZGl2Jyk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGludml0ZUZvcm1Db250YWluZXIpO1xuXG4gICAgY29uc3QgaW52aXRlc0xpc3QgPSBfZWwoJ2RpdicsIHsgaWQ6ICdhZG1pbi1pbnZpdGVzLWxpc3QnLCBzdHlsZTogJ21hcmdpbi10b3A6MTZweCcgfSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGludml0ZXNMaXN0KTtcblxuICAgIGNvbnN0IGludml0ZXNEYXRhID0gYXdhaXQgX2ZldGNoSlNPTihBUEkuaW52aXRlcykuY2F0Y2goKCkgPT4gKHsgaW52aXRlczogW10gfSkpO1xuICAgIF9yZW5kZXJJbnZpdGVzTGlzdChpbnZpdGVzTGlzdCwgaW52aXRlc0RhdGEuaW52aXRlcywgKCkgPT4gbW91bnQoY29udGFpbmVyKSk7XG5cbiAgICBfcmVuZGVySW52aXRlRm9ybShpbnZpdGVGb3JtQ29udGFpbmVyLCAoaXNzdWVkKSA9PiB7XG4gICAgICBfcmVuZGVySXNzdWVkSW52aXRlQmFubmVyKGlzc3VlZCwgaW52aXRlRm9ybUNvbnRhaW5lcik7XG4gICAgICBtb3VudChjb250YWluZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFB1YmxpYyBBUEkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGFkbWluIHBhbmVsIGFzIGEgbW9kYWwgb3ZlcmxheS4gQ2xvc2VzIG9uIGJhY2tkcm9wIGNsaWNrIG9yXG4gICAqIHRoZSBjbG9zZSBidXR0b24uIFJlbmRlcnMgaW50byBkb2N1bWVudC5ib2R5IHNvIGl0IGZsb2F0cyBhYm92ZSB0aGVcbiAgICogZGFzaGJvYXJkIGNocm9tZS5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgLy8gSWYgYWxyZWFkeSBvcGVuLCBqdXN0IGZvY3VzLlxuICAgIGNvbnN0IGV4aXN0aW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkbWluLXBhbmVsLXJvb3QnKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybjtcblxuICAgIGNvbnN0IGJhY2tkcm9wID0gX2VsKCdkaXYnLCB7XG4gICAgICBpZDogJ2FkbWluLXBhbmVsLXJvb3QnLFxuICAgICAgc3R5bGU6ICdwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7JyxcbiAgICAgIG9uY2xpY2s6IChldikgPT4ge1xuICAgICAgICBpZiAoZXYudGFyZ2V0ID09PSBiYWNrZHJvcCkgY2xvc2UoKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjYXJkID0gX2VsKCdkaXYnLCB7XG4gICAgICBzdHlsZTogJ2JhY2tncm91bmQ6dmFyKC0tY2FyZC1iYXNlLCMxZjI5MzcpO2NvbG9yOnZhcigtLXRleHQsI2YzZjRmNik7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoyNHB4O21heC13aWR0aDo5MDBweDt3aWR0aDo5MCU7bWF4LWhlaWdodDo4NXZoO292ZXJmbG93OmF1dG87cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDEwcHggMzBweCByZ2JhKDAsMCwwLDAuMyknLFxuICAgIH0pO1xuICAgIGNhcmQuYXBwZW5kQ2hpbGQoX2VsKCdidXR0b24nLCB7XG4gICAgICBjbGFzczogJ2J0bi1zbScsIHN0eWxlOiAncG9zaXRpb246YWJzb2x1dGU7dG9wOjEycHg7cmlnaHQ6MTJweDtwYWRkaW5nOjRweCAxMHB4JyxcbiAgICAgIHRleHQ6ICdDbG9zZScsIG9uY2xpY2s6IGNsb3NlLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGJvZHkgPSBfZWwoJ2RpdicsIHsgaWQ6ICdhZG1pbi1wYW5lbC1ib2R5JyB9KTtcbiAgICBjYXJkLmFwcGVuZENoaWxkKGJvZHkpO1xuICAgIGJhY2tkcm9wLmFwcGVuZENoaWxkKGNhcmQpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmFja2Ryb3ApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1vdW50KGJvZHkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGJvZHkuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiY29sb3I6I2Y4NzE3MVwiPkZhaWxlZCB0byBsb2FkIGFkbWluIHBhbmVsOiAnICsgKGUubWVzc2FnZSB8fCBlKSArICc8L3A+JztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZG1pbi1wYW5lbC1yb290Jyk7XG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5yZW1vdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3QgYW4gXCJBZG1pblwiIGJ1dHRvbiBpbnRvIHRoZSB0b3AgYmFyLiBPbmx5IHJlbmRlcnMgd2hlbiB0aGVcbiAgICogY3VycmVudCAvbWUgcmVzcG9uc2Ugc2F5cyBpc0FkbWluPXRydWUuIFJlLWNoZWNrcyBwZXJpb2RpY2FsbHlcbiAgICogKGV2ZXJ5IDYwcykgc28gYSBwZXJtaXNzaW9uIGRvd25ncmFkZSB0YWtlcyBlZmZlY3Qgd2l0aG91dCBhIHJlbG9hZC5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaFRyaWdnZXIoYmFyQ29udGFpbmVyKSB7XG4gICAgYXN5bmMgZnVuY3Rpb24gX21heWJlU2hvdygpIHtcbiAgICAgIGNvbnN0IG1lID0gYXdhaXQgX2ZldGNoSlNPTihBUEkubWUpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRtaW4tdHJpZ2dlci1idG4nKTtcbiAgICAgIGlmIChtZSAmJiBtZS51c2VyICYmIG1lLnVzZXIucm9sZSA9PT0gJ2FkbWluJykge1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgYnRuID0gX2VsKCdidXR0b24nLCB7XG4gICAgICAgICAgaWQ6ICdhZG1pbi10cmlnZ2VyLWJ0bicsXG4gICAgICAgICAgY2xhc3M6ICdidG4tc20nLFxuICAgICAgICAgIHN0eWxlOiAnbWFyZ2luLWxlZnQ6OHB4O3BhZGRpbmc6NnB4IDEycHgnLFxuICAgICAgICAgIHRleHQ6ICdBZG1pbicsXG4gICAgICAgICAgb25jbGljazogb3BlbixcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChiYXJDb250YWluZXIpIGJhckNvbnRhaW5lci5hcHBlbmRDaGlsZChidG4pO1xuICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJ0bik7XG4gICAgICB9IGVsc2UgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIGV4aXN0aW5nLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBfbWF5YmVTaG93KCk7XG4gICAgc2V0SW50ZXJ2YWwoX21heWJlU2hvdywgNjBfMDAwKTtcbiAgfVxuXG4gIHdpbmRvdy5BZG1pblBhbmVsID0geyBvcGVuLCBjbG9zZSwgYXR0YWNoVHJpZ2dlciB9O1xufSkoKTs7XG4vLyA9PT09PT09PT09IENSRURFTlRJQUwgTUFOQUdFTUVOVCA9PT09PT09PT09XG4oZnVuY3Rpb24gKCkge1xuXG4gIC8vIEluamVjdCBza2VsZXRvbiBtb2RhbCBcdTIwMTQgY3JlZGVudGlhbCBzZWN0aW9ucyBhcmUgYnVpbHQgZHluYW1pY2FsbHkgd2hlbiBvcGVuZWRcbiAgaW5qZWN0TW9kYWwoJ3Rva2VuLW1hbmFnZW1lbnQtbW9kYWwnLCBgXG4gIDxkaXYgaWQ9XCJ0b2tlbi1tYW5hZ2VtZW50LW1vZGFsXCIgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtY29udGVudFwiIHN0eWxlPVwibWluLXdpZHRoOiA1MDBweDsgbWF4LXdpZHRoOiA2MDBweDtcIj5cbiAgICAgIDxoMz5cXHV7MUY1MTF9IEROUyBDcmVkZW50aWFsczwvaDM+XG5cbiAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjg1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW46IDAgMCAxNnB4O1wiPlxuICAgICAgICBFbnRlciBUZWNobml0aXVtIEROUyBsb2dpbiBjcmVkZW50aWFscy4gUmVhZC1vbmx5IGFjY291bnRzIGFyZSB1c2VkIGZvciBsb2dzOyBhZG1pbiBhY2NvdW50cyBmb3IgcmVzdGFydHMsIHJlY29yZHMsIGFuZCB1cGRhdGVzLlxuICAgICAgPC9wPlxuXG4gICAgICA8ZGl2IGlkPVwiZG5zLWNyZWQtc2VjdGlvbnNcIj48L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtYnV0dG9ucyBtb2RhbC1mb290ZXItYmFyXCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b2tlbi1jbGVhci1hbGxcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogYXV0bzsgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWJhZC1mZykgMTUlLCB0cmFuc3BhcmVudCk7IGJvcmRlci1jb2xvcjogdmFyKC0tYmFkLWZnKTsgY29sb3I6IHZhcigtLWJhZC1mZyk7XCI+Q2xlYXIgQWxsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0b2tlbi1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInRva2VuLXNhdmVcIiBjbGFzcz1cImJ0bi1hY2NlbnRcIj5TYXZlPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIGApO1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBIZWxwZXJzIFx1MjUwMFx1MjUwMFxuXG4gIGZ1bmN0aW9uIGdldERuc0lkcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoU0lURS5kbnNTZXJ2ZXJzIHx8IHt9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERuc0Rpc3BsYXlOYW1lKGRuc0lkKSB7XG4gICAgY29uc3Qgc2VydmVyID0gKFNJVEUuZG5zU2VydmVycyB8fCB7fSlbZG5zSWRdO1xuICAgIHJldHVybiBzZXJ2ZXI/Lm5hbWUgfHwgZG5zSWQudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIC8qKiBCdWlsZCBwZXItc2VydmVyIGNyZWRlbnRpYWwgZm9ybSBzZWN0aW9ucyBmcm9tIFNJVEUuZG5zU2VydmVycyAqL1xuICBmdW5jdGlvbiBidWlsZENyZWRlbnRpYWxTZWN0aW9ucygpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWNyZWQtc2VjdGlvbnMnKTtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcblxuICAgIGNvbnN0IGRuc0lkcyA9IGdldERuc0lkcygpO1xuICAgIGlmIChkbnNJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAyMHB4O1wiPk5vIEROUyBzZXJ2ZXJzIGNvbmZpZ3VyZWQuPC9wPic7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpZCBvZiBkbnNJZHMpIHtcbiAgICAgIGNvbnRhaW5lci5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbi1zZWN0aW9uXCI+XG4gICAgICAgIDxoNCBjbGFzcz1cInRva2VuLXNlY3Rpb24tdGl0bGVcIj4ke2dldERuc0Rpc3BsYXlOYW1lKGlkKX08L2g0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9rZW4tZ3JpZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbi1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cIiR7aWR9LXJlYWRvbmx5LXVzZXJuYW1lXCI+XFx1ezFGNEQ2fSBSZWFkLU9ubHkgKExvZ3MpOjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cIiR7aWR9LXJlYWRvbmx5LXVzZXJuYW1lXCIgcGxhY2Vob2xkZXI9XCJVc2VybmFtZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNHB4O1wiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9rZW4taW5wdXQtcm93XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cIiR7aWR9LXJlYWRvbmx5LXRva2VuXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidG9rZW4tdG9nZ2xlXCIgZGF0YS10YXJnZXQ9XCIke2lkfS1yZWFkb25seS10b2tlblwiPlxcdXsxRjQ0MX08L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbi1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cIiR7aWR9LWFkbWluLXVzZXJuYW1lXCI+XFx1ezFGNTI3fSBBZG1pbjo8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCIke2lkfS1hZG1pbi11c2VybmFtZVwiIHBsYWNlaG9sZGVyPVwiVXNlcm5hbWVcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDRweDtcIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRva2VuLWlucHV0LXJvd1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgaWQ9XCIke2lkfS1hZG1pbi10b2tlblwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRva2VuLXRvZ2dsZVwiIGRhdGEtdGFyZ2V0PVwiJHtpZH0tYWRtaW4tdG9rZW5cIj5cXHV7MUY0NDF9PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbi1zdGF0dXNcIiBpZD1cIiR7aWR9LXRva2VuLXN0YXR1c1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBgKTtcbiAgICB9XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDAgQ3JlZGVudGlhbCBlbmNyeXB0aW9uIFx1MjUwMFx1MjUwMFxuXG4gIGZ1bmN0aW9uIGdldEVuY3J5cHRpb25LZXkoKSB7XG4gICAgbGV0IGtleSA9IHNhZmVTZXNzaW9uR2V0KCdkYXNoY2FkZHktZW5jcnlwdGlvbi1rZXknKTtcbiAgICBpZiAoa2V5KSByZXR1cm4ga2V5O1xuXG4gICAgY29uc3Qgb2xkS2V5ID0gc2FmZUdldCgnZGFzaGNhZGR5LWVuY3J5cHRpb24ta2V5Jyk7XG4gICAgaWYgKG9sZEtleSkge1xuICAgICAgc2FmZVNlc3Npb25TZXQoJ2Rhc2hjYWRkeS1lbmNyeXB0aW9uLWtleScsIG9sZEtleSk7XG4gICAgICBzYWZlUmVtb3ZlKCdkYXNoY2FkZHktZW5jcnlwdGlvbi1rZXknKTtcbiAgICAgIHJldHVybiBvbGRLZXk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAga2V5ID0gQXJyYXkuZnJvbShhcnJheSwgYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgICBzYWZlU2Vzc2lvblNldCgnZGFzaGNhZGR5LWVuY3J5cHRpb24ta2V5Jywga2V5KTtcbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIGNvbnN0IEVOQ1JZUFRJT05fS0VZID0gZ2V0RW5jcnlwdGlvbktleSgpO1xuXG4gIGZ1bmN0aW9uIGNyZWRlbnRpYWxFbmNyeXB0KHRleHQsIGtleSkge1xuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGl2ID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSg4KSk7XG4gICAgY29uc3QgaXZIZXggPSBBcnJheS5mcm9tKGl2LCBiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIGNvbnN0IGtleUJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGtleSArIGl2SGV4KTtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChpKVxuICAgICAgICBeIGtleUJ5dGVzW2kgJSBrZXlCeXRlcy5sZW5ndGhdXG4gICAgICAgIF4gaXZbaSAlIGl2Lmxlbmd0aF1cbiAgICAgICAgXiAoKGkgKiAzMSArIDE3KSAmIDB4RkYpO1xuICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gaXZIZXggKyAnOicgKyBidG9hKHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVkZW50aWFsRGVjcnlwdChlbmNyeXB0ZWRUZXh0LCBrZXkpIHtcbiAgICBpZiAoIWVuY3J5cHRlZFRleHQpIHJldHVybiAnJztcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29sb25JZHggPSBlbmNyeXB0ZWRUZXh0LmluZGV4T2YoJzonKTtcbiAgICAgIGlmIChjb2xvbklkeCA9PT0gMTYpIHtcbiAgICAgICAgY29uc3QgaXZIZXggPSBlbmNyeXB0ZWRUZXh0LnN1YnN0cmluZygwLCAxNik7XG4gICAgICAgIGNvbnN0IGl2ID0gbmV3IFVpbnQ4QXJyYXkoaXZIZXgubWF0Y2goLy57Mn0vZykubWFwKGggPT4gcGFyc2VJbnQoaCwgMTYpKSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBhdG9iKGVuY3J5cHRlZFRleHQuc3Vic3RyaW5nKDE3KSk7XG4gICAgICAgIGNvbnN0IGtleUJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGtleSArIGl2SGV4KTtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGFyQ29kZSA9IGRlY29kZWQuY2hhckNvZGVBdChpKVxuICAgICAgICAgICAgXiBrZXlCeXRlc1tpICUga2V5Qnl0ZXMubGVuZ3RoXVxuICAgICAgICAgICAgXiBpdltpICUgaXYubGVuZ3RoXVxuICAgICAgICAgICAgXiAoKGkgKiAzMSArIDE3KSAmIDB4RkYpO1xuICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgY29uc3QgZGVjb2RlZCA9IGF0b2IoZW5jcnlwdGVkVGV4dCk7XG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBkZWNvZGVkLmNoYXJDb2RlQXQoaSkgXiBrZXkuY2hhckNvZGVBdChpICUga2V5Lmxlbmd0aCk7XG4gICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMCBDcmVkZW50aWFsIHN0b3JhZ2UgXHUyNTAwXHUyNTAwXG5cbiAgZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbChkbnNJZCwgdG9rZW5UeXBlLCBjcmVkVHlwZSkge1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IHNhZmVHZXQoYCR7ZG5zSWR9LSR7dG9rZW5UeXBlfS0ke2NyZWRUeXBlfS1lbmNgKTtcbiAgICByZXR1cm4gY3JlZGVudGlhbERlY3J5cHQoZW5jcnlwdGVkLCBFTkNSWVBUSU9OX0tFWSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRDcmVkZW50aWFsKGRuc0lkLCB0b2tlblR5cGUsIGNyZWRUeXBlLCB2YWx1ZSkge1xuICAgIGNvbnN0IGtleSA9IGAke2Ruc0lkfS0ke3Rva2VuVHlwZX0tJHtjcmVkVHlwZX0tZW5jYDtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHNhZmVTZXQoa2V5LCBjcmVkZW50aWFsRW5jcnlwdCh2YWx1ZSwgRU5DUllQVElPTl9LRVkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2FmZVJlbW92ZShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRva2VuKGRuc0lkLCB0b2tlblR5cGUpIHtcbiAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbChkbnNJZCwgdG9rZW5UeXBlLCAndG9rZW4nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFVzZXJuYW1lKGRuc0lkLCB0b2tlblR5cGUpIHtcbiAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbChkbnNJZCwgdG9rZW5UeXBlLCAndXNlcm5hbWUnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRva2VuKGRuc0lkLCB0b2tlblR5cGUsIHRva2VuKSB7XG4gICAgc2V0Q3JlZGVudGlhbChkbnNJZCwgdG9rZW5UeXBlLCAndG9rZW4nLCB0b2tlbik7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRVc2VybmFtZShkbnNJZCwgdG9rZW5UeXBlLCB1c2VybmFtZSkge1xuICAgIHNldENyZWRlbnRpYWwoZG5zSWQsIHRva2VuVHlwZSwgJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QWxsQ3JlZGVudGlhbHMoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBkbnNJZCBvZiBnZXREbnNJZHMoKSkge1xuICAgICAgcmVzdWx0W2Ruc0lkXSA9IHtcbiAgICAgICAgcmVhZG9ubHk6IHsgdXNlcm5hbWU6IGdldFVzZXJuYW1lKGRuc0lkLCAncmVhZG9ubHknKSwgdG9rZW46IGdldFRva2VuKGRuc0lkLCAncmVhZG9ubHknKSB9LFxuICAgICAgICBhZG1pbjogeyB1c2VybmFtZTogZ2V0VXNlcm5hbWUoZG5zSWQsICdhZG1pbicpLCB0b2tlbjogZ2V0VG9rZW4oZG5zSWQsICdhZG1pbicpIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckFsbENyZWRlbnRpYWxzKCkge1xuICAgIGdldERuc0lkcygpLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgWydyZWFkb25seScsICdhZG1pbiddLmZvckVhY2godG9rZW5UeXBlID0+IHtcbiAgICAgICAgWyd0b2tlbicsICd1c2VybmFtZSddLmZvckVhY2goY3JlZFR5cGUgPT4ge1xuICAgICAgICAgIHNhZmVSZW1vdmUoYCR7ZG5zSWR9LSR7dG9rZW5UeXBlfS0ke2NyZWRUeXBlfS1lbmNgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHNhZmVSZW1vdmUoYCR7ZG5zSWR9LXRva2VuLWVuY2ApO1xuICAgICAgc2FmZVJlbW92ZShgJHtkbnNJZH0tdXNlcm5hbWUtZW5jYCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTdG9yZWRDcmVkZW50aWFscyhkbnNJZCkge1xuICAgIGNvbnN0IHJlYWRvbmx5VG9rZW4gPSBnZXRUb2tlbihkbnNJZCwgJ3JlYWRvbmx5Jyk7XG4gICAgY29uc3QgcmVhZG9ubHlVc2VybmFtZSA9IGdldFVzZXJuYW1lKGRuc0lkLCAncmVhZG9ubHknKTtcbiAgICBjb25zdCBhZG1pblRva2VuID0gZ2V0VG9rZW4oZG5zSWQsICdhZG1pbicpO1xuICAgIGNvbnN0IGFkbWluVXNlcm5hbWUgPSBnZXRVc2VybmFtZShkbnNJZCwgJ2FkbWluJyk7XG4gICAgY29uc3Qgb2xkVG9rZW4gPSBjcmVkZW50aWFsRGVjcnlwdChzYWZlR2V0KGAke2Ruc0lkfS10b2tlbi1lbmNgKSwgRU5DUllQVElPTl9LRVkpO1xuICAgIGNvbnN0IG9sZFVzZXJuYW1lID0gY3JlZGVudGlhbERlY3J5cHQoc2FmZUdldChgJHtkbnNJZH0tdXNlcm5hbWUtZW5jYCksIEVOQ1JZUFRJT05fS0VZKTtcblxuICAgIHJldHVybiB7XG4gICAgICB1c2VybmFtZTogYWRtaW5Vc2VybmFtZSB8fCByZWFkb25seVVzZXJuYW1lIHx8IG9sZFVzZXJuYW1lLFxuICAgICAgdG9rZW46IGFkbWluVG9rZW4gfHwgcmVhZG9ubHlUb2tlbiB8fCBvbGRUb2tlbixcbiAgICAgIHJlYWRvbmx5VG9rZW46IHJlYWRvbmx5VG9rZW4gfHwgb2xkVG9rZW4sXG4gICAgICByZWFkb25seVVzZXJuYW1lOiByZWFkb25seVVzZXJuYW1lIHx8IG9sZFVzZXJuYW1lLFxuICAgICAgYWRtaW5Ub2tlbjogYWRtaW5Ub2tlbiB8fCBvbGRUb2tlbixcbiAgICAgIGFkbWluVXNlcm5hbWU6IGFkbWluVXNlcm5hbWUgfHwgb2xkVXNlcm5hbWVcbiAgICB9O1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIE1vZGFsIGhhbmRsZXJzIFx1MjUwMFx1MjUwMFxuXG4gIC8vIE9wZW4gbW9kYWwgXHUyMDE0IGJ1aWxkIHNlY3Rpb25zIGR5bmFtaWNhbGx5LCBwb3B1bGF0ZSBmcm9tIHN0b3JlZCBjcmVkc1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFuYWdlLXRva2VucycpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBidWlsZENyZWRlbnRpYWxTZWN0aW9ucygpO1xuICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuLW1hbmFnZW1lbnQtbW9kYWwnKTtcbiAgICBjb25zdCBjcmVkcyA9IGdldEFsbENyZWRlbnRpYWxzKCk7XG5cbiAgICBnZXREbnNJZHMoKS5mb3JFYWNoKGRuc0lkID0+IHtcbiAgICAgIGNvbnN0IGMgPSBjcmVkc1tkbnNJZF07XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tcmVhZG9ubHktdXNlcm5hbWVgKS52YWx1ZSA9IGMucmVhZG9ubHkudXNlcm5hbWU7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tcmVhZG9ubHktdG9rZW5gKS52YWx1ZSA9IGMucmVhZG9ubHkudG9rZW47XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tYWRtaW4tdXNlcm5hbWVgKS52YWx1ZSA9IGMuYWRtaW4udXNlcm5hbWU7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tYWRtaW4tdG9rZW5gKS52YWx1ZSA9IGMuYWRtaW4udG9rZW47XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tdG9rZW4tc3RhdHVzYCkudGV4dENvbnRlbnQgPSAnJztcbiAgICB9KTtcblxuICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgfSk7XG5cbiAgLy8gVG9nZ2xlIHBhc3N3b3JkIHZpc2liaWxpdHkgKyBiYWNrZHJvcCBjbG9zZSAoZXZlbnQgZGVsZWdhdGlvbiBmb3IgZHluYW1pYyBlbGVtZW50cylcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuLW1hbmFnZW1lbnQtbW9kYWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGNvbnN0IGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJy50b2tlbi10b2dnbGUnKTtcbiAgICBpZiAoYnRuKSB7XG4gICAgICBjb25zdCB0YXJnZXRJZCA9IGJ0bi5kYXRhc2V0LnRhcmdldDtcbiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgaW5wdXQudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1xcdXsxRjY0OH0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICdcXHV7MUY0NDF9JztcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGUudGFyZ2V0LmlkID09PSAndG9rZW4tbWFuYWdlbWVudC1tb2RhbCcpIHtcbiAgICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNhdmUgY3JlZGVudGlhbHNcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuLXNhdmUnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZG5zSWRzID0gZ2V0RG5zSWRzKCk7XG5cbiAgICAvLyBTYXZlIGFsbCB0byBsb2NhbFN0b3JhZ2VcbiAgICBkbnNJZHMuZm9yRWFjaChkbnNJZCA9PiB7XG4gICAgICBzZXRVc2VybmFtZShkbnNJZCwgJ3JlYWRvbmx5JywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXJlYWRvbmx5LXVzZXJuYW1lYCkudmFsdWUudHJpbSgpKTtcbiAgICAgIHNldFRva2VuKGRuc0lkLCAncmVhZG9ubHknLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tcmVhZG9ubHktdG9rZW5gKS52YWx1ZS50cmltKCkpO1xuICAgICAgc2V0VXNlcm5hbWUoZG5zSWQsICdhZG1pbicsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1hZG1pbi11c2VybmFtZWApLnZhbHVlLnRyaW0oKSk7XG4gICAgICBzZXRUb2tlbihkbnNJZCwgJ2FkbWluJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LWFkbWluLXRva2VuYCkudmFsdWUudHJpbSgpKTtcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxkIHBlci1zZXJ2ZXIgY3JlZGVudGlhbHMgcGF5bG9hZCBmb3IgYmFja2VuZCBzeW5jXG4gICAgY29uc3Qgc2VydmVycyA9IHt9O1xuICAgIGxldCBoYXNBbnlDcmVkcyA9IGZhbHNlO1xuXG4gICAgZG5zSWRzLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSB7fTtcbiAgICAgIGNvbnN0IHJvVXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1yZWFkb25seS11c2VybmFtZWApLnZhbHVlLnRyaW0oKTtcbiAgICAgIGNvbnN0IHJvUGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1yZWFkb25seS10b2tlbmApLnZhbHVlLnRyaW0oKTtcbiAgICAgIGNvbnN0IGFkbWluVXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1hZG1pbi11c2VybmFtZWApLnZhbHVlLnRyaW0oKTtcbiAgICAgIGNvbnN0IGFkbWluUGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS1hZG1pbi10b2tlbmApLnZhbHVlLnRyaW0oKTtcblxuICAgICAgaWYgKHJvVXNlciAmJiByb1Bhc3MpIHtcbiAgICAgICAgZW50cnkucmVhZG9ubHkgPSB7IHVzZXJuYW1lOiByb1VzZXIsIHBhc3N3b3JkOiByb1Bhc3MgfTtcbiAgICAgICAgaGFzQW55Q3JlZHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFkbWluVXNlciAmJiBhZG1pblBhc3MpIHtcbiAgICAgICAgZW50cnkuYWRtaW4gPSB7IHVzZXJuYW1lOiBhZG1pblVzZXIsIHBhc3N3b3JkOiBhZG1pblBhc3MgfTtcbiAgICAgICAgaGFzQW55Q3JlZHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5rZXlzKGVudHJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlcnZlcnNbZG5zSWRdID0gZW50cnk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaGFzQW55Q3JlZHMpIHtcbiAgICAgIGRuc0lkcy5mb3JFYWNoKGRuc0lkID0+IHtcbiAgICAgICAgaWYgKHNlcnZlcnNbZG5zSWRdKSB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLnRleHRDb250ZW50ID0gJ1ZlcmlmeWluZy4uLic7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLmNsYXNzTmFtZSA9ICd0b2tlbi1zdGF0dXMnO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvZG5zL2NyZWRlbnRpYWxzJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2VydmVycyB9KVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgaWYgKGRhdGEucmVzdWx0cykge1xuICAgICAgICAgIGRuc0lkcy5mb3JFYWNoKGRuc0lkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApO1xuICAgICAgICAgICAgaWYgKCFzZXJ2ZXJzW2Ruc0lkXSkgeyBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICcnOyByZXR1cm47IH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEucmVzdWx0c1tkbnNJZF07XG4gICAgICAgICAgICBpZiAocmVzdWx0Py5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1xcdTI3MTMgVmVyaWZpZWQgJiBzYXZlZCc7XG4gICAgICAgICAgICAgIHN0YXR1c0VsLmNsYXNzTmFtZSA9ICd0b2tlbi1zdGF0dXMgc3VjY2Vzcyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8ucGFydGlhbCkge1xuICAgICAgICAgICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdcXHUyNzEzICcgKyByZXN1bHQucGFydGlhbDtcbiAgICAgICAgICAgICAgc3RhdHVzRWwuY2xhc3NOYW1lID0gJ3Rva2VuLXN0YXR1cyBzdWNjZXNzJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1xcdTI3MTcgJyArIChyZXN1bHQ/LmVycm9yIHx8ICdMb2dpbiBmYWlsZWQnKTtcbiAgICAgICAgICAgICAgc3RhdHVzRWwuY2xhc3NOYW1lID0gJ3Rva2VuLXN0YXR1cyBlcnJvcic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgZG5zSWRzLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlcnZlcnNbZG5zSWRdKSB7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS50ZXh0Q29udGVudCA9ICdcXHUyNzEzIFNhdmVkJztcbiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLmNsYXNzTmFtZSA9ICd0b2tlbi1zdGF0dXMgc3VjY2Vzcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG5zSWRzLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlcnZlcnNbZG5zSWRdKSB7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS50ZXh0Q29udGVudCA9ICdcXHUyNzE3ICcgKyAoZGF0YS5lcnJvciB8fCAnRmFpbGVkJyk7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS5jbGFzc05hbWUgPSAndG9rZW4tc3RhdHVzIGVycm9yJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3luYyBETlMgY3JlZGVudGlhbHMgdG8gYmFja2VuZDonLCBlKTtcbiAgICAgICAgZG5zSWRzLmZvckVhY2goZG5zSWQgPT4ge1xuICAgICAgICAgIGlmIChzZXJ2ZXJzW2Ruc0lkXSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLnRleHRDb250ZW50ID0gJ1xcdTI3MTMgU2F2ZWQgbG9jYWxseSAoc3luYyBmYWlsZWQpJztcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS5jbGFzc05hbWUgPSAndG9rZW4tc3RhdHVzJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkbnNJZHMuZm9yRWFjaChkbnNJZCA9PiB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXV0by1jbG9zZSBhZnRlciBkZWxheSBpZiBhbGwgc3VjY2VlZGVkXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBhbGxHb29kID0gZG5zSWRzLmV2ZXJ5KGRuc0lkID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApPy50ZXh0Q29udGVudDtcbiAgICAgICAgcmV0dXJuICFzdGF0dXMgfHwgc3RhdHVzLmluY2x1ZGVzKCdcXHUyNzEzJyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChhbGxHb29kKSBjbG9zZU1vZGFsKCd0b2tlbi1tYW5hZ2VtZW50LW1vZGFsJyk7XG4gICAgfSwgMTUwMCk7XG4gIH0pO1xuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbi1jYW5jZWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY2xvc2VNb2RhbCgndG9rZW4tbWFuYWdlbWVudC1tb2RhbCcpO1xuICB9KTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW4tY2xlYXItYWxsJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChjb25maXJtKCdDbGVhciBhbGwgc3RvcmVkIEROUyBjcmVkZW50aWFscz8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLicpKSB7XG4gICAgICBjbGVhckFsbENyZWRlbnRpYWxzKCk7XG4gICAgICBnZXREbnNJZHMoKS5mb3JFYWNoKGRuc0lkID0+IHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXJlYWRvbmx5LXVzZXJuYW1lYCkudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXJlYWRvbmx5LXRva2VuYCkudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LWFkbWluLXVzZXJuYW1lYCkudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LWFkbWluLXRva2VuYCkudmFsdWUgPSAnJztcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZG5zSWR9LXRva2VuLXN0YXR1c2ApLnRleHRDb250ZW50ID0gJ1xcdTI3MTMgQ2xlYXJlZCc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2Ruc0lkfS10b2tlbi1zdGF0dXNgKS5jbGFzc05hbWUgPSAndG9rZW4tc3RhdHVzIHN1Y2Nlc3MnO1xuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS9kbnMvY3JlZGVudGlhbHMnLCB7IG1ldGhvZDogJ0RFTEVURScgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFdpbmRvdyBleHBvcnRzIFx1MjUwMFx1MjUwMFxuICB3aW5kb3cuZ2V0VG9rZW4gPSBnZXRUb2tlbjtcbiAgd2luZG93LmdldFVzZXJuYW1lID0gZ2V0VXNlcm5hbWU7XG4gIHdpbmRvdy5zZXRUb2tlbiA9IHNldFRva2VuO1xuICB3aW5kb3cuc2V0VXNlcm5hbWUgPSBzZXRVc2VybmFtZTtcbiAgd2luZG93LmdldEFsbENyZWRlbnRpYWxzID0gZ2V0QWxsQ3JlZGVudGlhbHM7XG4gIHdpbmRvdy5nZXRDcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbDtcbiAgd2luZG93LnNldENyZWRlbnRpYWwgPSBzZXRDcmVkZW50aWFsO1xuICB3aW5kb3cuZ2V0RW5jcnlwdGlvbktleSA9IGdldEVuY3J5cHRpb25LZXk7XG4gIHdpbmRvdy5nZXREbnNJZHMgPSBnZXREbnNJZHM7XG4gIHdpbmRvdy5nZXREbnNEaXNwbGF5TmFtZSA9IGdldERuc0Rpc3BsYXlOYW1lO1xuXG59KSgpO1xuO1xuLy8gPT09PT09PT09PSBHUklEICYgU1RBVFVTIEhFTFBFUlMgPT09PT09PT09PVxuKGZ1bmN0aW9uICgpIHtcblxuICAvKiBFbmhhbmNlZCBzdGF0dXMgaGVscGVycyB3aXRoIHJlc3BvbnNlIHRpbWUgdHJhY2tpbmcgKi9cbiAgZnVuY3Rpb24gc2V0UXVpY2soaWQsIHVwLCByZXNwb25zZVRpbWUgPSBudWxsKSB7XG4gICAgY29uc3QgZG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQgKyAnLWRvdCcpO1xuICAgIGNvbnN0IHBpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCArICctcGlsbCcpO1xuICAgIGNvbnN0IHRpbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkICsgJy10aW1lJyk7XG4gICAgY29uc3QgY2FyZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFwcD1cIiR7aWR9XCJdYCk7XG5cbiAgICBpZiAoZG90KSB7XG4gICAgICBkb3QuY2xhc3NMaXN0LnRvZ2dsZSgnb2snLCB1cCk7XG4gICAgICBkb3QuY2xhc3NMaXN0LnRvZ2dsZSgnYmFkJywgIXVwKTtcbiAgICB9XG5cbiAgICBpZiAocGlsbCkge1xuICAgICAgcGlsbC50ZXh0Q29udGVudCA9IHVwID8gJ09OJyA6ICdPRkYnO1xuICAgICAgcGlsbC5jbGFzc0xpc3QudG9nZ2xlKCdvbicsIHVwKTtcbiAgICAgIHBpbGwuY2xhc3NMaXN0LnRvZ2dsZSgnb2ZmJywgIXVwKTtcbiAgICB9XG5cbiAgICBpZiAodGltZUVsICYmIHJlc3BvbnNlVGltZSAhPT0gbnVsbCkge1xuICAgICAgdGltZUVsLnRleHRDb250ZW50ID0gdXAgPyBgJHtyZXNwb25zZVRpbWV9bXNgIDogJ3RpbWVvdXQnO1xuICAgICAgdGltZUVsLmNsYXNzTmFtZSA9IGByZXNwb25zZS10aW1lICR7Z2V0UmVzcG9uc2VUaW1lQ2xhc3MocmVzcG9uc2VUaW1lLCB1cCl9YDtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY2FyZCBzdGF0dXMgZm9yIGljb24gY29sb3JpbmdcbiAgICBpZiAoY2FyZCkge1xuICAgICAgY2FyZC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHVzJywgdXAgPyAnb24nIDogJ29mZicpO1xuICAgIH1cblxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVzcG9uc2VUaW1lQ2xhc3ModGltZSwgaXNVcCkge1xuICAgIGlmICghaXNVcCkgcmV0dXJuICd0aW1lb3V0JztcbiAgICBpZiAodGltZSA8IDIwMCkgcmV0dXJuICdleGNlbGxlbnQnO1xuICAgIGlmICh0aW1lIDwgNTAwKSByZXR1cm4gJ2dvb2QnO1xuICAgIGlmICh0aW1lIDwgMTAwMCkgcmV0dXJuICdmYWlyJztcbiAgICByZXR1cm4gJ3Nsb3cnO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2hlY2tTZXJ2aWNlV2l0aFRpbWluZyhpZCkge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgZmV0Y2goJy9wcm9iZS8nICsgaWQsIHsgY2FjaGU6ICduby1zdG9yZScgfSk7XG4gICAgICBjb25zdCBlbmRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBjb25zdCByZXNwb25zZVRpbWUgPSBNYXRoLnJvdW5kKGVuZFRpbWUgLSBzdGFydFRpbWUpO1xuICAgICAgY29uc3QgaXNVcCA9IChyLnN0YXR1cyA+PSAyMDAgJiYgci5zdGF0dXMgPCA0MDApIHx8IHIuc3RhdHVzID09PSA0MDEgfHwgci5zdGF0dXMgPT09IDQwMztcbiAgICAgIHJldHVybiB7IGlzVXAsIHJlc3BvbnNlVGltZSB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgZW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gTWF0aC5yb3VuZChlbmRUaW1lIC0gc3RhcnRUaW1lKTtcbiAgICAgIHJldHVybiB7IGlzVXA6IGZhbHNlLCByZXNwb25zZVRpbWUgfTtcbiAgICB9XG4gIH1cblxuICAvKiBBcHAgZ3JpZCAtIGxvYWRlZCBmcm9tIEFQSSAqL1xuICB3aW5kb3cuQVBQUyA9IFtdOyAvLyBVc2Ugd2luZG93LkFQUFMgYXMgdGhlIG1haW4gYXJyYXlcbiAgbGV0IHJlZnJlc2hJbkZsaWdodCA9IG51bGw7XG4gIGxldCByZWZyZXNoUXVldWVkID0gZmFsc2U7XG5cbiAgLy8gTG9hZCBzZXJ2aWNlcyBmcm9tIEFQSVxuICBhc3luYyBmdW5jdGlvbiBsb2FkU2VydmljZXMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh3aW5kb3cuU2tlbGV0b25Mb2FkZXIpIHdpbmRvdy5Ta2VsZXRvbkxvYWRlci5zaG93KDYpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS92MS9zZXJ2aWNlcycsIHsgY2FjaGU6ICduby1zdG9yZScgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBTdGFuZGFyZCBlbnZlbG9wZTogeyBzdWNjZXNzOiB0cnVlLCBzZXJ2aWNlczogWy4uLl0sIHBhZ2luYXRpb24/OiB7Li4ufSB9XG4gICAgICAgIHdpbmRvdy5BUFBTID0gcmVzdWx0LnNlcnZpY2VzIHx8IFtdO1xuICAgICAgICBpZiAod2luZG93LlNrZWxldG9uTG9hZGVyKSB3aW5kb3cuU2tlbGV0b25Mb2FkZXIuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VydmljZXM6JywgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgaWYgKHdpbmRvdy5Ta2VsZXRvbkxvYWRlcikgd2luZG93LlNrZWxldG9uTG9hZGVyLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VydmljZXM6JywgZXJyb3IpO1xuICAgICAgaWYgKHdpbmRvdy5Ta2VsZXRvbkxvYWRlcikgd2luZG93LlNrZWxldG9uTG9hZGVyLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXJ2aWNlVXJsKGlkKSB7XG4gICAgY29uc3Qgc3ZjID0gd2luZG93LkFQUFM/LmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gICAgaWYgKHN2Yz8udXJsKSByZXR1cm4gc3ZjLnVybC5zdGFydHNXaXRoKCdodHRwJykgPyBzdmMudXJsIDogJ2h0dHBzOi8vJyArIHN2Yy51cmw7XG4gICAgaWYgKHN2Yz8uaXNFeHRlcm5hbCAmJiBzdmMuZXh0ZXJuYWxVcmwpIHJldHVybiBzdmMuZXh0ZXJuYWxVcmw7XG4gICAgY29uc3QgZG5zID0gU0lURS5kbnNTZXJ2ZXJzPy5baWRdO1xuICAgIGlmIChkbnMpIHJldHVybiAnaHR0cDovLycgKyBkbnMuaXAgKyAnOicgKyAoZG5zLnBvcnQgfHwgNTM4MCk7XG4gICAgcmV0dXJuIGJ1aWxkU2VydmljZVVybChpZCk7XG4gIH1cbiAgZnVuY3Rpb24gZWwodGFnLCBjbHMsIHR4dCkgeyBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOyBpZiAoY2xzKSBuLmNsYXNzTmFtZSA9IGNsczsgaWYgKHR4dCkgbi50ZXh0Q29udGVudCA9IHR4dDsgcmV0dXJuIG47IH1cblxuICBmdW5jdGlvbiBidWlsZEdyaWQoKSB7XG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXJkcycpOyByb290LmlubmVySFRNTCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2luZG93LkFQUFMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHMgPSB3aW5kb3cuQVBQU1tpXTtcbiAgICAgIGlmIChzLmlkID09PSAnY2EnKSBjb250aW51ZTsgLy8gRGFzaENBIGxpdmVzIGluIHRvcCBhbmNob3Igcm93XG4gICAgICBjb25zdCBjYXJkID0gZWwoJ2RpdicsICdjYXJkJyk7XG4gICAgICBjYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1hcHAnLCBzLmlkKTtcbiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXR1cycsICdvZmYnKTsgLy8gSW5pdGlhbCBzdGF0dXNcbiAgICAgIGlmIChzLmNvbnRhaW5lcklkKSBjYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1jb250YWluZXItaWQnLCBzLmNvbnRhaW5lcklkKTtcbiAgICAgIGlmIChzLmNhdGVnb3J5KSBjYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1jYXRlZ29yeScsIHMuY2F0ZWdvcnkpO1xuICAgICAgaWYgKHMucmVjaXBlSWQpIGNhcmQuc2V0QXR0cmlidXRlKCdkYXRhLXJlY2lwZS1pZCcsIHMucmVjaXBlSWQpO1xuXG4gICAgICBjb25zdCBkb3QgPSBlbCgnc3BhbicsICdkb3QgYmFkIGF0LWJsJyk7IGRvdC5pZCA9ICdkb3QtJyArIHMuaWQgKyAnLWdyaWQnOyBjYXJkLmFwcGVuZENoaWxkKGRvdCk7XG5cbiAgICAgIGNvbnN0IHJvdyA9IGVsKCdkaXYnLCAncm93Jyk7XG4gICAgICBjb25zdCB3cmFwID0gZWwoJ2RpdicsICdsb2dvLXdyYXAnKTtcblxuICAgICAgLy8gVXNlIHJlbGlhYmxlIFBORyBpbWFnZXMgd2l0aCBhdXRvbWF0aWMgQ0ROIGZhbGxiYWNrXG4gICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgIGltZy5zcmMgPSBzLmxvZ287XG4gICAgICBpbWcuYWx0ID0gcy5uYW1lO1xuICAgICAgaW1nLmNsYXNzTmFtZSA9ICdsb2dvLWltZyc7XG4gICAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBUcnkgQ0ROIGZhbGxiYWNrIHdpdGggbXVsdGlwbGUgbmFtaW5nIHN0cmF0ZWdpZXNcbiAgICAgICAgLy8gVXNlIGlkLCBhcHBUZW1wbGF0ZSwgb3IgZGVyaXZlIGZyb20gbmFtZVxuICAgICAgICBsZXQgYXBwSWQgPSBzLmlkIHx8IHMuYXBwVGVtcGxhdGU7XG4gICAgICAgIGlmICghYXBwSWQgJiYgcy5uYW1lKSB7XG4gICAgICAgICAgLy8gRGVyaXZlIElEIGZyb20gbmFtZSAobG93ZXJjYXNlLCByZW1vdmUgc3BhY2VzKVxuICAgICAgICAgIGFwcElkID0gcy5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFwcElkKSB7XG4gICAgICAgICAgLy8gVHJ5IGRpZmZlcmVudCBDRE4gVVJMIGZvcm1hdHNcbiAgICAgICAgICBjb25zdCBjZG5VcmxzID0gW1xuICAgICAgICAgICAgYGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC93YWxreGNvZGUvZGFzaGJvYXJkLWljb25zL3BuZy8ke2FwcElkfS5wbmdgLFxuICAgICAgICAgICAgYGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC93YWxreGNvZGUvZGFzaGJvYXJkLWljb25zL3BuZy8ke2FwcElkLnRvTG93ZXJDYXNlKCl9LnBuZ2AsXG4gICAgICAgICAgICBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3dhbGt4Y29kZS9kYXNoYm9hcmQtaWNvbnMvcG5nLyR7YXBwSWQucmVwbGFjZSgvLS9nLCAnJyl9LnBuZ2AsXG4gICAgICAgICAgICBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3dhbGt4Y29kZS9kYXNoYm9hcmQtaWNvbnMvcG5nLyR7cy5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpfS5wbmdgXG4gICAgICAgICAgXTtcblxuICAgICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzXG4gICAgICAgICAgY29uc3QgdW5pcXVlVXJscyA9IFsuLi5uZXcgU2V0KGNkblVybHMpXTtcblxuICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgVVJMIHRvIHRyeVxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHVuaXF1ZVVybHMuaW5kZXhPZih0aGlzLnNyYyk7XG4gICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICsgMTtcblxuICAgICAgICAgIGlmIChuZXh0SW5kZXggPCB1bmlxdWVVcmxzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zcmMgPSB1bmlxdWVVcmxzW25leHRJbmRleF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB3cmFwLmFwcGVuZENoaWxkKGltZyk7XG4gICAgICByb3cuYXBwZW5kQ2hpbGQod3JhcCk7XG5cbiAgICAgIGNvbnN0IG5hbWVTcGFuID0gZWwoJ3NwYW4nLCAnbmFtZScsIHMubmFtZSk7XG4gICAgICByb3cuYXBwZW5kQ2hpbGQobmFtZVNwYW4pO1xuXG4gICAgICAvLyBBZGQgVGFpbHNjYWxlIGJhZGdlIGlmIHNlcnZpY2UgaXMgcHJvdGVjdGVkXG4gICAgICBpZiAocy50YWlsc2NhbGVPbmx5KSB7XG4gICAgICAgIGNvbnN0IHRzQmFkZ2UgPSBlbCgnc3BhbicsICd0cy1iYWRnZScsICdcdUQ4M0RcdUREMTAnKTtcbiAgICAgICAgdHNCYWRnZS50aXRsZSA9ICdUYWlsc2NhbGUtb25seSBhY2Nlc3MnO1xuICAgICAgICB0c0JhZGdlLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luLWxlZnQ6IDZweDsgZm9udC1zaXplOiAwLjc1cmVtOyBvcGFjaXR5OiAwLjg7JztcbiAgICAgICAgbmFtZVNwYW4uYXBwZW5kQ2hpbGQodHNCYWRnZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDYXRlZ29yeSBiYWRnZSBpZiBzZXJ2aWNlIGhhcyBvbmUgKGNvbG9yZWQgcGlsbCB3aXRoIGljb24pXG4gICAgICBpZiAocy5jYXRlZ29yeSkge1xuICAgICAgICBjb25zdCBjYXRzID0gKHR5cGVvZiBEQyAhPT0gJ3VuZGVmaW5lZCcgJiYgREMuQ0FURUdPUklFUykgfHwgd2luZG93LkRDX0NBVEVHT1JJRVMgfHwge307XG4gICAgICAgIGNvbnN0IGNhdEluZm8gPSBjYXRzW3MuY2F0ZWdvcnldIHx8IHt9O1xuICAgICAgICBjb25zdCBjYXRCYWRnZSA9IGVsKCdzcGFuJywgJ2NhdC1iYWRnZScsIGAke2NhdEluZm8uaWNvbiB8fCAnJ30gJHtzLmNhdGVnb3J5fWAudHJpbSgpKTtcbiAgICAgICAgY2F0QmFkZ2UudGl0bGUgPSBgQ2F0ZWdvcnk6ICR7cy5jYXRlZ29yeX1gO1xuICAgICAgICBjYXRCYWRnZS5zdHlsZS5jc3NUZXh0ID0gYG1hcmdpbi1sZWZ0OiA2cHg7IGZvbnQtc2l6ZTogMC42NXJlbTsgcGFkZGluZzogMXB4IDZweDsgYm9yZGVyLXJhZGl1czogOTk5cHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAke2NhdEluZm8uY29sb3IgfHwgJyM3ZjhjOGQnfSAyNSUsIHRyYW5zcGFyZW50KTsgY29sb3I6ICR7Y2F0SW5mby5jb2xvciB8fCAnIzdmOGM4ZCd9OyBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgJHtjYXRJbmZvLmNvbG9yIHx8ICcjN2Y4YzhkJ30gNTAlLCB0cmFuc3BhcmVudCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGZvbnQtd2VpZ2h0OiA1MDA7YDtcbiAgICAgICAgbmFtZVNwYW4uYXBwZW5kQ2hpbGQoY2F0QmFkZ2UpO1xuICAgICAgfVxuXG4gICAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnc3BhY2VyJykpO1xuXG4gICAgICBjb25zdCBwaWxsID0gZWwoJ3NwYW4nLCAnYmFkZ2Ugb2ZmJywgJ09GRicpOyBwaWxsLmlkID0gJ2JhZGdlLScgKyBzLmlkOyByb3cuYXBwZW5kQ2hpbGQocGlsbCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBhdmFpbGFibGUgYmFkZ2UgKGhpZGRlbiBieSBkZWZhdWx0LCBzaG93biB3aGVuIHVwZGF0ZSBkZXRlY3RlZClcbiAgICAgIGNvbnN0IHVwZGF0ZUJhZGdlID0gZWwoJ3NwYW4nLCAndXBkYXRlLWF2YWlsYWJsZS1iYWRnZScsICdVUERBVEUnKTtcbiAgICAgIHVwZGF0ZUJhZGdlLmlkID0gJ3VwZGF0ZS1iYWRnZS0nICsgcy5pZDtcbiAgICAgIHVwZGF0ZUJhZGdlLnRpdGxlID0gJ1VwZGF0ZSBhdmFpbGFibGUnO1xuICAgICAgcm93LmFwcGVuZENoaWxkKHVwZGF0ZUJhZGdlKTtcblxuICAgICAgY2FyZC5hcHBlbmRDaGlsZChyb3cpO1xuXG4gICAgICAvLyBBZGQgcmVzcG9uc2UgdGltZSByb3dcbiAgICAgIGNvbnN0IHJlc3BvbnNlUm93ID0gZWwoJ2RpdicsICdyZXNwb25zZS1yb3cnKTtcbiAgICAgIGNvbnN0IHRpbWVTcGFuID0gZWwoJ3NwYW4nLCAncmVzcG9uc2UtdGltZScsICctLScpOyB0aW1lU3Bhbi5pZCA9ICd0aW1lLScgKyBzLmlkO1xuICAgICAgcmVzcG9uc2VSb3cuYXBwZW5kQ2hpbGQodGltZVNwYW4pO1xuICAgICAgY2FyZC5hcHBlbmRDaGlsZChyZXNwb25zZVJvdyk7XG5cbiAgICAgIC8vIEFkZCBoZWFsdGgvdXB0aW1lIHJvd1xuICAgICAgY29uc3QgaGVhbHRoUm93ID0gZWwoJ2RpdicsICdoZWFsdGgtcm93Jyk7XG4gICAgICBoZWFsdGhSb3cuaWQgPSAnaGVhbHRoLScgKyBzLmlkO1xuICAgICAgY29uc3QgdXB0aW1lQ2hpcCA9IGVsKCdzcGFuJywgJ3VwdGltZS1jaGlwJywgJy0tJyk7XG4gICAgICB1cHRpbWVDaGlwLmlkID0gJ3VwdGltZS0nICsgcy5pZDtcbiAgICAgIGhlYWx0aFJvdy5hcHBlbmRDaGlsZCh1cHRpbWVDaGlwKTtcbiAgICAgIGNvbnN0IHVwdGltZU1pbmlCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHVwdGltZU1pbmlCYXIuY2xhc3NOYW1lID0gJ3VwdGltZS1taW5pLWJhcic7XG4gICAgICBjb25zdCB1cHRpbWVGaWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB1cHRpbWVGaWxsLmNsYXNzTmFtZSA9ICdmaWxsJztcbiAgICAgIHVwdGltZUZpbGwuaWQgPSAndXB0aW1lLWJhci0nICsgcy5pZDtcbiAgICAgIHVwdGltZUZpbGwuc3R5bGUud2lkdGggPSAnMCUnO1xuICAgICAgdXB0aW1lTWluaUJhci5hcHBlbmRDaGlsZCh1cHRpbWVGaWxsKTtcbiAgICAgIGhlYWx0aFJvdy5hcHBlbmRDaGlsZCh1cHRpbWVNaW5pQmFyKTtcbiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoaGVhbHRoUm93KTtcblxuICAgICAgY29uc3QgYnRuUm93ID0gZWwoJ2RpdicsICdidG4tcm93Jyk7XG5cbiAgICAgIC8vIEFkZCBsb2dzIGJ1dHRvbiBmb3Igc2VydmljZXMgd2l0aCBjb250YWluZXJJZHNcbiAgICAgIGlmIChzLmNvbnRhaW5lcklkKSB7XG4gICAgICAgIGNvbnN0IGxvZ3NCdG4gPSBlbCgnYnV0dG9uJywgJ2xvZ3MtYnRuJywgJ1x1RDgzRFx1RENDQicpO1xuICAgICAgICBsb2dzQnRuLnRpdGxlID0gJ1ZpZXcgY29udGFpbmVyIGxvZ3MnO1xuICAgICAgICBsb2dzQnRuLm9uY2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgd2luZG93Lm9wZW5Db250YWluZXJMb2dzTW9kYWwocy5jb250YWluZXJJZCwgcy5uYW1lKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKGxvZ3NCdG4pO1xuXG4gICAgICAgIC8vIEFkZCB1cGRhdGUgYnV0dG9uIGZvciBEb2NrZXIgY29udGFpbmVyc1xuICAgICAgICBjb25zdCB1cGRhdGVCdG4gPSBlbCgnYnV0dG9uJywgJ3VwZGF0ZS1idG4nLCAnXHUyQjA2XHVGRTBGJyk7XG4gICAgICAgIHVwZGF0ZUJ0bi50aXRsZSA9ICdVcGRhdGUgY29udGFpbmVyIHRvIGxhdGVzdCB2ZXJzaW9uJztcbiAgICAgICAgdXBkYXRlQnRuLmlkID0gYHVwZGF0ZS1idG4tJHtzLmlkfWA7XG4gICAgICAgIHVwZGF0ZUJ0bi5vbmNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHdpbmRvdy51cGRhdGVDb250YWluZXIocy5jb250YWluZXJJZCwgcy5uYW1lLCBzLmlkKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKHVwZGF0ZUJ0bik7XG5cbiAgICAgICAgLy8gVGVybWluYWwgZXhlYyBidXR0b24gKHN1YnRsZSBcdTIwMTQgdmlzaWJsZSBvbiBob3ZlcilcbiAgICAgICAgY29uc3QgZXhlY0J0biA9IGVsKCdidXR0b24nLCAnZXhlYy1idG4nLCAnPl8nKTtcbiAgICAgICAgZXhlY0J0bi50aXRsZSA9ICdPcGVuIHRlcm1pbmFsJztcbiAgICAgICAgZXhlY0J0bi5vbmNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmICh3aW5kb3cub3BlbkV4ZWNNb2RhbCkgd2luZG93Lm9wZW5FeGVjTW9kYWwocy5jb250YWluZXJJZCwgcy5uYW1lKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKGV4ZWNCdG4pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgbG9ncyBidXR0b24gZm9yIHNlcnZpY2VzIHdpdGggbG9nUGF0aCAobmF0aXZlIGFwcHMpXG4gICAgICBpZiAocy5sb2dQYXRoICYmICFzLmNvbnRhaW5lcklkKSB7XG4gICAgICAgIGNvbnN0IGxvZ3NCdG4gPSBlbCgnYnV0dG9uJywgJ2xvZ3MtYnRuJywgJ1x1RDgzRFx1RENDQicpO1xuICAgICAgICBsb2dzQnRuLnRpdGxlID0gJ1ZpZXcgYXBwbGljYXRpb24gbG9ncyc7XG4gICAgICAgIGxvZ3NCdG4ub25jbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB3aW5kb3cub3BlbkZpbGVMb2dzTW9kYWwocy5sb2dQYXRoLCBzLm5hbWUpO1xuICAgICAgICB9O1xuICAgICAgICBidG5Sb3cuYXBwZW5kQ2hpbGQobG9nc0J0bik7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBjcmVkZW50aWFscyBidXR0b24gZm9yIHNlcnZpY2VzIHRoYXQgc3VwcG9ydCBhdXRvLWxvZ2luXG4gICAgICBpZiAocy5pc0V4dGVybmFsIHx8IHMuYXBwVGVtcGxhdGUgfHwgcy51cmwpIHtcbiAgICAgICAgY29uc3QgY3JlZHNCdG4gPSBlbCgnYnV0dG9uJywgJ2NyZWRzLWJ0bicsICdcdUQ4M0RcdUREMTEnKTtcbiAgICAgICAgY3JlZHNCdG4udGl0bGUgPSAnQXV0by1sb2dpbiBjcmVkZW50aWFscyc7XG4gICAgICAgIGNyZWRzQnRuLmlkID0gYGNyZWRzLWJ0bi0ke3MuaWR9YDtcbiAgICAgICAgY3JlZHNCdG4ub25jbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB3aW5kb3cub3BlblNlcnZpY2VDcmVkc01vZGFsKHMpO1xuICAgICAgICB9O1xuICAgICAgICBidG5Sb3cuYXBwZW5kQ2hpbGQoY3JlZHNCdG4pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgb3B0aW9ucyBidXR0b24gZm9yIGFsbCBzZXJ2aWNlcyBleGNlcHQgJ2ludGVybmV0J1xuICAgICAgaWYgKHMuaWQgIT09ICdpbnRlcm5ldCcpIHtcbiAgICAgICAgY29uc3Qgb3B0QnRuID0gZWwoJ2J1dHRvbicsICdvcHRpb25zLWJ0bicsICdcdTI2OTlcdUZFMEYnKTtcbiAgICAgICAgb3B0QnRuLnRpdGxlID0gJ0VkaXQgc2VydmljZSBzZXR0aW5ncyc7XG4gICAgICAgIG9wdEJ0bi5vbmNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHdpbmRvdy5vcGVuU2VydmljZUVkaXRNb2RhbChzKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKG9wdEJ0bik7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBzaGFyZSBidXR0b24gZm9yIGFsbCBzZXJ2aWNlcyBleGNlcHQgJ2ludGVybmV0JyAoREMtMDU4KS5cbiAgICAgIC8vIENhbGxzIGludG8gdGhlIHNoYXJlLW1vZGFsIG1vZHVsZSByZWdpc3RlcmVkIG9uIHdpbmRvdy4gV2UgZG9uJ3RcbiAgICAgIC8vIGhhcmQtcmVxdWlyZSB0aGUgbW9kdWxlIFx1MjAxNCBpZiBzaGFyZS1tb2RhbC5qcyB3YXMgZXhjbHVkZWQgZnJvbSB0aGVcbiAgICAgIC8vIGJ1bmRsZSwgdGhlIGJ1dHRvbiBzdGlsbCByZW5kZXJzIGJ1dCBjbGlja2luZyBpdCBzdXJmYWNlcyBhIGNsZWFyXG4gICAgICAvLyBlcnJvciB0b2FzdCBpbnN0ZWFkIG9mIGEgc2lsZW50IG5vLW9wLlxuICAgICAgaWYgKHMuaWQgIT09ICdpbnRlcm5ldCcpIHtcbiAgICAgICAgY29uc3Qgc2hhcmVCdG4gPSBlbCgnYnV0dG9uJywgJ3NoYXJlLWJ0bicsICdcdUQ4M0RcdUREMTcnKTtcbiAgICAgICAgc2hhcmVCdG4udGl0bGUgPSAnU2hhcmUgdGhpcyBzZXJ2aWNlIChQcm8pJztcbiAgICAgICAgc2hhcmVCdG4ub25jbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5vcGVuU2hhcmVNb2RhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgd2luZG93Lm9wZW5TaGFyZU1vZGFsKHMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5zaG93Tm90aWZpY2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB3aW5kb3cuc2hvd05vdGlmaWNhdGlvbignU2hhcmUgbW9kYWwgbm90IGxvYWRlZC4gUmVmcmVzaCB0aGUgcGFnZS4nLCAnZXJyb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGJ0blJvdy5hcHBlbmRDaGlsZChzaGFyZUJ0bik7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBkZWxldGUgYnV0dG9uIGZvciBhbGwgc2VydmljZXMgZXhjZXB0IEludGVybmV0XG4gICAgICBpZiAocy5pZCAhPT0gJ2ludGVybmV0Jykge1xuICAgICAgICBjb25zdCBkZWxCdG4gPSBlbCgnYnV0dG9uJywgJ2RlbGV0ZS1idG4nLCAnXHVEODNEXHVEREQxXHVGRTBGJyk7XG4gICAgICAgIGRlbEJ0bi50aXRsZSA9ICdEZWxldGUgdGhpcyBzZXJ2aWNlJztcbiAgICAgICAgZGVsQnRuLm9uY2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgd2luZG93LmRlbGV0ZVNlcnZpY2Uocy5pZCwgcy5uYW1lKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnRuUm93LmFwcGVuZENoaWxkKGRlbEJ0bik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ0biA9IGVsKCdidXR0b24nLCBudWxsLCAnT3BlbicpO1xuICAgICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB3aW5kb3cub3BlbihzZXJ2aWNlVXJsKHMuaWQpLCAnX2JsYW5rJywgJ25vb3BlbmVyJyk7XG4gICAgICBidG5Sb3cuYXBwZW5kQ2hpbGQoYnRuKTtcbiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoYnRuUm93KTtcbiAgICAgIGNhcmQuc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gYCR7TWF0aC5taW4oaSAqIDQ1LCAyNzApfW1zYDtcblxuICAgICAgcm9vdC5hcHBlbmRDaGlsZChjYXJkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FyZCcpLmZvckVhY2goY2FyZCA9PiBjYXJkLmNsYXNzTGlzdC5hZGQoJ2xvYWRlZCcpKTtcbiAgICB9KTtcblxuICAgIC8vIEdyb3VwIHJlY2lwZSBjYXJkcyB2aXN1YWxseSBhZnRlciBncmlkIGlzIGJ1aWx0XG4gICAgaWYgKHdpbmRvdy5ncm91cFJlY2lwZUNhcmRzKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gd2luZG93Lmdyb3VwUmVjaXBlQ2FyZHMoKSk7XG5cbiAgICAvLyBSZWZyZXNoIHRoZSBzZXJ2aWNlIGZpbHRlciBzbyB0aGUgY2F0ZWdvcnkgZHJvcGRvd24gcmVmbGVjdHMgbmV3IHNlcnZpY2VzXG4gICAgaWYgKHdpbmRvdy5yZWZyZXNoU2VydmljZUZpbHRlcikgd2luZG93LnJlZnJlc2hTZXJ2aWNlRmlsdGVyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRCYWRnZShpZCwgdXAsIHJlc3BvbnNlVGltZSA9IG51bGwpIHtcbiAgICBjb25zdCBkb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG90LScgKyBpZCArICctZ3JpZCcpO1xuICAgIGNvbnN0IHBpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFkZ2UtJyArIGlkKTtcbiAgICBjb25zdCB0aW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZS0nICsgaWQpO1xuICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1hcHA9XCIke2lkfVwiXWApO1xuXG4gICAgaWYgKGRvdCkge1xuICAgICAgZG90LmNsYXNzTGlzdC50b2dnbGUoJ29rJywgdXApO1xuICAgICAgZG90LmNsYXNzTGlzdC50b2dnbGUoJ2JhZCcsICF1cCk7XG4gICAgfVxuXG4gICAgaWYgKHBpbGwpIHtcbiAgICAgIHBpbGwudGV4dENvbnRlbnQgPSB1cCA/ICdPTicgOiAnT0ZGJztcbiAgICAgIHBpbGwuY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCB1cCk7XG4gICAgICBwaWxsLmNsYXNzTGlzdC50b2dnbGUoJ29mZicsICF1cCk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVFbCAmJiByZXNwb25zZVRpbWUgIT09IG51bGwpIHtcbiAgICAgIHRpbWVFbC50ZXh0Q29udGVudCA9IHVwID8gYCR7cmVzcG9uc2VUaW1lfW1zYCA6ICd0aW1lb3V0JztcbiAgICAgIHRpbWVFbC5jbGFzc05hbWUgPSBgcmVzcG9uc2UtdGltZSAke2dldFJlc3BvbnNlVGltZUNsYXNzKHJlc3BvbnNlVGltZSwgdXApfWA7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNhcmQgc3RhdHVzIGZvciBpY29uIGNvbG9yaW5nXG4gICAgaWYgKGNhcmQpIHtcbiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXR1cycsIHVwID8gJ29uJyA6ICdvZmYnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoQWxsKCkge1xuICAgIGlmIChyZWZyZXNoSW5GbGlnaHQpIHtcbiAgICAgIHJlZnJlc2hRdWV1ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlZnJlc2hJbkZsaWdodDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVTdGFtcChsYWJlbCwgY2hlY2tlZEF0ID0gbmV3IERhdGUoKSkge1xuICAgICAgY29uc3Qgc3RhbXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhbXAnKTtcbiAgICAgIGlmIChzdGFtcCkgc3RhbXAudGV4dENvbnRlbnQgPSBgJHtsYWJlbH06ICR7bmV3IERhdGUoY2hlY2tlZEF0KS50b0xvY2FsZVRpbWVTdHJpbmcoKX1gO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5QmF0Y2hSZXN1bHRzKHN0YXR1c2VzKSB7XG4gICAgICBjb25zdCBkbnNJZHMgPSBPYmplY3Qua2V5cyhTSVRFLmRuc1NlcnZlcnMpO1xuICAgICAgZG5zSWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0YXR1c2VzW2lkXTtcbiAgICAgICAgaWYgKHJlc3VsdCkgc2V0UXVpY2soaWQsIHJlc3VsdC5pc1VwLCByZXN1bHQucmVzcG9uc2VUaW1lKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdHVzZXMuaW50ZXJuZXQpIHtcbiAgICAgICAgc2V0UXVpY2soJ2ludGVybmV0Jywgc3RhdHVzZXMuaW50ZXJuZXQuaXNVcCwgc3RhdHVzZXMuaW50ZXJuZXQucmVzcG9uc2VUaW1lKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93LkFQUFMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzdGF0dXNlc1tzZXJ2aWNlLmlkXTtcbiAgICAgICAgaWYgKHJlc3VsdCkgc2V0QmFkZ2Uoc2VydmljZS5pZCwgcmVzdWx0LmlzVXAsIHJlc3VsdC5yZXNwb25zZVRpbWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEZhbGxiYWNrKCkge1xuICAgICAgY29uc3QgZG5zSWRzID0gT2JqZWN0LmtleXMoU0lURS5kbnNTZXJ2ZXJzKTtcbiAgICAgIGNvbnN0IHRvcENoZWNrcyA9IGRuc0lkcy5tYXAoaWQgPT4gY2hlY2tTZXJ2aWNlV2l0aFRpbWluZyhpZCkpO1xuICAgICAgdG9wQ2hlY2tzLnB1c2goY2hlY2tTZXJ2aWNlV2l0aFRpbWluZygnaW50ZXJuZXQnKSk7XG4gICAgICBjb25zdCB0b3BSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwodG9wQ2hlY2tzKTtcblxuICAgICAgZG5zSWRzLmZvckVhY2goKGlkLCBpKSA9PiBzZXRRdWljayhpZCwgdG9wUmVzdWx0c1tpXS5pc1VwLCB0b3BSZXN1bHRzW2ldLnJlc3BvbnNlVGltZSkpO1xuICAgICAgY29uc3QgaW50ZXJuZXRSZXN1bHQgPSB0b3BSZXN1bHRzW3RvcFJlc3VsdHMubGVuZ3RoIC0gMV07XG4gICAgICBzZXRRdWljaygnaW50ZXJuZXQnLCBpbnRlcm5ldFJlc3VsdC5pc1VwLCBpbnRlcm5ldFJlc3VsdC5yZXNwb25zZVRpbWUpO1xuXG4gICAgICBjb25zdCBhcHBSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHdpbmRvdy5BUFBTLm1hcChhc3luYyBzID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1NlcnZpY2VXaXRoVGltaW5nKHMuaWQpO1xuICAgICAgICAgIHJldHVybiB7IGlkOiBzLmlkLCAuLi5yZXN1bHQgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGFwcFJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgICBzZXRCYWRnZShyZXN1bHQuaWQsIHJlc3VsdC5pc1VwLCByZXN1bHQucmVzcG9uc2VUaW1lKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZnJlc2hJbkZsaWdodCA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3YxL3NlcnZpY2VzL3N0YXR1cycsIHsgY2FjaGU6ICduby1zdG9yZScgfSk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YXR1cyByZWZyZXNoIGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGFwcGx5QmF0Y2hSZXN1bHRzKGRhdGEuc3RhdHVzZXMgfHwge30pO1xuICAgICAgICB1cGRhdGVTdGFtcCgnbGFzdCBjaGVjaycsIGRhdGEuY2hlY2tlZEF0IHx8IG5ldyBEYXRlKCkpO1xuICAgICAgfSBjYXRjaCAoYmF0Y2hFcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0JhdGNoZWQgc3RhdHVzIHJlZnJlc2ggZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZGlyZWN0IHByb2JlczonLCBiYXRjaEVycm9yKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCByZWZyZXNoRmFsbGJhY2soKTtcbiAgICAgICAgICB1cGRhdGVTdGFtcCgnbGFzdCBjaGVjaycpO1xuICAgICAgICB9IGNhdGNoIChmYWxsYmFja0Vycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRGFzaGJvYXJkIHJlZnJlc2ggZmFpbGVkOicsIGZhbGxiYWNrRXJyb3IpO1xuICAgICAgICAgIHVwZGF0ZVN0YW1wKCdsYXN0IGZhaWxlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWZyZXNoSW5GbGlnaHQgPSBudWxsO1xuICAgICAgICBpZiAocmVmcmVzaFF1ZXVlZCkge1xuICAgICAgICAgIHJlZnJlc2hRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgd2luZG93LnJlZnJlc2hBbGwoKTsgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuIHJlZnJlc2hJbkZsaWdodDtcbiAgfVxuXG4gIC8vIEROUyBvcGVuIGJ1dHRvbnMgXHUyMDE0IHVzZSBldmVudCBkZWxlZ2F0aW9uIG9uIC50b3AgY29udGFpbmVyXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b3AnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGNvbnN0IG9wZW5CdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbaWQkPVwiLW9wZW5cIl0nKTtcbiAgICBpZiAoIW9wZW5CdG4pIHJldHVybjtcbiAgICBjb25zdCBpZCA9IG9wZW5CdG4uaWQucmVwbGFjZSgnLW9wZW4nLCAnJyk7XG4gICAgaWYgKFNJVEUuZG5zU2VydmVyc1tpZF0pIHdpbmRvdy5vcGVuKHNlcnZpY2VVcmwoaWQpLCAnX2JsYW5rJywgJ25vb3BlbmVyJyk7XG4gIH0pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2Etb3BlbicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHdpbmRvdy5vcGVuKHNlcnZpY2VVcmwoJ2NhJyksICdfYmxhbmsnLCAnbm9vcGVuZXInKSk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcmVkcy1idG4tY2EnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBlLnN0b3BQcm9wYWdhdGlvbigpOyBjb25zdCBzID0gd2luZG93LkFQUFMuZmluZChhID0+IGEuaWQgPT09ICdjYScpOyBpZiAocyAmJiB3aW5kb3cub3BlblNlcnZpY2VDcmVkc01vZGFsKSB3aW5kb3cub3BlblNlcnZpY2VDcmVkc01vZGFsKHMpOyB9KTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29wdGlvbnMtYnRuLWNhJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgY29uc3QgcyA9IHdpbmRvdy5BUFBTLmZpbmQoYSA9PiBhLmlkID09PSAnY2EnKTsgaWYgKHMgJiYgd2luZG93Lm9wZW5TZXJ2aWNlRWRpdE1vZGFsKSB3aW5kb3cub3BlblNlcnZpY2VFZGl0TW9kYWwocyk7IH0pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlLWJ0bi1jYScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGlmICh3aW5kb3cuZGVsZXRlU2VydmljZSkgd2luZG93LmRlbGV0ZVNlcnZpY2UoJ2NhJywgJ0Rhc2hDQScpOyB9KTtcblxuICAvLyBXaW5kb3cgZXhwb3J0c1xuICB3aW5kb3cubG9hZFNlcnZpY2VzID0gbG9hZFNlcnZpY2VzO1xuICB3aW5kb3cuYnVpbGRHcmlkID0gYnVpbGRHcmlkO1xuICB3aW5kb3cucmVmcmVzaEFsbCA9IHJlZnJlc2hBbGw7XG4gIHdpbmRvdy5zZXRRdWljayA9IHNldFF1aWNrO1xuICB3aW5kb3cuc2V0QmFkZ2UgPSBzZXRCYWRnZTtcbiAgd2luZG93LmdldFJlc3BvbnNlVGltZUNsYXNzID0gZ2V0UmVzcG9uc2VUaW1lQ2xhc3M7XG4gIHdpbmRvdy5jaGVja1NlcnZpY2VXaXRoVGltaW5nID0gY2hlY2tTZXJ2aWNlV2l0aFRpbWluZztcbiAgd2luZG93LnNlcnZpY2VVcmwgPSBzZXJ2aWNlVXJsO1xuICB3aW5kb3cuZWwgPSBlbDtcblxufSkoKTtcbjtcbi8vID09PT09PT09PT0gRE5TIE1BTkFHRU1FTlQgPT09PT09PT09PVxuKGZ1bmN0aW9uICgpIHtcbiAgLy8gUmVzdGFydCBETlMgc2VydmljZSB2aWEgYmFja2VuZCBwcm94eSAoYmFja2VuZCBoYW5kbGVzIGF1dGggYXV0b21hdGljYWxseSlcbiAgYXN5bmMgZnVuY3Rpb24gcmVzdGFydERuc1NlcnZpY2UoZG5zSWQpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL2Rucy9yZXN0YXJ0LyR7ZG5zSWR9YCwgeyBtZXRob2Q6ICdQT1NUJyB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvciB8fCAnUmVzdGFydCBmYWlsZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEV2ZW50IGRlbGVnYXRpb24gZm9yIEROUyByZXN0YXJ0IGJ1dHRvbnMgKGR5bmFtaWMgY2FyZHMpXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b3AnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoZSkgPT4ge1xuICAgIGNvbnN0IHJlc3RhcnRCdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbaWQkPVwiLXJlc3RhcnRcIl0nKTtcbiAgICBpZiAoIXJlc3RhcnRCdG4pIHJldHVybjtcbiAgICBjb25zdCBkbnNJZCA9IHJlc3RhcnRCdG4uaWQucmVwbGFjZSgnLXJlc3RhcnQnLCAnJyk7XG4gICAgaWYgKCFTSVRFLmRuc1NlcnZlcnNbZG5zSWRdKSByZXR1cm47XG4gICAgaWYgKCFjb25maXJtKGBSZXN0YXJ0ICR7ZG5zSWQudG9VcHBlckNhc2UoKX0gc2VydmljZT9gKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3aXRoQnV0dG9uKHJlc3RhcnRCdG4sICcuLi4nLCAoKSA9PiByZXN0YXJ0RG5zU2VydmljZShkbnNJZCkpO1xuICAgICAgc2V0VGltZW91dCh3aW5kb3cucmVmcmVzaEFsbCwgREMuREVMQVlTLlJFTE9BRCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2hvd05vdGlmaWNhdGlvbignUmVzdGFydCBmYWlsZWQ6ICcgKyBlLm1lc3NhZ2UsICdlcnJvcicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gRE5TIFVwZGF0ZSBidXR0b25zXG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZURuc1NlcnZlcihkbnNJZCwgc2VydmVySXApIHtcbiAgICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtkbnNJZH0tdXBkYXRlYCk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYnRuPy50ZXh0Q29udGVudCB8fCAnXHUyQjA2XHVGRTBGJztcblxuICAgIHRyeSB7XG4gICAgICAvLyBGaXJzdCBjaGVjayBmb3IgdXBkYXRlc1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1REQwRCc7XG4gICAgICBidG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgYnRuLnRpdGxlID0gJ0NoZWNraW5nIGZvciB1cGRhdGVzLi4uJztcblxuICAgICAgY29uc3QgY2hlY2tSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL2Rucy9jaGVjay11cGRhdGU/c2VydmVyPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlcnZlcklwKX1gKTtcbiAgICAgIGNvbnN0IGNoZWNrUmVzdWx0ID0gYXdhaXQgY2hlY2tSZXNwb25zZS5qc29uKCk7XG5cbiAgICAgIGlmICghY2hlY2tSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hlY2tSZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBjaGVjayBmb3IgdXBkYXRlcycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNoZWNrUmVzdWx0LnVwZGF0ZUF2YWlsYWJsZSkge1xuICAgICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyNzA1JztcbiAgICAgICAgYnRuLnRpdGxlID0gYEFscmVhZHkgb24gbGF0ZXN0IHZlcnNpb24gKCR7Y2hlY2tSZXN1bHQuY3VycmVudFZlcnNpb259KWA7XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24oYCR7ZG5zSWQudG9VcHBlckNhc2UoKX0gaXMgYWxyZWFkeSB1cCB0byBkYXRlISBDdXJyZW50IHZlcnNpb246ICR7Y2hlY2tSZXN1bHQuY3VycmVudFZlcnNpb259YCwgJ2luZm8nKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0O1xuICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIGJ0bi50aXRsZSA9ICdVcGRhdGUgRE5TIHNlcnZlcic7XG4gICAgICAgIH0sIDMwMDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBhdmFpbGFibGUgLSBjb25maXJtIHdpdGggdXNlclxuICAgICAgY29uc3QgY29uZmlybVVwZGF0ZSA9IGNvbmZpcm0oXG4gICAgICAgIGBVcGRhdGUgYXZhaWxhYmxlIGZvciAke2Ruc0lkLnRvVXBwZXJDYXNlKCl9IVxcblxcbmAgK1xuICAgICAgICBgQ3VycmVudDogJHtjaGVja1Jlc3VsdC5jdXJyZW50VmVyc2lvbn1cXG5gICtcbiAgICAgICAgYE5ldzogJHtjaGVja1Jlc3VsdC51cGRhdGVWZXJzaW9ufVxcblxcbmAgK1xuICAgICAgICAoY2hlY2tSZXN1bHQudXBkYXRlVGl0bGUgPyBgJHtjaGVja1Jlc3VsdC51cGRhdGVUaXRsZX1cXG5cXG5gIDogJycpICtcbiAgICAgICAgYFRoZSBETlMgc2VydmVyIHdpbGwgcmVzdGFydCBkdXJpbmcgdGhlIHVwZGF0ZS5cXG5Qcm9jZWVkP2BcbiAgICAgICk7XG5cbiAgICAgIGlmICghY29uZmlybVVwZGF0ZSkge1xuICAgICAgICBidG4udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7XG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBidG4udGl0bGUgPSAnVXBkYXRlIEROUyBzZXJ2ZXInO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIHVwZGF0ZVxuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1REQwNCc7XG4gICAgICBidG4udGl0bGUgPSAnVXBkYXRpbmcuLi4nO1xuXG4gICAgICBjb25zdCB1cGRhdGVSZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL2Rucy91cGRhdGU/c2VydmVyPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlcnZlcklwKX1gLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZVJlc3VsdCA9IGF3YWl0IHVwZGF0ZVJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgaWYgKCF1cGRhdGVSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodXBkYXRlUmVzdWx0LmVycm9yIHx8ICdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGRhdGVSZXN1bHQubWFudWFsVXBkYXRlUmVxdWlyZWQpIHtcbiAgICAgICAgLy8gVGVjaG5pdGl1bSB2MTQrIGRvZXNuJ3Qgc3VwcG9ydCBhdXRvLWluc3RhbGwgdmlhIEFQSVxuICAgICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyQjA2XHVGRTBGJztcbiAgICAgICAgYnRuLnRpdGxlID0gYFVwZGF0ZSBhdmFpbGFibGU6ICR7dXBkYXRlUmVzdWx0Lm5ld1ZlcnNpb259YDtcbiAgICAgICAgY29uc3QgZG93bmxvYWRJbmZvID0gdXBkYXRlUmVzdWx0LmRvd25sb2FkTGlua1xuICAgICAgICAgID8gYFxcbkRvd25sb2FkOiAke3VwZGF0ZVJlc3VsdC5kb3dubG9hZExpbmt9YFxuICAgICAgICAgIDogJyc7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uc0luZm8gPSB1cGRhdGVSZXN1bHQuaW5zdHJ1Y3Rpb25zTGlua1xuICAgICAgICAgID8gYFxcbkluc3RydWN0aW9uczogJHt1cGRhdGVSZXN1bHQuaW5zdHJ1Y3Rpb25zTGlua31gXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgc2hvd05vdGlmaWNhdGlvbihgJHtkbnNJZC50b1VwcGVyQ2FzZSgpfSB1cGRhdGUgcmVxdWlyZXMgbWFudWFsIGluc3RhbGxhdGlvbi4gQ3VycmVudDogJHt1cGRhdGVSZXN1bHQucHJldmlvdXNWZXJzaW9ufSBcdTIxOTIgJHt1cGRhdGVSZXN1bHQubmV3VmVyc2lvbn0uIFBsZWFzZSB1cGRhdGUgbWFudWFsbHkgb24gdGhlIGhvc3QgbWFjaGluZS5gLCAnd2FybmluZycsIDgwMDApO1xuICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyNzA1JztcbiAgICAgIGJ0bi50aXRsZSA9ICdVcGRhdGVkIHN1Y2Nlc3NmdWxseSEnO1xuICAgICAgc2hvd05vdGlmaWNhdGlvbihgJHtkbnNJZC50b1VwcGVyQ2FzZSgpfSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEgJHt1cGRhdGVSZXN1bHQucHJldmlvdXNWZXJzaW9ufSBcdTIxOTIgJHt1cGRhdGVSZXN1bHQubmV3VmVyc2lvbn0uIFNlcnZlciBpcyByZXN0YXJ0aW5nLi4uYCwgJ3N1Y2Nlc3MnKTtcblxuICAgICAgLy8gUmVmcmVzaCBhZnRlciBkZWxheSBmb3Igc2VydmVyIHJlc3RhcnRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBidG4udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7XG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBidG4udGl0bGUgPSAnVXBkYXRlIEROUyBzZXJ2ZXInO1xuICAgICAgICB3aW5kb3cucmVmcmVzaEFsbCgpO1xuICAgICAgfSwgMTAwMDApO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ROUyB1cGRhdGUgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1Mjc0Qyc7XG4gICAgICBidG4udGl0bGUgPSAnVXBkYXRlIGZhaWxlZCc7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKGBGYWlsZWQgdG8gdXBkYXRlICR7ZG5zSWQudG9VcHBlckNhc2UoKX06ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBidG4udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7XG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBidG4udGl0bGUgPSAnVXBkYXRlIEROUyBzZXJ2ZXInO1xuICAgICAgfSwgMzAwMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRXZlbnQgZGVsZWdhdGlvbiBmb3IgRE5TIHVwZGF0ZSBidXR0b25zIChkeW5hbWljIGNhcmRzKVxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9wJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICBjb25zdCB1cGRhdGVCdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbaWQkPVwiLXVwZGF0ZVwiXScpO1xuICAgIGlmICghdXBkYXRlQnRuKSByZXR1cm47XG4gICAgY29uc3QgZG5zSWQgPSB1cGRhdGVCdG4uaWQucmVwbGFjZSgnLXVwZGF0ZScsICcnKTtcbiAgICBpZiAoIVNJVEUuZG5zU2VydmVyc1tkbnNJZF0pIHJldHVybjtcbiAgICB1cGRhdGVEbnNTZXJ2ZXIoZG5zSWQsIFNJVEUuZG5zU2VydmVyc1tkbnNJZF0/LmlwKTtcbiAgfSk7XG5cbiAgLy8gPT09PT0gRE5TIFNFVFRJTkdTIE1PREFMID09PT09XG5cbiAgLy8gSW5qZWN0IG1vZGFsIEhUTUxcbiAgaW5qZWN0TW9kYWwoJ2Rucy1zZXR0aW5ncy1tb2RhbCcsIGBcbiAgPGRpdiBpZD1cImRucy1zZXR0aW5ncy1tb2RhbFwiIGNsYXNzPVwid2VhdGhlci1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWNvbnRlbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNDIwcHg7IG1heC13aWR0aDogNTIwcHg7XCI+XG4gICAgICA8aDMgaWQ9XCJkbnMtc2V0dGluZ3MtdGl0bGVcIj5ETlMgU2V0dGluZ3M8L2gzPlxuXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZ3JpZDsgZ2FwOiAxNnB4OyBtYXJnaW4tdG9wOiAxNnB4O1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJkbnMtZWRpdC1pcFwiIGNsYXNzPVwiZm9ybS1sYWJlbC1hY2NlbnQtc21cIj5TZXJ2ZXIgSVA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZG5zLWVkaXQtaXBcIiBjbGFzcz1cImZvcm0taW5wdXQtbWRcIiBwbGFjZWhvbGRlcj1cIjE5Mi4xNjguMS4xXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImRucy1lZGl0LXBvcnRcIiBjbGFzcz1cImZvcm0tbGFiZWwtYWNjZW50LXNtXCI+UG9ydDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImRucy1lZGl0LXBvcnRcIiBjbGFzcz1cImZvcm0taW5wdXQtbWRcIiBwbGFjZWhvbGRlcj1cIjUzODBcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZG5zLWVkaXQtbmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbC1hY2NlbnQtc21cIj5EaXNwbGF5IE5hbWUgKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJkbnMtZWRpdC1uYW1lXCIgY2xhc3M9XCJmb3JtLWlucHV0LW1kXCIgcGxhY2Vob2xkZXI9XCJlLmcuIFByaW1hcnkgRE5TXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhpbnQtc21cIj5NYW5hZ2UgY3JlZGVudGlhbHMgdmlhIFRva2VucyBpbiB0aGUgdG9vbGJhcjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWJ1dHRvbnNcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDI0cHg7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJkbnMtc2V0dGluZ3MtY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gaWQ9XCJkbnMtc2V0dGluZ3MtZGVsZXRlXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgI2U3NGMzYyAyMCUsIHRyYW5zcGFyZW50KTsgYm9yZGVyLWNvbG9yOiAjZTc0YzNjOyBjb2xvcjogI2U3NGMzYztcIj5SZW1vdmU8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImRucy1zZXR0aW5ncy1zYXZlXCIgY2xhc3M9XCJidG4tYWNjZW50XCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PmApO1xuXG4gIGxldCBjdXJyZW50RG5zSWQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIG9wZW5EbnNTZXR0aW5ncyhkbnNJZCkge1xuICAgIGN1cnJlbnREbnNJZCA9IGRuc0lkO1xuICAgIGNvbnN0IHNlcnZlciA9IFNJVEUuZG5zU2VydmVyc1tkbnNJZF0gfHwge307XG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLW1vZGFsJyk7XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLXRpdGxlJykudGV4dENvbnRlbnQgPSBgJHsoc2VydmVyLm5hbWUgfHwgZG5zSWQpLnRvVXBwZXJDYXNlKCl9IFNldHRpbmdzYDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWVkaXQtaXAnKS52YWx1ZSA9IHNlcnZlci5pcCB8fCAnJztcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWVkaXQtcG9ydCcpLnZhbHVlID0gc2VydmVyLnBvcnQgfHwgREMuREVGQVVMVFMuRE5TX1BPUlQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rucy1lZGl0LW5hbWUnKS52YWx1ZSA9IHNlcnZlci5uYW1lIHx8ICcnO1xuXG4gICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2F2ZURuc1NldHRpbmdzKCkge1xuICAgIGlmICghY3VycmVudERuc0lkKSByZXR1cm47XG4gICAgY29uc3QgaXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWVkaXQtaXAnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgcG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkbnMtZWRpdC1wb3J0JykudmFsdWUudHJpbSgpIHx8IERDLkRFRkFVTFRTLkROU19QT1JUO1xuICAgIGNvbnN0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLWVkaXQtbmFtZScpLnZhbHVlLnRyaW0oKTtcblxuICAgIGlmICghaXApIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ1NlcnZlciBJUCBpcyByZXF1aXJlZCcsICd3YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlID0geyBkbnNTZXJ2ZXJzOiB7fSB9O1xuICAgIHVwZGF0ZS5kbnNTZXJ2ZXJzW2N1cnJlbnREbnNJZF0gPSB7IGlwLCBwb3J0OiBTdHJpbmcocG9ydCkgfTtcbiAgICBpZiAobmFtZSkgdXBkYXRlLmRuc1NlcnZlcnNbY3VycmVudERuc0lkXS5uYW1lID0gbmFtZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2NvbmZpZycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh1cGRhdGUpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBTSVRFLmRuc1NlcnZlcnNbY3VycmVudERuc0lkXSA9IHVwZGF0ZS5kbnNTZXJ2ZXJzW2N1cnJlbnREbnNJZF07XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24oYCR7Y3VycmVudERuc0lkLnRvVXBwZXJDYXNlKCl9IHNldHRpbmdzIHNhdmVkYCwgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgY2xvc2VEbnNTZXR0aW5ncygpO1xuICAgICAgICB3aW5kb3cucmVmcmVzaEFsbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvd05vdGlmaWNhdGlvbihyZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIHNldHRpbmdzJywgJ2Vycm9yJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdGYWlsZWQgdG8gc2F2ZTogJyArIGVyci5tZXNzYWdlLCAnZXJyb3InKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZW1vdmVEbnNTZXJ2ZXIoKSB7XG4gICAgaWYgKCFjdXJyZW50RG5zSWQpIHJldHVybjtcbiAgICBpZiAoIWNvbmZpcm0oYFJlbW92ZSAke2N1cnJlbnREbnNJZC50b1VwcGVyQ2FzZSgpfSBmcm9tIGRhc2hib2FyZD8gVGhpcyB3b24ndCBhZmZlY3QgdGhlIGFjdHVhbCBETlMgc2VydmVyLmApKSByZXR1cm47XG5cbiAgICAvLyBSZW1vdmUgYnkgc2V0dGluZyB0byBudWxsIGluIGRuc1NlcnZlcnNcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2NvbmZpZycpO1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVzcC5qc29uKCk7XG4gICAgICBpZiAoY29uZmlnLmRuc1NlcnZlcnMpIHtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5kbnNTZXJ2ZXJzW2N1cnJlbnREbnNJZF07XG4gICAgICB9XG4gICAgICBjb25zdCBzYXZlUmVzcCA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2NvbmZpZycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGRuc1NlcnZlcnM6IGNvbmZpZy5kbnNTZXJ2ZXJzIHx8IHt9IH0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhdmVSZXNwLmpzb24oKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBkZWxldGUgU0lURS5kbnNTZXJ2ZXJzW2N1cnJlbnREbnNJZF07XG4gICAgICAgIC8vIFJlbW92ZSBjYXJkIGZyb20gRE9NXG4gICAgICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAudG9wIFtkYXRhLWFwcD1cIiR7Y3VycmVudERuc0lkfVwiXWApO1xuICAgICAgICBpZiAoY2FyZCkgY2FyZC5yZW1vdmUoKTtcbiAgICAgICAgc2hvd05vdGlmaWNhdGlvbihgJHtjdXJyZW50RG5zSWQudG9VcHBlckNhc2UoKX0gcmVtb3ZlZCBmcm9tIGRhc2hib2FyZGAsICdzdWNjZXNzJyk7XG4gICAgICAgIGNsb3NlRG5zU2V0dGluZ3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24ocmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gcmVtb3ZlJywgJ2Vycm9yJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdGYWlsZWQgdG8gcmVtb3ZlOiAnICsgZXJyLm1lc3NhZ2UsICdlcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlRG5zU2V0dGluZ3MoKSB7XG4gICAgY2xvc2VNb2RhbCgnZG5zLXNldHRpbmdzLW1vZGFsJyk7XG4gICAgY3VycmVudERuc0lkID0gbnVsbDtcbiAgfVxuXG4gIC8vIEV2ZW50IGxpc3RlbmVycyBmb3IgbW9kYWwgYnV0dG9uc1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLWNhbmNlbCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlRG5zU2V0dGluZ3MpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLXNhdmUnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzYXZlRG5zU2V0dGluZ3MpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG5zLXNldHRpbmdzLWRlbGV0ZScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZURuc1NlcnZlcik7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkbnMtc2V0dGluZ3MtbW9kYWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldC5pZCA9PT0gJ2Rucy1zZXR0aW5ncy1tb2RhbCcpIGNsb3NlRG5zU2V0dGluZ3MoKTtcbiAgfSk7XG4gIC8vIEV2ZW50IGRlbGVnYXRpb24gZm9yIEROUyBzZXR0aW5ncyBidXR0b25zIChkeW5hbWljIGNhcmRzKVxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9wJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICBjb25zdCBzZXR0aW5nc0J0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tpZCQ9XCItc2V0dGluZ3NcIl0nKTtcbiAgICBpZiAoIXNldHRpbmdzQnRuKSByZXR1cm47XG4gICAgY29uc3QgZG5zSWQgPSBzZXR0aW5nc0J0bi5pZC5yZXBsYWNlKCctc2V0dGluZ3MnLCAnJyk7XG4gICAgaWYgKCFTSVRFLmRuc1NlcnZlcnNbZG5zSWRdKSByZXR1cm47XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBvcGVuRG5zU2V0dGluZ3MoZG5zSWQpO1xuICB9KTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVmcmVzaCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHdpbmRvdy5yZWZyZXNoQWxsKTtcbn0pKCk7XG47XG4vLyA9PT09PT09PT09IExPRyBWSUVXRVJTID09PT09PT09PT1cbihmdW5jdGlvbiAoKSB7XG5cbiAgLy8gSW5qZWN0IGxvZ3MtbW9kYWwgSFRNTFxuICBpbmplY3RNb2RhbCgnbG9ncy1tb2RhbCcsIGBcbiAgPGRpdiBpZD1cImxvZ3MtbW9kYWxcIiBjbGFzcz1cImxvZ3MtbW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9ncy1tb2RhbC1jb250ZW50XCIgc3R5bGU9XCJtaW4td2lkdGg6IDgwMHB4OyBtYXgtd2lkdGg6IDEwMDBweDtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dzLWhlYWRlclwiPlxuICAgICAgICA8aDMgaWQ9XCJsb2dzLXRpdGxlXCI+RE5TIExvZ3M8L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9ncy1jb250cm9sc1wiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJsb2ctbGluZXNcIj5TaG93OjwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdCBpZD1cImxvZy1saW5lc1wiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjI1XCIgc2VsZWN0ZWQ+MjU8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI1MFwiPjUwPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjAwXCI+MjAwPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImxvZ3Mtc3RyZWFtXCIgY2xhc3M9XCJzdHJlYW0tYnRuXCIgdGl0bGU9XCJFbmFibGUgcmVhbC10aW1lIHN0cmVhbWluZ1wiPlx1RDgzRFx1RENFMSBMaXZlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImxvZ3MtcGF1c2VcIiBjbGFzcz1cInBhdXNlLWJ0blwiPlx1MjNGOFx1RkUwRiBQYXVzZTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gaWQ9XCJsb2dzLWNsb3NlXCIgY2xhc3M9XCJjbG9zZS1idG5cIj5cdTI3MTU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dzLWNvbnRhaW5lciBzY3JvbGwtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJsb2dzLWNvbnRlbnRcIiBjbGFzcz1cImxvZ3MtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dzLWxvYWRpbmdcIj5Mb2FkaW5nIGxvZ3MuLi48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCk7XG5cbiAgLy8gPT09PT0gU3RhdGUgPT09PT1cbiAgbGV0IGN1cnJlbnREbnNTZXJ2aWNlID0gbnVsbDtcbiAgbGV0IGxvZ3NJbnRlcnZhbCA9IG51bGw7XG4gIGxldCBsb2dzUGF1c2VkID0gZmFsc2U7XG5cbiAgbGV0IGN1cnJlbnRDb250YWluZXJJZCA9IG51bGw7XG4gIGxldCBjdXJyZW50Q29udGFpbmVyTmFtZSA9IG51bGw7XG4gIGxldCBjb250YWluZXJMb2dzTW9kZSA9IGZhbHNlO1xuXG4gIGxldCBjdXJyZW50TG9nUGF0aCA9IG51bGw7XG4gIGxldCBjdXJyZW50TG9nU2VydmljZU5hbWUgPSBudWxsO1xuICBsZXQgZmlsZUxvZ3NNb2RlID0gZmFsc2U7XG5cbiAgbGV0IGxvZ0V2ZW50U291cmNlID0gbnVsbDtcbiAgbGV0IGlzU3RyZWFtaW5nID0gZmFsc2U7XG5cbiAgLy8gPT09PT0gRE5TIExPR1MgPT09PT1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaERuc0xvZ3MoZG5zSWQsIGxpbmVzID0gMjUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VydmVySVAgPSBnZXREbnNTZXJ2ZXJBZGRyKGRuc0lkKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYC9hcGkvdjEvZG5zL2xvZ3M/c2VydmVyPSR7c2VydmVySVB9JmxpbWl0PSR7bGluZXN9YCwge1xuICAgICAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQubG9ncykge1xuICAgICAgICAgIHJldHVybiB7IGxvZ3M6IHJlc3VsdC5sb2dzLCBjb3VudDogcmVzdWx0LmNvdW50LCBzZXJ2ZXI6IHJlc3VsdC5zZXJ2ZXIgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogcmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZmV0Y2ggbG9ncycgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICByZXR1cm4geyBlcnJvcjogJ0ROUyBhdXRvLWF1dGggZmFpbGVkIC0gY2hlY2sgY3JlZGVudGlhbHMgaW4gc2V0dGluZ3MnIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyBlcnJvcjogYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdETlMgbG9ncyBmZXRjaCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSY29kZUNvbG9yKHJjb2RlKSB7XG4gICAgY29uc3QgY29sb3JzID0ge1xuICAgICAgJ05vRXJyb3InOiAndmFyKC0tb2stZmcpJyxcbiAgICAgICdOT0VSUk9SJzogJ3ZhcigtLW9rLWZnKScsXG4gICAgICAnTnhEb21haW4nOiAndmFyKC0tbXV0ZWQpJyxcbiAgICAgICdOWERPTUFJTic6ICd2YXIoLS1tdXRlZCknLFxuICAgICAgJ1JlZnVzZWQnOiAndmFyKC0tYmFkLWZnKScsXG4gICAgICAnUkVGVVNFRCc6ICd2YXIoLS1iYWQtZmcpJyxcbiAgICAgICdTZXJ2ZXJGYWlsdXJlJzogJyNmMzljMTInLFxuICAgICAgJ1NFUlZGQUlMJzogJyNmMzljMTInXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JzW3Jjb2RlXSB8fCAndmFyKC0tZmcpJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckRuc0xvZ0VudHJ5KGxvZykge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc05hbWUgPSAnbG9nLWVudHJ5JztcbiAgICBkaXYuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDE0MHB4IDExMHB4IDFmciA3MHB4IDgwcHg7IGdhcDogOHB4OyBwYWRkaW5nOiA2cHggMTBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGZvbnQtc2l6ZTogMC44cmVtOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XG5cbiAgICAvLyBJZiB1bnBhcnNlZCByYXcgbG9nXG4gICAgaWYgKGxvZy5wYXJzZWQgPT09IGZhbHNlKSB7XG4gICAgICBkaXYuc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICcxZnInO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMC43NXJlbTtcIj4ke2VzY2FwZUh0bWwobG9nLnJhdyl9PC9zcGFuPmA7XG4gICAgICByZXR1cm4gZGl2O1xuICAgIH1cblxuICAgIGNvbnN0IHJjb2RlQ29sb3IgPSBnZXRSY29kZUNvbG9yKGxvZy5yY29kZSk7XG4gICAgY29uc3QgaXNCbG9ja2VkID0gbG9nLnJjb2RlID09PSAnUmVmdXNlZCcgfHwgbG9nLnJjb2RlID09PSAnUkVGVVNFRCc7XG5cbiAgICBkaXYuaW5uZXJIVE1MID0gYFxuICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDAuNzVyZW07XCI+JHtlc2NhcGVIdG1sKGxvZy50aW1lc3RhbXApfTwvc3Bhbj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtc2l6ZTogMC43NXJlbTtcIiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChsb2cuY2xpZW50KX1cIj4ke2VzY2FwZUh0bWwobG9nLmNsaWVudCl9PC9zcGFuPlxuICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNTAwOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgJHtpc0Jsb2NrZWQgPyAndGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IG9wYWNpdHk6IDAuNjsnIDogJyd9XCIgdGl0bGU9XCIke2VzY2FwZUh0bWwobG9nLmRvbWFpbil9XCI+JHtlc2NhcGVIdG1sKGxvZy5kb21haW4pfTwvc3Bhbj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1zaXplOiAwLjc1cmVtO1wiPiR7ZXNjYXBlSHRtbChsb2cudHlwZSl9PC9zcGFuPlxuICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogJHtyY29kZUNvbG9yfTsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAwLjc1cmVtO1wiPiR7ZXNjYXBlSHRtbChsb2cucmNvZGUpfTwvc3Bhbj5cbiAgICBgO1xuXG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUxvZ3NEaXNwbGF5KCkge1xuICAgIC8vIEhhbmRsZSBmaWxlIGxvZ3MgbW9kZVxuICAgIGlmIChmaWxlTG9nc01vZGUpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUZpbGVMb2dzRGlzcGxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb250YWluZXIgbG9ncyBtb2RlXG4gICAgaWYgKGNvbnRhaW5lckxvZ3NNb2RlKSB7XG4gICAgICBhd2FpdCB1cGRhdGVDb250YWluZXJMb2dzRGlzcGxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBETlMgbG9ncyBtb2RlXG4gICAgaWYgKGxvZ3NQYXVzZWQgfHwgIWN1cnJlbnREbnNTZXJ2aWNlKSByZXR1cm47XG5cbiAgICBjb25zdCBsaW5lcyA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2ctbGluZXMnKS52YWx1ZSk7XG4gICAgY29uc3QgbG9nc0NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1jb250ZW50Jyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hEbnNMb2dzKGN1cnJlbnREbnNTZXJ2aWNlLCBsaW5lcyk7XG5cbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiB2YXIoLS1iYWQtZmcpO1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMS4ycmVtOyBtYXJnaW4tYm90dG9tOiA4cHg7XCI+XHUyNkEwXHVGRTBGIEVycm9yPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PiR7ZXNjYXBlSHRtbChyZXN1bHQuZXJyb3IpfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGhlYWRlciByb3dcbiAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTQwcHggMTEwcHggMWZyIDcwcHggODBweDsgZ2FwOiA4cHg7IHBhZGRpbmc6IDhweCAxMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJhc2UpOyBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tYm9yZGVyKTsgZm9udC1zaXplOiAwLjc1cmVtOyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7XCI+XG4gICAgICAgICAgPHNwYW4+VGltZTwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5DbGllbnQ8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+RG9tYWluPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlR5cGU8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+U3RhdHVzPC9zcGFuPlxuICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBpZiAocmVzdWx0LmxvZ3MgJiYgcmVzdWx0LmxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQubG9ncy5mb3JFYWNoKGxvZyA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nRWxlbWVudCA9IHJlbmRlckRuc0xvZ0VudHJ5KGxvZyk7XG4gICAgICAgICAgbG9nc0NvbnRlbnQuYXBwZW5kQ2hpbGQobG9nRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MICs9IGBcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPlxuICAgICAgICAgICAgTm8gRE5TIHF1ZXJpZXMgbG9nZ2VkIHlldFxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHZhcigtLWJhZC1mZyk7XCI+XG4gICAgICAgICAgRmFpbGVkIHRvIGZldGNoIGxvZ3M6ICR7ZXNjYXBlSHRtbChlcnJvci5tZXNzYWdlKX1cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuTG9nc01vZGFsKGRuc0lkKSB7XG4gICAgY3VycmVudERuc1NlcnZpY2UgPSBkbnNJZDtcbiAgICBsb2dzUGF1c2VkID0gZmFsc2U7XG4gICAgY29udGFpbmVyTG9nc01vZGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtbW9kYWwnKTtcbiAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLXRpdGxlJyk7XG4gICAgY29uc3QgcGF1c2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpO1xuICAgIGNvbnN0IHN0cmVhbUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLXN0cmVhbScpO1xuXG4gICAgdGl0bGUudGV4dENvbnRlbnQgPSBgJHtkbnNJZC50b1VwcGVyQ2FzZSgpfSBETlMgTG9nc2A7XG4gICAgcGF1c2VCdG4udGV4dENvbnRlbnQgPSAnXHUyM0Y4XHVGRTBGIFBhdXNlJztcbiAgICBwYXVzZUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdwYXVzZWQnKTtcblxuICAgIC8vIEhpZGUgc3RyZWFtIGJ1dHRvbiBmb3IgRE5TIGxvZ3MgKG9ubHkgYXZhaWxhYmxlIGZvciBjb250YWluZXIgbG9ncylcbiAgICBpZiAoc3RyZWFtQnRuKSB7XG4gICAgICBzdHJlYW1CdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICAvLyBJbml0aWFsIGxvYWRcbiAgICB1cGRhdGVMb2dzRGlzcGxheSgpO1xuXG4gICAgLy8gU3RhcnQgYXV0by1yZWZyZXNoIGV2ZXJ5IDMgc2Vjb25kc1xuICAgIGxvZ3NJbnRlcnZhbCA9IHNldEludGVydmFsKHVwZGF0ZUxvZ3NEaXNwbGF5LCBEQy5QT0xMLkxPR1MpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VMb2dzTW9kYWwoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1tb2RhbCcpO1xuICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcblxuICAgIGlmIChsb2dzSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwobG9nc0ludGVydmFsKTtcbiAgICAgIGxvZ3NJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU3RvcCBTU0Ugc3RyZWFtaW5nIGlmIGFjdGl2ZVxuICAgIHN0b3BMb2dTdHJlYW1pbmcoKTtcblxuICAgIC8vIFJlc2V0IGFsbCBsb2cgbW9kZXNcbiAgICBjdXJyZW50RG5zU2VydmljZSA9IG51bGw7XG4gICAgY29udGFpbmVyTG9nc01vZGUgPSBmYWxzZTtcbiAgICBjdXJyZW50Q29udGFpbmVySWQgPSBudWxsO1xuICAgIGN1cnJlbnRDb250YWluZXJOYW1lID0gbnVsbDtcbiAgICBmaWxlTG9nc01vZGUgPSBmYWxzZTtcbiAgICBjdXJyZW50TG9nUGF0aCA9IG51bGw7XG4gICAgY3VycmVudExvZ1NlcnZpY2VOYW1lID0gbnVsbDtcbiAgICBsb2dzUGF1c2VkID0gZmFsc2U7XG4gIH1cblxuICAvLyA9PT09PSBTU0UgTE9HIFNUUkVBTUlORyA9PT09PVxuXG4gIGZ1bmN0aW9uIHN0YXJ0TG9nU3RyZWFtaW5nKGNvbnRhaW5lcklkKSB7XG4gICAgaWYgKGxvZ0V2ZW50U291cmNlKSB7XG4gICAgICBzdG9wTG9nU3RyZWFtaW5nKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyZWFtQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3Mtc3RyZWFtJyk7XG4gICAgY29uc3QgcGF1c2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpO1xuICAgIGNvbnN0IGxvZ3NDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtY29udGVudCcpO1xuXG4gICAgLy8gU3RvcCBpbnRlcnZhbC1iYXNlZCByZWZyZXNoXG4gICAgaWYgKGxvZ3NJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChsb2dzSW50ZXJ2YWwpO1xuICAgICAgbG9nc0ludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbG9nRXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoYC9hcGkvdjEvbG9ncy9zdHJlYW0vJHtjb250YWluZXJJZH1gKTtcbiAgICAgIGlzU3RyZWFtaW5nID0gdHJ1ZTtcblxuICAgICAgc3RyZWFtQnRuLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgc3RyZWFtQnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1REQzNCBMaXZlJztcbiAgICAgIHN0cmVhbUJ0bi50aXRsZSA9ICdTdHJlYW1pbmcgLSBjbGljayB0byBzdG9wJztcbiAgICAgIHBhdXNlQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgIC8vIEFkZCBzdHJlYW1pbmcgaW5kaWNhdG9yIHRvIGhlYWRlclxuICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy10aXRsZScpO1xuICAgICAgaWYgKCF0aXRsZS50ZXh0Q29udGVudC5pbmNsdWRlcygnXHVEODNEXHVERDM0JykpIHtcbiAgICAgICAgdGl0bGUuaW5uZXJIVE1MID0gdGl0bGUudGV4dENvbnRlbnQucmVwbGFjZSgnXHVEODNEXHVEQ0NCJywgJ1x1RDgzRFx1RENDQiBcdUQ4M0RcdUREMzQnKTtcbiAgICAgIH1cblxuICAgICAgbG9nRXZlbnRTb3VyY2Uub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG5cbiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU3RyZWFtIGVycm9yOicsIGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgc3RvcExvZ1N0cmVhbWluZygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFwcGVuZCBuZXcgbG9nIGVudHJ5XG4gICAgICAgICAgY29uc3QgZW50cnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBlbnRyeS5jbGFzc05hbWUgPSAnbG9nLWVudHJ5JztcbiAgICAgICAgICBlbnRyeS5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6IGZsZXg7IGdhcDogMTJweDsgcGFkZGluZzogNnB4IDEwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBmb250LXNpemU6IDAuOHJlbTsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7JztcblxuICAgICAgICAgIGNvbnN0IHN0cmVhbVR5cGUgPSBkYXRhLnN0cmVhbSB8fCAnc3Rkb3V0JztcbiAgICAgICAgICBjb25zdCBpc0Vycm9yID0gc3RyZWFtVHlwZSA9PT0gJ3N0ZGVycic7XG4gICAgICAgICAgY29uc3QgbGV2ZWxDb2xvciA9IGlzRXJyb3IgPyAndmFyKC0tYmFkLWZnKScgOiAndmFyKC0tZmcpJztcbiAgICAgICAgICBjb25zdCBiZ0NvbG9yID0gaXNFcnJvciA/ICd2YXIoLS1iYWQtYmcpJyA6ICd2YXIoLS1vay1iZyknO1xuICAgICAgICAgIGNvbnN0IGxldmVsQmFkZ2UgPSBgPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiAke2JnQ29sb3J9OyBjb2xvcjogJHtsZXZlbENvbG9yfTsgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDAuN3JlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbWluLXdpZHRoOiA1MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+JHtpc0Vycm9yID8gJ1NUREVSUicgOiAnU1RET1VUJ308L3NwYW4+YDtcblxuICAgICAgICAgIGVudHJ5LmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LXNocmluazogMDtcIj4ke2xldmVsQmFkZ2V9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTsgY29sb3I6ICR7bGV2ZWxDb2xvcn07IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgd2hpdGUtc3BhY2U6IHByZS13cmFwO1wiPiR7ZXNjYXBlSHRtbChkYXRhLnRleHQpfTwvZGl2PlxuICAgICAgICAgIGA7XG5cbiAgICAgICAgICBsb2dzQ29udGVudC5hcHBlbmRDaGlsZChlbnRyeSk7XG5cbiAgICAgICAgICAvLyBBdXRvLXNjcm9sbCB0byBib3R0b21cbiAgICAgICAgICBsb2dzQ29udGVudC5zY3JvbGxUb3AgPSBsb2dzQ29udGVudC5zY3JvbGxIZWlnaHQ7XG5cbiAgICAgICAgICAvLyBMaW1pdCBlbnRyaWVzIHRvIHByZXZlbnQgbWVtb3J5IGlzc3VlcyAoa2VlcCBsYXN0IDUwMClcbiAgICAgICAgICB3aGlsZSAobG9nc0NvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoID4gNTAwKSB7XG4gICAgICAgICAgICBsb2dzQ29udGVudC5yZW1vdmVDaGlsZChsb2dzQ29udGVudC5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgc3RyZWFtIGRhdGE6JywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgbG9nRXZlbnRTb3VyY2Uub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXZlbnRTb3VyY2UgZXJyb3I6JywgZXJyKTtcbiAgICAgICAgc3RvcExvZ1N0cmVhbWluZygpO1xuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHN0cmVhbWluZzonLCBlcnIpO1xuICAgICAgc3RvcExvZ1N0cmVhbWluZygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BMb2dTdHJlYW1pbmcoKSB7XG4gICAgaWYgKGxvZ0V2ZW50U291cmNlKSB7XG4gICAgICBsb2dFdmVudFNvdXJjZS5jbG9zZSgpO1xuICAgICAgbG9nRXZlbnRTb3VyY2UgPSBudWxsO1xuICAgIH1cbiAgICBpc1N0cmVhbWluZyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RyZWFtQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3Mtc3RyZWFtJyk7XG4gICAgY29uc3QgcGF1c2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpO1xuICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtdGl0bGUnKTtcblxuICAgIGlmIChzdHJlYW1CdG4pIHtcbiAgICAgIHN0cmVhbUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgIHN0cmVhbUJ0bi50ZXh0Q29udGVudCA9ICdcdUQ4M0RcdURDRTEgTGl2ZSc7XG4gICAgICBzdHJlYW1CdG4udGl0bGUgPSAnRW5hYmxlIHJlYWwtdGltZSBzdHJlYW1pbmcnO1xuICAgIH1cblxuICAgIGlmIChwYXVzZUJ0bikge1xuICAgICAgcGF1c2VCdG4uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIH1cblxuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSB0aXRsZS50ZXh0Q29udGVudC5yZXBsYWNlKCcgXHVEODNEXHVERDM0JywgJycpO1xuICAgIH1cblxuICAgIC8vIFJlc3RhcnQgaW50ZXJ2YWwtYmFzZWQgcmVmcmVzaCBpZiBjb250YWluZXIgbG9ncyBtb2RhbCBpcyBvcGVuXG4gICAgaWYgKGNvbnRhaW5lckxvZ3NNb2RlICYmIGN1cnJlbnRDb250YWluZXJJZCAmJiAhbG9nc0ludGVydmFsKSB7XG4gICAgICBsb2dzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh1cGRhdGVDb250YWluZXJMb2dzRGlzcGxheSwgREMuUE9MTC5MT0dTKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PSBDT05UQUlORVIgTE9HUyA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoQ29udGFpbmVyTG9ncyhjb250YWluZXJJZCwgbGluZXMgPSAxMDApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBgL2FwaS92MS9sb2dzL2NvbnRhaW5lci8ke2NvbnRhaW5lcklkfT90YWlsPSR7bGluZXN9JnRpbWVzdGFtcHM9dHJ1ZWA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kcG9pbnQsIHtcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZScsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmxvZ3MpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9nczogcmVzdWx0LmxvZ3MsXG4gICAgICAgICAgICBjb3VudDogcmVzdWx0LmNvdW50LFxuICAgICAgICAgICAgY29udGFpbmVyTmFtZTogcmVzdWx0LmNvbnRhaW5lck5hbWUsXG4gICAgICAgICAgICBjb250YWluZXJJZDogcmVzdWx0LmNvbnRhaW5lcklkXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogcmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZmV0Y2ggY29udGFpbmVyIGxvZ3MnIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvbnRhaW5lciBsb2dzIGZldGNoIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4geyBlcnJvcjogZXJyb3IubWVzc2FnZSB9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckNvbnRhaW5lckxvZ0VudHJ5KGxvZykge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc05hbWUgPSAnbG9nLWVudHJ5JztcbiAgICBkaXYuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBmbGV4OyBnYXA6IDEycHg7IHBhZGRpbmc6IDZweCAxMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgZm9udC1zaXplOiAwLjhyZW07IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBmb250LWZhbWlseTogbW9ub3NwYWNlOyc7XG5cbiAgICBjb25zdCBzdHJlYW1Db2xvciA9IGxvZy5zdHJlYW0gPT09ICdzdGRlcnInID8gJ3ZhcigtLWJhZC1mZyknIDogJ3ZhcigtLWZnKSc7XG4gICAgY29uc3Qgc3RyZWFtQmFkZ2UgPSBsb2cuc3RyZWFtID09PSAnc3RkZXJyJyA/XG4gICAgICAnPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiB2YXIoLS1iYWQtYmcpOyBjb2xvcjogdmFyKC0tYmFkLWZnKTsgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDAuN3JlbTsgZm9udC13ZWlnaHQ6IDYwMDtcIj5TVERFUlI8L3NwYW4+JyA6XG4gICAgICAnPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiB2YXIoLS1vay1iZyk7IGNvbG9yOiB2YXIoLS1vay1mZyk7IHBhZGRpbmc6IDJweCA2cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgZm9udC1zaXplOiAwLjdyZW07IGZvbnQtd2VpZ2h0OiA2MDA7XCI+U1RET1VUPC9zcGFuPic7XG5cbiAgICBkaXYuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBzdHlsZT1cImZsZXgtc2hyaW5rOiAwO1wiPiR7c3RyZWFtQmFkZ2V9PC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTsgY29sb3I6ICR7c3RyZWFtQ29sb3J9OyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcIj4ke2VzY2FwZUh0bWwobG9nLnRleHQpfTwvZGl2PlxuICAgIGA7XG5cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyTG9nc0Rpc3BsYXkoKSB7XG4gICAgaWYgKGxvZ3NQYXVzZWQgfHwgIWN1cnJlbnRDb250YWluZXJJZCB8fCAhY29udGFpbmVyTG9nc01vZGUpIHJldHVybjtcblxuICAgIGNvbnN0IGxpbmVzID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZy1saW5lcycpLnZhbHVlKTtcbiAgICBjb25zdCBsb2dzQ29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLWNvbnRlbnQnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaENvbnRhaW5lckxvZ3MoY3VycmVudENvbnRhaW5lcklkLCBsaW5lcyk7XG5cbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiB2YXIoLS1iYWQtZmcpO1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMS4ycmVtOyBtYXJnaW4tYm90dG9tOiA4cHg7XCI+XHUyNkEwXHVGRTBGIEVycm9yPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PiR7ZXNjYXBlSHRtbChyZXN1bHQuZXJyb3IpfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGhlYWRlciByb3dcbiAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMTJweDsgcGFkZGluZzogOHB4IDEwcHg7IGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFzZSk7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBmb250LXNpemU6IDAuNzVyZW07IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHBvc2l0aW9uOiBzdGlja3k7IHRvcDogMDtcIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXgtc2hyaW5rOiAwOyB3aWR0aDogODBweDtcIj5TdHJlYW08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OiAxO1wiPkxvZyBPdXRwdXQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PmA7XG5cbiAgICAgIGlmIChyZXN1bHQubG9ncyAmJiByZXN1bHQubG9ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdC5sb2dzLmZvckVhY2gobG9nID0+IHtcbiAgICAgICAgICBjb25zdCBsb2dFbGVtZW50ID0gcmVuZGVyQ29udGFpbmVyTG9nRW50cnkobG9nKTtcbiAgICAgICAgICBsb2dzQ29udGVudC5hcHBlbmRDaGlsZChsb2dFbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQXV0by1zY3JvbGwgdG8gYm90dG9tXG4gICAgICAgIGxvZ3NDb250ZW50LnNjcm9sbFRvcCA9IGxvZ3NDb250ZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCArPSBgXG4gICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHZhcigtLW11dGVkKTtcIj5cbiAgICAgICAgICAgIE5vIGxvZ3MgYXZhaWxhYmxlIGZvciB0aGlzIGNvbnRhaW5lclxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ3NDb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHZhcigtLWJhZC1mZyk7XCI+XG4gICAgICAgICAgRmFpbGVkIHRvIGZldGNoIGxvZ3M6ICR7ZXNjYXBlSHRtbChlcnJvci5tZXNzYWdlKX1cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29udGFpbmVyTG9nc01vZGFsKGNvbnRhaW5lcklkLCBjb250YWluZXJOYW1lKSB7XG4gICAgY3VycmVudENvbnRhaW5lcklkID0gY29udGFpbmVySWQ7XG4gICAgY3VycmVudENvbnRhaW5lck5hbWUgPSBjb250YWluZXJOYW1lO1xuICAgIGNvbnRhaW5lckxvZ3NNb2RlID0gdHJ1ZTtcbiAgICBmaWxlTG9nc01vZGUgPSBmYWxzZTtcbiAgICBsb2dzUGF1c2VkID0gZmFsc2U7XG5cbiAgICAvLyBTdG9wIGFueSBleGlzdGluZyBzdHJlYW1pbmdcbiAgICBzdG9wTG9nU3RyZWFtaW5nKCk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLW1vZGFsJyk7XG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy10aXRsZScpO1xuICAgIGNvbnN0IHBhdXNlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtcGF1c2UnKTtcbiAgICBjb25zdCBzdHJlYW1CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1zdHJlYW0nKTtcblxuICAgIHRpdGxlLnRleHRDb250ZW50ID0gYFx1RDgzRFx1RENDQiAke2NvbnRhaW5lck5hbWV9IC0gQ29udGFpbmVyIExvZ3NgO1xuICAgIHBhdXNlQnRuLnRleHRDb250ZW50ID0gJ1x1MjNGOFx1RkUwRiBQYXVzZSc7XG4gICAgcGF1c2VCdG4uY2xhc3NMaXN0LnJlbW92ZSgncGF1c2VkJyk7XG5cbiAgICAvLyBTaG93IHN0cmVhbSBidXR0b24gZm9yIGNvbnRhaW5lciBsb2dzXG4gICAgaWYgKHN0cmVhbUJ0bikge1xuICAgICAgc3RyZWFtQnRuLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICB9XG5cbiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICAvLyBJbml0aWFsIGxvYWRcbiAgICB1cGRhdGVDb250YWluZXJMb2dzRGlzcGxheSgpO1xuXG4gICAgLy8gU3RhcnQgYXV0by1yZWZyZXNoIGV2ZXJ5IDMgc2Vjb25kc1xuICAgIGxvZ3NJbnRlcnZhbCA9IHNldEludGVydmFsKHVwZGF0ZUNvbnRhaW5lckxvZ3NEaXNwbGF5LCBEQy5QT0xMLkxPR1MpO1xuICB9XG5cbiAgLy8gPT09PT0gRklMRS1CQVNFRCBMT0dTIChmb3IgbmF0aXZlIGFwcHMpID09PT09XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hGaWxlTG9ncyhsb2dQYXRoLCBsaW5lcyA9IDEwMCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IGAvYXBpL3YxL2xvZ3MvZmlsZT9wYXRoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGxvZ1BhdGgpfSZ0YWlsPSR7bGluZXN9YDtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xuICAgICAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQubG9ncykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2dzOiByZXN1bHQubG9ncyxcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHQuY291bnQsXG4gICAgICAgICAgICBsb2dQYXRoOiByZXN1bHQubG9nUGF0aCxcbiAgICAgICAgICAgIHRvdGFsTGluZXM6IHJlc3VsdC50b3RhbExpbmVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogcmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZmV0Y2ggZmlsZSBsb2dzJyB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiByZXN1bHQuZXJyb3IgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGaWxlIGxvZ3MgZmV0Y2ggZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyRmlsZUxvZ0VudHJ5KGxvZykge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc05hbWUgPSAnbG9nLWVudHJ5JztcbiAgICBkaXYuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBmbGV4OyBnYXA6IDEycHg7IHBhZGRpbmc6IDZweCAxMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgZm9udC1zaXplOiAwLjhyZW07IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBmb250LWZhbWlseTogbW9ub3NwYWNlOyc7XG5cbiAgICBjb25zdCB0ZXh0ID0gbG9nLnRleHQ7XG4gICAgbGV0IGxvZ0xldmVsID0gJ0lORk8nO1xuICAgIGxldCBsZXZlbENvbG9yID0gJ3ZhcigtLWZnKSc7XG5cbiAgICBpZiAodGV4dC5tYXRjaCgvRVJST1J8RkFUQUx8Q1JJVElDQUwvaSkpIHtcbiAgICAgIGxvZ0xldmVsID0gJ0VSUk9SJztcbiAgICAgIGxldmVsQ29sb3IgPSAndmFyKC0tYmFkLWZnKSc7XG4gICAgfSBlbHNlIGlmICh0ZXh0Lm1hdGNoKC9XQVJOfFdBUk5JTkcvaSkpIHtcbiAgICAgIGxvZ0xldmVsID0gJ1dBUk4nO1xuICAgICAgbGV2ZWxDb2xvciA9ICcjZjM5YzEyJztcbiAgICB9IGVsc2UgaWYgKHRleHQubWF0Y2goL0RFQlVHL2kpKSB7XG4gICAgICBsb2dMZXZlbCA9ICdERUJVRyc7XG4gICAgICBsZXZlbENvbG9yID0gJ3ZhcigtLW11dGVkKSc7XG4gICAgfVxuXG4gICAgY29uc3QgYmdDb2xvciA9IGxldmVsQ29sb3IgPT09ICd2YXIoLS1iYWQtZmcpJyA/ICd2YXIoLS1iYWQtYmcpJyA6ICd2YXIoLS1vay1iZyknO1xuICAgIGNvbnN0IGxldmVsQmFkZ2UgPSBgPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiAke2JnQ29sb3J9OyBjb2xvcjogJHtsZXZlbENvbG9yfTsgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDAuN3JlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbWluLXdpZHRoOiA1MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+JHtsb2dMZXZlbH08L3NwYW4+YDtcblxuICAgIGRpdi5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleC1zaHJpbms6IDA7XCI+JHtsZXZlbEJhZGdlfTwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7IGNvbG9yOiAke2xldmVsQ29sb3J9OyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcIj4ke2VzY2FwZUh0bWwodGV4dCl9PC9kaXY+XG4gICAgYDtcblxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB1cGRhdGVGaWxlTG9nc0Rpc3BsYXkoKSB7XG4gICAgaWYgKGxvZ3NQYXVzZWQgfHwgIWN1cnJlbnRMb2dQYXRoIHx8ICFmaWxlTG9nc01vZGUpIHJldHVybjtcblxuICAgIGNvbnN0IGxpbmVzID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZy1saW5lcycpLnZhbHVlKTtcbiAgICBjb25zdCBsb2dzQ29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLWNvbnRlbnQnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEZpbGVMb2dzKGN1cnJlbnRMb2dQYXRoLCBsaW5lcyk7XG5cbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiB2YXIoLS1iYWQtZmcpO1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMS4ycmVtOyBtYXJnaW4tYm90dG9tOiA4cHg7XCI+XHUyNkEwXHVGRTBGIEVycm9yPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PiR7ZXNjYXBlSHRtbChyZXN1bHQuZXJyb3IpfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxMnB4OyBwYWRkaW5nOiA4cHggMTBweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iYXNlKTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGZvbnQtc2l6ZTogMC43NXJlbTsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLW11dGVkKTsgcG9zaXRpb246IHN0aWNreTsgdG9wOiAwO1wiPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDogMTtcIj5Mb2cgT3V0cHV0ICgke3Jlc3VsdC5jb3VudH0gb2YgJHtyZXN1bHQudG90YWxMaW5lc30gbGluZXMpPC9zcGFuPlxuICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBpZiAocmVzdWx0LmxvZ3MgJiYgcmVzdWx0LmxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQubG9ncy5mb3JFYWNoKGxvZyA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nRWxlbWVudCA9IHJlbmRlckZpbGVMb2dFbnRyeShsb2cpO1xuICAgICAgICAgIGxvZ3NDb250ZW50LmFwcGVuZENoaWxkKGxvZ0VsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nc0NvbnRlbnQuc2Nyb2xsVG9wID0gbG9nc0NvbnRlbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MICs9IGBcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPlxuICAgICAgICAgICAgTm8gbG9ncyBhdmFpbGFibGUgaW4gdGhpcyBmaWxlXG4gICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nc0NvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tYmFkLWZnKTtcIj5cbiAgICAgICAgICBGYWlsZWQgdG8gZmV0Y2ggbG9nczogJHtlc2NhcGVIdG1sKGVycm9yLm1lc3NhZ2UpfVxuICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5GaWxlTG9nc01vZGFsKGxvZ1BhdGgsIHNlcnZpY2VOYW1lKSB7XG4gICAgY3VycmVudExvZ1BhdGggPSBsb2dQYXRoO1xuICAgIGN1cnJlbnRMb2dTZXJ2aWNlTmFtZSA9IHNlcnZpY2VOYW1lO1xuICAgIGZpbGVMb2dzTW9kZSA9IHRydWU7XG4gICAgY29udGFpbmVyTG9nc01vZGUgPSBmYWxzZTtcbiAgICBsb2dzUGF1c2VkID0gZmFsc2U7XG5cbiAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLW1vZGFsJyk7XG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy10aXRsZScpO1xuICAgIGNvbnN0IHBhdXNlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3MtcGF1c2UnKTtcbiAgICBjb25zdCBzdHJlYW1CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1zdHJlYW0nKTtcblxuICAgIHRpdGxlLnRleHRDb250ZW50ID0gYFx1RDgzRFx1RENDQiAke3NlcnZpY2VOYW1lfSAtIEFwcGxpY2F0aW9uIExvZ3NgO1xuICAgIHBhdXNlQnRuLnRleHRDb250ZW50ID0gJ1x1MjNGOFx1RkUwRiBQYXVzZSc7XG4gICAgcGF1c2VCdG4uY2xhc3NMaXN0LnJlbW92ZSgncGF1c2VkJyk7XG5cbiAgICAvLyBIaWRlIHN0cmVhbSBidXR0b24gZm9yIGZpbGUgbG9ncyAob25seSBhdmFpbGFibGUgZm9yIGNvbnRhaW5lciBsb2dzKVxuICAgIGlmIChzdHJlYW1CdG4pIHtcbiAgICAgIHN0cmVhbUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcblxuICAgIHVwZGF0ZUZpbGVMb2dzRGlzcGxheSgpO1xuICAgIGxvZ3NJbnRlcnZhbCA9IHNldEludGVydmFsKHVwZGF0ZUZpbGVMb2dzRGlzcGxheSwgREMuUE9MTC5MT0dTKTtcbiAgfVxuXG4gIC8vID09PT09IEVWRU5UIExJU1RFTkVSUyA9PT09PVxuXG4gIC8vIEROUyBsb2cgYnV0dG9ucyBcdTIwMTQgZXZlbnQgZGVsZWdhdGlvbiBmb3IgZHluYW1pYyBjYXJkc1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9wJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICBjb25zdCBsb2dzQnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2lkJD1cIi1sb2dzXCJdJyk7XG4gICAgaWYgKCFsb2dzQnRuKSByZXR1cm47XG4gICAgY29uc3QgZG5zSWQgPSBsb2dzQnRuLmlkLnJlcGxhY2UoJy1sb2dzJywgJycpO1xuICAgIGlmICghU0lURS5kbnNTZXJ2ZXJzW2Ruc0lkXSkgcmV0dXJuO1xuICAgIG9wZW5Mb2dzTW9kYWwoZG5zSWQpO1xuICB9KTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1jbG9zZScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlTG9nc01vZGFsKTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBsb2dzUGF1c2VkID0gIWxvZ3NQYXVzZWQ7XG4gICAgY29uc3QgcGF1c2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1wYXVzZScpO1xuXG4gICAgaWYgKGxvZ3NQYXVzZWQpIHtcbiAgICAgIHBhdXNlQnRuLnRleHRDb250ZW50ID0gJ1x1MjVCNlx1RkUwRiBSZXN1bWUnO1xuICAgICAgcGF1c2VCdG4uY2xhc3NMaXN0LmFkZCgncGF1c2VkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdXNlQnRuLnRleHRDb250ZW50ID0gJ1x1MjNGOFx1RkUwRiBQYXVzZSc7XG4gICAgICBwYXVzZUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdwYXVzZWQnKTtcbiAgICAgIHVwZGF0ZUxvZ3NEaXNwbGF5KCk7XG4gICAgfVxuICB9KTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nLWxpbmVzJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICBpZiAoIWxvZ3NQYXVzZWQpIHtcbiAgICAgIHVwZGF0ZUxvZ3NEaXNwbGF5KCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTdHJlYW0gYnV0dG9uIGZvciByZWFsLXRpbWUgU1NFIGxvZ3MgKG9ubHkgd29ya3Mgd2l0aCBjb250YWluZXIgbG9ncylcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ3Mtc3RyZWFtJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGlmICghY29udGFpbmVyTG9nc01vZGUgfHwgIWN1cnJlbnRDb250YWluZXJJZCkge1xuICAgICAgLy8gU3RyZWFtaW5nIG9ubHkgYXZhaWxhYmxlIGZvciBjb250YWluZXIgbG9nc1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmVhbWluZykge1xuICAgICAgc3RvcExvZ1N0cmVhbWluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydExvZ1N0cmVhbWluZyhjdXJyZW50Q29udGFpbmVySWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQ2xvc2UgbW9kYWwgb24gb3V0c2lkZSBjbGlja1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncy1tb2RhbCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmlkID09PSAnbG9ncy1tb2RhbCcpIHtcbiAgICAgIGNsb3NlTG9nc01vZGFsKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDbG9zZSBsb2dzLW1vZGFsIG9uIEVzY2FwZSBrZXlcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dzLW1vZGFsJyk/LmNsYXNzTGlzdC5jb250YWlucygnc2hvdycpKSB7XG4gICAgICAgIGNsb3NlTG9nc01vZGFsKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyA9PT09PSBFWFBPUlRTID09PT09XG4gIHdpbmRvdy5vcGVuQ29udGFpbmVyTG9nc01vZGFsID0gb3BlbkNvbnRhaW5lckxvZ3NNb2RhbDtcbiAgd2luZG93Lm9wZW5GaWxlTG9nc01vZGFsID0gb3BlbkZpbGVMb2dzTW9kYWw7XG4gIHdpbmRvdy5vcGVuTG9nc01vZGFsID0gb3BlbkxvZ3NNb2RhbDtcblxufSkoKTtcbjtcbi8vID09PT09PT09PT0gU0VSVklDRSBNT0RBTCBURU1QTEFURVMgPT09PT09PT09PVxuLy8gSW5qZWN0cyB0aGUgSFRNTCBmb3Igc2VydmljZSBlZGl0LCBkZWxldGUsIGFuZCBhZGQgbW9kYWxzIGludG8gdGhlIERPTS5cbi8vIE11c3QgbG9hZCBiZWZvcmUgc2VydmljZS1jcnVkLmpzIGFuZCBzZXJ2aWNlLWNyZWF0ZS5qcy5cbihmdW5jdGlvbiAoKSB7XG5cbiAgaW5qZWN0TW9kYWwoJ3NlcnZpY2UtZWRpdC1tb2RhbCcsIGBcbiAgPGRpdiBpZD1cInNlcnZpY2UtZWRpdC1tb2RhbFwiIGNsYXNzPVwid2VhdGhlci1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWNvbnRlbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNTAwcHg7IG1heC13aWR0aDogNjAwcHg7XCI+XG4gICAgICA8aDMgaWQ9XCJzZXJ2aWNlLWVkaXQtdGl0bGVcIj5FZGl0IFNlcnZpY2U8L2gzPlxuXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZ3JpZDsgZ2FwOiAxNnB4OyBtYXJnaW4tdG9wOiAxNnB4O1wiPlxuICAgICAgICA8IS0tIFNlcnZpY2UgSW5mbyAtLT5cbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTJweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlci1yYWRpdXM6IDhweDtcIj5cbiAgICAgICAgICA8aW1nIGlkPVwiZWRpdC1zZXJ2aWNlLWxvZ28tcHJldmlld1wiIHNyYz1cIlwiIGFsdD1cIlwiIHN0eWxlPVwid2lkdGg6IDQ4cHg7IGhlaWdodDogNDhweDsgYm9yZGVyLXJhZGl1czogOHB4OyBvYmplY3QtZml0OiBjb250YWluOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZyk7XCIgLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTtcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJlZGl0LXNlcnZpY2UtdXJsLWRpc3BsYXlcIiBjbGFzcz1cInRleHQtbXV0ZWQtc21cIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEaXNwbGF5IE5hbWUgLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImVkaXQtc2VydmljZS1uYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsLWFjY2VudC1zbVwiPlxuICAgICAgICAgICAgRGlzcGxheSBOYW1lXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImVkaXQtc2VydmljZS1uYW1lXCIgY2xhc3M9XCJmb3JtLWlucHV0LW1kXCIgcGxhY2Vob2xkZXI9XCJTZXJ2aWNlIG5hbWUgc2hvd24gb24gZGFzaGJvYXJkXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBTdWJkb21haW4gLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImVkaXQtc3ViZG9tYWluXCIgY2xhc3M9XCJmb3JtLWxhYmVsLWFjY2VudC1zbVwiPlxuICAgICAgICAgICAgU3ViZG9tYWluXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1yb3ctZ2FwLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlZGl0LXN1YmRvbWFpblwiIGNsYXNzPVwiaW5wdXQtZmxleFwiIC8+XG4gICAgICAgICAgICA8c3BhbiBpZD1cImVkaXQtdGxkLXN1ZmZpeFwiIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTtcIj4uaG9tZTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBQb3J0IC0tPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJlZGl0LXBvcnRcIiBjbGFzcz1cImZvcm0tbGFiZWwtYWNjZW50LXNtXCI+XG4gICAgICAgICAgICBQb3J0XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZWRpdC1wb3J0XCIgY2xhc3M9XCJmb3JtLWlucHV0LW1kXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1oaW50LXNtXCI+XG4gICAgICAgICAgICBUaGUgcG9ydCBDYWRkeSB3aWxsIHByb3h5IHRvIChjb250YWluZXIncyBleHBvc2VkIHBvcnQpXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSVAgQWRkcmVzcyAtLT5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZWRpdC1pcFwiIGNsYXNzPVwiZm9ybS1sYWJlbC1hY2NlbnQtc21cIj5cbiAgICAgICAgICAgIElQIEFkZHJlc3NcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZWRpdC1pcFwiIGNsYXNzPVwiZm9ybS1pbnB1dC1tZFwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGFpbHNjYWxlIFByb3RlY3Rpb24gLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OyBwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6IHBvaW50ZXI7XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJlZGl0LXRhaWxzY2FsZS1vbmx5XCIgc3R5bGU9XCJ3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4O1wiIC8+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctNTAwXCI+VGFpbHNjYWxlLU9ubHkgQWNjZXNzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWhpbnRcIj5SZXN0cmljdCB0aGlzIHNlcnZpY2UgdG8gVGFpbHNjYWxlIHVzZXJzIG9ubHk8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gTG9nbyAtLT5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsLWFjY2VudC1zbVwiPlxuICAgICAgICAgICAgU2VydmljZSBMb2dvXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1yb3ctZ2FwLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlZGl0LWxvZ28tdXJsXCIgcGxhY2Vob2xkZXI9XCIvYXNzZXRzL3NlcnZpY2UucG5nIG9yIGh0dHBzOi8vLi4uXCIgY2xhc3M9XCJpbnB1dC1mbGV4XCIgLz5cbiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cInBhZGRpbmc6IDEwcHggMTZweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImVkaXQtbG9nby1maWxlXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAvPlxuICAgICAgICAgICAgICBVcGxvYWRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taGludC1zbVwiPlxuICAgICAgICAgICAgRW50ZXIgYSBVUkwgb3IgdXBsb2FkIGFuIGltYWdlIGZpbGUgKFBORywgSlBHLCBTVkcpXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ2F0ZWdvcnkgLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImVkaXQtc2VydmljZS1jYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1sYWJlbC1hY2NlbnQtc21cIj5cbiAgICAgICAgICAgIENhdGVnb3J5XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8c2VsZWN0IGlkPVwiZWRpdC1zZXJ2aWNlLWNhdGVnb3J5XCIgZGF0YS1yb2xlPVwic2VydmljZS1jYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1pbnB1dC1tZFwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlx1MjAxNCBObyBjYXRlZ29yeSBcdTIwMTQ8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDogMjRweDtcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInNlcnZpY2UtZWRpdC1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInNlcnZpY2UtZWRpdC1zYXZlXCIgY2xhc3M9XCJidG4tYWNjZW50XCI+XG4gICAgICAgICAgU2F2ZSBDaGFuZ2VzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PmApO1xuXG4gIGluamVjdE1vZGFsKCdkZWxldGUtc2VydmljZS1tb2RhbCcsIGBcbiAgPGRpdiBpZD1cImRlbGV0ZS1zZXJ2aWNlLW1vZGFsXCIgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtY29udGVudFwiIHN0eWxlPVwibWluLXdpZHRoOiA0MDBweDsgbWF4LXdpZHRoOiA1MDBweDtcIj5cbiAgICAgIDxoMyBpZD1cImRlbGV0ZS1tb2RhbC10aXRsZVwiIGNsYXNzPVwibWItMTZcIj5EZWxldGUgU2VydmljZTwvaDM+XG5cbiAgICAgIDxkaXYgaWQ9XCJkZWxldGUtbW9kYWwtbWVzc2FnZVwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjBweDsgbGluZS1oZWlnaHQ6IDEuNTtcIj5cbiAgICAgICAgPCEtLSBEeW5hbWljIGNvbnRlbnQgLS0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBpZD1cImRlbGV0ZS1tb2RhbC1jb250YWluZXItaW5mb1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWFyZ2luLWJvdHRvbTogMjBweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlci1yYWRpdXM6IDhweDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDA7IG1hcmdpbi1ib3R0b206IDhweDtcIj5Eb2NrZXIgQ29udGFpbmVyPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJkZWxldGUtbW9kYWwtY29udGFpbmVyLW5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC45cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWJ1dHRvbnNcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1wiPlxuICAgICAgICA8YnV0dG9uIGlkPVwiZGVsZXRlLW1vZGFsLWNhbmNlbFwiIHN0eWxlPVwicGFkZGluZzogMTBweCAyMHB4O1wiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwiZGVsZXRlLW1vZGFsLXJlbW92ZVwiIHN0eWxlPVwicGFkZGluZzogMTBweCAyMHB4OyBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50KSAyMCUsIHRyYW5zcGFyZW50KTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQpOyBjb2xvcjogdmFyKC0tYWNjZW50KTtcIj5cbiAgICAgICAgICBSZW1vdmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gaWQ9XCJkZWxldGUtbW9kYWwtZGVsZXRlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBwYWRkaW5nOiAxMHB4IDIwcHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAjZTc0YzNjIDIwJSwgdHJhbnNwYXJlbnQpOyBib3JkZXItY29sb3I6ICNlNzRjM2M7IGNvbG9yOiAjZTc0YzNjO1wiPlxuICAgICAgICAgIERlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGlkPVwiZGVsZXRlLW1vZGFsLWhlbHBcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi10b3A6IDE2cHg7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tdXRlZCkgMTAlLCB0cmFuc3BhcmVudCk7IGJvcmRlci1yYWRpdXM6IDhweDsgZm9udC1zaXplOiAwLjg1cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpO1wiPlxuICAgICAgICA8ZGl2PjxzdHJvbmc+UmVtb3ZlOjwvc3Ryb25nPiBSZW1vdmUgZnJvbSBkYXNoYm9hcmQgb25seSAoY29udGFpbmVyIGtlZXBzIHJ1bm5pbmcpPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiA2cHg7XCI+PHN0cm9uZz5EZWxldGU6PC9zdHJvbmc+IEZ1bGwgcmVtb3ZhbCAtIHN0b3BzIGNvbnRhaW5lciwgcmVtb3ZlcyBETlMgJiBDYWRkeSBjb25maWc8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5gKTtcblxuICBpbmplY3RNb2RhbCgnYWRkLXNlcnZpY2UtbW9kYWwnLCBgXG4gIDxkaXYgaWQ9XCJhZGQtc2VydmljZS1tb2RhbFwiIGNsYXNzPVwid2VhdGhlci1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3ZWF0aGVyLW1vZGFsLWNvbnRlbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNDIwcHg7IG1heC13aWR0aDogNTIwcHg7XCI+XG4gICAgICA8aDM+QWRkIFNlcnZpY2U8L2gzPlxuXG4gICAgICA8IS0tIFNlcnZpY2UgVHlwZSBUYWJzIC0tPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMnB4OyBtYXJnaW4tYm90dG9tOiAxNnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJnKTsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nOiAzcHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XCI+XG4gICAgICAgIDxsYWJlbCBpZD1cInRhYi1sb2NhbFwiIHN0eWxlPVwiZmxleDogMTsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiA4cHg7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDAuODVyZW07IGZvbnQtd2VpZ2h0OiA1MDA7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB2YXIoLS1iZyk7IHRyYW5zaXRpb246IGFsbCAwLjE1cztcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNlcnZpY2UtdHlwZVwiIHZhbHVlPVwibG9jYWxcIiBpZD1cInNlcnZpY2UtdHlwZS1sb2NhbFwiIGNoZWNrZWQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIC8+XG4gICAgICAgICAgTG9jYWxcbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIGlkPVwidGFiLWV4dGVybmFsXCIgc3R5bGU9XCJmbGV4OiAxOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDhweDsgYm9yZGVyLXJhZGl1czogNnB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtc2l6ZTogMC44NXJlbTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLW11dGVkKTsgdHJhbnNpdGlvbjogYWxsIDAuMTVzO1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic2VydmljZS10eXBlXCIgdmFsdWU9XCJleHRlcm5hbFwiIGlkPVwic2VydmljZS10eXBlLWV4dGVybmFsXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIC8+XG4gICAgICAgICAgRXh0ZXJuYWxcbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gaWQ9XCJzZXJ2aWNlLXR5cGUtZGVzY3JpcHRpb25cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9zcGFuPlxuXG4gICAgICA8IS0tIExPQ0FMIFNFUlZJQ0UgLS0+XG4gICAgICA8ZGl2IGlkPVwibG9jYWwtc2VydmljZS1jb25maWdcIiBzdHlsZT1cImRpc3BsYXk6IGdyaWQ7IGdhcDogMTJweDtcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwic2VydmljZS1uYW1lLWlucHV0XCIgc3R5bGU9XCJmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWJvdHRvbTogNHB4OyBkaXNwbGF5OiBibG9jaztcIj5OYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInNlcnZpY2UtbmFtZS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiZS5nLiwgSmVsbHlmaW5cIiBzdHlsZT1cImZvbnQtc2l6ZTogMXJlbTtcIiAvPlxuICAgICAgICAgIDxkaXYgaWQ9XCJzdWJkb21haW4tcHJldmlld1wiIHN0eWxlPVwiZm9udC1zaXplOiAwLjc1cmVtOyBjb2xvcjogdmFyKC0tYWNjZW50KTsgbWFyZ2luLXRvcDogNHB4OyBtaW4taGVpZ2h0OiAxZW07XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLTJjb2xcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNlcnZpY2UtcG9ydC1pbnB1dFwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjhyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1hcmdpbi1ib3R0b206IDRweDsgZGlzcGxheTogYmxvY2s7XCI+UG9ydDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwic2VydmljZS1wb3J0LWlucHV0XCIgcGxhY2Vob2xkZXI9XCJlLmcuLCA4MDk2XCIgc3R5bGU9XCJmb250LXNpemU6IDFyZW07XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNlcnZpY2UtaXAtaW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW4tYm90dG9tOiA0cHg7IGRpc3BsYXk6IGJsb2NrO1wiPklQIEFkZHJlc3M8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzZXJ2aWNlLWlwLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJBdXRvLWRldGVjdGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDFyZW07XCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWljay1pcC1idXR0b25zXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDRweDsgbWFyZ2luLXRvcDogNHB4OyBmbGV4LXdyYXA6IHdyYXA7XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicXVpY2staXAtYnRuXCIgZGF0YS1pcD1cIjEyNy4wLjAuMVwiIHRpdGxlPVwiTG9jYWxob3N0XCIgc3R5bGU9XCJmb250LXNpemU6IDAuN3JlbTsgcGFkZGluZzogMnB4IDZweDtcIj5sb2NhbGhvc3Q8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJxdWljay1pcC1idG5cIiBkYXRhLWlwPVwiXCIgaWQ9XCJxdWljay1pcC1sYW5cIiB0aXRsZT1cIkxBTiBJUFwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjdyZW07IHBhZGRpbmc6IDJweCA2cHg7XCI+TEFOPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicXVpY2staXAtYnRuXCIgZGF0YS1pcD1cIlwiIGlkPVwicXVpY2staXAtdGFpbHNjYWxlXCIgdGl0bGU9XCJUYWlsc2NhbGUgSVBcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC43cmVtOyBwYWRkaW5nOiAycHggNnB4O1wiPlRhaWxzY2FsZTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gT3B0aW9ucyAoY29sbGFwc2VkIGJ5IGRlZmF1bHQpIC0tPlxuICAgICAgICA8ZGV0YWlscyBpZD1cImxvY2FsLWFkdmFuY2VkLW9wdGlvbnNcIj5cbiAgICAgICAgICA8c3VtbWFyeSBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtc2l6ZTogMC44cmVtOyB1c2VyLXNlbGVjdDogbm9uZTtcIj5PcHRpb25zPC9zdW1tYXJ5PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4OyBkaXNwbGF5OiBncmlkOyBnYXA6IDEwcHg7IGZvbnQtc2l6ZTogMC44cmVtO1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC0yY29sXCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNlcnZpY2Utc3ViZG9tYWluLWlucHV0XCI+U3ViZG9tYWluOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzZXJ2aWNlLXN1YmRvbWFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiYXV0by1kZXJpdmVkIGZyb20gbmFtZVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzZXJ2aWNlLWxvZ28taW5wdXRcIj5Mb2dvIFVSTDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic2VydmljZS1sb2dvLWlucHV0XCIgcGxhY2Vob2xkZXI9XCIvYXNzZXRzL25hbWUucG5nXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiA4cHg7IGFsaWduLWl0ZW1zOiBzdGFydDtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjcmVhdGUtZG5zLXJlY29yZFwiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgICAgICBDcmVhdGUgRE5TIFJlY29yZFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzc2wtdHlwZS1zZWxlY3RcIj5TU0w6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwic3NsLXR5cGUtc2VsZWN0XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjYWRkeS1tYW5hZ2VkXCI+Q2FkZHkgTWFuYWdlZCAoSW50ZXJuYWwpPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGV0c2VuY3J5cHRcIj5MZXQncyBFbmNyeXB0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXhpc3RpbmctY2FcIj5FeGlzdGluZyBDQTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImN1c3RvbS1jYVwiPkN1c3RvbSBDQTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGlkPVwiZG5zLWNvbmZpZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC0yY29sXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkbnMtdHRsLWlucHV0XCI+RE5TIFRUTDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImRucy10dGwtaW5wdXRcIiB2YWx1ZT1cIjMwMFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjYWRkeWZpbGUtcGF0aC1pbnB1dFwiPkNhZGR5ZmlsZSBQYXRoOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImNhZGR5ZmlsZS1wYXRoLWlucHV0XCIgdmFsdWU9XCJDOlxcXFxjYWRkeVxcXFxDYWRkeWZpbGVcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGlkPVwiZXhpc3RpbmctY2EtY29uZmlnXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhpc3RpbmctY2Etc2VsZWN0XCI+RXhpc3RpbmcgQ0E6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtcm93LWdhcFwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJleGlzdGluZy1jYS1zZWxlY3RcIiBzdHlsZT1cImZsZXg6IDE7XCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TG9hZGluZyBDQXMuLi48L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cInJlZnJlc2gtY2FzXCIgc3R5bGU9XCJwYWRkaW5nOiA0cHggOHB4OyBmb250LXNpemU6IDAuNzVyZW07XCI+XFx1ezFGNTA0fTwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGlkPVwiY3VzdG9tLWNhLWNvbmZpZ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNhLW5hbWUtaW5wdXRcIj5DQSBOYW1lOjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiY2EtbmFtZS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiZS5nLiwgc2FtaS1jYVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBpZD1cIm1hbnVhbC10YWlsc2NhbGUtc3RhdHVzXCIgc3R5bGU9XCJwYWRkaW5nOiA2cHggMTBweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAwLjc1cmVtO1wiPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1tdXRlZCk7XCI+Q2hlY2tpbmcgVGFpbHNjYWxlLi4uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgY3Vyc29yOiBwb2ludGVyO1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJtYW51YWwtdGFpbHNjYWxlLW9ubHlcIiAvPlxuICAgICAgICAgICAgICBUYWlsc2NhbGUtT25seSBBY2Nlc3NcbiAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBjdXJzb3I6IHBvaW50ZXI7XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInJlbG9hZC1jYWRkeVwiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgICAgUmVsb2FkIENhZGR5IGFmdGVyIGFkZGluZ1xuICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgPCEtLSBDYXRlZ29yeSAtLT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzZXJ2aWNlLWNhdGVnb3J5LWlucHV0XCIgc3R5bGU9XCJmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWJvdHRvbTogNHB4OyBkaXNwbGF5OiBibG9jaztcIj5DYXRlZ29yeTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJzZXJ2aWNlLWNhdGVnb3J5LWlucHV0XCIgZGF0YS1yb2xlPVwic2VydmljZS1jYXRlZ29yeVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlx1MjAxNCBObyBjYXRlZ29yeSBcdTIwMTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDAuN3JlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDogM3B4O1wiPkdyb3VwIHNlcnZpY2VzIG9uIHRoZSBkYXNoYm9hcmQgYnkgcHVycG9zZSAoTWVkaWEsIFByb2R1Y3Rpdml0eSwgZXRjLik8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBtYXJnaW46IDRweCAwO1wiIC8+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLTJjb2xcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbC1zbVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiZW5hYmxlLWF1dGhcIiAvPlxuICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsLXNtXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJlbmFibGUtY29yc1wiIC8+XG4gICAgICAgICAgICAgICAgICBDT1JTIEhlYWRlcnNcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ1cHN0cmVhbS1wYXRoLWlucHV0XCI+VXBzdHJlYW0gUGF0aDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwidXBzdHJlYW0tcGF0aC1pbnB1dFwiIHZhbHVlPVwiL1wiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJoZWFsdGgtY2hlY2staW5wdXRcIj5IZWFsdGggQ2hlY2s6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImhlYWx0aC1jaGVjay1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiL2hlYWx0aFwiIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRpbWVvdXQtaW5wdXRcIj5UaW1lb3V0IChzKTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJ0aW1lb3V0LWlucHV0XCIgdmFsdWU9XCIzMFwiIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImN1c3RvbS1oZWFkZXJzLWlucHV0XCI+SGVhZGVycyAoSlNPTik6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJjdXN0b20taGVhZGVycy1pbnB1dFwiIHBsYWNlaG9sZGVyPSd7XCJYLUN1c3RvbVwiOiBcInZhbHVlXCJ9JyByb3dzPVwiMlwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjdyZW07XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2RldGFpbHM+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBFWFRFUk5BTCBTRVJWSUNFIC0tPlxuICAgICAgPGRpdiBpZD1cImV4dGVybmFsLXNlcnZpY2UtY29uZmlnXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZ3JpZDsgZ2FwOiAxMnB4O1wiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXh0ZXJuYWwtc2VydmljZS1uYW1lXCIgc3R5bGU9XCJmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWJvdHRvbTogNHB4OyBkaXNwbGF5OiBibG9jaztcIj5OYW1lPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXh0ZXJuYWwtc2VydmljZS1uYW1lXCIgcGxhY2Vob2xkZXI9XCJlLmcuLCBSYWRhcnIgKFNlZWRob3N0KVwiIHN0eWxlPVwiZm9udC1zaXplOiAxcmVtO1wiIC8+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiZXh0ZXJuYWwtc3ViZG9tYWluLXByZXZpZXdcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC43NXJlbTsgY29sb3I6IHZhcigtLWFjY2VudCk7IG1hcmdpbi10b3A6IDRweDsgbWluLWhlaWdodDogMWVtO1wiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHRlcm5hbC1zZXJ2aWNlLXVybFwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjhyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1hcmdpbi1ib3R0b206IDRweDsgZGlzcGxheTogYmxvY2s7XCI+RXh0ZXJuYWwgVVJMPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgaWQ9XCJleHRlcm5hbC1zZXJ2aWNlLXVybFwiIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly91c2VybmFtZS5zZWVkaG9zdC5ldS9yYWRhcnJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMXJlbTtcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBPcHRpb25zIChjb2xsYXBzZWQgYnkgZGVmYXVsdCkgLS0+XG4gICAgICAgICAgPGRldGFpbHMgaWQ9XCJleHRlcm5hbC1hZHZhbmNlZC1vcHRpb25zXCI+XG4gICAgICAgICAgICA8c3VtbWFyeSBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtc2l6ZTogMC44cmVtOyB1c2VyLXNlbGVjdDogbm9uZTtcIj5PcHRpb25zPC9zdW1tYXJ5PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7IGRpc3BsYXk6IGdyaWQ7IGdhcDogMTBweDsgZm9udC1zaXplOiAwLjhyZW07XCI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtMmNvbFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXh0ZXJuYWwtc2VydmljZS1zdWJkb21haW5cIj5TdWJkb21haW46PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXh0ZXJuYWwtc2VydmljZS1zdWJkb21haW5cIiBwbGFjZWhvbGRlcj1cImF1dG8tZGVyaXZlZCBmcm9tIG5hbWVcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJleHRlcm5hbC1kb21haW4tcHJldmlld1wiIHN0eWxlPVwiZm9udC1zaXplOiAwLjdyZW07IGNvbG9yOiB2YXIoLS1hY2NlbnQpO1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4dGVybmFsLXNlcnZpY2UtbG9nb1wiPkxvZ28gVVJMOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImV4dGVybmFsLXNlcnZpY2UtbG9nb1wiIHBsYWNlaG9sZGVyPVwiL2Fzc2V0cy9uYW1lLnBuZ1wiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4dGVybmFsLXNlcnZpY2UtaWNvblwiPkljb24gRW1vamk6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImV4dGVybmFsLXNlcnZpY2UtaWNvblwiIHBsYWNlaG9sZGVyPVwiXFx1ezFGM0FDfVwiIG1heGxlbmd0aD1cIjJcIiBzdHlsZT1cIndpZHRoOiA2MHB4O1wiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBjdXJzb3I6IHBvaW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiZXh0ZXJuYWwtY3JlYXRlLWRuc1wiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgICAgICBDcmVhdGUgRE5TIFJlY29yZFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsgY3Vyc29yOiBwb2ludGVyO1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImV4dGVybmFsLWNyZWF0ZS1jYWRkeVwiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgICAgICBDcmVhdGUgQ2FkZHkgUmV2ZXJzZSBQcm94eVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4dGVybmFsLXByb3h5LWlwXCI+UHJveHkgU2VydmVyIElQOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHRlcm5hbC1wcm94eS1pcFwiIHBsYWNlaG9sZGVyPVwiQXV0by1kZXRlY3RlZFwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsgY3Vyc29yOiBwb2ludGVyO1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImV4dGVybmFsLXByZXNlcnZlLWhvc3RcIiBjaGVja2VkIC8+XG4gICAgICAgICAgICAgICAgUHJlc2VydmUgSG9zdCBIZWFkZXJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJleHRlcm5hbC1mb2xsb3ctcmVkaXJlY3RzXCIgY2hlY2tlZCAvPlxuICAgICAgICAgICAgICAgIEZvbGxvdyBSZWRpcmVjdHNcbiAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICA8IS0tIENhdGVnb3J5IChleHRlcm5hbCkgLS0+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4dGVybmFsLXNlcnZpY2UtY2F0ZWdvcnlcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXJnaW4tYm90dG9tOiA0cHg7IGRpc3BsYXk6IGJsb2NrO1wiPkNhdGVnb3J5PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwiZXh0ZXJuYWwtc2VydmljZS1jYXRlZ29yeVwiIGRhdGEtcm9sZT1cInNlcnZpY2UtY2F0ZWdvcnlcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlx1MjAxNCBObyBjYXRlZ29yeSBcdTIwMTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIndlYXRoZXItbW9kYWwtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDogMTZweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJhZGQtc2VydmljZS1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImFkZC1zZXJ2aWNlLWNyZWF0ZVwiIGNsYXNzPVwiYnRuLWFjY2VudFwiPkNyZWF0ZSBTZXJ2aWNlPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCk7XG5cbn0pKCk7XG47XG4vLyA9PT09PT09PT09IFNFUlZJQ0UgSU5GUkFTVFJVQ1RVUkUgPT09PT09PT09PVxuLy8gQ2FkZHkgY29uZmlnIGdlbmVyYXRpb24sIEROUyByZWNvcmQgY3JlYXRpb24sIGFuZCBzZXJ2aWNlIHJlZ2lzdHJhdGlvbi5cbihmdW5jdGlvbiAoKSB7XG5cbiAgLy8gPT09PT0gTE9BRCBFWElTVElORyBDQXMgPT09PT1cblxuICBhc3luYyBmdW5jdGlvbiBsb2FkRXhpc3RpbmdDQXMoY2FkZHlmaWxlUGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL2NhZGR5L2Nhcz9jYWRkeWZpbGVQYXRoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhZGR5ZmlsZVBhdGgpfWApO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgQ0FzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4aXN0aW5nLWNhLXNlbGVjdCcpO1xuICAgICAgICBzZWxlY3QuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5jYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgc2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiXCI+Tm8gQ0FzIGZvdW5kIGluIENhZGR5ZmlsZTwvb3B0aW9uPic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IGV4aXN0aW5nIENBLi4uPC9vcHRpb24+JztcbiAgICAgICAgICByZXN1bHQuY2FzLmZvckVhY2goY2EgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICBvcHRpb24udmFsdWUgPSBjYS5pZDtcbiAgICAgICAgICAgICAgb3B0aW9uLnRleHRDb250ZW50ID0gY2EuZGlzcGxheU5hbWUgfHwgY2EubmFtZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IGNhO1xuICAgICAgICAgICAgICBvcHRpb24udGV4dENvbnRlbnQgPSBjYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQuZGF0YS5jYXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIENBczonLCBlcnJvcik7XG4gICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhpc3RpbmctY2Etc2VsZWN0Jyk7XG4gICAgICBzZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj5FcnJvciBsb2FkaW5nIENBczwvb3B0aW9uPic7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT0gR0VORVJBVEUgQ0FERFkgQ09ORklHID09PT09XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVDYWRkeUNvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJkb21haW4sXG4gICAgICBwb3J0LFxuICAgICAgaXAsXG4gICAgICBzc2xUeXBlLFxuICAgICAgY2FOYW1lLFxuICAgICAgZXhpc3RpbmdDYSxcbiAgICAgIGVuYWJsZUF1dGgsXG4gICAgICBlbmFibGVDb3JzLFxuICAgICAgY3VzdG9tSGVhZGVycyxcbiAgICAgIHVwc3RyZWFtUGF0aCxcbiAgICAgIGhlYWx0aENoZWNrLFxuICAgICAgdGltZW91dCxcbiAgICAgIHRhaWxzY2FsZU9ubHlcbiAgICB9ID0gY29uZmlnO1xuXG4gICAgbGV0IGNhZGR5Q29uZmlnID0gYCR7YnVpbGREb21haW4oc3ViZG9tYWluKX0ge1xcbmA7XG5cbiAgICAvLyBUYWlsc2NhbGUtb25seSBhY2Nlc3MgcmVzdHJpY3Rpb25cbiAgICBpZiAodGFpbHNjYWxlT25seSkge1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgQGJsb2NrZWQgbm90IHJlbW90ZV9pcCAxMDAuNjQuMC4wLzEwXFxuYDtcbiAgICAgIGNhZGR5Q29uZmlnICs9IGAgIHJlc3BvbmQgQGJsb2NrZWQgXCJBY2Nlc3MgZGVuaWVkLiBUYWlsc2NhbGUgY29ubmVjdGlvbiByZXF1aXJlZC5cIiA0MDNcXG5gO1xuICAgIH1cblxuICAgIC8vIFNTTCBDb25maWd1cmF0aW9uXG4gICAgc3dpdGNoIChzc2xUeXBlKSB7XG4gICAgICBjYXNlICdsZXRzZW5jcnlwdCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2FkZHktbWFuYWdlZCc6XG4gICAgICAgIGNhZGR5Q29uZmlnICs9IGAgIHRscyBpbnRlcm5hbFxcbmA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXhpc3RpbmctY2EnOlxuICAgICAgICBpZiAoZXhpc3RpbmdDYSkge1xuICAgICAgICAgIGNhZGR5Q29uZmlnICs9IGAgIHRscyB7XFxuICAgIGNhICR7ZXhpc3RpbmdDYX1cXG4gIH1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY3VzdG9tLWNhJzpcbiAgICAgICAgaWYgKGNhTmFtZSkge1xuICAgICAgICAgIGNhZGR5Q29uZmlnICs9IGAgIHRscyB7XFxuICAgIGNhICR7Y2FOYW1lfVxcbiAgfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gQXV0aGVudGljYXRpb25cbiAgICBpZiAoZW5hYmxlQXV0aCkge1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgYmFzaWNhdXRoIHtcXG4gICAgYWRtaW4gJDJhJDE0JGhhc2hlZF9wYXNzd29yZF9oZXJlXFxuICB9XFxuYDtcbiAgICB9XG5cbiAgICAvLyBDT1JTIEhlYWRlcnNcbiAgICBpZiAoZW5hYmxlQ29ycykge1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgaGVhZGVyIHtcXG5gO1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4gXCIqXCJcXG5gO1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICBBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIFwiR0VULCBQT1NULCBQVVQsIERFTEVURSwgT1BUSU9OU1wiXFxuYDtcbiAgICAgIGNhZGR5Q29uZmlnICs9IGAgICAgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyBcIkNvbnRlbnQtVHlwZSwgQXV0aG9yaXphdGlvblwiXFxuYDtcbiAgICAgIGNhZGR5Q29uZmlnICs9IGAgIH1cXG5gO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSBIZWFkZXJzXG4gICAgaWYgKGN1c3RvbUhlYWRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBKU09OLnBhcnNlKGN1c3RvbUhlYWRlcnMpO1xuICAgICAgICBjYWRkeUNvbmZpZyArPSBgICBoZWFkZXIge1xcbmA7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNhZGR5Q29uZmlnICs9IGAgICAgJHtrZXl9IFwiJHt2YWx1ZX1cIlxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICBjYWRkeUNvbmZpZyArPSBgICB9XFxuYDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIEpTT04gaW4gY3VzdG9tIGhlYWRlcnMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIZWFsdGggQ2hlY2tcbiAgICBpZiAoaGVhbHRoQ2hlY2spIHtcbiAgICAgIGNhZGR5Q29uZmlnICs9IGAgIGhlYWx0aF91cmkgJHtoZWFsdGhDaGVja31cXG5gO1xuICAgIH1cblxuICAgIC8vIFJldmVyc2UgUHJveHlcbiAgICBjYWRkeUNvbmZpZyArPSBgICByZXZlcnNlX3Byb3h5ICR7aXB9OiR7cG9ydH0ge1xcbmA7XG4gICAgaWYgKHVwc3RyZWFtUGF0aCAmJiB1cHN0cmVhbVBhdGggIT09ICcvJykge1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICByZXdyaXRlICR7dXBzdHJlYW1QYXRofVxcbmA7XG4gICAgfVxuICAgIGlmICh0aW1lb3V0ICYmIHRpbWVvdXQgIT09IDMwKSB7XG4gICAgICBjYWRkeUNvbmZpZyArPSBgICAgIHRyYW5zcG9ydCBodHRwIHtcXG5gO1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICAgIGRpYWxfdGltZW91dCAke3RpbWVvdXR9c1xcbmA7XG4gICAgICBjYWRkeUNvbmZpZyArPSBgICAgICAgcmVzcG9uc2VfaGVhZGVyX3RpbWVvdXQgJHt0aW1lb3V0fXNcXG5gO1xuICAgICAgY2FkZHlDb25maWcgKz0gYCAgICB9XFxuYDtcbiAgICB9XG4gICAgY2FkZHlDb25maWcgKz0gYCAgfVxcbmA7XG5cbiAgICBjYWRkeUNvbmZpZyArPSBgfVxcbmA7XG5cbiAgICByZXR1cm4gY2FkZHlDb25maWc7XG4gIH1cblxuICAvLyA9PT09PSBDUkVBVEUgRE5TIFJFQ09SRCA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURuc1JlY29yZChzdWJkb21haW4sIGlwLCB0dGwgPSBEQy5ERUZBVUxUUy5UVEwpIHtcbiAgICBjb25zdCBkbnNUb2tlbiA9IHdpbmRvdy5nZXRUb2tlbihnZXRQcmltYXJ5RG5zSWQoKSwgJ2FkbWluJyk7XG5cbiAgICBpZiAoIWRuc1Rva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ROUyBhZG1pbiB0b2tlbiBub3QgY29uZmlndXJlZC4gUGxlYXNlIHNldCBpdCBpbiB0aGUgVG9rZW5zIG1lbnUuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZG9tYWluID0gYnVpbGREb21haW4oc3ViZG9tYWluKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvZG5zL3JlY29yZCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgICBpcDogaXAsXG4gICAgICAgIHR0bDogdHRsLFxuICAgICAgICB0b2tlbjogZG5zVG9rZW4sXG4gICAgICAgIHNlcnZlcjogU0lURS5kbnNJcFxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRE5TIEFQSSBFcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9IC0gJHtlcnJvclRleHR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRE5TIEVycm9yOiAke3Jlc3VsdC5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vID09PT09IEFERCBTRVJWSUNFIFRPIENPTkZJRyA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGFkZFNlcnZpY2VUb0NvbmZpZyhzZXJ2aWNlQ29uZmlnKSB7XG4gICAgY29uc3QgbmV3U2VydmljZSA9IHtcbiAgICAgIGlkOiBzZXJ2aWNlQ29uZmlnLnN1YmRvbWFpbixcbiAgICAgIG5hbWU6IHNlcnZpY2VDb25maWcubmFtZSxcbiAgICAgIGxvZ286IHNlcnZpY2VDb25maWcubG9nbyB8fCBgL2Fzc2V0cy8ke3NlcnZpY2VDb25maWcuc3ViZG9tYWlufS5wbmdgXG4gICAgfTtcbiAgICAvLyBGb3J3YXJkIG9wdGlvbmFsIG1ldGFkYXRhIGZpZWxkcyBpZiBwcm92aWRlZFxuICAgIGlmIChzZXJ2aWNlQ29uZmlnLmNhdGVnb3J5KSBuZXdTZXJ2aWNlLmNhdGVnb3J5ID0gc2VydmljZUNvbmZpZy5jYXRlZ29yeTtcbiAgICBpZiAoc2VydmljZUNvbmZpZy5jb250YWluZXJJZCkgbmV3U2VydmljZS5jb250YWluZXJJZCA9IHNlcnZpY2VDb25maWcuY29udGFpbmVySWQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS9zZXJ2aWNlcycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuZXdTZXJ2aWNlKVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgc2VydmljZScpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB3aW5kb3cubG9hZFNlcnZpY2VzKCk7XG4gICAgICB3aW5kb3cuYnVpbGRHcmlkKCk7XG5cbiAgICAgIHJldHVybiBuZXdTZXJ2aWNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYWRkIHNlcnZpY2UgdG8gY29uZmlnOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09IEFERCBUTyBDQUREWUZJTEUgPT09PT1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRUb0NhZGR5ZmlsZShjb25maWcpIHtcbiAgICBjb25zdCBzdWJkb21haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1zdWJkb21haW4taW5wdXQnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgaXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1pcC1pbnB1dCcpLnZhbHVlLnRyaW0oKSB8fCAnbG9jYWxob3N0JztcbiAgICBjb25zdCBwb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtcG9ydC1pbnB1dCcpLnZhbHVlLnRyaW0oKSB8fCAnODAnO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS9zaXRlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZG9tYWluOiBidWlsZERvbWFpbihzdWJkb21haW4pLFxuICAgICAgICB1cHN0cmVhbTogYCR7aXB9OiR7cG9ydH1gLFxuICAgICAgICBjb25maWc6IGNvbmZpZ1xuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8ICFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvciB8fCBgQ2FkZHkgQVBJIEVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vID09PT09IFdJTkRPVyBFWFBPUlRTID09PT09XG5cbiAgd2luZG93LmxvYWRFeGlzdGluZ0NBcyA9IGxvYWRFeGlzdGluZ0NBcztcbiAgd2luZG93LmdlbmVyYXRlQ2FkZHlDb25maWcgPSBnZW5lcmF0ZUNhZGR5Q29uZmlnO1xuICB3aW5kb3cuY3JlYXRlRG5zUmVjb3JkID0gY3JlYXRlRG5zUmVjb3JkO1xuICB3aW5kb3cuYWRkU2VydmljZVRvQ29uZmlnID0gYWRkU2VydmljZVRvQ29uZmlnO1xuICB3aW5kb3cuYWRkVG9DYWRkeWZpbGUgPSBhZGRUb0NhZGR5ZmlsZTtcblxufSkoKTtcbjtcbi8vID09PT09PT09PT0gU0VSVklDRSBDUlVEID09PT09PT09PT1cbi8vIEVkaXQsIGRlbGV0ZSwgYW5kIHVwZGF0ZSBvcGVyYXRpb25zIGZvciBleGlzdGluZyBzZXJ2aWNlcy5cbihmdW5jdGlvbiAoKSB7XG5cbiAgLy8gPT09PT0gU0VSVklDRSBFRElUIE1PREFMID09PT09XG4gIGxldCBjdXJyZW50RWRpdFNlcnZpY2UgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIG9wZW5TZXJ2aWNlRWRpdE1vZGFsKHNlcnZpY2UpIHtcbiAgICBjdXJyZW50RWRpdFNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZWRpdC1tb2RhbCcpO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZWRpdC10aXRsZScpLnRleHRDb250ZW50ID0gYEVkaXQgJHtzZXJ2aWNlLm5hbWV9YDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLW5hbWUnKS52YWx1ZSA9IHNlcnZpY2UubmFtZTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLXVybC1kaXNwbGF5JykudGV4dENvbnRlbnQgPSBzZXJ2aWNlLnVybCB8fCBidWlsZFNlcnZpY2VVcmwoc2VydmljZS5pZCk7XG4gICAgY29uc3QgbG9nb1ByZXZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLWxvZ28tcHJldmlldycpO1xuICAgIGNvbnN0IGxvZ29TcmMgPSBzZXJ2aWNlLmxvZ28gfHwgYC9hc3NldHMvJHtzZXJ2aWNlLmlkfS5wbmdgO1xuICAgIGxvZ29QcmV2aWV3LnNyYyA9IGxvZ29TcmM7XG4gICAgLy8gSGlkZSBicm9rZW4gaW1hZ2VzIGdyYWNlZnVsbHkgaW5zdGVhZCBvZiBzaG93aW5nIGEgYnJva2VuIGljb25cbiAgICBsb2dvUHJldmlldy5vbmVycm9yID0gZnVuY3Rpb24oKSB7IHRoaXMuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfTtcbiAgICBsb2dvUHJldmlldy5vbmxvYWQgPSBmdW5jdGlvbigpIHsgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJyc7IH07XG4gICAgbG9nb1ByZXZpZXcuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LXN1YmRvbWFpbicpLnZhbHVlID0gc2VydmljZS5pZDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1wb3J0JykudmFsdWUgPSBzZXJ2aWNlLnBvcnQgfHwgJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtaXAnKS52YWx1ZSA9IHNlcnZpY2UuaXAgfHwgJ2xvY2FsaG9zdCc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtdGFpbHNjYWxlLW9ubHknKS5jaGVja2VkID0gc2VydmljZS50YWlsc2NhbGVPbmx5IHx8IGZhbHNlO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LWxvZ28tdXJsJykudmFsdWUgPSBzZXJ2aWNlLmxvZ28gfHwgJyc7XG5cbiAgICAvLyBQb3B1bGF0ZSB0aGUgY2F0ZWdvcnkgc2VsZWN0IGZvciB0aGlzIHNlcnZpY2UsIHRoZW4gc2V0IHRoZSBjdXJyZW50IHZhbHVlLlxuICAgIC8vIHBvcHVsYXRlQ2F0ZWdvcnlTZWxlY3RzKCkgdXNlcyBkYXRhLWN1cnJlbnQgc28gd2Ugc2V0IGl0IGZpcnN0LCB0aGVuIGNhbGwuXG4gICAgY29uc3QgY2F0ZWdvcnlTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLWNhdGVnb3J5Jyk7XG4gICAgaWYgKGNhdGVnb3J5U2VsZWN0KSB7XG4gICAgICBjYXRlZ29yeVNlbGVjdC5kYXRhc2V0LmN1cnJlbnQgPSBzZXJ2aWNlLmNhdGVnb3J5IHx8ICcnO1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cucG9wdWxhdGVDYXRlZ29yeVNlbGVjdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2luZG93LnBvcHVsYXRlQ2F0ZWdvcnlTZWxlY3RzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTZXJ2aWNlRWRpdE1vZGFsKCkge1xuICAgIGNsb3NlTW9kYWwoJ3NlcnZpY2UtZWRpdC1tb2RhbCcpO1xuICAgIGN1cnJlbnRFZGl0U2VydmljZSA9IG51bGw7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzYXZlU2VydmljZUNoYW5nZXMoKSB7XG4gICAgaWYgKCFjdXJyZW50RWRpdFNlcnZpY2UpIHJldHVybjtcblxuICAgIGNvbnN0IG5ld1N1YmRvbWFpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LXN1YmRvbWFpbicpLnZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG5ld05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1zZXJ2aWNlLW5hbWUnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbmV3UG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LXBvcnQnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbmV3SXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1pcCcpLnZhbHVlLnRyaW0oKSB8fCAnbG9jYWxob3N0JztcbiAgICBjb25zdCB0YWlsc2NhbGVPbmx5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtdGFpbHNjYWxlLW9ubHknKS5jaGVja2VkO1xuICAgIGNvbnN0IG5ld0xvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1sb2dvLXVybCcpLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBuZXdDYXRlZ29yeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LXNlcnZpY2UtY2F0ZWdvcnknKT8udmFsdWUgfHwgJyc7XG5cbiAgICBpZiAoIW5ld1N1YmRvbWFpbikge1xuICAgICAgc2hvd05vdGlmaWNhdGlvbignU3ViZG9tYWluIGlzIHJlcXVpcmVkJywgJ3dhcm5pbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRTdWJkb21haW4gPSBjdXJyZW50RWRpdFNlcnZpY2UuaWQ7XG4gICAgY29uc3QgY2hhbmdlcyA9IFtdO1xuXG4gICAgaWYgKG5ld1N1YmRvbWFpbiAhPT0gb2xkU3ViZG9tYWluKSBjaGFuZ2VzLnB1c2goJ3N1YmRvbWFpbicpO1xuICAgIGlmIChuZXdOYW1lICYmIG5ld05hbWUgIT09IGN1cnJlbnRFZGl0U2VydmljZS5uYW1lKSBjaGFuZ2VzLnB1c2goJ25hbWUnKTtcbiAgICBpZiAobmV3UG9ydCAmJiBuZXdQb3J0ICE9PSBTdHJpbmcoY3VycmVudEVkaXRTZXJ2aWNlLnBvcnQpKSBjaGFuZ2VzLnB1c2goJ3BvcnQnKTtcbiAgICBpZiAobmV3SXAgIT09IGN1cnJlbnRFZGl0U2VydmljZS5pcCkgY2hhbmdlcy5wdXNoKCdpcCcpO1xuICAgIGlmICh0YWlsc2NhbGVPbmx5ICE9PSAoY3VycmVudEVkaXRTZXJ2aWNlLnRhaWxzY2FsZU9ubHkgfHwgZmFsc2UpKSBjaGFuZ2VzLnB1c2goJ3RhaWxzY2FsZScpO1xuICAgIGlmIChuZXdMb2dvICYmIG5ld0xvZ28gIT09IGN1cnJlbnRFZGl0U2VydmljZS5sb2dvKSBjaGFuZ2VzLnB1c2goJ2xvZ28nKTtcbiAgICBpZiAobmV3Q2F0ZWdvcnkgIT09IChjdXJyZW50RWRpdFNlcnZpY2UuY2F0ZWdvcnkgfHwgJycpKSBjaGFuZ2VzLnB1c2goJ2NhdGVnb3J5Jyk7XG5cbiAgICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNsb3NlU2VydmljZUVkaXRNb2RhbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1lZGl0LXNhdmUnKTtcbiAgICBzYXZlQnRuLnRleHRDb250ZW50ID0gJ1NhdmluZy4uLic7XG4gICAgc2F2ZUJ0bi5kaXNhYmxlZCA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaCgnL2FwaS92MS9zZXJ2aWNlcy91cGRhdGUnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG9sZFN1YmRvbWFpbixcbiAgICAgICAgICBuZXdTdWJkb21haW4sXG4gICAgICAgICAgbmFtZTogbmV3TmFtZSB8fCBjdXJyZW50RWRpdFNlcnZpY2UubmFtZSxcbiAgICAgICAgICBwb3J0OiBuZXdQb3J0IHx8IGN1cnJlbnRFZGl0U2VydmljZS5wb3J0LFxuICAgICAgICAgIGlwOiBuZXdJcCxcbiAgICAgICAgICB0YWlsc2NhbGVPbmx5LFxuICAgICAgICAgIGxvZ286IG5ld0xvZ28gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGNhdGVnb3J5OiBuZXdDYXRlZ29yeVxuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvciB8fCAnRmFpbGVkIHRvIHVwZGF0ZSBzZXJ2aWNlJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBsb2NhbCBBUFBTIGFycmF5IHRvIG1hdGNoXG4gICAgICBjb25zdCBhcHBJbmRleCA9IHdpbmRvdy5BUFBTLmZpbmRJbmRleChhID0+IGEuaWQgPT09IG9sZFN1YmRvbWFpbik7XG4gICAgICBpZiAoYXBwSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHdpbmRvdy5BUFBTW2FwcEluZGV4XSA9IHtcbiAgICAgICAgICAuLi53aW5kb3cuQVBQU1thcHBJbmRleF0sXG4gICAgICAgICAgaWQ6IG5ld1N1YmRvbWFpbixcbiAgICAgICAgICBuYW1lOiBuZXdOYW1lIHx8IHdpbmRvdy5BUFBTW2FwcEluZGV4XS5uYW1lLFxuICAgICAgICAgIHBvcnQ6IG5ld1BvcnQgfHwgd2luZG93LkFQUFNbYXBwSW5kZXhdLnBvcnQsXG4gICAgICAgICAgaXA6IG5ld0lwLFxuICAgICAgICAgIHRhaWxzY2FsZU9ubHksXG4gICAgICAgICAgbG9nbzogbmV3TG9nbyB8fCB3aW5kb3cuQVBQU1thcHBJbmRleF0ubG9nbyxcbiAgICAgICAgICBjYXRlZ29yeTogbmV3Q2F0ZWdvcnkgfHwgdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNsb3NlU2VydmljZUVkaXRNb2RhbCgpO1xuICAgICAgd2luZG93LmJ1aWxkR3JpZCgpO1xuICAgICAgd2luZG93LnJlZnJlc2hBbGwoKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgc2VydmljZSBjaGFuZ2VzOicsIGVycm9yKTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oYEVycm9yIHNhdmluZyBjaGFuZ2VzOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNhdmVCdG4udGV4dENvbnRlbnQgPSAnU2F2ZSBDaGFuZ2VzJztcbiAgICAgIHNhdmVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBMb2dvIGZpbGUgdXBsb2FkIGhhbmRsZXJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtbG9nby1maWxlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGFzeW5jIChlKSA9PiB7XG4gICAgY29uc3QgZmlsZSA9IGUudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmICghZmlsZSkgcmV0dXJuO1xuXG4gICAgaWYgKCFmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ1BsZWFzZSBzZWxlY3QgYW4gaW1hZ2UgZmlsZScsICd3YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhVXJsID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtc2VydmljZS1sb2dvLXByZXZpZXcnKS5zcmMgPSBkYXRhVXJsO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtbG9nby11cmwnKS52YWx1ZSA9IGRhdGFVcmw7XG5cbiAgICAgIGlmIChjdXJyZW50RWRpdFNlcnZpY2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2Fzc2V0cy91cGxvYWQnLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBmaWxlbmFtZTogYCR7Y3VycmVudEVkaXRTZXJ2aWNlLmlkfS5wbmdgLFxuICAgICAgICAgICAgICBkYXRhOiBkYXRhVXJsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LnBhdGgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LWxvZ28tdXJsJykudmFsdWUgPSByZXN1bHQucGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGRhdGEgVVJMXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9KTtcblxuICAvLyBTZXJ2aWNlIGVkaXQgbW9kYWwgZXZlbnQgbGlzdGVuZXJzXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWVkaXQtY2FuY2VsJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2VTZXJ2aWNlRWRpdE1vZGFsKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZWRpdC1zYXZlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2F2ZVNlcnZpY2VDaGFuZ2VzKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZWRpdC1tb2RhbCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmlkID09PSAnc2VydmljZS1lZGl0LW1vZGFsJykgY2xvc2VTZXJ2aWNlRWRpdE1vZGFsKCk7XG4gIH0pO1xuXG4gIC8vID09PT09IERFTEVURSBTRVJWSUNFIE1PREFMID09PT09XG5cbiAgZnVuY3Rpb24gc2hvd0RlbGV0ZU1vZGFsKHNlcnZpY2VOYW1lLCBoYXNDb250YWluZXIsIGNvbnRhaW5lcklkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGUtc2VydmljZS1tb2RhbCcpO1xuICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlLW1vZGFsLXRpdGxlJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZS1tb2RhbC1tZXNzYWdlJyk7XG4gICAgICBjb25zdCBjb250YWluZXJJbmZvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZS1tb2RhbC1jb250YWluZXItaW5mbycpO1xuICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGUtbW9kYWwtY29udGFpbmVyLW5hbWUnKTtcbiAgICAgIGNvbnN0IGhlbHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlLW1vZGFsLWhlbHAnKTtcbiAgICAgIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGUtbW9kYWwtY2FuY2VsJyk7XG4gICAgICBjb25zdCByZW1vdmVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlLW1vZGFsLXJlbW92ZScpO1xuICAgICAgY29uc3QgZGVsZXRlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZS1tb2RhbC1kZWxldGUnKTtcblxuICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSBgRGVsZXRlIFwiJHtzZXJ2aWNlTmFtZX1cImA7XG5cbiAgICAgIGlmIChoYXNDb250YWluZXIpIHtcbiAgICAgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnVGhpcyBzZXJ2aWNlIGhhcyBhbiBhc3NvY2lhdGVkIERvY2tlciBjb250YWluZXIuPGJyPkNob29zZSBob3cgdG8gcHJvY2VlZDonO1xuICAgICAgICBjb250YWluZXJJbmZvLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBjb250YWluZXJOYW1lLnRleHRDb250ZW50ID0gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZD8uc2xpY2UoMCwgMTIpIHx8ICdVbmtub3duJ31gO1xuICAgICAgICBoZWxwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBkZWxldGVCdG4uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlLnRleHRDb250ZW50ID0gJ1JlbW92ZSB0aGlzIHNlcnZpY2UgZnJvbSB0aGUgZGFzaGJvYXJkPyc7XG4gICAgICAgIGNvbnRhaW5lckluZm8uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgaGVscC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkZWxldGVCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgbW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xuICAgICAgICBjYW5jZWxCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDYW5jZWwpO1xuICAgICAgICByZW1vdmVCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVSZW1vdmUpO1xuICAgICAgICBkZWxldGVCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVEZWxldGUpO1xuICAgICAgICBtb2RhbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUJhY2tkcm9wKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHsgY2xlYW51cCgpOyByZXNvbHZlKG51bGwpOyB9O1xuICAgICAgY29uc3QgaGFuZGxlUmVtb3ZlID0gKCkgPT4geyBjbGVhbnVwKCk7IHJlc29sdmUoZmFsc2UpOyB9O1xuICAgICAgY29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4geyBjbGVhbnVwKCk7IHJlc29sdmUodHJ1ZSk7IH07XG4gICAgICBjb25zdCBoYW5kbGVCYWNrZHJvcCA9IChlKSA9PiB7IGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIHsgY2xlYW51cCgpOyByZXNvbHZlKG51bGwpOyB9IH07XG5cbiAgICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNhbmNlbCk7XG4gICAgICByZW1vdmVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVSZW1vdmUpO1xuICAgICAgZGVsZXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlRGVsZXRlKTtcbiAgICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQmFja2Ryb3ApO1xuXG4gICAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PSBVUERBVEUgQ09OVEFJTkVSID09PT09XG5cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGNvbnRhaW5lcklkLCBzZXJ2aWNlTmFtZSwgc2VydmljZUlkKSB7XG4gICAgY29uc3QgdXBkYXRlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHVwZGF0ZS1idG4tJHtzZXJ2aWNlSWR9YCk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gdXBkYXRlQnRuPy50ZXh0Q29udGVudDtcblxuICAgIGlmICghY29uZmlybShgVXBkYXRlICR7c2VydmljZU5hbWV9IHRvIHRoZSBsYXRlc3QgdmVyc2lvbj9cXG5cXG5UaGlzIHdpbGw6XFxuMS4gUHVsbCB0aGUgbGF0ZXN0IGltYWdlXFxuMi4gU3RvcCB0aGUgY29udGFpbmVyXFxuMy4gUmVjcmVhdGUgd2l0aCBzYW1lIHNldHRpbmdzXFxuXFxuVGhlIHNlcnZpY2Ugd2lsbCBiZSBicmllZmx5IHVuYXZhaWxhYmxlLmApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh1cGRhdGVCdG4pIHtcbiAgICAgICAgdXBkYXRlQnRuLnRleHRDb250ZW50ID0gJ1xcdXsxRjUwNH0nO1xuICAgICAgICB1cGRhdGVCdG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB1cGRhdGVCdG4udGl0bGUgPSAnVXBkYXRpbmcuLi4nO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKGAvYXBpL3YxL2NvbnRhaW5lcnMvJHtjb250YWluZXJJZH0vdXBkYXRlYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2UgPSB3aW5kb3cuQVBQUy5maW5kKGFwcCA9PiBhcHAuaWQgPT09IHNlcnZpY2VJZCk7XG4gICAgICAgIGlmIChzZXJ2aWNlICYmIHJlc3VsdC5uZXdDb250YWluZXJJZCkge1xuICAgICAgICAgIHNlcnZpY2UuY29udGFpbmVySWQgPSByZXN1bHQubmV3Q29udGFpbmVySWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBkYXRlQnRuKSB7XG4gICAgICAgICAgdXBkYXRlQnRuLnRleHRDb250ZW50ID0gJ1xcdXsyNzA1fSc7XG4gICAgICAgICAgdXBkYXRlQnRuLnRpdGxlID0gJ1VwZGF0ZWQgc3VjY2Vzc2Z1bGx5ISc7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVCdG4udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7XG4gICAgICAgICAgICB1cGRhdGVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHVwZGF0ZUJ0bi50aXRsZSA9ICdVcGRhdGUgY29udGFpbmVyIHRvIGxhdGVzdCB2ZXJzaW9uJztcbiAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gd2luZG93LnJlZnJlc2hBbGwoKSwgMjAwMCk7XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24oYCR7c2VydmljZU5hbWV9IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IWAsICdzdWNjZXNzJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yIHx8ICdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VwZGF0ZSBlcnJvcjonLCBlcnJvcik7XG5cbiAgICAgIGlmICh1cGRhdGVCdG4pIHtcbiAgICAgICAgdXBkYXRlQnRuLnRleHRDb250ZW50ID0gJ1xcdXsyNzRDfSc7XG4gICAgICAgIHVwZGF0ZUJ0bi50aXRsZSA9ICdVcGRhdGUgZmFpbGVkJztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlQnRuLnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0O1xuICAgICAgICAgIHVwZGF0ZUJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHVwZGF0ZUJ0bi50aXRsZSA9ICdVcGRhdGUgY29udGFpbmVyIHRvIGxhdGVzdCB2ZXJzaW9uJztcbiAgICAgICAgfSwgMzAwMCk7XG4gICAgICB9XG5cbiAgICAgIHNob3dOb3RpZmljYXRpb24oYEZhaWxlZCB0byB1cGRhdGUgJHtzZXJ2aWNlTmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PSBERUxFVEUgU0VSVklDRSA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVNlcnZpY2Uoc2VydmljZUlkLCBzZXJ2aWNlTmFtZSkge1xuICAgIGNvbnN0IHNlcnZpY2UgPSB3aW5kb3cuQVBQUy5maW5kKGFwcCA9PiBhcHAuaWQgPT09IHNlcnZpY2VJZCk7XG4gICAgY29uc3QgZG9tYWluID0gc2VydmljZSA/IGJ1aWxkRG9tYWluKHNlcnZpY2UuaWQpIDogbnVsbDtcbiAgICBjb25zdCBoYXNDb250YWluZXIgPSBzZXJ2aWNlPy5jb250YWluZXJJZDtcblxuICAgIGNvbnN0IGRlbGV0ZUNvbnRhaW5lciA9IGF3YWl0IHNob3dEZWxldGVNb2RhbChzZXJ2aWNlTmFtZSB8fCBzZXJ2aWNlSWQsIGhhc0NvbnRhaW5lciwgc2VydmljZT8uY29udGFpbmVySWQpO1xuXG4gICAgaWYgKGRlbGV0ZUNvbnRhaW5lciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuOyAvLyBVc2VyIGNhbmNlbGxlZFxuICAgIH1cblxuICAgIGxldCByZXN1bHRzID0ge1xuICAgICAgZGFzaGJvYXJkOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5lcjogbnVsbCxcbiAgICAgIGRuczogbnVsbCxcbiAgICAgIGNhZGR5OiBudWxsLFxuICAgICAgc2VydmljZTogbnVsbFxuICAgIH07XG5cbiAgICAvLyBGdWxsIHJlbW92YWwgd2l0aCBjb250YWluZXJcbiAgICBpZiAoZGVsZXRlQ29udGFpbmVyICYmIGhhc0NvbnRhaW5lcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgY29udGFpbmVySWQ6IHNlcnZpY2UuY29udGFpbmVySWQsXG4gICAgICAgICAgc3ViZG9tYWluOiBzZXJ2aWNlLmlkLFxuICAgICAgICAgIGlwOiBzZXJ2aWNlLmlwIHx8ICdsb2NhbGhvc3QnLFxuICAgICAgICAgIGRlbGV0ZUNvbnRhaW5lcjogJ3RydWUnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VjdXJlRmV0Y2goYC9hcGkvdjEvYXBwcy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXJ2aWNlLmlkKX0/JHtwYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnREVMRVRFJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3VsdHMgPSB7IC4uLnJlc3VsdHMsIC4uLnJlc3VsdC5yZXN1bHRzLCBkYXNoYm9hcmQ6IGZhbHNlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignQXBwIHJlbW92YWwgZmFpbGVkOicsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcCByZW1vdmFsIGVycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlbGV0ZUNvbnRhaW5lciAmJiBkb21haW4pIHtcbiAgICAgIC8vIEZhbGxiYWNrIGZvciBtYW51YWxseSBhZGRlZCBzZXJ2aWNlc1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2VydmljZUlQID0gc2VydmljZT8uaXAgfHwgJ2xvY2FsaG9zdCc7XG4gICAgICAgIGNvbnN0IGRuc1Jlc3BvbnNlID0gYXdhaXQgc2VjdXJlRmV0Y2goYC9hcGkvdjEvZG5zL3JlY29yZD9kb21haW49JHtlbmNvZGVVUklDb21wb25lbnQoZG9tYWluKX0mdHlwZT1BJmlwQWRkcmVzcz0ke2VuY29kZVVSSUNvbXBvbmVudChzZXJ2aWNlSVApfSZzZXJ2ZXI9JHtTSVRFLmRuc0lwfWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkbnNSZXN1bHQgPSBhd2FpdCBkbnNSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJlc3VsdHMuZG5zID0gZG5zUmVzdWx0LnN1Y2Nlc3MgPyAnZGVsZXRlZCcgOiAoZG5zUmVzdWx0LmVycm9yIHx8ICdmYWlsZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVzdWx0cy5kbnMgPSBlLm1lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhZGR5UmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaChgL2FwaS92MS9zaXRlLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGRvbWFpbil9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURSdcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNhZGR5UmVzdWx0ID0gYXdhaXQgY2FkZHlSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJlc3VsdHMuY2FkZHkgPSAoY2FkZHlSZXN1bHQuc3VjY2VzcyB8fCAoY2FkZHlSZXN1bHQuZXJyb3IgJiYgY2FkZHlSZXN1bHQuZXJyb3IuaW5jbHVkZXMoJ25vdCBmb3VuZCcpKSkgPyAncmVtb3ZlZCcgOiAoY2FkZHlSZXN1bHQuZXJyb3IgfHwgJ2ZhaWxlZCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXN1bHRzLmNhZGR5ID0gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmcm9tIEFQUFMgYXJyYXlcbiAgICBjb25zdCBpbmRleCA9IHdpbmRvdy5BUFBTLmZpbmRJbmRleChhcHAgPT4gYXBwLmlkID09PSBzZXJ2aWNlSWQpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB3aW5kb3cuQVBQUy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmVzdWx0cy5kYXNoYm9hcmQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsU3RvcmFnZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXN0b21BcHBzID0gc2FmZUdldEpTT04oJ2N1c3RvbS1hcHBzJywgW10pO1xuICAgICAgY29uc3QgbG9jYWxJbmRleCA9IGN1c3RvbUFwcHMuZmluZEluZGV4KGFwcCA9PiBhcHAuaWQgPT09IHNlcnZpY2VJZCk7XG4gICAgICBpZiAobG9jYWxJbmRleCA+IC0xKSB7XG4gICAgICAgIGN1c3RvbUFwcHMuc3BsaWNlKGxvY2FsSW5kZXgsIDEpO1xuICAgICAgICBzYWZlU2V0KCdjdXN0b20tYXBwcycsIEpTT04uc3RyaW5naWZ5KGN1c3RvbUFwcHMpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZ25vcmUgbG9jYWxTdG9yYWdlIGVycm9yc1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmcm9tIHNlcnZpY2VzLmpzb24gdmlhIEFQSVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXJ2aWNlUmVzcG9uc2UgPSBhd2FpdCBzZWN1cmVGZXRjaChgL2FwaS92MS9zZXJ2aWNlcy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXJ2aWNlSWQpfWAsIHtcbiAgICAgICAgbWV0aG9kOiAnREVMRVRFJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXJ2aWNlUmVzdWx0ID0gYXdhaXQgc2VydmljZVJlc3BvbnNlLmpzb24oKTtcbiAgICAgIHJlc3VsdHMuc2VydmljZSA9IHNlcnZpY2VSZXN1bHQuc3VjY2VzcyA/ICdyZW1vdmVkJyA6IChzZXJ2aWNlUmVzdWx0LmVycm9yIHx8ICdmYWlsZWQnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXN1bHRzLnNlcnZpY2UgPSBlLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgd2luZG93LmJ1aWxkR3JpZCgpO1xuICAgIHdpbmRvdy5yZWZyZXNoQWxsKCk7XG5cbiAgICAvLyBPbmx5IHNob3cgYWxlcnQgaWYgdGhlcmUgYXJlIGFjdHVhbCBlcnJvcnNcbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgbGV0IGVycm9yTWVzc2FnZXMgPSBbXTtcblxuICAgIGlmICghcmVzdWx0cy5kYXNoYm9hcmQpIHtcbiAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICBlcnJvck1lc3NhZ2VzLnB1c2goJ1xcdXsyNzE3fSBGYWlsZWQgdG8gcmVtb3ZlIGZyb20gZGFzaGJvYXJkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VjY2Vzc1N0YXRlcyA9IFsncmVtb3ZlZCcsICdhbHJlYWR5IHJlbW92ZWQnLCAnbm90IGZvdW5kJywgJ2RlbGV0ZWQnLCAna2VwdCAodXNlciBjaG9pY2UpJywgJ3NraXBwZWQnLCAnbm8gc3VjaCByZWNvcmQnLCAnZG9lcyBub3QgZXhpc3QnXTtcbiAgICBjb25zdCBpc1N1Y2Nlc3MgPSAodmFsKSA9PiAhdmFsIHx8IHN1Y2Nlc3NTdGF0ZXMuc29tZShzID0+IHZhbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKHJlc3VsdHMuY29udGFpbmVyICYmICFpc1N1Y2Nlc3MocmVzdWx0cy5jb250YWluZXIpKSB7XG4gICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBcXHV7MjZBMH0gQ29udGFpbmVyOiAke3Jlc3VsdHMuY29udGFpbmVyfWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0cy5kbnMgJiYgIWlzU3VjY2VzcyhyZXN1bHRzLmRucykpIHtcbiAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICBlcnJvck1lc3NhZ2VzLnB1c2goYFxcdXsyNkEwfSBETlMgUmVjb3JkOiAke3Jlc3VsdHMuZG5zfWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0cy5jYWRkeSAmJiAhaXNTdWNjZXNzKHJlc3VsdHMuY2FkZHkpKSB7XG4gICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBcXHV7MjZBMH0gQ2FkZHkgQ29uZmlnOiAke3Jlc3VsdHMuY2FkZHl9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHRzLnNlcnZpY2UgJiYgIWlzU3VjY2VzcyhyZXN1bHRzLnNlcnZpY2UpKSB7XG4gICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBcXHV7MjZBMH0gU2VydmljZSBGaWxlOiAke3Jlc3VsdHMuc2VydmljZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKGBFcnJvciBkZWxldGluZyBcIiR7c2VydmljZU5hbWUgfHwgc2VydmljZUlkfVwiOiAke2Vycm9yTWVzc2FnZXMuam9pbignLCAnKX1gLCAnZXJyb3InLCA2MDAwKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PSBXSU5ET1cgRVhQT1JUUyA9PT09PVxuXG4gIHdpbmRvdy5vcGVuU2VydmljZUVkaXRNb2RhbCA9IG9wZW5TZXJ2aWNlRWRpdE1vZGFsO1xuICB3aW5kb3cuc2hvd0RlbGV0ZU1vZGFsID0gc2hvd0RlbGV0ZU1vZGFsO1xuICB3aW5kb3cudXBkYXRlQ29udGFpbmVyID0gdXBkYXRlQ29udGFpbmVyO1xuICB3aW5kb3cuZGVsZXRlU2VydmljZSA9IGRlbGV0ZVNlcnZpY2U7XG5cbn0pKCk7XG47XG4vLyA9PT09PT09PT09IFNFUlZJQ0UgQ1JFQVRJT04gPT09PT09PT09PVxuLy8gQWRkIHNlcnZpY2UgbW9kYWwsIGxvY2FsL2V4dGVybmFsIHNlcnZpY2UgY3JlYXRpb24gZmxvd3MsIGFuZCBldmVudCB3aXJpbmcuXG4oZnVuY3Rpb24gKCkge1xuXG4gIC8vID09PT09IFNVQkRPTUFJTiBBVVRPLURFUklWRSA9PT09PVxuXG4gIGZ1bmN0aW9uIGRlcml2ZVN1YmRvbWFpbihuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJykucmVwbGFjZSgvW15hLXowLTktXS9nLCAnJykucmVwbGFjZSgvLSsvZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTbWFydFNzbERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIFNJVEUuZGVmYXVsdHM/LnNzbFR5cGUgfHwgKFNJVEUuY29uZmlndXJhdGlvblR5cGUgPT09ICdwdWJsaWMnID8gJ2xldHNlbmNyeXB0JyA6ICdjYWRkeS1tYW5hZ2VkJyk7XG4gIH1cblxuICAvLyA9PT09PSBTRVJWSUNFIFBSRVZJRVcgPT09PT1cblxuICBmdW5jdGlvbiB1cGRhdGVTZXJ2aWNlUHJldmlldygpIHtcbiAgICBjb25zdCBzdWJkb21haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1zdWJkb21haW4taW5wdXQnKS52YWx1ZSB8fCAnc3ViZG9tYWluJztcbiAgICBjb25zdCBpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWlwLWlucHV0JykudmFsdWUgfHwgUVVJQ0tfSVBTLmxhbiB8fCAnbG9jYWxob3N0JztcbiAgICBjb25zdCBwb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtcG9ydC1pbnB1dCcpLnZhbHVlIHx8IERDLkRFRkFVTFRTLlNFUlZJQ0VfUE9SVDtcbiAgICBjb25zdCBzc2xUeXBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NzbC10eXBlLXNlbGVjdCcpLnZhbHVlO1xuICAgIGNvbnN0IGNhTmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYS1uYW1lLWlucHV0JykudmFsdWUgfHwgJ3NhbWktY2EnO1xuICAgIGNvbnN0IGV4aXN0aW5nQ2EgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhpc3RpbmctY2Etc2VsZWN0JykudmFsdWU7XG4gICAgY29uc3QgZW5hYmxlQXV0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtYXV0aCcpLmNoZWNrZWQ7XG4gICAgY29uc3QgZW5hYmxlQ29ycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtY29ycycpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b20taGVhZGVycy1pbnB1dCcpLnZhbHVlO1xuICAgIGNvbnN0IHVwc3RyZWFtUGF0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cHN0cmVhbS1wYXRoLWlucHV0JykudmFsdWUgfHwgJy8nO1xuICAgIGNvbnN0IGhlYWx0aENoZWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWx0aC1jaGVjay1pbnB1dCcpLnZhbHVlO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZW91dC1pbnB1dCcpLnZhbHVlIHx8IDMwO1xuXG4gICAgY29uc3QgZG5zUHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkbnMtcHJldmlldycpO1xuICAgIGlmIChkbnNQcmV2aWV3KSBkbnNQcmV2aWV3LnRleHRDb250ZW50ID0gYCR7YnVpbGREb21haW4oc3ViZG9tYWluKX0gXFx1MjE5MiAke2lwfWA7XG5cbiAgICBjb25zdCB1cmxQcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybC1wcmV2aWV3Jyk7XG4gICAgaWYgKHVybFByZXZpZXcpIHVybFByZXZpZXcudGV4dENvbnRlbnQgPSBidWlsZFNlcnZpY2VVcmwoc3ViZG9tYWluKTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIHN1YmRvbWFpbiwgcG9ydCwgaXAsIHNzbFR5cGUsIGNhTmFtZSwgZXhpc3RpbmdDYSxcbiAgICAgIGVuYWJsZUF1dGgsIGVuYWJsZUNvcnMsIGN1c3RvbUhlYWRlcnMsIHVwc3RyZWFtUGF0aCwgaGVhbHRoQ2hlY2ssIHRpbWVvdXRcbiAgICB9O1xuXG4gICAgY29uc3QgY2FkZHlDb25maWcgPSB3aW5kb3cuZ2VuZXJhdGVDYWRkeUNvbmZpZyhjb25maWcpO1xuICAgIGNvbnN0IGNvbmZpZ1ByZXZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FkZHktY29uZmlnLXByZXZpZXcnKTtcbiAgICBpZiAoY29uZmlnUHJldmlldykgY29uZmlnUHJldmlldy52YWx1ZSA9IGNhZGR5Q29uZmlnO1xuICB9XG5cbiAgLy8gPT09PT0gUVVJQ0sgSVAgQ09ORklHVVJBVElPTiA9PT09PVxuXG4gIGNvbnN0IFFVSUNLX0lQUyA9IHtcbiAgICBsb2NhbGhvc3Q6ICcxMjcuMC4wLjEnLFxuICAgIGxhbjogJycsXG4gICAgdGFpbHNjYWxlOiAnJ1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGRldGVjdE5ldHdvcmtJUHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvdjEvbmV0d29yay9pcHMnLCB7XG4gICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgyMDAwKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgaWYgKGRhdGEubGFuKSBRVUlDS19JUFMubGFuID0gZGF0YS5sYW47XG4gICAgICAgIGlmIChkYXRhLnRhaWxzY2FsZSkgUVVJQ0tfSVBTLnRhaWxzY2FsZSA9IGRhdGEudGFpbHNjYWxlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEFQSSBub3QgYXZhaWxhYmxlXG4gICAgfVxuXG4gICAgY29uc3QgbGFuQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1aWNrLWlwLWxhbicpO1xuICAgIGNvbnN0IHRzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1aWNrLWlwLXRhaWxzY2FsZScpO1xuICAgIGlmIChsYW5CdG4pIHtcbiAgICAgIGlmIChRVUlDS19JUFMubGFuKSB7XG4gICAgICAgIGxhbkJ0bi5kYXRhc2V0LmlwID0gUVVJQ0tfSVBTLmxhbjtcbiAgICAgICAgbGFuQnRuLnRleHRDb250ZW50ID0gYExBTiAoJHtRVUlDS19JUFMubGFufSlgO1xuICAgICAgICBsYW5CdG4udGl0bGUgPSBgTEFOIElQOiAke1FVSUNLX0lQUy5sYW59YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhbkJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHNCdG4pIHtcbiAgICAgIGlmIChRVUlDS19JUFMudGFpbHNjYWxlKSB7XG4gICAgICAgIHRzQnRuLmRhdGFzZXQuaXAgPSBRVUlDS19JUFMudGFpbHNjYWxlO1xuICAgICAgICB0c0J0bi50ZXh0Q29udGVudCA9IGBUYWlsc2NhbGUgKCR7UVVJQ0tfSVBTLnRhaWxzY2FsZX0pYDtcbiAgICAgICAgdHNCdG4udGl0bGUgPSBgVGFpbHNjYWxlIElQOiAke1FVSUNLX0lQUy50YWlsc2NhbGV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRzQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1pcC1pbnB1dCcpO1xuICAgIGlmIChpcElucHV0ICYmICFpcElucHV0LnZhbHVlICYmIFFVSUNLX0lQUy5sYW4pIGlwSW5wdXQudmFsdWUgPSBRVUlDS19JUFMubGFuO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdFF1aWNrSVBCdXR0b25zKCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xdWljay1pcC1idG4nKS5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlwID0gYnRuLmRhdGFzZXQuaXA7XG4gICAgICAgIGlmIChpcCkge1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWlwLWlucHV0JykudmFsdWUgPSBpcDtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucXVpY2staXAtYnRuJykuZm9yRWFjaChiID0+IGIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgICB1cGRhdGVTZXJ2aWNlUHJldmlldygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWlwLWlucHV0Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJUCA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnF1aWNrLWlwLWJ0bicpLmZvckVhY2goYnRuID0+IHtcbiAgICAgICAgYnRuLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIGJ0bi5kYXRhc2V0LmlwID09PSBjdXJyZW50SVApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PSBBREQgU0VSVklDRSBNT0RBTCA9PT09PVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5BZGRTZXJ2aWNlTW9kYWwoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRkLXNlcnZpY2UtbW9kYWwnKTtcbiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICBjb25zdCBtb2RhbENvbnRlbnQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcud2VhdGhlci1tb2RhbC1jb250ZW50Jyk7XG4gICAgaWYgKG1vZGFsQ29udGVudCkgbW9kYWxDb250ZW50LnNjcm9sbFRvcCA9IDA7XG5cbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cbiAgICAvLyBTZXQgc21hcnQgU1NMIGRlZmF1bHRcbiAgICBjb25zdCBzc2xTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3NsLXR5cGUtc2VsZWN0Jyk7XG4gICAgaWYgKHNzbFNlbGVjdCkgc3NsU2VsZWN0LnZhbHVlID0gZ2V0U21hcnRTc2xEZWZhdWx0KCk7XG5cbiAgICBhd2FpdCBkZXRlY3ROZXR3b3JrSVBzKCk7XG5cbiAgICBjb25zdCBjYWRkeWZpbGVQYXRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhZGR5ZmlsZS1wYXRoLWlucHV0JykudmFsdWUgfHwgREMuREVGQVVMVFMuQ0FERFlGSUxFO1xuICAgIGF3YWl0IHdpbmRvdy5sb2FkRXhpc3RpbmdDQXMoY2FkZHlmaWxlUGF0aCk7XG5cbiAgICAvLyBDaGVjayBUYWlsc2NhbGUgc3RhdHVzXG4gICAgY29uc3QgdGFpbHNjYWxlU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hbnVhbC10YWlsc2NhbGUtc3RhdHVzJyk7XG4gICAgY29uc3QgdGFpbHNjYWxlQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFudWFsLXRhaWxzY2FsZS1vbmx5Jyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvdjEvdGFpbHNjYWxlL3N0YXR1cycpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MgJiYgZGF0YS5pbnN0YWxsZWQgJiYgZGF0YS5jb25uZWN0ZWQpIHtcbiAgICAgICAgdGFpbHNjYWxlU3RhdHVzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjNGNhZjUwO1wiPlxcdTI3MTMgQ29ubmVjdGVkPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWxlZnQ6IDZweDtcIj4ke2RhdGEuc2VsZj8uaG9zdG5hbWV9ICgke2RhdGEuc2VsZj8uaXB9KTwvc3Bhbj5cbiAgICAgICAgYDtcbiAgICAgICAgdGFpbHNjYWxlQ2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5pbnN0YWxsZWQpIHtcbiAgICAgICAgdGFpbHNjYWxlU3RhdHVzLmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT1cImNvbG9yOiAjZmY5ODAwO1wiPlxcdTI2QTAgTm90IGNvbm5lY3RlZDwvc3Bhbj5gO1xuICAgICAgICB0YWlsc2NhbGVDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWlsc2NhbGVTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTtcIj5Ob3QgYXZhaWxhYmxlPC9zcGFuPmA7XG4gICAgICAgIHRhaWxzY2FsZUNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0YWlsc2NhbGVTdGF0dXMuaW5uZXJIVE1MID0gYDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW11dGVkKTtcIj5Db3VsZCBub3QgY2hlY2s8L3NwYW4+YDtcbiAgICAgIHRhaWxzY2FsZUNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGFpbHNjYWxlQ2hlY2tib3guY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgdXBkYXRlU2VydmljZVByZXZpZXcoKTtcbiAgfVxuXG4gIC8vID09PT09IFNFUlZJQ0UgVFlQRSBTV0lUQ0hJTkcgKFRBQiBTVFlMRSkgPT09PT1cblxuICBmdW5jdGlvbiBzZXR1cFNlcnZpY2VUeXBlU3dpdGNoaW5nKCkge1xuICAgIGNvbnN0IGxvY2FsUmFkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS10eXBlLWxvY2FsJyk7XG4gICAgY29uc3QgZXh0ZXJuYWxSYWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLXR5cGUtZXh0ZXJuYWwnKTtcbiAgICBjb25zdCBsb2NhbENvbmZpZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhbC1zZXJ2aWNlLWNvbmZpZycpO1xuICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXNlcnZpY2UtY29uZmlnJyk7XG4gICAgY29uc3QgdGFiTG9jYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWxvY2FsJyk7XG4gICAgY29uc3QgdGFiRXh0ZXJuYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWV4dGVybmFsJyk7XG5cbiAgICBmdW5jdGlvbiBzd2l0Y2hTZXJ2aWNlVHlwZSgpIHtcbiAgICAgIGlmIChsb2NhbFJhZGlvLmNoZWNrZWQpIHtcbiAgICAgICAgbG9jYWxDb25maWcuc3R5bGUuZGlzcGxheSA9ICdncmlkJztcbiAgICAgICAgZXh0ZXJuYWxDb25maWcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgaWYgKHRhYkxvY2FsKSB7IHRhYkxvY2FsLnN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tYWNjZW50KSc7IHRhYkxvY2FsLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWJnKSc7IH1cbiAgICAgICAgaWYgKHRhYkV4dGVybmFsKSB7IHRhYkV4dGVybmFsLnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnOyB0YWJFeHRlcm5hbC5zdHlsZS5jb2xvciA9ICd2YXIoLS1tdXRlZCknOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhbENvbmZpZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBleHRlcm5hbENvbmZpZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgaWYgKHRhYkV4dGVybmFsKSB7IHRhYkV4dGVybmFsLnN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tYWNjZW50KSc7IHRhYkV4dGVybmFsLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWJnKSc7IH1cbiAgICAgICAgaWYgKHRhYkxvY2FsKSB7IHRhYkxvY2FsLnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnOyB0YWJMb2NhbC5zdHlsZS5jb2xvciA9ICd2YXIoLS1tdXRlZCknOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9jYWxSYWRpbz8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc3dpdGNoU2VydmljZVR5cGUpO1xuICAgIGV4dGVybmFsUmFkaW8/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHN3aXRjaFNlcnZpY2VUeXBlKTtcbiAgfVxuXG4gIC8vID09PT09IEFVVE8tREVSSVZFIFNVQkRPTUFJTiBGUk9NIE5BTUUgPT09PT1cblxuICBmdW5jdGlvbiBzZXR1cEF1dG9TdWJkb21haW4oKSB7XG4gICAgLy8gTG9jYWwgc2VydmljZTogbmFtZSBcdTIxOTIgc3ViZG9tYWluICsgcHJldmlld1xuICAgIGNvbnN0IG5hbWVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLW5hbWUtaW5wdXQnKTtcbiAgICBjb25zdCBzdWJkb21haW5JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLXN1YmRvbWFpbi1pbnB1dCcpO1xuICAgIGNvbnN0IHN1YmRvbWFpblByZXZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViZG9tYWluLXByZXZpZXcnKTtcbiAgICBsZXQgdXNlckVkaXRlZFN1YmRvbWFpbiA9IGZhbHNlO1xuXG4gICAgbmFtZUlucHV0Py5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdWJkb21haW4obmFtZUlucHV0LnZhbHVlKTtcbiAgICAgIGlmICghdXNlckVkaXRlZFN1YmRvbWFpbiAmJiBzdWJkb21haW5JbnB1dCkge1xuICAgICAgICBzdWJkb21haW5JbnB1dC52YWx1ZSA9IGRlcml2ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoc3ViZG9tYWluUHJldmlldykge1xuICAgICAgICBzdWJkb21haW5QcmV2aWV3LnRleHRDb250ZW50ID0gZGVyaXZlZCA/IGBcXHUyMTkyICR7YnVpbGREb21haW4oZGVyaXZlZCl9YCA6ICcnO1xuICAgICAgfVxuICAgICAgdXBkYXRlU2VydmljZVByZXZpZXcoKTtcbiAgICB9KTtcblxuICAgIHN1YmRvbWFpbklucHV0Py5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgICAgIHVzZXJFZGl0ZWRTdWJkb21haW4gPSBzdWJkb21haW5JbnB1dC52YWx1ZSAhPT0gZGVyaXZlU3ViZG9tYWluKG5hbWVJbnB1dD8udmFsdWUgfHwgJycpO1xuICAgICAgY29uc3Qgc3ViID0gc3ViZG9tYWluSW5wdXQudmFsdWUudHJpbSgpIHx8IGRlcml2ZVN1YmRvbWFpbihuYW1lSW5wdXQ/LnZhbHVlIHx8ICcnKTtcbiAgICAgIGlmIChzdWJkb21haW5QcmV2aWV3KSB7XG4gICAgICAgIHN1YmRvbWFpblByZXZpZXcudGV4dENvbnRlbnQgPSBzdWIgPyBgXFx1MjE5MiAke2J1aWxkRG9tYWluKHN1Yil9YCA6ICcnO1xuICAgICAgfVxuICAgICAgdXBkYXRlU2VydmljZVByZXZpZXcoKTtcbiAgICB9KTtcblxuICAgIC8vIEV4dGVybmFsIHNlcnZpY2U6IG5hbWUgXHUyMTkyIHN1YmRvbWFpbiArIHByZXZpZXdcbiAgICBjb25zdCBleHROYW1lSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1uYW1lJyk7XG4gICAgY29uc3QgZXh0U3ViZG9tYWluSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1zdWJkb21haW4nKTtcbiAgICBjb25zdCBleHRTdWJkb21haW5QcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXN1YmRvbWFpbi1wcmV2aWV3Jyk7XG4gICAgY29uc3QgZXh0RG9tYWluUHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1kb21haW4tcHJldmlldycpO1xuICAgIGxldCB1c2VyRWRpdGVkRXh0U3ViZG9tYWluID0gZmFsc2U7XG5cbiAgICBleHROYW1lSW5wdXQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVN1YmRvbWFpbihleHROYW1lSW5wdXQudmFsdWUpO1xuICAgICAgaWYgKCF1c2VyRWRpdGVkRXh0U3ViZG9tYWluICYmIGV4dFN1YmRvbWFpbklucHV0KSB7XG4gICAgICAgIGV4dFN1YmRvbWFpbklucHV0LnZhbHVlID0gZGVyaXZlZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YiA9IGV4dFN1YmRvbWFpbklucHV0Py52YWx1ZSB8fCBkZXJpdmVkO1xuICAgICAgaWYgKGV4dFN1YmRvbWFpblByZXZpZXcpIHtcbiAgICAgICAgZXh0U3ViZG9tYWluUHJldmlldy50ZXh0Q29udGVudCA9IHN1YiA/IGBcXHUyMTkyICR7YnVpbGREb21haW4oc3ViKX1gIDogJyc7XG4gICAgICB9XG4gICAgICBpZiAoZXh0RG9tYWluUHJldmlldykge1xuICAgICAgICBleHREb21haW5QcmV2aWV3LnRleHRDb250ZW50ID0gc3ViID8gYnVpbGREb21haW4oc3ViKSA6ICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZXh0U3ViZG9tYWluSW5wdXQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgdXNlckVkaXRlZEV4dFN1YmRvbWFpbiA9IGV4dFN1YmRvbWFpbklucHV0LnZhbHVlICE9PSBkZXJpdmVTdWJkb21haW4oZXh0TmFtZUlucHV0Py52YWx1ZSB8fCAnJyk7XG4gICAgICBjb25zdCBzdWIgPSBleHRTdWJkb21haW5JbnB1dC52YWx1ZS50cmltKCkgfHwgZGVyaXZlU3ViZG9tYWluKGV4dE5hbWVJbnB1dD8udmFsdWUgfHwgJycpO1xuICAgICAgaWYgKGV4dFN1YmRvbWFpblByZXZpZXcpIHtcbiAgICAgICAgZXh0U3ViZG9tYWluUHJldmlldy50ZXh0Q29udGVudCA9IHN1YiA/IGBcXHUyMTkyICR7YnVpbGREb21haW4oc3ViKX1gIDogJyc7XG4gICAgICB9XG4gICAgICBpZiAoZXh0RG9tYWluUHJldmlldykge1xuICAgICAgICBleHREb21haW5QcmV2aWV3LnRleHRDb250ZW50ID0gc3ViID8gYnVpbGREb21haW4oc3ViKSA6ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT0gQ1JFQVRFIEVYVEVSTkFMIFNFUlZJQ0UgPT09PT1cblxuICBhc3luYyBmdW5jdGlvbiBjcmVhdGVFeHRlcm5hbFNlcnZpY2UoKSB7XG4gICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLW5hbWUnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgZXh0ZXJuYWxVcmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS11cmwnKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3Qgc3ViZG9tYWluID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLXN1YmRvbWFpbicpLnZhbHVlLnRyaW0oKSB8fCBkZXJpdmVTdWJkb21haW4obmFtZSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLWxvZ28nKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgaWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLWljb24nKS52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgY3JlYXRlRG5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLWNyZWF0ZS1kbnMnKS5jaGVja2VkO1xuICAgIGNvbnN0IGNyZWF0ZUNhZGR5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLWNyZWF0ZS1jYWRkeScpLmNoZWNrZWQ7XG4gICAgY29uc3QgcHJveHlJcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1wcm94eS1pcCcpLnZhbHVlLnRyaW0oKSB8fCBTSVRFLmRuc0lwIHx8ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IHByZXNlcnZlSG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1wcmVzZXJ2ZS1ob3N0JykuY2hlY2tlZDtcbiAgICBjb25zdCBmb2xsb3dSZWRpcmVjdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtZm9sbG93LXJlZGlyZWN0cycpLmNoZWNrZWQ7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1jYXRlZ29yeScpPy52YWx1ZSB8fCAnJztcblxuICAgIGlmICghbmFtZSB8fCAhZXh0ZXJuYWxVcmwpIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ1BsZWFzZSBmaWxsIGluIE5hbWUgYW5kIEV4dGVybmFsIFVSTCcsICd3YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFzdWJkb21haW4pIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ0NvdWxkIG5vdCBkZXJpdmUgc3ViZG9tYWluIGZyb20gbmFtZS4gUGxlYXNlIHNldCBvbmUgaW4gT3B0aW9ucy4nLCAnd2FybmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZXh0ZXJuYWxVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFleHRlcm5hbFVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdFeHRlcm5hbCBVUkwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nLCAnd2FybmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRvbWFpbiA9IGJ1aWxkRG9tYWluKHN1YmRvbWFpbik7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IHsgZG5zOiBudWxsLCBjYWRkeTogbnVsbCwgZGFzaGJvYXJkOiBmYWxzZSB9O1xuXG4gICAgICBpZiAoY3JlYXRlRG5zKSB7XG4gICAgICAgIGNvbnN0IGFkbWluVG9rZW4gPSB3aW5kb3cuZ2V0VG9rZW4oZ2V0UHJpbWFyeURuc0lkKCksICdhZG1pbicpO1xuICAgICAgICBpZiAoYWRtaW5Ub2tlbikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkbnNSZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL2Rucy9yZWNvcmQnLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgICAgICAgICAgIGlwOiBwcm94eUlwLFxuICAgICAgICAgICAgICAgIHR0bDogREMuREVGQVVMVFMuVFRMLFxuICAgICAgICAgICAgICAgIHNlcnZlcjogU0lURS5kbnNJcFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBkbnNSZXN1bHQgPSBhd2FpdCBkbnNSZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICByZXN1bHRzLmRucyA9IGRuc1Jlc3VsdC5zdWNjZXNzID8gJ2NyZWF0ZWQnIDogKGRuc1Jlc3VsdC5lcnJvciB8fCAnZmFpbGVkJyk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVzdWx0cy5kbnMgPSBlLm1lc3NhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdHMuZG5zID0gJ25vIGFkbWluIHRva2VuIChjb25maWd1cmUgaW4gXFx1RDgzRFxcdUREMTEgVG9rZW5zKSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNyZWF0ZUNhZGR5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2FkZHlDb25maWcgPSB7XG4gICAgICAgICAgICBzdWJkb21haW46IHN1YmRvbWFpbixcbiAgICAgICAgICAgIGV4dGVybmFsVXJsOiBleHRlcm5hbFVybCxcbiAgICAgICAgICAgIHByZXNlcnZlSG9zdDogcHJlc2VydmVIb3N0LFxuICAgICAgICAgICAgZm9sbG93UmVkaXJlY3RzOiBmb2xsb3dSZWRpcmVjdHMsXG4gICAgICAgICAgICBzc2xUeXBlOiAnY2FkZHktbWFuYWdlZCcsXG4gICAgICAgICAgICBjYWRkeWZpbGVQYXRoOiBEQy5ERUZBVUxUUy5DQUREWUZJTEUsXG4gICAgICAgICAgICByZWxvYWRDYWRkeTogdHJ1ZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBjYWRkeVJlc3BvbnNlID0gYXdhaXQgc2VjdXJlRmV0Y2goJy9hcGkvdjEvc2l0ZS9leHRlcm5hbCcsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShjYWRkeUNvbmZpZylcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGNhZGR5UmVzdWx0ID0gYXdhaXQgY2FkZHlSZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgcmVzdWx0cy5jYWRkeSA9IGNhZGR5UmVzdWx0LnN1Y2Nlc3MgPyAnY3JlYXRlZCcgOiAoY2FkZHlSZXN1bHQuZXJyb3IgfHwgJ2ZhaWxlZCcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzdWx0cy5jYWRkeSA9IGUubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdTZXJ2aWNlID0ge1xuICAgICAgICBpZDogc3ViZG9tYWluLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB1cmw6IGBodHRwczovLyR7ZG9tYWlufWAsXG4gICAgICAgIGV4dGVybmFsVXJsOiBleHRlcm5hbFVybCxcbiAgICAgICAgbG9nbzogbG9nbyB8fCBpY29uIHx8ICdcXHVEODNDXFx1REYxMCcsXG4gICAgICAgIGlzRXh0ZXJuYWw6IHRydWUsXG4gICAgICAgIGlzQ3VzdG9tOiB0cnVlXG4gICAgICB9O1xuICAgICAgLy8gT25seSBhdHRhY2ggY2F0ZWdvcnkgaWYgdXNlciBhY3R1YWxseSBwaWNrZWQgb25lXG4gICAgICBpZiAoY2F0ZWdvcnkpIG5ld1NlcnZpY2UuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcblxuICAgICAgd2luZG93LkFQUFMucHVzaChuZXdTZXJ2aWNlKTtcbiAgICAgIHJlc3VsdHMuZGFzaGJvYXJkID0gdHJ1ZTtcblxuICAgICAgY29uc3QgZGVmYXVsdFNlcnZpY2VzID0gWydwbGV4JywgJ3JvdXRlcicsICdjaGF0JywgJ3N5bmMnLCAndG9ycmVudCcsICdyYWRhcnInLCAnc29uYXJyJywgJ3Byb3dsYXJyJywgJ3BvcnRhaW5lcicsICdyZXF1ZXN0cycsICdqZWxseWZpbicsICdlbWJ5J107XG4gICAgICBjb25zdCBjdXN0b21TZXJ2aWNlcyA9IHdpbmRvdy5BUFBTLmZpbHRlcihhcHAgPT4gIWRlZmF1bHRTZXJ2aWNlcy5pbmNsdWRlcyhhcHAuaWQpKTtcbiAgICAgIHNhZmVTZXQoJ2N1c3RvbS1zZXJ2aWNlcycsIEpTT04uc3RyaW5naWZ5KGN1c3RvbVNlcnZpY2VzKSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3NlcnZpY2VzJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHdpbmRvdy5BUFBTKVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSB0byBzZXJ2aWNlcy5qc29uOicsIGUpO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuYnVpbGRHcmlkKCk7XG4gICAgICB3aW5kb3cucmVmcmVzaEFsbCgpO1xuXG4gICAgICBjbG9zZUFkZFNlcnZpY2VNb2RhbCgpO1xuXG4gICAgICBjb25zdCBwYXJ0cyA9IFtgRXh0ZXJuYWwgc2VydmljZSBcIiR7bmFtZX1cIiBhZGRlZCFgXTtcbiAgICAgIGlmIChjcmVhdGVEbnMpIHBhcnRzLnB1c2goYEROUzogJHtyZXN1bHRzLmRucyA9PT0gJ2NyZWF0ZWQnID8gJ1xcdTI3MTMnIDogJ1xcdTI2QTAgJyArIHJlc3VsdHMuZG5zfWApO1xuICAgICAgaWYgKGNyZWF0ZUNhZGR5KSBwYXJ0cy5wdXNoKGBDYWRkeTogJHtyZXN1bHRzLmNhZGR5ID09PSAnY3JlYXRlZCcgPyAnXFx1MjcxMycgOiAnXFx1MjZBMCAnICsgcmVzdWx0cy5jYWRkeX1gKTtcbiAgICAgIHBhcnRzLnB1c2goYEFjY2VzcyBhdDogaHR0cHM6Ly8ke2RvbWFpbn1gKTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24ocGFydHMuam9pbignIHwgJyksICdzdWNjZXNzJywgNjAwMCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBleHRlcm5hbCBzZXJ2aWNlOicsIGVycm9yKTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oYEZhaWxlZCB0byBjcmVhdGUgZXh0ZXJuYWwgc2VydmljZTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09IENMT1NFIEFERCBTRVJWSUNFIE1PREFMID09PT09XG5cbiAgZnVuY3Rpb24gY2xvc2VBZGRTZXJ2aWNlTW9kYWwoKSB7XG4gICAgY2xvc2VNb2RhbCgnYWRkLXNlcnZpY2UtbW9kYWwnKTtcblxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLW5hbWUtaW5wdXQnKS52YWx1ZSA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLXN1YmRvbWFpbi1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtcG9ydC1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtaXAtaW5wdXQnKS52YWx1ZSA9IFFVSUNLX0lQUy5sYW4gfHwgJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtbG9nby1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rucy10dGwtaW5wdXQnKS52YWx1ZSA9IERDLkRFRkFVTFRTLlRUTDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3NsLXR5cGUtc2VsZWN0JykudmFsdWUgPSBnZXRTbWFydFNzbERlZmF1bHQoKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2EtbmFtZS1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuYWJsZS1hdXRoJykuY2hlY2tlZCA9IGZhbHNlO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtY29ycycpLmNoZWNrZWQgPSBmYWxzZTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tLWhlYWRlcnMtaW5wdXQnKS52YWx1ZSA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cHN0cmVhbS1wYXRoLWlucHV0JykudmFsdWUgPSAnLyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWx0aC1jaGVjay1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpbWVvdXQtaW5wdXQnKS52YWx1ZSA9ICczMCc7XG5cbiAgICAvLyBDbGVhciBzdWJkb21haW4gcHJldmlld3NcbiAgICBjb25zdCBzdWJQcmV2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YmRvbWFpbi1wcmV2aWV3Jyk7XG4gICAgaWYgKHN1YlByZXYpIHN1YlByZXYudGV4dENvbnRlbnQgPSAnJztcbiAgICBjb25zdCBleHRTdWJQcmV2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXN1YmRvbWFpbi1wcmV2aWV3Jyk7XG4gICAgaWYgKGV4dFN1YlByZXYpIGV4dFN1YlByZXYudGV4dENvbnRlbnQgPSAnJztcblxuICAgIC8vIENsZWFyIGV4dGVybmFsIGZpZWxkc1xuICAgIGNvbnN0IGV4dE5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1uYW1lJyk7XG4gICAgaWYgKGV4dE5hbWUpIGV4dE5hbWUudmFsdWUgPSAnJztcbiAgICBjb25zdCBleHRTdWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1zdWJkb21haW4nKTtcbiAgICBpZiAoZXh0U3ViKSBleHRTdWIudmFsdWUgPSAnJztcbiAgICBjb25zdCBleHRVcmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS11cmwnKTtcbiAgICBpZiAoZXh0VXJsKSBleHRVcmwudmFsdWUgPSAnJztcbiAgICBjb25zdCBleHRMb2dvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXNlcnZpY2UtbG9nbycpO1xuICAgIGlmIChleHRMb2dvKSBleHRMb2dvLnZhbHVlID0gJyc7XG4gICAgY29uc3QgZXh0SWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlcm5hbC1zZXJ2aWNlLWljb24nKTtcbiAgICBpZiAoZXh0SWNvbikgZXh0SWNvbi52YWx1ZSA9ICcnO1xuXG4gICAgLy8gQ29sbGFwc2Ugb3B0aW9uc1xuICAgIGNvbnN0IGxvY2FsT3B0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhbC1hZHZhbmNlZC1vcHRpb25zJyk7XG4gICAgaWYgKGxvY2FsT3B0cykgbG9jYWxPcHRzLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpO1xuICAgIGNvbnN0IGV4dE9wdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtYWR2YW5jZWQtb3B0aW9ucycpO1xuICAgIGlmIChleHRPcHRzKSBleHRPcHRzLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpO1xuXG4gICAgLy8gUmVzZXQgdG8gbG9jYWwgdGFiXG4gICAgY29uc3QgbG9jYWxSYWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLXR5cGUtbG9jYWwnKTtcbiAgICBpZiAobG9jYWxSYWRpbykgbG9jYWxSYWRpby5jaGVja2VkID0gdHJ1ZTtcbiAgICBjb25zdCBsb2NhbENvbmZpZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhbC1zZXJ2aWNlLWNvbmZpZycpO1xuICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dGVybmFsLXNlcnZpY2UtY29uZmlnJyk7XG4gICAgaWYgKGxvY2FsQ29uZmlnKSBsb2NhbENvbmZpZy5zdHlsZS5kaXNwbGF5ID0gJ2dyaWQnO1xuICAgIGlmIChleHRlcm5hbENvbmZpZykgZXh0ZXJuYWxDb25maWcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBjb25zdCB0YWJMb2NhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItbG9jYWwnKTtcbiAgICBjb25zdCB0YWJFeHRlcm5hbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItZXh0ZXJuYWwnKTtcbiAgICBpZiAodGFiTG9jYWwpIHsgdGFiTG9jYWwuc3R5bGUuYmFja2dyb3VuZCA9ICd2YXIoLS1hY2NlbnQpJzsgdGFiTG9jYWwuc3R5bGUuY29sb3IgPSAndmFyKC0tYmcpJzsgfVxuICAgIGlmICh0YWJFeHRlcm5hbCkgeyB0YWJFeHRlcm5hbC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JzsgdGFiRXh0ZXJuYWwuc3R5bGUuY29sb3IgPSAndmFyKC0tbXV0ZWQpJzsgfVxuICB9XG5cbiAgLy8gPT09PT0gQ1JFQVRFIE5FVyBTRVJWSUNFID09PT09XG5cbiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlTmV3U2VydmljZSgpIHtcbiAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtbmFtZS1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBzdWJkb21haW4gPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2Utc3ViZG9tYWluLWlucHV0JykudmFsdWUudHJpbSgpIHx8IGRlcml2ZVN1YmRvbWFpbihuYW1lKSkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBwb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtcG9ydC1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWlwLWlucHV0JykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1sb2dvLWlucHV0JykudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGNyZWF0ZURucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcmVhdGUtZG5zLXJlY29yZCcpLmNoZWNrZWQ7XG4gICAgY29uc3QgdHRsID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rucy10dGwtaW5wdXQnKS52YWx1ZSkgfHwgREMuREVGQVVMVFMuVFRMO1xuICAgIGNvbnN0IHRhaWxzY2FsZU9ubHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFudWFsLXRhaWxzY2FsZS1vbmx5Jyk/LmNoZWNrZWQgfHwgZmFsc2U7XG5cbiAgICBjb25zdCBzc2xUeXBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NzbC10eXBlLXNlbGVjdCcpPy52YWx1ZSB8fCAnY2FkZHktbWFuYWdlZCc7XG4gICAgY29uc3QgY2FOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhLW5hbWUtaW5wdXQnKT8udmFsdWUgfHwgJyc7XG4gICAgY29uc3QgZXhpc3RpbmdDYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGlzdGluZy1jYS1zZWxlY3QnKT8udmFsdWUgfHwgJyc7XG4gICAgY29uc3QgZW5hYmxlQXV0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtYXV0aCcpPy5jaGVja2VkIHx8IGZhbHNlO1xuICAgIGNvbnN0IGVuYWJsZUNvcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5hYmxlLWNvcnMnKT8uY2hlY2tlZCB8fCBmYWxzZTtcbiAgICBjb25zdCBjdXN0b21IZWFkZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbS1oZWFkZXJzLWlucHV0Jyk/LnZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IHVwc3RyZWFtUGF0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cHN0cmVhbS1wYXRoLWlucHV0Jyk/LnZhbHVlIHx8ICcvJztcbiAgICBjb25zdCBoZWFsdGhDaGVjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFsdGgtY2hlY2staW5wdXQnKT8udmFsdWUgfHwgJyc7XG4gICAgY29uc3QgdGltZW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW1lb3V0LWlucHV0Jyk/LnZhbHVlIHx8IDMwO1xuXG4gICAgLy8gQ2F0ZWdvcnkgaXMgb3B0aW9uYWwgXHUyMDE0IHB1bGxlZCBmcm9tIGVpdGhlciBsb2NhbCBvciBleHRlcm5hbCBzZWxlY3QgYnkgdGhlXG4gICAgLy8gb3BlbkFkZFNlcnZpY2VNb2RhbCByZXNldC4gSWYgdXNlciBkb2Vzbid0IGNob29zZSBvbmUsIGl0IHN0YXlzIHVuZGVmaW5lZFxuICAgIC8vIGFuZCB3ZSBkb24ndCBzZW5kIGl0IChzbyB0aGUgYmFja2VuZCBrZWVwcyB0aGUgZXhpc3RpbmcgYmVoYXZpb3IpLlxuICAgIGNvbnN0IGNhdGVnb3J5RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1jYXRlZ29yeS1pbnB1dCcpXG4gICAgICB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0ZXJuYWwtc2VydmljZS1jYXRlZ29yeScpO1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnlFbD8udmFsdWUgfHwgJyc7XG5cbiAgICBjb25zdCBkbnNUb2tlbiA9IHdpbmRvdy5nZXRUb2tlbihnZXRQcmltYXJ5RG5zSWQoKSwgJ2FkbWluJyk7XG5cbiAgICBpZiAoIW5hbWUgfHwgIXBvcnQgfHwgIWlwKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdQbGVhc2UgZmlsbCBpbiBOYW1lLCBQb3J0LCBhbmQgSVAgQWRkcmVzcycsICd3YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFzdWJkb21haW4pIHtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oJ0NvdWxkIG5vdCBkZXJpdmUgc3ViZG9tYWluIGZyb20gbmFtZS4gUGxlYXNlIHNldCBvbmUgaW4gT3B0aW9ucy4nLCAnd2FybmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVEbnMgJiYgIWRuc1Rva2VuKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uKCdETlMgQWRtaW4gdG9rZW4gcmVxdWlyZWQuIENvbmZpZ3VyZSBpdCBpbiB0aGUgVG9rZW5zIG1lbnUgZmlyc3QuJywgJ3dhcm5pbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0geyBkbnM6IG51bGwsIGNhZGR5OiBudWxsLCBkYXNoYm9hcmQ6IGZhbHNlIH07XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGNyZWF0ZURucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdpbmRvdy5jcmVhdGVEbnNSZWNvcmQoc3ViZG9tYWluLCBpcCwgdHRsKTtcbiAgICAgICAgICByZXN1bHRzLmRucyA9ICdjcmVhdGVkJztcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdETlMgY3JlYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgICAgICByZXN1bHRzLmRucyA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBETlMgY3JlYXRpb24gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHMuZG5zID0gJ3NraXBwZWQnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWRkeUNvbmZpZyA9IHdpbmRvdy5nZW5lcmF0ZUNhZGR5Q29uZmlnKHtcbiAgICAgICAgc3ViZG9tYWluLCBwb3J0LCBpcCwgc3NsVHlwZSwgY2FOYW1lLCBleGlzdGluZ0NhLFxuICAgICAgICBlbmFibGVBdXRoLCBlbmFibGVDb3JzLCBjdXN0b21IZWFkZXJzLCB1cHN0cmVhbVBhdGgsIGhlYWx0aENoZWNrLCB0aW1lb3V0LCB0YWlsc2NhbGVPbmx5XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FkZHlSZXNwb25zZSA9IGF3YWl0IHNlY3VyZUZldGNoKCcvYXBpL3YxL3NpdGUnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZG9tYWluOiBidWlsZERvbWFpbihzdWJkb21haW4pLFxuICAgICAgICAgICAgdXBzdHJlYW06IGAke2lwfToke3BvcnR9YCxcbiAgICAgICAgICAgIGNvbmZpZzogY2FkZHlDb25maWdcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjYWRkeVJlc3VsdCA9IGF3YWl0IGNhZGR5UmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAoY2FkZHlSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3VsdHMuY2FkZHkgPSAnYWRkZWQgJiByZWxvYWRlZCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignQ2FkZHkgY29uZmlndXJhdGlvbiBmYWlsZWQ6JywgY2FkZHlSZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIHJlc3VsdHMuY2FkZHkgPSBjYWRkeVJlc3VsdC5lcnJvciB8fCAnZmFpbGVkJztcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhZGR5IGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAke2NhZGR5UmVzdWx0LmVycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDYWRkeSBBUEkgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICByZXN1bHRzLmNhZGR5ID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYWRkeSBBUEkgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VydmljZUNvbmZpZyA9IHtcbiAgICAgICAgbmFtZSwgc3ViZG9tYWluLCBwb3J0LCBpcCxcbiAgICAgICAgbG9nbzogbG9nbyB8fCBgL2Fzc2V0cy8ke3N1YmRvbWFpbn0ucG5nYCxcbiAgICAgICAgdGFpbHNjYWxlT25seTogdGFpbHNjYWxlT25seSB8fCBmYWxzZVxuICAgICAgfTtcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBjYXRlZ29yeSBpZiB1c2VyIGFjdHVhbGx5IHBpY2tlZCBvbmVcbiAgICAgIGlmIChjYXRlZ29yeSkgc2VydmljZUNvbmZpZy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuXG4gICAgICBhd2FpdCB3aW5kb3cuYWRkU2VydmljZVRvQ29uZmlnKHNlcnZpY2VDb25maWcpO1xuICAgICAgcmVzdWx0cy5kYXNoYm9hcmQgPSB0cnVlO1xuXG4gICAgICBjb25zdCBzdGF0dXNQYXJ0cyA9IFtcbiAgICAgICAgYEROUzogJHtyZXN1bHRzLmRucyA9PT0gJ2NyZWF0ZWQnID8gJ1xcdTI3MTMnIDogcmVzdWx0cy5kbnMgPT09ICdza2lwcGVkJyA/ICdcXHUyNUNCJyA6ICdcXHUyNzE3J31gLFxuICAgICAgICBgQ2FkZHk6ICR7cmVzdWx0cy5jYWRkeSA9PT0gJ2FkZGVkICYgcmVsb2FkZWQnID8gJ1xcdTI3MTMnIDogJ1xcdTI3MTcnfWAsXG4gICAgICAgIGBEYXNoYm9hcmQ6ICR7cmVzdWx0cy5kYXNoYm9hcmQgPyAnXFx1MjcxMycgOiAnXFx1MjcxNyd9YFxuICAgICAgXTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oYFNlcnZpY2UgXCIke25hbWV9XCIgY3JlYXRlZCEgJHtzdGF0dXNQYXJ0cy5qb2luKCcgfCAnKX0gXFx1MjAxNCAke2J1aWxkU2VydmljZVVybChzdWJkb21haW4pfSR7dGFpbHNjYWxlT25seSA/ICcgKFRhaWxzY2FsZSknIDogJyd9YCwgJ3N1Y2Nlc3MnLCA2MDAwKTtcblxuICAgICAgY2xvc2VBZGRTZXJ2aWNlTW9kYWwoKTtcblxuICAgICAgd2luZG93LmJ1aWxkR3JpZCgpO1xuICAgICAgd2luZG93LnJlZnJlc2hBbGwoKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyBzZXJ2aWNlOicsIGVycm9yKTtcbiAgICAgIHNob3dOb3RpZmljYXRpb24oYEVycm9yIGNyZWF0aW5nIFwiJHtuYW1lfVwiOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgNjAwMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT0gRVZFTlQgTElTVEVORVJTID09PT09XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkZC1zZXJ2aWNlJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb3BlbkFkZFNlcnZpY2VNb2RhbCk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGQtc2VydmljZS1jYW5jZWwnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUFkZFNlcnZpY2VNb2RhbCk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGQtc2VydmljZS1jcmVhdGUnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZVR5cGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic2VydmljZS10eXBlXCJdOmNoZWNrZWQnKT8udmFsdWU7XG4gICAgaWYgKHNlcnZpY2VUeXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICBjcmVhdGVFeHRlcm5hbFNlcnZpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3JlYXRlTmV3U2VydmljZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgc2V0dXBTZXJ2aWNlVHlwZVN3aXRjaGluZygpO1xuICBzZXR1cEF1dG9TdWJkb21haW4oKTtcbiAgaW5pdFF1aWNrSVBCdXR0b25zKCk7XG5cbiAgLy8gU1NMIHR5cGUgY2hhbmdlIGhhbmRsZXJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NzbC10eXBlLXNlbGVjdCcpPy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nQ2FDb25maWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhpc3RpbmctY2EtY29uZmlnJyk7XG4gICAgY29uc3QgY3VzdG9tQ2FDb25maWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tLWNhLWNvbmZpZycpO1xuXG4gICAgZXhpc3RpbmdDYUNvbmZpZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGN1c3RvbUNhQ29uZmlnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBpZiAoZS50YXJnZXQudmFsdWUgPT09ICdleGlzdGluZy1jYScpIHtcbiAgICAgIGV4aXN0aW5nQ2FDb25maWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfSBlbHNlIGlmIChlLnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbS1jYScpIHtcbiAgICAgIGN1c3RvbUNhQ29uZmlnLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cblxuICAgIHVwZGF0ZVNlcnZpY2VQcmV2aWV3KCk7XG4gIH0pO1xuXG4gIC8vIFJlZnJlc2ggQ0FzIGJ1dHRvblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVmcmVzaC1jYXMnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZnJlc2gtY2FzJyk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYnV0dG9uLnRleHRDb250ZW50O1xuICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdcXHUyMzFCIExvYWRpbmcuLi4nO1xuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FkZHlmaWxlUGF0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWRkeWZpbGUtcGF0aC1pbnB1dCcpLnZhbHVlIHx8IERDLkRFRkFVTFRTLkNBRERZRklMRTtcbiAgICAgIGF3YWl0IHdpbmRvdy5sb2FkRXhpc3RpbmdDQXMoY2FkZHlmaWxlUGF0aCk7XG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnXFx1MjcwNSBSZWZyZXNoZWQnO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnXFx1Mjc0QyBGYWlsZWQnO1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlZnJlc2ggQ0FzOicsIGVycm9yKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IG9yaWdpbmFsVGV4dDtcbiAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0sIDIwMDApO1xuICB9KTtcblxuICAvLyBETlMgcmVjb3JkIGNoZWNrYm94IGhhbmRsZXJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NyZWF0ZS1kbnMtcmVjb3JkJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgY29uc3QgZG5zQ29uZmlnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rucy1jb25maWcnKTtcbiAgICBkbnNDb25maWcuc3R5bGUuZGlzcGxheSA9IGUudGFyZ2V0LmNoZWNrZWQgPyAnYmxvY2snIDogJ25vbmUnO1xuICB9KTtcblxuICAvLyBSZWFsLXRpbWUgcHJldmlldyB1cGRhdGVzXG4gIFsnc2VydmljZS1zdWJkb21haW4taW5wdXQnLCAnc2VydmljZS1pcC1pbnB1dCcsICdzZXJ2aWNlLXBvcnQtaW5wdXQnLCAnY2EtbmFtZS1pbnB1dCcsXG4gICAnZXhpc3RpbmctY2Etc2VsZWN0JywgJ2VuYWJsZS1hdXRoJywgJ2VuYWJsZS1jb3JzJywgJ2N1c3RvbS1oZWFkZXJzLWlucHV0JywgJ3Vwc3RyZWFtLXBhdGgtaW5wdXQnLFxuICAgJ2hlYWx0aC1jaGVjay1pbnB1dCcsICd0aW1lb3V0LWlucHV0J10uZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHVwZGF0ZVNlcnZpY2VQcmV2aWV3KTtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlU2VydmljZVByZXZpZXcpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gPT09PT0gQ1VTVE9NIFNFUlZJQ0VTIEZST00gTE9DQUxTVE9SQUdFID09PT09XG5cbiAgZnVuY3Rpb24gbG9hZEN1c3RvbVNlcnZpY2VzKCkge1xuICAgIGNvbnN0IGN1c3RvbVNlcnZpY2VzID0gc2FmZUdldCgnY3VzdG9tLXNlcnZpY2VzJyk7XG4gICAgaWYgKGN1c3RvbVNlcnZpY2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IEpTT04ucGFyc2UoY3VzdG9tU2VydmljZXMpO1xuICAgICAgICBzZXJ2aWNlcy5mb3JFYWNoKHNlcnZpY2UgPT4ge1xuICAgICAgICAgIGlmICghd2luZG93LkFQUFMuZmluZChhcHAgPT4gYXBwLmlkID09PSBzZXJ2aWNlLmlkKSkge1xuICAgICAgICAgICAgd2luZG93LkFQUFMucHVzaChzZXJ2aWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGN1c3RvbSBzZXJ2aWNlczonLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkQ3VzdG9tU2VydmljZXMoKTtcblxuICAvLyA9PT09PSBXSU5ET1cgRVhQT1JUUyA9PT09PVxuXG4gIHdpbmRvdy5vcGVuQWRkU2VydmljZU1vZGFsID0gb3BlbkFkZFNlcnZpY2VNb2RhbDtcbiAgd2luZG93LmNsb3NlQWRkU2VydmljZU1vZGFsID0gY2xvc2VBZGRTZXJ2aWNlTW9kYWw7XG5cbn0pKCk7XG47XG4vLyA9PT09PT09PT09IExJVkUgREFTSEJPQVJEIEVWRU5UUyAoU1NFKSA9PT09PT09PT09XG4oZnVuY3Rpb24oKSB7XG4gIGxldCBlcyA9IG51bGw7XG4gIGxldCByZWNvbm5lY3REZWxheSA9IDEwMDA7XG4gIGNvbnN0IE1BWF9SRUNPTk5FQ1QgPSAzMDAwMDtcblxuICBmdW5jdGlvbiBjb25uZWN0KCkge1xuICAgIGlmIChlcykgeyB0cnkgeyBlcy5jbG9zZSgpOyB9IGNhdGNoIChfKSB7fSB9XG5cbiAgICBlcyA9IG5ldyBFdmVudFNvdXJjZSgnL2FwaS92MS9ldmVudHMvc3RyZWFtJyk7XG5cbiAgICBlcy5hZGRFdmVudExpc3RlbmVyKCdjb25uZWN0ZWQnLCAoKSA9PiB7XG4gICAgICByZWNvbm5lY3REZWxheSA9IDEwMDA7IC8vIHJlc2V0IGJhY2tvZmZcbiAgICAgIGRlYnVnKCdbU1NFXSBDb25uZWN0ZWQgdG8gZXZlbnQgc3RyZWFtJyk7XG4gICAgfSk7XG5cbiAgICAvLyBIZWFsdGggc3RhdHVzIGNoYW5nZXMgXHUyMTkyIHVwZGF0ZSBjYXJkIGRvdHMvYmFkZ2VzIGluIHJlYWwgdGltZVxuICAgIGVzLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXR1cy1jaGFuZ2UnLCAoZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGQuc2VydmljZUlkICYmIHR5cGVvZiB3aW5kb3cuc2V0QmFkZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCB1cCA9IGQuc3RhdHVzID09PSAndXAnIHx8IGQuc3RhdHVzID09PSAnaGVhbHRoeSc7XG4gICAgICAgICAgd2luZG93LnNldEJhZGdlKGQuc2VydmljZUlkLCB1cCwgZC5yZXNwb25zZVRpbWUgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSk7XG5cbiAgICAvLyBSZXNvdXJjZSBhbGVydHMgXHUyMTkyIHRvYXN0IG5vdGlmaWNhdGlvblxuICAgIGVzLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc291cmNlLWFsZXJ0JywgKGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgIGNvbnN0IG1zZyA9IGAke2QuY29udGFpbmVyTmFtZSB8fCBkLmNvbnRhaW5lcklkfTogJHtkLm1ldHJpY30gYXQgJHtkLnZhbHVlfSUgKHRocmVzaG9sZDogJHtkLnRocmVzaG9sZH0lKWA7XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvd05vdGlmaWNhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24obXNnLCAnd2FybmluZycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH0pO1xuXG4gICAgLy8gQ29udGFpbmVyIGF1dG8tcmVzdGFydFxuICAgIGVzLmFkZEV2ZW50TGlzdGVuZXIoJ2F1dG8tcmVzdGFydCcsIChlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIHNob3dOb3RpZmljYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKGBDb250YWluZXIgXCIke2QuY29udGFpbmVyTmFtZX1cIiB3YXMgYXV0by1yZXN0YXJ0ZWRgLCAnaW5mbycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIGF2YWlsYWJsZSBcdTIxOTIgc2hvdyBub3RpZmljYXRpb24gZG90IG9uIFVwZGF0ZXMgYnV0dG9uXG4gICAgZXMuYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlLWF2YWlsYWJsZScsIChlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICBjb25zdCB1cGRhdGVzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZXMtYnRuJyk7XG4gICAgICAgIGlmICh1cGRhdGVzQnRuICYmICF1cGRhdGVzQnRuLnF1ZXJ5U2VsZWN0b3IoJy5zc2UtZG90JykpIHtcbiAgICAgICAgICBjb25zdCBkb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgZG90LmNsYXNzTmFtZSA9ICdzc2UtZG90JztcbiAgICAgICAgICBkb3Quc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo4cHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7bWFyZ2luLWxlZnQ6NnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsnO1xuICAgICAgICAgIHVwZGF0ZXNCdG4uYXBwZW5kQ2hpbGQoZG90KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3dOb3RpZmljYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKGBVcGRhdGUgYXZhaWxhYmxlIGZvciAke2QuY29udGFpbmVyTmFtZSB8fCBkLmNvbnRhaW5lcklkfWAsICdpbmZvJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgc3RhcnQvY29tcGxldGUvZmFpbGVkXG4gICAgZXMuYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlLWNvbXBsZXRlJywgKGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvd05vdGlmaWNhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oYFVwZGF0ZSBjb21wbGV0ZWQ6ICR7ZC5jb250YWluZXJOYW1lIHx8IGQuY29udGFpbmVySWR9YCwgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmlnZ2VyIGEgZGFzaGJvYXJkIHJlZnJlc2hcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cucmVmcmVzaEFsbCA9PT0gJ2Z1bmN0aW9uJykgd2luZG93LnJlZnJlc2hBbGwoKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSk7XG5cbiAgICBlcy5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGUtZmFpbGVkJywgKGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvd05vdGlmaWNhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oYFVwZGF0ZSBmYWlsZWQ6ICR7ZC5jb250YWluZXJOYW1lIHx8IGQuY29udGFpbmVySWR9IFx1MjAxNCAke2QuZXJyb3IgfHwgJ3Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH0pO1xuXG4gICAgLy8gSW5jaWRlbnRzXG4gICAgZXMuYWRkRXZlbnRMaXN0ZW5lcignaW5jaWRlbnQnLCAoZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzaG93Tm90aWZpY2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKGQudHlwZSA9PT0gJ2NyZWF0ZWQnKSB7XG4gICAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKGBJbmNpZGVudDogJHtkLm1lc3NhZ2UgfHwgZC5zZXJ2aWNlSWR9YCwgJ2Vycm9yJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkLnR5cGUgPT09ICdyZXNvbHZlZCcpIHtcbiAgICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oYFJlc29sdmVkOiAke2Quc2VydmljZUlkIHx8ICdpbmNpZGVudCd9YCwgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSk7XG5cbiAgICAvLyBSZWNvbm5lY3Qgb24gZXJyb3JcbiAgICBlcy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgZXMuY2xvc2UoKTtcbiAgICAgIGNvbnNvbGUud2FybihgW1NTRV0gRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgaW4gJHtyZWNvbm5lY3REZWxheSAvIDEwMDB9cy4uLmApO1xuICAgICAgc2V0VGltZW91dChjb25uZWN0LCByZWNvbm5lY3REZWxheSk7XG4gICAgICByZWNvbm5lY3REZWxheSA9IE1hdGgubWluKHJlY29ubmVjdERlbGF5ICogMiwgTUFYX1JFQ09OTkVDVCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFN0YXJ0IG9uIHBhZ2UgbG9hZFxuICBjb25uZWN0KCk7XG5cbiAgLy8gRXhwb3NlIGZvciBkZWJ1Z2dpbmdcbiAgd2luZG93Ll9zc2VSZWNvbm5lY3QgPSBjb25uZWN0O1xufSkoKTtcbjtcbi8vID09PT09PT09PT0gU0VSVklDRSBGSUxURVIgPT09PT09PT09PVxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCBzZWFyY2hJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWZpbHRlci1zZWFyY2gnKTtcbiAgY29uc3Qgc3RhdHVzU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcnZpY2UtZmlsdGVyLXN0YXR1cycpO1xuICBjb25zdCBjYXRlZ29yeVNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXJ2aWNlLWZpbHRlci1jYXRlZ29yeScpO1xuICBjb25zdCBjb3VudFNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmljZS1maWx0ZXItY291bnQnKTtcblxuICAvLyBCdWlsZCBhIHNpbmdsZSBjYXRlZ29yeSBsaXN0IGZyb20gYm90aCB0aGUgQVBJIGNhdGVnb3JpZXMgYW5kIGFueVxuICAvLyBjYXRlZ29yaWVzIHByZXNlbnQgb24gdGhlIGFjdHVhbCByZW5kZXJlZCBjYXJkcyAoY292ZXJzIGN1c3RvbSBzZXJ2aWNlc1xuICAvLyB3aG9zZSBjYXRlZ29yeSBpc24ndCBpbiBURU1QTEFURV9DQVRFR09SSUVTKS5cbiAgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlMaXN0KCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZnJvbUNhcmRzID0gbmV3IFNldCgpO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNjYXJkcyAuY2FyZFtkYXRhLWNhdGVnb3J5XScpLmZvckVhY2goYyA9PiB7XG4gICAgICBjb25zdCBjYXQgPSBjLmRhdGFzZXQuY2F0ZWdvcnkudHJpbSgpO1xuICAgICAgaWYgKGNhdCkgZnJvbUNhcmRzLmFkZChjYXQpO1xuICAgIH0pO1xuICAgIGNvbnN0IGFwaUNhdHMgPSAod2luZG93LkRDX0NBVEVHT1JJRVMgfHwgKHR5cGVvZiBEQyAhPT0gJ3VuZGVmaW5lZCcgJiYgREMuQ0FURUdPUklFUykpIHx8IHt9O1xuICAgIGNvbnN0IGFsbCA9IE9iamVjdC5rZXlzKGFwaUNhdHMpLmNvbmNhdChbLi4uZnJvbUNhcmRzXS5maWx0ZXIoYyA9PiAhYXBpQ2F0c1tjXSkpO1xuICAgIGFsbC5mb3JFYWNoKGMgPT4gc2Vlbi5hZGQoYykpO1xuICAgIHJldHVybiB7IGxpc3Q6IFsuLi5zZWVuXSwgYXBpQ2F0cyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaENhdGVnb3J5RHJvcGRvd24oKSB7XG4gICAgaWYgKCFjYXRlZ29yeVNlbGVjdCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgbGlzdCwgYXBpQ2F0cyB9ID0gZ2V0Q2F0ZWdvcnlMaXN0KCk7XG4gICAgY29uc3QgY3VycmVudCA9IGNhdGVnb3J5U2VsZWN0LnZhbHVlO1xuICAgIGNhdGVnb3J5U2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIENhdGVnb3JpZXM8L29wdGlvbj4nO1xuICAgIGxpc3Quc29ydCgpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICBjb25zdCBpbmZvID0gYXBpQ2F0c1tuYW1lXTtcbiAgICAgIGNvbnN0IG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgb3B0LnZhbHVlID0gbmFtZTtcbiAgICAgIG9wdC50ZXh0Q29udGVudCA9IGluZm8gPyBgJHtpbmZvLmljb24gfHwgJyd9ICR7bmFtZX1gLnRyaW0oKSA6IG5hbWU7XG4gICAgICBjYXRlZ29yeVNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgIH0pO1xuICAgIC8vIFJlc3RvcmUgc2VsZWN0aW9uIGlmIGl0IHN0aWxsIGV4aXN0c1xuICAgIGlmIChjdXJyZW50ICYmIFsuLi5jYXRlZ29yeVNlbGVjdC5vcHRpb25zXS5zb21lKG8gPT4gby52YWx1ZSA9PT0gY3VycmVudCkpIHtcbiAgICAgIGNhdGVnb3J5U2VsZWN0LnZhbHVlID0gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2F0ZWdvcnlTZWxlY3QudmFsdWUgPSAnYWxsJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGaWx0ZXIoKSB7XG4gICAgcmVmcmVzaENhdGVnb3J5RHJvcGRvd24oKTtcbiAgICBjb25zdCBxdWVyeSA9IHNlYXJjaElucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IHN0YXR1c0ZpbHRlciA9IHN0YXR1c1NlbGVjdC52YWx1ZTsgLy8gJ2FsbCcsICdvbicsIG9yICdvZmYnXG4gICAgY29uc3QgY2F0ZWdvcnlGaWx0ZXIgPSBjYXRlZ29yeVNlbGVjdCA/IGNhdGVnb3J5U2VsZWN0LnZhbHVlIDogJ2FsbCc7XG5cbiAgICBjb25zdCBjYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNjYXJkcyAuY2FyZCcpO1xuICAgIGxldCB2aXNpYmxlQ291bnQgPSAwO1xuXG4gICAgY2FyZHMuZm9yRWFjaChjYXJkID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5uYW1lJyk/LnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgY29uc3QgYXBwID0gY2FyZC5kYXRhc2V0LmFwcD8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGNhcmQuZGF0YXNldC5zdGF0dXMgfHwgJ29mZic7IC8vICdvbicgb3IgJ29mZidcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gY2FyZC5kYXRhc2V0LmNhdGVnb3J5IHx8ICcnO1xuXG4gICAgICBjb25zdCBtYXRjaGVzU2VhcmNoID0gIXF1ZXJ5IHx8IG5hbWUuaW5jbHVkZXMocXVlcnkpIHx8IGFwcC5pbmNsdWRlcyhxdWVyeSk7XG4gICAgICBjb25zdCBtYXRjaGVzU3RhdHVzID0gc3RhdHVzRmlsdGVyID09PSAnYWxsJyB8fCBzdGF0dXMgPT09IHN0YXR1c0ZpbHRlcjtcbiAgICAgIGNvbnN0IG1hdGNoZXNDYXRlZ29yeSA9IGNhdGVnb3J5RmlsdGVyID09PSAnYWxsJyB8fCBjYXRlZ29yeSA9PT0gY2F0ZWdvcnlGaWx0ZXI7XG5cbiAgICAgIGlmIChtYXRjaGVzU2VhcmNoICYmIG1hdGNoZXNTdGF0dXMgJiYgbWF0Y2hlc0NhdGVnb3J5KSB7XG4gICAgICAgIGNhcmQuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgICB2aXNpYmxlQ291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcmQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChjb3VudFNwYW4pIHtcbiAgICAgIGNvbnN0IHRvdGFsID0gY2FyZHMubGVuZ3RoO1xuICAgICAgY291bnRTcGFuLnRleHRDb250ZW50ID0gYCR7dmlzaWJsZUNvdW50fSBvZiAke3RvdGFsfSBzZXJ2aWNlc2A7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVib3VuY2UgaGVscGVyXG4gIGZ1bmN0aW9uIGRlYm91bmNlKGZuLCBkZWxheSkge1xuICAgIGxldCB0aW1lb3V0O1xuICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBmbi5hcHBseSh0aGlzLCBhcmdzKSwgZGVsYXkpO1xuICAgIH07XG4gIH1cblxuICBzZWFyY2hJbnB1dD8uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBkZWJvdW5jZSh1cGRhdGVGaWx0ZXIsIDIwMCkpO1xuICBzdGF0dXNTZWxlY3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZUZpbHRlcik7XG4gIGNhdGVnb3J5U2VsZWN0Py5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGaWx0ZXIpO1xuXG4gIC8vIEluaXRpYWwgY291bnQgb24gcGFnZSBsb2FkXG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gc2V0VGltZW91dCh1cGRhdGVGaWx0ZXIsIDUwMCkpO1xuICB9IGVsc2Uge1xuICAgIHNldFRpbWVvdXQodXBkYXRlRmlsdGVyLCA1MDApO1xuICB9XG5cbiAgLy8gRXhwb3NlIGZvciBleHRlcm5hbCB0cmlnZ2VycyAoY2FsbGVkIGFmdGVyIGJ1aWxkR3JpZCB0byByZXBvcHVsYXRlIGNhdGVnb3JpZXMpXG4gIHdpbmRvdy5yZWZyZXNoU2VydmljZUZpbHRlciA9IHVwZGF0ZUZpbHRlcjtcbiAgd2luZG93LnJlZnJlc2hDYXRlZ29yeURyb3Bkb3duID0gcmVmcmVzaENhdGVnb3J5RHJvcGRvd247XG59KSgpO1xuO1xuLy8gPT09PT09PT09PSBCQVRDSCBDT05UQUlORVIgT1BFUkFUSU9OUyA9PT09PT09PT09XG4oZnVuY3Rpb24oKSB7XG4gIGNvbnN0IGJhdGNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdGNoLW9wZXJhdGlvbnMtYnRuJyk7XG4gIGNvbnN0IGJhdGNoQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdGNoLWFjdGlvbi1iYXInKTtcbiAgY29uc3QgYmF0Y2hDb3VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXRjaC1zZWxlY3RlZC1jb3VudCcpO1xuICBjb25zdCBzdGFydEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXRjaC1zdGFydC1idG4nKTtcbiAgY29uc3Qgc3RvcEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXRjaC1zdG9wLWJ0bicpO1xuICBjb25zdCByZXN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdGNoLXJlc3RhcnQtYnRuJyk7XG4gIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXRjaC1jYW5jZWwtYnRuJyk7XG5cbiAgbGV0IGJhdGNoTW9kZSA9IGZhbHNlO1xuICBsZXQgc2VsZWN0ZWRDb250YWluZXJzID0gbmV3IFNldCgpO1xuXG4gIGZ1bmN0aW9uIGVudGVyQmF0Y2hNb2RlKCkge1xuICAgIGJhdGNoTW9kZSA9IHRydWU7XG4gICAgc2VsZWN0ZWRDb250YWluZXJzLmNsZWFyKCk7XG4gICAgYmF0Y2hCYXIuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIGJhdGNoQnRuLnRleHRDb250ZW50ID0gJ1x1MjcxMyBFeGl0IEJhdGNoIE1vZGUnO1xuICAgIHVwZGF0ZVNlbGVjdGVkQ291bnQoKTtcbiAgICBcbiAgICAvLyBBZGQgY2hlY2tib3hlcyB0byBhbGwgY2FyZHMgd2l0aCBjb250YWluZXJJZFxuICAgIGNvbnN0IGNhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2NhcmRzIC5jYXJkW2RhdGEtYXBwXScpO1xuICAgIGNhcmRzLmZvckVhY2goY2FyZCA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJJZCA9IGNhcmQuZGF0YXNldC5jb250YWluZXJJZDtcbiAgICAgIGlmICghY29udGFpbmVySWQpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGNoZWNrYm94IGlmIGFueVxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5iYXRjaC1jaGVja2JveCcpO1xuICAgICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5yZW1vdmUoKTtcbiAgICAgIFxuICAgICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgY2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICBjaGVja2JveC5jbGFzc05hbWUgPSAnYmF0Y2gtY2hlY2tib3gnO1xuICAgICAgY2hlY2tib3guZGF0YXNldC5jb250YWluZXJJZCA9IGNvbnRhaW5lcklkO1xuICAgICAgY2hlY2tib3guZGF0YXNldC5zZXJ2aWNlTmFtZSA9IGNhcmQucXVlcnlTZWxlY3RvcignLm5hbWUnKT8udGV4dENvbnRlbnQgfHwgY29udGFpbmVySWQ7XG4gICAgICBjaGVja2JveC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA4cHg7IGxlZnQ6IDhweDsgei1pbmRleDogMTA7IHdpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7IGN1cnNvcjogcG9pbnRlcjsnO1xuICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZENvbnRhaW5lcnMuYWRkKGNvbnRhaW5lcklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxlY3RlZENvbnRhaW5lcnMuZGVsZXRlKGNvbnRhaW5lcklkKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTZWxlY3RlZENvdW50KCk7XG4gICAgICB9KTtcbiAgICAgIGNhcmQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgICAgY2FyZC5pbnNlcnRCZWZvcmUoY2hlY2tib3gsIGNhcmQuZmlyc3RDaGlsZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBleGl0QmF0Y2hNb2RlKCkge1xuICAgIGJhdGNoTW9kZSA9IGZhbHNlO1xuICAgIHNlbGVjdGVkQ29udGFpbmVycy5jbGVhcigpO1xuICAgIGJhdGNoQmFyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgYmF0Y2hCdG4udGV4dENvbnRlbnQgPSAnXHUyNjMwIEJhdGNoIE9wZXJhdGlvbnMnO1xuICAgIFxuICAgIC8vIFJlbW92ZSBhbGwgY2hlY2tib3hlc1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYXRjaC1jaGVja2JveCcpLmZvckVhY2goY2IgPT4gY2IucmVtb3ZlKCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0ZWRDb3VudCgpIHtcbiAgICBjb25zdCBjb3VudCA9IHNlbGVjdGVkQ29udGFpbmVycy5zaXplO1xuICAgIGJhdGNoQ291bnQudGV4dENvbnRlbnQgPSBgJHtjb3VudH0gc2VsZWN0ZWRgO1xuICAgIHN0YXJ0QnRuLmRpc2FibGVkID0gY291bnQgPT09IDA7XG4gICAgc3RvcEJ0bi5kaXNhYmxlZCA9IGNvdW50ID09PSAwO1xuICAgIHJlc3RhcnRCdG4uZGlzYWJsZWQgPSBjb3VudCA9PT0gMDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGJhdGNoQWN0aW9uKGFjdGlvbikge1xuICAgIGlmIChzZWxlY3RlZENvbnRhaW5lcnMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBBcnJheS5mcm9tKHNlbGVjdGVkQ29udGFpbmVycyk7XG4gICAgY29uc3QgYWN0aW9uTGFiZWwgPSB7IHN0YXJ0OiAnU3RhcnRpbmcnLCBzdG9wOiAnU3RvcHBpbmcnLCByZXN0YXJ0OiAnUmVzdGFydGluZycgfVthY3Rpb25dO1xuICAgIFxuICAgIGlmICghY29uZmlybShgJHthY3Rpb25MYWJlbH0gJHtjb250YWluZXJzLmxlbmd0aH0gY29udGFpbmVyKHMpPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCkpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBidG5zID0gW3N0YXJ0QnRuLCBzdG9wQnRuLCByZXN0YXJ0QnRuXTtcbiAgICBidG5zLmZvckVhY2goYiA9PiB7IGIuZGlzYWJsZWQgPSB0cnVlOyBiLnRleHRDb250ZW50ID0gJy4uLic7IH0pO1xuICAgIFxuICAgIGxldCBzdWNjZXNzID0gMDtcbiAgICBsZXQgZmFpbGVkID0gMDtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGNvbnRhaW5lcklkIG9mIGNvbnRhaW5lcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3YxL2NvbnRhaW5lcnMvJHtlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVySWQpfS8ke2FjdGlvbn1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICBzdWNjZXNzKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFpbGVkKys7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICAgICAgZXJyb3JzLnB1c2goYCR7Y29udGFpbmVySWR9OiAke2RhdGEuZXJyb3IgfHwgcmVzLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbGVkKys7XG4gICAgICAgIGVycm9ycy5wdXNoKGAke2NvbnRhaW5lcklkfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFJlc3RvcmUgYnV0dG9uc1xuICAgIGJ0bnNbMF0udGV4dENvbnRlbnQgPSAnXHUyNUI2IFN0YXJ0IEFsbCc7XG4gICAgYnRuc1sxXS50ZXh0Q29udGVudCA9ICdcdTJCMUIgU3RvcCBBbGwnO1xuICAgIGJ0bnNbMl0udGV4dENvbnRlbnQgPSAnXHVEODNEXHVERDA0IFJlc3RhcnQgQWxsJztcbiAgICB1cGRhdGVTZWxlY3RlZENvdW50KCk7XG4gICAgXG4gICAgLy8gU2hvdyByZXN1bHRzXG4gICAgaWYgKGZhaWxlZCA9PT0gMCkge1xuICAgICAgaWYgKHR5cGVvZiBzaG93Tm90aWZpY2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNob3dOb3RpZmljYXRpb24oYCR7YWN0aW9uTGFiZWx9IGNvbXBsZXRlZDogJHtzdWNjZXNzfSBjb250YWluZXIocylgLCAnc3VjY2VzcycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHNob3dOb3RpZmljYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2hvd05vdGlmaWNhdGlvbihgJHthY3Rpb25MYWJlbH06ICR7c3VjY2Vzc30gc3VjY2VlZGVkLCAke2ZhaWxlZH0gZmFpbGVkYCwgJ3dhcm5pbmcnKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0JhdGNoIG9wZXJhdGlvbiBlcnJvcnM6JywgZXJyb3JzKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVmcmVzaCBkYXNoYm9hcmQgYWZ0ZXIgYSBzaG9ydCBkZWxheVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZWZyZXNoQWxsID09PSAnZnVuY3Rpb24nKSByZWZyZXNoQWxsKCk7XG4gICAgfSwgMTUwMCk7XG4gIH1cblxuICBiYXRjaEJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgaWYgKGJhdGNoTW9kZSkge1xuICAgICAgZXhpdEJhdGNoTW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlckJhdGNoTW9kZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgc3RhcnRCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYmF0Y2hBY3Rpb24oJ3N0YXJ0JykpO1xuICBzdG9wQnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGJhdGNoQWN0aW9uKCdzdG9wJykpO1xuICByZXN0YXJ0QnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGJhdGNoQWN0aW9uKCdyZXN0YXJ0JykpO1xuICBjYW5jZWxCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXhpdEJhdGNoTW9kZSk7XG59KSgpO1xuIl0sCiAgIm1hcHBpbmdzIjogIkNBS0MsU0FBU0EsRUFBUSxDQUNoQixhQUVBLE1BQU1DLENBQWEsQ0FDakIsYUFBYyxDQUNaLEtBQUssT0FBUyxDQUFDLEVBQ2YsS0FBSyxVQUFZLEVBQ25CLENBUUEsU0FBU0MsRUFBU0MsRUFBT0MsRUFBVyxDQUFDLEVBQUcsQ0FDdEMsTUFBTUMsRUFBYSxDQUNqQixVQUFXLElBQUksS0FBSyxFQUFFLFlBQVksRUFDbEMsUUFBQUgsRUFDQSxRQUFTQyxhQUFpQixNQUFRQSxFQUFNLFFBQVVBLEVBQ2xELE1BQU9BLGFBQWlCLE1BQVFBLEVBQU0sTUFBUSxLQUM5QyxTQUFBQyxDQUNGLEVBR0EsS0FBSyxPQUFPLEtBQUtDLENBQVUsRUFHdkIsS0FBSyxPQUFPLE9BQVMsS0FBSyxXQUM1QixLQUFLLE9BQU8sTUFBTSxFQUlwQixRQUFRLE1BQU0sc0JBQXNCSCxDQUFPLElBQUtDLEVBQU9DLENBQVEsQ0FJakUsQ0FRQSxpQkFBaUJELEVBQU9HLEVBQWEsQ0FHbkMsT0FGa0IsS0FBSyxjQUFjSCxDQUFLLEVBRXZCLENBQ2pCLElBQUssb0JBQ0gsWUFBSyxTQUFTLG9CQUFxQkEsRUFBTyxDQUFFLFlBQUFHLENBQVksQ0FB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Z0JBQWlCLFNBQVUsRUFDaGQsUUFBa0IsQ0FBRSxHQUFJLFVBQVcsR0FBSSxVQUFXLE1BQU8sVUFBVyxXQUFZLFVBQVcsWUFBYSxVQUFXLFVBQVcsVUFBVyxPQUFRLFVBQVcsTUFBTyxVQUFXLGFBQWMsVUFBVyxLQUFNLFVBQVcsUUFBUyxVQUFXLFFBQVMsVUFBVyxTQUFVLFVBQVcsU0FBVSxVQUFXLFNBQVUsVUFBVyxVQUFXLFVBQVcsT0FBUSxVQUFXLFFBQVMsVUFBVyxNQUFPLFVBQVcsUUFBUyxVQUFXLE9BQVEsVUFBVyxnQkFBaUIsU0FBVSxFQUNoZCxpQkFBa0IsQ0FBRSxHQUFJLFVBQVcsR0FBSSxVQUFXLE1BQU8sVUFBVyxXQUFZLFVBQVcsWUFBYSxVQUFXLFVBQVcsVUFBVyxPQUFRLFVBQVcsTUFBTyxVQUFXLGFBQWMsVUFBVyxLQUFNLFVBQVcsUUFBUyxVQUFXLFFBQVMsVUFBVyxTQUFVLFVBQVcsU0FBVSxVQUFXLFNBQVUsVUFBVyxVQUFXLFVBQVcsT0FBUSxVQUFXLFFBQVMsVUFBVyxNQUFPLFVBQVcsUUFBUyxVQUFXLE9BQVEsVUFBVyxnQkFBaUIsU0FBVSxFQUNoZCxrQkFBa0IsQ0FBRSxHQUFJLFVBQVcsR0FBSSxVQUFXLE1BQU8sVUFBVyxXQUFZLFVBQVcsWUFBYSxVQUFXLFVBQVcsVUFBVyxPQUFRLFVBQVcsTUFBTyxVQUFXLGFBQWMsVUFBVyxLQUFNLFVBQVcsUUFBUyxVQUFXLFFBQVMsVUFBVyxTQUFVLFVBQVcsU0FBVSxVQUFXLFNBQVUsVUFBVyxVQUFXLFVBQVcsT0FBUSxVQUFXLFFBQVMsVUFBVyxNQUFPLFVBQVcsUUFBUyxVQUFXLE9BQVEsVUFBVyxnQkFBaUIsVUFBVyxRQUFTLEVBQUssRUFDL2QsS0FBa0IsQ0FBRSxHQUFJLFVBQVcsR0FBSSxVQUFXLE1BQU8sVUFBVyxXQUFZLFVBQVcsWUFBYSxVQUFXLFVBQVcsVUFBVyxPQUFRLFVBQVcsTUFBTyxVQUFXLGFBQWMsVUFBVyxLQUFNLFVBQVcsUUFBUyxVQUFXLFFBQVMsVUFBVyxTQUFVLFVBQVcsU0FBVSxVQUFXLFNB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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQWtHM0IsRUFFUCxZQUFZLHVCQUF3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0E2QjdCLEVBRVAsWUFBWSxvQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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QixZQUM5QixpQkFBaUIsR0FBR0YsQ0FBVyxLQUFLRSxDQUFPLGVBQWVDLENBQU0sVUFBVyxTQUFTLEVBRXRGLFFBQVEsTUFBTSwwQkFBMkJDLENBQU0sR0FJakQsV0FBVyxJQUFNLENBQ1gsT0FBTyxZQUFlLFlBQVksV0FBVyxDQUNuRCxFQUFHLElBQUksQ0FDVCxDQUVBbkIsR0FBVSxpQkFBaUIsUUFBUyxJQUFNLENBQ3BDSyxFQUNGSyxFQUFjLEVBRWRILEVBQWUsQ0FFbkIsQ0FBQyxFQUVESixHQUFVLGlCQUFpQixRQUFTLElBQU1TLEVBQVksT0FBTyxDQUFDLEVBQzlEUixHQUFTLGlCQUFpQixRQUFTLElBQU1RLEVBQVksTUFBTSxDQUFDLEVBQzVEdlAsR0FBWSxpQkFBaUIsUUFBUyxJQUFNdVAsRUFBWSxTQUFTLENBQUMsRUFDbEVqSSxHQUFXLGlCQUFpQixRQUFTK0gsQ0FBYSxDQUNwRCxHQUFHIiwKICAibmFtZXMiOiBbIndpbmRvdyIsICJFcnJvckhhbmRsZXIiLCAiY29udGV4dCIsICJlcnJvciIsICJtZXRhZGF0YSIsICJlcnJvckVudHJ5IiwgImN1cnJlbnRTdGVwIiwgIm1lc3NhZ2UiLCAic3RhdHMiLCAidHlwZSIsICJmYWxsYmFja01lc3NhZ2UiLCAibWVtb3J5U3RvcmFnZSIsICJrZXkiLCAidmFsdWUiLCAicmF3IiwgInMiLCAiciIsICJjIiwgImsiLCAidiIsICJ0b2tlbnNCdG4iLCAiZWwiLCAidGxkU3VmZml4IiwgInByb3h5SXBJbnB1dCIsICJzdWIiLCAiZG5zSWQiLCAiaWQiLCAiaW5mbyIsICJ0b3BSb3ciLCAiZG5zSWRzIiwgInN2Z0ljb24iLCAiZmlyc3RDaGlsZCIsICJzYWZlSWQiLCAibGFiZWwiLCAiY2FyZCIsICJyZXNwb25zZSIsICJ1cmwiLCAib3B0aW9ucyIsICJtZXRob2QiLCAibmVlZHNDc3JmIiwgInRva2VuIiwgImJvZHkiLCAiZnJlc2hUb2tlbiIsICJkYXRhIiwgInJlc3AiLCAicmVzdWx0IiwgIm1zZyIsICJidG4iLCAibG9hZGluZ1RleHQiLCAiYXN5bmNGbiIsICJvcHRzIiwgIm9yaWdpbmFsIiwgInN1Y2Nlc3NUZXh0IiwgInJlc2V0RGVsYXkiLCAiZSIsICJtb2RhbCIsICJjbG9zZUJ0bnMiLCAidGV4dCIsICJkdXJhdGlvbiIsICJleGlzdGluZ05vdGlmIiwgImNvbG9ycyIsICJ0cyIsICJkaWZmIiwgImZhbGxiYWNrIiwgImh0bWwiLCAiZXZlbnQiLCAiZm4iLCAiX2EiLCAiaCIsICJhcHBzIiwgImEiLCAiYXBwIiwgImlkeCIsICJjaGFuZ2VzIiwgImNyZWF0ZVNrZWxldG9uQ2FyZCIsICJzaG93U2tlbGV0b25zIiwgImNvdW50IiwgImdyaWQiLCAiaSIsICJzayIsICJoaWRlU2tlbGV0b25zIiwgInNrZWxldG9ucyIsICJUSEVNRV9LRVkiLCAiVVNFUl9USEVNRVNfS0VZIiwgIkxFR0FDWV9DVVNUT01fS0VZIiwgIkJVSUxUSU5fVEhFTUVTIiwgIlRIRU1FUyIsICJUSEVNRV9QUk9QUyIsICJCQVNFX1BST1BTIiwgIkRFUklWRURfUFJPUFMiLCAiVEhFTUVfQ09MT1JTIiwgImhleFRvUmdiIiwgImhleCIsICJyZ2JUb0hleCIsICJnIiwgImIiLCAieCIsICJibGVuZENvbG9ycyIsICJoZXgxIiwgImhleDIiLCAicmF0aW8iLCAiYzEiLCAiYzIiLCAiaGV4THVtaW5hbmNlIiwgImRlcml2ZUV4dGVuZGVkQ29sb3JzIiwgImJnIiwgImZnIiwgIm11dGVkIiwgImNhcmRCYXNlIiwgImRvdE9rIiwgImRvdEJhZCIsICJpc0xpZ2h0IiwgImRlcml2ZWQiLCAiZ2VuZXJhdGVCb2R5QmFja2dyb3VuZENTUyIsICJzbHVnIiwgImFjY2VudCIsICJhY2NlbnRSZ2IiLCAiZ2VuZXJhdGVCdXR0b25Ib3ZlckNTUyIsICJnZXRTeXN0ZW1UaGVtZSIsICJjbGVhckN1c3RvbVByb3BlcnRpZXMiLCAicHJvcCIsICJzbHVnaWZ5IiwgIm5hbWUiLCAiY3VycmVudFNsdWciLCAiY2FjaGVkIiwgImJhc2UiLCAiY291bnRlciIsICJpbmplY3RVc2VyVGhlbWVTdHlsZXMiLCAidGhlbWVzRGF0YSIsICJleGlzdGluZyIsICJ1c2VyVGhlbWVzIiwgInNsdWdzIiwgImNzcyIsICJ0aGVtZSIsICJjb2xvck1hcCIsICJwIiwgInN0eWxlIiwgInN5bmNUaGVtZXNGcm9tU2VydmVyIiwgInNlcnZlclRoZW1lcyIsICJjdXJyZW50IiwgImFwcGx5VGhlbWUiLCAibWlncmF0ZUxlZ2FjeUN1c3RvbVRoZW1lIiwgImxlZ2FjeSIsICJ0aGVtZURhdGEiLCAibW9kZSIsICJ0IiwgIm1ldGEiLCAic2F2ZWRUaGVtZSIsICJtZXRob2RzQ2FjaGUiLCAiZmV0Y2hNZXRob2RzIiwgInJlcyIsICJzaG93UHJvdmlkZXJTZWxlY3RvciIsICJwcm92aWRlcnMiLCAib3ZlcmxheSIsICJvcmlnaW5hbEJvZHkiLCAicHJvdmlkZXJCdXR0b25zIiwgInByb3ZpZGVyIiwgInJlbmRlclByb3ZpZGVyQ2hhbGxlbmdlIiwgInJlc3RvcmVPcmlnaW5hbEJvZHkiLCAiaW5wdXQiLCAic3VibWl0IiwgInN0YXR1cyIsICJiYWNrIiwgImVtYWlsIiwgInZpYSIsICJtYXNrZWQiLCAic2hvdyIsICJzaG93VG90cFdpdGhFbWFpbEZhbGxiYWNrIiwgInRvdHBQcm92aWRlciIsICJlbWFpbEVuYWJsZWQiLCAiZGl2IiwgImlzQWxsb3dlZFJldHVyblVybCIsICJyZXR1cm5VcmwiLCAicGFyc2VkIiwgInN1ZmZpeCIsICJ1cmxQYXJhbXMiLCAidXBkYXRlVG90cExvZ28iLCAibSIsICJsdW0iLCAiZGFyayIsICJsaWdodCIsICJzaG93VG90cE92ZXJsYXkiLCAiZmlyc3RJbnB1dCIsICJoaWRlVG90cE92ZXJsYXkiLCAiYnVpbGRTc29IYW5kb2ZmVGFyZ2V0IiwgInJlZGlyZWN0IiwgImlzUHJpdmF0ZUhvc3QiLCAicmV0dXJuUGF0aCIsICJjb250YWluZXIiLCAiaW5wdXRzIiwgInZhbCIsICJjb2RlIiwgInN1Ym1pdFRvdHBDb2RlIiwgInBhc3RlZCIsICJpbnAiLCAiZXJyb3JFbCIsICJ0YXJnZXQiLCAiaG9zdG5hbWUiLCAiaXNTYW1lT3JpZ2luIiwgImlzT3VyVGxkIiwgImZldGNoUmVjb3ZlcnlJbmZvIiwgInNob3dSZWNvdmVyeUxpbmsiLCAibGluayIsICJvcGVuUmVjb3ZlcnlQYW5lbCIsICJwYW5lbCIsICJzdGF0dXNFbCIsICJpbXBvcnRFbCIsICJ2ZXJpZnlFbCIsICJjbG9zZVJlY292ZXJ5UGFuZWwiLCAic3VibWl0UmVjb3ZlcnlTZWNyZXQiLCAic2VjcmV0IiwgInN1Ym1pdFJlY292ZXJ5Q29kZSIsICJlcnJvckhhbmRsZXIiLCAiY3VycmVudFNlcnZpY2UiLCAiYXJyU2VydmljZXMiLCAicXVhbGl0eVByb2ZpbGVTZXJ2aWNlcyIsICJnZXRTZXJ2aWNlVXJsIiwgInNlcnZpY2UiLCAic2hvd0Vycm9yIiwgImhpZGVFcnJvciIsICJ0aXRsZSIsICJkZXNjIiwgInNlZWRob3N0U2VjdGlvbiIsICJhcGlrZXlTZWN0aW9uIiwgImJhc2ljU2VjdGlvbiIsICJxdWFsaXR5U2VjdGlvbiIsICJpc0V4dCIsICJpc0FyciIsICJoYXNRdWFsaXR5IiwgInF1YWxTZWxlY3QiLCAibG9hZFNlcnZpY2VDcmVkcyIsICJkb3QiLCAiY2xlYXJCdG4iLCAiaGFzQ3JlZHMiLCAic3ZjSWQiLCAibG9hZFF1YWxpdHlQcm9maWxlcyIsICJxdWFsU3RhdHVzIiwgInN2Y1VybCIsICJwYXJhbXMiLCAib3B0IiwgIm1hdGNoNzIwIiwgImFwaUtleSIsICJzYXZlQnRuIiwgInVzZXIiLCAicGFzcyIsICJxdWFsaXR5UHJvZmlsZUlkIiwgInF1YWxpdHlQcm9maWxlTmFtZSIsICJzZWVkRGF0YSIsICJkIiwgImxvYWRUb3RwU2V0dGluZ3MiLCAiZW5hYmxlZCIsICJzZXNzaW9uRHVyYXRpb24iLCAiaXNTZXRVcCIsICJzdGF0dXNEb3QiLCAic3RhdHVzVGV4dCIsICJzdGF0dXNCYW5uZXIiLCAic2V0dXBTZWN0aW9uIiwgInFyU2VjdGlvbiIsICJkdXJhdGlvblNlY3Rpb24iLCAiZGlzYWJsZVNlY3Rpb24iLCAic2V0dXBCdG4iLCAidXBkYXRlQXV0aENhcmQiLCAiRFVSQVRJT05fTEFCRUxTIiwgImFjdGl2ZSIsICJwaWxsIiwgInBheWxvYWQiLCAiYmxvYiIsICJlcnIiLCAiQVBJIiwgIl9lbCIsICJ0YWciLCAiYXR0cnMiLCAiY2hpbGRyZW4iLCAibm9kZSIsICJfZmV0Y2hKU09OIiwgImNzcmYiLCAiX3JlbmRlckJhZGdlIiwgInJvbGUiLCAiX3JlbmRlclVzZXJzTGlzdCIsICJ1c2VycyIsICJvbkNoYW5nZSIsICJ0YWJsZSIsICJ0Ym9keSIsICJ1IiwgInJvdyIsICJlbWFpbENlbGwiLCAicm9sZUNlbGwiLCAiYWN0aW9uc0NlbGwiLCAicm9sZVNlbGVjdCIsICJldiIsICJkZWxCdG4iLCAiX3JlbmRlckludml0ZUZvcm0iLCAib25Jc3N1ZWQiLCAiZm9ybSIsICJmZCIsICJyb2xlU2VsIiwgIl9yZW5kZXJJbnZpdGVzTGlzdCIsICJpbnZpdGVzIiwgImludiIsICJfcmVuZGVySXNzdWVkSW52aXRlQmFubmVyIiwgImludml0ZSIsICJwYXJlbnQiLCAiYmFubmVyIiwgImNvcHlCdG4iLCAibW91bnQiLCAibWVEYXRhIiwgInJlZnJlc2hCdG4iLCAidXNlcnNIZWFkZXIiLCAidXNlcnNMaXN0IiwgInVzZXJzRGF0YSIsICJhZGRVc2VyRm9ybSIsICJpbnZpdGVGb3JtQ29udGFpbmVyIiwgImludml0ZXNMaXN0IiwgImludml0ZXNEYXRhIiwgImlzc3VlZCIsICJvcGVuIiwgImJhY2tkcm9wIiwgImNsb3NlIiwgImF0dGFjaFRyaWdnZXIiLCAiYmFyQ29udGFpbmVyIiwgIl9tYXliZVNob3ciLCAibWUiLCAiZ2V0RG5zSWRzIiwgImdldERuc0Rpc3BsYXlOYW1lIiwgImJ1aWxkQ3JlZGVudGlhbFNlY3Rpb25zIiwgImdldEVuY3J5cHRpb25LZXkiLCAib2xkS2V5IiwgImFycmF5IiwgIkVOQ1JZUFRJT05fS0VZIiwgImNyZWRlbnRpYWxFbmNyeXB0IiwgIml2IiwgIml2SGV4IiwgImtleUJ5dGVzIiwgImNoYXJDb2RlIiwgImNyZWRlbnRpYWxEZWNyeXB0IiwgImVuY3J5cHRlZFRleHQiLCAiZGVjb2RlZCIsICJnZXRDcmVkZW50aWFsIiwgInRva2VuVHlwZSIsICJjcmVkVHlwZSIsICJlbmNyeXB0ZWQiLCAic2V0Q3JlZGVudGlhbCIsICJnZXRUb2tlbiIsICJnZXRVc2VybmFtZSIsICJzZXRUb2tlbiIsICJzZXRVc2VybmFtZSIsICJ1c2VybmFtZSIsICJnZXRBbGxDcmVkZW50aWFscyIsICJjbGVhckFsbENyZWRlbnRpYWxzIiwgImdldFN0b3JlZENyZWRlbnRpYWxzIiwgInJlYWRvbmx5VG9rZW4iLCAicmVhZG9ubHlVc2VybmFtZSIsICJhZG1pblRva2VuIiwgImFkbWluVXNlcm5hbWUiLCAib2xkVG9rZW4iLCAib2xkVXNlcm5hbWUiLCAiY3JlZHMiLCAidGFyZ2V0SWQiLCAic2VydmVycyIsICJoYXNBbnlDcmVkcyIsICJlbnRyeSIsICJyb1VzZXIiLCAicm9QYXNzIiwgImFkbWluVXNlciIsICJhZG1pblBhc3MiLCAic2V0UXVpY2siLCAidXAiLCAicmVzcG9uc2VUaW1lIiwgInRpbWVFbCIsICJnZXRSZXNwb25zZVRpbWVDbGFzcyIsICJ0aW1lIiwgImlzVXAiLCAiY2hlY2tTZXJ2aWNlV2l0aFRpbWluZyIsICJzdGFydFRpbWUiLCAiZW5kVGltZSIsICJyZWZyZXNoSW5GbGlnaHQiLCAicmVmcmVzaFF1ZXVlZCIsICJsb2FkU2VydmljZXMiLCAic2VydmljZVVybCIsICJzdmMiLCAiZG5zIiwgImNscyIsICJ0eHQiLCAiYnVpbGRHcmlkIiwgInJvb3QiLCAid3JhcCIsICJpbWciLCAiYXBwSWQiLCAiY2RuVXJscyIsICJ1bmlxdWVVcmxzIiwgIm5leHRJbmRleCIsICJuYW1lU3BhbiIsICJ0c0JhZGdlIiwgImNhdEluZm8iLCAiY2F0QmFkZ2UiLCAidXBkYXRlQmFkZ2UiLCAicmVzcG9uc2VSb3ciLCAidGltZVNwYW4iLCAiaGVhbHRoUm93IiwgInVwdGltZUNoaXAiLCAidXB0aW1lTWluaUJhciIsICJ1cHRpbWVGaWxsIiwgImJ0blJvdyIsICJsb2dzQnRuIiwgInVwZGF0ZUJ0biIsICJleGVjQnRuIiwgImNyZWRzQnRuIiwgIm9wdEJ0biIsICJzaGFyZUJ0biIsICJzZXRCYWRnZSIsICJyZWZyZXNoQWxsIiwgInVwZGF0ZVN0YW1wIiwgImNoZWNrZWRBdCIsICJzdGFtcCIsICJhcHBseUJhdGNoUmVzdWx0cyIsICJzdGF0dXNlcyIsICJyZWZyZXNoRmFsbGJhY2siLCAidG9wQ2hlY2tzIiwgInRvcFJlc3VsdHMiLCAiaW50ZXJuZXRSZXN1bHQiLCAiYmF0Y2hFcnJvciIsICJmYWxsYmFja0Vycm9yIiwgIm9wZW5CdG4iLCAicmVzdGFydERuc1NlcnZpY2UiLCAicmVzdGFydEJ0biIsICJ1cGRhdGVEbnNTZXJ2ZXIiLCAic2VydmVySXAiLCAib3JpZ2luYWxUZXh0IiwgImNoZWNrUmVzdWx0IiwgInVwZGF0ZVJlc3VsdCIsICJkb3dubG9hZEluZm8iLCAiaW5zdHJ1Y3Rpb25zSW5mbyIsICJjdXJyZW50RG5zSWQiLCAib3BlbkRuc1NldHRpbmdzIiwgInNlcnZlciIsICJzYXZlRG5zU2V0dGluZ3MiLCAiaXAiLCAicG9ydCIsICJ1cGRhdGUiLCAiY2xvc2VEbnNTZXR0aW5ncyIsICJyZW1vdmVEbnNTZXJ2ZXIiLCAiY29uZmlnIiwgInNldHRpbmdzQnRuIiwgImN1cnJlbnREbnNTZXJ2aWNlIiwgImxvZ3NJbnRlcnZhbCIsICJsb2dzUGF1c2VkIiwgImN1cnJlbnRDb250YWluZXJJZCIsICJjdXJyZW50Q29udGFpbmVyTmFtZSIsICJjb250YWluZXJMb2dzTW9kZSIsICJjdXJyZW50TG9nUGF0aCIsICJjdXJyZW50TG9nU2VydmljZU5hbWUiLCAiZmlsZUxvZ3NNb2RlIiwgImxvZ0V2ZW50U291cmNlIiwgImlzU3RyZWFtaW5nIiwgImZldGNoRG5zTG9ncyIsICJsaW5lcyIsICJzZXJ2ZXJJUCIsICJnZXRSY29kZUNvbG9yIiwgInJjb2RlIiwgInJlbmRlckRuc0xvZ0VudHJ5IiwgImxvZyIsICJyY29kZUNvbG9yIiwgImlzQmxvY2tlZCIsICJ1cGRhdGVMb2dzRGlzcGxheSIsICJ1cGRhdGVGaWxlTG9nc0Rpc3BsYXkiLCAidXBkYXRlQ29udGFpbmVyTG9nc0Rpc3BsYXkiLCAibG9nc0NvbnRlbnQiLCAibG9nRWxlbWVudCIsICJvcGVuTG9nc01vZGFsIiwgInBhdXNlQnRuIiwgInN0cmVhbUJ0biIsICJjbG9zZUxvZ3NNb2RhbCIsICJzdG9wTG9nU3RyZWFtaW5nIiwgInN0YXJ0TG9nU3RyZWFtaW5nIiwgImNvbnRhaW5lcklkIiwgImlzRXJyb3IiLCAibGV2ZWxDb2xvciIsICJsZXZlbEJhZGdlIiwgImZldGNoQ29udGFpbmVyTG9ncyIsICJlbmRwb2ludCIsICJyZW5kZXJDb250YWluZXJMb2dFbnRyeSIsICJzdHJlYW1Db2xvciIsICJzdHJlYW1CYWRnZSIsICJvcGVuQ29udGFpbmVyTG9nc01vZGFsIiwgImNvbnRhaW5lck5hbWUiLCAiZmV0Y2hGaWxlTG9ncyIsICJsb2dQYXRoIiwgInJlbmRlckZpbGVMb2dFbnRyeSIsICJsb2dMZXZlbCIsICJvcGVuRmlsZUxvZ3NNb2RhbCIsICJzZXJ2aWNlTmFtZSIsICJsb2FkRXhpc3RpbmdDQXMiLCAiY2FkZHlmaWxlUGF0aCIsICJzZWxlY3QiLCAiY2EiLCAib3B0aW9uIiwgImdlbmVyYXRlQ2FkZHlDb25maWciLCAic3ViZG9tYWluIiwgInNzbFR5cGUiLCAiY2FOYW1lIiwgImV4aXN0aW5nQ2EiLCAiZW5hYmxlQXV0aCIsICJlbmFibGVDb3JzIiwgImN1c3RvbUhlYWRlcnMiLCAidXBzdHJlYW1QYXRoIiwgImhlYWx0aENoZWNrIiwgInRpbWVvdXQiLCAidGFpbHNjYWxlT25seSIsICJjYWRkeUNvbmZpZyIsICJoZWFkZXJzIiwgImNyZWF0ZURuc1JlY29yZCIsICJ0dGwiLCAiZG5zVG9rZW4iLCAiZG9tYWluIiwgImVycm9yVGV4dCIsICJhZGRTZXJ2aWNlVG9Db25maWciLCAic2VydmljZUNvbmZpZyIsICJuZXdTZXJ2aWNlIiwgImFkZFRvQ2FkZHlmaWxlIiwgImN1cnJlbnRFZGl0U2VydmljZSIsICJvcGVuU2VydmljZUVkaXRNb2RhbCIsICJsb2dvUHJldmlldyIsICJsb2dvU3JjIiwgImNhdGVnb3J5U2VsZWN0IiwgImNsb3NlU2VydmljZUVkaXRNb2RhbCIsICJzYXZlU2VydmljZUNoYW5nZXMiLCAibmV3U3ViZG9tYWluIiwgIm5ld05hbWUiLCAibmV3UG9ydCIsICJuZXdJcCIsICJuZXdMb2dvIiwgIm5ld0NhdGVnb3J5IiwgIm9sZFN1YmRvbWFpbiIsICJhcHBJbmRleCIsICJmaWxlIiwgInJlYWRlciIsICJkYXRhVXJsIiwgInNob3dEZWxldGVNb2RhbCIsICJoYXNDb250YWluZXIiLCAicmVzb2x2ZSIsICJjb250YWluZXJJbmZvIiwgImhlbHAiLCAiY2FuY2VsQnRuIiwgInJlbW92ZUJ0biIsICJkZWxldGVCdG4iLCAiY2xlYW51cCIsICJoYW5kbGVDYW5jZWwiLCAiaGFuZGxlUmVtb3ZlIiwgImhhbmRsZURlbGV0ZSIsICJoYW5kbGVCYWNrZHJvcCIsICJ1cGRhdGVDb250YWluZXIiLCAic2VydmljZUlkIiwgImRlbGV0ZVNlcnZpY2UiLCAiZGVsZXRlQ29udGFpbmVyIiwgInJlc3VsdHMiLCAic2VydmljZUlQIiwgImRuc1Jlc3VsdCIsICJjYWRkeVJlc3VsdCIsICJpbmRleCIsICJjdXN0b21BcHBzIiwgImxvY2FsSW5kZXgiLCAic2VydmljZVJlc3VsdCIsICJoYXNFcnJvcnMiLCAiZXJyb3JNZXNzYWdlcyIsICJzdWNjZXNzU3RhdGVzIiwgImlzU3VjY2VzcyIsICJkZXJpdmVTdWJkb21haW4iLCAiZ2V0U21hcnRTc2xEZWZhdWx0IiwgInVwZGF0ZVNlcnZpY2VQcmV2aWV3IiwgIlFVSUNLX0lQUyIsICJkbnNQcmV2aWV3IiwgInVybFByZXZpZXciLCAiY29uZmlnUHJldmlldyIsICJkZXRlY3ROZXR3b3JrSVBzIiwgImxhbkJ0biIsICJ0c0J0biIsICJpcElucHV0IiwgImluaXRRdWlja0lQQnV0dG9ucyIsICJjdXJyZW50SVAiLCAib3BlbkFkZFNlcnZpY2VNb2RhbCIsICJtb2RhbENvbnRlbnQiLCAic3NsU2VsZWN0IiwgInRhaWxzY2FsZVN0YXR1cyIsICJ0YWlsc2NhbGVDaGVja2JveCIsICJzZXR1cFNlcnZpY2VUeXBlU3dpdGNoaW5nIiwgImxvY2FsUmFkaW8iLCAiZXh0ZXJuYWxSYWRpbyIsICJsb2NhbENvbmZpZyIsICJleHRlcm5hbENvbmZpZyIsICJ0YWJMb2NhbCIsICJ0YWJFeHRlcm5hbCIsICJzd2l0Y2hTZXJ2aWNlVHlwZSIsICJzZXR1cEF1dG9TdWJkb21haW4iLCAibmFtZUlucHV0IiwgInN1YmRvbWFpbklucHV0IiwgInN1YmRvbWFpblByZXZpZXciLCAidXNlckVkaXRlZFN1YmRvbWFpbiIsICJleHROYW1lSW5wdXQiLCAiZXh0U3ViZG9tYWluSW5wdXQiLCAiZXh0U3ViZG9tYWluUHJldmlldyIsICJleHREb21haW5QcmV2aWV3IiwgInVzZXJFZGl0ZWRFeHRTdWJkb21haW4iLCAiY3JlYXRlRXh0ZXJuYWxTZXJ2aWNlIiwgImV4dGVybmFsVXJsIiwgImxvZ28iLCAiaWNvbiIsICJjcmVhdGVEbnMiLCAiY3JlYXRlQ2FkZHkiLCAicHJveHlJcCIsICJwcmVzZXJ2ZUhvc3QiLCAiZm9sbG93UmVkaXJlY3RzIiwgImNhdGVnb3J5IiwgImRlZmF1bHRTZXJ2aWNlcyIsICJjdXN0b21TZXJ2aWNlcyIsICJjbG9zZUFkZFNlcnZpY2VNb2RhbCIsICJwYXJ0cyIsICJzdWJQcmV2IiwgImV4dFN1YlByZXYiLCAiZXh0TmFtZSIsICJleHRTdWIiLCAiZXh0VXJsIiwgImV4dExvZ28iLCAiZXh0SWNvbiIsICJsb2NhbE9wdHMiLCAiZXh0T3B0cyIsICJjcmVhdGVOZXdTZXJ2aWNlIiwgInN0YXR1c1BhcnRzIiwgImV4aXN0aW5nQ2FDb25maWciLCAiY3VzdG9tQ2FDb25maWciLCAiYnV0dG9uIiwgImRuc0NvbmZpZyIsICJlbGVtZW50IiwgImxvYWRDdXN0b21TZXJ2aWNlcyIsICJlcyIsICJyZWNvbm5lY3REZWxheSIsICJNQVhfUkVDT05ORUNUIiwgImNvbm5lY3QiLCAidXBkYXRlc0J0biIsICJzZWFyY2hJbnB1dCIsICJzdGF0dXNTZWxlY3QiLCAiY291bnRTcGFuIiwgImdldENhdGVnb3J5TGlzdCIsICJzZWVuIiwgImZyb21DYXJkcyIsICJjYXQiLCAiYXBpQ2F0cyIsICJyZWZyZXNoQ2F0ZWdvcnlEcm9wZG93biIsICJsaXN0IiwgIm8iLCAidXBkYXRlRmlsdGVyIiwgInF1ZXJ5IiwgInN0YXR1c0ZpbHRlciIsICJjYXRlZ29yeUZpbHRlciIsICJjYXJkcyIsICJ2aXNpYmxlQ291bnQiLCAidG90YWwiLCAiZGVib3VuY2UiLCAiZGVsYXkiLCAiYXJncyIsICJiYXRjaEJ0biIsICJiYXRjaEJhciIsICJiYXRjaENvdW50IiwgInN0YXJ0QnRuIiwgInN0b3BCdG4iLCAiYmF0Y2hNb2RlIiwgInNlbGVjdGVkQ29udGFpbmVycyIsICJlbnRlckJhdGNoTW9kZSIsICJ1cGRhdGVTZWxlY3RlZENvdW50IiwgImNoZWNrYm94IiwgImV4aXRCYXRjaE1vZGUiLCAiY2IiLCAiYmF0Y2hBY3Rpb24iLCAiYWN0aW9uIiwgImNvbnRhaW5lcnMiLCAiYWN0aW9uTGFiZWwiLCAiYnRucyIsICJzdWNjZXNzIiwgImZhaWxlZCIsICJlcnJvcnMiXQp9Cg==
diff --git a/status/js/core/service-crud.js b/status/js/core/service-crud.js
index cf9216c..6bbdb8d 100644
--- a/status/js/core/service-crud.js
+++ b/status/js/core/service-crud.js
@@ -12,7 +12,13 @@
document.getElementById('service-edit-title').textContent = `Edit ${service.name}`;
document.getElementById('edit-service-name').value = service.name;
document.getElementById('edit-service-url-display').textContent = service.url || buildServiceUrl(service.id);
- document.getElementById('edit-service-logo-preview').src = service.logo || `/assets/${service.id}.png`;
+ const logoPreview = document.getElementById('edit-service-logo-preview');
+ const logoSrc = service.logo || `/assets/${service.id}.png`;
+ logoPreview.src = logoSrc;
+ // Hide broken images gracefully instead of showing a broken icon
+ logoPreview.onerror = function() { this.style.display = 'none'; };
+ logoPreview.onload = function() { this.style.display = ''; };
+ logoPreview.style.display = '';
document.getElementById('edit-subdomain').value = service.id;
document.getElementById('edit-port').value = service.port || '';
document.getElementById('edit-ip').value = service.ip || 'localhost';