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 23:23, 22 January 2025 (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");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 I=>{if(I.preventDefault(),k)return document.querySelector("#rmtr-review-result")?.scrollIntoView();k=!0;let L=await T(),P=L.revid,N=L.slots.main.content,y=["Uncontroversial technical requests","Requests to revert undiscussed moves","Contested technical requests","Administrator needed"],S=y[2],j=y[3],m={};function O(l){let t=[],n=["[","{"],a=["]","}"],s=!1,r="";for(let i=0;i<l.length;i++){let c=l[i],o=l[i+1];if(c==="|"&&!s||i===l.length-1){t.push(r),r="";continue}r+=c,n.some(d=>d===c&&d===o)?s=!0:a.some(d=>d===c&&d===o)&&(s=!1)}let e={};for(let[i,c]of t.entries()){let o=c.split("=").map(d=>d.trim());o.length===1&&o.unshift((i+1).toString()),e[o.shift()]=o.join("=")}return e}for(let l of y){let n=N.split(new RegExp(`={3,} ?${l} ?={3,}`))[1].split(/={3,}/m)[0].trim().match(/(?:\* ?\n)?[ *:]*{{rmassist\/core.+?(?=[ *:]*{{rmassist\/core|$)/gis);if(n)m[l]=n.map(a=>{a=a.trim();let s=O(a.replaceAll(/(?:\* ?\n)?[ *:]*{{rmassist\/core\s*\||}}\n.*/gis,""));return s.full=a,s.original=s[1]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",s.destination=s[2]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",s.requester||(s.requester=s.sig?.match(/\[\[User:(.*?)(\||]])/)?.[1].trim()),delete s[1],delete s[2],s});else{m[l]=[];continue}}await Promise.all(Object.entries(m).map(async([,l])=>{await Promise.all(l.map(async t=>{let n=mw.Title.newFromText(t.original),a=mw.Title.newFromText(t.destination);if(!n)return mw.notify(`Invalid title "${t.original}"!`,{type:"error"});if(!a)return mw.notify(`Invalid title "${t.destination}"!`,{type:"error"});let s=!/[#<>[\]{|}]/.test(t.destination)&&a,r=document.createElement("span");r.classList.add("rmtr-review-invalid-warning"),r.textContent=`Invalid title "${t.destination}"!`;let e=![b.file,b.category].some(u=>n.getNamespaceId()===u||a.getNamespaceId()===u),i=document.createElement("span");i.classList.add("rmtr-review-invalid-warning"),i.textContent=`Warning: original or destination page is in namespace "${a.getNamespaceId()===b.file?"file":"category"}"!`;let c=await new mw.Api().parse(`[[:${t.original}]] \u2192 ${s?`[[:${t.destination}]]`:r.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}"`),o=new DOMParser().parseFromString(c,"text/html"),d=document.createElement("li");d.innerHTML=o.querySelector("div.mw-parser-output").firstElementChild.innerHTML,e||d.append(i),t.element=d}))}));let f=document.createElement("div");f.id="rmtr-review-result";let x=document.createElement("div");x.id="rmtr-review-header",x.textContent="Technical move requests review",f.append(x);for(let[l,[t,n]]of Object.entries(m).entries()){let a=document.createElement("div");a.classList.add("rmtr-review-header"),a.textContent=t,f.append(a);let s=document.createElement("div");if(s.classList.add("rmtr-review-section-content"),n.length===0){let r=document.createElement("div");r.textContent="No requests in this section",s.append(r)}else{let r=document.createElement("ul");for(let[e,i]of n.entries()){let c=i.element,o=document.createElement("input");o.type="checkbox",o.classList.add("rmtr-review-request-checkbox"),o.id=`rmtr-review-remove-request-${l}-${e}`,o.addEventListener("change",()=>{o.checked?(m[t][e].result={remove:!0,reason:R.value},u.style.display="inline",v.disabled=!0):(delete m[t][e].result,u.style.display="none",v.disabled=!1)});let d=document.createElement("label");d.htmlFor=`rmtr-review-remove-request-${l}-${e}`,d.textContent="Remove request",c.append(o),c.append(d);let u=document.createElement("span");u.style.display="none",u.append(document.createTextNode(" as "));let R=document.createElement("select");t==="Contested technical requests"&&(R.value="Contested"),R.addEventListener("change",()=>{m[t][e].result.reason=R.value});let A=["Completed","Contested","Already done","Invalid page name","Incorrect venue","Withdrawn","Not done"];for(let h of A){let g=document.createElement("option");g.value=h,g.textContent=h,R.append(g)}u.append(R),c.append(u);let v=document.createElement("input");v.type="checkbox",v.classList.add("rmtr-review-request-checkbox"),v.id=`rmtr-review-move-request-${l}-${e}`,v.addEventListener("change",()=>{v.checked?(m[t][e].result={move:!0,section:q.value},p.style.display="inline",o.disabled=!0):(delete m[t][e].result,p.style.display="none",o.disabled=!1)});let C=document.createElement("label");C.htmlFor=`rmtr-review-move-request-${l}-${e}`,C.textContent="Switch section",c.append(v),c.append(C);let p=document.createElement("span");p.style.display="none",p.append(document.createTextNode(" to "));let q=document.createElement("select");q.addEventListener("change",()=>{m[t][e].result.section=q.value});for(let h of y){if(h===t)continue;let g=document.createElement("option");g.selected=h===(t===S?j:S),g.value=h,g.textContent=h,q.append(g)}p.append(q),p.append(document.createTextNode(" with reasoning "));let E=document.createElement("input");E.type="text",E.addEventListener("input",()=>{m[t][e].result.reason=E.value}),p.append(E),p.append(document.createTextNode(" (optional, automatically pings requestor and signs)")),c.append(p),r.append(c)}s.append(r)}f.append(s)}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 r of Object.values(m))for(let e of r)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 i=y[y.indexOf(e.result.section)+1];t=t.replace(e.full+`
`,"").replace(e.full,""),t=t.replace(new RegExp(`(
?
?(?:={3,} ?${i} ?={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 a=Object.values(m).every(r=>r.every(e=>e.result&&"remove"in e.result)),s=`Handled ${n.total} request${n.total>1?"s":""}: ${Object.entries(n.remove).length>0?`Removed ${Object.entries(n.remove).map(([r,e])=>`${e.map(i=>`[[${i.original}]]`).join(", ")} as ${r.toLowerCase()}`).join(", ")}`:""}${Object.entries(n.move).length>0?`${Object.entries(n.remove).length>0?", ":""}Moved ${Object.entries(n.move).map(([r,e])=>`${e.map(i=>`[[${i.original}]]`).join(", ")} to "${r}"`).join(", ")}`:""}${a?" (no requests remain)":""} (via [[User:Eejit43/scripts/rmtr-helper|script]])`;await new mw.Api().edit(mw.config.get("wgPageName"),()=>({text:t,summary:s})),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($),f.append(w),mw.util.$content[0].prepend(f),f.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/OiBzdHJpbmc7XG4gICAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgZWxlbWVudDogSFRNTExJRWxlbWVudDtcbiAgICAgICAgICAgIHJlc3VsdD86IFJlcXVlc3RSZXN1bHRNb3ZlIHwgUmVxdWVzdFJlc3VsdFJlbW92ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGludGVyZmFjZSBSZXF1ZXN0UmVzdWx0TW92ZSB7XG4gICAgICAgICAgICBtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgc2VjdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgcmVhc29uPzogc3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3RSZXN1bHRSZW1vdmUge1xuICAgICAgICAgICAgcmVtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPiA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgdGhlIHBhcmFtZXRlcnMgb2YgYSBnaXZlbiBXaWtpdGV4dCB0ZW1wbGF0ZS5cbiAgICAgICAgICogQHBhcmFtIHRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSB0byBwYXJzZS5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVQYXJhbWV0ZXJzKHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1BhcmFtZXRlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWRTdGFydFN5bWJvbHMgPSBbJ1snLCAneyddO1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZEVuZFN5bWJvbHMgPSBbJ10nLCAnfSddO1xuXG4gICAgICAgICAgICBsZXQgaW5zaWRlTGlua09yVGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VGV4dCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGVtcGxhdGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gdGVtcGxhdGVbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDaGFyYWN0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRlbXBsYXRlW2luZGV4ICsgMV07XG5cbiAgICAgICAgICAgICAgICBpZiAoKGNoYXJhY3RlciA9PT0gJ3wnICYmICFpbnNpZGVMaW5rT3JUZW1wbGF0ZSkgfHwgaW5kZXggPT09IHRlbXBsYXRlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmF3UGFyYW1ldGVycy5wdXNoKGN1cnJlbnRUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCArPSBjaGFyYWN0ZXI7XG5cbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZFN0YXJ0U3ltYm9scy5zb21lKChzeW1ib2wpID0+IHN5bWJvbCA9PT0gY2hhcmFjdGVyICYmIHN5bWJvbCA9PT0gbmV4dENoYXJhY3RlcikpIGluc2lkZUxpbmtPclRlbXBsYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpZ25vcmVkRW5kU3ltYm9scy5zb21lKChzeW1ib2wpID0+IHN5bWJvbCA9PT0gY2hhcmFjdGVyICYmIHN5bWJvbCA9PT0gbmV4dENoYXJhY3RlcikpIGluc2lkZUxpbmtPclRlbXBsYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHBhcmFtZXRlcl0gb2YgcmF3UGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhcmFtZXRlciA9IHBhcmFtZXRlci5zcGxpdCgnPScpLm1hcCgodmFsdWUpID0+IHZhbHVlLnRyaW0oKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3BsaXRQYXJhbWV0ZXIubGVuZ3RoID09PSAxKSBzcGxpdFBhcmFtZXRlci51bnNoaWZ0KChpbmRleCArIDEpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tzcGxpdFBhcmFtZXRlci5zaGlmdCgpIV0gPSBzcGxpdFBhcmFtZXRlci5qb2luKCc9Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uQ29udGVudCA9IHBhZ2VDb250ZW50XG4gICAgICAgICAgICAgICAgLnNwbGl0KG5ldyBSZWdFeHAoYD17Myx9ID8ke3NlY3Rpb259ID89ezMsfWApKVsxXVxuICAgICAgICAgICAgICAgIC5zcGxpdCgvPXszLH0vbSlbMF1cbiAgICAgICAgICAgICAgICAudHJpbSgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVxdWVzdHMgPSBzZWN0aW9uQ29udGVudC5tYXRjaCgvKD86XFwqID9cXG4pP1sgKjpdKnt7cm1hc3Npc3RcXC9jb3JlLis/KD89WyAqOl0qe3tybWFzc2lzdFxcL2NvcmV8JCkvZ2lzKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWRSZXF1ZXN0cylcbiAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0c1tzZWN0aW9uXSA9IG1hdGNoZWRSZXF1ZXN0cy5tYXAoKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QudHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJzZVRlbXBsYXRlUGFyYW1ldGVycyhyZXF1ZXN0LnJlcGxhY2VBbGwoLyg/OlxcKiA/XFxuKT9bICo6XSp7e3JtYXNzaXN0XFwvY29yZVxccypcXHx8fX1cXG4uKi9naXMsICcnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5mdWxsID0gcmVxdWVzdDtcblxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLm9yaWdpbmFsID0gcGFyYW1ldGVyc1sxXT8ucmVwbGFjZSgvXlxcWysvLCAnJykucmVwbGFjZSgvXSskLywgJycpID8/ICdVTktOT1dOJztcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5kZXN0aW5hdGlvbiA9IHBhcmFtZXRlcnNbMl0/LnJlcGxhY2UoL15cXFsrLywgJycpLnJlcGxhY2UoL10rJC8sICcnKSA/PyAnVU5LTk9XTic7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLnJlcXVlc3RlcikgcGFyYW1ldGVycy5yZXF1ZXN0ZXIgPSBwYXJhbWV0ZXJzLnNpZz8ubWF0Y2goL1xcW1xcW1VzZXI6KC4qPykoXFx8fF1dKS8pPy5bMV0udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbWV0ZXJzWzFdO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1ldGVyc1syXTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVycyBhcyB1bmtub3duIGFzIFJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0c1tzZWN0aW9uXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhhbGxSZXF1ZXN0cykubWFwKGFzeW5jIChbLCByZXF1ZXN0c10pID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMubWFwKGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd09sZFRpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQocmVxdWVzdC5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd05ld1RpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQocmVxdWVzdC5kZXN0aW5hdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXdPbGRUaXRsZSkgcmV0dXJuIG13Lm5vdGlmeShgSW52YWxpZCB0aXRsZSBcIiR7cmVxdWVzdC5vcmlnaW5hbH1cIiFgLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW13TmV3VGl0bGUpIHJldHVybiBtdy5ub3RpZnkoYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3QuZGVzdGluYXRpb259XCIhYCwgeyB0eXBlOiAnZXJyb3InIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZFRpdGxlID0gIS9bIzw+W1xcXXt8fV0vLnRlc3QocmVxdWVzdC5kZXN0aW5hdGlvbikgJiYgbXdOZXdUaXRsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFRpdGxlV2FybmluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRUaXRsZVdhcm5pbmcuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaW52YWxpZC13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVGl0bGVXYXJuaW5nLnRleHRDb250ZW50ID0gYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3QuZGVzdGluYXRpb259XCIhYDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWROYW1lc3BhY2UgPSAhW25hbWVzcGFjZXMuZmlsZSwgbmFtZXNwYWNlcy5jYXRlZ29yeV0uc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZXNwYWNlKSA9PiBtd09sZFRpdGxlLmdldE5hbWVzcGFjZUlkKCkgPT09IG5hbWVzcGFjZSB8fCBtd05ld1RpdGxlLmdldE5hbWVzcGFjZUlkKCkgPT09IG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWROYW1lc3BhY2VXYXJuaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaW52YWxpZC13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkTmFtZXNwYWNlV2FybmluZy50ZXh0Q29udGVudCA9IGBXYXJuaW5nOiBvcmlnaW5hbCBvciBkZXN0aW5hdGlvbiBwYWdlIGlzIGluIG5hbWVzcGFjZSBcIiR7bXdOZXdUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2VzLmZpbGUgPyAnZmlsZScgOiAnY2F0ZWdvcnknfVwiIWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFdpa2l0ZXh0ID0gYXdhaXQgbmV3IG13LkFwaSgpLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbWzoke3JlcXVlc3Qub3JpZ2luYWx9XV0gXHUyMTkyICR7dmFsaWRUaXRsZSA/IGBbWzoke3JlcXVlc3QuZGVzdGluYXRpb259XV1gIDogaW52YWxpZFRpdGxlV2FybmluZy5vdXRlckhUTUx9IHJlcXVlc3RlZCBieSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtdy51dGlsLmlzSVBBZGRyZXNzKHJlcXVlc3QucmVxdWVzdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYFtbU3BlY2lhbDpDb250cmlidXRpb25zLyR7cmVxdWVzdC5yZXF1ZXN0ZXJ9fCR7cmVxdWVzdC5yZXF1ZXN0ZXJ9XV1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgW1tVc2VyOiR7cmVxdWVzdC5yZXF1ZXN0ZXJ9fCR7cmVxdWVzdC5yZXF1ZXN0ZXJ9XV1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgvKFxcW3syfVNwZWNpYWw6Q29udHJpYnV0aW9uc1xcLyguKj8pXFx8XFwyXXsyfSkvLmV4ZWMocmVxdWVzdC5zaWcpPy5bMV0gPz8gJyh1bmtub3duKScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aXRoIHJlYXNvbmluZyBcIiR7cmVxdWVzdC5yZWFzb259XCJgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEh0bWwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHBhcnNlZFdpa2l0ZXh0LCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmlubmVySFRNTCA9IHBhcnNlZEh0bWwucXVlcnlTZWxlY3RvcignZGl2Lm13LXBhcnNlci1vdXRwdXQnKSEuZmlyc3RFbGVtZW50Q2hpbGQhLmlubmVySFRNTCE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWROYW1lc3BhY2UpIHJlcXVlc3RFbGVtZW50LmFwcGVuZChpbnZhbGlkTmFtZXNwYWNlV2FybmluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZWxlbWVudCA9IHJlcXVlc3RFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBvdXRwdXRFbGVtZW50LmlkID0gJ3JtdHItcmV2aWV3LXJlc3VsdCc7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhlYWRlci5pZCA9ICdybXRyLXJldmlldy1oZWFkZXInO1xuICAgICAgICBoZWFkZXIudGV4dENvbnRlbnQgPSAnVGVjaG5pY2FsIG1vdmUgcmVxdWVzdHMgcmV2aWV3JztcblxuICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChoZWFkZXIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3NlY3Rpb25JbmRleCwgW3NlY3Rpb24sIHJlcXVlc3RzXV0gb2YgT2JqZWN0LmVudHJpZXMoYWxsUmVxdWVzdHMpLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2VjdGlvbkhlYWRlci5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1oZWFkZXInKTtcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXIudGV4dENvbnRlbnQgPSBzZWN0aW9uO1xuXG4gICAgICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzZWN0aW9uSGVhZGVyKTtcblxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LXNlY3Rpb24tY29udGVudCcpO1xuXG4gICAgICAgICAgICBpZiAocmVxdWVzdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9SZXF1ZXN0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIG5vUmVxdWVzdHMudGV4dENvbnRlbnQgPSAnTm8gcmVxdWVzdHMgaW4gdGhpcyBzZWN0aW9uJztcblxuICAgICAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmFwcGVuZChub1JlcXVlc3RzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdHNMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3JlcXVlc3RJbmRleCwgcmVxdWVzdF0gb2YgcmVxdWVzdHMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RFbGVtZW50ID0gcmVxdWVzdC5lbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RDaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LXJlcXVlc3QtY2hlY2tib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmlkID0gYHJtdHItcmV2aWV3LXJlbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZVJlcXVlc3RDaGVja2JveC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgPSB7IHJlbW92ZTogdHJ1ZSwgcmVhc29uOiByZW1vdmVSZXF1ZXN0RHJvcGRvd24udmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdExhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdExhYmVsLmh0bWxGb3IgPSBgcm10ci1yZXZpZXctcmVtb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RMYWJlbC50ZXh0Q29udGVudCA9ICdSZW1vdmUgcmVxdWVzdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHJlbW92ZVJlcXVlc3RDaGVja2JveCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0TGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIGFzICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RHJvcGRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdDb250ZXN0ZWQgdGVjaG5pY2FsIHJlcXVlc3RzJykgcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlID0gJ0NvbnRlc3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3REcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdFJlbW92ZSkucmVhc29uID0gcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVzdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBbHJlYWR5IGRvbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgcGFnZSBuYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgdmVudWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1dpdGhkcmF3bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnTm90IGRvbmUnLFxuICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHJlbW92ZVJlcXVlc3REcm9wZG93bk9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RHJvcGRvd24uYXBwZW5kKG9wdGlvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLmFwcGVuZChyZW1vdmVSZXF1ZXN0RHJvcGRvd24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25DaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LXJlcXVlc3QtY2hlY2tib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmlkID0gYHJtdHItcmV2aWV3LW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzd2l0Y2hTZWN0aW9uQ2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdCBhcyBSZXF1ZXN0UmVzdWx0TW92ZSkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHN3aXRjaFNlY3Rpb25Ecm9wZG93bi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uTGFiZWwuaHRtbEZvciA9IGBybXRyLXJldmlldy1tb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25MYWJlbC50ZXh0Q29udGVudCA9ICdTd2l0Y2ggc2VjdGlvbic7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHN3aXRjaFNlY3Rpb25DaGVja2JveCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uTGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIHRvICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uRHJvcGRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdCBhcyBSZXF1ZXN0UmVzdWx0TW92ZSkuc2VjdGlvbiA9IHN3aXRjaFNlY3Rpb25Ecm9wZG93bi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24gPT09IHNlY3Rpb24pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gPT09IChzZWN0aW9uID09PSBkZWZhdWx0TW92ZVNlY3Rpb24gPyBmYWxsYmFja0RlZmF1bHRNb3ZlU2VjdGlvbiA6IGRlZmF1bHRNb3ZlU2VjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IG9wdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkRyb3Bkb3duLmFwcGVuZChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoc3dpdGNoU2VjdGlvbkRyb3Bkb3duKTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgd2l0aCByZWFzb25pbmcgJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25SZWFzb25pbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nLnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25SZWFzb25pbmcuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdFJlbW92ZSkucmVhc29uID0gc3dpdGNoU2VjdGlvblJlYXNvbmluZy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChzd2l0Y2hTZWN0aW9uUmVhc29uaW5nKTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgKG9wdGlvbmFsLCBhdXRvbWF0aWNhbGx5IHBpbmdzIHJlcXVlc3RvciBhbmQgc2lnbnMpJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzTGlzdC5hcHBlbmQocmVxdWVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmFwcGVuZChyZXF1ZXN0c0xpc3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzZWN0aW9uQ29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgc3VibWl0QnV0dG9uLmlkID0gJ3JtdHItcmV2aWV3LXN1Ym1pdCc7XG4gICAgICAgIHN1Ym1pdEJ1dHRvbi50ZXh0Q29udGVudCA9ICdTdWJtaXQnO1xuICAgICAgICBzdWJtaXRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdQYWdlUmV2aXNpb24gPSBhd2FpdCBnZXRQYWdlUmV2aXNpb24oKTtcblxuICAgICAgICAgICAgaWYgKG5ld1BhZ2VSZXZpc2lvbi5yZXZpZCAhPT0gcmV2SWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG13Lm5vdGlmeSgncm10ci1oZWxwZXI6IEFuIGVkaXQgY29uZmxpY3Qgb2NjdXJyZWQsIHBsZWFzZSBzdGFydCBvdmVyIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcblxuICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcblxuICAgICAgICAgICAgbGV0IGVuZFJlc3VsdCA9IHBhZ2VDb250ZW50O1xuXG4gICAgICAgICAgICBpbnRlcmZhY2UgQWxsQ2hhbmdlcyB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlOiBSZWNvcmQ8c3RyaW5nLCBSZXF1ZXN0W10+O1xuICAgICAgICAgICAgICAgIG1vdmU6IFJlY29yZDxzdHJpbmcsIFJlcXVlc3RbXT47XG4gICAgICAgICAgICAgICAgdG90YWw6IG51bWJlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hhbmdlczogQWxsQ2hhbmdlcyA9IHsgcmVtb3ZlOiB7fSwgbW92ZToge30sIHRvdGFsOiAwIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBPYmplY3QudmFsdWVzKGFsbFJlcXVlc3RzKSlcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2Ygc2VjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3QucmVzdWx0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoJ3JlbW92ZScgaW4gcmVxdWVzdC5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJlc3VsdCA9IGVuZFJlc3VsdC5yZXBsYWNlKHJlcXVlc3QuZnVsbCArICdcXG4nLCAnJykucmVwbGFjZShyZXF1ZXN0LmZ1bGwsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlcXVlc3QucmVzdWx0LnJlYXNvbiBpbiBjaGFuZ2VzLnJlbW92ZSkpIGNoYW5nZXMucmVtb3ZlW3JlcXVlc3QucmVzdWx0LnJlYXNvbl0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucmVtb3ZlW3JlcXVlc3QucmVzdWx0LnJlYXNvbl0ucHVzaChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMudG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnbW92ZScgaW4gcmVxdWVzdC5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25UaXRsZUFmdGVyID0gc2VjdGlvbnNbc2VjdGlvbnMuaW5kZXhPZihyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uKSArIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShyZXF1ZXN0LmZ1bGwgKyAnXFxuJywgJycpLnJlcGxhY2UocmVxdWVzdC5mdWxsLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKGAoXFxuP1xcbj8oPzo9ezMsfSA/JHtzZWN0aW9uVGl0bGVBZnRlcn0gPz17Myx9fCQpKWApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcXG4ke3JlcXVlc3QuZnVsbH0ke3JlcXVlc3QucmVzdWx0LnJlYXNvbiA/IGBcXG46OiAke3JlcXVlc3QucmVxdWVzdGVyICYmIHJlcXVlc3QucmVxdWVzdGVyLmxlbmd0aCA+IDAgPyAobXcudXRpbC5pc0lQQWRkcmVzcyhyZXF1ZXN0LnJlcXVlc3RlcikgPyAnJyA6IGBAW1tVc2VyOiR7cmVxdWVzdC5yZXF1ZXN0ZXJ9fCR7cmVxdWVzdC5yZXF1ZXN0ZXJ9XV0gYCkgOiAnJ30gJHtyZXF1ZXN0LnJlc3VsdC5yZWFzb259IH5+fn5gIDogJyd9JDFgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlcXVlc3QucmVzdWx0LnNlY3Rpb24gaW4gY2hhbmdlcy5tb3ZlKSkgY2hhbmdlcy5tb3ZlW3JlcXVlc3QucmVzdWx0LnNlY3Rpb25dID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMubW92ZVtyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uXS5wdXNoKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy50b3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hhbmdlcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG13Lm5vdGlmeSgnTm8gY2hhbmdlcyB0byBtYWtlIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgbm9SZW1haW5pbmcgPSBPYmplY3QudmFsdWVzKGFsbFJlcXVlc3RzKS5ldmVyeSgoc2VjdGlvbikgPT5cbiAgICAgICAgICAgICAgICBzZWN0aW9uLmV2ZXJ5KChyZXF1ZXN0KSA9PiByZXF1ZXN0LnJlc3VsdCAmJiAncmVtb3ZlJyBpbiByZXF1ZXN0LnJlc3VsdCksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBlZGl0U3VtbWFyeSA9IGBIYW5kbGVkICR7Y2hhbmdlcy50b3RhbH0gcmVxdWVzdCR7Y2hhbmdlcy50b3RhbCA+IDEgPyAncycgOiAnJ306ICR7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcy5yZW1vdmUpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBgUmVtb3ZlZCAke09iamVjdC5lbnRyaWVzKGNoYW5nZXMucmVtb3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChbcmVhc29uLCBwYWdlc10pID0+IGAke3BhZ2VzLm1hcCgocGFnZSkgPT4gYFtbJHtwYWdlLm9yaWdpbmFsfV1dYCkuam9pbignLCAnKX0gYXMgJHtyZWFzb24udG9Mb3dlckNhc2UoKX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKX1gXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH0ke1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMubW92ZSkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IGAke09iamVjdC5lbnRyaWVzKGNoYW5nZXMucmVtb3ZlKS5sZW5ndGggPiAwID8gJywgJyA6ICcnfU1vdmVkICR7T2JqZWN0LmVudHJpZXMoY2hhbmdlcy5tb3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChbZGVzdGluYXRpb24sIHBhZ2VzXSkgPT4gYCR7cGFnZXMubWFwKChwYWdlKSA9PiBgW1ske3BhZ2Uub3JpZ2luYWx9XV1gKS5qb2luKCcsICcpfSB0byBcIiR7ZGVzdGluYXRpb259XCJgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKX1gXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH0ke25vUmVtYWluaW5nID8gJyAobm8gcmVxdWVzdHMgcmVtYWluKScgOiAnJ30gKHZpYSBbW1VzZXI6RWVqaXQ0My9zY3JpcHRzL3JtdHItaGVscGVyfHNjcmlwdF1dKWA7XG5cbiAgICAgICAgICAgIGF3YWl0IG5ldyBtdy5BcGkoKS5lZGl0KG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwgKCkgPT4gKHsgdGV4dDogZW5kUmVzdWx0LCBzdW1tYXJ5OiBlZGl0U3VtbWFyeSB9KSk7XG5cbiAgICAgICAgICAgIG13Lm5vdGlmeShgU3VjY2Vzc2Z1bGx5IGhhbmRsZWQgJHtjaGFuZ2VzLnRvdGFsfSByZXF1ZXN0cywgcmVsb2FkaW5nLi4uYCwgeyB0eXBlOiAnc3VjY2VzcycgfSk7XG5cbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbG9hZGluZ1NwaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGxvYWRpbmdTcGlubmVyLmlkID0gJ3JtdHItcmV2aWV3LWxvYWRpbmcnO1xuICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIHN1Ym1pdEJ1dHRvbi5hcHBlbmQobG9hZGluZ1NwaW5uZXIpO1xuXG4gICAgICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kKHN1Ym1pdEJ1dHRvbik7XG5cbiAgICAgICAgbXcudXRpbC4kY29udGVudFswXS5wcmVwZW5kKG91dHB1dEVsZW1lbnQpO1xuXG4gICAgICAgIG91dHB1dEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9KTtcbn0pO1xuXG4vKipcbiAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYSB3aWtpIHBhZ2UncyBsYXRlc3QgcmV2aXNpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VSZXZpc2lvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoYXdhaXQgbmV3IG13LkFwaSgpLmdldCh7XG4gICAgICAgICAgICBhY3Rpb246ICdxdWVyeScsXG4gICAgICAgICAgICBmb3JtYXR2ZXJzaW9uOiAnMicsXG4gICAgICAgICAgICBwcm9wOiAncmV2aXNpb25zJyxcbiAgICAgICAgICAgIHJ2cHJvcDogWydjb250ZW50JywgJ2lkcyddLFxuICAgICAgICAgICAgcnZzbG90czogJ21haW4nLFxuICAgICAgICAgICAgdGl0bGVzOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG4gICAgICAgIH0gc2F0aXNmaWVzIEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zKSkgYXMgUGFnZVJldmlzaW9uc1Jlc3VsdFxuICAgICkucXVlcnkhLnBhZ2VzWzBdLnJldmlzaW9uc1swXTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7OzttQkFHQSxHQUFHLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixFQUFHLElBQU0sQ0FDdEMsR0FBSSxHQUFHLE9BQU8sSUFBSSxZQUFZLElBQU0sK0NBQWdELE9BRXBGLGlCQUFpQixzQ0FBc0MsRUFFdkQsSUFBTUEsRUFBYSxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsRUFFN0NDLEVBQVksR0FFSCxHQUFHLEtBQUssZUFDakIsR0FBRyxPQUFPLElBQUksTUFBTSxJQUFNLFVBQVksT0FBUyxhQUMvQyxJQUNBLHVCQUNBLHNCQUNKLEVBRUssaUJBQWlCLFFBQVMsTUFBT0MsR0FBVSxDQUc1QyxHQUZBQSxFQUFNLGVBQWUsRUFFakJELEVBQVcsT0FBTyxTQUFTLGNBQWMscUJBQXFCLEdBQUcsZUFBZSxFQUMvRUEsRUFBWSxHQUVq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LElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUNwQixPQUFRLFFBQ1IsY0FBZSxJQUNmLEtBQU0sWUFDTixPQUFRLENBQUMsVUFBVyxLQUFLLEVBQ3pCLFFBQVMsT0FDVCxPQUFRLEdBQUcsT0FBTyxJQUFJLFlBQVksQ0FDdEMsQ0FBbUMsR0FDckMsTUFBTyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FDakMiLAogICJuYW1lcyI6IFsibmFtZXNwYWNlcyIsICJkaXNwbGF5ZWQiLCAiZXZlbnQiLCAicGFnZVJldmlzaW9uIiwgImdldFBhZ2VSZXZpc2lvbiIsICJyZXZJZCIsICJwYWdlQ29udGVudCIsICJzZWN0aW9ucyIsICJkZWZhdWx0TW92ZVNlY3Rpb24iLCAiZmFsbGJhY2tEZWZhdWx0TW92ZVNlY3Rpb24iLCAiYWxsUmVxdWVzdHMiLCAicGFyc2VUZW1wbGF0ZVBhcmFtZXRlcnMiLCAidGVtcGxhdGUiLCAicmF3UGFyYW1ldGVycyIsICJpZ25vcmVkU3RhcnRTeW1ib2xzIiwgImlnbm9yZWRFbmRTeW1ib2xzIiwgImluc2lkZUxpbmtPclRlbXBsYXRlIiwgImN1cnJlbnRUZXh0IiwgImluZGV4IiwgImNoYXJhY3RlciIsICJuZXh0Q2hhcmFjdGVyIiwgInN5bWJvbCIsICJwYXJhbWV0ZXJzIiwgInBhcmFtZXRlciIsICJzcGxpdFBhcmFtZXRlciIsICJ2YWx1ZSIsICJzZWN0aW9uIiwgIm1hdGNoZWRSZXF1ZXN0cyIsICJyZXF1ZXN0IiwgInJlcXVlc3RzIiwgIm13T2xkVGl0bGUiLCAibXdOZXdUaXRsZSIsICJ2YWxpZFRpdGxlIiwgImludmFsaWRUaXRsZVdhcm5pbmciLCAidmFsaWROYW1lc3BhY2UiLCAibmFtZXNwYWNlIiwgImludmFsaWROYW1lc3BhY2VXYXJuaW5nIiwgInBhcnNlZFdpa2l0ZXh0IiwgInBhcnNlZEh0bWwiLCAicmVxdWVzdEVsZW1lbnQiLCAib3V0cHV0RWxlbWVudCIsICJoZWFkZXIiLCAic2VjdGlvbkluZGV4IiwgInNlY3Rpb25IZWFkZXIiLCAic2VjdGlvbkNvbnRlbnQiLCAibm9SZXF1ZXN0cyIsICJyZXF1ZXN0c0xpc3QiLCAicmVxdWVzdEluZGV4IiwgInJlbW92ZVJlcXVlc3RDaGVja2JveCIsICJyZW1vdmVSZXF1ZXN0RHJvcGRvd24iLCAicmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzIiwgInN3aXRjaFNlY3Rpb25DaGVja2JveCIsICJyZW1vdmVSZXF1ZXN0TGFiZWwiLCAicmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucyIsICJvcHRpb24iLCAib3B0aW9uRWxlbWVudCIsICJzd2l0Y2hTZWN0aW9uRHJvcGRvd24iLCAic3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzIiwgInN3aXRjaFNlY3Rpb25MYWJlbCIsICJzd2l0Y2hTZWN0aW9uUmVhc29uaW5nIiwgInN1Ym1pdEJ1dHRvbiIsICJsb2FkaW5nU3Bpbm5lciIsICJlbmRSZXN1bHQiLCAiY2hhbmdlcyIsICJzZWN0aW9uVGl0bGVBZnRlciIsICJub1JlbWFpbmluZyIsICJlZGl0U3VtbWFyeSIsICJyZWFzb24iLCAicGFnZXMiLCAicGFnZSIsICJkZXN0aW5hdGlvbiJdCn0K