Jump to content

User:Eejit43/scripts/rmtr-helper.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Eejit43 (talk | contribs) at 15:08, 26 August 2024 (Syncing script from GitHub (via script)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <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");const x=mw.config.get("wgNamespaceIds");let N=!1;mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review move requests","review-rmtr-requests").addEventListener("click",async a=>{if(a.preventDefault(),N)return document.querySelector("#rmtr-review-result")?.scrollIntoView();N=!0;const w=await getPageRevision(),$=w.revid,f=w.slots.main.content,u=["Uncontroversial technical requests","Requests to revert undiscussed moves","Contested technical requests","Administrator needed"],o={};for(const l of u){const n=f.split(new RegExp(`={3,} ?${l} ?={3,}`))[1].split(/={3,}/m)[0].trim().match(/(?:\* ?\n)?[ *:]*{{rmassist\/core.+?(?=[ *:]*{{rmassist\/core|$)/gis);if(n)o[l]=n.map(i=>{i=i.trim();const m=i,s=i.replaceAll(/(?:\* ?\n)?[ *:]*{{rmassist\/core \||}}.*/gis,"").split(/\s*\|\s*/).map(r=>r.trim()),e=Object.fromEntries(s.map(r=>r.split(" = ").map(c=>c.trim())));return e.full=m,e.original=e[1]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",e.destination=e[2]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",delete e[1],delete e[2],e});else{o[l]=[];continue}}await Promise.all(Object.entries(o).map(async([,l])=>{await Promise.all(l.map(async t=>{const 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"});const m=!/[#<>[\]{|}]/.test(t.destination)&&i,s=document.createElement("span");s.classList.add("rmtr-review-invalid-warning"),s.textContent=`Invalid title "${t.destination}"!`;const e=![x.file,x.category].some(p=>n.getNamespaceId()===p||i.getNamespaceId()===p),r=document.createElement("span");r.classList.add("rmtr-review-invalid-warning"),r.textContent=`Warning: original or destination page is in namespace "${i.getNamespaceId()===x.file?"file":"category"}"!`;const c=await new mw.Api().parse(`[[:${t.original}]] \u2192 ${m?`[[:${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(c,"text/html"),R=document.createElement("li");R.innerHTML=d.querySelector("div.mw-parser-output").firstElementChild.innerHTML,e||R.append(r),t.element=R}))}));const h=document.createElement("div");h.id="rmtr-review-result";const L=document.createElement("div");L.id="rmtr-review-header",L.textContent="Technical move requests review",h.append(L);for(const[l,[t,n]]of Object.entries(o).entries()){const i=document.createElement("div");i.classList.add("rmtr-review-header"),i.textContent=t,h.append(i);const m=document.createElement("div");if(m.classList.add("rmtr-review-section-content"),n.length===0){const s=document.createElement("div");s.textContent="No requests in this section",m.append(s)}else{const s=document.createElement("ul");for(const[e,r]of n.entries()){const c=r.element,d=document.createElement("input");d.type="checkbox",d.classList.add("rmtr-review-request-checkbox"),d.id=`rmtr-review-remove-request-${l}-${e}`,d.addEventListener("change",()=>{d.checked?(o[t][e].result={remove:!0,reason:q.value},p.style.display="inline",g.disabled=!0):(delete o[t][e].result,p.style.display="none",g.disabled=!1)});const R=document.createElement("label");R.htmlFor=`rmtr-review-remove-request-${l}-${e}`,R.textContent="Remove request",c.append(d),c.append(R);const p=document.createElement("span");p.style.display="none",p.append(document.createTextNode(" as "));const q=document.createElement("select");t==="Contested technical requests"&&(q.value="Contested"),q.addEventListener("change",()=>{o[t][e].result.reason=q.value});const j=["Completed","Contested","Already done","Invalid page name","Incorrect venue","Withdrawn","Not done"];for(const b of j){const E=document.createElement("option");E.value=b,E.textContent=b,q.append(E)}p.append(q),c.append(p);const g=document.createElement("input");g.type="checkbox",g.classList.add("rmtr-review-request-checkbox"),g.id=`rmtr-review-move-request-${l}-${e}`,g.addEventListener("change",()=>{g.checked?(o[t][e].result={move:!0,section:I.value},v.style.display="inline",d.disabled=!0):(delete o[t][e].result,v.style.display="none",d.disabled=!1)});const S=document.createElement("label");S.htmlFor=`rmtr-review-move-request-${l}-${e}`,S.textContent="Switch section",c.append(g),c.append(S);const v=document.createElement("span");v.style.display="none",v.append(document.createTextNode(" to "));const I=document.createElement("select");I.addEventListener("change",()=>{o[t][e].result.section=I.value});for(const b of u){if(b===t)continue;const E=document.createElement("option");E.value=b,E.textContent=b,I.append(E)}v.append(I),v.append(document.createTextNode(" with reasoning "));const P=document.createElement("input");P.type="text",P.addEventListener("input",()=>{o[t][e].result.reason=P.value}),v.append(P),v.append(document.createTextNode(" (optional, automatically pings requestor and signs)")),c.append(v),s.append(c)}m.append(s)}h.append(m)}const y=document.createElement("button");y.id="rmtr-review-submit",y.textContent="Submit",y.addEventListener("click",async()=>{if((await getPageRevision()).revid!==$)return mw.notify("rmtr-helper: An edit conflict occurred, please start over!",{type:"error"});y.disabled=!0,C.style.display="inline-block";let t=f;const n={remove:{},move:{},total:0};for(const s of Object.values(o))for(const e of s)if(e.result){if("remove"in e.result)t=t.replace(e.full+`
`,"").replace(e.full,""),n.remove[e.result.reason]||(n.remove[e.result.reason]=[]),n.remove[e.result.reason].push(e),n.total++;else if("move"in e.result){const r=u[u.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`),n.move[e.result.section]||(n.move[e.result.section]=[]),n.move[e.result.section].push(e),n.total++}}if(n.total===0)return y.disabled=!1,C.style.display="none",mw.notify("No changes to make!",{type:"error"});const i=Object.values(o).every(s=>s.every(e=>e.result&&"remove"in e.result)),m=`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:m})),mw.notify(`Successfully handled ${n.total} requests, reloading...`,{type:"success"}),window.location.reload()});const C=document.createElement("span");C.id="rmtr-review-loading",C.style.display="none",y.append(C),h.append(y),mw.util.$content[0].prepend(h),h.scrollIntoView()})});async function getPageRevision(){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]}function showEditPreview(k,x,N){const T=mw.config.get("wgServer")+mw.config.get("wgScriptPath")+"/",a=document.createElement("form");a.action=`${T}index.php?title=${encodeURIComponent(k)}&action=submit`,a.method="POST";const w=document.createElement("input");w.type="hidden",w.name="wpTextbox1",w.value=x,a.append(w);const $=document.createElement("input");$.type="hidden",$.name="wpSummary",$.value=N,a.append($);const f=document.createElement("input");f.type="hidden",f.name="mode",f.value="preview",a.append(f);const u=document.createElement("input");u.type="hidden",u.name="wpDiff",u.value="Show changes",a.append(u);const o=document.createElement("input");o.type="hidden",o.name="wpUltimateParam",o.value="1",a.append(o),document.body.append(a),a.submit()}

// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy9ybXRyLWhlbHBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgUGFnZVJldmlzaW9uc1Jlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC10eXBlcyc7XG5pbXBvcnQgeyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyB9IGZyb20gJy4uL25vZGVfbW9kdWxlcy90eXBlcy1tZWRpYXdpa2kvYXBpX3BhcmFtcy9pbmRleCc7XG5cbm13LmxvYWRlci51c2luZyhbJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICBjb25zdCBkZXZlbG9wbWVudE1vZGUgPSBmYWxzZTtcblxuICAgIGlmIChtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykgIT09IChkZXZlbG9wbWVudE1vZGUgPyAnVXNlcjpFZWppdDQzL3NhbmRib3gnIDogJ1dpa2lwZWRpYTpSZXF1ZXN0ZWRfbW92ZXMvVGVjaG5pY2FsX3JlcXVlc3RzJykpIHJldHVybjtcblxuICAgIGltcG9ydFN0eWxlc2hlZXQoJ1VzZXI6RWVqaXQ0My9zY3JpcHRzL3JtdHItaGVscGVyLmNzcycpO1xuXG4gICAgY29uc3QgbmFtZXNwYWNlcyA9IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlSWRzJyk7XG5cbiAgICBsZXQgZGlzcGxheWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBsaW5rID0gbXcudXRpbC5hZGRQb3J0bGV0TGluayhtdy5jb25maWcuZ2V0KCdza2luJykgPT09ICdtaW5lcnZhJyA/ICdwLXRiJyA6ICdwLWNhY3Rpb25zJywgJyMnLCBgUmV2aWV3IG1vdmUgcmVxdWVzdHMke2RldmVsb3BtZW50TW9kZSA/ICcgKERFViknIDogJyd9YCwgJ3Jldmlldy1ybXRyLXJlcXVlc3RzJykhO1xuXG4gICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChkaXNwbGF5ZWQpIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcm10ci1yZXZpZXctcmVzdWx0Jyk/LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIGVsc2UgZGlzcGxheWVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwYWdlUmV2aXNpb24gPSBhd2FpdCBnZXRQYWdlUmV2aXNpb24oKTtcblxuICAgICAgICBjb25zdCByZXZJZCA9IHBhZ2VSZXZpc2lvbi5yZXZpZDtcbiAgICAgICAgY29uc3QgcGFnZUNvbnRlbnQgPSBwYWdlUmV2aXNpb24uc2xvdHMubWFpbi5jb250ZW50O1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gWydVbmNvbnRyb3ZlcnNpYWwgdGVjaG5pY2FsIHJlcXVlc3RzJywgJ1JlcXVlc3RzIHRvIHJldmVydCB1bmRpc2N1c3NlZCBtb3ZlcycsICdDb250ZXN0ZWQgdGVjaG5pY2FsIHJlcXVlc3RzJywgJ0FkbWluaXN0cmF0b3IgbmVlZGVkJ107XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgICAgICAgc2lnOiBzdHJpbmc7XG4gICAgICAgICAgICByZXF1ZXN0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgZWxlbWVudDogSFRNTExJRWxlbWVudDtcbiAgICAgICAgICAgIHJlc3VsdD86IFJlcXVlc3RSZXN1bHRNb3ZlIHwgUmVxdWVzdFJlc3VsdFJlbW92ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGludGVyZmFjZSBSZXF1ZXN0UmVzdWx0TW92ZSB7XG4gICAgICAgICAgICBtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgc2VjdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgcmVhc29uPzogc3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3RSZXN1bHRSZW1vdmUge1xuICAgICAgICAgICAgcmVtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPiA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkNvbnRlbnQgPSBwYWdlQ29udGVudFxuICAgICAgICAgICAgICAgIC5zcGxpdChuZXcgUmVnRXhwKGA9ezMsfSA/JHtzZWN0aW9ufSA/PXszLH1gKSlbMV1cbiAgICAgICAgICAgICAgICAuc3BsaXQoLz17Myx9L20pWzBdXG4gICAgICAgICAgICAgICAgLnRyaW0oKTtcblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFJlcXVlc3RzID0gc2VjdGlvbkNvbnRlbnQubWF0Y2goLyg/OlxcKiA/XFxuKT9bICo6XSp7e3JtYXNzaXN0XFwvY29yZS4rPyg/PVsgKjpdKnt7cm1hc3Npc3RcXC9jb3JlfCQpL2dpcyk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVkUmVxdWVzdHMpXG4gICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl0gPSBtYXRjaGVkUmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVsbCA9IHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgvKD86XFwqID9cXG4pP1sgKjpdKnt7cm1hc3Npc3RcXC9jb3JlIFxcfHx9fS4qL2dpcywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoL1xccypcXHxcXHMqLylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnRyaW0oKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxQYXJhbWV0ZXJzID0gT2JqZWN0LmZyb21FbnRyaWVzKHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5zcGxpdCgnID0gJykubWFwKCh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpKSkpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICAgICAgICAgICAgICAgICAgZmluYWxQYXJhbWV0ZXJzLmZ1bGwgPSBmdWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsUGFyYW1ldGVycy5vcmlnaW5hbCA9IGZpbmFsUGFyYW1ldGVyc1sxXT8ucmVwbGFjZSgvXlxcWysvLCAnJykucmVwbGFjZSgvXSskLywgJycpID8/ICdVTktOT1dOJztcbiAgICAgICAgICAgICAgICAgICAgZmluYWxQYXJhbWV0ZXJzLmRlc3RpbmF0aW9uID0gZmluYWxQYXJhbWV0ZXJzWzJdPy5yZXBsYWNlKC9eXFxbKy8sICcnKS5yZXBsYWNlKC9dKyQvLCAnJykgPz8gJ1VOS05PV04nO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaW5hbFBhcmFtZXRlcnNbMV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaW5hbFBhcmFtZXRlcnNbMl07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsUGFyYW1ldGVycyBhcyB1bmtub3duIGFzIFJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0c1tzZWN0aW9uXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhhbGxSZXF1ZXN0cykubWFwKGFzeW5jIChbLCByZXF1ZXN0c10pID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMubWFwKGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd09sZFRpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQocmVxdWVzdC5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd05ld1RpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQocmVxdWVzdC5kZXN0aW5hdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXdPbGRUaXRsZSkgcmV0dXJuIG13Lm5vdGlmeShgSW52YWxpZCB0aXRsZSBcIiR7cmVxdWVzdC5vcmlnaW5hbH1cIiFgLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW13TmV3VGl0bGUpIHJldHVybiBtdy5ub3RpZnkoYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3QuZGVzdGluYXRpb259XCIhYCwgeyB0eXBlOiAnZXJyb3InIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZFRpdGxlID0gIS9bIzw+W1xcXXt8fV0vLnRlc3QocmVxdWVzdC5kZXN0aW5hdGlvbikgJiYgbXdOZXdUaXRsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFRpdGxlV2FybmluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRUaXRsZVdhcm5pbmcuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaW52YWxpZC13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVGl0bGVXYXJuaW5nLnRleHRDb250ZW50ID0gYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3QuZGVzdGluYXRpb259XCIhYDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWROYW1lc3BhY2UgPSAhW25hbWVzcGFjZXMuZmlsZSwgbmFtZXNwYWNlcy5jYXRlZ29yeV0uc29tZSgobmFtZXNwYWNlKSA9PiBtd09sZFRpdGxlLmdldE5hbWVzcGFjZUlkKCkgPT09IG5hbWVzcGFjZSB8fCBtd05ld1RpdGxlLmdldE5hbWVzcGFjZUlkKCkgPT09IG5hbWVzcGFjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWROYW1lc3BhY2VXYXJuaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaW52YWxpZC13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkTmFtZXNwYWNlV2FybmluZy50ZXh0Q29udGVudCA9IGBXYXJuaW5nOiBvcmlnaW5hbCBvciBkZXN0aW5hdGlvbiBwYWdlIGlzIGluIG5hbWVzcGFjZSBcIiR7bXdOZXdUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2VzLmZpbGUgPyAnZmlsZScgOiAnY2F0ZWdvcnknfVwiIWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFdpa2l0ZXh0ID0gYXdhaXQgbmV3IG13LkFwaSgpLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbWzoke3JlcXVlc3Qub3JpZ2luYWx9XV0gXHUyMTkyICR7dmFsaWRUaXRsZSA/IGBbWzoke3JlcXVlc3QuZGVzdGluYXRpb259XV1gIDogaW52YWxpZFRpdGxlV2FybmluZy5vdXRlckhUTUx9IHJlcXVlc3RlZCBieSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtdy51dGlsLmlzSVBBZGRyZXNzKHJlcXVlc3QucmVxdWVzdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYFtbU3BlY2lhbDpDb250cmlidXRpb25zLyR7cmVxdWVzdC5yZXF1ZXN0ZXJ9fCR7cmVxdWVzdC5yZXF1ZXN0ZXJ9XV1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgW1tVc2VyOiR7cmVxdWVzdC5yZXF1ZXN0ZXJ9fCR7cmVxdWVzdC5yZXF1ZXN0ZXJ9XV1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgvKFxcW3syfVNwZWNpYWw6Q29udHJpYnV0aW9uc1xcLyguKj8pXFx8XFwyXXsyfSkvLmV4ZWMocmVxdWVzdC5zaWcpPy5bMV0gPz8gJyh1bmtub3duKScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aXRoIHJlYXNvbmluZyBcIiR7cmVxdWVzdC5yZWFzb259XCJgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEh0bWwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHBhcnNlZFdpa2l0ZXh0LCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmlubmVySFRNTCA9IHBhcnNlZEh0bWwucXVlcnlTZWxlY3RvcignZGl2Lm13LXBhcnNlci1vdXRwdXQnKSEuZmlyc3RFbGVtZW50Q2hpbGQhLmlubmVySFRNTCE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWROYW1lc3BhY2UpIHJlcXVlc3RFbGVtZW50LmFwcGVuZChpbnZhbGlkTmFtZXNwYWNlV2FybmluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZWxlbWVudCA9IHJlcXVlc3RFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBvdXRwdXRFbGVtZW50LmlkID0gJ3JtdHItcmV2aWV3LXJlc3VsdCc7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhlYWRlci5pZCA9ICdybXRyLXJldmlldy1oZWFkZXInO1xuICAgICAgICBoZWFkZXIudGV4dENvbnRlbnQgPSAnVGVjaG5pY2FsIG1vdmUgcmVxdWVzdHMgcmV2aWV3JztcblxuICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChoZWFkZXIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3NlY3Rpb25JbmRleCwgW3NlY3Rpb24sIHJlcXVlc3RzXV0gb2YgT2JqZWN0LmVudHJpZXMoYWxsUmVxdWVzdHMpLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2VjdGlvbkhlYWRlci5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1oZWFkZXInKTtcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXIudGV4dENvbnRlbnQgPSBzZWN0aW9uO1xuXG4gICAgICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzZWN0aW9uSGVhZGVyKTtcblxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LXNlY3Rpb24tY29udGVudCcpO1xuXG4gICAgICAgICAgICBpZiAocmVxdWVzdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9SZXF1ZXN0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIG5vUmVxdWVzdHMudGV4dENvbnRlbnQgPSAnTm8gcmVxdWVzdHMgaW4gdGhpcyBzZWN0aW9uJztcblxuICAgICAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmFwcGVuZChub1JlcXVlc3RzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdHNMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3JlcXVlc3RJbmRleCwgcmVxdWVzdF0gb2YgcmVxdWVzdHMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RFbGVtZW50ID0gcmVxdWVzdC5lbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RDaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LXJlcXVlc3QtY2hlY2tib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmlkID0gYHJtdHItcmV2aWV3LXJlbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZVJlcXVlc3RDaGVja2JveC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgPSB7IHJlbW92ZTogdHJ1ZSwgcmVhc29uOiByZW1vdmVSZXF1ZXN0RHJvcGRvd24udmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdExhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdExhYmVsLmh0bWxGb3IgPSBgcm10ci1yZXZpZXctcmVtb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RMYWJlbC50ZXh0Q29udGVudCA9ICdSZW1vdmUgcmVxdWVzdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHJlbW92ZVJlcXVlc3RDaGVja2JveCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0TGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIGFzICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RHJvcGRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdDb250ZXN0ZWQgdGVjaG5pY2FsIHJlcXVlc3RzJykgcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlID0gJ0NvbnRlc3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3REcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdFJlbW92ZSkucmVhc29uID0gcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbXBsZXRlZCcsIC8vXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVzdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBbHJlYWR5IGRvbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgcGFnZSBuYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgdmVudWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1dpdGhkcmF3bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnTm90IGRvbmUnLFxuICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHJlbW92ZVJlcXVlc3REcm9wZG93bk9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RHJvcGRvd24uYXBwZW5kKG9wdGlvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLmFwcGVuZChyZW1vdmVSZXF1ZXN0RHJvcGRvd24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25DaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LXJlcXVlc3QtY2hlY2tib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmlkID0gYHJtdHItcmV2aWV3LW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzd2l0Y2hTZWN0aW9uQ2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdCBhcyBSZXF1ZXN0UmVzdWx0TW92ZSkgPSB7IG1vdmU6IHRydWUsIHNlY3Rpb246IHN3aXRjaFNlY3Rpb25Ecm9wZG93bi52YWx1ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uTGFiZWwuaHRtbEZvciA9IGBybXRyLXJldmlldy1tb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25MYWJlbC50ZXh0Q29udGVudCA9ICdTd2l0Y2ggc2VjdGlvbic7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHN3aXRjaFNlY3Rpb25DaGVja2JveCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uTGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIHRvICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uRHJvcGRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdCBhcyBSZXF1ZXN0UmVzdWx0TW92ZSkuc2VjdGlvbiA9IHN3aXRjaFNlY3Rpb25Ecm9wZG93bi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24gPT09IHNlY3Rpb24pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IG9wdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkRyb3Bkb3duLmFwcGVuZChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoc3dpdGNoU2VjdGlvbkRyb3Bkb3duKTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgd2l0aCByZWFzb25pbmcgJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25SZWFzb25pbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nLnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25SZWFzb25pbmcuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdFJlbW92ZSkucmVhc29uID0gc3dpdGNoU2VjdGlvblJlYXNvbmluZy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChzd2l0Y2hTZWN0aW9uUmVhc29uaW5nKTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgKG9wdGlvbmFsLCBhdXRvbWF0aWNhbGx5IHBpbmdzIHJlcXVlc3RvciBhbmQgc2lnbnMpJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzTGlzdC5hcHBlbmQocmVxdWVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmFwcGVuZChyZXF1ZXN0c0xpc3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzZWN0aW9uQ29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgc3VibWl0QnV0dG9uLmlkID0gJ3JtdHItcmV2aWV3LXN1Ym1pdCc7XG4gICAgICAgIHN1Ym1pdEJ1dHRvbi50ZXh0Q29udGVudCA9ICdTdWJtaXQnO1xuICAgICAgICBzdWJtaXRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdQYWdlUmV2aXNpb24gPSBhd2FpdCBnZXRQYWdlUmV2aXNpb24oKTtcblxuICAgICAgICAgICAgaWYgKG5ld1BhZ2VSZXZpc2lvbi5yZXZpZCAhPT0gcmV2SWQpIHJldHVybiBtdy5ub3RpZnkoJ3JtdHItaGVscGVyOiBBbiBlZGl0IGNvbmZsaWN0IG9jY3VycmVkLCBwbGVhc2Ugc3RhcnQgb3ZlciEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG5cbiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG5cbiAgICAgICAgICAgIGxldCBlbmRSZXN1bHQgPSBwYWdlQ29udGVudDtcblxuICAgICAgICAgICAgaW50ZXJmYWNlIEFsbENoYW5nZXMge1xuICAgICAgICAgICAgICAgIHJlbW92ZTogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPjtcbiAgICAgICAgICAgICAgICBtb3ZlOiBSZWNvcmQ8c3RyaW5nLCBSZXF1ZXN0W10+O1xuICAgICAgICAgICAgICAgIHRvdGFsOiBudW1iZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXM6IEFsbENoYW5nZXMgPSB7IHJlbW92ZToge30sIG1vdmU6IHt9LCB0b3RhbDogMCB9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhhbGxSZXF1ZXN0cykpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc3VsdCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdyZW1vdmUnIGluIHJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShyZXF1ZXN0LmZ1bGwgKyAnXFxuJywgJycpLnJlcGxhY2UocmVxdWVzdC5mdWxsLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZXMucmVtb3ZlW3JlcXVlc3QucmVzdWx0LnJlYXNvbl0pIGNoYW5nZXMucmVtb3ZlW3JlcXVlc3QucmVzdWx0LnJlYXNvbl0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucmVtb3ZlW3JlcXVlc3QucmVzdWx0LnJlYXNvbl0ucHVzaChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMudG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnbW92ZScgaW4gcmVxdWVzdC5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25UaXRsZUFmdGVyID0gc2VjdGlvbnNbc2VjdGlvbnMuaW5kZXhPZihyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uKSArIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShyZXF1ZXN0LmZ1bGwgKyAnXFxuJywgJycpLnJlcGxhY2UocmVxdWVzdC5mdWxsLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKGAoXFxuP1xcbj8oPzo9ezMsfSA/JHtzZWN0aW9uVGl0bGVBZnRlcn0gPz17Myx9fCQpKWApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcXG4ke3JlcXVlc3QuZnVsbH0ke3JlcXVlc3QucmVzdWx0LnJlYXNvbiA/IGBcXG46OiAke3JlcXVlc3QucmVxdWVzdGVyICYmIHJlcXVlc3QucmVxdWVzdGVyLmxlbmd0aCA+IDAgPyAobXcudXRpbC5pc0lQQWRkcmVzcyhyZXF1ZXN0LnJlcXVlc3RlcikgPyAnJyA6IGBAW1tVc2VyOiR7cmVxdWVzdC5yZXF1ZXN0ZXJ9fCR7cmVxdWVzdC5yZXF1ZXN0ZXJ9XV0gYCkgOiAnJ30gJHtyZXF1ZXN0LnJlc3VsdC5yZWFzb259IH5+fn5gIDogJyd9JDFgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hhbmdlcy5tb3ZlW3JlcXVlc3QucmVzdWx0LnNlY3Rpb25dKSBjaGFuZ2VzLm1vdmVbcmVxdWVzdC5yZXN1bHQuc2VjdGlvbl0gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5tb3ZlW3JlcXVlc3QucmVzdWx0LnNlY3Rpb25dLnB1c2gocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnRvdGFsKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbXcubm90aWZ5KCdObyBjaGFuZ2VzIHRvIG1ha2UhJywgeyB0eXBlOiAnZXJyb3InIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBub1JlbWFpbmluZyA9IE9iamVjdC52YWx1ZXMoYWxsUmVxdWVzdHMpLmV2ZXJ5KChzZWN0aW9uKSA9PiBzZWN0aW9uLmV2ZXJ5KChyZXF1ZXN0KSA9PiByZXF1ZXN0LnJlc3VsdCAmJiAncmVtb3ZlJyBpbiByZXF1ZXN0LnJlc3VsdCkpO1xuXG4gICAgICAgICAgICBjb25zdCBlZGl0U3VtbWFyeSA9IGBIYW5kbGVkICR7Y2hhbmdlcy50b3RhbH0gcmVxdWVzdCR7Y2hhbmdlcy50b3RhbCA+IDEgPyAncycgOiAnJ306ICR7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcy5yZW1vdmUpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBgUmVtb3ZlZCAke09iamVjdC5lbnRyaWVzKGNoYW5nZXMucmVtb3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChbcmVhc29uLCBwYWdlc10pID0+IGAke3BhZ2VzLm1hcCgocGFnZSkgPT4gYFtbJHtwYWdlLm9yaWdpbmFsfV1dYCkuam9pbignLCAnKX0gYXMgJHtyZWFzb24udG9Mb3dlckNhc2UoKX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKX1gXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH0ke1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMubW92ZSkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IGAke09iamVjdC5lbnRyaWVzKGNoYW5nZXMucmVtb3ZlKS5sZW5ndGggPiAwID8gJywgJyA6ICcnfU1vdmVkICR7T2JqZWN0LmVudHJpZXMoY2hhbmdlcy5tb3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChbZGVzdGluYXRpb24sIHBhZ2VzXSkgPT4gYCR7cGFnZXMubWFwKChwYWdlKSA9PiBgW1ske3BhZ2Uub3JpZ2luYWx9XV1gKS5qb2luKCcsICcpfSB0byBcIiR7ZGVzdGluYXRpb259XCJgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKX1gXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH0ke25vUmVtYWluaW5nID8gJyAobm8gcmVxdWVzdHMgcmVtYWluKScgOiAnJ30gKHZpYSBbW1VzZXI6RWVqaXQ0My9zY3JpcHRzL3JtdHItaGVscGVyfHNjcmlwdF1dKWA7XG5cbiAgICAgICAgICAgIGlmIChkZXZlbG9wbWVudE1vZGUpIHNob3dFZGl0UHJldmlldyhtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksIGVuZFJlc3VsdCwgZWRpdFN1bW1hcnkpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IG13LkFwaSgpLmVkaXQobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLCAoKSA9PiAoeyB0ZXh0OiBlbmRSZXN1bHQsIHN1bW1hcnk6IGVkaXRTdW1tYXJ5IH0pKTtcblxuICAgICAgICAgICAgICAgIG13Lm5vdGlmeShgU3VjY2Vzc2Z1bGx5IGhhbmRsZWQgJHtjaGFuZ2VzLnRvdGFsfSByZXF1ZXN0cywgcmVsb2FkaW5nLi4uYCwgeyB0eXBlOiAnc3VjY2VzcycgfSk7XG5cbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGxvYWRpbmdTcGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBsb2FkaW5nU3Bpbm5lci5pZCA9ICdybXRyLXJldmlldy1sb2FkaW5nJztcbiAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICBzdWJtaXRCdXR0b24uYXBwZW5kKGxvYWRpbmdTcGlubmVyKTtcblxuICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzdWJtaXRCdXR0b24pO1xuXG4gICAgICAgIG13LnV0aWwuJGNvbnRlbnRbMF0ucHJlcGVuZChvdXRwdXRFbGVtZW50KTtcblxuICAgICAgICBvdXRwdXRFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfSk7XG59KTtcblxuLyoqXG4gKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGEgd2lraSBwYWdlJ3MgbGF0ZXN0IHJldmlzaW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQYWdlUmV2aXNpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGF3YWl0IG5ldyBtdy5BcGkoKS5nZXQoe1xuICAgICAgICAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAgICAgZm9ybWF0dmVyc2lvbjogJzInLFxuICAgICAgICAgICAgcHJvcDogJ3JldmlzaW9ucycsXG4gICAgICAgICAgICBydnByb3A6IFsnY29udGVudCcsICdpZHMnXSxcbiAgICAgICAgICAgIHJ2c2xvdHM6ICdtYWluJyxcbiAgICAgICAgICAgIHRpdGxlczogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcykpIGFzIFBhZ2VSZXZpc2lvbnNSZXN1bHRcbiAgICApLnF1ZXJ5LnBhZ2VzWzBdLnJldmlzaW9uc1swXTtcbn1cblxuLyoqXG4gKiBTaG93cyBhIGRpZmYgZWRpdCBwcmV2aWV3IGZvciB0aGUgZ2l2ZW4gd2lraXRleHQgb24gYSBnaXZlbiBwYWdlLlxuICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgcGFnZSB0byBlZGl0LlxuICogQHBhcmFtIHRleHQgVGhlIHJlc3VsdGluZyB3aWtpdGV4dCBvZiB0aGUgcGFnZS5cbiAqIEBwYXJhbSBzdW1tYXJ5IFRoZSBlZGl0IHN1bW1hcnkuXG4gKi9cbmZ1bmN0aW9uIHNob3dFZGl0UHJldmlldyh0aXRsZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIHN1bW1hcnk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBtdy5jb25maWcuZ2V0KCd3Z1NlcnZlcicpICsgbXcuY29uZmlnLmdldCgnd2dTY3JpcHRQYXRoJykgKyAnLyc7XG5cbiAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuICAgIGZvcm0uYWN0aW9uID0gYCR7YmFzZVVybH1pbmRleC5waHA/dGl0bGU9JHtlbmNvZGVVUklDb21wb25lbnQodGl0bGUpfSZhY3Rpb249c3VibWl0YDtcbiAgICBmb3JtLm1ldGhvZCA9ICdQT1NUJztcblxuICAgIGNvbnN0IHRleHRib3hJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgdGV4dGJveElucHV0LnR5cGUgPSAnaGlkZGVuJztcbiAgICB0ZXh0Ym94SW5wdXQubmFtZSA9ICd3cFRleHRib3gxJztcbiAgICB0ZXh0Ym94SW5wdXQudmFsdWUgPSB0ZXh0O1xuICAgIGZvcm0uYXBwZW5kKHRleHRib3hJbnB1dCk7XG5cbiAgICBjb25zdCBzdW1tYXJ5SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIHN1bW1hcnlJbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgc3VtbWFyeUlucHV0Lm5hbWUgPSAnd3BTdW1tYXJ5JztcbiAgICBzdW1tYXJ5SW5wdXQudmFsdWUgPSBzdW1tYXJ5O1xuICAgIGZvcm0uYXBwZW5kKHN1bW1hcnlJbnB1dCk7XG5cbiAgICBjb25zdCBwcmV2aWV3SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIHByZXZpZXdJbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgcHJldmlld0lucHV0Lm5hbWUgPSAnbW9kZSc7XG4gICAgcHJldmlld0lucHV0LnZhbHVlID0gJ3ByZXZpZXcnO1xuICAgIGZvcm0uYXBwZW5kKHByZXZpZXdJbnB1dCk7XG5cbiAgICBjb25zdCBzaG93Q2hhbmdlc0lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBzaG93Q2hhbmdlc0lucHV0LnR5cGUgPSAnaGlkZGVuJztcbiAgICBzaG93Q2hhbmdlc0lucHV0Lm5hbWUgPSAnd3BEaWZmJztcbiAgICBzaG93Q2hhbmdlc0lucHV0LnZhbHVlID0gJ1Nob3cgY2hhbmdlcyc7XG4gICAgZm9ybS5hcHBlbmQoc2hvd0NoYW5nZXNJbnB1dCk7XG5cbiAgICBjb25zdCB1bHRpbWF0ZVBhcmFtZXRlcklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICB1bHRpbWF0ZVBhcmFtZXRlcklucHV0LnR5cGUgPSAnaGlkZGVuJztcbiAgICB1bHRpbWF0ZVBhcmFtZXRlcklucHV0Lm5hbWUgPSAnd3BVbHRpbWF0ZVBhcmFtJztcbiAgICB1bHRpbWF0ZVBhcmFtZXRlcklucHV0LnZhbHVlID0gJzEnO1xuICAgIGZvcm0uYXBwZW5kKHVsdGltYXRlUGFyYW1ldGVySW5wdXQpO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoZm9ybSk7XG4gICAgZm9ybS5zdWJtaXQoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7OzthQUdBLEdBQUcsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLEVBQUcsSUFBTSxDQUd0QyxHQUFJLEdBQUcsT0FBTyxJQUFJLFlBQVksSUFBa0QsK0NBQWlELE9BRWpJLGlCQUFpQixzQ0FBc0MsRUFFdkQsTUFBTUEsRUFBYSxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsRUFFakQsSUFBSUMsRUFBWSxHQUVILEdBQUcsS0FBSyxlQUFlLEdBQUcsT0FBTyxJQUFJLE1BQU0sSUFBTSxVQUFZLE9BQVMsYUFBYyxJQUFLLHVCQUEwRCxzQkFBc0IsRUFFakwsaUJBQWlCLFFBQVMsTUFBT0MsR0FBVSxDQUc1QyxHQUZBQSxFQUFNLGVBQWUsRUFFakJELEVBQVcsT0FBTyxTQUFTLGNBQWMscUJBQXFCLEdBQUcsZUFBZSxFQUMvRUEsRUFBWSxHQUVqQixNQUFNRSxFQUFlLE1BQU0sZ0JBQWdCLEVBRXJDQyxFQUFRRCxFQUFhLE1BQ3JCRSxFQUFjRixFQUFhLE1BQU0sS0FBSyxRQUV0Q0csRUFBVyxDQUFDLHFDQUFzQyx1Q0FBd0MsK0JBQWdDLHNCQUFzQixFQXdC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QzlCQSxFQUF1QixLQUFPLGtCQUM5QkEsRUFBdUIsTUFBUSxJQUMvQkwsRUFBSyxPQUFPSyxDQUFzQixFQUVsQyxTQUFTLEtBQUssT0FBT0wsQ0FBSSxFQUN6QkEsRUFBSyxPQUFPLENBQ2hCIiwKICAibmFtZXMiOiBbIm5hbWVzcGFjZXMiLCAiZGlzcGxheWVkIiwgImV2ZW50IiwgInBhZ2VSZXZpc2lvbiIsICJyZXZJZCIsICJwYWdlQ29udGVudCIsICJzZWN0aW9ucyIsICJhbGxSZXF1ZXN0cyIsICJzZWN0aW9uIiwgIm1hdGNoZWRSZXF1ZXN0cyIsICJyZXF1ZXN0IiwgImZ1bGwiLCAicGFyYW1ldGVycyIsICJwYXJhbWV0ZXIiLCAiZmluYWxQYXJhbWV0ZXJzIiwgInZhbHVlIiwgInJlcXVlc3RzIiwgIm13T2xkVGl0bGUiLCAibXdOZXdUaXRsZSIsICJ2YWxpZFRpdGxlIiwgImludmFsaWRUaXRsZVdhcm5pbmciLCAidmFsaWROYW1lc3BhY2UiLCAibmFtZXNwYWNlIiwgImludmFsaWROYW1lc3BhY2VXYXJuaW5nIiwgInBhcnNlZFdpa2l0ZXh0IiwgInBhcnNlZEh0bWwiLCAicmVxdWVzdEVsZW1lbnQiLCAib3V0cHV0RWxlbWVudCIsICJoZWFkZXIiLCAic2VjdGlvbkluZGV4IiwgInNlY3Rpb25IZWFkZXIiLCAic2VjdGlvbkNvbnRlbnQiLCAibm9SZXF1ZXN0cyIsICJyZXF1ZXN0c0xpc3QiLCAicmVxdWVzdEluZGV4IiwgInJlbW92ZVJlcXVlc3RDaGVja2JveCIsICJyZW1vdmVSZXF1ZXN0RHJvcGRvd24iLCAicmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzIiwgInN3aXRjaFNlY3Rpb25DaGVja2JveCIsICJyZW1vdmVSZXF1ZXN0TGFiZWwiLCAicmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucyIsICJvcHRpb24iLCAib3B0aW9uRWxlbWVudCIsICJzd2l0Y2hTZWN0aW9uRHJvcGRvd24iLCAic3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzIiwgInN3aXRjaFNlY3Rpb25MYWJlbCIsICJzd2l0Y2hTZWN0aW9uUmVhc29uaW5nIiwgInN1Ym1pdEJ1dHRvbiIsICJsb2FkaW5nU3Bpbm5lciIsICJlbmRSZXN1bHQiLCAiY2hhbmdlcyIsICJzZWN0aW9uVGl0bGVBZnRlciIsICJub1JlbWFpbmluZyIsICJlZGl0U3VtbWFyeSIsICJyZWFzb24iLCAicGFnZXMiLCAicGFnZSIsICJkZXN0aW5hdGlvbiIsICJ0aXRsZSIsICJ0ZXh0IiwgInN1bW1hcnkiLCAiYmFzZVVybCIsICJmb3JtIiwgInRleHRib3hJbnB1dCIsICJzdW1tYXJ5SW5wdXQiLCAicHJldmlld0lucHV0IiwgInNob3dDaGFuZ2VzSW5wdXQiLCAidWx0aW1hdGVQYXJhbWV0ZXJJbnB1dCJdCn0K