User:Eejit43/scripts/rmtr-helper.js
Appearance
< User:Eejit43 | scripts
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:Eejit43/scripts/rmtr-helper. |
// <nowiki>
// Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/rmtr-helper.ts
"use strict";(()=>{mw.loader.using(["mediawiki.util"],()=>{if(mw.config.get("wgPageName")!=="Wikipedia:Requested_moves/Technical_requests")return;importStylesheet("User:Eejit43/scripts/rmtr-helper.css");let b=mw.config.get("wgNamespaceIds"),k=!1;mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review move requests","review-rmtr-requests").addEventListener("click",async S=>{if(S.preventDefault(),k)return document.querySelector("#rmtr-review-result")?.scrollIntoView();k=!0;let L=await T(),P=L.revid,N=L.slots.main.content,R=["Uncontroversial technical requests","Requests to revert undiscussed moves","Contested technical requests","Administrator needed"],I=R[2],j=R[3],o={};for(let a of R){let n=N.split(new RegExp(`={3,} ?${a} ?={3,}`))[1].split(/={3,}/m)[0].trim().match(/(?:\* ?\n)?[ *:]*{{rmassist\/core.+?(?=[ *:]*{{rmassist\/core|$)/gis);if(n)o[a]=n.map(i=>{i=i.trim();let c=i,s=i.replaceAll(/(?:\* ?\n)?[ *:]*{{rmassist\/core \||}}.*/gis,"").split(/\s*\|\s*/).map(r=>r.trim()),e=Object.fromEntries(s.map(r=>r.split("=").map(l=>l.trim())));return e.full=c,e.original=e[1]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",e.destination=e[2]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",delete e[1],delete e[2],e});else{o[a]=[];continue}}await Promise.all(Object.entries(o).map(async([,a])=>{await Promise.all(a.map(async t=>{let n=mw.Title.newFromText(t.original),i=mw.Title.newFromText(t.destination);if(!n)return mw.notify(`Invalid title "${t.original}"!`,{type:"error"});if(!i)return mw.notify(`Invalid title "${t.destination}"!`,{type:"error"});let c=!/[#<>[\]{|}]/.test(t.destination)&&i,s=document.createElement("span");s.classList.add("rmtr-review-invalid-warning"),s.textContent=`Invalid title "${t.destination}"!`;let e=![b.file,b.category].some(m=>n.getNamespaceId()===m||i.getNamespaceId()===m),r=document.createElement("span");r.classList.add("rmtr-review-invalid-warning"),r.textContent=`Warning: original or destination page is in namespace "${i.getNamespaceId()===b.file?"file":"category"}"!`;let l=await new mw.Api().parse(`[[:${t.original}]] \u2192 ${c?`[[:${t.destination}]]`:s.outerHTML} requested by ${t.requester?mw.util.isIPAddress(t.requester)?`[[Special:Contributions/${t.requester}|${t.requester}]]`:`[[User:${t.requester}|${t.requester}]]`:/(\[{2}Special:Contributions\/(.*?)\|\2]{2})/.exec(t.sig)?.[1]??"(unknown)"} with reasoning "${t.reason}"`),d=new DOMParser().parseFromString(l,"text/html"),f=document.createElement("li");f.innerHTML=d.querySelector("div.mw-parser-output").firstElementChild.innerHTML,e||f.append(r),t.element=f}))}));let g=document.createElement("div");g.id="rmtr-review-result";let x=document.createElement("div");x.id="rmtr-review-header",x.textContent="Technical move requests review",g.append(x);for(let[a,[t,n]]of Object.entries(o).entries()){let i=document.createElement("div");i.classList.add("rmtr-review-header"),i.textContent=t,g.append(i);let c=document.createElement("div");if(c.classList.add("rmtr-review-section-content"),n.length===0){let s=document.createElement("div");s.textContent="No requests in this section",c.append(s)}else{let s=document.createElement("ul");for(let[e,r]of n.entries()){let l=r.element,d=document.createElement("input");d.type="checkbox",d.classList.add("rmtr-review-request-checkbox"),d.id=`rmtr-review-remove-request-${a}-${e}`,d.addEventListener("change",()=>{d.checked?(o[t][e].result={remove:!0,reason:h.value},m.style.display="inline",p.disabled=!0):(delete o[t][e].result,m.style.display="none",p.disabled=!1)});let f=document.createElement("label");f.htmlFor=`rmtr-review-remove-request-${a}-${e}`,f.textContent="Remove request",l.append(d),l.append(f);let m=document.createElement("span");m.style.display="none",m.append(document.createTextNode(" as "));let h=document.createElement("select");t==="Contested technical requests"&&(h.value="Contested"),h.addEventListener("change",()=>{o[t][e].result.reason=h.value});let O=["Completed","Contested","Already done","Invalid page name","Incorrect venue","Withdrawn","Not done"];for(let y of O){let v=document.createElement("option");v.value=y,v.textContent=y,h.append(v)}m.append(h),l.append(m);let p=document.createElement("input");p.type="checkbox",p.classList.add("rmtr-review-request-checkbox"),p.id=`rmtr-review-move-request-${a}-${e}`,p.addEventListener("change",()=>{p.checked?(o[t][e].result={move:!0,section:q.value},u.style.display="inline",d.disabled=!0):(delete o[t][e].result,u.style.display="none",d.disabled=!1)});let C=document.createElement("label");C.htmlFor=`rmtr-review-move-request-${a}-${e}`,C.textContent="Switch section",l.append(p),l.append(C);let u=document.createElement("span");u.style.display="none",u.append(document.createTextNode(" to "));let q=document.createElement("select");q.addEventListener("change",()=>{o[t][e].result.section=q.value});for(let y of R){if(y===t)continue;let v=document.createElement("option");v.selected=y===(t===I?j:I),v.value=y,v.textContent=y,q.append(v)}u.append(q),u.append(document.createTextNode(" with reasoning "));let E=document.createElement("input");E.type="text",E.addEventListener("input",()=>{o[t][e].result.reason=E.value}),u.append(E),u.append(document.createTextNode(" (optional, automatically pings requestor and signs)")),l.append(u),s.append(l)}c.append(s)}g.append(c)}let w=document.createElement("button");w.id="rmtr-review-submit",w.textContent="Submit",w.addEventListener("click",async()=>{if((await T()).revid!==P)return mw.notify("rmtr-helper: An edit conflict occurred, please start over!",{type:"error"});w.disabled=!0,$.style.display="inline-block";let t=N,n={remove:{},move:{},total:0};for(let s of Object.values(o))for(let e of s)if(e.result){if("remove"in e.result)t=t.replace(e.full+`
`,"").replace(e.full,""),e.result.reason in n.remove||(n.remove[e.result.reason]=[]),n.remove[e.result.reason].push(e),n.total++;else if("move"in e.result){let r=R[R.indexOf(e.result.section)+1];t=t.replace(e.full+`
`,"").replace(e.full,""),t=t.replace(new RegExp(`(
?
?(?:={3,} ?${r} ?={3,}|$))`),`
${e.full}${e.result.reason?`
:: ${e.requester&&e.requester.length>0?mw.util.isIPAddress(e.requester)?"":`@[[User:${e.requester}|${e.requester}]] `:""} ${e.result.reason} ~~~~`:""}$1`),e.result.section in n.move||(n.move[e.result.section]=[]),n.move[e.result.section].push(e),n.total++}}if(n.total===0)return w.disabled=!1,$.style.display="none",mw.notify("No changes to make!",{type:"error"});let i=Object.values(o).every(s=>s.every(e=>e.result&&"remove"in e.result)),c=`Handled ${n.total} request${n.total>1?"s":""}: ${Object.entries(n.remove).length>0?`Removed ${Object.entries(n.remove).map(([s,e])=>`${e.map(r=>`[[${r.original}]]`).join(", ")} as ${s.toLowerCase()}`).join(", ")}`:""}${Object.entries(n.move).length>0?`${Object.entries(n.remove).length>0?", ":""}Moved ${Object.entries(n.move).map(([s,e])=>`${e.map(r=>`[[${r.original}]]`).join(", ")} to "${s}"`).join(", ")}`:""}${i?" (no requests remain)":""} (via [[User:Eejit43/scripts/rmtr-helper|script]])`;await new mw.Api().edit(mw.config.get("wgPageName"),()=>({text:t,summary:c})),mw.notify(`Successfully handled ${n.total} requests, reloading...`,{type:"success"}),window.location.reload()});let $=document.createElement("span");$.id="rmtr-review-loading",$.style.display="none",w.append($),g.append(w),mw.util.$content[0].prepend(g),g.scrollIntoView()})});async function T(){return(await new mw.Api().get({action:"query",formatversion:"2",prop:"revisions",rvprop:["content","ids"],rvslots:"main",titles:mw.config.get("wgPageName")})).query.pages[0].revisions[0]}})();
// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy9ybXRyLWhlbHBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyB9IGZyb20gJ3R5cGVzLW1lZGlhd2lraS9hcGlfcGFyYW1zJztcbmltcG9ydCB0eXBlIHsgUGFnZVJldmlzaW9uc1Jlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC10eXBlcyc7XG5cbm13LmxvYWRlci51c2luZyhbJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICBpZiAobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpICE9PSAnV2lraXBlZGlhOlJlcXVlc3RlZF9tb3Zlcy9UZWNobmljYWxfcmVxdWVzdHMnKSByZXR1cm47XG5cbiAgICBpbXBvcnRTdHlsZXNoZWV0KCdVc2VyOkVlaml0NDMvc2NyaXB0cy9ybXRyLWhlbHBlci5jc3MnKTtcblxuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpO1xuXG4gICAgbGV0IGRpc3BsYXllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGluayA9IG13LnV0aWwuYWRkUG9ydGxldExpbmsoXG4gICAgICAgIG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ21pbmVydmEnID8gJ3AtdGInIDogJ3AtY2FjdGlvbnMnLFxuICAgICAgICAnIycsXG4gICAgICAgICdSZXZpZXcgbW92ZSByZXF1ZXN0cycsXG4gICAgICAgICdyZXZpZXctcm10ci1yZXF1ZXN0cycsXG4gICAgKSE7XG5cbiAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKGRpc3BsYXllZCkgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNybXRyLXJldmlldy1yZXN1bHQnKT8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgZWxzZSBkaXNwbGF5ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VSZXZpc2lvbiA9IGF3YWl0IGdldFBhZ2VSZXZpc2lvbigpO1xuXG4gICAgICAgIGNvbnN0IHJldklkID0gcGFnZVJldmlzaW9uLnJldmlkO1xuICAgICAgICBjb25zdCBwYWdlQ29udGVudCA9IHBhZ2VSZXZpc2lvbi5zbG90cy5tYWluLmNvbnRlbnQ7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgICAgICAnVW5jb250cm92ZXJzaWFsIHRlY2huaWNhbCByZXF1ZXN0cycsXG4gICAgICAgICAgICAnUmVxdWVzdHMgdG8gcmV2ZXJ0IHVuZGlzY3Vzc2VkIG1vdmVzJyxcbiAgICAgICAgICAgICdDb250ZXN0ZWQgdGVjaG5pY2FsIHJlcXVlc3RzJyxcbiAgICAgICAgICAgICdBZG1pbmlzdHJhdG9yIG5lZWRlZCcsXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdE1vdmVTZWN0aW9uID0gc2VjdGlvbnNbMl07XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrRGVmYXVsdE1vdmVTZWN0aW9uID0gc2VjdGlvbnNbM107XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgICAgICAgc2lnOiBzdHJpbmc7XG4gICAgICAgICAgICByZXF1ZXN0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgZWxlbWVudDogSFRNTExJRWxlbWVudDtcbiAgICAgICAgICAgIHJlc3VsdD86IFJlcXVlc3RSZXN1bHRNb3ZlIHwgUmVxdWVzdFJlc3VsdFJlbW92ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGludGVyZmFjZSBSZXF1ZXN0UmVzdWx0TW92ZSB7XG4gICAgICAgICAgICBtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgc2VjdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgcmVhc29uPzogc3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3RSZXN1bHRSZW1vdmUge1xuICAgICAgICAgICAgcmVtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPiA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkNvbnRlbnQgPSBwYWdlQ29udGVudFxuICAgICAgICAgICAgICAgIC5zcGxpdChuZXcgUmVnRXhwKGA9ezMsfSA/JHtzZWN0aW9ufSA/PXszLH1gKSlbMV1cbiAgICAgICAgICAgICAgICAuc3BsaXQoLz17Myx9L20pWzBdXG4gICAgICAgICAgICAgICAgLnRyaW0oKTtcblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFJlcXVlc3RzID0gc2VjdGlvbkNvbnRlbnQubWF0Y2goLyg/OlxcKiA/XFxuKT9bICo6XSp7e3JtYXNzaXN0XFwvY29yZS4rPyg/PVsgKjpdKnt7cm1hc3Npc3RcXC9jb3JlfCQpL2dpcyk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVkUmVxdWVzdHMpXG4gICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl0gPSBtYXRjaGVkUmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVsbCA9IHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgvKD86XFwqID9cXG4pP1sgKjpdKnt7cm1hc3Npc3RcXC9jb3JlIFxcfHx9fS4qL2dpcywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoL1xccypcXHxcXHMqLylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnRyaW0oKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxQYXJhbWV0ZXJzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnNwbGl0KCc9JykubWFwKCh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpKSksXG4gICAgICAgICAgICAgICAgICAgICkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuICAgICAgICAgICAgICAgICAgICBmaW5hbFBhcmFtZXRlcnMuZnVsbCA9IGZ1bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgZmluYWxQYXJhbWV0ZXJzLm9yaWdpbmFsID0gZmluYWxQYXJhbWV0ZXJzWzFdPy5yZXBsYWNlKC9eXFxbKy8sICcnKS5yZXBsYWNlKC9dKyQvLCAnJykgPz8gJ1VOS05PV04nO1xuICAgICAgICAgICAgICAgICAgICBmaW5hbFBhcmFtZXRlcnMuZGVzdGluYXRpb24gPSBmaW5hbFBhcmFtZXRlcnNbMl0/LnJlcGxhY2UoL15cXFsrLywgJycpLnJlcGxhY2UoL10rJC8sICcnKSA/PyAnVU5LTk9XTic7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbmFsUGFyYW1ldGVyc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbmFsUGFyYW1ldGVyc1syXTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxQYXJhbWV0ZXJzIGFzIHVua25vd24gYXMgUmVxdWVzdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzW3NlY3Rpb25dID0gW107XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGFsbFJlcXVlc3RzKS5tYXAoYXN5bmMgKFssIHJlcXVlc3RzXSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy5tYXAoYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG13T2xkVGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChyZXF1ZXN0Lm9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG13TmV3VGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChyZXF1ZXN0LmRlc3RpbmF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtd09sZFRpdGxlKSByZXR1cm4gbXcubm90aWZ5KGBJbnZhbGlkIHRpdGxlIFwiJHtyZXF1ZXN0Lm9yaWdpbmFsfVwiIWAsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXdOZXdUaXRsZSkgcmV0dXJuIG13Lm5vdGlmeShgSW52YWxpZCB0aXRsZSBcIiR7cmVxdWVzdC5kZXN0aW5hdGlvbn1cIiFgLCB7IHR5cGU6ICdlcnJvcicgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkVGl0bGUgPSAhL1sjPD5bXFxde3x9XS8udGVzdChyZXF1ZXN0LmRlc3RpbmF0aW9uKSAmJiBtd05ld1RpdGxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkVGl0bGVXYXJuaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFRpdGxlV2FybmluZy5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1pbnZhbGlkLXdhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRUaXRsZVdhcm5pbmcudGV4dENvbnRlbnQgPSBgSW52YWxpZCB0aXRsZSBcIiR7cmVxdWVzdC5kZXN0aW5hdGlvbn1cIiFgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZE5hbWVzcGFjZSA9ICFbbmFtZXNwYWNlcy5maWxlLCBuYW1lc3BhY2VzLmNhdGVnb3J5XS5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lc3BhY2UpID0+IG13T2xkVGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSA9PT0gbmFtZXNwYWNlIHx8IG13TmV3VGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSA9PT0gbmFtZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkTmFtZXNwYWNlV2FybmluZy5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1pbnZhbGlkLXdhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWROYW1lc3BhY2VXYXJuaW5nLnRleHRDb250ZW50ID0gYFdhcm5pbmc6IG9yaWdpbmFsIG9yIGRlc3RpbmF0aW9uIHBhZ2UgaXMgaW4gbmFtZXNwYWNlIFwiJHttd05ld1RpdGxlLmdldE5hbWVzcGFjZUlkKCkgPT09IG5hbWVzcGFjZXMuZmlsZSA/ICdmaWxlJyA6ICdjYXRlZ29yeSd9XCIhYDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkV2lraXRleHQgPSBhd2FpdCBuZXcgbXcuQXBpKCkucGFyc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFtbOiR7cmVxdWVzdC5vcmlnaW5hbH1dXSBcdTIxOTIgJHt2YWxpZFRpdGxlID8gYFtbOiR7cmVxdWVzdC5kZXN0aW5hdGlvbn1dXWAgOiBpbnZhbGlkVGl0bGVXYXJuaW5nLm91dGVySFRNTH0gcmVxdWVzdGVkIGJ5ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVxdWVzdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG13LnV0aWwuaXNJUEFkZHJlc3MocmVxdWVzdC5yZXF1ZXN0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgW1tTcGVjaWFsOkNvbnRyaWJ1dGlvbnMvJHtyZXF1ZXN0LnJlcXVlc3Rlcn18JHtyZXF1ZXN0LnJlcXVlc3Rlcn1dXWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGBbW1VzZXI6JHtyZXF1ZXN0LnJlcXVlc3Rlcn18JHtyZXF1ZXN0LnJlcXVlc3Rlcn1dXWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKC8oXFxbezJ9U3BlY2lhbDpDb250cmlidXRpb25zXFwvKC4qPylcXHxcXDJdezJ9KS8uZXhlYyhyZXF1ZXN0LnNpZyk/LlsxXSA/PyAnKHVua25vd24pJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdpdGggcmVhc29uaW5nIFwiJHtyZXF1ZXN0LnJlYXNvbn1cImAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkSHRtbCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocGFyc2VkV2lraXRleHQsICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuaW5uZXJIVE1MID0gcGFyc2VkSHRtbC5xdWVyeVNlbGVjdG9yKCdkaXYubXctcGFyc2VyLW91dHB1dCcpIS5maXJzdEVsZW1lbnRDaGlsZCEuaW5uZXJIVE1MITtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZE5hbWVzcGFjZSkgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKGludmFsaWROYW1lc3BhY2VXYXJuaW5nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5lbGVtZW50ID0gcmVxdWVzdEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIG91dHB1dEVsZW1lbnQuaWQgPSAncm10ci1yZXZpZXctcmVzdWx0JztcblxuICAgICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaGVhZGVyLmlkID0gJ3JtdHItcmV2aWV3LWhlYWRlcic7XG4gICAgICAgIGhlYWRlci50ZXh0Q29udGVudCA9ICdUZWNobmljYWwgbW92ZSByZXF1ZXN0cyByZXZpZXcnO1xuXG4gICAgICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kKGhlYWRlcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBbc2VjdGlvbkluZGV4LCBbc2VjdGlvbiwgcmVxdWVzdHNdXSBvZiBPYmplY3QuZW50cmllcyhhbGxSZXF1ZXN0cykuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzZWN0aW9uSGVhZGVyLmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LWhlYWRlcicpO1xuICAgICAgICAgICAgc2VjdGlvbkhlYWRlci50ZXh0Q29udGVudCA9IHNlY3Rpb247XG5cbiAgICAgICAgICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kKHNlY3Rpb25IZWFkZXIpO1xuXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uQ29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2VjdGlvbkNvbnRlbnQuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctc2VjdGlvbi1jb250ZW50Jyk7XG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub1JlcXVlc3RzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbm9SZXF1ZXN0cy50ZXh0Q29udGVudCA9ICdObyByZXF1ZXN0cyBpbiB0aGlzIHNlY3Rpb24nO1xuXG4gICAgICAgICAgICAgICAgc2VjdGlvbkNvbnRlbnQuYXBwZW5kKG5vUmVxdWVzdHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0c0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbcmVxdWVzdEluZGV4LCByZXF1ZXN0XSBvZiByZXF1ZXN0cy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdEVsZW1lbnQgPSByZXF1ZXN0LmVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdENoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctcmVxdWVzdC1jaGVja2JveCcpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guaWQgPSBgcm10ci1yZXZpZXctcmVtb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlUmVxdWVzdENoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdCA9IHsgcmVtb3ZlOiB0cnVlLCByZWFzb246IHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0TGFiZWwuaHRtbEZvciA9IGBybXRyLXJldmlldy1yZW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdExhYmVsLnRleHRDb250ZW50ID0gJ1JlbW92ZSByZXF1ZXN0JztcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdENoZWNrYm94KTtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHJlbW92ZVJlcXVlc3RMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgYXMgJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3REcm9wZG93biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbiA9PT0gJ0NvbnRlc3RlZCB0ZWNobmljYWwgcmVxdWVzdHMnKSByZW1vdmVSZXF1ZXN0RHJvcGRvd24udmFsdWUgPSAnQ29udGVzdGVkJztcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdERyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdCBhcyBSZXF1ZXN0UmVzdWx0UmVtb3ZlKS5yZWFzb24gPSByZW1vdmVSZXF1ZXN0RHJvcGRvd24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3REcm9wZG93bk9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29tcGxldGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZXN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FscmVhZHkgZG9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBwYWdlIG5hbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0luY29ycmVjdCB2ZW51ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnV2l0aGRyYXduJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdOb3QgZG9uZScsXG4gICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgcmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3REcm9wZG93bi5hcHBlbmQob3B0aW9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuYXBwZW5kKHJlbW92ZVJlcXVlc3REcm9wZG93bik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctcmVxdWVzdC1jaGVja2JveCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guaWQgPSBgcm10ci1yZXZpZXctbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN3aXRjaFNlY3Rpb25DaGVja2JveC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRNb3ZlKSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc3dpdGNoU2VjdGlvbkRyb3Bkb3duLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25MYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25MYWJlbC5odG1sRm9yID0gYHJtdHItcmV2aWV3LW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkxhYmVsLnRleHRDb250ZW50ID0gJ1N3aXRjaCBzZWN0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkNoZWNrYm94KTtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHN3aXRjaFNlY3Rpb25MYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgdG8gJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25Ecm9wZG93biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRNb3ZlKS5zZWN0aW9uID0gc3dpdGNoU2VjdGlvbkRyb3Bkb3duLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gc2VjdGlvbikgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQuc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9PT0gKHNlY3Rpb24gPT09IGRlZmF1bHRNb3ZlU2VjdGlvbiA/IGZhbGxiYWNrRGVmYXVsdE1vdmVTZWN0aW9uIDogZGVmYXVsdE1vdmVTZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRHJvcGRvd24uYXBwZW5kKG9wdGlvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChzd2l0Y2hTZWN0aW9uRHJvcGRvd24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyB3aXRoIHJlYXNvbmluZyAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvblJlYXNvbmluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25SZWFzb25pbmcudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvblJlYXNvbmluZy5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdCBhcyBSZXF1ZXN0UmVzdWx0UmVtb3ZlKS5yZWFzb24gPSBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKHN3aXRjaFNlY3Rpb25SZWFzb25pbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAob3B0aW9uYWwsIGF1dG9tYXRpY2FsbHkgcGluZ3MgcmVxdWVzdG9yIGFuZCBzaWducyknKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHNMaXN0LmFwcGVuZChyZXF1ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VjdGlvbkNvbnRlbnQuYXBwZW5kKHJlcXVlc3RzTGlzdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kKHNlY3Rpb25Db250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBzdWJtaXRCdXR0b24uaWQgPSAncm10ci1yZXZpZXctc3VibWl0JztcbiAgICAgICAgc3VibWl0QnV0dG9uLnRleHRDb250ZW50ID0gJ1N1Ym1pdCc7XG4gICAgICAgIHN1Ym1pdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhZ2VSZXZpc2lvbiA9IGF3YWl0IGdldFBhZ2VSZXZpc2lvbigpO1xuXG4gICAgICAgICAgICBpZiAobmV3UGFnZVJldmlzaW9uLnJldmlkICE9PSByZXZJZClcbiAgICAgICAgICAgICAgICByZXR1cm4gbXcubm90aWZ5KCdybXRyLWhlbHBlcjogQW4gZWRpdCBjb25mbGljdCBvY2N1cnJlZCwgcGxlYXNlIHN0YXJ0IG92ZXIhJywgeyB0eXBlOiAnZXJyb3InIH0pO1xuXG4gICAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuXG4gICAgICAgICAgICBsZXQgZW5kUmVzdWx0ID0gcGFnZUNvbnRlbnQ7XG5cbiAgICAgICAgICAgIGludGVyZmFjZSBBbGxDaGFuZ2VzIHtcbiAgICAgICAgICAgICAgICByZW1vdmU6IFJlY29yZDxzdHJpbmcsIFJlcXVlc3RbXT47XG4gICAgICAgICAgICAgICAgbW92ZTogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPjtcbiAgICAgICAgICAgICAgICB0b3RhbDogbnVtYmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VzOiBBbGxDaGFuZ2VzID0geyByZW1vdmU6IHt9LCBtb3ZlOiB7fSwgdG90YWw6IDAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIE9iamVjdC52YWx1ZXMoYWxsUmVxdWVzdHMpKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiBzZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdC5yZXN1bHQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgncmVtb3ZlJyBpbiByZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UocmVxdWVzdC5mdWxsICsgJ1xcbicsICcnKS5yZXBsYWNlKHJlcXVlc3QuZnVsbCwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVxdWVzdC5yZXN1bHQucmVhc29uIGluIGNoYW5nZXMucmVtb3ZlKSkgY2hhbmdlcy5yZW1vdmVbcmVxdWVzdC5yZXN1bHQucmVhc29uXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5yZW1vdmVbcmVxdWVzdC5yZXN1bHQucmVhc29uXS5wdXNoKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy50b3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdtb3ZlJyBpbiByZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvblRpdGxlQWZ0ZXIgPSBzZWN0aW9uc1tzZWN0aW9ucy5pbmRleE9mKHJlcXVlc3QucmVzdWx0LnNlY3Rpb24pICsgMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJlc3VsdCA9IGVuZFJlc3VsdC5yZXBsYWNlKHJlcXVlc3QuZnVsbCArICdcXG4nLCAnJykucmVwbGFjZShyZXF1ZXN0LmZ1bGwsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJlc3VsdCA9IGVuZFJlc3VsdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoYChcXG4/XFxuPyg/Oj17Myx9ID8ke3NlY3Rpb25UaXRsZUFmdGVyfSA/PXszLH18JCkpYCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxcbiR7cmVxdWVzdC5mdWxsfSR7cmVxdWVzdC5yZXN1bHQucmVhc29uID8gYFxcbjo6ICR7cmVxdWVzdC5yZXF1ZXN0ZXIgJiYgcmVxdWVzdC5yZXF1ZXN0ZXIubGVuZ3RoID4gMCA/IChtdy51dGlsLmlzSVBBZGRyZXNzKHJlcXVlc3QucmVxdWVzdGVyKSA/ICcnIDogYEBbW1VzZXI6JHtyZXF1ZXN0LnJlcXVlc3Rlcn18JHtyZXF1ZXN0LnJlcXVlc3Rlcn1dXSBgKSA6ICcnfSAke3JlcXVlc3QucmVzdWx0LnJlYXNvbn0gfn5+fmAgOiAnJ30kMWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVxdWVzdC5yZXN1bHQuc2VjdGlvbiBpbiBjaGFuZ2VzLm1vdmUpKSBjaGFuZ2VzLm1vdmVbcmVxdWVzdC5yZXN1bHQuc2VjdGlvbl0gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5tb3ZlW3JlcXVlc3QucmVzdWx0LnNlY3Rpb25dLnB1c2gocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnRvdGFsKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbXcubm90aWZ5KCdObyBjaGFuZ2VzIHRvIG1ha2UhJywgeyB0eXBlOiAnZXJyb3InIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBub1JlbWFpbmluZyA9IE9iamVjdC52YWx1ZXMoYWxsUmVxdWVzdHMpLmV2ZXJ5KChzZWN0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZXZlcnkoKHJlcXVlc3QpID0+IHJlcXVlc3QucmVzdWx0ICYmICdyZW1vdmUnIGluIHJlcXVlc3QucmVzdWx0KSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVkaXRTdW1tYXJ5ID0gYEhhbmRsZWQgJHtjaGFuZ2VzLnRvdGFsfSByZXF1ZXN0JHtjaGFuZ2VzLnRvdGFsID4gMSA/ICdzJyA6ICcnfTogJHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IGBSZW1vdmVkICR7T2JqZWN0LmVudHJpZXMoY2hhbmdlcy5yZW1vdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKFtyZWFzb24sIHBhZ2VzXSkgPT4gYCR7cGFnZXMubWFwKChwYWdlKSA9PiBgW1ske3BhZ2Uub3JpZ2luYWx9XV1gKS5qb2luKCcsICcpfSBhcyAke3JlYXNvbi50b0xvd2VyQ2FzZSgpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfSR7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcy5tb3ZlKS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gYCR7T2JqZWN0LmVudHJpZXMoY2hhbmdlcy5yZW1vdmUpLmxlbmd0aCA+IDAgPyAnLCAnIDogJyd9TW92ZWQgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLm1vdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKFtkZXN0aW5hdGlvbiwgcGFnZXNdKSA9PiBgJHtwYWdlcy5tYXAoKHBhZ2UpID0+IGBbWyR7cGFnZS5vcmlnaW5hbH1dXWApLmpvaW4oJywgJyl9IHRvIFwiJHtkZXN0aW5hdGlvbn1cImApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfSR7bm9SZW1haW5pbmcgPyAnIChubyByZXF1ZXN0cyByZW1haW4pJyA6ICcnfSAodmlhIFtbVXNlcjpFZWppdDQzL3NjcmlwdHMvcm10ci1oZWxwZXJ8c2NyaXB0XV0pYDtcblxuICAgICAgICAgICAgYXdhaXQgbmV3IG13LkFwaSgpLmVkaXQobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLCAoKSA9PiAoeyB0ZXh0OiBlbmRSZXN1bHQsIHN1bW1hcnk6IGVkaXRTdW1tYXJ5IH0pKTtcblxuICAgICAgICAgICAgbXcubm90aWZ5KGBTdWNjZXNzZnVsbHkgaGFuZGxlZCAke2NoYW5nZXMudG90YWx9IHJlcXVlc3RzLCByZWxvYWRpbmcuLi5gLCB7IHR5cGU6ICdzdWNjZXNzJyB9KTtcblxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBsb2FkaW5nU3Bpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbG9hZGluZ1NwaW5uZXIuaWQgPSAncm10ci1yZXZpZXctbG9hZGluZyc7XG4gICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgc3VibWl0QnV0dG9uLmFwcGVuZChsb2FkaW5nU3Bpbm5lcik7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc3VibWl0QnV0dG9uKTtcblxuICAgICAgICBtdy51dGlsLiRjb250ZW50WzBdLnByZXBlbmQob3V0cHV0RWxlbWVudCk7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgIH0pO1xufSk7XG5cbi8qKlxuICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBhIHdpa2kgcGFnZSdzIGxhdGVzdCByZXZpc2lvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVJldmlzaW9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIChhd2FpdCBuZXcgbXcuQXBpKCkuZ2V0KHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3F1ZXJ5JyxcbiAgICAgICAgICAgIGZvcm1hdHZlcnNpb246ICcyJyxcbiAgICAgICAgICAgIHByb3A6ICdyZXZpc2lvbnMnLFxuICAgICAgICAgICAgcnZwcm9wOiBbJ2NvbnRlbnQnLCAnaWRzJ10sXG4gICAgICAgICAgICBydnNsb3RzOiAnbWFpbicsXG4gICAgICAgICAgICB0aXRsZXM6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMpKSBhcyBQYWdlUmV2aXNpb25zUmVzdWx0XG4gICAgKS5xdWVyeSEucGFnZXNbMF0ucmV2aXNpb25zWzBdO1xufVxuIl0sCiAg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Q3ZGLElBQUksQ0FBQyxDQUFDTyxFQUFhRixDQUFLLElBQU0sR0FBR0EsRUFBTSxJQUFLQyxHQUFTLEtBQUtBLEVBQUssUUFBUSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUUMsQ0FBVyxHQUFHLEVBQzdHLEtBQUssSUFBSSxDQUFDLEdBQ2YsRUFDVixHQUFHTCxFQUFjLHdCQUEwQixFQUFFLHFEQUU3QyxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLE9BQU8sSUFBSSxZQUFZLEVBQUcsS0FBTyxDQUFFLEtBQU1ILEVBQVcsUUFBU0ksQ0FBWSxFQUFFLEVBRXRHLEdBQUcsT0FBTyx3QkFBd0JILEVBQVEsS0FBSywwQkFBMkIsQ0FBRSxLQUFNLFNBQVUsQ0FBQyxFQUU3RixPQUFPLFNBQVMsT0FBTyxDQUMzQixDQUFDLEVBRUQsSUFBTUYsRUFBaUIsU0FBUyxjQUFjLE1BQU0sRUFDcERBLEVBQWUsR0FBSyxzQkFDcEJBLEVBQWUsTUFBTSxRQUFVLE9BRS9CRCxFQUFhLE9BQU9DLENBQWMsRUFFbENyQixFQUFjLE9BQU9vQixDQUFZLEVBRWpDLEdBQUcsS0FBSyxTQUFTLENBQUMsRUFBRSxRQUFRcEIsQ0FBYSxFQUV6Q0EsRUFBYyxlQUFlLENBQ2pDLENBQUMsQ0FDTCxDQUFDLEVBS0QsZUFBZTFCLEdBQWtCLENBQzdCLE9BQ0ssTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FDcEIsT0FBUSxRQUNSLGNBQWUsSUFDZixLQUFNLFlBQ04sT0FBUSxDQUFDLFVBQVcsS0FBSyxFQUN6QixRQUFTLE9BQ1QsT0FBUSxHQUFHLE9BQU8sSUFBSSxZQUFZLENBQ3RDLENBQW1DLEdBQ3JDLE1BQU8sTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQ2pDIiwKICAibmFtZXMiOiBbIm5hbWVzcGFjZXMiLCAiZGlzcGxheWVkIiwgImV2ZW50IiwgInBhZ2VSZXZpc2lvbiIsICJnZXRQYWdlUmV2aXNpb24iLCAicmV2SWQiLCAicGFnZUNvbnRlbnQiLCAic2VjdGlvbnMiLCAiZGVmYXVsdE1vdmVTZWN0aW9uIiwgImZhbGxiYWNrRGVmYXVsdE1vdmVTZWN0aW9uIiwgImFsbFJlcXVlc3RzIiwgInNlY3Rpb24iLCAibWF0Y2hlZFJlcXVlc3RzIiwgInJlcXVlc3QiLCAiZnVsbCIsICJwYXJhbWV0ZXJzIiwgInBhcmFtZXRlciIsICJmaW5hbFBhcmFtZXRlcnMiLCAidmFsdWUiLCAicmVxdWVzdHMiLCAibXdPbGRUaXRsZSIsICJtd05ld1RpdGxlIiwgInZhbGlkVGl0bGUiLCAiaW52YWxpZFRpdGxlV2FybmluZyIsICJ2YWxpZE5hbWVzcGFjZSIsICJuYW1lc3BhY2UiLCAiaW52YWxpZE5hbWVzcGFjZVdhcm5pbmciLCAicGFyc2VkV2lraXRleHQiLCAicGFyc2VkSHRtbCIsICJyZXF1ZXN0RWxlbWVudCIsICJvdXRwdXRFbGVtZW50IiwgImhlYWRlciIsICJzZWN0aW9uSW5kZXgiLCAic2VjdGlvbkhlYWRlciIsICJzZWN0aW9uQ29udGVudCIsICJub1JlcXVlc3RzIiwgInJlcXVlc3RzTGlzdCIsICJyZXF1ZXN0SW5kZXgiLCAicmVtb3ZlUmVxdWVzdENoZWNrYm94IiwgInJlbW92ZVJlcXVlc3REcm9wZG93biIsICJyZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMiLCAic3dpdGNoU2VjdGlvbkNoZWNrYm94IiwgInJlbW92ZVJlcXVlc3RMYWJlbCIsICJyZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zIiwgIm9wdGlvbiIsICJvcHRpb25FbGVtZW50IiwgInN3aXRjaFNlY3Rpb25Ecm9wZG93biIsICJzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMiLCAic3dpdGNoU2VjdGlvbkxhYmVsIiwgInN3aXRjaFNlY3Rpb25SZWFzb25pbmciLCAic3VibWl0QnV0dG9uIiwgImxvYWRpbmdTcGlubmVyIiwgImVuZFJlc3VsdCIsICJjaGFuZ2VzIiwgInNlY3Rpb25UaXRsZUFmdGVyIiwgIm5vUmVtYWluaW5nIiwgImVkaXRTdW1tYXJ5IiwgInJlYXNvbiIsICJwYWdlcyIsICJwYWdlIiwgImRlc3RpbmF0aW9uIl0KfQo=