Jump to content

User:Eejit43/scripts/AFCRHS.js

From Wikipedia, the free encyclopedia
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/AFCRHS.ts

"use strict";(()=>{(function(){if(mw.config.get("wgPageName")!=="Wikipedia:Articles_for_creation/Redirects"&&mw.config.get("wgPageName")!=="Wikipedia:Articles_for_creation/Categories")return;let w=mw.config.get("wgPageName").replaceAll("_"," "),v=[],k=[],N=" ([[User:Eejit43/scripts/AFCRHS|AFCRHS 2]])",x=0,I=0,V=[],T=[],j={exists:"The title you suggested already exists on Wikipedia",blank:"We cannot accept empty submissions","no-target":" A redirect cannot be created unless the target is an existing article. Either you have not specified the target, or the target does not exist",unlikely:"The title you suggested seems unlikely. Could you provide a source showing that it is a commonly used alternate name?","not-redirect":"This request is not a redirect request",custom:""},M={exists:"The category you suggested already exists on Wikipedia",blank:"We cannot accept empty submissions",unlikely:"It seems unlikely that there are enough pages to support this category","not-category":"This request is not a category request",custom:""};async function D(){let e=await E(w);e=z(e);let l=/==.*?==/;e=e.slice(Math.max(0,e.search(l))),k=e.match(/^==.*?==$((\r?\n?)(?!==[^=]).*)*/gim);for(let[a,t]of k.entries())if(!/({{\s*afc(?!\s+comment)|this is an archived discussion)/i.test(t)){let s=t.match(l)[0];if(s.search(/redirect request/i)!==-1){let r=/\[\[(\s*[^=]*?)*?]]/g,n=s.match(r);if(!n)continue;for(let _=0;_<n.length;_++)n[_]=n[_].replaceAll(/[[\]]/g,""),n[_].charAt(0)===":"&&(n[_]=n[_].slice(1));/target of redirect:\s*\[\[([^[\]]*)]]/i.test(t);let d=$.trim(RegExp.$1),A=/reason:[\t ]*?(.+)/i.exec(t),H=A&&A[1].trim()?A[1]:null,g=/source.*?:[\t ]*?(.+)/i.exec(t),f=g&&g[1].trim()?g[1]:null,h={type:"redirect",from:[],section:a,to:d,title:d,reason:H,source:f};for(let _ of n){let P={type:"redirect",to:d,id:x,title:_,action:""};h.from.push(P),V.push(P),x++}v.push(h)}else if(s.search(/category request/i)!==-1){let r=/\[\[[^[\]]+]]/.exec(s);if(!r)continue;r=r[0],r=r.replaceAll(/[[\]]/g,""),r=r.replaceAll(/category\s*:\s*/gi,"Category:"),r.charAt(0)===":"&&(r=r.slice(1));let n=t.slice(s.length),p=n.indexOf("Parent category/categories");p>=0&&(n=n.slice(Math.max(0,p)));let d=[],u=null,A=/\[\[\s*:\s*(category:[^[\]]*)]]/gi;do u=A.exec(n),u&&d.push(u[1]);while(u);let H={type:"category",title:r,section:a,id:x,action:"",parents:d.join(",")};x++,v.push(H),V.push(H)}}let i=$("<h3>Reviewing AfC redirect requests</h3>");W(i);let m=i.parent(),c=1,o=[{label:"Accept",value:"accept"},{label:"Decline",value:"decline"},{label:"Comment",value:"comment"},{label:"None",selected:!0,value:"none"}];for(let a of v){let t;t=a.to===void 0?"":a.to.replaceAll(/\s/g,"");let b=$("<ul>"),s=$("<li>");if(a.type==="redirect"){if(s.append("Redirect(s) to "),t){if(!a.to)for(let n=a.from.length-1;n>=0;n--)T.push({id:a.from[n].id,reason:"not-redirect"})}else for(let n=a.from.length-1;n>=0;n--)T.push({id:a.from[n].id,reason:"no-target"});a===""||a===" "?(s.append("Empty submission #"+c),c++):t.length>0?s.append($("<a>").attr("href",mw.config.get("wgArticlePath").replace("$1",encodeURIComponent(a.to))).attr("target","_blank").text(a.to)):s.append("<b>no target given</b>: ");let r=$("<ul>").appendTo(s);for(let n=0;n<a.from.length;n++){let p=a.from[n],d=p.title;d.replaceAll(/\s*/gi,"").length===0&&(d="<b>no title specified</b>, check the request details");let u=$("<ul>");a.reason&&u.append("<li>Reason: "+a.reason+"</li>"),a.source&&u.append("<li>Source: "+a.source+"</li>");let A='http://www.google.com/search?q="'+encodeURIComponent(d)+'"+-wikipedia.org';r.append($("<li>").append("From: "+d+" (<small><a href='"+A+`'" target="_blank">Google</a> <b>&middot;</b> <a href="https://en.wikipedia.org/wiki/Special:WhatLinksHere/`+encodeURIComponent(d)+'" target="_blank">what links here</a>)</small><br/>').append(u).append($("<label>").attr("for","afcHelper_redirect_action_"+p.id).text("Action: ")).append(U("afcHelper_redirect_action_"+p.id,o,S(p.id))).append($("<div>").attr("id","afcHelper_redirect_extra_"+p.id)))}}else{let r=a.id;s.append("Category submission: ").append($("<a>").attr("href","/wiki/"+a.title).attr("title",a.title).text(a.title)).append("<br />").append($("<label>").attr("for","afcHelper_redirect_action_"+r).text("Action: ")).append(U("afcHelper_redirect_action_"+r,o,S(r))).append($("<div>").attr("id","afcHelper_redirect_extra_"+r))}b.append(s),m.append(b)}m.append($("<button>").attr("id","afcHelper_redirect_done_button").attr("name","afcHelper_redirect_done_button").text("Done").click(L));for(let a of T)$("#afcHelper_redirect_action_"+a.id).attr("value","decline"),q(a.id),$("#afcHelper_redirect_decline_"+a.id).attr("value",a.reason)}function S(e){return function(){q(e)}}function q(e){let l=$("#afcHelper_redirect_extra_"+e),i=$("#afcHelper_redirect_action_"+e).val();switch(l.html(""),i){case"accept":{V[e].type==="redirect"?(l.append('<label for="afcHelper_redirect_from_'+e+'">From: </label>'),l.append($("<input>").attr("type","text").attr("name","afcHelper_redirect_from_"+e).attr("id","afcHelper_redirect_from_"+e).attr("value",V[e].title)),l.html(l.html()+'&nbsp;<br /><label for="afcHelper_redirect_to_'+e+'">To: </label><input type="text" name="afcHelper_redirect_to_'+e+'" id="afcHelper_redirect_to_'+e+'" value="'+V[e].to+'" />'),l.html(l.html()+'<br /><label for="afcHelper_redirect_append_'+e+'">Template to append: (<a href="https://en.wikipedia.org/wiki/Wikipedia:TMR" target="_blank">Help</a>)</label>'),l.html(l.html()+F("afcHelper_redirect_append_"+e,[{label:"None",selected:!0,value:"none"},{labelAndValue:"Frequently used",disabled:!0},{labelAndValue:"R from alternative language"},{labelAndValue:"R from alternative name"},{labelAndValue:"R from modification"},{labelAndValue:"R to section"},{labelAndValue:"R from diacritic"},{labelAndValue:"R to diacritic"},{labelAndValue:"From \u2013 abbreviation, capitalisation, and grammar",disabled:!0},{labelAndValue:"R from acronym"},{labelAndValue:"R from initialism"},{labelAndValue:"R from CamelCase"},{labelAndValue:"R from miscapitalisation"},{labelAndValue:"R from other capitalisation"},{labelAndValue:"R from modification"},{labelAndValue:"R from plural"},{label:"From parts of speach",value:"From parts of speach",disabled:!0},{labelAndValue:"R from adjective"},{labelAndValue:"R from adverb"},{labelAndValue:"R from common noun"},{labelAndValue:"R from gerund"},{labelAndValue:"R from proper noun"},{labelAndValue:"R from verb"},{labelAndValue:"From \u2013 spelling",disabled:!0},{labelAndValue:"R from alternative spelling"},{labelAndValue:"R from misspelling"},{labelAndValue:"R from American English"},{labelAndValue:"R from British English"},{labelAndValue:"R from ASCII-only"},{labelAndValue:"R from diacritic"},{labelAndValue:"R from ligature"},{labelAndValue:"R from stylization"},{labelAndValue:"R from alternative transliteration"},{labelAndValue:"R from Wade\u2013Giles romanization"},{labelAndValue:"From alternative names, general",disabled:!0},{labelAndValue:"R from alternative language"},{labelAndValue:"R from alternative name"},{labelAndValue:"R from former name"},{labelAndValue:"R from historic name"},{labelAndValue:"R from incomplete name"},{labelAndValue:"R from incorrect name"},{labelAndValue:"R from letter\u2013word combination"},{labelAndValue:"R from long name"},{labelAndValue:"R from portmanteau"},{labelAndValue:"R from predecessor company name"},{labelAndValue:"R from short name"},{labelAndValue:"R from sort name"},{labelAndValue:"R from less specific name"},{labelAndValue:"R from more specific name"},{labelAndValue:"R from antonym"},{labelAndValue:"R from eponym"},{labelAndValue:"R from synonym"},{labelAndValue:"R from Roman numerals"},{labelAndValue:"From alternative names, geography",disabled:!0},{labelAndValue:"R from Canadian settlement name"},{labelAndValue:"R from name and country"},{labelAndValue:"R from city and state"},{labelAndValue:"R from city and province"},{labelAndValue:"R from more specific geographic name"},{labelAndValue:"R from postal abbreviation"},{labelAndValue:"R from postal code"},{labelAndValue:"R from US postal abbreviation"},{labelAndValue:"From alternative names, organisms",disabled:!0},{labelAndValue:"R from scientific abbreviation"},{labelAndValue:"R from scientific name"},{labelAndValue:"R from alternative scientific name"},{labelAndValue:"R from monotypic taxon"},{labelAndValue:"From alternative names, people",disabled:!0},{labelAndValue:"R from birth name"},{labelAndValue:"R from given name"},{labelAndValue:"R from married name"},{labelAndValue:"R from name with title"},{labelAndValue:"R from non-neutral name"},{labelAndValue:"R from personal name"},{labelAndValue:"R from pseudonym"},{labelAndValue:"R from relative"},{labelAndValue:"R from spouse"},{labelAndValue:"R from surname"},{labelAndValue:"From alternative names, technical",disabled:!0},{labelAndValue:"R from Bluebook abbreviation"},{labelAndValue:"R from brand name"},{labelAndValue:"R from drug trade name"},{labelAndValue:"R from file name"},{labelAndValue:"R from Java package name"},{labelAndValue:"R from MathSciNet abbreviation"},{labelAndValue:"R from molecular formula"},{labelAndValue:"R from NLM abbreviation"},{labelAndValue:"R from product name"},{labelAndValue:"R from slogan"},{labelAndValue:"R from symbol"},{labelAndValue:"R from systematic abbreviations"},{labelAndValue:"R from technical name"},{labelAndValue:"R from trademark"},{labelAndValue:"From \u2013 navigation",disabled:!0},{labelAndValue:"R from file metadata link"},{labelAndValue:"R mentioned in hatnote"},{labelAndValue:"R from shortcut"},{labelAndValue:"R from template shortcut"},{labelAndValue:"From disambiguations",disabled:!0},{labelAndValue:"R from ambiguous term"},{labelAndValue:"R from incomplete disambiguation"},{labelAndValue:"R from incorrect disambiguation"},{labelAndValue:"R from other disambiguation"},{labelAndValue:"R from predictable disambiguation"},{labelAndValue:"R from unnecessary disambiguation"},{labelAndValue:"From mergers, duplicates, and moves",disabled:!0},{labelAndValue:"R from duplicated article"},{labelAndValue:"R with history"},{labelAndValue:"R from merge"},{labelAndValue:"R from move"},{labelAndValue:"R with old history"},{labelAndValue:"From fiction",disabled:!0},{labelAndValue:"R from fictional character"},{labelAndValue:"R from fictional element"},{labelAndValue:"R from fictional location"},{labelAndValue:"From related info",disabled:!0},{labelAndValue:"R from album"},{labelAndValue:"R from animal"},{labelAndValue:"R from book"},{labelAndValue:"R from catchphrase"},{labelAndValue:"R from domain name"},{labelAndValue:"R from top-level domain"},{labelAndValue:"R from film"},{labelAndValue:"R from gender"},{labelAndValue:"R from legislation"},{labelAndValue:"R from list topic"},{labelAndValue:"R from member"},{labelAndValue:"R from person"},{labelAndValue:"R from phrase"},{labelAndValue:"R from quotation"},{labelAndValue:"R from related word"},{labelAndValue:"R from school"},{labelAndValue:"R from song"},{labelAndValue:"R from subtopic"},{labelAndValue:"R from team"},{labelAndValue:"R from work"},{labelAndValue:"R from writer"},{labelAndValue:"R from Unicode"},{labelAndValue:"To \u2013 grammar, punctuation, and spelling",disabled:!0},{labelAndValue:"R to acronym"},{labelAndValue:"R to initialism"},{labelAndValue:"R to ASCII-only title"},{labelAndValue:"R to diacritic"},{labelAndValue:"R to ligature"},{labelAndValue:"R to plural"},{labelAndValue:"To alternative names",disabled:!0},{labelAndValue:"R to former name"},{labelAndValue:"R to historic name"},{labelAndValue:"R to joint biography"},{labelAndValue:"R to name with title"},{labelAndValue:"R to monotypic taxon"},{labelAndValue:"R to scientific name"},{labelAndValue:"R to systematic name"},{labelAndValue:"R to technical name"},{labelAndValue:"To \u2013 navigation and disambiguation",disabled:!0},{labelAndValue:"R to anchor"},{labelAndValue:"R to anthroponymy page"},{labelAndValue:"R to disambiguation page"},{labelAndValue:"R to list entry"},{labelAndValue:"R to section"},{labelAndValue:"To miscellaneous",disabled:!0},{labelAndValue:"R to decade"},{labelAndValue:"R to related topic"},{labelAndValue:"R to subpage"},{labelAndValue:"R to subtopic"},{labelAndValue:"R to TV episode list entry"},{label:"Custom - prompt me",value:"custom"}]))):(l.html('<label for="afcHelper_redirect_name_'+e+'">Category name: </label><input type="text" size="100" name="afcHelper_redirect_name_'+e+'" id="afcHelper_redirect_name_'+e+'" value="'+V[e].title+'" />'),l.html(l.html()+'<br /><label for="afcHelper_redirect_parents_'+e+'">Parent categories (comma-separated):</label><input type="text" size="100" id="afcHelper_redirect_parents_'+e+'" name="afcHelper_redirect_parents_'+e+'" value="'+V[e].parents+'" />'),l.append("<br />"),l.append($("<input>",{type:"checkbox",name:"afcHelper_redirect_container_"+e,id:"afcHelper_redirect_container_"+e})),l.append('<label for="afcHelper_redirect_container_'+e+'">This is a <a href="/wiki/Wikipedia:Container_category" title="Wikipedia:Container category">container category</a></label>'),l.html(l.html()+'<br /><input type="checkbox" name="afcHelper_redirect_container_'+e+'"')),l.html(l.html()+'<br /><label for="afcHelper_redirect_comment_'+e+'">Comment:</label><input type="text" size="100" id="afcHelper_redirect_comment_'+e+'" name="afcHelper_redirect_comment_'+e+'"/>');break}case"decline":{V[e].type==="redirect"?l.html('<label for="afcHelper_redirect_decline_'+e+'">Reason for decline: </label>'+F("afcHelper_redirect_decline_"+e,[{label:"Already exists",value:"exists"},{label:"Blank request",value:"blank"},{label:"No valid target specified",value:"no-target"},{label:"Unlikely search term",value:"unlikely"},{label:"Not a redirect request",value:"not-redirect"},{label:"Custom - reason below",selected:!0,value:"custom"}])):l.html('<label for="afcHelper_redirect_decline_'+e+'">Reason for decline: </label>'+F("afcHelper_redirect_decline_"+e,[{label:"Already exists",value:"exists"},{label:"Blank request",value:"blank"},{label:"Unlikely category",value:"unlikely"},{label:"Not a category request",value:"not-category"},{label:"Custom - reason below",selected:!0,value:"custom"}])),l.html(l.html()+'<br/><label for="afcHelper_redirect_comment_'+e+'">Comment: </label><input type="text" size="100" id="afcHelper_redirect_comment_'+e+'" name="afcHelper_redirect_comment_'+e+'"/>');break}case"none":{l.html("");break}default:l.html(l.html()+'<label for="afcHelper_redirect_comment_'+e+'">Comment: </label><input type="text" size="100" id="afcHelper_redirect_comment_'+e+'" name="afcHelper_redirect_comment_'+e+'"/>')}}async function L(){for(let[a,t]of V.entries()){let b=$("#afcHelper_redirect_action_"+a).val();t.action=b,b!=="none"&&(b==="accept"?t.type==="redirect"?(t.title=$("#afcHelper_redirect_from_"+a).val(),t.to=$("#afcHelper_redirect_to_"+a).val(),t.append=$("#afcHelper_redirect_append_"+a).val(),t.append==="custom"&&(t.append=prompt("Please enter the template to append to "+t.title+". Do not include the curly brackets.")),t.append=t.append==="none"||t.append===null?"":"{{"+t.append+"}}"):(t.title=$("#afcHelper_redirect_name_"+a).val(),t.parents=$("#afcHelper_redirect_parents_"+a).val(),t.container=$("#afcHelper_redirect_container_"+a).is(":checked")):b==="decline"&&(t.reason=$("#afcHelper_redirect_decline_"+a).val()),t.comment=$("#afcHelper_redirect_comment_"+a).val())}W('<ul id="afcHelper_status"></ul><ul id="afcHelper_finish"></ul>');let e=function(a){$("#afcHelper_status").append(a)};$("#afcHelper_finish").html($("#afcHelper_finish").html()+'<span id="afcHelper_finished_wrapper"><span id="afcHelper_finished_main" style="display:none"><li id="afcHelper_done"><b>Done (<a href="'+mw.config.get("wgArticlePath").replace("$1",encodeURI(w))+'?action=purge" title="'+w+'">Reload page</a>)</b></li></span></span>');let l=await E(w,e),i=0,m=0,c=0;e("<li>Processing "+v.length+" submission"+(v.length===1?"":"s")+"...</li>");for(let a of v){if(!l.includes(k[a.section])){e("<li>Skipping "+a.title+": Cannot find section. Perhaps it was modified in the mean time?</li>");continue}let t=k[a.section],b=l.indexOf(k[a.section]),s=b+t.length;if(a.type==="category")switch(a.action){case"accept":{let r="<!--Created by WP:AFC -->";a.container&&(r+=`
{{Container category}}`),a.parents!==""&&(r=a.parents.split(",").map(u=>"[["+u+"]]").join(`
`)),C(a.title,r,"Created via [[WP:AFC|Articles for Creation]]",!0);let n="{{subst:WPAFC/article|class=Cat}}",p=new mw.Title(a.title).getTalkPage().toText();C(p,n,"Placing WPAFC project banner",!0);let d=t.match(/==[^=]*==/)[0];t=d+`
{{AfC-c|a}}
`+t.slice(d.length),t+=a.comment===""?`
*{{subst:afc category}} ~~~~
`:`
*{{subst:afc category|accept|2=`+a.comment+`}} ~~~~
`,t+=`{{AfC-c|b}}
`,i++;break}case"decline":{let r=t.match(/==[^=]*==/)[0],n=M[a.reason];if(n===""?n=a.comment:a.comment!==""&&(n=n+": "+a.comment),n===""){$("afcHelper_status").html($("#afcHelper_status").html()+"<li>Skipping "+a.title+": No decline reason specified.</li>");continue}t=r+`
{{AfC-c|d}}
`+t.slice(r.length),t+=a.comment===""?`
*{{subst:afc category|`+a.reason+`}} ~~~~
`:`
*{{subst:afc category|decline|2=`+n+`}} ~~~~
`,t+=`{{AfC-c|b}}
`,m++;break}case"comment":{a.comment!==""&&(t+=`

{{afc comment|1=`+a.comment+` ~~~~}}
`),c++;break}}else{let r="",n="",p="",d=0,u=0,A=0,H=!1;for(let g=0;g<a.from.length;g++){let f=a.from[g];switch(f.action){case"accept":{let h=`#REDIRECT [[${f.to}]]${f.append?`

{{Redirect category shell|
${f.append}
}}`:""}`;C(f.title,h,"Redirected page to [["+f.to+"]] via [[WP:AFC|Articles for Creation]]",!0);let _=new mw.Title(f.title);if(!_.isTalkPage()){let P=_.getTalkPage().toText();C(P,"{{subst:WPAFC/redirect}}","Placing WPAFC project banner",!0)}r+=f.title+" &rarr; "+f.to,f.comment===""?r+=". ":(r+=": "+f.comment,H=!0),d++;break}case"decline":{let h=j[f.reason];if(h===""?h=f.comment:f.comment!==""&&(h=h+": "+f.comment),h===""){$("#afcHelper_status").html($("#afcHelper_status").html()+"<li>Skipping "+f.title+": No decline reason specified.</li>");continue}n+=f.reason==="blank"||f.reason==="not-redirect"?h+". ":f.title+" &rarr; "+f.to+": "+h+". ",u++;break}case"comment":{p+=f.title+": "+f.comment+". ",A++;break}}}let y="";if(d>0&&(y+=`
*{{subst:afc redirect|accept|2=`+r+" Thank you for your contributions to Wikipedia!}} ~~~~"),u>0&&(y+=`
*{{subst:afc redirect|decline|2=`+n+"}} ~~~~"),A>0&&(y+=`
*{{afc comment|1=`+p+"~~~~}}"),y+=`
`,!H&&d===a.from.length&&(y=d>1?`
*{{subst:afc redirect|all}} ~~~~
`:`
*{{subst:afc redirect}} ~~~~
`),d+u+A>0)if(d+u===a.from.length){let g=t.match(/==[^=]*==/)[0];d>0&&u>0?t=g+`
{{AfC-c|p}}`+t.slice(g.length):d>0?t=g+`
{{AfC-c|a}}`+t.slice(g.length):t=g+`
{{AfC-c|d}}`+t.slice(g.length),t+=y,t+=`{{AfC-c|b}}
`}else t+=y+`
`;i+=d,m+=u,c+=A}l=l.slice(0,Math.max(0,b))+t+l.slice(Math.max(0,s))}let o="Updating submission status:";i>0&&(o+=" accepting "+i+" request"+(i>1?"s":"")),m>0&&(i>0&&(o+=","),o+=" declining "+m+" request"+(m>1?"s":"")),c>0&&((i>0||m>0)&&(o+=","),o+=" commenting on "+c+" request"+(c>1?"s":"")),C(w,l,o,!1),$(document).ajaxStop(()=>{$("#afcHelper_finished_main").css("display","")})}async function E(e,l){l=l??function(){},l('<li id="afcHelper_get'+R(e)+'">Getting <a href="'+mw.config.get("wgArticlePath").replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></li>");let i=await new mw.Api().get({action:"query",prop:"revisions",rvprop:"content",format:"json",indexpageids:!0,titles:e}),m=i.query.pageids[0];if(m==="-1")return l('The page <a class="new" href="'+mw.config.get("wgArticlePath").replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a> does not exist"),"";let c=i.query.pages[m].revisions[0]["*"];return l('<li id="afcHelper_get'+R(e)+'">Got <a href="'+mw.config.get("wgArticlePath").replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></li>"),c}function z(e){let l=/(\[){1,2}(?:https?:)?\/\/(en.wikipedia.org\/wiki|enwp.org)\/([^\s[\]|]+)([\s|])?((?:\[\[[^[\]]*]]|[^[\]])*)(]){1,2}/gi,i=e,m;for(;m=l.exec(i);){let c=decodeURI(m[3].replaceAll("_"," ")),o=decodeURI(m[5].replaceAll("_"," "));c===o&&(o="");let a="[["+c+(o?"|"+o:"")+"]]";e=e.replace(m[0],a)}return e}function F(e,l){return U(e,l).prop("outerHTML")}function U(e,l,i){let m=$("<select>").attr("name",e).attr("id",e);i!==null&&m.change(i);for(let c of l){c.labelAndValue&&(c.value=c.labelAndValue,c.label=c.labelAndValue);let o=$("<option>").appendTo(m).val(c.value).text(c.label);c.selected&&o.attr("selected","selected"),c.disabled&&o.attr("disabled","disabled")}return m}function W(e,l){if(arguments.length===0||e===""||e===null)return $("#display-message").empty().hide(),!0;{let i=$("#display-message");if(i.length===0)if(i=$('<div id="display-message" style="margin:1em;padding:0.5em 2.5%;border:solid 1px #ddd;background-color:#fcfcfc;font-size: 0.8em"></div>'),mw.util.$content.length>0)mw.util.$content.prepend(i);else return!1;return l&&i.prop("class","display-message-"+l),typeof e=="object"?(i.empty(),i.append(e)):i.html(e),i[0].scrollIntoView(),!0}}function R(e){return e.replaceAll(/[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g,"")}function C(e,l,i,m,c){let o=mw.config.get("wgArticlePath");i+=N,$("#afcHelper_finished_wrapper").html('<span id="afcHelper_AJAX_finished_'+I+'" style="display:none">'+$("#afcHelper_finished_wrapper").html()+"</span>");let a=I;I++,$("#afcHelper_status").html($("#afcHelper_status").html()+'<li id="afcHelper_edit'+R(e)+'">Editing <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></li>");let t={action:"edit",title:e,text:l,summary:i};m&&(t.createonly=!0);let b=new mw.Api;if(b.postWithEditToken(t).done(s=>{s?.edit?.result&&s.edit.result==="Success"?$("#afcHelper_edit"+R(e)).html('Saved <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a>"):($("#afcHelper_edit"+R(e)).html('<span class="afcHelper_notice"><b>Edit failed on <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></b></span>. Error info: "+JSON.stringify(s)),console.error("Edit failed on %s (%s). Error info: %s",o.replace("$1",encodeURI(e)),e,JSON.stringify(s)))}).fail(s=>{m&&s==="articleexists"?$("#afcHelper_edit"+R(e)).html('<span class="afcHelper_notice"><b>Edit failed on <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></b></span>. Error info: The article already exists!"):$("#afcHelper_edit"+R(e)).html('<span class="afcHelper_notice"><b>Edit failed on <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></b></span>. Error info: "+s)}).always(()=>{$("#afcHelper_AJAX_finished_"+a).css("display","")}),!c&&$(".patrollink").length>0){let s=$(".patrollink a").attr("href"),r=mw.util.getParamValue("rcid",s);if(r){$("#afcHelper_status").html($("#afcHelper_status").html()+'<li id="afcHelper_patrol'+R(e)+'">Marking <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+" as patrolled</a></li>");let n={action:"patrol",format:"json",rcid:r};b.postWithToken("patrol",n).done(p=>{p?$("#afcHelper_patrol"+R(e)).html('Marked <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a> as patrolled"):($("#afcHelper_patrol"+R(e)).html('<span class="afcHelper_notice"><b>Patrolling failed on <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></b></span> with an unknown error"),console.error("Patrolling failed on %s (%s) with an unknown error.",o.replace("$1",encodeURI(e)),e))}).fail(p=>{$("#afcHelper_patrol"+R(e)).html('<span class="afcHelper_notice"><b>Patrolling failed on <a href="'+o.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></b></span>. Error info: "+p)})}}}mw.loader.using(["mediawiki.api","mediawiki.util"],()=>{mw.util.addCSS(`
#display-message * {
    margin: revert;
    border: revert;
    background: revert;
    padding: revert;
}`);let e=mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review AFC/RC","ca-afcrhs","Review","a");$(e).click(l=>{l.preventDefault(),v.length=0,k.length=0,x=0,V.length=0,T.length=0,D()})})})();})();

// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy9BRkNSSFMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFxuICAgICAgICBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykgIT09ICdXaWtpcGVkaWE6QXJ0aWNsZXNfZm9yX2NyZWF0aW9uL1JlZGlyZWN0cycgJiZcbiAgICAgICAgbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpICE9PSAnV2lraXBlZGlhOkFydGljbGVzX2Zvcl9jcmVhdGlvbi9DYXRlZ29yaWVzJ1xuICAgIClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVkaXJlY3RQYWdlTmFtZSA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKS5yZXBsYWNlQWxsKCdfJywgJyAnKTtcbiAgICBjb25zdCByZWRpcmVjdFN1Ym1pc3Npb25zID0gW107XG4gICAgbGV0IHJlZGlyZWN0U2VjdGlvbnMgPSBbXTtcbiAgICBjb25zdCBzdW1tYXJ5QWR2ZXJ0ID0gJyAoW1tVc2VyOkVlaml0NDMvc2NyaXB0cy9BRkNSSFN8QUZDUkhTIDJdXSknO1xuICAgIGxldCBudW1iZXJUb3RhbCA9IDA7XG4gICAgbGV0IGFqYXhOdW1iZXIgPSAwO1xuICAgIGNvbnN0IHN1Ym1pc3Npb25zID0gW107XG4gICAgY29uc3QgbmVlZHNVcGRhdGUgPSBbXTtcbiAgICBjb25zdCByZWRpcmVjdERlY2xpbmVSZWFzb25zID0ge1xuICAgICAgICAnZXhpc3RzJzogJ1RoZSB0aXRsZSB5b3Ugc3VnZ2VzdGVkIGFscmVhZHkgZXhpc3RzIG9uIFdpa2lwZWRpYScsXG4gICAgICAgICdibGFuayc6ICdXZSBjYW5ub3QgYWNjZXB0IGVtcHR5IHN1Ym1pc3Npb25zJyxcbiAgICAgICAgJ25vLXRhcmdldCc6XG4gICAgICAgICAgICAnIEEgcmVkaXJlY3QgY2Fubm90IGJlIGNyZWF0ZWQgdW5sZXNzIHRoZSB0YXJnZXQgaXMgYW4gZXhpc3RpbmcgYXJ0aWNsZS4gRWl0aGVyIHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIHRhcmdldCwgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBleGlzdCcsXG4gICAgICAgICd1bmxpa2VseSc6ICdUaGUgdGl0bGUgeW91IHN1Z2dlc3RlZCBzZWVtcyB1bmxpa2VseS4gQ291bGQgeW91IHByb3ZpZGUgYSBzb3VyY2Ugc2hvd2luZyB0aGF0IGl0IGlzIGEgY29tbW9ubHkgdXNlZCBhbHRlcm5hdGUgbmFtZT8nLFxuICAgICAgICAnbm90LXJlZGlyZWN0JzogJ1RoaXMgcmVxdWVzdCBpcyBub3QgYSByZWRpcmVjdCByZXF1ZXN0JyxcbiAgICAgICAgJ2N1c3RvbSc6ICcnLFxuICAgIH07XG4gICAgY29uc3QgY2F0ZWdvcnlEZWNsaW5lUmVhc29ucyA9IHtcbiAgICAgICAgJ2V4aXN0cyc6ICdUaGUgY2F0ZWdvcnkgeW91IHN1Z2dlc3RlZCBhbHJlYWR5IGV4aXN0cyBvbiBXaWtpcGVkaWEnLFxuICAgICAgICAnYmxhbmsnOiAnV2UgY2Fubm90IGFjY2VwdCBlbXB0eSBzdWJtaXNzaW9ucycsXG4gICAgICAgICd1bmxpa2VseSc6ICdJdCBzZWVtcyB1bmxpa2VseSB0aGF0IHRoZXJlIGFyZSBlbm91Z2ggcGFnZXMgdG8gc3VwcG9ydCB0aGlzIGNhdGVnb3J5JyxcbiAgICAgICAgJ25vdC1jYXRlZ29yeSc6ICdUaGlzIHJlcXVlc3QgaXMgbm90IGEgY2F0ZWdvcnkgcmVxdWVzdCcsXG4gICAgICAgICdjdXN0b20nOiAnJyxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIHJlZGlyZWN0IGhhbmRsZXIuXG4gICAgICovXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVkaXJlY3RJbml0KCkge1xuICAgICAgICBsZXQgcGFnZVRleHQgPSBhd2FpdCBnZXRQYWdlVGV4dChyZWRpcmVjdFBhZ2VOYW1lKTtcbiAgICAgICAgLy8gQ2xlYW51cCB0aGUgd2lraXBlZGlhIGxpbmtzIGZvciBwcmV2ZW50aW5nIHN0dWZmIGxpa2UgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3cvaW5kZXgucGhwP2RpZmY9NTc2MjQ0MDY3Jm9sZGlkPTU3NjIyMTQzN1xuICAgICAgICBwYWdlVGV4dCA9IGNsZWFudXBMaW5rcyhwYWdlVGV4dCk7XG5cbiAgICAgICAgLy8gRmlyc3QsIHN0cmlwIG91dCB0aGUgcGFydHMgYmVmb3JlIHRoZSBmaXJzdCBzZWN0aW9uXG4gICAgICAgIGNvbnN0IHNlY3Rpb25SZWdleCA9IC89PS4qPz09LztcbiAgICAgICAgcGFnZVRleHQgPSBwYWdlVGV4dC5zbGljZShNYXRoLm1heCgwLCBwYWdlVGV4dC5zZWFyY2goc2VjdGlvblJlZ2V4KSkpO1xuICAgICAgICAvLyBUaGVuIHNwbGl0IGl0IGludG8gdGhlIHJlc3Qgb2YgdGhlIHNlY3Rpb25zXG4gICAgICAgIHJlZGlyZWN0U2VjdGlvbnMgPSBwYWdlVGV4dC5tYXRjaCgvXj09Lio/PT0kKChcXHI/XFxuPykoPyE9PVtePV0pLiopKi9naW0pO1xuXG4gICAgICAgIC8vIFBhcnNlIHRoZSBzZWN0aW9uc1xuICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgcmVkaXJlY3RTZWN0aW9uXSBvZiByZWRpcmVjdFNlY3Rpb25zLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgY2xvc2VkID0gLyh7e1xccyphZmMoPyFcXHMrY29tbWVudCl8dGhpcyBpcyBhbiBhcmNoaXZlZCBkaXNjdXNzaW9uKS9pLnRlc3QocmVkaXJlY3RTZWN0aW9uKTtcbiAgICAgICAgICAgIGlmICghY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyID0gcmVkaXJlY3RTZWN0aW9uLm1hdGNoKHNlY3Rpb25SZWdleClbMF07XG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlci5zZWFyY2goL3JlZGlyZWN0IHJlcXVlc3QvaSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpa2lsaW5rUmVnZXggPSAvXFxbXFxbKFxccypbXj1dKj8pKj9dXS9nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rcyA9IGhlYWRlci5tYXRjaCh3aWtpbGlua1JlZ2V4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5rcykgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGlua3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzW2xdID0gbGlua3NbbF0ucmVwbGFjZUFsbCgvW1tcXF1dL2csICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5rc1tsXS5jaGFyQXQoMCkgPT09ICc6JykgbGlua3NbbF0gPSBsaW5rc1tsXS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IC90YXJnZXQgb2YgcmVkaXJlY3Q6XFxzKlxcW1xcWyhbXltcXF1dKildXS9pO1xuICAgICAgICAgICAgICAgICAgICByZWdleC50ZXN0KHJlZGlyZWN0U2VjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvID0gJC50cmltKFJlZ0V4cC4kMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhc29uUmUgPSAvcmVhc29uOltcXHQgXSo/KC4rKS9pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFzb25NYXRjaCA9IHJlYXNvblJlLmV4ZWMocmVkaXJlY3RTZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhc29uID0gcmVhc29uTWF0Y2ggJiYgcmVhc29uTWF0Y2hbMV0udHJpbSgpID8gcmVhc29uTWF0Y2hbMV0gOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZVJlID0gL3NvdXJjZS4qPzpbXFx0IF0qPyguKykvaTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlTWF0Y2ggPSBzb3VyY2VSZS5leGVjKHJlZGlyZWN0U2VjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZU1hdGNoICYmIHNvdXJjZU1hdGNoWzFdLnRyaW0oKSA/IHNvdXJjZU1hdGNoWzFdIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3JlZGlyZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0byxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0byxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3JlZGlyZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbnVtYmVyVG90YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpbmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLmZyb20ucHVzaChzdWIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbnMucHVzaChzdWIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyVG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFN1Ym1pc3Npb25zLnB1c2goc3VibWlzc2lvbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoZWFkZXIuc2VhcmNoKC9jYXRlZ29yeSByZXF1ZXN0L2kpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIGEgd2lraWxpbmsgaW4gdGhlIGhlYWRlciwgYW5kIGFzc3VtZSBpdCdzIHRoZSBjYXRlZ29yeSB0byBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5TmFtZSA9IC9cXFtcXFtbXltcXF1dK11dLy5leGVjKGhlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2F0ZWdvcnlOYW1lKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlOYW1lID0gY2F0ZWdvcnlOYW1lWzBdO1xuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSBjYXRlZ29yeU5hbWUucmVwbGFjZUFsbCgvW1tcXF1dL2csICcnKTtcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlOYW1lID0gY2F0ZWdvcnlOYW1lLnJlcGxhY2VBbGwoL2NhdGVnb3J5XFxzKjpcXHMqL2dpLCAnQ2F0ZWdvcnk6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeU5hbWUuY2hhckF0KDApID09PSAnOicpIGNhdGVnb3J5TmFtZSA9IGNhdGVnb3J5TmFtZS5zbGljZSgxKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHRoZSBwYXJlbnQgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdFRleHQgPSByZWRpcmVjdFNlY3Rpb24uc2xpY2UoaGVhZGVyLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IGNhdGVnb3JpZXMgbGlzdGVkIHVuZGVyIHRoZSBcIlBhcmVudCBjYXRlZ29yeS9jYXRlZ29yaWVzXCIgaGVhZGluZyxcbiAgICAgICAgICAgICAgICAgICAgLy8gKk5PVCogYW55IGNhdGVnb3JpZXMgbGlzdGVkIHVuZGVyIFwiRXhhbXBsZSBwYWdlcyB3aGljaCBiZWxvbmcgdG8gdGhpcyBjYXRlZ29yeVwiLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRIZWFkaW5nSW5kZXggPSByZXF1ZXN0VGV4dC5pbmRleE9mKCdQYXJlbnQgY2F0ZWdvcnkvY2F0ZWdvcmllcycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SGVhZGluZ0luZGV4ID49IDApIHJlcXVlc3RUZXh0ID0gcmVxdWVzdFRleHQuc2xpY2UoTWF0aC5tYXgoMCwgcGFyZW50SGVhZGluZ0luZGV4KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q2F0ZWdvcmllcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50Q2F0ZWdvcnlNYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudENhdGVnb3JpZXNSZWdleCA9IC9cXFtcXFtcXHMqOlxccyooY2F0ZWdvcnk6W15bXFxdXSopXV0vZ2k7XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENhdGVnb3J5TWF0Y2ggPSBwYXJlbnRDYXRlZ29yaWVzUmVnZXguZXhlYyhyZXF1ZXN0VGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Q2F0ZWdvcnlNYXRjaCkgcGFyZW50Q2F0ZWdvcmllcy5wdXNoKHBhcmVudENhdGVnb3J5TWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwYXJlbnRDYXRlZ29yeU1hdGNoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NhdGVnb3J5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBjYXRlZ29yeU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBudW1iZXJUb3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzOiBwYXJlbnRDYXRlZ29yaWVzLmpvaW4oJywnKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyVG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RTdWJtaXNzaW9ucy5wdXNoKHN1Ym1pc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9ucy5wdXNoKHN1Ym1pc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gRW5kIGlmICFjbG9zZWRcbiAgICAgICAgfSAvLyBFbmQgbG9vcCBvdmVyIHNlY3Rpb25zXG5cbiAgICAgICAgLy8gQnVpbGQgdGhlIGZvcm1cbiAgICAgICAgY29uc3QgJGZvcm0gPSAkKCc8aDM+UmV2aWV3aW5nIEFmQyByZWRpcmVjdCByZXF1ZXN0czwvaDM+Jyk7XG4gICAgICAgIGRpc3BsYXlNZXNzYWdlKCRmb3JtKTtcbiAgICAgICAgY29uc3QgJG1lc3NhZ2VEaXYgPSAkZm9ybS5wYXJlbnQoKTtcbiAgICAgICAgLy8gTGF5b3V0IHRoZSB0ZXh0XG4gICAgICAgIGxldCByZWRpcmVjdEVtcHR5ID0gMTtcbiAgICAgICAgY29uc3QgQUNUSU9OUyA9IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdBY2NlcHQnLCB2YWx1ZTogJ2FjY2VwdCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdEZWNsaW5lJywgdmFsdWU6ICdkZWNsaW5lJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0NvbW1lbnQnLCB2YWx1ZTogJ2NvbW1lbnQnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9uZScsIHNlbGVjdGVkOiB0cnVlLCB2YWx1ZTogJ25vbmUnIH0sXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoY29uc3QgcmVkaXJlY3RTdWJtaXNzaW9uIG9mIHJlZGlyZWN0U3VibWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGxldCBzdWJtaXNzaW9uTmFtZTtcbiAgICAgICAgICAgIHN1Ym1pc3Npb25OYW1lID0gcmVkaXJlY3RTdWJtaXNzaW9uLnRvID09PSB1bmRlZmluZWQgPyAnJyA6IHJlZGlyZWN0U3VibWlzc2lvbi50by5yZXBsYWNlQWxsKC9cXHMvZywgJycpO1xuICAgICAgICAgICAgY29uc3QgJHRoaXNTdWJMaXN0ID0gJCgnPHVsPicpO1xuICAgICAgICAgICAgY29uc3QgJHRoaXNTdWJMaXN0RWxlbWVudCA9ICQoJzxsaT4nKTtcbiAgICAgICAgICAgIGlmIChyZWRpcmVjdFN1Ym1pc3Npb24udHlwZSA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICR0aGlzU3ViTGlzdEVsZW1lbnQuYXBwZW5kKCdSZWRpcmVjdChzKSB0byAnKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1Ym1pc3Npb25OYW1lKVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHJlZGlyZWN0U3VibWlzc2lvbi5mcm9tLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkc1VwZGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcmVkaXJlY3RTdWJtaXNzaW9uLmZyb21baW5kZXhdLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogJ25vLXRhcmdldCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghcmVkaXJlY3RTdWJtaXNzaW9uLnRvKVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHJlZGlyZWN0U3VibWlzc2lvbi5mcm9tLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkc1VwZGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcmVkaXJlY3RTdWJtaXNzaW9uLmZyb21baW5kZXhdLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogJ25vdC1yZWRpcmVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWRpcmVjdFN1Ym1pc3Npb24gPT09ICcnIHx8IHJlZGlyZWN0U3VibWlzc2lvbiA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICAgICR0aGlzU3ViTGlzdEVsZW1lbnQuYXBwZW5kKCdFbXB0eSBzdWJtaXNzaW9uICMnICsgcmVkaXJlY3RFbXB0eSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0RW1wdHkrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Ym1pc3Npb25OYW1lLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgICR0aGlzU3ViTGlzdEVsZW1lbnQuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGE+JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaHJlZicsIG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZVBhdGgnKS5yZXBsYWNlKCckMScsIGVuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFN1Ym1pc3Npb24udG8pKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndGFyZ2V0JywgJ19ibGFuaycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQocmVkaXJlY3RTdWJtaXNzaW9uLnRvKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbHNlICR0aGlzU3ViTGlzdEVsZW1lbnQuYXBwZW5kKCc8Yj5ubyB0YXJnZXQgZ2l2ZW48L2I+OiAnKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0ICRmcm9tTGlzdCA9ICQoJzx1bD4nKS5hcHBlbmRUbygkdGhpc1N1Ykxpc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IHJlZGlyZWN0U3VibWlzc2lvbi5mcm9tLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb20gPSByZWRpcmVjdFN1Ym1pc3Npb24uZnJvbVtsXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvQXJ0aWNsZSA9IGZyb20udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b0FydGljbGUucmVwbGFjZUFsbCgvXFxzKi9naSwgJycpLmxlbmd0aCA9PT0gMCkgdG9BcnRpY2xlID0gJzxiPm5vIHRpdGxlIHNwZWNpZmllZDwvYj4sIGNoZWNrIHRoZSByZXF1ZXN0IGRldGFpbHMnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYXNvbkFuZFNvdXJjZSA9ICQoJzx1bD4nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0U3VibWlzc2lvbi5yZWFzb24pIHJlYXNvbkFuZFNvdXJjZS5hcHBlbmQoJzxsaT5SZWFzb246ICcgKyByZWRpcmVjdFN1Ym1pc3Npb24ucmVhc29uICsgJzwvbGk+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWRpcmVjdFN1Ym1pc3Npb24uc291cmNlKSByZWFzb25BbmRTb3VyY2UuYXBwZW5kKCc8bGk+U291cmNlOiAnICsgcmVkaXJlY3RTdWJtaXNzaW9uLnNvdXJjZSArICc8L2xpPicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZVNlYXJjaFVybCA9ICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9XCInICsgZW5jb2RlVVJJQ29tcG9uZW50KHRvQXJ0aWNsZSkgKyAnXCIrLXdpa2lwZWRpYS5vcmcnO1xuICAgICAgICAgICAgICAgICAgICAkZnJvbUxpc3QuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGxpPicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyb206ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9BcnRpY2xlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICg8c21hbGw+PGEgaHJlZj0nXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xlU2VhcmNoVXJsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Hb29nbGU8L2E+IDxiPiZtaWRkb3Q7PC9iPiA8YSBocmVmPVwiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BlY2lhbDpXaGF0TGlua3NIZXJlLycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHRvQXJ0aWNsZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIHRhcmdldD1cIl9ibGFua1wiPndoYXQgbGlua3MgaGVyZTwvYT4pPC9zbWFsbD48YnIvPicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQocmVhc29uQW5kU291cmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxsYWJlbD4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2ZvcicsICdhZmNIZWxwZXJfcmVkaXJlY3RfYWN0aW9uXycgKyBmcm9tLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQoJ0FjdGlvbjogJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlU2VsZWN0T2JqZWN0KCdhZmNIZWxwZXJfcmVkaXJlY3RfYWN0aW9uXycgKyBmcm9tLmlkLCBBQ1RJT05TLCByZWRpcmVjdE1ha2VBY3Rpb25DaGFuZ2UoZnJvbS5pZCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxkaXY+JykuYXR0cignaWQnLCAnYWZjSGVscGVyX3JlZGlyZWN0X2V4dHJhXycgKyBmcm9tLmlkKSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJJZCA9IHJlZGlyZWN0U3VibWlzc2lvbi5pZDtcbiAgICAgICAgICAgICAgICAkdGhpc1N1Ykxpc3RFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJ0NhdGVnb3J5IHN1Ym1pc3Npb246ICcpXG4gICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8YT4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdocmVmJywgJy93aWtpLycgKyByZWRpcmVjdFN1Ym1pc3Npb24udGl0bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RpdGxlJywgcmVkaXJlY3RTdWJtaXNzaW9uLnRpdGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0KHJlZGlyZWN0U3VibWlzc2lvbi50aXRsZSksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgnPGJyIC8+JylcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxsYWJlbD4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCAnYWZjSGVscGVyX3JlZGlyZWN0X2FjdGlvbl8nICsgc3ViSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQoJ0FjdGlvbjogJyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChnZW5lcmF0ZVNlbGVjdE9iamVjdCgnYWZjSGVscGVyX3JlZGlyZWN0X2FjdGlvbl8nICsgc3ViSWQsIEFDVElPTlMsIHJlZGlyZWN0TWFrZUFjdGlvbkNoYW5nZShzdWJJZCkpKVxuICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxkaXY+JykuYXR0cignaWQnLCAnYWZjSGVscGVyX3JlZGlyZWN0X2V4dHJhXycgKyBzdWJJZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXNTdWJMaXN0LmFwcGVuZCgkdGhpc1N1Ykxpc3RFbGVtZW50KTtcbiAgICAgICAgICAgICRtZXNzYWdlRGl2LmFwcGVuZCgkdGhpc1N1Ykxpc3QpO1xuICAgICAgICB9IC8vIEVuZCBsb29wIG92ZXIgc2VjdGlvbnNcbiAgICAgICAgJG1lc3NhZ2VEaXYuYXBwZW5kKFxuICAgICAgICAgICAgJCgnPGJ1dHRvbj4nKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICdhZmNIZWxwZXJfcmVkaXJlY3RfZG9uZV9idXR0b24nKVxuICAgICAgICAgICAgICAgIC5hdHRyKCduYW1lJywgJ2FmY0hlbHBlcl9yZWRpcmVjdF9kb25lX2J1dHRvbicpXG4gICAgICAgICAgICAgICAgLnRleHQoJ0RvbmUnKVxuICAgICAgICAgICAgICAgIC5jbGljayhyZWRpcmVjdFBlcmZvcm1BY3Rpb25zKSxcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG5lZWRzVXBkYXRlKSB7XG4gICAgICAgICAgICAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2FjdGlvbl8nICsgZWxlbWVudC5pZCkuYXR0cigndmFsdWUnLCAnZGVjbGluZScpO1xuICAgICAgICAgICAgcmVkaXJlY3RPbkFjdGlvbkNoYW5nZShlbGVtZW50LmlkKTtcbiAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfZGVjbGluZV8nICsgZWxlbWVudC5pZCkuYXR0cigndmFsdWUnLCBlbGVtZW50LnJlYXNvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBvZiByZWRpcmVjdE9uQWN0aW9uQ2hhbmdlLlxuICAgICAqIEBwYXJhbSBpZCBUaGUgcmVxdWVzdCBpZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkaXJlY3RNYWtlQWN0aW9uQ2hhbmdlKGlkKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZWRpcmVjdE9uQWN0aW9uQ2hhbmdlKGlkKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFjdGlvbnMgb24gY2hhbmdlLlxuICAgICAqIEBwYXJhbSBpZCBUaGUgcmVxdWVzdCBpZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWRpcmVjdE9uQWN0aW9uQ2hhbmdlKGlkKSB7XG4gICAgICAgIGNvbnN0ICRleHRyYSA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfZXh0cmFfJyArIGlkKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0VmFsdWUgPSAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2FjdGlvbl8nICsgaWQpLnZhbCgpO1xuICAgICAgICAkZXh0cmEuaHRtbCgnJyk7IC8vIEJsYW5rIGl0IGZpcnN0XG4gICAgICAgIHN3aXRjaCAoc2VsZWN0VmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FjY2VwdCc6IHtcbiAgICAgICAgICAgICAgICBpZiAoc3VibWlzc2lvbnNbaWRdLnR5cGUgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmFwcGVuZCgnPGxhYmVsIGZvcj1cImFmY0hlbHBlcl9yZWRpcmVjdF9mcm9tXycgKyBpZCArICdcIj5Gcm9tOiA8L2xhYmVsPicpO1xuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGlucHV0PicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3R5cGUnLCAndGV4dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ25hbWUnLCAnYWZjSGVscGVyX3JlZGlyZWN0X2Zyb21fJyArIGlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICdhZmNIZWxwZXJfcmVkaXJlY3RfZnJvbV8nICsgaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3ZhbHVlJywgc3VibWlzc2lvbnNbaWRdLnRpdGxlKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgICAgICRleHRyYS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcmbmJzcDs8YnIgLz48bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X3RvXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+VG86IDwvbGFiZWw+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImFmY0hlbHBlcl9yZWRpcmVjdF90b18nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIGlkPVwiYWZjSGVscGVyX3JlZGlyZWN0X3RvXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIgdmFsdWU9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpZF0udG8gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiAvPicsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxiciAvPjxsYWJlbCBmb3I9XCJhZmNIZWxwZXJfcmVkaXJlY3RfYXBwZW5kXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+VGVtcGxhdGUgdG8gYXBwZW5kOiAoPGEgaHJlZj1cImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpa2lwZWRpYTpUTVJcIiB0YXJnZXQ9XCJfYmxhbmtcIj5IZWxwPC9hPik8L2xhYmVsPicsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVTZWxlY3QoJ2FmY0hlbHBlcl9yZWRpcmVjdF9hcHBlbmRfJyArIGlkLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdOb25lJywgc2VsZWN0ZWQ6IHRydWUsIHZhbHVlOiAnbm9uZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnRnJlcXVlbnRseSB1c2VkJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFsdGVybmF0aXZlIGxhbmd1YWdlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYWx0ZXJuYXRpdmUgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1vZGlmaWNhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBzZWN0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZGlhY3JpdGljJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGRpYWNyaXRpYycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnRnJvbSBcdTIwMTMgYWJicmV2aWF0aW9uLCBjYXBpdGFsaXNhdGlvbiwgYW5kIGdyYW1tYXInLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYWNyb255bScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGluaXRpYWxpc20nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBDYW1lbENhc2UnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtaXNjYXBpdGFsaXNhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG90aGVyIGNhcGl0YWxpc2F0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbW9kaWZpY2F0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gcGx1cmFsJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRnJvbSBwYXJ0cyBvZiBzcGVhY2gnLCB2YWx1ZTogJ0Zyb20gcGFydHMgb2Ygc3BlYWNoJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFkamVjdGl2ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFkdmVyYicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGNvbW1vbiBub3VuJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZ2VydW5kJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gcHJvcGVyIG5vdW4nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSB2ZXJiJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIFx1MjAxMyBzcGVsbGluZycsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBhbHRlcm5hdGl2ZSBzcGVsbGluZycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1pc3NwZWxsaW5nJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gQW1lcmljYW4gRW5nbGlzaCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIEJyaXRpc2ggRW5nbGlzaCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIEFTQ0lJLW9ubHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBkaWFjcml0aWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBsaWdhdHVyZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHN0eWxpemF0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYWx0ZXJuYXRpdmUgdHJhbnNsaXRlcmF0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gV2FkZVx1MjAxM0dpbGVzIHJvbWFuaXphdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnRnJvbSBhbHRlcm5hdGl2ZSBuYW1lcywgZ2VuZXJhbCcsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBhbHRlcm5hdGl2ZSBsYW5ndWFnZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFsdGVybmF0aXZlIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBmb3JtZXIgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGhpc3RvcmljIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBpbmNvbXBsZXRlIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBpbmNvcnJlY3QgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGxldHRlclx1MjAxM3dvcmQgY29tYmluYXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBsb25nIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwb3J0bWFudGVhdScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHByZWRlY2Vzc29yIGNvbXBhbnkgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHNob3J0IG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzb3J0IG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBsZXNzIHNwZWNpZmljIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtb3JlIHNwZWNpZmljIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBhbnRvbnltJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZXBvbnltJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gc3lub255bScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIFJvbWFuIG51bWVyYWxzJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIGFsdGVybmF0aXZlIG5hbWVzLCBnZW9ncmFwaHknLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gQ2FuYWRpYW4gc2V0dGxlbWVudCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbmFtZSBhbmQgY291bnRyeScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGNpdHkgYW5kIHN0YXRlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gY2l0eSBhbmQgcHJvdmluY2UnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtb3JlIHNwZWNpZmljIGdlb2dyYXBoaWMgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHBvc3RhbCBhYmJyZXZpYXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwb3N0YWwgY29kZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIFVTIHBvc3RhbCBhYmJyZXZpYXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ0Zyb20gYWx0ZXJuYXRpdmUgbmFtZXMsIG9yZ2FuaXNtcycsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzY2llbnRpZmljIGFiYnJldmlhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHNjaWVudGlmaWMgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFsdGVybmF0aXZlIHNjaWVudGlmaWMgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1vbm90eXBpYyB0YXhvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnRnJvbSBhbHRlcm5hdGl2ZSBuYW1lcywgcGVvcGxlJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGJpcnRoIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBnaXZlbiBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbWFycmllZCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbmFtZSB3aXRoIHRpdGxlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbm9uLW5ldXRyYWwgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHBlcnNvbmFsIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwc2V1ZG9ueW0nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSByZWxhdGl2ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHNwb3VzZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHN1cm5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ0Zyb20gYWx0ZXJuYXRpdmUgbmFtZXMsIHRlY2huaWNhbCcsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBCbHVlYm9vayBhYmJyZXZpYXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBicmFuZCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZHJ1ZyB0cmFkZSBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZmlsZSBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gSmF2YSBwYWNrYWdlIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBNYXRoU2NpTmV0IGFiYnJldmlhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1vbGVjdWxhciBmb3JtdWxhJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gTkxNIGFiYnJldmlhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHByb2R1Y3QgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHNsb2dhbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHN5bWJvbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHN5c3RlbWF0aWMgYWJicmV2aWF0aW9ucycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHRlY2huaWNhbCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gdHJhZGVtYXJrJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIFx1MjAxMyBuYXZpZ2F0aW9uJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGZpbGUgbWV0YWRhdGEgbGluaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBtZW50aW9uZWQgaW4gaGF0bm90ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHNob3J0Y3V0JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gdGVtcGxhdGUgc2hvcnRjdXQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ0Zyb20gZGlzYW1iaWd1YXRpb25zJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFtYmlndW91cyB0ZXJtJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gaW5jb21wbGV0ZSBkaXNhbWJpZ3VhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGluY29ycmVjdCBkaXNhbWJpZ3VhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG90aGVyIGRpc2FtYmlndWF0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gcHJlZGljdGFibGUgZGlzYW1iaWd1YXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSB1bm5lY2Vzc2FyeSBkaXNhbWJpZ3VhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnRnJvbSBtZXJnZXJzLCBkdXBsaWNhdGVzLCBhbmQgbW92ZXMnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZHVwbGljYXRlZCBhcnRpY2xlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHdpdGggaGlzdG9yeScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1lcmdlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbW92ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB3aXRoIG9sZCBoaXN0b3J5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIGZpY3Rpb24nLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZmljdGlvbmFsIGNoYXJhY3RlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGZpY3Rpb25hbCBlbGVtZW50JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZmljdGlvbmFsIGxvY2F0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIHJlbGF0ZWQgaW5mbycsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBhbGJ1bScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFuaW1hbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGJvb2snIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBjYXRjaHBocmFzZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGRvbWFpbiBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gdG9wLWxldmVsIGRvbWFpbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGZpbG0nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBnZW5kZXInIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBsZWdpc2xhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGxpc3QgdG9waWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtZW1iZXInIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwZXJzb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwaHJhc2UnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBxdW90YXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSByZWxhdGVkIHdvcmQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzY2hvb2wnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzb25nJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gc3VidG9waWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSB0ZWFtJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gd29yaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHdyaXRlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIFVuaWNvZGUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1RvIFx1MjAxMyBncmFtbWFyLCBwdW5jdHVhdGlvbiwgYW5kIHNwZWxsaW5nJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBhY3JvbnltJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGluaXRpYWxpc20nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gQVNDSUktb25seSB0aXRsZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBkaWFjcml0aWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gbGlnYXR1cmUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gcGx1cmFsJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdUbyBhbHRlcm5hdGl2ZSBuYW1lcycsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gZm9ybWVyIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gaGlzdG9yaWMgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBqb2ludCBiaW9ncmFwaHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gbmFtZSB3aXRoIHRpdGxlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIG1vbm90eXBpYyB0YXhvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBzY2llbnRpZmljIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gc3lzdGVtYXRpYyBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIHRlY2huaWNhbCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdUbyBcdTIwMTMgbmF2aWdhdGlvbiBhbmQgZGlzYW1iaWd1YXRpb24nLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGFuY2hvcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBhbnRocm9wb255bXkgcGFnZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGxpc3QgZW50cnknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gc2VjdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnVG8gbWlzY2VsbGFuZW91cycsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gZGVjYWRlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIHJlbGF0ZWQgdG9waWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gc3VicGFnZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBzdWJ0b3BpYycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBUViBlcGlzb2RlIGxpc3QgZW50cnknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdDdXN0b20gLSBwcm9tcHQgbWUnLCB2YWx1ZTogJ2N1c3RvbScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBOb3cgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X25hbWVfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIj5DYXRlZ29yeSBuYW1lOiA8L2xhYmVsPjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIxMDBcIiBuYW1lPVwiYWZjSGVscGVyX3JlZGlyZWN0X25hbWVfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiBpZD1cImFmY0hlbHBlcl9yZWRpcmVjdF9uYW1lXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIgdmFsdWU9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpZF0udGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiAvPicsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxiciAvPjxsYWJlbCBmb3I9XCJhZmNIZWxwZXJfcmVkaXJlY3RfcGFyZW50c18nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPlBhcmVudCBjYXRlZ29yaWVzIChjb21tYS1zZXBhcmF0ZWQpOjwvbGFiZWw+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjEwMFwiIGlkPVwiYWZjSGVscGVyX3JlZGlyZWN0X3BhcmVudHNfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiBuYW1lPVwiYWZjSGVscGVyX3JlZGlyZWN0X3BhcmVudHNfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiB2YWx1ZT1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb25zW2lkXS5wYXJlbnRzICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIgLz4nLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuYXBwZW5kKCc8YnIgLz4nKTtcbiAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxpbnB1dD4nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYWZjSGVscGVyX3JlZGlyZWN0X2NvbnRhaW5lcl8nICsgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdhZmNIZWxwZXJfcmVkaXJlY3RfY29udGFpbmVyXycgKyBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJhZmNIZWxwZXJfcmVkaXJlY3RfY29udGFpbmVyXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+VGhpcyBpcyBhIDxhIGhyZWY9XCIvd2lraS9XaWtpcGVkaWE6Q29udGFpbmVyX2NhdGVnb3J5XCIgdGl0bGU9XCJXaWtpcGVkaWE6Q29udGFpbmVyIGNhdGVnb3J5XCI+Y29udGFpbmVyIGNhdGVnb3J5PC9hPjwvbGFiZWw+JyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoJGV4dHJhLmh0bWwoKSArICc8YnIgLz48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFmY0hlbHBlcl9yZWRpcmVjdF9jb250YWluZXJfJyArIGlkICsgJ1wiJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbCgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8YnIgLz48bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbW1lbnRfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXCI+Q29tbWVudDo8L2xhYmVsPjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIxMDBcIiBpZD1cImFmY0hlbHBlcl9yZWRpcmVjdF9jb21tZW50XycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJhZmNIZWxwZXJfcmVkaXJlY3RfY29tbWVudF8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIi8+JyxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdkZWNsaW5lJzoge1xuICAgICAgICAgICAgICAgIGlmIChzdWJtaXNzaW9uc1tpZF0udHlwZSA9PT0gJ3JlZGlyZWN0JylcbiAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGZvcj1cImFmY0hlbHBlcl9yZWRpcmVjdF9kZWNsaW5lXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+UmVhc29uIGZvciBkZWNsaW5lOiA8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlU2VsZWN0KCdhZmNIZWxwZXJfcmVkaXJlY3RfZGVjbGluZV8nICsgaWQsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdBbHJlYWR5IGV4aXN0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2V4aXN0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQmxhbmsgcmVxdWVzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2JsYW5rJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdObyB2YWxpZCB0YXJnZXQgc3BlY2lmaWVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnbm8tdGFyZ2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdVbmxpa2VseSBzZWFyY2ggdGVybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ3VubGlrZWx5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdOb3QgYSByZWRpcmVjdCByZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnbm90LXJlZGlyZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDdXN0b20gLSByZWFzb24gYmVsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2N1c3RvbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gTm93IGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJhZmNIZWxwZXJfcmVkaXJlY3RfZGVjbGluZV8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPlJlYXNvbiBmb3IgZGVjbGluZTogPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVNlbGVjdCgnYWZjSGVscGVyX3JlZGlyZWN0X2RlY2xpbmVfJyArIGlkLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQWxyZWFkeSBleGlzdHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdleGlzdHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0JsYW5rIHJlcXVlc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdibGFuaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVW5saWtlbHkgY2F0ZWdvcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICd1bmxpa2VseScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnTm90IGEgY2F0ZWdvcnkgcmVxdWVzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ25vdC1jYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQ3VzdG9tIC0gcmVhc29uIGJlbG93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdjdXN0b20nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICRleHRyYS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxici8+PGxhYmVsIGZvcj1cImFmY0hlbHBlcl9yZWRpcmVjdF9jb21tZW50XycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPkNvbW1lbnQ6IDwvbGFiZWw+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjEwMFwiIGlkPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbW1lbnRfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXCIgbmFtZT1cImFmY0hlbHBlcl9yZWRpcmVjdF9jb21tZW50XycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiLz4nLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ25vbmUnOiB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIGNhdGVnb3JpZXMgYW5kIHJlZGlyZWN0c1xuICAgICAgICAgICAgICAgICRleHRyYS5odG1sKCcnKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbCgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbW1lbnRfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXCI+Q29tbWVudDogPC9sYWJlbD48aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiMTAwXCIgaWQ9XCJhZmNIZWxwZXJfcmVkaXJlY3RfY29tbWVudF8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIiBuYW1lPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbW1lbnRfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXCIvPicsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gdGhlIHJlZGlyZWN0IGFjdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLlxuICAgICAqL1xuICAgIGFzeW5jIGZ1bmN0aW9uIHJlZGlyZWN0UGVyZm9ybUFjdGlvbnMoKSB7XG4gICAgICAgIC8vIExvYWQgYWxsIG9mIHRoZSBkYXRhXG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBzdWJtaXNzaW9uXSBvZiBzdWJtaXNzaW9ucy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfYWN0aW9uXycgKyBpbmRleCkudmFsKCk7XG4gICAgICAgICAgICBzdWJtaXNzaW9uLmFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdub25lJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnYWNjZXB0JylcbiAgICAgICAgICAgICAgICBpZiAoc3VibWlzc2lvbi50eXBlID09PSAncmVkaXJlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24udGl0bGUgPSAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2Zyb21fJyArIGluZGV4KS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbi50byA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfdG9fJyArIGluZGV4KS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbi5hcHBlbmQgPSAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2FwcGVuZF8nICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VibWlzc2lvbi5hcHBlbmQgPT09ICdjdXN0b20nKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbi5hcHBlbmQgPSBwcm9tcHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBlbnRlciB0aGUgdGVtcGxhdGUgdG8gYXBwZW5kIHRvICcgKyBzdWJtaXNzaW9uLnRpdGxlICsgJy4gRG8gbm90IGluY2x1ZGUgdGhlIGN1cmx5IGJyYWNrZXRzLicsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uYXBwZW5kID0gc3VibWlzc2lvbi5hcHBlbmQgPT09ICdub25lJyB8fCBzdWJtaXNzaW9uLmFwcGVuZCA9PT0gbnVsbCA/ICcnIDogJ3t7JyArIHN1Ym1pc3Npb24uYXBwZW5kICsgJ319JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLnRpdGxlID0gJCgnI2FmY0hlbHBlcl9yZWRpcmVjdF9uYW1lXycgKyBpbmRleCkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24ucGFyZW50cyA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfcGFyZW50c18nICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLmNvbnRhaW5lciA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfY29udGFpbmVyXycgKyBpbmRleCkuaXMoJzpjaGVja2VkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uID09PSAnZGVjbGluZScpIHN1Ym1pc3Npb24ucmVhc29uID0gJCgnI2FmY0hlbHBlcl9yZWRpcmVjdF9kZWNsaW5lXycgKyBpbmRleCkudmFsKCk7XG5cbiAgICAgICAgICAgIHN1Ym1pc3Npb24uY29tbWVudCA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfY29tbWVudF8nICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERhdGEgbG9hZGVkLiBTaG93IHByb2dyZXNzIHNjcmVlbiBhbmQgZ2V0IFdQOkFGQy9SQyBwYWdlIHRleHRcbiAgICAgICAgZGlzcGxheU1lc3NhZ2UoJzx1bCBpZD1cImFmY0hlbHBlcl9zdGF0dXNcIj48L3VsPjx1bCBpZD1cImFmY0hlbHBlcl9maW5pc2hcIj48L3VsPicpO1xuICAgICAgICBjb25zdCBhZGRTdGF0dXMgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAkKCcjYWZjSGVscGVyX3N0YXR1cycpLmFwcGVuZChzdGF0dXMpO1xuICAgICAgICB9O1xuICAgICAgICAkKCcjYWZjSGVscGVyX2ZpbmlzaCcpLmh0bWwoXG4gICAgICAgICAgICAkKCcjYWZjSGVscGVyX2ZpbmlzaCcpLmh0bWwoKSArXG4gICAgICAgICAgICAgICAgJzxzcGFuIGlkPVwiYWZjSGVscGVyX2ZpbmlzaGVkX3dyYXBwZXJcIj48c3BhbiBpZD1cImFmY0hlbHBlcl9maW5pc2hlZF9tYWluXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj48bGkgaWQ9XCJhZmNIZWxwZXJfZG9uZVwiPjxiPkRvbmUgKDxhIGhyZWY9XCInICtcbiAgICAgICAgICAgICAgICBtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVQYXRoJykucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkocmVkaXJlY3RQYWdlTmFtZSkpICtcbiAgICAgICAgICAgICAgICAnP2FjdGlvbj1wdXJnZVwiIHRpdGxlPVwiJyArXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RQYWdlTmFtZSArXG4gICAgICAgICAgICAgICAgJ1wiPlJlbG9hZCBwYWdlPC9hPik8L2I+PC9saT48L3NwYW4+PC9zcGFuPicsXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwYWdlVGV4dCA9IGF3YWl0IGdldFBhZ2VUZXh0KHJlZGlyZWN0UGFnZU5hbWUsIGFkZFN0YXR1cyk7XG4gICAgICAgIGxldCB0b3RhbEFjY2VwdCA9IDA7XG4gICAgICAgIGxldCB0b3RhbERlY2xpbmUgPSAwO1xuICAgICAgICBsZXQgdG90YWxDb21tZW50ID0gMDtcbiAgICAgICAgLy8gVHJhdmVyc2UgdGhlIHN1Ym1pc3Npb25zIGFuZCBsb2NhdGUgdGhlIHJlbGV2YW50IHNlY3Rpb25zXG4gICAgICAgIGFkZFN0YXR1cyhcbiAgICAgICAgICAgICc8bGk+UHJvY2Vzc2luZyAnICsgcmVkaXJlY3RTdWJtaXNzaW9ucy5sZW5ndGggKyAnIHN1Ym1pc3Npb24nICsgKHJlZGlyZWN0U3VibWlzc2lvbnMubGVuZ3RoID09PSAxID8gJycgOiAncycpICsgJy4uLjwvbGk+JyxcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgcmVkaXJlY3RTdWJtaXNzaW9ucykge1xuICAgICAgICAgICAgaWYgKCFwYWdlVGV4dC5pbmNsdWRlcyhyZWRpcmVjdFNlY3Rpb25zW3N1Yi5zZWN0aW9uXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTb21lb25lIGhhcyBtb2RpZmllZCB0aGUgc2VjdGlvbiBpbiB0aGUgbWVhbiB0aW1lLCBza2lwXG4gICAgICAgICAgICAgICAgYWRkU3RhdHVzKCc8bGk+U2tpcHBpbmcgJyArIHN1Yi50aXRsZSArICc6IENhbm5vdCBmaW5kIHNlY3Rpb24uIFBlcmhhcHMgaXQgd2FzIG1vZGlmaWVkIGluIHRoZSBtZWFuIHRpbWU/PC9saT4nKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0ZXh0ID0gcmVkaXJlY3RTZWN0aW9uc1tzdWIuc2VjdGlvbl07XG4gICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gcGFnZVRleHQuaW5kZXhPZihyZWRpcmVjdFNlY3Rpb25zW3N1Yi5zZWN0aW9uXSk7XG4gICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyB0ZXh0Lmxlbmd0aDtcblxuICAgICAgICAgICAgLy8gRmlyc3QgZGVhbCB3aXRoIGNhdGVnb3JpZXNcbiAgICAgICAgICAgIGlmIChzdWIudHlwZSA9PT0gJ2NhdGVnb3J5JylcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yi5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYWNjZXB0Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5VGV4dCA9ICc8IS0tQ3JlYXRlZCBieSBXUDpBRkMgLS0+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWIuY29udGFpbmVyKSBjYXRlZ29yeVRleHQgKz0gJ1xcbnt7Q29udGFpbmVyIGNhdGVnb3J5fX0nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViLnBhcmVudHMgIT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5VGV4dCA9IHN1Yi5wYXJlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbWycgKyBjYXQgKyAnXV0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRQYWdlKHN1Yi50aXRsZSwgY2F0ZWdvcnlUZXh0LCAnQ3JlYXRlZCB2aWEgW1tXUDpBRkN8QXJ0aWNsZXMgZm9yIENyZWF0aW9uXV0nLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhbGtUZXh0ID0gJ3t7c3Vic3Q6V1BBRkMvYXJ0aWNsZXxjbGFzcz1DYXR9fSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWxrVGl0bGUgPSBuZXcgbXcuVGl0bGUoc3ViLnRpdGxlKS5nZXRUYWxrUGFnZSgpLnRvVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdFBhZ2UodGFsa1RpdGxlLCB0YWxrVGV4dCwgJ1BsYWNpbmcgV1BBRkMgcHJvamVjdCBiYW5uZXInLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRleHQubWF0Y2goLz09W149XSo9PS8pWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGhlYWRlciArICdcXG57e0FmQy1jfGF9fVxcbicgKyB0ZXh0LnNsaWNlKGhlYWRlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yi5jb21tZW50ID09PSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdcXG4qe3tzdWJzdDphZmMgY2F0ZWdvcnl9fSB+fn5+XFxuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdcXG4qe3tzdWJzdDphZmMgY2F0ZWdvcnl8YWNjZXB0fDI9JyArIHN1Yi5jb21tZW50ICsgJ319IH5+fn5cXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAne3tBZkMtY3xifX1cXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxBY2NlcHQrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVjbGluZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRleHQubWF0Y2goLz09W149XSo9PS8pWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9IGNhdGVnb3J5RGVjbGluZVJlYXNvbnNbc3ViLnJlYXNvbl07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhc29uID09PSAnJykgcmVhc29uID0gc3ViLmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdWIuY29tbWVudCAhPT0gJycpIHJlYXNvbiA9IHJlYXNvbiArICc6ICcgKyBzdWIuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFzb24gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnYWZjSGVscGVyX3N0YXR1cycpLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfc3RhdHVzJykuaHRtbCgpICsgJzxsaT5Ta2lwcGluZyAnICsgc3ViLnRpdGxlICsgJzogTm8gZGVjbGluZSByZWFzb24gc3BlY2lmaWVkLjwvbGk+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGhlYWRlciArICdcXG57e0FmQy1jfGR9fVxcbicgKyB0ZXh0LnNsaWNlKGhlYWRlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yi5jb21tZW50ID09PSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdcXG4qe3tzdWJzdDphZmMgY2F0ZWdvcnl8JyArIHN1Yi5yZWFzb24gKyAnfX0gfn5+flxcbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnXFxuKnt7c3Vic3Q6YWZjIGNhdGVnb3J5fGRlY2xpbmV8Mj0nICsgcmVhc29uICsgJ319IH5+fn5cXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAne3tBZkMtY3xifX1cXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxEZWNsaW5lKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViLmNvbW1lbnQgIT09ICcnKSB0ZXh0ICs9ICdcXG5cXG57e2FmYyBjb21tZW50fDE9JyArIHN1Yi5jb21tZW50ICsgJyB+fn5+fX1cXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxDb21tZW50Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIGRlZmF1bHRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcmVkaXJlY3RzXG4gICAgICAgICAgICAgICAgbGV0IGFjY2VwdENvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgZGVjbGluZUNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgb3RoZXJDb21tZW50ID0gJyc7XG4gICAgICAgICAgICAgICAgbGV0IGFjY2VwdENvdW50ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGluZUNvdW50ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudENvdW50ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdWIuZnJvbS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3QgPSBzdWIuZnJvbVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVkaXJlY3QuYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhY2NlcHQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RUZXh0ID0gYCNSRURJUkVDVCBbWyR7cmVkaXJlY3QudG99XV0ke3JlZGlyZWN0LmFwcGVuZCA/IGBcXG5cXG57e1JlZGlyZWN0IGNhdGVnb3J5IHNoZWxsfFxcbiR7cmVkaXJlY3QuYXBwZW5kfVxcbn19YCA6ICcnfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdFBhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWRpcmVjdGVkIHBhZ2UgdG8gW1snICsgcmVkaXJlY3QudG8gKyAnXV0gdmlhIFtbV1A6QUZDfEFydGljbGVzIGZvciBDcmVhdGlvbl1dJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXdUaXRsZSA9IG5ldyBtdy5UaXRsZShyZWRpcmVjdC50aXRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtd1RpdGxlLmlzVGFsa1BhZ2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd1RhbGtUaXRsZSA9IG13VGl0bGUuZ2V0VGFsa1BhZ2UoKS50b1RleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFsa1RleHQgPSAne3tzdWJzdDpXUEFGQy9yZWRpcmVjdH19JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0UGFnZShtd1RhbGtUaXRsZSwgdGFsa1RleHQsICdQbGFjaW5nIFdQQUZDIHByb2plY3QgYmFubmVyJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdENvbW1lbnQgKz0gcmVkaXJlY3QudGl0bGUgKyAnICZyYXJyOyAnICsgcmVkaXJlY3QudG87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0LmNvbW1lbnQgPT09ICcnKSBhY2NlcHRDb21tZW50ICs9ICcuICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdENvbW1lbnQgKz0gJzogJyArIHJlZGlyZWN0LmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRDb3VudCsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWNsaW5lJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFzb24gPSByZWRpcmVjdERlY2xpbmVSZWFzb25zW3JlZGlyZWN0LnJlYXNvbl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYXNvbiA9PT0gJycpIHJlYXNvbiA9IHJlZGlyZWN0LmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVkaXJlY3QuY29tbWVudCAhPT0gJycpIHJlYXNvbiA9IHJlYXNvbiArICc6ICcgKyByZWRpcmVjdC5jb21tZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFzb24gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfc3RhdHVzJykuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfc3RhdHVzJykuaHRtbCgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxpPlNraXBwaW5nICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0LnRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBObyBkZWNsaW5lIHJlYXNvbiBzcGVjaWZpZWQuPC9saT4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGluZUNvbW1lbnQgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3QucmVhc29uID09PSAnYmxhbmsnIHx8IHJlZGlyZWN0LnJlYXNvbiA9PT0gJ25vdC1yZWRpcmVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVhc29uICsgJy4gJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZWRpcmVjdC50aXRsZSArICcgJnJhcnI7ICcgKyByZWRpcmVjdC50byArICc6ICcgKyByZWFzb24gKyAnLiAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xpbmVDb3VudCsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb21tZW50Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyQ29tbWVudCArPSByZWRpcmVjdC50aXRsZSArICc6ICcgKyByZWRpcmVjdC5jb21tZW50ICsgJy4gJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50Q291bnQrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByZWFzb24gPSAnJztcblxuICAgICAgICAgICAgICAgIGlmIChhY2NlcHRDb3VudCA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbiArPVxuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbip7e3N1YnN0OmFmYyByZWRpcmVjdHxhY2NlcHR8Mj0nICsgYWNjZXB0Q29tbWVudCArICcgVGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbnMgdG8gV2lraXBlZGlhIX19IH5+fn4nO1xuICAgICAgICAgICAgICAgIGlmIChkZWNsaW5lQ291bnQgPiAwKSByZWFzb24gKz0gJ1xcbip7e3N1YnN0OmFmYyByZWRpcmVjdHxkZWNsaW5lfDI9JyArIGRlY2xpbmVDb21tZW50ICsgJ319IH5+fn4nO1xuICAgICAgICAgICAgICAgIGlmIChjb21tZW50Q291bnQgPiAwKSByZWFzb24gKz0gJ1xcbip7e2FmYyBjb21tZW50fDE9JyArIG90aGVyQ29tbWVudCArICd+fn5+fX0nO1xuICAgICAgICAgICAgICAgIHJlYXNvbiArPSAnXFxuJztcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0NvbW1lbnQgJiYgYWNjZXB0Q291bnQgPT09IHN1Yi5mcm9tLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uID0gYWNjZXB0Q291bnQgPiAxID8gJ1xcbip7e3N1YnN0OmFmYyByZWRpcmVjdHxhbGx9fSB+fn5+XFxuJyA6ICdcXG4qe3tzdWJzdDphZmMgcmVkaXJlY3R9fSB+fn5+XFxuJztcblxuICAgICAgICAgICAgICAgIGlmIChhY2NlcHRDb3VudCArIGRlY2xpbmVDb3VudCArIGNvbW1lbnRDb3VudCA+IDApXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY2NlcHRDb3VudCArIGRlY2xpbmVDb3VudCA9PT0gc3ViLmZyb20ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmVyeSByZXF1ZXN0IGhhbmRsZWQsIGNsb3NlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0ZXh0Lm1hdGNoKC89PVtePV0qPT0vKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY2NlcHRDb3VudCA+IDAgJiYgZGVjbGluZUNvdW50ID4gMCkgdGV4dCA9IGhlYWRlciArICdcXG57e0FmQy1jfHB9fScgKyB0ZXh0LnNsaWNlKGhlYWRlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWNjZXB0Q291bnQgPiAwKSB0ZXh0ID0gaGVhZGVyICsgJ1xcbnt7QWZDLWN8YX19JyArIHRleHQuc2xpY2UoaGVhZGVyLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRleHQgPSBoZWFkZXIgKyAnXFxue3tBZkMtY3xkfX0nICsgdGV4dC5zbGljZShoZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAne3tBZkMtY3xifX1cXG4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdGV4dCArPSByZWFzb24gKyAnXFxuJztcblxuICAgICAgICAgICAgICAgIHRvdGFsQWNjZXB0ICs9IGFjY2VwdENvdW50O1xuICAgICAgICAgICAgICAgIHRvdGFsRGVjbGluZSArPSBkZWNsaW5lQ291bnQ7XG4gICAgICAgICAgICAgICAgdG90YWxDb21tZW50ICs9IGNvbW1lbnRDb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2VUZXh0ID0gcGFnZVRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCkpICsgdGV4dCArIHBhZ2VUZXh0LnNsaWNlKE1hdGgubWF4KDAsIGVuZEluZGV4KSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3VtbWFyeSA9ICdVcGRhdGluZyBzdWJtaXNzaW9uIHN0YXR1czonO1xuICAgICAgICBpZiAodG90YWxBY2NlcHQgPiAwKSBzdW1tYXJ5ICs9ICcgYWNjZXB0aW5nICcgKyB0b3RhbEFjY2VwdCArICcgcmVxdWVzdCcgKyAodG90YWxBY2NlcHQgPiAxID8gJ3MnIDogJycpO1xuICAgICAgICBpZiAodG90YWxEZWNsaW5lID4gMCkge1xuICAgICAgICAgICAgaWYgKHRvdGFsQWNjZXB0ID4gMCkgc3VtbWFyeSArPSAnLCc7XG4gICAgICAgICAgICBzdW1tYXJ5ICs9ICcgZGVjbGluaW5nICcgKyB0b3RhbERlY2xpbmUgKyAnIHJlcXVlc3QnICsgKHRvdGFsRGVjbGluZSA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvdGFsQ29tbWVudCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0b3RhbEFjY2VwdCA+IDAgfHwgdG90YWxEZWNsaW5lID4gMCkgc3VtbWFyeSArPSAnLCc7XG4gICAgICAgICAgICBzdW1tYXJ5ICs9ICcgY29tbWVudGluZyBvbiAnICsgdG90YWxDb21tZW50ICsgJyByZXF1ZXN0JyArICh0b3RhbENvbW1lbnQgPiAxID8gJ3MnIDogJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWRpdFBhZ2UocmVkaXJlY3RQYWdlTmFtZSwgcGFnZVRleHQsIHN1bW1hcnksIGZhbHNlKTtcblxuICAgICAgICAvLyBEaXNwbGF5IHRoZSBcIkRvbmVcIiB0ZXh0IG9ubHkgYWZ0ZXIgYWxsIGFqYXggcmVxdWVzdHMgYXJlIGNvbXBsZXRlZFxuICAgICAgICAkKGRvY3VtZW50KS5hamF4U3RvcCgoKSA9PiB7XG4gICAgICAgICAgICAkKCcjYWZjSGVscGVyX2ZpbmlzaGVkX21haW4nKS5jc3MoJ2Rpc3BsYXknLCAnJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRleHQgb2YgYSBwYWdlLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgb2YgdGhlIHBhZ2UgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBhZGRTdGF0dXMgQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgSFRNTCBzdHJpbmcgdG8gcmVwb3J0IHN0YXR1cy5cbiAgICAgKiBAcmV0dXJucyBUaGUgdGV4dCBvZiB0aGUgcGFnZS5cbiAgICAgKi9cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRQYWdlVGV4dCh0aXRsZTogc3RyaW5nLCBhZGRTdGF0dXM6IChzdGF0dXM6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICBhZGRTdGF0dXMgPSBhZGRTdGF0dXMgPz8gZnVuY3Rpb24gKCkge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgICAgIGFkZFN0YXR1cyhcbiAgICAgICAgICAgICc8bGkgaWQ9XCJhZmNIZWxwZXJfZ2V0JyArXG4gICAgICAgICAgICAgICAganFFc2NhcGUodGl0bGUpICtcbiAgICAgICAgICAgICAgICAnXCI+R2V0dGluZyA8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICdcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICc8L2E+PC9saT4nLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgIC8vICAgICBhY3Rpb246ICdxdWVyeScsXG4gICAgICAgIC8vICAgICBwcm9wOiAncmV2aXNpb25zJyxcbiAgICAgICAgLy8gICAgIHJ2cHJvcDogJ2NvbnRlbnQnLFxuICAgICAgICAvLyAgICAgZm9ybWF0OiAnanNvbicsXG4gICAgICAgIC8vICAgICBpbmRleHBhZ2VpZHM6IHRydWUsXG4gICAgICAgIC8vICAgICB0aXRsZXM6IHRpdGxlLFxuICAgICAgICAvLyB9O1xuXG4gICAgICAgIC8vIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShcbiAgICAgICAgLy8gICAgICQuYWpheCh7XG4gICAgICAgIC8vICAgICAgICAgdXJsOiBtdy51dGlsLndpa2lTY3JpcHQoJ2FwaScpLFxuICAgICAgICAvLyAgICAgICAgIGRhdGE6IHJlcXVlc3QsXG4gICAgICAgIC8vICAgICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgICAvLyAgICAgfSkucmVzcG9uc2VUZXh0LFxuICAgICAgICAvLyApO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IG13LkFwaSgpLmdldCh7XG4gICAgICAgICAgICBhY3Rpb246ICdxdWVyeScsXG4gICAgICAgICAgICBwcm9wOiAncmV2aXNpb25zJyxcbiAgICAgICAgICAgIHJ2cHJvcDogJ2NvbnRlbnQnLFxuICAgICAgICAgICAgZm9ybWF0OiAnanNvbicsXG4gICAgICAgICAgICBpbmRleHBhZ2VpZHM6IHRydWUsXG4gICAgICAgICAgICB0aXRsZXM6IHRpdGxlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwYWdlSWQgPSByZXNwb25zZS5xdWVyeS5wYWdlaWRzWzBdO1xuICAgICAgICBpZiAocGFnZUlkID09PSAnLTEnKSB7XG4gICAgICAgICAgICBhZGRTdGF0dXMoXG4gICAgICAgICAgICAgICAgJ1RoZSBwYWdlIDxhIGNsYXNzPVwibmV3XCIgaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgICAgICBtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVQYXRoJykucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSArXG4gICAgICAgICAgICAgICAgICAgICdcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICdcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAnPC9hPiBkb2VzIG5vdCBleGlzdCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1RleHQgPSByZXNwb25zZS5xdWVyeS5wYWdlc1twYWdlSWRdLnJldmlzaW9uc1swXVsnKiddO1xuICAgICAgICBhZGRTdGF0dXMoXG4gICAgICAgICAgICAnPGxpIGlkPVwiYWZjSGVscGVyX2dldCcgK1xuICAgICAgICAgICAgICAgIGpxRXNjYXBlKHRpdGxlKSArXG4gICAgICAgICAgICAgICAgJ1wiPkdvdCA8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICdcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICc8L2E+PC9saT4nLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbmV3VGV4dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhbnMgdXAgdGhlIGxpbmtzIGluIGEgcGFnZS5cbiAgICAgKiBAcGFyYW0gdGV4dCBUaGUgcGFnZSBjb250ZW50LlxuICAgICAqIEByZXR1cm5zIFRoZSBwYWdlIGNvbnRlbnQgd2l0aCB0aGUgbGlua3MgY2xlYW5lZCB1cC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbGVhbnVwTGlua3ModGV4dDogc3RyaW5nKSB7XG4gICAgICAgIC8vIENvbnZlcnQgZXh0ZXJuYWwgbGlua3MgdG8gV2lraXBlZGlhIGFydGljbGVzIHRvIHByb3BlciB3aWtpbGlua3NcbiAgICAgICAgY29uc3Qgd2lraWxpbmtSZWdleCA9XG4gICAgICAgICAgICAvKFxcWyl7MSwyfSg/Omh0dHBzPzopP1xcL1xcLyhlbi53aWtpcGVkaWEub3JnXFwvd2lraXxlbndwLm9yZylcXC8oW15cXHNbXFxdfF0rKShbXFxzfF0pPygoPzpcXFtcXFtbXltcXF1dKl1dfFteW1xcXV0pKikoXSl7MSwyfS9naTtcbiAgICAgICAgY29uc3QgdGVtcG9yYXJ5VGV4dCA9IHRleHQ7XG4gICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHdpa2lsaW5rUmVnZXguZXhlYyh0ZW1wb3JhcnlUZXh0KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VOYW1lID0gZGVjb2RlVVJJKG1hdGNoWzNdLnJlcGxhY2VBbGwoJ18nLCAnICcpKTtcbiAgICAgICAgICAgIGxldCBkaXNwbGF5bmFtZSA9IGRlY29kZVVSSShtYXRjaFs1XS5yZXBsYWNlQWxsKCdfJywgJyAnKSk7XG4gICAgICAgICAgICBpZiAocGFnZU5hbWUgPT09IGRpc3BsYXluYW1lKSBkaXNwbGF5bmFtZSA9ICcnO1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZVRleHQgPSAnW1snICsgcGFnZU5hbWUgKyAoZGlzcGxheW5hbWUgPyAnfCcgKyBkaXNwbGF5bmFtZSA6ICcnKSArICddXSc7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKG1hdGNoWzBdLCByZXBsYWNlVGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIHRoZSBzZWxlY3QgZWxlbWVudCBvdXRlciBIVE1MIGZvciBhIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHRpdGxlIFRoZSBwYWdlIHRpdGxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBzZWxlY3QgZWxlbWVudCBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIFRoZSBzZWxlY3QgZWxlbWVudCBvdXRlciBIVE1MLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdlbmVyYXRlU2VsZWN0KHRpdGxlOiBzdHJpbmcsIG9wdGlvbnM6IG9iamVjdFtdKSB7XG4gICAgICAgIHJldHVybiBnZW5lcmF0ZVNlbGVjdE9iamVjdCh0aXRsZSwgb3B0aW9ucykucHJvcCgnb3V0ZXJIVE1MJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgc2VsZWN0IGVsZW1lbnQgZm9yIGEgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdGl0bGUgVGhlIHBhZ2UgdGl0bGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIHNlbGVjdCBlbGVtZW50IG9wdGlvbnMuXG4gICAgICogQHBhcmFtIG9uY2hhbmdlIFRoZSBvbmNoYW5nZSBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2VsZWN0IGpRdWVyeSBlbGVtZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdlbmVyYXRlU2VsZWN0T2JqZWN0KHRpdGxlOiBzdHJpbmcsIG9wdGlvbnM6IG9iamVjdFtdLCBvbmNoYW5nZT86IEZ1bmN0aW9uKSB7XG4gICAgICAgIGNvbnN0ICRzZWxlY3QgPSAkKCc8c2VsZWN0PicpLmF0dHIoJ25hbWUnLCB0aXRsZSkuYXR0cignaWQnLCB0aXRsZSk7XG4gICAgICAgIGlmIChvbmNoYW5nZSAhPT0gbnVsbCkgJHNlbGVjdC5jaGFuZ2Uob25jaGFuZ2UpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb24ubGFiZWxBbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IG9wdGlvbi5sYWJlbEFuZFZhbHVlO1xuICAgICAgICAgICAgICAgIG9wdGlvbi5sYWJlbCA9IG9wdGlvbi5sYWJlbEFuZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgJG9wdGlvbiA9ICQoJzxvcHRpb24+JykuYXBwZW5kVG8oJHNlbGVjdCkudmFsKG9wdGlvbi52YWx1ZSkudGV4dChvcHRpb24ubGFiZWwpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkgJG9wdGlvbi5hdHRyKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkgJG9wdGlvbi5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkc2VsZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvbGQgbXcudXRpbC5qc01lc3NhZ2UgZnVuY3Rpb24gYmVmb3JlIGh0dHBzOi8vZ2Vycml0Lndpa2ltZWRpYS5vcmcvci8jL2MvMTc2MDUvLCB3aGljaFxuICAgICAqIGludHJvZHVjZWQgdGhlIHNpbGx5IGF1dG8taGlkZSBmdW5jdGlvbi4gQWxzbyB3aXRoIHRoZSBvcmlnaW5hbCBzdHlsZXMuXG4gICAgICogQWRkIGEgbGl0dGxlIGJveCBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gdG8gaW5mb3JtIHRoZSB1c2VyIG9mXG4gICAgICogc29tZXRoaW5nLCByZXBsYWNpbmcgYW55IHByZXZpb3VzIG1lc3NhZ2UuXG4gICAgICogQ2FsbGluZyB3aXRoIG5vIGFyZ3VtZW50cywgd2l0aCBhbiBlbXB0eSBzdHJpbmcgb3IgbnVsbCB3aWxsIGhpZGUgdGhlIG1lc3NhZ2VcbiAgICAgKiBUYWtlbiBmcm9tIFtbVXNlcjpUaW1vdGhldXMgQ2FuZW5zL2Rpc3BsYXltZXNzYWdlLmpzXV0uXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIERPTS1lbGVtZW50LCBqUXVlcnkgb2JqZWN0IG9yIEhUTUwtc3RyaW5nIHRvIGJlIHB1dCBpbnNpZGUgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqIEBwYXJhbSBjbGFzc05hbWUgVXNlZCBpbiBhZGRpbmcgYSBjbGFzczsgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgZWFjaCBjYWxsIHRvIGFsbG93IENTUy9KUyB0byBoaWRlIGRpZmZlcmVudCBib3hlcy4gTnVsbCA9IG5vIGNsYXNzIHVzZWQuXG4gICAgICogQHJldHVybnMgVHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRpc3BsYXlNZXNzYWdlKG1lc3NhZ2U6IEhUTUxFbGVtZW50IHwgSlF1ZXJ5IHwgc3RyaW5nLCBjbGFzc05hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlID09PSAnJyB8fCBtZXNzYWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICAkKCcjZGlzcGxheS1tZXNzYWdlJykuZW1wdHkoKS5oaWRlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRW1wdHlpbmcgYW5kIGhpZGluZyBtZXNzYWdlIGlzIGludGVuZGVkIGJlaGF2aW91ciwgcmV0dXJuIHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIHNwZWNpYWwtY2FzZSBza2luIHN0cnVjdHVyZXMgcHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJlLiBTa2lucyB0aGF0XG4gICAgICAgICAgICAvLyBjaG9vc2UgdG8gYWJhbmRvbiBvciBzaWduaWZpY2FudGx5IG1vZGlmeSBvdXIgZm9ybWF0dGluZyBjYW4ganVzdCBkZWZpbmVcbiAgICAgICAgICAgIC8vIGFuIG13LWpzLW1lc3NhZ2UgZGl2IHRvIHN0YXJ0IHdpdGguXG4gICAgICAgICAgICBsZXQgJG1lc3NhZ2VEaXYgPSAkKCcjZGlzcGxheS1tZXNzYWdlJyk7XG4gICAgICAgICAgICBpZiAoJG1lc3NhZ2VEaXYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgJG1lc3NhZ2VEaXYgPSAkKFxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBpZD1cImRpc3BsYXktbWVzc2FnZVwiIHN0eWxlPVwibWFyZ2luOjFlbTtwYWRkaW5nOjAuNWVtIDIuNSU7Ym9yZGVyOnNvbGlkIDFweCAjZGRkO2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYztmb250LXNpemU6IDAuOGVtXCI+PC9kaXY+JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChtdy51dGlsLiRjb250ZW50Lmxlbmd0aCA+IDApIG13LnV0aWwuJGNvbnRlbnQucHJlcGVuZCgkbWVzc2FnZURpdik7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lKSAkbWVzc2FnZURpdi5wcm9wKCdjbGFzcycsICdkaXNwbGF5LW1lc3NhZ2UtJyArIGNsYXNzTmFtZSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgJG1lc3NhZ2VEaXYuZW1wdHkoKTtcbiAgICAgICAgICAgICAgICAkbWVzc2FnZURpdi5hcHBlbmQobWVzc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2UgJG1lc3NhZ2VEaXYuaHRtbChtZXNzYWdlKTtcbiAgICAgICAgICAgICRtZXNzYWdlRGl2WzBdLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZXMgYSBzdHJpbmcgZm9yIHVzZSBpbiBqUXVlcnkgc2VsZWN0b3JzLlxuICAgICAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBleHByZXNzaW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGpxRXNjYXBlKGV4cHJlc3Npb246IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5yZXBsYWNlQWxsKC9bICFcIiMkJSYnKCkqKywuLzo7PD0+P0BbXFxcXFxcXV5ge3x9fl0vZywgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVkaXRzIGEgZ2l2ZW4gcGFnZSwgYW5kIHVwZGF0ZXMgdGhlIFVJLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaGUgcGFnZSB0aXRsZSB0byBlZGl0LlxuICAgICAqIEBwYXJhbSBuZXdUZXh0IFRoZSBuZXcgdGV4dCB0byBpbnNlcnQuXG4gICAgICogQHBhcmFtIHN1bW1hcnkgVGhlIGVkaXQgc3VtbWFyeS5cbiAgICAgKiBAcGFyYW0gY3JlYXRlT25seSBXaGV0aGVyIHRvIG9ubHkgY3JlYXRlIHRoZSBwYWdlIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICogQHBhcmFtIG5vUGF0cm9sIFdoZXRoZXIgdG8gbm90IG1hcmsgdGhlIGVkaXQgYXMgcGF0cm9sbGVkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVkaXRQYWdlKHRpdGxlOiBzdHJpbmcsIG5ld1RleHQ6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nLCBjcmVhdGVPbmx5OiBib29sZWFuLCBub1BhdHJvbDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCB3Z0FydGljbGVQYXRoID0gbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpO1xuICAgICAgICBzdW1tYXJ5ICs9IHN1bW1hcnlBZHZlcnQ7XG4gICAgICAgICQoJyNhZmNIZWxwZXJfZmluaXNoZWRfd3JhcHBlcicpLmh0bWwoXG4gICAgICAgICAgICAnPHNwYW4gaWQ9XCJhZmNIZWxwZXJfQUpBWF9maW5pc2hlZF8nICtcbiAgICAgICAgICAgICAgICBhamF4TnVtYmVyICtcbiAgICAgICAgICAgICAgICAnXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4nICtcbiAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX2ZpbmlzaGVkX3dyYXBwZXInKS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICc8L3NwYW4+JyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25JZCA9IGFqYXhOdW1iZXI7XG4gICAgICAgIGFqYXhOdW1iZXIrKztcbiAgICAgICAgJCgnI2FmY0hlbHBlcl9zdGF0dXMnKS5odG1sKFxuICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9zdGF0dXMnKS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICc8bGkgaWQ9XCJhZmNIZWxwZXJfZWRpdCcgK1xuICAgICAgICAgICAgICAgIGpxRXNjYXBlKHRpdGxlKSArXG4gICAgICAgICAgICAgICAgJ1wiPkVkaXRpbmcgPGEgaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgIHdnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSArXG4gICAgICAgICAgICAgICAgJ1wiIHRpdGxlPVwiJyArXG4gICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICdcIj4nICtcbiAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgJzwvYT48L2xpPicsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICBhY3Rpb246ICdlZGl0JyxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgdGV4dDogbmV3VGV4dCxcbiAgICAgICAgICAgIHN1bW1hcnksXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjcmVhdGVPbmx5KSByZXF1ZXN0LmNyZWF0ZW9ubHkgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IG5ldyBtdy5BcGkoKTtcbiAgICAgICAgYXBpLnBvc3RXaXRoRWRpdFRva2VuKHJlcXVlc3QpXG4gICAgICAgICAgICAuZG9uZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhPy5lZGl0Py5yZXN1bHQgJiYgZGF0YS5lZGl0LnJlc3VsdCA9PT0gJ1N1Y2Nlc3MnKVxuICAgICAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX2VkaXQnICsganFFc2NhcGUodGl0bGUpKS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1NhdmVkIDxhIGhyZWY9XCInICsgd2dBcnRpY2xlUGF0aC5yZXBsYWNlKCckMScsIGVuY29kZVVSSSh0aXRsZSkpICsgJ1wiIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiPicgKyB0aXRsZSArICc8L2E+JyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9lZGl0JyArIGpxRXNjYXBlKHRpdGxlKSkuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImFmY0hlbHBlcl9ub3RpY2VcIj48Yj5FZGl0IGZhaWxlZCBvbiA8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2dBcnRpY2xlUGF0aC5yZXBsYWNlKCckMScsIGVuY29kZVVSSSh0aXRsZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIgdGl0bGU9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hPjwvYj48L3NwYW4+LiBFcnJvciBpbmZvOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZGl0IGZhaWxlZCBvbiAlcyAoJXMpLiBFcnJvciBpbmZvOiAlcycsXG4gICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmFpbCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY3JlYXRlT25seSAmJiBlcnJvciA9PT0gJ2FydGljbGVleGlzdHMnKVxuICAgICAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX2VkaXQnICsganFFc2NhcGUodGl0bGUpKS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYWZjSGVscGVyX25vdGljZVwiPjxiPkVkaXQgZmFpbGVkIG9uIDxhIGhyZWY9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E+PC9iPjwvc3Bhbj4uIEVycm9yIGluZm86IFRoZSBhcnRpY2xlIGFscmVhZHkgZXhpc3RzIScsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX2VkaXQnICsganFFc2NhcGUodGl0bGUpKS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYWZjSGVscGVyX25vdGljZVwiPjxiPkVkaXQgZmFpbGVkIG9uIDxhIGhyZWY9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E+PC9iPjwvc3Bhbj4uIEVycm9yIGluZm86ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hbHdheXMoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfQUpBWF9maW5pc2hlZF8nICsgZnVuY3Rpb25JZCkuY3NzKCdkaXNwbGF5JywgJycpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFub1BhdHJvbCAvKiBXZSBwYXRyb2wgYnkgZGVmYXVsdCAqLyAmJiAkKCcucGF0cm9sbGluaycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJjaWQgdG9rZW4gZnJvbSB0aGUgXCJNYXJrIHBhZ2UgYXMgcGF0cm9sbGVkXCIgbGluayBvbiBwYWdlXG4gICAgICAgICAgICBjb25zdCBwYXRyb2xIcmVmID0gJCgnLnBhdHJvbGxpbmsgYScpLmF0dHIoJ2hyZWYnKTtcbiAgICAgICAgICAgIGNvbnN0IHJjSWQgPSBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3JjaWQnLCBwYXRyb2xIcmVmKTtcblxuICAgICAgICAgICAgaWYgKHJjSWQpIHtcbiAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX3N0YXR1cycpLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfc3RhdHVzJykuaHRtbCgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgaWQ9XCJhZmNIZWxwZXJfcGF0cm9sJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBqcUVzY2FwZSh0aXRsZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPk1hcmtpbmcgPGEgaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgd2dBcnRpY2xlUGF0aC5yZXBsYWNlKCckMScsIGVuY29kZVVSSSh0aXRsZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyBhcyBwYXRyb2xsZWQ8L2E+PC9saT4nLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0cm9sUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncGF0cm9sJyxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIHJjaWQ6IHJjSWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhcGkucG9zdFdpdGhUb2tlbigncGF0cm9sJywgcGF0cm9sUmVxdWVzdClcbiAgICAgICAgICAgICAgICAgICAgLmRvbmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfcGF0cm9sJyArIGpxRXNjYXBlKHRpdGxlKSkuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01hcmtlZCA8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIHRpdGxlPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hPiBhcyBwYXRyb2xsZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX3BhdHJvbCcgKyBqcUVzY2FwZSh0aXRsZSkpLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImFmY0hlbHBlcl9ub3RpY2VcIj48Yj5QYXRyb2xsaW5nIGZhaWxlZCBvbiA8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIHRpdGxlPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hPjwvYj48L3NwYW4+IHdpdGggYW4gdW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGF0cm9sbGluZyBmYWlsZWQgb24gJXMgKCVzKSB3aXRoIGFuIHVua25vd24gZXJyb3IuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2dBcnRpY2xlUGF0aC5yZXBsYWNlKCckMScsIGVuY29kZVVSSSh0aXRsZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuZmFpbCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfcGF0cm9sJyArIGpxRXNjYXBlKHRpdGxlKSkuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJhZmNIZWxwZXJfbm90aWNlXCI+PGI+UGF0cm9sbGluZyBmYWlsZWQgb24gPGEgaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIgdGl0bGU9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYT48L2I+PC9zcGFuPi4gRXJyb3IgaW5mbzogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtdy5sb2FkZXIudXNpbmcoWydtZWRpYXdpa2kuYXBpJywgJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICAgICAgbXcudXRpbC5hZGRDU1MoYFxuI2Rpc3BsYXktbWVzc2FnZSAqIHtcbiAgICBtYXJnaW46IHJldmVydDtcbiAgICBib3JkZXI6IHJldmVydDtcbiAgICBiYWNrZ3JvdW5kOiByZXZlcnQ7XG4gICAgcGFkZGluZzogcmV2ZXJ0O1xufWApO1xuXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0UG9ydGxldExpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKFxuICAgICAgICAgICAgbXcuY29uZmlnLmdldCgnc2tpbicpID09PSAnbWluZXJ2YScgPyAncC10YicgOiAncC1jYWN0aW9ucycsXG4gICAgICAgICAgICAnIycsXG4gICAgICAgICAgICAnUmV2aWV3IEFGQy9SQycsXG4gICAgICAgICAgICAnY2EtYWZjcmhzJyxcbiAgICAgICAgICAgICdSZXZpZXcnLFxuICAgICAgICAgICAgJ2EnLFxuICAgICAgICApO1xuICAgICAgICAkKHJlZGlyZWN0UG9ydGxldExpbmspLmNsaWNrKChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vIENsZWFyIHZhcmlhYmxlcyBmb3IgdGhlIGNhc2Ugc29tZWJvZHkgaXMgY2xpY2tpbmcgb24gXCJyZXZpZXdcIiBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgcmVkaXJlY3RTdWJtaXNzaW9ucy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgcmVkaXJlY3RTZWN0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgbnVtYmVyVG90YWwgPSAwO1xuICAgICAgICAgICAgc3VibWlzc2lvbnMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIG5lZWRzVXBkYXRlLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICByZWRpcmVjdEluaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KSgpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7O29CQUFDLFVBQVksQ0FDVCxHQUNJLEdBQUcsT0FBTyxJQUFJLFlBQVksSUFBTSw2Q0FDaEMsR0FBRyxPQUFPLElBQUksWUFBWSxJQUFNLDZDQUVoQyxPQUVKLElBQU1BLEVBQW1CLEdBQUcsT0FBTyxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUssR0FBRyxFQUNsRUMsRUFBc0IsQ0FBQyxFQUN6QkMsRUFBbUIsQ0FBQyxFQUNsQkMsRUFBZ0IsOENBQ2xCQyxFQUFjLEVBQ2RDLEVBQWEsRUFDWEMsRUFBYyxDQUFDLEVBQ2ZDLEVBQWMsQ0FBQyxFQUNmQyxFQUF5QixDQUMzQixPQUFVLHNEQUNWLE1BQVMscUNBQ1QsWUFDSSxpSkFDSixTQUFZLHdIQUNaLGVBQWdCLHlDQUNoQixPQUFVLEVBQ2QsRUFDTUMsRUFBeUIsQ0FDM0IsT0FBVSx5REFDVixNQUFTLHFDQUNULFNBQVkseUVBQ1osZUFBZ0IseUNBQ2hCLE9BQVUsRUFDZCxFQUtBLGVBQWVDLEdBQWUsQ0FDMUIsSUFBSUMsRUFBVyxNQUFNQyxFQUFZWixDQUFnQixFQUVqRFcsRUFBV0UsRUFBYUYsQ0FBUSxFQUdoQyxJQUFNRyxFQUFlLFVBQ3JCSCxFQUFXQSxFQUFTLE1BQU0sS0FBSyxJQUFJLEVBQUdBLEVBQVMsT0FBT0csQ0FBWSxDQUFDLENBQUMsRUFFcEVaLEVBQW1CUyxFQUFTLE1BQU0scUNBQXFDLEVBR3ZFLE9BQVcsQ0FBQ0ksRUFBT0MsQ0FBZSxJQUFLZCxFQUFpQixRQUFRLEVBRTVELEdBQUks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YUFDL0MsSUFDQSxnQkFDQSxZQUNBLFNBQ0EsR0FDSixFQUNBLEVBQUVBLENBQW1CLEVBQUUsTUFBT0MsR0FBVSxDQUNwQ0EsRUFBTSxlQUFlLEVBRXJCbEgsRUFBb0IsT0FBUyxFQUM3QkMsRUFBaUIsT0FBUyxFQUMxQkUsRUFBYyxFQUNkRSxFQUFZLE9BQVMsRUFDckJDLEVBQVksT0FBUyxFQUNyQkcsRUFBYSxDQUNqQixDQUFDLENBQ0wsQ0FBQyxDQUNMLEdBQUciLAogICJuYW1lcyI6IFsicmVkaXJlY3RQYWdlTmFtZSIsICJyZWRpcmVjdFN1Ym1pc3Npb25zIiwgInJlZGlyZWN0U2VjdGlvbnMiLCAic3VtbWFyeUFkdmVydCIsICJudW1iZXJUb3RhbCIsICJhamF4TnVtYmVyIiwgInN1Ym1pc3Npb25zIiwgIm5lZWRzVXBkYXRlIiwgInJlZGlyZWN0RGVjbGluZVJlYXNvbnMiLCAiY2F0ZWdvcnlEZWNsaW5lUmVhc29ucyIsICJyZWRpcmVjdEluaXQiLCAicGFnZVRleHQiLCAiZ2V0UGFnZVRleHQiLCAiY2xlYW51cExpbmtzIiwgInNlY3Rpb25SZWdleCIsICJpbmRleCIsICJyZWRpcmVjdFNlY3Rpb24iLCAiaGVhZGVyIiwgIndpa2lsaW5rUmVnZXgiLCAibGlua3MiLCAibCIsICJ0byIsICJyZWFzb25NYXRjaCIsICJyZWFzb24iLCAic291cmNlTWF0Y2giLCAic291cmNlIiwgInN1Ym1pc3Npb24iLCAibGluayIsICJzdWIiLCAiY2F0ZWdvcnlOYW1lIiwgInJlcXVlc3RUZXh0IiwgInBhcmVudEhlYWRpbmdJbmRleCIsICJwYXJlbnRDYXRlZ29yaWVzIiwgInBhcmVudENhdGVnb3J5TWF0Y2giLCAicGFyZW50Q2F0ZWdvcmllc1JlZ2V4IiwgIiRmb3JtIiwgImRpc3BsYXlNZXNzYWdlIiwgIiRtZXNzYWdlRGl2IiwgInJlZGlyZWN0RW1wdHkiLCAiQUNUSU9OUyIsICJyZWRpcmVjdFN1Ym1pc3Npb24iLCAic3VibWlzc2lvbk5hbWUiLCAiJHRoaXNTdWJMaXN0IiwgIiR0aGlzU3ViTGlzdEVsZW1lbnQiLCAiJGZyb21MaXN0IiwgImZyb20iLCAidG9BcnRpY2xlIiwgInJlYXNvbkFuZFNvdXJjZSIsICJnb29nbGVTZWFyY2hVcmwiLCAiZ2VuZXJhdGVTZWxlY3RPYmplY3QiLCAicmVkaXJlY3RNYWtlQWN0aW9uQ2hhbmdlIiwgInN1YklkIiwgInJlZGlyZWN0UGVyZm9ybUFjdGlvbnMiLCAiZWxlbWVudCIsICJyZWRpcmVjdE9uQWN0aW9uQ2hhbmdlIiwgImlkIiwgIiRleHRyYSIsICJzZWxlY3RWYWx1ZSIsICJnZW5lcmF0ZVNlbGVjdCIsICJhY3Rpb24iLCAiYWRkU3RhdHVzIiwgInN0YXR1cyIsICJ0b3RhbEFjY2VwdCIsICJ0b3RhbERlY2xpbmUiLCAidG90YWxDb21tZW50IiwgInRleHQiLCAic3RhcnRJbmRleCIsICJlbmRJbmRleCIsICJjYXRlZ29yeVRleHQiLCAiY2F0IiwgImVkaXRQYWdlIiwgInRhbGtUZXh0IiwgInRhbGtUaXRsZSIsICJhY2NlcHRDb21tZW50IiwgImRlY2xpbmVDb21tZW50IiwgIm90aGVyQ29tbWVudCIsICJhY2NlcHRDb3VudCIsICJkZWNsaW5lQ291bnQiLCAiY29tbWVudENvdW50IiwgImhhc0NvbW1lbnQiLCAicmVkaXJlY3QiLCAicmVkaXJlY3RUZXh0IiwgIm13VGl0bGUiLCAibXdUYWxrVGl0bGUiLCAic3VtbWFyeSIsICJ0aXRsZSIsICJqcUVzY2FwZSIsICJyZXNwb25zZSIsICJwYWdlSWQiLCAibmV3VGV4dCIsICJ0ZW1wb3JhcnlUZXh0IiwgIm1hdGNoIiwgInBhZ2VOYW1lIiwgImRpc3BsYXluYW1lIiwgInJlcGxhY2VUZXh0IiwgIm9wdGlvbnMiLCAib25jaGFuZ2UiLCAiJHNlbGVjdCIsICJvcHRpb24iLCAiJG9wdGlvbiIsICJtZXNzYWdlIiwgImNsYXNzTmFtZSIsICJleHByZXNzaW9uIiwgImNyZWF0ZU9ubHkiLCAibm9QYXRyb2wiLCAid2dBcnRpY2xlUGF0aCIsICJmdW5jdGlvbklkIiwgInJlcXVlc3QiLCAiYXBpIiwgImRhdGEiLCAiZXJyb3IiLCAicGF0cm9sSHJlZiIsICJyY0lkIiwgInBhdHJvbFJlcXVlc3QiLCAicmVkaXJlY3RQb3J0bGV0TGluayIsICJldmVudCJdCn0K