@borgar/fx 4.11.2 → 4.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/fx.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";const e="operator",t="operator-trim",n="bool",l="error",r="number",o="func",s="newline",u="whitespace",i="string",a="context_quote",c="context",f="range",p="range_beam",h="range_ternary",g="range_named",d="structured",m="fx_prefix",x="unknown",y="UnaryExpression",v="BinaryExpression",$="ReferenceIdentifier",w="Literal",R="ErrorLiteral",N="CallExpression",E="LambdaExpression",b="LetExpression",A="ArrayExpression",C="Identifier",k=16383,T=1048575;function L(e){const t=e||"",n=t.length;let l=0;if(n>2){const e=t.charCodeAt(n-3);l+=676*(1+e-(e>95?32:0)-65)}if(n>1){const e=t.charCodeAt(n-2);l+=26*(1+e-(e>95?32:0)-65)}if(n){const e=t.charCodeAt(n-1);l+=e-(e>95?32:0)-65}return l}const I=/^\[('['#@[\]]|[^'#@[\]])+\]/i,O=/^([^#@[\]:]+)/i,U={headers:1,data:2,totals:4,all:8,"this row":16,"@":16},F=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Object.freeze(t)},_={0:F(),1:F("headers"),2:F("data"),4:F("totals"),8:F("all"),16:F("this row"),3:F("headers","data"),6:F("data","totals")},S=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=I.exec(e);if(n){const e=n[0].slice(1,-1).replace(/'(['#@[\]])/g,"$1");return[n[0],e]}return t&&(n=O.exec(e),n)?[n[0],n[0]]:null};function M(e){const t=[];let n,l,r=0,o=e,s=0;if(!(n=/^(\[\s*)/.exec(o)))return null;if(l=/^\[#([a-z ]+)\]/i.exec(o)){const e=l[1].toLowerCase();if(r+=l[0].length,!U[e])return null;s|=U[e]}else if(l=S(o,!1))r+=l[0].length,t.push(l[1]);else{let l=!0;for(o=o.slice(n[1].length),r+=n[1].length;l&&(n=/^\[#([a-z ]+)\](\s*,\s*)?/i.exec(o));){const e=n[1].toLowerCase();if(!U[e])return null;s|=U[e],o=o.slice(n[0].length),r+=n[0].length,l=!!n[2]}if(l&&(n=/^@/.exec(o))&&(s|=U["@"],o=o.slice(1),r+=1,l="]"!==o[0]),!(s in _))return null;const u=l?S(e.slice(r)):null;if(u){if(r+=u[0].length,t.push(u[1]),o=e.slice(r),":"===o[0]){o=o.slice(1),r++;const e=S(o);if(!e)return null;r+=e[0].length,t.push(e[1])}l=!1}for(;" "===e[r];)r++;if(l||"]"!==e[r])return null;r++}const u=_[s];return{columns:t,sections:u?u.concat():u,length:r,token:e.slice(0,r)}}const D=/^(?!!)(\[(?:[^\]])+\])?([0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]+)?(?=!)/,z=/^'(?:''|[^'])*('|$)(?=!)/,j="\\$?[A-Z]{1,3}\\$?[1-9][0-9]{0,6}",B="\\$?[A-Z]{1,3}",Z="\\$?[1-9][0-9]{0,6}",X="\\.?:\\.?",P="(?![a-z0-9_\\u00a1-\\uffff])",W=new RegExp(`^${B}${X}${B}${P}`,"i"),G=new RegExp(`^${Z}${X}${Z}${P}`,"i"),Y=new RegExp(`^${j}${P}`,"i"),H=new RegExp(`^((${B}|${Z})${X}${j}|${j}${X}(${B}|${Z}))(?![\\w($.])`,"i"),K="(?:R(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,6})?)",q="(?:C(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,4})?)",V=new RegExp(`^${q}(${X}${q})?${P}`,"i"),Q=new RegExp(`^${K}(${X}${K})?${P}`,"i"),J=new RegExp(`^(?:(?=[RC])${K}${q})${P}`,"i"),ee=new RegExp(`^(${K}${q}(${X}${q}|${X}${K})(?![[\\d])|(${K}|${q})(${X}${K}${q}))${P}`,"i"),te=/^[a-zA-Z\\_\u00a1-\uffff][a-zA-Z0-9\\_.?\u00a1-\uffff]{0,254}/i;function ne(e,t){return n=>{const l=t.exec(n);if(l)return{type:e,value:l[0]}}}function le(e){const t=te.exec(e);if(t){const e=t[0].toLowerCase();return"\\"===e[0]&&t[0].length<3||("r"===e||"c"===e)?null:{type:g,value:t[0]}}}const re=/^'(?:[^[\]]+?)?(?:\[(.+?)\])?(?:[^[\]]+?)'$/,oe=/^'\[(.+?)\]'$/;function se(e,t){const n=z.exec(e);if(n){const e=n[0];if(t.xlsx&&oe.test(e)||re.test(e))return{type:a,value:e}}const l=D.exec(e);if(l){const[,e,n]=l;if(e&&n||n||e&&!n&&t.xlsx)return{type:c,value:l[0]}}}function ue(e){const t=M(e);if(t){let n=t.length;for(;" "===e[n];)n++;if("!"!==e[n])return{type:d,value:t.token}}return null}const ie=/([RC])(\[?)(-?\d+)/gi,ae=/(\d+|[a-zA-Z]+)/gi;function ce(e,t){let n,l;if(t.r1c1){if(t.allowTernary&&(n=ee.exec(e))?l={type:h,value:n[0]}:(n=J.exec(e))?l={type:f,value:n[0]}:((n=Q.exec(e))||(n=V.exec(e)))&&(l={type:p,value:n[0]}),l){for(ie.lastIndex=0;null!==(n=ie.exec(l.value));){const e=("R"===n[1]?T:k)+(n[2]?0:1),t=parseInt(n[3],10);if(t>e||t<-e)return null}return l}}else if(t.allowTernary&&(n=H.exec(e))?l={type:h,value:n[0]}:(n=W.exec(e))||(n=G.exec(e))?l={type:p,value:n[0]}:(n=Y.exec(e))&&(l={type:f,value:n[0]}),l){for(ae.lastIndex=0;null!==(n=ae.exec(l.value));)if(/^\d/.test(n[1])){if(parseInt(n[1],10)-1>T)return null}else if(L(n[1])>k)return null;return l}}const fe=[ne(l,/^#(NAME\?|FIELD!|CALC!|VALUE!|REF!|DIV\/0!|NULL!|NUM!|N\/A|GETTING_DATA\b|SPILL!|UNKNOWN!|FIELD\b|CALC\b|SYNTAX\?|ERROR!|CONNECT!|BLOCKED!|EXTERNAL!)/i),ne(t,/^(\.:\.|\.:|:\.)/),ne(e,/^(<=|>=|<>|[-+/*^%&<>=]|[{},;]|[()]|@|:|!|#)/),ne(o,/^[A-Z_]+[A-Z\d_.]*(?=\()/i),ne(n,/^(TRUE|FALSE)\b/i),ne(s,/^\n+/),ne(u,/^[ \f\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/),ne(i,/^"(?:""|[^"])*("|$)/),se,ce,ue,ne(r,/^(?:\d+(\.\d+)?(?:[eE][+-]?\d+)?|\d+)/),le],pe=[function(t,n){if(n.r1c1)return"!"===t[0]?{type:e,value:t[0]}:null;const l=/^(!|\.?:\.?)/.exec(t);return l?{type:e,value:l[1]}:null},se,ce,ue,le],he={};function ge(e,t){if(e.length){const n=e[0];t[n]=t[n]||{},ge(e.slice(1),t[n])}else t.$=!0}[[f,":",f],[f,".:",f],[f,":.",f],[f,".:.",f],[f],[p],[h],[c,"!",f,":",f],[c,"!",f,".:",f],[c,"!",f,":.",f],[c,"!",f,".:.",f],[c,"!",f],[c,"!",p],[c,"!",h],[a,"!",f,":",f],[a,"!",f,".:",f],[a,"!",f,":.",f],[a,"!",f,".:.",f],[a,"!",f],[a,"!",p],[a,"!",h],[g],[c,"!",g],[a,"!",g],[d],[g,d],[c,"!",g,d],[a,"!",g,d]].forEach((e=>ge(e.concat().reverse(),he)));const de=function(t,n,l){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const o=t[l-r];if(o){const s=o.type===e?o.value:o.type;if(s in n)return de(t,n[s],l,r+1)}return n.$?r:0};function me(e){const t=[];for(let n=e.length-1;n>=0;n--){let l=e[n];const r=de(e,he,n);if(r){const t=e.slice(n-r+1,n+1);l={...l},l.value=t.map((e=>e.value)).join(""),l.loc&&t[0].loc&&(l.loc[0]=t[0].loc[0]),n-=r-1}t.unshift(l)}return t}const xe=(e,t)=>e&&e.type===t,ye={withLocation:!1,mergeRefs:!0,allowTernary:!1,negativeNumbers:!0,r1c1:!1},ve=e=>e.type===g||e.type===o,$e=t=>!xe(t,e)||"%"===t.value||"}"===t.value||")"===t.value||"#"===t.value;function we(n,l){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const c=Object.assign({},ye,a),{withLocation:p,mergeRefs:h,negativeNumbers:d}=c,y=[];let v=0,$=0,w=0;const R=[];let N=null,E=null,b=null;const A=e=>{const n=e.type===x,l=b&&b.type===x;b&&(n&&l||n&&ve(b)||l&&ve(e))?(b.value+=e.value,b.type=x,p&&(b.loc[1]=e.loc[1])):(e.type===t&&(R.push(y.length),e.type=x),y.push(e),b=e,e.type!==u&&e.type!==s&&(E=N,N=e))};if("="===n[0]){v++,A({type:m,value:"=",...p?{loc:[0,1]}:{}})}for(;v<n.length;){const t=v,s=n.slice(v);let u="",a="";for(let e=0;e<l.length;e++){const t=l[e](s,c);if(t){u=t.type,a=t.value,v+=a.length;break}}u||(u=x,a=n[v],v++);const f={type:u,value:a,...p?{loc:[t,v]}:{}};if(b&&b.type===o&&"("===a){const e=b.value.toLowerCase();"lambda"!==e&&"let"!==e||$++}if(u===x){const e=a.toLowerCase();w+="r"===e||"c"===e?1:0}if(u===i){const e=a.length;if('""'===a);else if('"'===a||'"'!==a[e-1])f.unterminated=!0;else if('""'!==a&&'"'===a[e-2]){let t=e-1;for(;'"'===a[t];)t--;!(t+1)^(e-t+1)%2==0&&(f.unterminated=!0)}}if(d&&u===r){const t=b;if(t&&xe(t,e)&&"-"===t.value&&(!E||xe(E,m)||!$e(E))){const e=y.pop();f.value="-"+a,p&&(f.loc[0]=e.loc[0]),N=E,b=y[y.length-1]}}A(f)}w&&$&&function(t){let n,l=0,r=0;for(const s of t){if(s.type===e)if("("===s.value){if(r++,n.type===o){const e=n.value.toLowerCase();"lambda"!==e&&"let"!==e||(l=r)}}else")"===s.value&&(r--,r<l&&(l=0));else l&&s.type===x&&/^[rc]$/.test(s.value)&&(s.type=g);n=s}}(y);for(const t of R){const n=y[t-1],l=y[t-1];n&&n.type===f&&l&&l.type===f?y[t].type=e:y[t].type=x}return h?me(y):y}function Re(e){return we(e,fe,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}function Ne(e){return!!e&&(e.type===f||e.type===p||e.type===h)}function Ee(e){return!!e&&(e.type===f||e.type===p||e.type===h||e.type===d||e.type===g)}function be(e){return!!e&&(e.type===n||e.type===l||e.type===r||e.type===i)}function Ae(e){return!!e&&e.type===l}function Ce(e){return!!e&&(e.type===u||e.type===s)}function ke(e){return!!e&&e.type===o}function Te(e){return!!e&&e.type===m}function Le(t){return!!t&&t.type===e}const Ie="(END)",Oe="(FUNCTION)",Ue="(WHITESPACE)",Fe=["ANCHORARRAY","CHOOSE","DROP","IF","IFS","INDEX","INDIRECT","LAMBDA","LET","OFFSET","REDUCE","SINGLE","SWITCH","TAKE","TRIMRANGE","XLOOKUP"],_e=e=>Fe.includes(e.toUpperCase()),Se=e=>!!e&&(e.type===$||(e.type===R||e.type===l)&&"#REF!"===e.value||e.type===v&&(":"===e.operator||" "===e.operator||","===e.operator)||Ee(e)||e.type===N&&_e(e.callee.name)),Me={};let De,ze,je,Be=!1,Ze=!1;function Xe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=new Error(e);throw n.source=ze.map((e=>e.value)).join(""),n.sourceOffset=ze.slice(0,t??je).reduce(((e,t)=>e+t.value.length),0),n}function Pe(){let e,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=je;do{e=ze[++n]}while(e&&(Ce(e)||Le(e)&&"("===e.value));return function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(e&&e.value)+"";return!(!Ee(e)&&(!t||!Le(e)||":"!==n&&","!==n&&n.trim())&&(!ke(e)||!_e(n))&&(!Ae(e)||"#REF!"!==n))}(e,t)}function We(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e&&e!==De.id&&Xe(`Expected ${e} but got ${De.id}`),Ce(ze[je])){const e=Se(t),n=e&&Pe(!1),l=e&&ze[je+1]&&"("===ze[je+1].value;if(!n&&!l)for(;Ce(ze[je]);)je++}if(je>=ze.length)return void(De=Me[Ie]);const n=ze[je];let l;return je+=1,n.unterminated&&Xe("Encountered an unterminated token"),Le(n)?(l=Me[n.value],l||Xe(`Unknown operator ${n.value}`)):Ce(n)?l=Me[Ue]:be(n)?l=Me[w]:Ee(n)?l=Me[$]:ke(n)?l=Me[Oe]:Xe(`Unexpected ${n.type} token: ${n.value}`),De=Object.create(l),De.type=n.type,De.value=n.value,n.loc&&(De.loc=[...n.loc]),De}function Ge(e){let t=De;We(null,t);let n=t.nud();for(;e<De.lbp;)t=De,We(null,t),n=t.led(n);return n}const Ye={nud:()=>Xe("Invalid syntax"),led:()=>Xe("Missing operator")};function He(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=Me[e];return n?t>=n.lbp&&(n.lbp=t):(n={...Ye},n.id=e,n.value=e,n.lbp=t,Me[e]=n),n}function Ke(e,t,n){const l=He(e,t);return l.led=n||function(e){this.type=v,this.operator=this.value,delete this.value;const n=Ge(t);return this.arguments=[e,n],this.loc&&(this.loc=[e.loc[0],n.loc[1]]),this},l}function qe(e,t){const n=He(e,0);return n.lbp=70,n.led=t||function(e){return this.type=y,this.operator=this.value,delete this.value,this.arguments=[e],this.loc&&(this.loc[0]=e.loc[0]),this},n}function Ve(e,t){const n=He(e);return n.nud=t||function(){this.type=y,this.operator=this.value,delete this.value;const e=Ge(70);return this.arguments=[e],this.loc&&(this.loc[1]=e.loc[1]),this},n}function Qe(e,t){return Ke(e,t,(function(n){Se(n)||Xe(`Unexpected ${e} operator`);const l=Ge(t);return Se(l)||Xe(`Unexpected ${De.type} following ${this.id}`),this.type=v,this.operator=this.value.trim()?this.value:" ",delete this.value,this.arguments=[n,l],this.loc&&(this.loc=[n.loc[0],l.loc[1]]),this}))}He(Ie),Qe(":",80);const Je=Qe(",",80);Qe(Ue,80);const et=e=>{const t=Je.lbp>0;return null!=e&&(Je.lbp=e?80:0),t};function tt(e){const t=[],n={};let l,r=!1;const o=et(!1);if(")"!==De.id)for(;!r;){Ce(De)&&We();const e=je,o=Ge(0);if(","===De.id){if(o.type===$&&"name"===o.kind){const e=o.value.toLowerCase();e in n&&Xe("Duplicate name: "+o.value),n[e]=1;const l={type:C,name:o.value};o.loc&&(l.loc=o.loc),t.push(l)}else je=e,Xe("LAMBDA argument is not a name");We(",")}else l=o,r=!0}return et(o),delete this.value,this.type=E,this.params=t,this.body=l||null,e.loc&&(this.loc=[e.loc[0],De.loc[1]]),We(")",this),this}function nt(e){const t=[],n=[],l={};let r,o=0;const s=(e,s)=>{if(r&&Xe("Unexpected argument following calculation"),s&&o>=2)r=e;else{if(!(o%2))if(e&&e.type===$&&"name"===e.kind){const n=e.value.toLowerCase();n in l&&Xe("Duplicate name: "+e.value),l[n]=1,t.push({type:C,name:e.value,loc:e.loc})}else o>=2?r=e:Xe("Argument is not a name");else n.push(e)}o++},u=et(!1);let i=!1;if(")"!==De.id){for(;")"!==De.id;)if(Ce(De)&&We(),","===De.id)s(null),i=!0,We();else{s(Ge(0),","!==De.id),i=!1,","===De.id&&(We(","),i=!0)}et(u)}i&&s(null,!0),void 0===r&&Xe("Unexpected end of arguments"),et(u),delete this.value,this.type=b,this.declarations=[],t.length||Xe("Unexpected end of arguments");for(let e=0;e<t.length;e++){const l={type:"LetDeclarator",id:t[e],init:n[e],loc:t[e].loc&&[t[e].loc[0],n[e].loc[1]]};this.declarations.push(l)}return this.body=r,e.loc&&(this.loc=[e.loc[0],De.loc[1]]),We(")",this),this}function lt(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!1,l="";const r=[],o=()=>{l&&r.push(t?l:{value:l,braced:n}),l=""};for(let t=0;t<e.length;t++){const r=e[t];"["===r?(o(),n=!0):"]"===r?(o(),n=!1):l+=r}return o(),r}function rt(e){return{context:lt(e,!0)}}function ot(e){const t={},n=lt(e);if(n.length>1)t.workbookName=n[n.length-2].value,t.sheetName=n[n.length-1].value;else if(1===n.length){const e=n[0];e.braced?t.workbookName=e.value:t.sheetName=e.value}return t}qe("%"),qe("#",(function(e){return Se(e)||Xe("# expects a reference"),this.type=y,this.operator=this.value,delete this.value,this.arguments=[e],this})),Ve("+"),Ve("-"),Ve("@"),Ke("^",50),Ke("*",40),Ke("/",40),Ke("+",30),Ke("-",30),Ke("&",20),Ke("=",10),Ke("<",10),Ke(">",10),Ke("<=",10),Ke(">=",10),Ke("<>",10),He(w).nud=function(){const{type:e,value:t}=this;if(this.type=w,this.raw=t,e===r)this.value=+t;else if(e===n)this.value="TRUE"===t.toUpperCase();else if(e===l)this.type=R,this.value=t.toUpperCase();else{if(e!==i)throw new Error("Unsupported literal type: "+e);this.value=t.slice(1,-1).replace(/""/g,'"')}return this},He($).nud=function(){return this.type===g?this.kind="name":this.type===d?this.kind="table":this.type===p?this.kind="beam":this.kind="range",this.type=$,this},He(")"),Ve("(",(function(){const e=et(!0),t=Ge(0);return We(")",t),et(e),t})),He(Oe).nud=function(){return this},Ke("(",90,(function(e){let t={type:C,name:e.value};e.id!==Oe&&(e.type===E||e.type===N||e.type===b||e.type===$||e.type===y&&"#"===e.value||e.type===R&&"#REF!"===e.value?t=e:Xe("Unexpected call",je-1));const n=e.value.toLowerCase();if("lambda"===n)return tt.call(this,e);if("let"===n)return nt.call(this,e);const l=[];let r=!1;if(")"!==De.id){const e=et(!1);for(;")"!==De.id;)if(Ce(De)&&We(),","===De.id)l.push(null),r=!0,We();else{const e=Ge(0);l.push(e),r=!1,","===De.id&&(We(","),r=!0)}et(e)}r&&l.push(null);const o=De;return delete this.value,this.type=N,this.callee=t,e.loc&&(this.callee.loc=[...e.loc]),this.arguments=l,e.loc&&(this.loc=[e.loc[0],o.loc[1]]),We(")",this),this})),He("}"),He(";"),Ve("{",(function(){"}"===De.id&&Xe("Unexpected empty array");let e=[],t=!1;const n=[e],l=et(!1);for(;!t;){if(Ce(De)&&We(),be(De))e.push(Me[w].nud.call(De)),We();else if(Be&&Se(De))e.push(Me[$].nud.call(De)),We();else if(Ze&&ke(De)){const t=Ge(0);e.push(t)}else Xe(`Unexpected ${De.type} in array: ${De.value}`);","===De.id?We(","):";"===De.id?(We(";"),e=[],n.push(e)):t=!0}const r=De;return We("}"),et(l),this.type=A,this.elements=n,this.loc&&(this.loc[1]=r.loc[1]),delete this.value,this}));const st=e=>e&&(":"===e.value||".:"===e.value||":."===e.value||".:."===e.value)&&{operator:e.value},ut=e=>e&&e.type===f&&{r0:e.value},it=e=>e&&e.type===h&&{r0:e.value},at=e=>e&&e.type===f&&{r1:e.value},ct=t=>t&&t.type===e&&"!"===t.value&&{},ft=e=>e&&e.type===p&&{r0:e.value},pt=e=>e&&e.type===d&&{struct:e.value},ht=(e,t)=>{const n=t.xlsx?ot:rt;return e&&e.type===c?n(e.value):e&&e.type===a?n(e.value.slice(1,-1).replace(/''/g,"'")):void 0},gt=e=>e&&e.type===g&&{name:e.value},dt=[[it],[ut,st,at],[ut],[ft],[ht,ct,it],[ht,ct,ut,st,at],[ht,ct,ut],[ht,ct,ft]],mt=dt.concat([[gt],[ht,ct,gt],[pt],[gt,pt],[ht,ct,gt,pt]]);function xt(e,t){const n={withLocation:!1,mergeRefs:!1,allowTernary:!1,allowNamed:!0,r1c1:!1,xlsx:!1,...t},l=we(e,pe,n),r=n.xlsx?{workbookName:"",sheetName:"",r0:"",r1:"",name:"",operator:""}:{context:[],r0:"",r1:"",name:"",operator:""};l.length&&l[0].type===m&&l.shift();const o=n.allowNamed?mt:dt;for(let e=0;e<o.length;e++){const t={...r};if(o[e].length===l.length){const r=o[e].every(((e,r)=>{const o=e(l[r],n);return Object.assign(t,o),o}));if(r)return t}}return null}const yt=String.fromCharCode;function vt(e){return(e>=702?yt(((e-702)/676-0)%26+65):"")+(e>=26?yt((e/26-1)%26+65):"")+yt(e%26+65)}const $t=/[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;function wt(e){let t="",n=0,l=0;const r=e.context||[];for(let e=r.length;e>-1;e--){const o=r[e];if(o){t=(l%2?"["+o+"]":o)+t,n+=+$t.test(o),l++}}return n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}function Rt(e){let t="",n=0;const{workbookName:l,sheetName:r}=e;return l&&(t+="["+l+"]",n+=+$t.test(l)),r&&(t+=r,n+=+$t.test(r)),n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}const Nt=(e,t,n)=>Math.min(Math.max(t,e),n),Et=(e,t)=>(t?"$":"")+vt(e),bt=(e,t)=>(t?"$":"")+String(e+1);function At(e){return"both"===e?".:.":"head"===e?".:":"tail"===e?":.":":"}function Ct(e,t){return e&&t?"both":e?"head":t?"tail":void 0}function kt(e){const t=/^(?=.)(\$(?=\D))?([A-Za-z]{0,3})?(\$)?([1-9][0-9]{0,6})?$/.exec(e);return t&&(t[2]||t[4])?[t[4]?(n=t[4],+n-1):null,t[2]?L(t[2]):null,!!t[3],!!t[1]]:null;var n}function Tt(e){let t=null,n=null,l=null,r=null,o=!1,s=!1,u=!1,i=!1;const[a,c,f,p,h]=e.split(/(\.?:\.?)/);if(p||h)return null;const g=Ct(!!c&&"."===c[0],!!c&&"."===c[c.length-1]),d=kt(a),m=f?kt(f):null;if(!d||f&&!m)return null;if(null!=d[0]&&null!=d[1]?[t,n,o,s]=d:null==d[0]&&null!=d[1]?[,n,,s]=d:null!=d[0]&&null==d[1]&&([t,,o]=d),f)null!=m[0]&&null!=m[1]?[l,r,u,i]=m:null==m[0]&&null!=m[1]?[,r,,i]=m:null!=m[0]&&null==m[1]&&([l,,u]=m);else{if(null==t||null==n)return null;l=t,r=n,u=o,i=s}null!=r&&(null==n||null!=n&&r<n)&&([n,r,s,i]=[r,n,i,s]),null!=l&&(null==t||null!=t&&l<t)&&([t,l,o,u]=[l,t,u,o]);const x={top:t,left:n,bottom:l,right:r,$top:o,$left:s,$bottom:u,$right:i};return g&&(x.trim=g),x}function Lt(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=xt(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!1});if(r&&(r.r0||r.name)){let e=null;return r.r0&&(e=Tt(r.r1?r.r0+r.operator+r.r1:r.r0)),e?l?{workbookName:r.workbookName,sheetName:r.sheetName,range:e}:{context:r.context,range:e}:r.name?l?{workbookName:r.workbookName,sheetName:r.sheetName,name:r.name}:{context:r.context,name:r.name}:null}return null}function It(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(t?Rt(e):wt(e))+(e.name?e.name:function(e){let{top:t,left:n,bottom:l,right:r,trim:o}=e;const{$left:s,$right:u,$top:i,$bottom:a}=e,c=null==n,f=null==r,p=null==t,h=null==l;t=Nt(0,0|t,T),n=Nt(0,0|n,k),!c&&!p&&f&&h?(l=t,r=n):(l=Nt(0,0|l,T),r=Nt(0,0|r,k));const g=At(o);return 0===t&&l>=T&&!c&&!f&&(!(s&&!c||u&&!f)||n===r)||p&&h?Et(n,s)+g+Et(r,u):0===n&&r>=k&&!p&&!h&&(!(i&&!p||a&&!h)||t===l)||c&&f?bt(t,i)+g+bt(l,a):c||p||f||!h?c||!p||f||h?c||p||!f||h?!c||p||f||h?r!==n||l!==t||u!==s||a!==i?Et(n,s)+bt(t,i)+g+Et(r,u)+bt(l,a):Et(n,s)+bt(t,i):Et(r,u)+bt(t,i)+g+bt(l,a):Et(n,s)+bt(t,i)+g+bt(l,a):Et(n,s)+bt(l,a)+g+Et(r,u):Et(n,s)+bt(t,i)+g+Et(r,u)}(e.range))}function Ot(e){return null==e.top&&(e.top=0,e.$top=!1),null==e.bottom&&(e.bottom=T,e.$bottom=!1),null==e.left&&(e.left=0,e.$left=!1),null==e.right&&(e.right=k,e.$right=!1),e}function Ut(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{xlsx:!1};const n=xt(e,t);if(n&&n.struct){const e=M(n.struct);if(e&&e.length===n.struct.length)return t.xlsx?{workbookName:n.workbookName,sheetName:n.sheetName,table:n.name,columns:e.columns,sections:e.sections}:{context:n.context,table:n.name,columns:e.columns,sections:e.sections}}return null}function Ft(e,t){return null==e&&null==t||e===t}function _t(e,t){if(Array.isArray(e)!==Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Ft(e[n],t[n]))return!1;return!0}function St(e,t){return!e&&!t||String(e).toLowerCase()===String(t).toLowerCase()}const Mt=(e,t,n)=>Math.min(Math.max(t,e),n);function Dt(e,t){return t?String(e+1):e?"["+e+"]":""}function zt(e){let t=null,n=null,l=null,r=null;const o=/^R(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);o&&(o[1]?(t=parseInt(o[1],10),l=!1):o[2]?(t=parseInt(o[2],10)-1,l=!0):(t=0,l=!1),e=e.slice(o[0].length));const s=/^C(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);return s&&(s[1]?(n=parseInt(s[1],10),r=!1):s[2]?(n=parseInt(s[2],10)-1,r=!0):(n=0,r=!1),e=e.slice(s[0].length)),!o&&!s||e.length?null:[t,n,l,r]}function jt(e){let t=null;const[n,l,r,o]=e.split(/(\.?:\.?)/);if(o)return null;const s=zt(n),u=Ct(!!l&&"."===l[0],!!l&&"."===l[l.length-1]);if(s){const[e,n,l,o]=s;if(r){const s=zt(r);if(!s)return null;{t={};const[r,u,i,a]=s;null!=e&&null!=r?(t.r0=l===i?Math.min(e,r):e,t.$r0=l,t.r1=l===i?Math.max(e,r):r,t.$r1=i):null!=e&&null==r?(t.r0=e,t.$r0=l,t.r1=null,t.$r1=l):null==e&&null!=r?(t.r0=r,t.$r0=i,t.r1=null,t.$r1=i):null==e&&null==r&&(t.r0=null,t.$r0=!1,t.r1=null,t.$r1=!1),null!=n&&null!=u?(t.c0=o===a?Math.min(n,u):n,t.$c0=o,t.c1=o===a?Math.max(n,u):u,t.$c1=a):null!=n&&null==u?(t.c0=n,t.$c0=o,t.c1=null,t.$c1=o):null==n&&null!=u?(t.c0=u,t.$c0=a,t.c1=null,t.$c1=a):null==n&&null==u&&(t.c0=null,t.$c0=!1,t.c1=null,t.$c1=!1)}}else t=null!=e&&null==n?{r0:e,c0:null,r1:e,c1:null,$r0:l,$c0:!1,$r1:l,$c1:!1}:null==e&&null!=n?{r0:null,c0:n,r1:null,c1:n,$r0:!1,$c0:o,$r1:!1,$c1:o}:{r0:e||0,c0:n||0,r1:e||0,c1:n||0,$r0:l||!1,$c0:o||!1,$r1:l||!1,$c1:o||!1}}return t&&u&&(t.trim=u),t}function Bt(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=xt(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!0});if(r&&(r.r0||r.name)){const e=r.r1?jt(r.r0+r.operator+r.r1):jt(r.r0);return e?l?{workbookName:r.workbookName,sheetName:r.sheetName,range:e}:{context:r.context,range:e}:r.name?l?{workbookName:r.workbookName,sheetName:r.sheetName,name:r.name}:{context:r.context,name:r.name}:null}return null}function Zt(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(t?Rt(e):wt(e))+(e.name?e.name:function(e){let{r0:t,c0:n,r1:l,c1:r}=e;const{$c0:o,$c1:s,$r0:u,$r1:i}=e,a=null==t,c=null==n;let f=null==l,p=null==r;const h=At(e.trim),g=!!e.trim;if(t=Mt(u?0:-1048575,0|t,T),n=Mt(o?0:-16383,0|n,k),!a&&f&&!c&&p?(l=t,f=!1,r=n,p=!1):(l=Mt(i?0:-1048575,0|l,T),r=Mt(s?0:-16383,0|r,k)),0===t&&l>=T&&!c&&!p||a&&f){const e=Dt(n,o),t=Dt(r,s);return"C"+(e!==t||g?e+h+"C"+t:e)}if(0===n&&r>=k&&!a&&!f||c&&p){const e=Dt(t,u),n=Dt(l,i);return"R"+(e!==n||g?e+h+"R"+n:e)}const d=Dt(t,u),m=Dt(l,i),x=Dt(n,o),y=Dt(r,s);return a||f||c||p?(a?"":"R"+d)+(c?"":"C"+x)+h+(f?"":"R"+m)+(p?"":"C"+y):d!==m||x!==y?"R"+d+"C"+x+h+"R"+m+"C"+y:"R"+d+"C"+x}(e.range))}const Xt=(e,t,n)=>null==t?null:e?t:t-n,Pt={withLocation:!1,mergeRefs:!1,allowTernary:!0,r1c1:!1};function Wt(e,t,n,l){let r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=e;if(null!=o&&!t){if(o=n+e,o<0){if(!r)return NaN;o=l+o+1}if(o>l){if(!r)return NaN;o-=l+1}}return o}const Gt={wrapEdges:!0,mergeRefs:!0,allowTernary:!0,xlsx:!1};function Yt(e){return e.replace(/([[\]#'@])/g,"'$1")}function Ht(e){return e[0].toUpperCase()+e.slice(1).toLowerCase()}function Kt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xlsx:n,thisRow:l}=t;let r=n?Rt(e):wt(e);e.table&&(r+=e.table);const o=e.columns?.length??0,s=e.sections?.length??0;if(1!==s||o)if(s||1!==o){r+="[";const t=!l&&1===s&&"this row"===e.sections[0].toLowerCase();t?r+="@":s&&(r+=e.sections.map((e=>`[#${Ht(e)}]`)).join(","),o&&(r+=",")),t&&1===e.columns.length&&(u=e.columns[0],/^[a-zA-Z0-9\u00a1-\uffff]+$/.test(u))?r+=Yt(e.columns[0]):o&&(r+=e.columns.slice(0,2).map((e=>`[${Yt(e)}]`)).join(":")),r+="]"}else r+=`[${Yt(e.columns[0])}]`;else r+=`[#${Ht(e.sections[0])}]`;var u;return r}const qt=Object.freeze({OPERATOR:e,BOOLEAN:n,ERROR:l,NUMBER:r,FUNCTION:o,NEWLINE:s,WHITESPACE:u,STRING:i,CONTEXT:c,CONTEXT_QUOTE:a,REF_RANGE:f,REF_BEAM:p,REF_TERNARY:h,REF_NAMED:g,REF_STRUCT:d,FX_PREFIX:m,UNKNOWN:x}),Vt=Object.freeze({UNARY:y,BINARY:v,REFERENCE:$,LITERAL:w,ERROR:R,CALL:N,ARRAY:A,IDENTIFIER:C});exports.MAX_COLS=k,exports.MAX_ROWS=T,exports.addA1RangeBounds=Ot,exports.addTokenMeta=function(e){let{sheetName:t="",workbookName:n=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const l=[];let r=null;const o=function(){let e=1;return()=>"fxg"+e++}(),s=[],u=()=>l.length+(r?1:0);return e.forEach(((e,i)=>{if(e.index=i,e.depth=u(),"("===e.value)l.push(e),e.depth=u();else if(")"===e.value){const t=l.pop();if(t){const n=o();e.groupId=n,e.depth=t.depth,t.groupId=n}else e.error=!0}else if("{"===e.value)r?e.error=!0:(r=e,e.depth=u());else if("}"===e.value){if(r){const t=o();e.groupId=t,e.depth=r.depth,r.groupId=t}else e.error=!0;r=null}else if(e.type===f||e.type===p||e.type===h||e.type===d){const l=e.type===d?Ut(e.value,{xlsx:!0}):Lt(e.value,{allowTernary:!0,xlsx:!0});if(l&&(l.range||l.columns)){l.source=e.value,function(e,t,n){e.sheetName||(e.sheetName=t),e.workbookName||(e.workbookName=n)}(l,t,n);const r=s.find((e=>function(e,t){if((e.name||t.name)&&e.name!==t.name)return!1;if(e.columns||t.columns){if(e.table!==t.table)return!1;if(!_t(e.columns,t.columns))return!1;if(!_t(e.sections,t.sections))return!1}return!!(!e.range&&!t.range||Ft(e.range.top,t.range.top)&&Ft(e.range.bottom,t.range.bottom)&&Ft(e.range.left,t.range.left)&&Ft(e.range.right,t.range.right))&&!(!St(e.workbookName,t.workbookName)||!St(e.sheetName,t.sheetName))}(e,l)));r?e.groupId=r.groupId:(l.groupId=o(),e.groupId=l.groupId,s.push(l))}}else e.type===x&&(e.error=!0)})),e},exports.fixRanges=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{addBounds:!1};if("string"==typeof t)return e(Re(t,n),n).map((e=>e.value)).join("");if(!Array.isArray(t))throw new Error("fixRanges expects an array of tokens");const{addBounds:l,r1c1:r,xlsx:o,thisRow:s}=n;if(r)throw new Error("fixRanges does not have an R1C1 mode");let u=0;return t.map((e=>{const t={...e};e.loc&&(t.loc=[...e.loc]);let n=0;if(t.type===d){const e=Kt(Ut(t.value,{xlsx:o}),{xlsx:o,thisRow:s});n=e.length-t.value.length,t.value=e}else if(Ne(t)){const e=Lt(t.value,{xlsx:o,allowTernary:!0}),r=e.range;l&&Ot(r);const s=It(e,{xlsx:o});n=s.length-t.value.length,t.value=s}return u||n?(t.loc&&(t.loc[0]+=u),u+=n,t.loc&&(t.loc[1]+=u)):u+=n,t}))},exports.fromCol=L,exports.isError=Ae,exports.isFunction=ke,exports.isFxPrefix=Te,exports.isLiteral=be,exports.isOperator=Le,exports.isRange=Ne,exports.isReference=Ee,exports.isWhitespace=Ce,exports.mergeRefTokens=me,exports.nodeTypes=Vt,exports.parse=function(e,t){if("string"==typeof e)ze=Re(e,{withLocation:!1,...t,mergeRefs:!0});else{if(!Array.isArray(e))throw new Error("Parse requires a string or array of tokens.");ze=e}for(Be=t?.permitArrayRanges,Ze=t?.permitArrayCalls,je=0;Ce(ze[je])||Te(ze[je]);)je++;We(),et(!0);const n=Ge(0);return We(Ie),n},exports.parseA1Ref=Lt,exports.parseR1C1Ref=Bt,exports.parseStructRef=Ut,exports.stringifyA1Ref=It,exports.stringifyR1C1Ref=Zt,exports.stringifyStructRef=Kt,exports.toCol=vt,exports.tokenTypes=qt,exports.tokenize=Re,exports.translateToA1=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Gt;const r=Tt(t),o="string"==typeof e,s={...Gt,...n},u=o?Re(e,{withLocation:!1,mergeRefs:s.mergeRefs,xlsx:s.xlsx,allowTernary:s.allowTernary,r1c1:!0}):e;let i=0;const a={xlsx:s.xlsx,allowTernary:s.allowTernary};return u.forEach((e=>{if(Ne(e)){const t=e.value,n=Bt(t,a),o=n.range,u={},c=Wt(o.r0,o.$r0,r.top,T,s.wrapEdges),f=Wt(o.r1,o.$r1,r.top,T,s.wrapEdges);c>f?(u.top=f,u.$top=o.$r1,u.bottom=c,u.$bottom=o.$r0):(u.top=c,u.$top=o.$r0,u.bottom=f,u.$bottom=o.$r1);const p=Wt(o.c0,o.$c0,r.left,k,s.wrapEdges),h=Wt(o.c1,o.$c1,r.left,k,s.wrapEdges);p>h?(u.left=h,u.$left=o.$c1,u.right=p,u.$right=o.$c0):(u.left=p,u.$left=o.$c0,u.right=h,u.$right=o.$c1),o.trim&&(u.trim=o.trim),isNaN(c)||isNaN(f)||isNaN(p)||isNaN(h)?(e.type=l,e.value="#REF!",delete e.groupId):(n.range=u,e.value=It(n,a)),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),o?u.map((e=>e.value)).join(""):u},exports.translateToR1C1=function(e,t){let{xlsx:n=!1,allowTernary:l=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{top:r,left:o}=Tt(t),s="string"==typeof e,u=s?Re(e,{...Pt,xlsx:n,allowTernary:l}):e;let i=0;const a={xlsx:n,allowTernary:l};return u.forEach((e=>{if(Ne(e)){const t=e.value,n=Lt(t,a),l=n.range,s={};s.r0=Xt(l.$top,l.top,r),s.r1=Xt(l.$bottom,l.bottom,r),s.c0=Xt(l.$left,l.left,o),s.c1=Xt(l.$right,l.right,o),s.$r0=l.$top,s.$r1=l.$bottom,s.$c0=l.$left,s.$c1=l.$right,l.trim&&(s.trim=l.trim),n.range=s,e.value=Zt(n,a),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),s?u.map((e=>e.value)).join(""):u};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnguanMiLCJzb3VyY2VzIjpbIi4uL2xpYi9jb25zdGFudHMuanMiLCIuLi9saWIvZnJvbUNvbC5qcyIsIi4uL2xpYi9wYXJzZVNSYW5nZS5qcyIsIi4uL2xpYi9sZXhlclBhcnRzLmpzIiwiLi4vbGliL21lcmdlUmVmVG9rZW5zLmpzIiwiLi4vbGliL2xleGVyLmpzIiwiLi4vbGliL2lzVHlwZS5qcyIsIi4uL2xpYi9wYXJzZXIuanMiLCIuLi9saWIvcGFyc2VSZWYuanMiLCIuLi9saWIvdG9Db2wuanMiLCIuLi9saWIvc3RyaW5naWZ5UHJlZml4LmpzIiwiLi4vbGliL2ExLmpzIiwiLi4vbGliL3BhcnNlU3RydWN0UmVmLmpzIiwiLi4vbGliL2FkZFRva2VuTWV0YS5qcyIsIi4uL2xpYi9yYy5qcyIsIi4uL2xpYi90cmFuc2xhdGUuanMiLCIuLi9saWIvc3RyaW5naWZ5U3RydWN0UmVmLmpzIiwiLi4vbGliL2luZGV4LmpzIiwiLi4vbGliL2ZpeFJhbmdlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1BFUkFUT1IgPSAnb3BlcmF0b3InO1xuZXhwb3J0IGNvbnN0IE9QRVJBVE9SX1RSSU0gPSAnb3BlcmF0b3ItdHJpbSc7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9ICdib29sJztcbmV4cG9ydCBjb25zdCBFUlJPUiA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gJ251bWJlcic7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSAnZnVuYyc7XG5leHBvcnQgY29uc3QgTkVXTElORSA9ICduZXdsaW5lJztcbmV4cG9ydCBjb25zdCBXSElURVNQQUNFID0gJ3doaXRlc3BhY2UnO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9ICdzdHJpbmcnO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRfUVVPVEUgPSAnY29udGV4dF9xdW90ZSc7XG5leHBvcnQgY29uc3QgQ09OVEVYVCA9ICdjb250ZXh0JztcbmV4cG9ydCBjb25zdCBSRUZfUkFOR0UgPSAncmFuZ2UnO1xuZXhwb3J0IGNvbnN0IFJFRl9CRUFNID0gJ3JhbmdlX2JlYW0nO1xuZXhwb3J0IGNvbnN0IFJFRl9URVJOQVJZID0gJ3JhbmdlX3Rlcm5hcnknO1xuZXhwb3J0IGNvbnN0IFJFRl9OQU1FRCA9ICdyYW5nZV9uYW1lZCc7XG5leHBvcnQgY29uc3QgUkVGX1NUUlVDVCA9ICdzdHJ1Y3R1cmVkJztcbmV4cG9ydCBjb25zdCBGWF9QUkVGSVggPSAnZnhfcHJlZml4JztcbmV4cG9ydCBjb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG5leHBvcnQgY29uc3QgVU5BUlkgPSAnVW5hcnlFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBCSU5BUlkgPSAnQmluYXJ5RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgUkVGRVJFTkNFID0gJ1JlZmVyZW5jZUlkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IExJVEVSQUwgPSAnTGl0ZXJhbCc7XG5leHBvcnQgY29uc3QgRVJST1JfTElURVJBTCA9ICdFcnJvckxpdGVyYWwnO1xuZXhwb3J0IGNvbnN0IENBTEwgPSAnQ2FsbEV4cHJlc3Npb24nO1xuZXhwb3J0IGNvbnN0IExBTUJEQSA9ICdMYW1iZGFFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBMRVQgPSAnTGV0RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgQVJSQVkgPSAnQXJyYXlFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBJREVOVElGSUVSID0gJ0lkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IExFVF9ERUNMID0gJ0xldERlY2xhcmF0b3InO1xuXG5leHBvcnQgY29uc3QgTUFYX0NPTFMgPSAoMiAqKiAxNCkgLSAxOyAvLyAxNjM4M1xuZXhwb3J0IGNvbnN0IE1BWF9ST1dTID0gKDIgKiogMjApIC0gMTsgLy8gMTA0ODU3NVxuIiwiLyoqXG4gKiBDb252ZXJ0IGEgY29sdW1uIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBhIDAgYmFzZWRcbiAqIG9mZnNldCBudW1iZXIgKGBcIkNcImAgPSBgMmApLlxuICpcbiAqIFRoZSBtZXRob2QgZXhwZWN0cyBhIHZhbGlkIGNvbHVtbiBpZGVudGlmaWVyIG1hZGUgdXAgb2YgX29ubHlfXG4gKiBBLVogbGV0dGVycywgd2hpY2ggbWF5IGJlIGVpdGhlciB1cHBlciBvciBsb3dlciBjYXNlLiBPdGhlciBpbnB1dCB3aWxsXG4gKiByZXR1cm4gZ2FyYmFnZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uU3RyaW5nICBUaGUgY29sdW1uIHN0cmluZyBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAgWmVybyBiYXNlZCBjb2x1bW4gaW5kZXggbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ29sIChjb2x1bW5TdHJpbmcpIHtcbiAgY29uc3QgeCA9IChjb2x1bW5TdHJpbmcgfHwgJycpO1xuICBjb25zdCBsID0geC5sZW5ndGg7XG4gIGxldCBuID0gMDtcbiAgaWYgKGwgPiAyKSB7XG4gICAgY29uc3QgYyA9IHguY2hhckNvZGVBdChsIC0gMyk7XG4gICAgY29uc3QgYSA9IGMgPiA5NSA/IDMyIDogMDtcbiAgICBuICs9ICgxICsgYyAtIGEgLSA2NSkgKiA2NzY7XG4gIH1cbiAgaWYgKGwgPiAxKSB7XG4gICAgY29uc3QgYyA9IHguY2hhckNvZGVBdChsIC0gMik7XG4gICAgY29uc3QgYSA9IGMgPiA5NSA/IDMyIDogMDtcbiAgICBuICs9ICgxICsgYyAtIGEgLSA2NSkgKiAyNjtcbiAgfVxuICBpZiAobCkge1xuICAgIGNvbnN0IGMgPSB4LmNoYXJDb2RlQXQobCAtIDEpO1xuICAgIGNvbnN0IGEgPSBjID4gOTUgPyAzMiA6IDA7XG4gICAgbiArPSAoYyAtIGEpIC0gNjU7XG4gIH1cbiAgcmV0dXJuIG47XG59XG4iLCJjb25zdCByZV9TUmNvbHVtbkIgPSAvXlxcWygnWycjQFtcXF1dfFteJyNAW1xcXV0pK1xcXS9pO1xuY29uc3QgcmVfU1Jjb2x1bW5OID0gL14oW14jQFtcXF06XSspL2k7XG5cbmNvbnN0IGtleVRlcm1zID0ge1xuICAnaGVhZGVycyc6IDEsXG4gICdkYXRhJzogMixcbiAgJ3RvdGFscyc6IDQsXG4gICdhbGwnOiA4LFxuICAndGhpcyByb3cnOiAxNixcbiAgJ0AnOiAxNlxufTtcblxuY29uc3QgZnogPSAoLi4uYSkgPT4gT2JqZWN0LmZyZWV6ZShhKTtcblxuLy8gb25seSBjb21iaW5hdGlvbnMgYWxsb3dlZCBhcmU6ICNkYXRhICsgKCNoZWFkZXJzIHwgI3RvdGFscyB8ICNkYXRhKVxuY29uc3Qgc2VjdGlvbk1hcCA9IHtcbiAgLy8gbm8gdGVybXNcbiAgMDogZnooKSxcbiAgLy8gc2luZ2xlIHRlcm1cbiAgMTogZnooJ2hlYWRlcnMnKSxcbiAgMjogZnooJ2RhdGEnKSxcbiAgNDogZnooJ3RvdGFscycpLFxuICA4OiBmeignYWxsJyksXG4gIDE2OiBmeigndGhpcyByb3cnKSxcbiAgLy8gaGVhZGVycytkYXRhXG4gIDM6IGZ6KCdoZWFkZXJzJywgJ2RhdGEnKSxcbiAgLy8gdG90YWxzK2RhdGFcbiAgNjogZnooJ2RhdGEnLCAndG90YWxzJylcbn07XG5cbmNvbnN0IG1hdGNoQ29sdW1uID0gKHMsIGFsbG93VW5icmFjZWQgPSB0cnVlKSA9PiB7XG4gIGxldCBtID0gcmVfU1Jjb2x1bW5CLmV4ZWMocyk7XG4gIGlmIChtKSB7XG4gICAgY29uc3QgdmFsdWUgPSBtWzBdLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nKFsnI0BbXFxdXSkvZywgJyQxJyk7XG4gICAgcmV0dXJuIFsgbVswXSwgdmFsdWUgXTtcbiAgfVxuICBpZiAoYWxsb3dVbmJyYWNlZCkge1xuICAgIG0gPSByZV9TUmNvbHVtbk4uZXhlYyhzKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIFsgbVswXSwgbVswXSBdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNSYW5nZSAocmF3KSB7XG4gIGNvbnN0IGNvbHVtbnMgPSBbXTtcbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBzID0gcmF3O1xuICBsZXQgbTtcbiAgbGV0IG0xO1xuICBsZXQgdGVybXMgPSAwO1xuXG4gIC8vIHN0YXJ0IG9mIHN0cnVjdHVyZWQgcmVmP1xuICBpZiAoKG0gPSAvXihcXFtcXHMqKS8uZXhlYyhzKSkpIHtcbiAgICAvLyBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIGEgc2ltcGxlIGtleXdvcmQgb3IgY29sdW1uXG4gICAgLy8gWyNrZXl3b3JkXVxuICAgIGlmICgobTEgPSAvXlxcWyMoW2EteiBdKylcXF0vaS5leGVjKHMpKSkge1xuICAgICAgY29uc3QgayA9IG0xWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBwb3MgKz0gbTFbMF0ubGVuZ3RoO1xuICAgICAgaWYgKGtleVRlcm1zW2tdKSB7XG4gICAgICAgIHRlcm1zIHw9IGtleVRlcm1zW2tdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBbY29sdW1uXVxuICAgIGVsc2UgaWYgKChtMSA9IG1hdGNoQ29sdW1uKHMsIGZhbHNlKSkpIHtcbiAgICAgIHBvcyArPSBtMVswXS5sZW5ndGg7XG4gICAgICBjb2x1bW5zLnB1c2gobTFbMV0pO1xuICAgIH1cbiAgICAvLyB1c2UgdGhlIFwibm9ybWFsXCIgbWV0aG9kXG4gICAgLy8gW1sja2V5d29yZF1dXG4gICAgLy8gW1tjb2x1bW5dXVxuICAgIC8vIFtAXVxuICAgIC8vIFtAY29sdW1uXVxuICAgIC8vIFtAW2NvbHVtbl1dXG4gICAgLy8gW0Bjb2x1bW46Y29sdW1uXVxuICAgIC8vIFtAY29sdW1uOltjb2x1bW5dXVxuICAgIC8vIFtAW2NvbHVtbl06Y29sdW1uXVxuICAgIC8vIFtAW2NvbHVtbl06W2NvbHVtbl1dXG4gICAgLy8gW2NvbHVtbjpjb2x1bW5dXG4gICAgLy8gW2NvbHVtbjpbY29sdW1uXV1cbiAgICAvLyBbW2NvbHVtbl06Y29sdW1uXVxuICAgIC8vIFtbY29sdW1uXTpbY29sdW1uXV1cbiAgICAvLyBbWyNrZXl3b3JkXSxjb2x1bW5dXG4gICAgLy8gW1sja2V5d29yZF0sY29sdW1uOmNvbHVtbl1cbiAgICAvLyBbWyNrZXl3b3JkXSxbI2tleXdvcmRdLGNvbHVtbjpjb2x1bW5dXG4gICAgLy8gLi4uXG4gICAgZWxzZSB7XG4gICAgICBsZXQgZXhwZWN0X21vcmUgPSB0cnVlO1xuICAgICAgcyA9IHMuc2xpY2UobVsxXS5sZW5ndGgpO1xuICAgICAgcG9zICs9IG1bMV0ubGVuZ3RoO1xuICAgICAgLy8gbWF0Y2gga2V5d29yZHMgYXMgd2UgZmluZCB0aGVtXG4gICAgICB3aGlsZSAoXG4gICAgICAgIGV4cGVjdF9tb3JlICYmXG4gICAgICAgIChtID0gL15cXFsjKFthLXogXSspXFxdKFxccyosXFxzKik/L2kuZXhlYyhzKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBrID0gbVsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoa2V5VGVybXNba10pIHtcbiAgICAgICAgICB0ZXJtcyB8PSBrZXlUZXJtc1trXTtcbiAgICAgICAgICBzID0gcy5zbGljZShtWzBdLmxlbmd0aCk7XG4gICAgICAgICAgcG9zICs9IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgIGV4cGVjdF9tb3JlID0gISFtWzJdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpcyB0aGVyZSBhbiBAIHNwZWNpZmllcj9cbiAgICAgIGlmIChleHBlY3RfbW9yZSAmJiAobSA9IC9eQC8uZXhlYyhzKSkpIHtcbiAgICAgICAgdGVybXMgfD0ga2V5VGVybXNbJ0AnXTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMSk7XG4gICAgICAgIHBvcyArPSAxO1xuICAgICAgICBleHBlY3RfbW9yZSA9IHNbMF0gIT09ICddJztcbiAgICAgIH1cbiAgICAgIC8vIG5vdCBhbGwga2V5d29yZCB0ZXJtcyBtYXkgYmUgY29tYmluZWRcbiAgICAgIGlmICghKHRlcm1zIGluIHNlY3Rpb25NYXApKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gY29sdW1uIGRlZmluaXRpb25zXG4gICAgICBjb25zdCBsZWZ0Q29sID0gZXhwZWN0X21vcmUgPyBtYXRjaENvbHVtbihyYXcuc2xpY2UocG9zKSkgOiBudWxsO1xuICAgICAgaWYgKGxlZnRDb2wpIHtcbiAgICAgICAgcG9zICs9IGxlZnRDb2xbMF0ubGVuZ3RoO1xuICAgICAgICBjb2x1bW5zLnB1c2gobGVmdENvbFsxXSk7XG4gICAgICAgIHMgPSByYXcuc2xpY2UocG9zKTtcbiAgICAgICAgaWYgKHNbMF0gPT09ICc6Jykge1xuICAgICAgICAgIHMgPSBzLnNsaWNlKDEpO1xuICAgICAgICAgIHBvcysrO1xuICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sID0gbWF0Y2hDb2x1bW4ocyk7XG4gICAgICAgICAgaWYgKHJpZ2h0Q29sKSB7XG4gICAgICAgICAgICBwb3MgKz0gcmlnaHRDb2xbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHJpZ2h0Q29sWzFdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0X21vcmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIGFkdmFuY2Ugd3NcbiAgICAgIHdoaWxlIChyYXdbcG9zXSA9PT0gJyAnKSB7XG4gICAgICAgIHBvcysrO1xuICAgICAgfVxuICAgICAgLy8gY2xvc2UgdGhlIHJlZlxuICAgICAgaWYgKGV4cGVjdF9tb3JlIHx8IHJhd1twb3NdICE9PSAnXScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBzdGVwIG92ZXIgdGhlIGNsb3NpbmcgXVxuICAgICAgcG9zKys7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VjdGlvbnMgPSBzZWN0aW9uTWFwW3Rlcm1zXTtcbiAgcmV0dXJuIHtcbiAgICBjb2x1bW5zLFxuICAgIHNlY3Rpb25zOiBzZWN0aW9ucyA/IHNlY3Rpb25zLmNvbmNhdCgpIDogc2VjdGlvbnMsXG4gICAgbGVuZ3RoOiBwb3MsXG4gICAgdG9rZW46IHJhdy5zbGljZSgwLCBwb3MpXG4gIH07XG59XG4iLCJpbXBvcnQge1xuICBPUEVSQVRPUixcbiAgQk9PTEVBTixcbiAgRVJST1IsXG4gIE5VTUJFUixcbiAgRlVOQ1RJT04sXG4gIE5FV0xJTkUsXG4gIFdISVRFU1BBQ0UsXG4gIFNUUklORyxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfQkVBTSxcbiAgUkVGX05BTUVELFxuICBSRUZfVEVSTkFSWSxcbiAgUkVGX1NUUlVDVCxcbiAgTUFYX0NPTFMsXG4gIE1BWF9ST1dTLFxuICBPUEVSQVRPUl9UUklNXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGZyb21Db2wgfSBmcm9tICcuL2Zyb21Db2wuanMnO1xuaW1wb3J0IHsgcGFyc2VTUmFuZ2UgfSBmcm9tICcuL3BhcnNlU1JhbmdlLmpzJztcblxuY29uc3QgcmVfRVJST1IgPSAvXiMoTkFNRVxcP3xGSUVMRCF8Q0FMQyF8VkFMVUUhfFJFRiF8RElWXFwvMCF8TlVMTCF8TlVNIXxOXFwvQXxHRVRUSU5HX0RBVEFcXGJ8U1BJTEwhfFVOS05PV04hfEZJRUxEXFxifENBTENcXGJ8U1lOVEFYXFw/fEVSUk9SIXxDT05ORUNUIXxCTE9DS0VEIXxFWFRFUk5BTCEpL2k7XG5jb25zdCByZV9PUEVSQVRPUiA9IC9eKDw9fD49fDw+fFstKy8qXiUmPD49XXxbe30sO118WygpXXxAfDp8IXwjKS87XG5jb25zdCByZV9CT09MRUFOID0gL14oVFJVRXxGQUxTRSlcXGIvaTtcbmNvbnN0IHJlX0ZVTkNUSU9OID0gL15bQS1aX10rW0EtWlxcZF8uXSooPz1cXCgpL2k7XG5jb25zdCByZV9ORVdMSU5FID0gL15cXG4rLztcbmNvbnN0IHJlX1dISVRFU1BBQ0UgPSAvXlsgXFxmXFxyXFx0XFx2XFx1MDBhMFxcdTE2ODBcXHUyMDAwLVxcdTIwMGFcXHUyMDI4XFx1MjAyOVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdKy87XG5jb25zdCByZV9TVFJJTkcgPSAvXlwiKD86XCJcInxbXlwiXSkqKFwifCQpLztcbmNvbnN0IHJlX05VTUJFUiA9IC9eKD86XFxkKyhcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT98XFxkKykvO1xuY29uc3QgcmVfQ09OVEVYVCA9IC9eKD8hISkoXFxbKD86W15cXF1dKStcXF0pPyhbMC05QS1aYS16Ll/CocKkwqfCqMKqXFx1MDBhZMKvLVxcdWZmZmZdKyk/KD89ISkvO1xuY29uc3QgcmVfQ09OVEVYVF9RVU9URSA9IC9eJyg/OicnfFteJ10pKignfCQpKD89ISkvO1xuY29uc3QgcmVfUkFOR0VfVFJJTSA9IC9eKFxcLjpcXC58XFwuOnw6XFwuKS87XG5cbmNvbnN0IHJuZ1BhcnQgPSAnXFxcXCQ/W0EtWl17MSwzfVxcXFwkP1sxLTldWzAtOV17MCw2fSc7XG5jb25zdCBjb2xQYXJ0ID0gJ1xcXFwkP1tBLVpdezEsM30nO1xuY29uc3Qgcm93UGFydCA9ICdcXFxcJD9bMS05XVswLTldezAsNn0nO1xuY29uc3QgcmFuZ2VPcCA9ICdcXFxcLj86XFxcXC4/JztcbmNvbnN0IG5leHROb3RDaGFyID0gJyg/IVthLXowLTlfXFxcXHUwMGExLVxcXFx1ZmZmZl0pJztcbmNvbnN0IHJlX0ExQ09MID0gbmV3IFJlZ0V4cChgXiR7Y29sUGFydH0ke3JhbmdlT3B9JHtjb2xQYXJ0fSR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcbmNvbnN0IHJlX0ExUk9XID0gbmV3IFJlZ0V4cChgXiR7cm93UGFydH0ke3JhbmdlT3B9JHtyb3dQYXJ0fSR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcbmNvbnN0IHJlX0ExUkFOR0UgPSBuZXcgUmVnRXhwKGBeJHtybmdQYXJ0fSR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcbmNvbnN0IHJlX0ExUEFSVElBTCA9IG5ldyBSZWdFeHAoYF4oKCR7Y29sUGFydH18JHtyb3dQYXJ0fSkke3JhbmdlT3B9JHtybmdQYXJ0fXwke3JuZ1BhcnR9JHtyYW5nZU9wfSgke2NvbFBhcnR9fCR7cm93UGFydH0pKSg/IVtcXFxcdygkLl0pYCwgJ2knKTtcbmNvbnN0IHJQYXJ0ID0gJyg/OlIoPzpcXFxcW1srLV0/XFxcXGQrXFxcXF18WzEtOV1bMC05XXswLDZ9KT8pJztcbmNvbnN0IGNQYXJ0ID0gJyg/OkMoPzpcXFxcW1srLV0/XFxcXGQrXFxcXF18WzEtOV1bMC05XXswLDR9KT8pJztcbmNvbnN0IHJlX1JDQ09MID0gbmV3IFJlZ0V4cChgXiR7Y1BhcnR9KCR7cmFuZ2VPcH0ke2NQYXJ0fSk/JHtuZXh0Tm90Q2hhcn1gLCAnaScpO1xuY29uc3QgcmVfUkNST1cgPSBuZXcgUmVnRXhwKGBeJHtyUGFydH0oJHtyYW5nZU9wfSR7clBhcnR9KT8ke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9SQ1JBTkdFID0gbmV3IFJlZ0V4cChgXig/Oig/PVtSQ10pJHtyUGFydH0ke2NQYXJ0fSkke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9SQ1BBUlRJQUwgPSBuZXcgUmVnRXhwKGBeKCR7clBhcnR9JHtjUGFydH0oJHtyYW5nZU9wfSR7Y1BhcnR9fCR7cmFuZ2VPcH0ke3JQYXJ0fSkoPyFbW1xcXFxkXSl8KCR7clBhcnR9fCR7Y1BhcnR9KSgke3JhbmdlT3B9JHtyUGFydH0ke2NQYXJ0fSkpJHtuZXh0Tm90Q2hhcn1gLCAnaScpO1xuXG4vLyBUaGUgYWR2ZXJ0aXplZCBuYW1lZCByYW5nZXMgcnVsZXMgYXJlIGEgYml0IG9mZiBmcm9tIHdoYXQgRXhjZWwgc2VlbXMgdG8gZG86XG4vLyBpbiB0aGUgXCJleHRlbmRlZCByYW5nZVwiIG9mIGNoYXJzLCBpdCBsb29rcyBsaWtlIGl0IGFsbG93cyBtb3N0IHRoaW5ncyBhYm92ZVxuLy8gVSswMEIwIHdpdGggdGhlIHJhbmdlIGJldHdlZW4gVSswMEEwLVUrMDBBRiByYXRoZXIgcmFuZG9tLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4vLyBjb25zdCByZV9OQU1FRCA9IC9eW2EtekEtWlxcXFxfwqHCpMKnwqjCqlxcdTAwYWTCr1xcdTAwYjAtXFx1ZmZmZl1bYS16QS1aMC05XFxcXF8uP8KhwqTCp8KowqpcXHUwMGFkwq9cXHUwMGIwLVxcdWZmZmZdezAsMjU0fS9pO1xuLy8gSSd2ZSBzaW1wbGlmaWVkIHRvIGFsbG93aW5nIGV2ZXJ5dGhpbmcgYWJvdmUgVSswMEExOlxuY29uc3QgcmVfTkFNRUQgPSAvXlthLXpBLVpcXFxcX1xcdTAwYTEtXFx1ZmZmZl1bYS16QS1aMC05XFxcXF8uP1xcdTAwYTEtXFx1ZmZmZl17MCwyNTR9L2k7XG5cbmZ1bmN0aW9uIG1ha2VIYW5kbGVyICh0eXBlLCByZSkge1xuICByZXR1cm4gc3RyID0+IHtcbiAgICBjb25zdCBtID0gcmUuZXhlYyhzdHIpO1xuICAgIGlmIChtKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbGV4TmFtZWQgKHN0cikge1xuICBjb25zdCBtID0gcmVfTkFNRUQuZXhlYyhzdHIpO1xuICBpZiAobSkge1xuICAgIGNvbnN0IGxjID0gbVswXS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIG5hbWVzIHN0YXJ0aW5nIHdpdGggXFwgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXIgbG9uZ1xuICAgIGlmIChsY1swXSA9PT0gJ1xcXFwnICYmIG1bMF0ubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIHNpbmdsZSBjaGFyYWN0ZXJzIFIgYW5kIEMgYXJlIGZvcmJpZGRlbiBhcyBuYW1lc1xuICAgIGlmIChsYyA9PT0gJ3InIHx8IGxjID09PSAnYycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiBSRUZfTkFNRUQsIHZhbHVlOiBtWzBdIH07XG4gIH1cbn1cblxuY29uc3QgcmVfUVVPVEVEX1ZBTFVFID0gL14nKD86W15bXFxdXSs/KT8oPzpcXFsoLis/KVxcXSk/KD86W15bXFxdXSs/KSckLztcbmNvbnN0IHJlX1FVT1RFRF9WQUxVRV9YTFNYID0gL14nXFxbKC4rPylcXF0nJC87XG5mdW5jdGlvbiBsZXhDb250ZXh0IChzdHIsIG9wdGlvbnMpIHtcbiAgY29uc3QgbXEgPSByZV9DT05URVhUX1FVT1RFLmV4ZWMoc3RyKTtcbiAgaWYgKG1xKSB7XG4gICAgY29uc3QgdmFsdWUgPSBtcVswXTtcbiAgICBjb25zdCBpc1ZhbGlkID0gb3B0aW9ucy54bHN4XG4gICAgICA/IHJlX1FVT1RFRF9WQUxVRV9YTFNYLnRlc3QodmFsdWUpIHx8IHJlX1FVT1RFRF9WQUxVRS50ZXN0KHZhbHVlKVxuICAgICAgOiByZV9RVU9URURfVkFMVUUudGVzdCh2YWx1ZSk7XG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IENPTlRFWFRfUVVPVEUsIHZhbHVlOiB2YWx1ZSB9O1xuICAgIH1cbiAgfVxuICAvLyB4bHN4IHhtbCB1c2VzIGEgdmFyaWFudCBvZiB0aGUgc3ludGF4IHRoYXQgaGFzIGV4dGVybmFsIHJlZmVyZW5jZXMgaW5cbiAgLy8gYnJhY2V0cy4gQW55IG9mOiBbMV1TaGVldDEhQTEsICdbMV1TaGVldCBvbmUnIUExLCBbMV0hbmFtZWRcbiAgLy8gV2UncmUgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgbm9uIHF1b3RlZCB2ZXJzaW9uIGhlcmUgYXMgdGhlIHF1b3RlZCB2ZXJzaW9uXG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGV4YW1pbmUgd2hhdCBpcyBpbiB0aGUgcXVvdGVzLlxuICBjb25zdCBtID0gcmVfQ09OVEVYVC5leGVjKHN0cik7XG4gIGlmIChtKSB7XG4gICAgY29uc3QgWyAsIGEsIGIgXSA9IG07XG4gICAgY29uc3QgdmFsaWQgPSAoXG4gICAgICAoKGEgJiYgYikgfHwgYikgfHwgLy8gXCJbYV1iIVwiIG9yIFwiYiFcIiBmb3Jtc1xuICAgICAgKGEgJiYgIWIgJiYgb3B0aW9ucy54bHN4KSAvLyBcIlthXVwiIGZvcm0gKGFsbG93ZWQgaW4geGxzeCBtb2RlKVxuICAgICk7XG4gICAgaWYgKHZhbGlkKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBDT05URVhULCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZXhTdHJ1Y3R1cmVkIChzdHIpIHtcbiAgY29uc3Qgc3RydWN0RGF0YSA9IHBhcnNlU1JhbmdlKHN0cik7XG4gIGlmIChzdHJ1Y3REYXRhKSB7XG4gICAgLy8gd2UgaGF2ZSBhIG1hdGNoIGZvciBhIHZhbGlkIFNSXG4gICAgbGV0IGkgPSBzdHJ1Y3REYXRhLmxlbmd0aDtcbiAgICAvLyBza2lwIHRhaWxpbmcgd2hpdGVzcGFjZVxuICAgIHdoaWxlIChzdHJbaV0gPT09ICcgJykge1xuICAgICAgaSsrO1xuICAgIH1cbiAgICAvLyBhbmQgZW5zdXJlIHRoYXQgaXQgaXNuJ3QgZm9sbG93ZWQgYnkgYSAhXG4gICAgaWYgKHN0cltpXSAhPT0gJyEnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBSRUZfU1RSVUNULFxuICAgICAgICB2YWx1ZTogc3RydWN0RGF0YS50b2tlblxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IHJlUkNOdW1zID0gLyhbUkNdKShcXFs/KSgtP1xcZCspL2dpO1xuY29uc3QgcmVBMU51bXMgPSAvKFxcZCt8W2EtekEtWl0rKS9naTtcbmZ1bmN0aW9uIGxleFJhbmdlIChzdHIsIG9wdGlvbnMpIHtcbiAgbGV0IG0sIHQ7XG4gIGlmIChvcHRpb25zLnIxYzEpIHtcbiAgICAvLyBSQyBub3RhdGlvblxuICAgIGlmIChvcHRpb25zLmFsbG93VGVybmFyeSAmJiAobSA9IHJlX1JDUEFSVElBTC5leGVjKHN0cikpKSB7XG4gICAgICB0ID0geyB0eXBlOiBSRUZfVEVSTkFSWSwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKG0gPSByZV9SQ1JBTkdFLmV4ZWMoc3RyKSkpIHtcbiAgICAgIHQgPSB7IHR5cGU6IFJFRl9SQU5HRSwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKG0gPSByZV9SQ1JPVy5leGVjKHN0cikpIHx8IChtID0gcmVfUkNDT0wuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX0JFQU0sIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGlmICh0KSB7XG4gICAgICByZVJDTnVtcy5sYXN0SW5kZXggPSAwO1xuICAgICAgd2hpbGUgKChtID0gcmVSQ051bXMuZXhlYyh0LnZhbHVlKSkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeCA9IChtWzFdID09PSAnUicgPyBNQVhfUk9XUyA6IE1BWF9DT0xTKSArIChtWzJdID8gMCA6IDEpO1xuICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUludChtWzNdLCAxMCk7XG4gICAgICAgIGlmICh2YWwgPiB4IHx8IHZhbCA8IC14KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBBMSBub3RhdGlvblxuICAgIGlmIChvcHRpb25zLmFsbG93VGVybmFyeSAmJiAobSA9IHJlX0ExUEFSVElBTC5leGVjKHN0cikpKSB7XG4gICAgICB0ID0geyB0eXBlOiBSRUZfVEVSTkFSWSwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKG0gPSByZV9BMUNPTC5leGVjKHN0cikpIHx8IChtID0gcmVfQTFST1cuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX0JFQU0sIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChtID0gcmVfQTFSQU5HRS5leGVjKHN0cikpKSB7XG4gICAgICB0ID0geyB0eXBlOiBSRUZfUkFOR0UsIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGlmICh0KSB7XG4gICAgICByZUExTnVtcy5sYXN0SW5kZXggPSAwO1xuICAgICAgLy8gWFhYOiBjYW4gcHJvYmFibHkgb3B0aW1pemUgdGhpcyBhcyB3ZSBrbm93IGxldHRlcnMgY2FuIG9ubHkgYmUgMyBhdCBtYXhcbiAgICAgIHdoaWxlICgobSA9IHJlQTFOdW1zLmV4ZWModC52YWx1ZSkpICE9PSBudWxsKSB7XG4gICAgICAgIGlmICgvXlxcZC8udGVzdChtWzFdKSkgeyAvLyByb3dcbiAgICAgICAgICBpZiAoKHBhcnNlSW50KG1bMV0sIDEwKSAtIDEpID4gTUFYX1JPV1MpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmcm9tQ29sKG1bMV0pID4gTUFYX0NPTFMpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxleFJlZk9wIChzLCBvcHRzKSB7XG4gIC8vIGluIFIxQzEgbW9kZSB3ZSBvbmx5IGFsbG93ICFcbiAgaWYgKG9wdHMucjFjMSkge1xuICAgIHJldHVybiAoc1swXSA9PT0gJyEnKVxuICAgICAgPyB7IHR5cGU6IE9QRVJBVE9SLCB2YWx1ZTogc1swXSB9XG4gICAgICA6IG51bGw7XG4gIH1cbiAgLy8gaW4gQTEgbW9kZSB3ZSBhbGxvdyBbICchJywgJzonLCAnLjonLCAnOi4nLCAnLjouJ11cbiAgY29uc3QgbSA9IC9eKCF8XFwuPzpcXC4/KS8uZXhlYyhzKTtcbiAgaWYgKG0pIHtcbiAgICByZXR1cm4geyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6IG1bMV0gfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGxleGVycyA9IFtcbiAgbWFrZUhhbmRsZXIoRVJST1IsIHJlX0VSUk9SKSxcbiAgbWFrZUhhbmRsZXIoT1BFUkFUT1JfVFJJTSwgcmVfUkFOR0VfVFJJTSksXG4gIG1ha2VIYW5kbGVyKE9QRVJBVE9SLCByZV9PUEVSQVRPUiksXG4gIG1ha2VIYW5kbGVyKEZVTkNUSU9OLCByZV9GVU5DVElPTiksXG4gIG1ha2VIYW5kbGVyKEJPT0xFQU4sIHJlX0JPT0xFQU4pLFxuICBtYWtlSGFuZGxlcihORVdMSU5FLCByZV9ORVdMSU5FKSxcbiAgbWFrZUhhbmRsZXIoV0hJVEVTUEFDRSwgcmVfV0hJVEVTUEFDRSksXG4gIG1ha2VIYW5kbGVyKFNUUklORywgcmVfU1RSSU5HKSxcbiAgbGV4Q29udGV4dCxcbiAgbGV4UmFuZ2UsXG4gIGxleFN0cnVjdHVyZWQsXG4gIG1ha2VIYW5kbGVyKE5VTUJFUiwgcmVfTlVNQkVSKSxcbiAgbGV4TmFtZWRcbl07XG5cbmV4cG9ydCBjb25zdCBsZXhlcnNSZWZzID0gW1xuICBsZXhSZWZPcCxcbiAgbGV4Q29udGV4dCxcbiAgbGV4UmFuZ2UsXG4gIGxleFN0cnVjdHVyZWQsXG4gIGxleE5hbWVkXG5dO1xuIiwiaW1wb3J0IHsgQ09OVEVYVCwgQ09OVEVYVF9RVU9URSwgUkVGX1JBTkdFLCBSRUZfTkFNRUQsIFJFRl9CRUFNLCBSRUZfVEVSTkFSWSwgT1BFUkFUT1IsIFJFRl9TVFJVQ1QgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbmNvbnN0IEVORCA9ICckJztcblxuY29uc3QgdmFsaWRSdW5zTWVyZ2UgPSBbXG4gIFsgUkVGX1JBTkdFLCAnOicsIFJFRl9SQU5HRSBdLFxuICBbIFJFRl9SQU5HRSwgJy46JywgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX1JBTkdFLCAnOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfUkFOR0UsICcuOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfQkVBTSBdLFxuICBbIFJFRl9URVJOQVJZIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfUkFOR0UsICc6JywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfUkFOR0UsICcuOicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFLCAnOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9SQU5HRSwgJy46LicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfQkVBTSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1RFUk5BUlkgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9SQU5HRSwgJzonLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9SQU5HRSwgJy46JywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UsICc6LicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1JBTkdFLCAnLjouJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9CRUFNIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfVEVSTkFSWSBdLFxuICBbIFJFRl9OQU1FRCBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX05BTUVEIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfTkFNRUQgXSxcbiAgWyBSRUZfU1RSVUNUIF0sXG4gIFsgUkVGX05BTUVELCBSRUZfU1RSVUNUIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfTkFNRUQsIFJFRl9TVFJVQ1QgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9OQU1FRCwgUkVGX1NUUlVDVCBdXG5dO1xuXG4vLyB2YWxpZCB0b2tlbiBydW5zIGFyZSBjb252ZXJ0ZWQgdG8gYSB0cmVlIHN0cnVjdHVyZVxuY29uc3QgcmVmUGFydHNUcmVlID0ge307XG5mdW5jdGlvbiBwYWNrTGlzdCAoZiwgbm9kZSkge1xuICBpZiAoZi5sZW5ndGgpIHtcbiAgICBjb25zdCBrZXkgPSBmWzBdO1xuICAgIG5vZGVba2V5XSA9IG5vZGVba2V5XSB8fCB7fTtcbiAgICBwYWNrTGlzdChmLnNsaWNlKDEpLCBub2RlW2tleV0pO1xuICB9XG4gIGVsc2Uge1xuICAgIG5vZGVbRU5EXSA9IHRydWU7XG4gIH1cbn1cbnZhbGlkUnVuc01lcmdlLmZvckVhY2gocnVuID0+IHBhY2tMaXN0KHJ1bi5jb25jYXQoKS5yZXZlcnNlKCksIHJlZlBhcnRzVHJlZSkpO1xuXG4vLyBhdHRlbXB0IHRvIG1hdGNoIGEgYmFja3dhcmRzIHJ1biBvZiB0b2tlbnMgZnJvbSBhIGdpdmVuIHBvaW50XG4vLyB0byBhIHBhdGggaW4gdGhlIHRyZWVcbmNvbnN0IG1hdGNoZXIgPSAodG9rZW5zLCBjdXJyTm9kZSwgYW5jaG9ySW5kZXgsIGluZGV4ID0gMCkgPT4ge1xuICBjb25zdCB0b2tlbiA9IHRva2Vuc1thbmNob3JJbmRleCAtIGluZGV4XTtcbiAgaWYgKHRva2VuKSB7XG4gICAgY29uc3Qga2V5ID0gKHRva2VuLnR5cGUgPT09IE9QRVJBVE9SKSA/IHRva2VuLnZhbHVlIDogdG9rZW4udHlwZTtcbiAgICBpZiAoa2V5IGluIGN1cnJOb2RlKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlcih0b2tlbnMsIGN1cnJOb2RlW2tleV0sIGFuY2hvckluZGV4LCBpbmRleCArIDEpO1xuICAgIH1cbiAgfVxuICBpZiAoY3Vyck5vZGVbRU5EXSkge1xuICAgIC8vIHdlIG1heSBlbmQgaGVyZSBzbyB0aGlzIGlzIGEgbWF0Y2hcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgLy8gbm8gbWF0Y2hcbiAgcmV0dXJuIDA7XG59O1xuXG4vKipcbiAqIE1lcmdlcyBjb250ZXh0IHdpdGggcmVmZXJlbmNlIHRva2VucyBhcyBwb3NzaWJsZSBpbiBhIGxpc3Qgb2YgdG9rZW5zLlxuICpcbiAqIFdoZW4gZ2l2ZW4gYSB0b2tlbmxpc3QsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBsaXN0IHdpdGggcmFuZ2VzIHJldHVybmVkXG4gKiBhcyB3aG9sZSByZWZlcmVuY2VzIChgU2hlZXQxIUExOkIyYCkgcmF0aGVyIHRoYW4gc2VwYXJhdGUgdG9rZW5zIGZvciBlYWNoXG4gKiBwYXJ0OiAoYFNoZWV0MWAsYCFgLGBBMWAsYDpgLGBCMmApLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8VG9rZW4+fSB0b2tlbmxpc3QgQW4gYXJyYXkgb2YgdG9rZW5zIChmcm9tIGB0b2tlbml6ZSgpYClcbiAqIEByZXR1cm5zIHtBcnJheTxUb2tlbj59IEEgbmV3IGxpc3Qgb2YgdG9rZW5zIHdpdGggcmFuZ2UgcGFydHMgbWVyZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSZWZUb2tlbnMgKHRva2VubGlzdCkge1xuICBjb25zdCBmaW5hbFRva2VucyA9IFtdO1xuICAvLyB0aGlzIHNlZWtzIGJhY2t3YXJkcyBiZWNhdXNlIGl0J3MgcmVhbGx5IHRoZSByYW5nZSBwYXJ0XG4gIC8vIHRoYXQgY29udHJvbHMgd2hhdCBjYW4gYmUgam9pbmVkLlxuICBmb3IgKGxldCBpID0gdG9rZW5saXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGV0IHRva2VuID0gdG9rZW5saXN0W2ldO1xuICAgIGNvbnN0IHZhbGlkID0gbWF0Y2hlcih0b2tlbmxpc3QsIHJlZlBhcnRzVHJlZSwgaSk7XG4gICAgaWYgKHZhbGlkKSB7XG4gICAgICBjb25zdCB0b01lcmdlID0gdG9rZW5saXN0LnNsaWNlKGkgLSB2YWxpZCArIDEsIGkgKyAxKTtcbiAgICAgIC8vIHVzZSB0aGUgbWV0YSBwcm9wZXJ0aWVzIGZyb20gdGhlIFwiZmlyc3RcIiB0b2tlbiAocmlnaHQtbW9zdCB0b2tlbilcbiAgICAgIHRva2VuID0geyAuLi50b2tlbiB9O1xuICAgICAgdG9rZW4udmFsdWUgPSB0b01lcmdlLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpO1xuICAgICAgLy8gYWRqdXN0IHRoZSBvZmZzZXRzIHRvIGluY2x1ZGUgYWxsIHRoZSB0ZXh0XG4gICAgICBpZiAodG9rZW4ubG9jICYmIHRvTWVyZ2VbMF0ubG9jKSB7XG4gICAgICAgIHRva2VuLmxvY1swXSA9IHRvTWVyZ2VbMF0ubG9jWzBdO1xuICAgICAgfVxuICAgICAgaSAtPSB2YWxpZCAtIDE7XG4gICAgfVxuICAgIGZpbmFsVG9rZW5zLnVuc2hpZnQodG9rZW4pO1xuICB9XG4gIHJldHVybiBmaW5hbFRva2Vucztcbn1cbiIsImltcG9ydCB7XG4gIEZYX1BSRUZJWCxcbiAgTkVXTElORSxcbiAgTlVNQkVSLFxuICBPUEVSQVRPUixcbiAgUkVGX05BTUVELFxuICBTVFJJTkcsXG4gIFVOS05PV04sXG4gIFdISVRFU1BBQ0UsXG4gIEZVTkNUSU9OLFxuICBPUEVSQVRPUl9UUklNLFxuICBSRUZfUkFOR0Vcbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgbGV4ZXJzIH0gZnJvbSAnLi9sZXhlclBhcnRzLmpzJztcbmltcG9ydCB7IG1lcmdlUmVmVG9rZW5zIH0gZnJvbSAnLi9tZXJnZVJlZlRva2Vucy5qcyc7XG5cbmNvbnN0IGlzVHlwZSA9ICh0LCB0eXBlKSA9PiB0ICYmIHQudHlwZSA9PT0gdHlwZTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHdpdGhMb2NhdGlvbjogZmFsc2UsXG4gIG1lcmdlUmVmczogdHJ1ZSxcbiAgYWxsb3dUZXJuYXJ5OiBmYWxzZSxcbiAgbmVnYXRpdmVOdW1iZXJzOiB0cnVlLFxuICByMWMxOiBmYWxzZVxufTtcblxuY29uc3QgaXNUZXh0VG9rZW4gPSB0b2tlbiA9PiB7XG4gIHJldHVybiAoXG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX05BTUVEIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gRlVOQ1RJT05cbiAgKTtcbn07XG5cbmNvbnN0IGNhdXNlc0JpbmFyeU1pbnVzID0gdG9rZW4gPT4ge1xuICByZXR1cm4gIWlzVHlwZSh0b2tlbiwgT1BFUkFUT1IpIHx8IChcbiAgICB0b2tlbi52YWx1ZSA9PT0gJyUnIHx8XG4gICAgdG9rZW4udmFsdWUgPT09ICd9JyB8fFxuICAgIHRva2VuLnZhbHVlID09PSAnKScgfHxcbiAgICB0b2tlbi52YWx1ZSA9PT0gJyMnXG4gICk7XG59O1xuXG5mdW5jdGlvbiBmaXhSQ05hbWVzICh0b2tlbnMpIHtcbiAgbGV0IHdpdGhpbkNhbGwgPSAwO1xuICBsZXQgcGFyZW5EZXB0aCA9IDA7XG4gIGxldCBsYXN0VG9rZW47XG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IE9QRVJBVE9SKSB7XG4gICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcoJykge1xuICAgICAgICBwYXJlbkRlcHRoKys7XG4gICAgICAgIGlmIChsYXN0VG9rZW4udHlwZSA9PT0gRlVOQ1RJT04pIHtcbiAgICAgICAgICBjb25zdCB2ID0gbGFzdFRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHYgPT09ICdsYW1iZGEnIHx8IHYgPT09ICdsZXQnKSB7XG4gICAgICAgICAgICB3aXRoaW5DYWxsID0gcGFyZW5EZXB0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnKScpIHtcbiAgICAgICAgcGFyZW5EZXB0aC0tO1xuICAgICAgICBpZiAocGFyZW5EZXB0aCA8IHdpdGhpbkNhbGwpIHtcbiAgICAgICAgICB3aXRoaW5DYWxsID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh3aXRoaW5DYWxsICYmIHRva2VuLnR5cGUgPT09IFVOS05PV04gJiYgL15bcmNdJC8udGVzdCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgIHRva2VuLnR5cGUgPSBSRUZfTkFNRUQ7XG4gICAgfVxuICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICB9XG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2tlbnMgKGZ4LCB0b2tlbkhhbmRsZXJzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgY29uc3QgeyB3aXRoTG9jYXRpb24sIG1lcmdlUmVmcywgbmVnYXRpdmVOdW1iZXJzIH0gPSBvcHRzO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBsZXRPckxhbWJkYSA9IDA7XG4gIGxldCB1bmtub3duUkMgPSAwO1xuICBjb25zdCB0cmltT3BzID0gW107XG5cbiAgbGV0IHRhaWwwID0gbnVsbDsgLy8gbGFzdCBub24td2hpdGVzcGFjZSB0b2tlblxuICBsZXQgdGFpbDEgPSBudWxsOyAvLyBwZW51bHRpbWF0ZSBub24td2hpdGVzcGFjZSB0b2tlblxuICBsZXQgbGFzdFRva2VuID0gbnVsbDsgLy8gbGFzdCB0b2tlblxuICBjb25zdCBwdXNoVG9rZW4gPSB0b2tlbiA9PiB7XG4gICAgY29uc3QgaXNDdXJyVW5rbm93biA9IHRva2VuLnR5cGUgPT09IFVOS05PV047XG4gICAgY29uc3QgaXNMYXN0VW5rbm93biA9IGxhc3RUb2tlbiAmJiBsYXN0VG9rZW4udHlwZSA9PT0gVU5LTk9XTjtcbiAgICBpZiAobGFzdFRva2VuICYmIChcbiAgICAgIChpc0N1cnJVbmtub3duICYmIGlzTGFzdFVua25vd24pIHx8XG4gICAgICAoaXNDdXJyVW5rbm93biAmJiBpc1RleHRUb2tlbihsYXN0VG9rZW4pKSB8fFxuICAgICAgKGlzTGFzdFVua25vd24gJiYgaXNUZXh0VG9rZW4odG9rZW4pKVxuICAgICkpIHtcbiAgICAgIC8vIFVOS05PV04gdG9rZW5zIFwiY29udGFtaW5hdGVcIiBzaWJsaW5nIHRleHQgdG9rZW5zXG4gICAgICBsYXN0VG9rZW4udmFsdWUgKz0gdG9rZW4udmFsdWU7XG4gICAgICBsYXN0VG9rZW4udHlwZSA9IFVOS05PV047XG4gICAgICBpZiAod2l0aExvY2F0aW9uKSB7XG4gICAgICAgIGxhc3RUb2tlbi5sb2NbMV0gPSB0b2tlbi5sb2NbMV07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IE9QRVJBVE9SX1RSSU0pIHtcbiAgICAgICAgdHJpbU9wcy5wdXNoKHRva2Vucy5sZW5ndGgpO1xuICAgICAgICB0b2tlbi50eXBlID0gVU5LTk9XTjtcbiAgICAgIH1cbiAgICAgIC8vIHB1c2ggdG9rZW4gYXMgbm9ybWFsbHlcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFdISVRFU1BBQ0UgJiYgdG9rZW4udHlwZSAhPT0gTkVXTElORSkge1xuICAgICAgICB0YWlsMSA9IHRhaWwwO1xuICAgICAgICB0YWlsMCA9IHRva2VuO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBpZiAoZnhbMF0gPT09ICc9Jykge1xuICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgdHlwZTogRlhfUFJFRklYLFxuICAgICAgdmFsdWU6ICc9JyxcbiAgICAgIC4uLih3aXRoTG9jYXRpb24gPyB7IGxvYzogWyAwLCAxIF0gfSA6IHt9KVxuICAgIH07XG4gICAgcG9zKys7XG4gICAgcHVzaFRva2VuKHRva2VuKTtcbiAgfVxuXG4gIHdoaWxlIChwb3MgPCBmeC5sZW5ndGgpIHtcbiAgICBjb25zdCBzdGFydFBvcyA9IHBvcztcbiAgICBjb25zdCBzID0gZnguc2xpY2UocG9zKTtcbiAgICBsZXQgdG9rZW5UeXBlID0gJyc7XG4gICAgbGV0IHRva2VuVmFsdWUgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuSGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSB0b2tlbkhhbmRsZXJzW2ldKHMsIG9wdHMpO1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdG9rZW5UeXBlID0gdC50eXBlO1xuICAgICAgICB0b2tlblZhbHVlID0gdC52YWx1ZTtcbiAgICAgICAgcG9zICs9IHRva2VuVmFsdWUubGVuZ3RoO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRva2VuVHlwZSkge1xuICAgICAgdG9rZW5UeXBlID0gVU5LTk9XTjtcbiAgICAgIHRva2VuVmFsdWUgPSBmeFtwb3NdO1xuICAgICAgcG9zKys7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB7XG4gICAgICB0eXBlOiB0b2tlblR5cGUsXG4gICAgICB2YWx1ZTogdG9rZW5WYWx1ZSxcbiAgICAgIC4uLih3aXRoTG9jYXRpb24gPyB7IGxvYzogWyBzdGFydFBvcywgcG9zIF0gfSA6IHt9KVxuICAgIH07XG5cbiAgICAvLyBtYWtlIGEgbm90ZSBpZiB3ZSBmb3VuZCBhIGxldC9sYW1iZGEgY2FsbFxuICAgIGlmIChsYXN0VG9rZW4gJiYgbGFzdFRva2VuLnR5cGUgPT09IEZVTkNUSU9OICYmIHRva2VuVmFsdWUgPT09ICcoJykge1xuICAgICAgY29uc3QgbGFzdExDID0gbGFzdFRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobGFzdExDID09PSAnbGFtYmRhJyB8fCBsYXN0TEMgPT09ICdsZXQnKSB7XG4gICAgICAgIGxldE9yTGFtYmRhKys7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgYSBub3RlIGlmIHdlIGZvdW5kIGEgUiBvciBDIHVua25vd25cbiAgICBpZiAodG9rZW5UeXBlID09PSBVTktOT1dOKSB7XG4gICAgICBjb25zdCB2YWxMQyA9IHRva2VuVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVua25vd25SQyArPSAodmFsTEMgPT09ICdyJyB8fCB2YWxMQyA9PT0gJ2MnKSA/IDEgOiAwO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciB0ZXJtaW5hdGlvblxuICAgIGlmICh0b2tlblR5cGUgPT09IFNUUklORykge1xuICAgICAgY29uc3QgbCA9IHRva2VuVmFsdWUubGVuZ3RoO1xuICAgICAgaWYgKHRva2VuVmFsdWUgPT09ICdcIlwiJykge1xuICAgICAgICAvLyBjb21tb24gY2FzZSB0aGF0IElTIHRlcm1pbmF0ZWRcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRva2VuVmFsdWUgPT09ICdcIicgfHwgdG9rZW5WYWx1ZVtsIC0gMV0gIT09ICdcIicpIHtcbiAgICAgICAgdG9rZW4udW50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRva2VuVmFsdWUgIT09ICdcIlwiJyAmJiB0b2tlblZhbHVlW2wgLSAyXSA9PT0gJ1wiJykge1xuICAgICAgICBsZXQgcCA9IGwgLSAxO1xuICAgICAgICB3aGlsZSAodG9rZW5WYWx1ZVtwXSA9PT0gJ1wiJykgeyBwLS07IH1cbiAgICAgICAgY29uc3QgYXRTdGFydCA9IChwICsgMSk7XG4gICAgICAgIGNvbnN0IG9kZE51bSA9ICgobCAtIHAgKyAxKSAlIDIgPT09IDApO1xuICAgICAgICBpZiAoIWF0U3RhcnQgXiBvZGROdW0pIHtcbiAgICAgICAgICB0b2tlbi51bnRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZ2F0aXZlTnVtYmVycyAmJiB0b2tlblR5cGUgPT09IE5VTUJFUikge1xuICAgICAgY29uc3QgbGFzdDEgPSBsYXN0VG9rZW47XG4gICAgICAvLyBkbyB3ZSBoYXZlIGEgbnVtYmVyIHByZWNlZGVkIGJ5IGEgbWludXM/XG4gICAgICBpZiAobGFzdDEgJiYgaXNUeXBlKGxhc3QxLCBPUEVSQVRPUikgJiYgbGFzdDEudmFsdWUgPT09ICctJykge1xuICAgICAgICAvLyBtaXNzaW5nIHRhaWwxIG1lYW5zIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRhaWwxIHx8XG4gICAgICAgICAgaXNUeXBlKHRhaWwxLCBGWF9QUkVGSVgpIHx8XG4gICAgICAgICAgIWNhdXNlc0JpbmFyeU1pbnVzKHRhaWwxKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtaW51cyA9IHRva2Vucy5wb3AoKTtcbiAgICAgICAgICB0b2tlbi52YWx1ZSA9ICctJyArIHRva2VuVmFsdWU7XG4gICAgICAgICAgaWYgKHdpdGhMb2NhdGlvbikge1xuICAgICAgICAgICAgLy8gZW5zdXJlIG9mZnNldHMgYXJlIHVwIHRvIGRhdGVcbiAgICAgICAgICAgIHRva2VuLmxvY1swXSA9IG1pbnVzLmxvY1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV4dCBzdGVwIHRyaWVzIHRvIGNvdW50ZXIgdGhlIHNjcmV3aW5nIGFyb3VuZCB3aXRoIHRoZSB0YWlsaW5nXG4gICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGNvcnJlY3QgYWdhaW4gb25jZSB3ZSBwdXNoVG9rZW4oKVxuICAgICAgICAgIHRhaWwwID0gdGFpbDE7XG4gICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2hUb2tlbih0b2tlbik7XG4gIH1cblxuICAvLyBpZiB3ZSBlbmNvdW50ZXJlZCBib3RoIGEgTEFNQkRBL0xFVCBjYWxsLCBhbmQgdW5rbm93biAncicgb3IgJ2MnIHRva2Vuc1xuICAvLyB3ZSdsbCB0dXJuIHRoZSB1bmtub3duIHRva2VucyBpbnRvIG5hbWVzIHdpdGhpbiB0aGUgY2FsbC5cbiAgaWYgKHVua25vd25SQyAmJiBsZXRPckxhbWJkYSkge1xuICAgIGZpeFJDTmFtZXModG9rZW5zKTtcbiAgfVxuXG4gIC8vIEFueSBPUEVSQVRPUl9UUklNIHRva2VucyBoYXZlIGJlZW4gaW5kZXhlZCBhbHJlYWR5LCB0aGV5IG5vdyBuZWVkIHRvIGJlXG4gIC8vIGVpdGhlciB0dXJuZWQgaW50byBPUEVSQVRPUnMgb3IgVU5LTk9XTnMuIFRyaW0gb3BlcmF0b3JzIGFyZSBvbmx5IGFsbG93ZWRcbiAgLy8gYmV0d2VlbiB0d28gUkVGX1JBTkdFIHRva2VucyBhcyB0aGV5IGFyZSBub3QgdmFsaWQgaW4gZXhwcmVzc2lvbnMgYXMgZnVsbFxuICAvLyBvcGVyYXRvcnMuXG4gIGZvciAoY29uc3QgaW5kZXggb2YgdHJpbU9wcykge1xuICAgIGNvbnN0IGJlZm9yZSA9IHRva2Vuc1tpbmRleCAtIDFdO1xuICAgIGNvbnN0IGFmdGVyID0gdG9rZW5zW2luZGV4IC0gMV07XG4gICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudHlwZSA9PT0gUkVGX1JBTkdFICYmIGFmdGVyICYmIGFmdGVyLnR5cGUgPT09IFJFRl9SQU5HRSkge1xuICAgICAgdG9rZW5zW2luZGV4XS50eXBlID0gT1BFUkFUT1I7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdG9rZW5zW2luZGV4XS50eXBlID0gVU5LTk9XTjtcbiAgICB9XG4gIH1cblxuICBpZiAobWVyZ2VSZWZzKSB7XG4gICAgcmV0dXJuIG1lcmdlUmVmVG9rZW5zKHRva2Vucyk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG4vKipcbiAqIEJyZWFrcyBhIHN0cmluZyBmb3JtdWxhIGludG8gYSBsaXN0IG9mIHRva2Vucy5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb3V0cHV0IHdpbGwgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHRva2VuczpcbiAqXG4gKiBgYGBqc1xuICogW1xuICogICB7IHR5cGU6IEZYX1BSRUZJWCwgdmFsdWU6ICc9JyB9LFxuICogICB7IHR5cGU6IEZVTkNUSU9OLCB2YWx1ZTogJ1NVTScgfSxcbiAqICAgeyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6ICcoJyB9LFxuICogICB7IHR5cGU6IFJFRl9SQU5HRSwgdmFsdWU6ICdBMTpCMicgfSxcbiAqICAgeyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6ICcpJyB9XG4gKiBdXG4gKiBgYGBcbiAqXG4gKiBUb2tlbiB0eXBlcyBtYXkgYmUgZm91bmQgYXMgYW4gT2JqZWN0IGFzIHRoZVxuICogW2B0b2tlblR5cGVzYCBleHBvcnRde0BsaW5rIHRva2VuVHlwZXN9IG9uIHRoZSBwYWNrYWdlXG4gKiAoYGltcG9ydCB7dG9rZW5UeXBlc30gZnJvbSAnQGJvcmdhci9meCc7YCkuXG4gKlxuICogVG8gc3VwcG9ydCBzeW50YXggaGlnaGxpZ2h0aW5nIGFzIHlvdSB0eXBlLCBgU1RSSU5HYCB0b2tlbnMgYXJlIGFsbG93ZWQgdG8gYmVcbiAqIFwidW50ZXJtaW5hdGVkXCIuIEZvciBleGFtcGxlLCB0aGUgaW5jb21wbGV0ZSBmb3JtdWxhIGA9XCJIZWxsbyB3b3JsZGAgd291bGQgYmVcbiAqIHRva2VuaXplZCBhczpcbiAqXG4gKiBgYGBqc1xuICogW1xuICogICB7IHR5cGU6IEZYX1BSRUZJWCwgdmFsdWU6ICc9JyB9LFxuICogICB7IHR5cGU6IFNUUklORywgdmFsdWU6ICdcIkhlbGxvIHdvcmxkJywgdW50ZXJtaW5hdGVkOiB0cnVlIH0sXG4gKiBdXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHRva2VuVHlwZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtdWxhIEFuIEV4Y2VsIGZvcm11bGEgc3RyaW5nIChhbiBFeGNlbCBleHByZXNzaW9uKSBvciBhbiBhcnJheSBvZiB0b2tlbnMuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5uZWdhdGl2ZU51bWJlcnM9dHJ1ZV0gIE1lcmdlcyB1bmFyeSBtaW51c2VzIHdpdGggdGhlaXIgaW1tZWRpYXRlbHkgZm9sbG93aW5nIG51bWJlciB0b2tlbnMgKGAtYCxgMWApID0+IGAtMWAgKGFsdGVybmF0aXZlbHkgdGhlc2Ugd2lsbCBiZSB1bmFyeSBvcGVyYXRpb25zIGluIHRoZSB0cmVlKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucjFjMT1mYWxzZV0gIFJhbmdlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIFIxQzEgc3R5bGUgZm9ybWF0IHJhdGhlciB0aGFuIHRoZSBtb3JlIHBvcHVsYXIgQTEgc3R5bGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLndpdGhMb2NhdGlvbj10cnVlXSAgTm9kZXMgd2lsbCBpbmNsdWRlIHNvdXJjZSBwb3NpdGlvbiBvZmZzZXRzIHRvIHRoZSB0b2tlbnM6IGB7IGxvYzogWyBzdGFydCwgZW5kIF0gfWBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubWVyZ2VSZWZzPXRydWVdICBTaG91bGQgcmFuZ2VzIGJlIHJldHVybmVkIGFzIHdob2xlIHJlZmVyZW5jZXMgKGBTaGVldDEhQTE6QjJgKSBvciBhcyBzZXBhcmF0ZSB0b2tlbnMgZm9yIGVhY2ggcGFydDogKGBTaGVldDFgLGAhYCxgQTFgLGA6YCxgQjJgKS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIFtgbWVyZ2VSZWZUb2tlbnNgXSgjbWVyZ2VSZWZUb2tlbnMpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBFbmFibGVzIGEgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzIGZvdW5kIG9ubHkgaW4gWExTWCBmaWxlcy5cbiAqIEByZXR1cm5zIHtBcnJheTxUb2tlbj59IEFuIEFTVCBvZiBub2Rlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKGZvcm11bGEsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gZ2V0VG9rZW5zKGZvcm11bGEsIGxleGVycywgb3B0aW9ucyk7XG59XG4iLCJpbXBvcnQge1xuICBSRUZfUkFOR0UsIFJFRl9CRUFNLCBSRUZfTkFNRUQsIFJFRl9URVJOQVJZLCBSRUZfU1RSVUNULFxuICBGWF9QUkVGSVgsIFdISVRFU1BBQ0UsIE5FV0xJTkUsXG4gIEZVTkNUSU9OLCBPUEVSQVRPUixcbiAgRVJST1IsIFNUUklORywgTlVNQkVSLCBCT09MRUFOXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhIHJhbmdlLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIHRoYXQgaGFzIGEgdHlwZSBvZiBlaXRoZXIgUkVGX1JBTkdFXG4gKiAoYEExYCBvciBgQTE6QjJgKSwgUkVGX1RFUk5BUlkgKGBBMTpBYCwgYEExOjFgLCBgMTpBMWAsIG9yIGBBOkExYCksIG9yXG4gKiBSRUZfQkVBTSAoYEE6QWAgb3IgYDE6MWApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gQSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyByYW5nZSwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSYW5nZSAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9SQU5HRSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9CRUFNIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX1RFUk5BUllcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhIHJlZmVyZW5jZS5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIFJFRl9SQU5HRSAoYEExYCBvciBgQTE6QjJgKSxcbiAqIFJFRl9URVJOQVJZIChgQTE6QWAsIGBBMToxYCwgYDE6QTFgLCBvciBgQTpBMWApLCBSRUZfQkVBTSAoYEE6QWAgb3IgYDE6MWApLFxuICogb3IgUkVGX05BTUVEIChgbXlyYW5nZWApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIHJlZmVyZW5jZSwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBSRUZfUkFOR0UgfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfQkVBTSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9URVJOQVJZIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVCB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9OQU1FRFxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGEgbGl0ZXJhbC5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIEJPT0xFQU4gKGBUUlVFYCBvciBgRkFMU0VgKSxcbiAqIEVSUk9SIChgI1ZBTFVFIWApLCBOVU1CRVIgKDEyMy40KSwgb3IgU1RSSU5HIChgXCJsb3JlbSBpcHN1bVwiYCkuIEluIGFsbCBvdGhlclxuICogY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGxpdGVyYWwsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGl0ZXJhbCAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IEJPT0xFQU4gfHxcbiAgICB0b2tlbi50eXBlID09PSBFUlJPUiB8fFxuICAgIHRva2VuLnR5cGUgPT09IE5VTUJFUiB8fFxuICAgIHRva2VuLnR5cGUgPT09IFNUUklOR1xuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGFuIGVycm9yLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgRVJST1IgKGAjVkFMVUUhYCkuIEluIGFsbFxuICogb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGVycm9yLCBGYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yICh0b2tlbikge1xuICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi50eXBlID09PSBFUlJPUjtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyB3aGl0ZXNwYWNlLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgV0hJVEVTUEFDRSAoYCBgKSBvclxuICogTkVXTElORSAoYFxcbmApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIHdoaXRlc3BhY2UsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2hpdGVzcGFjZSAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IFdISVRFU1BBQ0UgfHxcbiAgICB0b2tlbi50eXBlID09PSBORVdMSU5FXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgYSBmdW5jdGlvbi5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIEZVTkNUSU9OLlxuICogSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBmdW5jdGlvbiwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gRlVOQ1RJT047XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBGWF9QUkVGSVggKGxlYWRpbmcgYD1gIGluXG4gKiBmb3JtdWxhKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBlZmZlY3RzIHByZWZpeCwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGeFByZWZpeCAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gRlhfUFJFRklYO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGFuIG9wZXJhdG9yLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgT1BFUkFUT1IgKGArYCBvciBgOmApLiBJbiBhbGxcbiAqIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBvcGVyYXRvciwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPcGVyYXRvciAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gT1BFUkFUT1I7XG59XG4iLCIvKlxuICogRXhjZWwgZm9ybXVsYSBsYW5ndWFnZSBwYXJzZXJcbiAqXG4gKiBUaGlzIHBhcnNlciBpcyBhIFRvcC1Eb3duIE9wZXJhdG9yIFByZWNlZGVuY2UgKFByYXR0KSBwYXJzZXIuIEl0J3MgYmFzZWQgb25cbiAqIHRoZSBvbmUgdGhhdCBEb3VnbGFzIENyb2NrZm9yZCBkZXNjcmliZXMgaW4gQ2hhcHRlciA5IG9mIHRoZSBPJ1JlaWxseSBib29rXG4gKiBCZXV0aWZ1bCBDb2RlIChodHRwOi8vY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L3Rkb3AvdGRvcC5odG1sKS5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhbmRsZXMgbW9zdCBiYXNpYyB0aGluZ3MgRXhjZWwvU2hlZXRzIGRvIGV4Y2VwdDpcbiAqIGBTaGVldDE6U2hlZXQyIUExYCByZWZlcmVuY2VzIGNyb3NzIGNvbnRleHRzICgzRCByZWZlcmVuY2VzKVxuICovXG5pbXBvcnQge1xuICBpc1JlZmVyZW5jZSxcbiAgaXNMaXRlcmFsLFxuICBpc0Z1bmN0aW9uLFxuICBpc1doaXRlc3BhY2UsXG4gIGlzRnhQcmVmaXgsXG4gIGlzT3BlcmF0b3IsXG4gIGlzRXJyb3Jcbn0gZnJvbSAnLi9pc1R5cGUuanMnO1xuaW1wb3J0IHtcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUl9MSVRFUkFMLFxuICBDQUxMLFxuICBMQU1CREEsXG4gIEFSUkFZLFxuICBJREVOVElGSUVSLFxuICBOVU1CRVIsXG4gIEJPT0xFQU4sXG4gIEVSUk9SLFxuICBTVFJJTkcsXG4gIExFVCxcbiAgTEVUX0RFQ0wsXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1NUUlVDVCxcbiAgUkVGX0JFQU1cbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5pbXBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuXG5jb25zdCBFTkQgPSAnKEVORCknO1xuY29uc3QgRlVOQ1RJT04gPSAnKEZVTkNUSU9OKSc7XG5jb25zdCBXSElURVNQQUNFID0gJyhXSElURVNQQUNFKSc7XG5cbmNvbnN0IHJlZkZ1bmN0aW9ucyA9IFtcbiAgJ0FOQ0hPUkFSUkFZJyxcbiAgJ0NIT09TRScsXG4gICdEUk9QJyxcbiAgJ0lGJyxcbiAgJ0lGUycsXG4gICdJTkRFWCcsXG4gICdJTkRJUkVDVCcsXG4gICdMQU1CREEnLFxuICAnTEVUJyxcbiAgJ09GRlNFVCcsXG4gICdSRURVQ0UnLFxuICAnU0lOR0xFJyxcbiAgJ1NXSVRDSCcsXG4gICdUQUtFJyxcbiAgJ1RSSU1SQU5HRScsXG4gICdYTE9PS1VQJ1xuXTtcblxuY29uc3QgaXNSZWZlcmVuY2VGdW5jdGlvbk5hbWUgPSBmbk5hbWUgPT4ge1xuICByZXR1cm4gcmVmRnVuY3Rpb25zLmluY2x1ZGVzKGZuTmFtZS50b1VwcGVyQ2FzZSgpKTtcbn07XG5cbmNvbnN0IGlzUmVmZXJlbmNlVG9rZW4gPSAodG9rZW4sIGFsbG93T3BlcmF0b3JzID0gZmFsc2UpID0+IHtcbiAgY29uc3QgdmFsdWUgPSAodG9rZW4gJiYgdG9rZW4udmFsdWUpICsgJyc7XG4gIGlmIChpc1JlZmVyZW5jZSh0b2tlbikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYWxsb3dPcGVyYXRvcnMgJiYgaXNPcGVyYXRvcih0b2tlbikgJiYgKHZhbHVlID09PSAnOicgfHwgdmFsdWUgPT09ICcsJyB8fCAhdmFsdWUudHJpbSgpKSkge1xuICAgIHJldHVybiB0cnVlOyAvLyBqb2luLCB1bmlvbiwgaW50ZXJzZWN0aW9uXG4gIH1cbiAgaWYgKGlzRnVuY3Rpb24odG9rZW4pICYmIGlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlOyAvLyBmdW5jdGlvbiB0aGF0IHlpZWxkcyByZWZlcmVuY2VcbiAgfVxuICBpZiAoaXNFcnJvcih0b2tlbikgJiYgdmFsdWUgPT09ICcjUkVGIScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBpc1JlZmVyZW5jZU5vZGUgPSBub2RlID0+IHtcbiAgcmV0dXJuICghIW5vZGUpICYmIChcbiAgICAobm9kZS50eXBlID09PSBSRUZFUkVOQ0UpIHx8XG4gICAgKChub2RlLnR5cGUgPT09IEVSUk9SX0xJVEVSQUwgfHwgbm9kZS50eXBlID09PSBFUlJPUikgJiYgbm9kZS52YWx1ZSA9PT0gJyNSRUYhJykgfHxcbiAgICAobm9kZS50eXBlID09PSBCSU5BUlkgJiYgKFxuICAgICAgbm9kZS5vcGVyYXRvciA9PT0gJzonIHx8XG4gICAgICBub2RlLm9wZXJhdG9yID09PSAnICcgfHxcbiAgICAgIG5vZGUub3BlcmF0b3IgPT09ICcsJylcbiAgICApIHx8XG4gICAgaXNSZWZlcmVuY2Uobm9kZSkgfHxcbiAgICAobm9kZS50eXBlID09PSBDQUxMICYmIGlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lKG5vZGUuY2FsbGVlLm5hbWUpKVxuICApO1xufTtcblxuY29uc3Qgc3ltYm9sVGFibGUgPSB7fTtcbmxldCBjdXJyZW50Tm9kZTtcbmxldCB0b2tlbnM7XG5sZXQgdG9rZW5JbmRleDtcbmxldCBwZXJtaXRBcnJheVJhbmdlcyA9IGZhbHNlO1xubGV0IHBlcm1pdEFycmF5Q2FsbHMgPSBmYWxzZTtcblxuZnVuY3Rpb24gaGFsdCAobWVzc2FnZSwgYXRJbmRleCA9IG51bGwpIHtcbiAgY29uc3QgZXJyID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnIuc291cmNlID0gdG9rZW5zLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpO1xuICBlcnIuc291cmNlT2Zmc2V0ID0gdG9rZW5zXG4gICAgLnNsaWNlKDAsIGF0SW5kZXggPz8gdG9rZW5JbmRleClcbiAgICAucmVkdWNlKChhLCBkKSA9PiBhICsgZC52YWx1ZS5sZW5ndGgsIDApO1xuICB0aHJvdyBlcnI7XG59XG5cbi8vIEExIEExIHwgQTEgKEExKSB8IEExICgoQTEpKSB8IEExICggKEExKSApIHwgLi4uXG5mdW5jdGlvbiByZWZJc1VwY29taW5nIChhbGxvd09wZXJhdG9ycyA9IGZhbHNlKSB7XG4gIGxldCBpID0gdG9rZW5JbmRleDtcbiAgbGV0IG5leHQ7XG4gIGRvIHtcbiAgICBuZXh0ID0gdG9rZW5zWysraV07XG4gIH1cbiAgd2hpbGUgKFxuICAgIG5leHQgJiYgKFxuICAgICAgaXNXaGl0ZXNwYWNlKG5leHQpIHx8XG4gICAgICAoaXNPcGVyYXRvcihuZXh0KSAmJiBuZXh0LnZhbHVlID09PSAnKCcpXG4gICAgKVxuICApO1xuICByZXR1cm4gaXNSZWZlcmVuY2VUb2tlbihuZXh0LCBhbGxvd09wZXJhdG9ycyk7XG59XG5cbmZ1bmN0aW9uIGFkdmFuY2UgKGV4cGVjdE5leHQgPSBudWxsLCBsZWZ0Tm9kZSA9IG51bGwpIHtcbiAgaWYgKGV4cGVjdE5leHQgJiYgZXhwZWN0TmV4dCAhPT0gY3VycmVudE5vZGUuaWQpIHtcbiAgICBoYWx0KGBFeHBlY3RlZCAke2V4cGVjdE5leHR9IGJ1dCBnb3QgJHtjdXJyZW50Tm9kZS5pZH1gKTtcbiAgfVxuICAvLyBsb29rIGFoZWFkIHRvIHNlZSBpZiB3ZSBoYXZlICggKCBcIiBcIiwgXCIoXCIgKSsgUkVGIClcbiAgaWYgKGlzV2hpdGVzcGFjZSh0b2tlbnNbdG9rZW5JbmRleF0pKSB7XG4gICAgLy8gcG90ZW50aWFsIGludGVyc2VjdGlvbiBvcGVyYXRpb24gKHNvIGRvbid0IGFsbG93IG9wZXJhdG9ycyBhcyB1cGNvbWluZylcbiAgICBjb25zdCBoYXZlUmVmID0gaXNSZWZlcmVuY2VOb2RlKGxlZnROb2RlKTtcbiAgICBjb25zdCBwb3NzaWJsZVdTT3AgPSBoYXZlUmVmICYmIHJlZklzVXBjb21pbmcoZmFsc2UpO1xuICAgIGNvbnN0IG5leHRJc0NhbGwgPSBoYXZlUmVmICYmIHRva2Vuc1t0b2tlbkluZGV4ICsgMV0gJiYgdG9rZW5zW3Rva2VuSW5kZXggKyAxXS52YWx1ZSA9PT0gJygnO1xuICAgIGlmICghcG9zc2libGVXU09wICYmICFuZXh0SXNDYWxsKSB7XG4gICAgICAvLyBpZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgd2hpbGUgKGlzV2hpdGVzcGFjZSh0b2tlbnNbdG9rZW5JbmRleF0pKSB7XG4gICAgICAgIHRva2VuSW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gRU9UXG4gIGlmICh0b2tlbkluZGV4ID49IHRva2Vucy5sZW5ndGgpIHtcbiAgICBjdXJyZW50Tm9kZSA9IHN5bWJvbFRhYmxlW0VORF07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdG9rZW4gPSB0b2tlbnNbdG9rZW5JbmRleF07XG4gIHRva2VuSW5kZXggKz0gMTtcblxuICBpZiAodG9rZW4udW50ZXJtaW5hdGVkKSB7XG4gICAgaGFsdCgnRW5jb3VudGVyZWQgYW4gdW50ZXJtaW5hdGVkIHRva2VuJyk7XG4gIH1cblxuICBsZXQgbm9kZTtcbiAgaWYgKGlzT3BlcmF0b3IodG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW3Rva2VuLnZhbHVlXTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGhhbHQoYFVua25vd24gb3BlcmF0b3IgJHt0b2tlbi52YWx1ZX1gKTtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtXSElURVNQQUNFXTtcbiAgfVxuICBlbHNlIGlmIChpc0xpdGVyYWwodG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW0xJVEVSQUxdO1xuICB9XG4gIGVsc2UgaWYgKGlzUmVmZXJlbmNlKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtSRUZFUkVOQ0VdO1xuICB9XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW0ZVTkNUSU9OXTtcbiAgfVxuICBlbHNlIHtcbiAgICBoYWx0KGBVbmV4cGVjdGVkICR7dG9rZW4udHlwZX0gdG9rZW46ICR7dG9rZW4udmFsdWV9YCk7XG4gIH1cblxuICBjdXJyZW50Tm9kZSA9IE9iamVjdC5jcmVhdGUobm9kZSk7XG4gIGN1cnJlbnROb2RlLnR5cGUgPSB0b2tlbi50eXBlO1xuICBjdXJyZW50Tm9kZS52YWx1ZSA9IHRva2VuLnZhbHVlO1xuICBpZiAodG9rZW4ubG9jKSB7XG4gICAgY3VycmVudE5vZGUubG9jID0gWyAuLi50b2tlbi5sb2MgXTtcbiAgfVxuICByZXR1cm4gY3VycmVudE5vZGU7XG59XG5cbmZ1bmN0aW9uIGV4cHJlc3Npb24gKHJicCkge1xuICBsZXQgdCA9IGN1cnJlbnROb2RlO1xuICBhZHZhbmNlKG51bGwsIHQpO1xuICBsZXQgbGVmdCA9IHQubnVkKCk7XG4gIHdoaWxlIChyYnAgPCBjdXJyZW50Tm9kZS5sYnApIHtcbiAgICB0ID0gY3VycmVudE5vZGU7XG4gICAgYWR2YW5jZShudWxsLCB0KTtcbiAgICBsZWZ0ID0gdC5sZWQobGVmdCk7XG4gIH1cbiAgcmV0dXJuIGxlZnQ7XG59XG5cbmNvbnN0IG9yaWdpbmFsX3N5bWJvbCA9IHtcbiAgLy8gbnVsbCBkZW5vdGF0aW9uXG4gIG51ZDogKCkgPT4gaGFsdCgnSW52YWxpZCBzeW50YXgnKSwgLy8gVW5kZWZpbmVkXG4gIC8vIGxlZnQgZGVub3RhdGlvblxuICBsZWQ6ICgpID0+IGhhbHQoJ01pc3Npbmcgb3BlcmF0b3InKVxufTtcblxuLy8gYnAgPSBiaW5kaW5nIHBvd2VyXG5mdW5jdGlvbiBzeW1ib2wgKGlkLCBicCA9IDApIHtcbiAgbGV0IHMgPSBzeW1ib2xUYWJsZVtpZF07XG4gIGlmIChzKSB7XG4gICAgaWYgKGJwID49IHMubGJwKSB7XG4gICAgICBzLmxicCA9IGJwO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBzID0geyAuLi5vcmlnaW5hbF9zeW1ib2wgfTtcbiAgICBzLmlkID0gaWQ7XG4gICAgcy52YWx1ZSA9IGlkO1xuICAgIHMubGJwID0gYnA7XG4gICAgc3ltYm9sVGFibGVbaWRdID0gcztcbiAgfVxuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gaW5maXggKGlkLCBicCwgbGVkKSB7XG4gIGNvbnN0IHMgPSBzeW1ib2woaWQsIGJwKTtcbiAgcy5sZWQgPSBsZWQgfHwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgICB0aGlzLnR5cGUgPSBCSU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgY29uc3QgcmlnaHQgPSBleHByZXNzaW9uKGJwKTtcbiAgICB0aGlzLmFyZ3VtZW50cyA9IFsgbGVmdCwgcmlnaHQgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgcmlnaHQubG9jWzFdIF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcG9zdGZpeCAoaWQsIGxlZCkge1xuICBjb25zdCBzID0gc3ltYm9sKGlkLCAwKTtcbiAgcy5sYnAgPSA3MDtcbiAgcy5sZWQgPSBsZWQgfHwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgICB0aGlzLnR5cGUgPSBVTkFSWTtcbiAgICB0aGlzLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICB0aGlzLmFyZ3VtZW50cyA9IFsgbGVmdCBdO1xuICAgIGlmICh0aGlzLmxvYykge1xuICAgICAgdGhpcy5sb2NbMF0gPSBsZWZ0LmxvY1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBwcmVmaXggKGlkLCBudWQpIHtcbiAgY29uc3QgcyA9IHN5bWJvbChpZCk7XG4gIHMubnVkID0gbnVkIHx8IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnR5cGUgPSBVTkFSWTtcbiAgICB0aGlzLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICBjb25zdCBzdWJleHByID0gZXhwcmVzc2lvbig3MCk7XG4gICAgdGhpcy5hcmd1bWVudHMgPSBbIHN1YmV4cHIgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jWzFdID0gc3ViZXhwci5sb2NbMV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZpeCAoaWQsIGJwKSB7XG4gIHJldHVybiBpbmZpeChpZCwgYnAsIGZ1bmN0aW9uIChsZWZ0KSB7XG4gICAgaWYgKCFpc1JlZmVyZW5jZU5vZGUobGVmdCkpIHtcbiAgICAgIGhhbHQoYFVuZXhwZWN0ZWQgJHtpZH0gb3BlcmF0b3JgKTtcbiAgICB9XG4gICAgY29uc3QgcmlnaHQgPSBleHByZXNzaW9uKGJwKTtcbiAgICBpZiAoIWlzUmVmZXJlbmNlTm9kZShyaWdodCwgdHJ1ZSkpIHtcbiAgICAgIGhhbHQoYFVuZXhwZWN0ZWQgJHtjdXJyZW50Tm9kZS50eXBlfSBmb2xsb3dpbmcgJHt0aGlzLmlkfWApO1xuICAgIH1cbiAgICB0aGlzLnR5cGUgPSBCSU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWUudHJpbSgpID8gdGhpcy52YWx1ZSA6ICcgJzsgLy8gaGFjayBhcm91bmQgd2hpdGVzcGFjZSBvcFxuICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgIHRoaXMuYXJndW1lbnRzID0gWyBsZWZ0LCByaWdodCBdO1xuICAgIGlmICh0aGlzLmxvYykge1xuICAgICAgdGhpcy5sb2MgPSBbIGxlZnQubG9jWzBdLCByaWdodC5sb2NbMV0gXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5zeW1ib2woRU5EKTtcblxuLy8gcmVmZXJlbmNlIG9wZXJhdG9yc1xucmFuZ2VJbmZpeCgnOicsIDgwKTsgLy8gcmFuZ2Ugam9pbi9leHRlbmQgPUI3Ok9GRlNFVChBMSwxMCwxMClcbmNvbnN0IGNvbW1hID0gcmFuZ2VJbmZpeCgnLCcsIDgwKTsgLy8gdW5pb24gPUI3OkQ3LEM2OkM4XG5yYW5nZUluZml4KFdISVRFU1BBQ0UsIDgwKTsgLy8gaW50ZXJzZWN0OiA9Qjc6RDcgQzY6QzhcblxuLy8gRXhjZWwncyBncmFtbWFyIGlzIGFtYmlndW91cy4gVGhpcyB0dXJucyB0aGUgLCBvcGVyYXRvcidzIGxlZnQgYmluZGluZ1xuLy8gcG93ZXIgb24vb2ZmIHdoaWNoIGFsbG93cyB1cyB0byB0cmVhdCAsIGFzIGEgc3ltYm9sIHdoZXJlIHdlIG5lZWQuXG5jb25zdCB1bmlvblJlZnMgPSBlbmFibGUgPT4ge1xuICBjb25zdCBjdXJyU3RhdGUgPSBjb21tYS5sYnAgPiAwO1xuICBpZiAoZW5hYmxlICE9IG51bGwpIHsgY29tbWEubGJwID0gZW5hYmxlID8gODAgOiAwOyB9XG4gIHJldHVybiBjdXJyU3RhdGU7XG59O1xuXG4vLyBhcml0aG1ldGljIGFuZCBzdHJpbmcgb3BlcmF0aW9uc1xucG9zdGZpeCgnJScpOyAvLyBwZXJjZW50XG5wb3N0Zml4KCcjJywgZnVuY3Rpb24gKGxlZnQpIHsgLy8gc3BpbGxlZCByYW5nZSAoX3hsZm4uQU5DSE9SQVJSQVkpXG4gIGlmICghaXNSZWZlcmVuY2VOb2RlKGxlZnQpKSB7XG4gICAgaGFsdCgnIyBleHBlY3RzIGEgcmVmZXJlbmNlJyk7XG4gIH1cbiAgdGhpcy50eXBlID0gVU5BUlk7XG4gIHRoaXMub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy5hcmd1bWVudHMgPSBbIGxlZnQgXTtcbiAgcmV0dXJuIHRoaXM7XG59KTsgLy8gcmFuZ2VcbnByZWZpeCgnKycpOyAvLyB1bmFyeSBwbHVzXG5wcmVmaXgoJy0nKTsgLy8gdW5hcnkgbWludXNcbnByZWZpeCgnQCcpOyAvLyBpbXBsaWNpdCBpbnRlcnNlY3Rpb24gKF94bGZuLlNJTkdMRSlcbmluZml4KCdeJywgNTApOyAvLyBwb3dlclxuaW5maXgoJyonLCA0MCk7IC8vIG11bHRpcGx5XG5pbmZpeCgnLycsIDQwKTsgLy8gZGl2aWRlXG5pbmZpeCgnKycsIDMwKTsgLy8gYWRkXG5pbmZpeCgnLScsIDMwKTsgLy8gc3VidHJhY3RcbmluZml4KCcmJywgMjApOyAvLyB0ZXh0IGNvbmNhdFxuXG4vLyBjb21wYXJpc29uXG5pbmZpeCgnPScsIDEwKTtcbmluZml4KCc8JywgMTApO1xuaW5maXgoJz4nLCAxMCk7XG5pbmZpeCgnPD0nLCAxMCk7XG5pbmZpeCgnPj0nLCAxMCk7XG5pbmZpeCgnPD4nLCAxMCk7XG5zeW1ib2woTElURVJBTCkubnVkID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSB0aGlzO1xuICB0aGlzLnR5cGUgPSBMSVRFUkFMO1xuICB0aGlzLnJhdyA9IHZhbHVlO1xuICBpZiAodHlwZSA9PT0gTlVNQkVSKSB7XG4gICAgdGhpcy52YWx1ZSA9ICt2YWx1ZTtcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSBCT09MRUFOKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdUUlVFJztcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSBFUlJPUikge1xuICAgIHRoaXMudHlwZSA9IEVSUk9SX0xJVEVSQUw7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gU1RSSU5HKSB7XG4gICAgLy8gRklYTUU6IHRocm93IGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgaXMgdW50ZXJtaW5hdGVkXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC9cIlwiL2csICdcIicpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbGl0ZXJhbCB0eXBlOiAnICsgdHlwZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuc3ltYm9sKFJFRkVSRU5DRSkubnVkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy50eXBlID09PSBSRUZfTkFNRUQpIHtcbiAgICB0aGlzLmtpbmQgPSAnbmFtZSc7XG4gIH1cbiAgZWxzZSBpZiAodGhpcy50eXBlID09PSBSRUZfU1RSVUNUKSB7XG4gICAgdGhpcy5raW5kID0gJ3RhYmxlJzsgLy8gc3RydWN0dXJlZCA/XG4gIH1cbiAgZWxzZSBpZiAodGhpcy50eXBlID09PSBSRUZfQkVBTSkge1xuICAgIHRoaXMua2luZCA9ICdiZWFtJztcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLmtpbmQgPSAncmFuZ2UnO1xuICB9XG4gIHRoaXMudHlwZSA9IFJFRkVSRU5DRTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBwYXJlbnNcbnN5bWJvbCgnKScpO1xucHJlZml4KCcoJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnModHJ1ZSk7XG4gIGNvbnN0IGUgPSBleHByZXNzaW9uKDApO1xuICBhZHZhbmNlKCcpJywgZSk7XG4gIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICByZXR1cm4gZTtcbn0pO1xuXG4vLyBmdW5jdGlvbiBjYWxsXG5zeW1ib2woRlVOQ1RJT04pLm51ZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuaW5maXgoJygnLCA5MCwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgbGV0IGNhbGxlZSA9IHtcbiAgICB0eXBlOiBJREVOVElGSUVSLFxuICAgIG5hbWU6IGxlZnQudmFsdWVcbiAgfTtcbiAgaWYgKGxlZnQuaWQgIT09IEZVTkNUSU9OKSB7XG4gICAgaWYgKFxuICAgICAgbGVmdC50eXBlID09PSBMQU1CREEgfHxcbiAgICAgIC8vIEV4Y2VsIG9ubHkgYWxsb3dzIGNhbGxzIHRvIFwibmFtZXNcIiBhbmQgcmVmIGZ1bmN0aW9ucy4gU2luY2Ugd2UgZG9uJ3RcbiAgICAgIC8vIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgdHdvICh0aGlzIHJlcXVpcmVzIGEgdGFibGUgb2YgZnVuY3Rpb24gbmFtZXMpXG4gICAgICAvLyB3ZSdyZSBvdmVybHkgcGVybWlzc2l2ZSBoZXJlOlxuICAgICAgbGVmdC50eXBlID09PSBDQUxMIHx8XG4gICAgICBsZWZ0LnR5cGUgPT09IExFVCB8fFxuICAgICAgbGVmdC50eXBlID09PSBSRUZFUkVOQ0UgfHxcbiAgICAgIChsZWZ0LnR5cGUgPT09IFVOQVJZICYmIGxlZnQudmFsdWUgPT09ICcjJykgfHwgLy8gQmVjYXVzZSBpdCdzIHJlYWxseSBTSU5HTEUoLi4uKSgpXG4gICAgICAobGVmdC50eXBlID09PSBFUlJPUl9MSVRFUkFMICYmIGxlZnQudmFsdWUgPT09ICcjUkVGIScpXG4gICAgKSB7XG4gICAgICAvLyBpbiB0aGUgY2FzZSBvZiBSRUZFUkVOQ0UsIGRvIHdlIHdhbnQgdG8gc2V0IHRoZSBub2RlIHRvIElkZW50aWZpZXI/XG4gICAgICBjYWxsZWUgPSBsZWZ0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGhhbHQoJ1VuZXhwZWN0ZWQgY2FsbCcsIHRva2VuSW5kZXggLSAxKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbGNGbiA9IGxlZnQudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGxjRm4gPT09ICdsYW1iZGEnKSB7XG4gICAgcmV0dXJuIHBhcnNlTGFtYmRhLmNhbGwodGhpcywgbGVmdCk7XG4gIH1cbiAgaWYgKGxjRm4gPT09ICdsZXQnKSB7XG4gICAgcmV0dXJuIHBhcnNlTGV0LmNhbGwodGhpcywgbGVmdCk7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtdO1xuICBsZXQgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgY29uc3QgcHJldlN0YXRlID0gdW5pb25SZWZzKGZhbHNlKTtcbiAgICB3aGlsZSAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgICAgaWYgKGlzV2hpdGVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgICAgYXJncy5wdXNoKG51bGwpO1xuICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgIGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICAgIGFkdmFuY2UoJywnKTtcbiAgICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICB9XG4gIGlmIChsYXN0V2FzQ29tbWEpIHtcbiAgICBhcmdzLnB1c2gobnVsbCk7XG4gIH1cbiAgY29uc3QgY2xvc2VQYXJlbiA9IGN1cnJlbnROb2RlO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy50eXBlID0gQ0FMTDtcbiAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMuY2FsbGVlLmxvYyA9IFsgLi4ubGVmdC5sb2MgXTtcbiAgfVxuICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgY2xvc2VQYXJlbi5sb2NbMV0gXTtcbiAgfVxuICBhZHZhbmNlKCcpJywgdGhpcyk7XG4gIHJldHVybiB0aGlzO1xufSk7XG5cbmZ1bmN0aW9uIHBhcnNlTGFtYmRhIChsZWZ0KSB7XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgY29uc3QgYXJnTmFtZXMgPSB7fTtcbiAgbGV0IGJvZHk7XG4gIGxldCBkb25lID0gZmFsc2U7XG4gIGNvbnN0IHByZXZTdGF0ZSA9IHVuaW9uUmVmcyhmYWxzZSk7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICBpZiAoaXNXaGl0ZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcmdUb2tlbkluZGV4ID0gdG9rZW5JbmRleDtcbiAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICAvLyBhbGwgYnV0IGxhc3QgYXJncyBtdXN0IGJlIG5hbWVzXG4gICAgICAgIGlmIChhcmcudHlwZSA9PT0gUkVGRVJFTkNFICYmIGFyZy5raW5kID09PSAnbmFtZScpIHtcbiAgICAgICAgICAvLyBuYW1lcyBtYXkgbm90IGJlIGR1cGxpY2F0ZXNcbiAgICAgICAgICBjb25zdCBjdXJyTmFtZSA9IGFyZy52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChjdXJyTmFtZSBpbiBhcmdOYW1lcykge1xuICAgICAgICAgICAgaGFsdCgnRHVwbGljYXRlIG5hbWU6ICcgKyBhcmcudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcmdOYW1lc1tjdXJyTmFtZV0gPSAxO1xuICAgICAgICAgIGNvbnN0IGEgPSB7IHR5cGU6IElERU5USUZJRVIsIG5hbWU6IGFyZy52YWx1ZSB9O1xuICAgICAgICAgIGlmIChhcmcubG9jKSB7IGEubG9jID0gYXJnLmxvYzsgfVxuICAgICAgICAgIGFyZ3MucHVzaChhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0b2tlbkluZGV4ID0gYXJnVG9rZW5JbmRleDtcbiAgICAgICAgICBoYWx0KCdMQU1CREEgYXJndW1lbnQgaXMgbm90IGEgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIGFkdmFuY2UoJywnKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBib2R5ID0gYXJnO1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdW5pb25SZWZzKHByZXZTdGF0ZSk7XG4gIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICB0aGlzLnR5cGUgPSBMQU1CREE7XG4gIHRoaXMucGFyYW1zID0gYXJncztcbiAgdGhpcy5ib2R5ID0gYm9keSB8fCBudWxsO1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIGN1cnJlbnROb2RlLmxvY1sxXSBdO1xuICB9XG4gIGFkdmFuY2UoJyknLCB0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGV0IChsZWZ0KSB7XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgY29uc3QgdmFscyA9IFtdO1xuICBjb25zdCBhcmdOYW1lcyA9IHt9O1xuICBsZXQgYm9keTtcbiAgbGV0IGFyZ0NvdW50ZXIgPSAwO1xuICBjb25zdCBhZGRBcmd1bWVudCA9IChhcmcsIGxhc3RBcmcpID0+IHtcbiAgICBpZiAoYm9keSkge1xuICAgICAgaGFsdCgnVW5leHBlY3RlZCBhcmd1bWVudCBmb2xsb3dpbmcgY2FsY3VsYXRpb24nKTtcbiAgICB9XG4gICAgaWYgKGxhc3RBcmcgJiYgYXJnQ291bnRlciA+PSAyKSB7XG4gICAgICBib2R5ID0gYXJnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHdhbnROYW1lID0gIShhcmdDb3VudGVyICUgMik7XG4gICAgICBpZiAod2FudE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZyAmJiAoYXJnLnR5cGUgPT09IFJFRkVSRU5DRSAmJiBhcmcua2luZCA9PT0gJ25hbWUnKSkge1xuICAgICAgICAgIC8vIG5hbWVzIG1heSBub3QgYmUgZHVwbGljYXRlc1xuICAgICAgICAgIGNvbnN0IGN1cnJOYW1lID0gYXJnLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGN1cnJOYW1lIGluIGFyZ05hbWVzKSB7XG4gICAgICAgICAgICBoYWx0KCdEdXBsaWNhdGUgbmFtZTogJyArIGFyZy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFyZ05hbWVzW2N1cnJOYW1lXSA9IDE7XG4gICAgICAgICAgYXJncy5wdXNoKHsgdHlwZTogSURFTlRJRklFUiwgbmFtZTogYXJnLnZhbHVlLCBsb2M6IGFyZy5sb2MgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJnQ291bnRlciA+PSAyKSB7XG4gICAgICAgICAgYm9keSA9IGFyZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBoYWx0KCdBcmd1bWVudCBpcyBub3QgYSBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YWxzLnB1c2goYXJnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXJnQ291bnRlcisrO1xuICB9O1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnMoZmFsc2UpO1xuICBsZXQgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlLmlkICE9PSAnKScpIHtcbiAgICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICAgIGFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJywnKSB7XG4gICAgICAgIGFkZEFyZ3VtZW50KG51bGwpO1xuICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgICAgYWRkQXJndW1lbnQoYXJnLCBjdXJyZW50Tm9kZS5pZCAhPT0gJywnKTtcbiAgICAgICAgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJywnKSB7XG4gICAgICAgICAgYWR2YW5jZSgnLCcpO1xuICAgICAgICAgIGxhc3RXYXNDb21tYSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdW5pb25SZWZzKHByZXZTdGF0ZSk7XG4gIH1cbiAgaWYgKGxhc3RXYXNDb21tYSkge1xuICAgIGFkZEFyZ3VtZW50KG51bGwsIHRydWUpO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIGhhbHQoJ1VuZXhwZWN0ZWQgZW5kIG9mIGFyZ3VtZW50cycpO1xuICB9XG4gIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy50eXBlID0gTEVUO1xuICB0aGlzLmRlY2xhcmF0aW9ucyA9IFtdO1xuICBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgaGFsdCgnVW5leHBlY3RlZCBlbmQgb2YgYXJndW1lbnRzJyk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcyA9IHtcbiAgICAgIHR5cGU6IExFVF9ERUNMLFxuICAgICAgaWQ6IGFyZ3NbaV0sXG4gICAgICBpbml0OiB2YWxzW2ldLFxuICAgICAgbG9jOiBhcmdzW2ldLmxvYyAmJiBbIGFyZ3NbaV0ubG9jWzBdLCB2YWxzW2ldLmxvY1sxXSBdXG4gICAgfTtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy5wdXNoKHMpO1xuICB9XG4gIHRoaXMuYm9keSA9IGJvZHk7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgY3VycmVudE5vZGUubG9jWzFdIF07XG4gIH1cbiAgYWR2YW5jZSgnKScsIHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gYXJyYXkgbGl0ZXJhbFxuc3ltYm9sKCd9Jyk7XG5zeW1ib2woJzsnKTtcbnByZWZpeCgneycsIGZ1bmN0aW9uICgpIHtcbiAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnfScpIHsgLy8gYXJyYXlzIG11c3Qgbm90IGJlIGVtcHR5XG4gICAgaGFsdCgnVW5leHBlY3RlZCBlbXB0eSBhcnJheScpO1xuICB9XG4gIGxldCByb3cgPSBbXTtcbiAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgY29uc3Qgcm93cyA9IFsgcm93IF07XG4gIGNvbnN0IHByZXZTdGF0ZSA9IHVuaW9uUmVmcyhmYWxzZSk7XG4gIHdoaWxlICghZG9uZSkge1xuICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICBhZHZhbmNlKCk7XG4gICAgfVxuICAgIC8vIGFycmF5cyBhbGxvdyBvbmx5IGxpdGVyYWxzLCByYW5nZXMgKGluIEdTaGVldHMpIGFuZCAsOzogb3BlcmF0b3JzLlxuICAgIC8vIEZJWE1FOiBpZiB7IG5lZ2F0aXZlTnVtYmVyczogZmFsc2UgfSB3ZSBtdXN0IGNvbnN1bWUgbWludXNlcyBhcyB3ZWxsLlxuICAgIC8vIEV4Y2VsIGFsbG93cyA9ey0xfSBidXQgbm90ID17KC0xKX0gYW5kID17MSV9XG4gICAgaWYgKGlzTGl0ZXJhbChjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJvdy5wdXNoKHN5bWJvbFRhYmxlW0xJVEVSQUxdLm51ZC5jYWxsKGN1cnJlbnROb2RlKSk7XG4gICAgICBhZHZhbmNlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBlcm1pdEFycmF5UmFuZ2VzICYmIGlzUmVmZXJlbmNlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJvdy5wdXNoKHN5bWJvbFRhYmxlW1JFRkVSRU5DRV0ubnVkLmNhbGwoY3VycmVudE5vZGUpKTtcbiAgICAgIGFkdmFuY2UoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGVybWl0QXJyYXlDYWxscyAmJiBpc0Z1bmN0aW9uKGN1cnJlbnROb2RlKSkge1xuICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgIHJvdy5wdXNoKGFyZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaGFsdChgVW5leHBlY3RlZCAke2N1cnJlbnROb2RlLnR5cGV9IGluIGFycmF5OiAke2N1cnJlbnROb2RlLnZhbHVlfWApO1xuICAgIH1cbiAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgLy8gbmV4dCBpdGVtXG4gICAgICBhZHZhbmNlKCcsJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnOycpIHtcbiAgICAgIC8vIG5leHQgcm93XG4gICAgICBhZHZhbmNlKCc7Jyk7XG4gICAgICByb3cgPSBbXTtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBjb25zdCBjbG9zaW5nQnJhY2UgPSBjdXJyZW50Tm9kZTtcbiAgYWR2YW5jZSgnfScpO1xuICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgdGhpcy50eXBlID0gQVJSQVk7XG4gIHRoaXMuZWxlbWVudHMgPSByb3dzO1xuICBpZiAodGhpcy5sb2MpIHtcbiAgICB0aGlzLmxvY1sxXSA9IGNsb3NpbmdCcmFjZS5sb2NbMV07XG4gIH1cbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHJldHVybiB0aGlzO1xufSk7XG5cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIGZvcm11bGEgb3IgbGlzdCBvZiB0b2tlbnMgaW50byBhbiBBU1QuXG4gKlxuICogVGhlIHBhcnNlciByZXF1aXJlcyBgbWVyZ2VSZWZzYCB0byBoYXZlIGJlZW4gYHRydWVgIGluIHRva2VubGlzdCBvcHRpb25zLFxuICogYmVjYXVzZSBpdCBkb2VzIG5vdCByZWNvZ25pemUgcmVmZXJlbmNlIGNvbnRleHQgdG9rZW5zLlxuICpcbiAqIFRoZSBBU1QgQWJzdHJhY3QgU3ludGF4IFRyZWUncyBmb3JtYXQgaXMgZG9jdW1lbnRlZCBpblxuICogW0FTVF9mb3JtYXQubWRdKC4vQVNUX2Zvcm1hdC5tZClcbiAqXG4gKiBAc2VlIG5vZGVUeXBlc1xuICogQHBhcmFtIHsoc3RyaW5nIHwgVG9rZW5bXSl9IGZvcm11bGEgQW4gRXhjZWwgZm9ybXVsYSBzdHJpbmcgKGFuIEV4Y2VsIGV4cHJlc3Npb24pIG9yIGFuIGFycmF5IG9mIHRva2Vucy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5uZWdhdGl2ZU51bWJlcnM9dHJ1ZV0gIE1lcmdlcyB1bmFyeSBtaW51c2VzIHdpdGggdGhlaXIgaW1tZWRpYXRlbHkgZm9sbG93aW5nIG51bWJlciB0b2tlbnMgKGAtYCxgMWApID0+IGAtMWAgKGFsdGVybmF0aXZlbHkgdGhlc2Ugd2lsbCBiZSB1bmFyeSBvcGVyYXRpb25zIGluIHRoZSB0cmVlKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGVybWl0QXJyYXlSYW5nZXM9ZmFsc2VdICBSYW5nZXMgYXJlIGFsbG93ZWQgYXMgZWxlbWVudHMgb2YgYXJyYXlzLiBUaGlzIGlzIGEgZmVhdHVyZSBpbiBHb29nbGUgU2hlZXRzIHdoaWxlIEV4Y2VsIGRvZXMgbm90IGFsbG93IGl0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wZXJtaXRBcnJheUNhbGxzPWZhbHNlXSAgRnVuY3Rpb24gY2FsbHMgYXJlIGFsbG93ZWQgYXMgZWxlbWVudHMgb2YgYXJyYXlzLiBUaGlzIGlzIGEgZmVhdHVyZSBpbiBHb29nbGUgU2hlZXRzIHdoaWxlIEV4Y2VsIGRvZXMgbm90IGFsbG93IGl0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yMWMxPWZhbHNlXSAgUmFuZ2VzIGFyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgUjFDMSBzdHlsZSBmb3JtYXQgcmF0aGVyIHRoYW4gdGhlIG1vcmUgcG9wdWxhciBBMSBzdHlsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMud2l0aExvY2F0aW9uPWZhbHNlXSAgTm9kZXMgd2lsbCBpbmNsdWRlIHNvdXJjZSBwb3NpdGlvbiBvZmZzZXRzIHRvIHRoZSB0b2tlbnM6IGB7IGxvYzogWyBzdGFydCwgZW5kIF0gfWBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtBc3RFeHByZXNzaW9ufSBBbiBBU1Qgb2Ygbm9kZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlIChmb3JtdWxhLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm9ybXVsYSA9PT0gJ3N0cmluZycpIHtcbiAgICB0b2tlbnMgPSB0b2tlbml6ZShmb3JtdWxhLCB7XG4gICAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1lcmdlUmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZm9ybXVsYSkpIHtcbiAgICB0b2tlbnMgPSBmb3JtdWxhO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyc2UgcmVxdWlyZXMgYSBzdHJpbmcgb3IgYXJyYXkgb2YgdG9rZW5zLicpO1xuICB9XG4gIC8vIGFsbG93IHJhbmdlcyBpbiBhcnJheSBcImxpdGVyYWxzXCI/XG4gIHBlcm1pdEFycmF5UmFuZ2VzID0gb3B0aW9ucz8ucGVybWl0QXJyYXlSYW5nZXM7XG4gIC8vIGFsbG93IGNhbGxzIGluIGFycmF5cyBcImxpdGVyYWxzXCI/XG4gIHBlcm1pdEFycmF5Q2FsbHMgPSBvcHRpb25zPy5wZXJtaXRBcnJheUNhbGxzO1xuICAvLyBzZXQgaW5kZXggdG8gc3RhcnRcbiAgdG9rZW5JbmRleCA9IDA7XG4gIC8vIGRpc2NhcmQgcmVkdW5kYW50IHdoaXRlc3BhY2UgYW5kID0gcHJlZml4XG4gIHdoaWxlIChpc1doaXRlc3BhY2UodG9rZW5zW3Rva2VuSW5kZXhdKSB8fCBpc0Z4UHJlZml4KHRva2Vuc1t0b2tlbkluZGV4XSkpIHtcbiAgICB0b2tlbkluZGV4Kys7XG4gIH1cbiAgYWR2YW5jZSgpO1xuICB1bmlvblJlZnModHJ1ZSk7XG4gIGNvbnN0IHJvb3QgPSBleHByZXNzaW9uKDApO1xuICBhZHZhbmNlKEVORCk7XG4gIHJldHVybiByb290O1xufVxuIiwiaW1wb3J0IHtcbiAgRlhfUFJFRklYLFxuICBDT05URVhULFxuICBDT05URVhUX1FVT1RFLFxuICBSRUZfUkFOR0UsXG4gIFJFRl9URVJOQVJZLFxuICBSRUZfTkFNRUQsXG4gIFJFRl9CRUFNLFxuICBSRUZfU1RSVUNULFxuICBPUEVSQVRPUlxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBsZXhlcnNSZWZzIH0gZnJvbSAnLi9sZXhlclBhcnRzLmpzJztcbmltcG9ydCB7IGdldFRva2VucyB9IGZyb20gJy4vbGV4ZXIuanMnO1xuXG4vLyBMaWJlcmFsbHkgc3BsaXQgYSBjb250ZXh0IHN0cmluZyB1cCBpbnRvIHBhcnRzLlxuLy8gUGVybWl0cyBhbnkgY29tYmluYXRpb24gb2YgYnJhY2VkIGFuZCB1bmJyYWNlZCBpdGVtcy5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFByZWZpeCAoc3RyLCBzdHJpbmdzT25seSA9IGZhbHNlKSB7XG4gIGxldCBpbkJyYWNlID0gZmFsc2U7XG4gIGxldCBjdXJyU3RyID0gJyc7XG4gIGNvbnN0IHBhcnRzID0gW107XG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGlmIChjdXJyU3RyKSB7XG4gICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICBzdHJpbmdzT25seVxuICAgICAgICAgID8gY3VyclN0clxuICAgICAgICAgIDogeyB2YWx1ZTogY3VyclN0ciwgYnJhY2VkOiBpbkJyYWNlIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGN1cnJTdHIgPSAnJztcbiAgfTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldO1xuICAgIGlmIChjaGFyID09PSAnWycpIHtcbiAgICAgIGZsdXNoKCk7XG4gICAgICBpbkJyYWNlID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hhciA9PT0gJ10nKSB7XG4gICAgICBmbHVzaCgpO1xuICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGN1cnJTdHIgKz0gY2hhcjtcbiAgICB9XG4gIH1cbiAgZmx1c2goKTtcbiAgcmV0dXJuIHBhcnRzO1xufVxuXG5mdW5jdGlvbiBzcGxpdENvbnRleHQgKGNvbnRleHRTdHJpbmcpIHtcbiAgcmV0dXJuIHsgY29udGV4dDogc3BsaXRQcmVmaXgoY29udGV4dFN0cmluZywgdHJ1ZSkgfTtcbn1cblxuZnVuY3Rpb24gc3BsaXRDb250ZXh0WGxzeCAoY29udGV4dFN0cmluZykge1xuICBjb25zdCBjb250ZXh0ID0ge307XG4gIGNvbnN0IGN0eCA9IHNwbGl0UHJlZml4KGNvbnRleHRTdHJpbmcpO1xuICBpZiAoY3R4Lmxlbmd0aCA+IDEpIHtcbiAgICBjb250ZXh0Lndvcmtib29rTmFtZSA9IGN0eFtjdHgubGVuZ3RoIC0gMl0udmFsdWU7XG4gICAgY29udGV4dC5zaGVldE5hbWUgPSBjdHhbY3R4Lmxlbmd0aCAtIDFdLnZhbHVlO1xuICB9XG4gIGVsc2UgaWYgKGN0eC5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBpdGVtID0gY3R4WzBdO1xuICAgIGlmIChpdGVtLmJyYWNlZCkge1xuICAgICAgY29udGV4dC53b3JrYm9va05hbWUgPSBpdGVtLnZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnRleHQuc2hlZXROYW1lID0gaXRlbS52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmNvbnN0IHVucXVvdGUgPSBkID0+IGQuc2xpY2UoMSwgLTEpLnJlcGxhY2UoLycnL2csIFwiJ1wiKTtcblxuY29uc3QgcFJhbmdlT3AgPSB0ID0+IHQgJiYgKHQudmFsdWUgPT09ICc6JyB8fCB0LnZhbHVlID09PSAnLjonIHx8IHQudmFsdWUgPT09ICc6LicgfHwgdC52YWx1ZSA9PT0gJy46LicpICYmIHsgb3BlcmF0b3I6IHQudmFsdWUgfTtcbmNvbnN0IHBSYW5nZSA9IHQgPT4gdCAmJiB0LnR5cGUgPT09IFJFRl9SQU5HRSAmJiB7IHIwOiB0LnZhbHVlIH07XG5jb25zdCBwUGFydGlhbCA9IHQgPT4gdCAmJiB0LnR5cGUgPT09IFJFRl9URVJOQVJZICYmIHsgcjA6IHQudmFsdWUgfTtcbmNvbnN0IHBSYW5nZTIgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfUkFOR0UgJiYgeyByMTogdC52YWx1ZSB9O1xuY29uc3QgcEJhbmcgPSB0ID0+IHQgJiYgdC50eXBlID09PSBPUEVSQVRPUiAmJiB0LnZhbHVlID09PSAnIScgJiYge307XG5jb25zdCBwQmVhbSA9IHQgPT4gdCAmJiB0LnR5cGUgPT09IFJFRl9CRUFNICYmIHsgcjA6IHQudmFsdWUgfTtcbmNvbnN0IHBTdHJ1Y3VyZWQgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfU1RSVUNUICYmIHsgc3RydWN0OiB0LnZhbHVlIH07XG5jb25zdCBwQ29udGV4dCA9ICh0LCBvcHRzKSA9PiB7XG4gIGNvbnN0IHNwbGl0dGVyID0gb3B0cy54bHN4ID8gc3BsaXRDb250ZXh0WGxzeCA6IHNwbGl0Q29udGV4dDtcbiAgaWYgKHQgJiYgdC50eXBlID09PSBDT05URVhUKSB7XG4gICAgcmV0dXJuIHNwbGl0dGVyKHQudmFsdWUpO1xuICB9XG4gIGlmICh0ICYmIHQudHlwZSA9PT0gQ09OVEVYVF9RVU9URSkge1xuICAgIHJldHVybiBzcGxpdHRlcih1bnF1b3RlKHQudmFsdWUpKTtcbiAgfVxufTtcbmNvbnN0IHBOYW1lZCA9IHQgPT4gdCAmJiB0LnR5cGUgPT09IFJFRl9OQU1FRCAmJiB7IG5hbWU6IHQudmFsdWUgfTtcblxuY29uc3QgdmFsaWRSdW5zID0gW1xuICBbIHBQYXJ0aWFsIF0sXG4gIFsgcFJhbmdlLCBwUmFuZ2VPcCwgcFJhbmdlMiBdLFxuICBbIHBSYW5nZSBdLFxuICBbIHBCZWFtIF0sXG4gIFsgcENvbnRleHQsIHBCYW5nLCBwUGFydGlhbCBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcFJhbmdlLCBwUmFuZ2VPcCwgcFJhbmdlMiBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcFJhbmdlIF0sXG4gIFsgcENvbnRleHQsIHBCYW5nLCBwQmVhbSBdXG5dO1xuXG5jb25zdCB2YWxpZFJ1bnNOYW1lZCA9IHZhbGlkUnVucy5jb25jYXQoW1xuICBbIHBOYW1lZCBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcE5hbWVkIF0sXG4gIFsgcFN0cnVjdXJlZCBdLFxuICBbIHBOYW1lZCwgcFN0cnVjdXJlZCBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcE5hbWVkLCBwU3RydWN1cmVkIF1cbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWYgKHJlZiwgb3B0cykge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHdpdGhMb2NhdGlvbjogZmFsc2UsXG4gICAgbWVyZ2VSZWZzOiBmYWxzZSxcbiAgICBhbGxvd1Rlcm5hcnk6IGZhbHNlLFxuICAgIGFsbG93TmFtZWQ6IHRydWUsXG4gICAgcjFjMTogZmFsc2UsXG4gICAgeGxzeDogZmFsc2UsXG4gICAgLi4ub3B0c1xuICB9O1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnMocmVmLCBsZXhlcnNSZWZzLCBvcHRpb25zKTtcbiAgY29uc3QgcmVmRGF0YSA9IG9wdGlvbnMueGxzeFxuICAgID8ge1xuICAgICAgd29ya2Jvb2tOYW1lOiAnJyxcbiAgICAgIHNoZWV0TmFtZTogJycsXG4gICAgICByMDogJycsXG4gICAgICByMTogJycsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIG9wZXJhdG9yOiAnJ1xuICAgIH1cbiAgICA6IHtcbiAgICAgIGNvbnRleHQ6IFtdLFxuICAgICAgcjA6ICcnLFxuICAgICAgcjE6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBvcGVyYXRvcjogJydcbiAgICB9O1xuICAvLyBkaXNjYXJkIHRoZSBcIj1cIi1wcmVmaXggaWYgaXQgaXMgdGhlcmVcbiAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zWzBdLnR5cGUgPT09IEZYX1BSRUZJWCkge1xuICAgIHRva2Vucy5zaGlmdCgpO1xuICB9XG4gIGNvbnN0IHJ1bnMgPSBvcHRpb25zLmFsbG93TmFtZWQgPyB2YWxpZFJ1bnNOYW1lZCA6IHZhbGlkUnVucztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBydW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGF0YSA9IHsgLi4ucmVmRGF0YSB9O1xuICAgIGlmIChydW5zW2ldLmxlbmd0aCA9PT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsaWQgPSBydW5zW2ldLmV2ZXJ5KChwYXJzZSwgaikgPT4ge1xuICAgICAgICBjb25zdCBkID0gcGFyc2UodG9rZW5zW2pdLCBvcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCBkKTtcbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJjb25zdCBjaGFyRnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbi8qKlxuICogQ29udmVydCBhIDAgYmFzZWQgb2Zmc2V0IG51bWJlciB0byBhIGNvbHVtbiBzdHJpbmdcbiAqIHJlcHJlc2VudGF0aW9uIChgMmAgPSBgXCJDXCJgKS5cbiAqXG4gKiBUaGUgbWV0aG9kIGV4cGVjdHMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNjM4My4gT3RoZXIgaW5wdXQgd2lsbFxuICogcmV0dXJuIGdhcmJhZ2UuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkluZGV4IFplcm8gYmFzZWQgY29sdW1uIGluZGV4IG51bWJlclxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbHVtbiBzdHJpbmcgaWRlbnRpZmllclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db2wgKGNvbHVtbkluZGV4KSB7XG4gIHJldHVybiAoXG4gICAgKGNvbHVtbkluZGV4ID49IDcwMlxuICAgICAgPyBjaGFyRnJvbSgoKCgoY29sdW1uSW5kZXggLSA3MDIpIC8gNjc2KSAtIDApICUgMjYpICsgNjUpXG4gICAgICA6ICcnKSArXG4gICAgKGNvbHVtbkluZGV4ID49IDI2XG4gICAgICA/IGNoYXJGcm9tKCgoKChjb2x1bW5JbmRleCAvIDI2KSAtIDEpICUgMjYpICsgNjUpKVxuICAgICAgOiAnJykgK1xuICAgIGNoYXJGcm9tKChjb2x1bW5JbmRleCAlIDI2KSArIDY1KVxuICApO1xufVxuIiwiY29uc3QgcmVCYW5uZWRDaGFycyA9IC9bXjAtOUEtWmEtei5fwqHCpMKnwqjCqlxcdTAwYWTCry1cXHVmZmZmXS87XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlQcmVmaXggKHJlZikge1xuICBsZXQgcHJlID0gJyc7XG4gIGxldCBxdW90ZSA9IDA7XG4gIGxldCBudGggPSAwO1xuICBjb25zdCBjb250ZXh0ID0gcmVmLmNvbnRleHQgfHwgW107XG4gIGZvciAobGV0IGkgPSBjb250ZXh0Lmxlbmd0aDsgaSA+IC0xOyBpLS0pIHtcbiAgICBjb25zdCBzY29wZSA9IGNvbnRleHRbaV07XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBjb25zdCBwYXJ0ID0gKG50aCAlIDIpID8gJ1snICsgc2NvcGUgKyAnXScgOiBzY29wZTtcbiAgICAgIHByZSA9IHBhcnQgKyBwcmU7XG4gICAgICBxdW90ZSArPSArcmVCYW5uZWRDaGFycy50ZXN0KHNjb3BlKTtcbiAgICAgIG50aCsrO1xuICAgIH1cbiAgfVxuICBpZiAocXVvdGUpIHtcbiAgICBwcmUgPSBcIidcIiArIHByZS5yZXBsYWNlKC8nL2csIFwiJydcIikgKyBcIidcIjtcbiAgfVxuICByZXR1cm4gcHJlID8gcHJlICsgJyEnIDogcHJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UHJlZml4QWx0IChyZWYpIHtcbiAgbGV0IHByZSA9ICcnO1xuICBsZXQgcXVvdGUgPSAwO1xuICBjb25zdCB7IHdvcmtib29rTmFtZSwgc2hlZXROYW1lIH0gPSByZWY7XG4gIGlmICh3b3JrYm9va05hbWUpIHtcbiAgICBwcmUgKz0gJ1snICsgd29ya2Jvb2tOYW1lICsgJ10nO1xuICAgIHF1b3RlICs9ICtyZUJhbm5lZENoYXJzLnRlc3Qod29ya2Jvb2tOYW1lKTtcbiAgfVxuICBpZiAoc2hlZXROYW1lKSB7XG4gICAgcHJlICs9IHNoZWV0TmFtZTtcbiAgICBxdW90ZSArPSArcmVCYW5uZWRDaGFycy50ZXN0KHNoZWV0TmFtZSk7XG4gIH1cbiAgaWYgKHF1b3RlKSB7XG4gICAgcHJlID0gXCInXCIgKyBwcmUucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gIH1cbiAgcmV0dXJuIHByZSA/IHByZSArICchJyA6IHByZTtcbn1cbiIsImltcG9ydCB7IE1BWF9ST1dTLCBNQVhfQ09MUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmIH0gZnJvbSAnLi9wYXJzZVJlZi5qcyc7XG5pbXBvcnQgeyB0b0NvbCB9IGZyb20gJy4vdG9Db2wuanMnO1xuaW1wb3J0IHsgZnJvbUNvbCB9IGZyb20gJy4vZnJvbUNvbC5qcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnlQcmVmaXgsIHN0cmluZ2lmeVByZWZpeEFsdCB9IGZyb20gJy4vc3RyaW5naWZ5UHJlZml4LmpzJztcblxuY29uc3QgY2xhbXAgPSAobWluLCB2YWwsIG1heCkgPT4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCBtaW4pLCBtYXgpO1xuY29uc3QgdG9Db2xTdHIgPSAoYywgYSkgPT4gKGEgPyAnJCcgOiAnJykgKyB0b0NvbChjKTtcbmNvbnN0IHRvUm93U3RyID0gKHIsIGEpID0+IChhID8gJyQnIDogJycpICsgdG9Sb3cocik7XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm93IChyb3dTdHIpIHtcbiAgcmV0dXJuICtyb3dTdHIgLSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Sb3cgKHRvcCkge1xuICByZXR1cm4gU3RyaW5nKHRvcCArIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9SZWxhdGl2ZSAocmFuZ2UpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJhbmdlLCB7ICRsZWZ0OiBmYWxzZSwgJHJpZ2h0OiBmYWxzZSwgJHRvcDogZmFsc2UsICRib3R0b206IGZhbHNlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BYnNvbHV0ZSAocmFuZ2UpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJhbmdlLCB7ICRsZWZ0OiB0cnVlLCAkcmlnaHQ6IHRydWUsICR0b3A6IHRydWUsICRib3R0b206IHRydWUgfSk7XG59XG5cbi8qKlxuICogQGlnbm9yZVxuICogQHBhcmFtIHsnaGVhZCcgfCAndGFpbCcgfCAnYm90aCcgfCBudWxsIHwgdW5kZWZpbmVkfSB0cmltIERvZXMgdGhlIHJhbmdlIGhhdmUgdHJpbW1pbmc/XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYXBwcm9wcmlhdGUgcmFuZ2Ugam9pbiBvcGVyYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VPcGVyYXRvciAodHJpbSkge1xuICBpZiAodHJpbSA9PT0gJ2JvdGgnKSB7XG4gICAgcmV0dXJuICcuOi4nO1xuICB9XG4gIGVsc2UgaWYgKHRyaW0gPT09ICdoZWFkJykge1xuICAgIHJldHVybiAnLjonO1xuICB9XG4gIGVsc2UgaWYgKHRyaW0gPT09ICd0YWlsJykge1xuICAgIHJldHVybiAnOi4nO1xuICB9XG4gIHJldHVybiAnOic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltRGlyZWN0aW9uIChoZWFkLCB0YWlsKSB7XG4gIGlmIChoZWFkICYmIHRhaWwpIHtcbiAgICByZXR1cm4gJ2JvdGgnO1xuICB9XG4gIGlmIChoZWFkKSB7XG4gICAgcmV0dXJuICdoZWFkJztcbiAgfVxuICBpZiAodGFpbCkge1xuICAgIHJldHVybiAndGFpbCc7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpbmdpZnkgYSByYW5nZSBvYmplY3QgaW50byBBMSBzeW50YXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtSYW5nZUExfSByYW5nZSAgQSByYW5nZSBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICBBbiBBMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBvZiBhIHJhbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ExIChyYW5nZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCwgdHJpbSB9ID0gcmFuZ2U7XG4gIGNvbnN0IHsgJGxlZnQsICRyaWdodCwgJHRvcCwgJGJvdHRvbSB9ID0gcmFuZ2U7XG4gIGNvbnN0IG5vTGVmdCA9IGxlZnQgPT0gbnVsbDtcbiAgY29uc3Qgbm9SaWdodCA9IHJpZ2h0ID09IG51bGw7XG4gIGNvbnN0IG5vVG9wID0gdG9wID09IG51bGw7XG4gIGNvbnN0IG5vQm90dG9tID0gYm90dG9tID09IG51bGw7XG4gIC8vIGFsbG93IHNraXBwaW5nIHJpZ2h0IGFuZCBib3R0b20gdG8gZGVmaW5lIGEgY2VsbFxuICB0b3AgPSBjbGFtcCgwLCB0b3AgfCAwLCBNQVhfUk9XUyk7XG4gIGxlZnQgPSBjbGFtcCgwLCBsZWZ0IHwgMCwgTUFYX0NPTFMpO1xuICBpZiAoIW5vTGVmdCAmJiAhbm9Ub3AgJiYgbm9SaWdodCAmJiBub0JvdHRvbSkge1xuICAgIGJvdHRvbSA9IHRvcDtcbiAgICByaWdodCA9IGxlZnQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgYm90dG9tID0gY2xhbXAoMCwgYm90dG9tIHwgMCwgTUFYX1JPV1MpO1xuICAgIHJpZ2h0ID0gY2xhbXAoMCwgcmlnaHQgfCAwLCBNQVhfQ09MUyk7XG4gIH1cbiAgY29uc3Qgb3AgPSByYW5nZU9wZXJhdG9yKHRyaW0pO1xuICAvLyBBOkFcbiAgY29uc3QgYWxsUm93cyA9IHRvcCA9PT0gMCAmJiBib3R0b20gPj0gTUFYX1JPV1M7XG4gIGNvbnN0IGhhdmVBYnNDb2wgPSAoJGxlZnQgJiYgIW5vTGVmdCkgfHwgKCRyaWdodCAmJiAhbm9SaWdodCk7XG4gIGlmICgoYWxsUm93cyAmJiAhbm9MZWZ0ICYmICFub1JpZ2h0ICYmICghaGF2ZUFic0NvbCB8fCBsZWZ0ID09PSByaWdodCkpIHx8IChub1RvcCAmJiBub0JvdHRvbSkpIHtcbiAgICByZXR1cm4gdG9Db2xTdHIobGVmdCwgJGxlZnQpICsgb3AgKyB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KTtcbiAgfVxuICAvLyAxOjFcbiAgY29uc3QgYWxsQ29scyA9IGxlZnQgPT09IDAgJiYgcmlnaHQgPj0gTUFYX0NPTFM7XG4gIGNvbnN0IGhhdmVBYnNSb3cgPSAoJHRvcCAmJiAhbm9Ub3ApIHx8ICgkYm90dG9tICYmICFub0JvdHRvbSk7XG4gIGlmICgoYWxsQ29scyAmJiAhbm9Ub3AgJiYgIW5vQm90dG9tICYmICghaGF2ZUFic1JvdyB8fCB0b3AgPT09IGJvdHRvbSkpIHx8IChub0xlZnQgJiYgbm9SaWdodCkpIHtcbiAgICByZXR1cm4gdG9Sb3dTdHIodG9wLCAkdG9wKSArIG9wICsgdG9Sb3dTdHIoYm90dG9tLCAkYm90dG9tKTtcbiAgfVxuICAvLyBBMToxXG4gIGlmICghbm9MZWZ0ICYmICFub1RvcCAmJiAhbm9SaWdodCAmJiBub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgKyB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KTtcbiAgfVxuICAvLyBBOkExID0+IEExOjFcbiAgaWYgKCFub0xlZnQgJiYgbm9Ub3AgJiYgIW5vUmlnaHQgJiYgIW5vQm90dG9tKSB7XG4gICAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSkgKyBvcCArIHRvQ29sU3RyKHJpZ2h0LCAkcmlnaHQpO1xuICB9XG4gIC8vIEExOkFcbiAgaWYgKCFub0xlZnQgJiYgIW5vVG9wICYmIG5vUmlnaHQgJiYgIW5vQm90dG9tKSB7XG4gICAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKHRvcCwgJHRvcCkgKyBvcCArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTpBMSA9PiBBMTpBXG4gIGlmIChub0xlZnQgJiYgIW5vVG9wICYmICFub1JpZ2h0ICYmICFub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KSArIHRvUm93U3RyKHRvcCwgJHRvcCkgKyBvcCArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTE6QTFcbiAgaWYgKHJpZ2h0ICE9PSBsZWZ0IHx8IGJvdHRvbSAhPT0gdG9wIHx8ICRyaWdodCAhPT0gJGxlZnQgfHwgJGJvdHRvbSAhPT0gJHRvcCkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgK1xuICAgICAgICAgICB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KSArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTFcbiAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKHRvcCwgJHRvcCk7XG59XG5cbmZ1bmN0aW9uIHNwbGl0QTEgKHN0cikge1xuICBjb25zdCBtID0gL14oPz0uKShcXCQoPz1cXEQpKT8oW0EtWmEtel17MCwzfSk/KFxcJCk/KFsxLTldWzAtOV17MCw2fSk/JC8uZXhlYyhzdHIpO1xuICBpZiAoIW0gfHwgKCFtWzJdICYmICFtWzRdKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbXG4gICAgbVs0XSA/IGZyb21Sb3cobVs0XSkgOiBudWxsLCAvLyByb3cgaW5kZXggb3IgbnVsbFxuICAgIG1bMl0gPyBmcm9tQ29sKG1bMl0pIDogbnVsbCwgLy8gY29sIGluZGV4IG9yIG51bGxcbiAgICAhIW1bM10sIC8vIGlzIHJvdyBhYnNvbHV0ZT9cbiAgICAhIW1bMV0gIC8vIGlzIGNvbCBhYnNvbHV0ZT9cbiAgXTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHNpbXBsZSBzdHJpbmcgcmVmZXJlbmNlIHRvIGFuIEExIHJhbmdlIGludG8gYSByYW5nZSBvYmplY3QuXG4gKiBXaWxsIGFjY2VwdCBgQTFgLCBgQTJgLCBgQTpBYCwgb3IgYDE6MWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHJhbmdlU3RyaW5nICBBIHJhbmdlIHN0cmluZ1xuICogQHJldHVybnMgeyhSYW5nZUExfG51bGwpfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFsaWQgcmFuZ2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUExIChyYW5nZVN0cmluZykge1xuICBsZXQgdG9wID0gbnVsbDtcbiAgbGV0IGxlZnQgPSBudWxsO1xuICBsZXQgYm90dG9tID0gbnVsbDtcbiAgbGV0IHJpZ2h0ID0gbnVsbDtcbiAgbGV0ICR0b3AgPSBmYWxzZTtcbiAgbGV0ICRsZWZ0ID0gZmFsc2U7XG4gIGxldCAkYm90dG9tID0gZmFsc2U7XG4gIGxldCAkcmlnaHQgPSBmYWxzZTtcbiAgY29uc3QgWyBwYXJ0MSwgb3AxLCBwYXJ0Miwgb3AyLCBwYXJ0MyBdID0gcmFuZ2VTdHJpbmcuc3BsaXQoLyhcXC4/OlxcLj8pLyk7XG4gIGlmIChvcDIgfHwgcGFydDMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB0cmltID0gdHJpbURpcmVjdGlvbighIW9wMSAmJiBvcDFbMF0gPT09ICcuJywgISFvcDEgJiYgb3AxW29wMS5sZW5ndGggLSAxXSA9PT0gJy4nKTtcbiAgY29uc3QgcDEgPSBzcGxpdEExKHBhcnQxKTtcbiAgY29uc3QgcDIgPSBwYXJ0MiA/IHNwbGl0QTEocGFydDIpIDogbnVsbDtcbiAgaWYgKCFwMSB8fCAocGFydDIgJiYgIXAyKSkge1xuICAgIC8vIGludmFsaWQgc2VjdGlvblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIHBhcnQgMSBiaXRzXG4gIGlmIChwMVswXSAhPSBudWxsICYmIHAxWzFdICE9IG51bGwpIHtcbiAgICBbIHRvcCwgbGVmdCwgJHRvcCwgJGxlZnQgXSA9IHAxO1xuICB9XG4gIGVsc2UgaWYgKHAxWzBdID09IG51bGwgJiYgcDFbMV0gIT0gbnVsbCkge1xuICAgIFsgLCBsZWZ0LCAsICRsZWZ0IF0gPSBwMTtcbiAgfVxuICBlbHNlIGlmIChwMVswXSAhPSBudWxsICYmIHAxWzFdID09IG51bGwpIHtcbiAgICBbIHRvcCwgLCAkdG9wIF0gPSBwMTtcbiAgfVxuICAvLyBwYXJ0IDIgYml0c1xuICBpZiAoIXBhcnQyKSB7XG4gICAgLy8gcGFydCAyIG11c3QgZXhpc3QgaWYgZWl0aGVyIHRvcCBvciBsZWZ0IGlzIG51bGw6XG4gICAgLy8gdGhpcyBkaXNhbGxvd3MgYSBzaW5nbGUgbnVtIG9yIGNvbCBwYXR0ZXJuc1xuICAgIGlmICh0b3AgPT0gbnVsbCB8fCBsZWZ0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBib3R0b20gPSB0b3A7XG4gICAgcmlnaHQgPSBsZWZ0O1xuICAgICRib3R0b20gPSAkdG9wO1xuICAgICRyaWdodCA9ICRsZWZ0O1xuICB9XG4gIGVsc2UgaWYgKHAyWzBdICE9IG51bGwgJiYgcDJbMV0gIT0gbnVsbCkge1xuICAgIFsgYm90dG9tLCByaWdodCwgJGJvdHRvbSwgJHJpZ2h0IF0gPSBwMjtcbiAgfVxuICBlbHNlIGlmIChwMlswXSA9PSBudWxsICYmIHAyWzFdICE9IG51bGwpIHtcbiAgICBbICwgcmlnaHQsICwgJHJpZ2h0IF0gPSBwMjtcbiAgfVxuICBlbHNlIGlmIChwMlswXSAhPSBudWxsICYmIHAyWzFdID09IG51bGwpIHtcbiAgICBbIGJvdHRvbSwgLCAkYm90dG9tIF0gPSBwMjtcbiAgfVxuICAvLyBmbGlwIGxlZnQvcmlnaHQgYW5kIHRvcC9ib3R0b20gYXMgbmVlZGVkXG4gIC8vIGZvciBwYXJ0aWFsIHJhbmdlcyB3ZSBwZXJmZXIgdGhlIGNvb3JkIG9uIHRoZSBsZWZ0LXNpZGUgb2YgdGhlIDpcbiAgaWYgKHJpZ2h0ICE9IG51bGwgJiYgKGxlZnQgPT0gbnVsbCB8fCAobGVmdCAhPSBudWxsICYmIHJpZ2h0IDwgbGVmdCkpKSB7XG4gICAgWyBsZWZ0LCByaWdodCwgJGxlZnQsICRyaWdodCBdID0gWyByaWdodCwgbGVmdCwgJHJpZ2h0LCAkbGVmdCBdO1xuICB9XG4gIGlmIChib3R0b20gIT0gbnVsbCAmJiAodG9wID09IG51bGwgfHwgKHRvcCAhPSBudWxsICYmIGJvdHRvbSA8IHRvcCkpKSB7XG4gICAgWyB0b3AsIGJvdHRvbSwgJHRvcCwgJGJvdHRvbSBdID0gWyBib3R0b20sIHRvcCwgJGJvdHRvbSwgJHRvcCBdO1xuICB9XG4gIGNvbnN0IHIgPSB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCwgJHRvcCwgJGxlZnQsICRib3R0b20sICRyaWdodCB9O1xuICBpZiAodHJpbSkgeyByLnRyaW0gPSB0cmltOyB9XG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHJlZmVyZW5jZSBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgaXQuXG4gKlxuICogYGBganNcbiAqIHBhcnNlQTFSZWYoJ1NoZWV0MSFBJDE6JEIyJyk7XG4gKiAvLyA9PiB7XG4gKiAvLyAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqIC8vICAgcmFuZ2U6IHtcbiAqIC8vICAgICB0b3A6IDAsXG4gKiAvLyAgICAgbGVmdDogMCxcbiAqIC8vICAgICBib3R0b206IDEsXG4gKiAvLyAgICAgcmlnaHQ6IDFcbiAqIC8vICAgICAkdG9wOiB0cnVlLFxuICogLy8gICAgICRsZWZ0OiBmYWxzZSxcbiAqIC8vICAgICAkYm90dG9tOiBmYWxzZSxcbiAqIC8vICAgICAkcmlnaHQ6IHRydWVcbiAqIC8vICAgfVxuICogLy8gfVxuICogYGBgXG4gKlxuICogRm9yIEE6QSBvciBBMTpBIHN0eWxlIHJhbmdlcywgYG51bGxgIHdpbGwgYmUgdXNlZCBmb3IgYW55IGRpbWVuc2lvbnMgdGhhdCB0aGVcbiAqIHN5bnRheCBkb2VzIG5vdCBzcGVjaWZ5OlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZTdHJpbmcgIEFuIEExLXN0eWxlIHJlZmVyZW5jZSBzdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMgeyhSZWZlcmVuY2VBMXxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJlZmVyZW5jZSBvciBudWxsIGlmIGl0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUExUmVmIChyZWZTdHJpbmcsIHsgYWxsb3dOYW1lZCA9IHRydWUsIGFsbG93VGVybmFyeSA9IGZhbHNlLCB4bHN4ID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IGQgPSBwYXJzZVJlZihyZWZTdHJpbmcsIHsgYWxsb3dOYW1lZCwgYWxsb3dUZXJuYXJ5LCB4bHN4LCByMWMxOiBmYWxzZSB9KTtcbiAgaWYgKGQgJiYgKGQucjAgfHwgZC5uYW1lKSkge1xuICAgIGxldCByYW5nZSA9IG51bGw7XG4gICAgaWYgKGQucjApIHtcbiAgICAgIHJhbmdlID0gZnJvbUExKGQucjEgPyBkLnIwICsgZC5vcGVyYXRvciArIGQucjEgOiBkLnIwKTtcbiAgICB9XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICByZXR1cm4geGxzeFxuICAgICAgICA/IHsgd29ya2Jvb2tOYW1lOiBkLndvcmtib29rTmFtZSwgc2hlZXROYW1lOiBkLnNoZWV0TmFtZSwgcmFuZ2UgfVxuICAgICAgICA6IHsgY29udGV4dDogZC5jb250ZXh0LCByYW5nZSB9O1xuICAgIH1cbiAgICBpZiAoZC5uYW1lKSB7XG4gICAgICByZXR1cm4geGxzeFxuICAgICAgICA/IHsgd29ya2Jvb2tOYW1lOiBkLndvcmtib29rTmFtZSwgc2hlZXROYW1lOiBkLnNoZWV0TmFtZSwgbmFtZTogZC5uYW1lIH1cbiAgICAgICAgOiB7IGNvbnRleHQ6IGQuY29udGV4dCwgbmFtZTogZC5uYW1lIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBhbiBBMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlBMVJlZih7XG4gKiAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqICAgcmFuZ2U6IHtcbiAqICAgICB0b3A6IDAsXG4gKiAgICAgbGVmdDogMCxcbiAqICAgICBib3R0b206IDEsXG4gKiAgICAgcmlnaHQ6IDEsXG4gKiAgICAgJHRvcDogdHJ1ZSxcbiAqICAgICAkbGVmdDogZmFsc2UsXG4gKiAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAgICAgJHJpZ2h0OiB0cnVlXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gPT4gJ1NoZWV0MSFBJDE6JEIyJ1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtSZWZlcmVuY2VBMX0gcmVmT2JqZWN0IEEgcmVmZXJlbmNlIG9iamVjdFxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHJlZmVyZW5jZSBpbiBBMS1zdHlsZSBzdHJpbmcgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlBMVJlZiAocmVmT2JqZWN0LCB7IHhsc3ggPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgcHJlZml4ID0geGxzeFxuICAgID8gc3RyaW5naWZ5UHJlZml4QWx0KHJlZk9iamVjdClcbiAgICA6IHN0cmluZ2lmeVByZWZpeChyZWZPYmplY3QpO1xuICByZXR1cm4gcHJlZml4ICsgKFxuICAgIHJlZk9iamVjdC5uYW1lID8gcmVmT2JqZWN0Lm5hbWUgOiB0b0ExKHJlZk9iamVjdC5yYW5nZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBGaWxsIHRoZSBhbnkgbWlzc2luZyBib3VuZHMgaW4gcmFuZ2Ugb2JqZWN0cy4gVG9wIHdpbGwgYmUgc2V0IHRvIDAsIGJvdHRvbSB0b1xuICogMTA0ODU3NSwgbGVmdCB0byAwLCBhbmQgcmlnaHQgdG8gMTYzODMsIGlmIHRoZXkgYXJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBgYGBqc1xuICogYWRkQTFSYW5nZUJvdW5kcyh7XG4gKiAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqICAgcmFuZ2U6IHtcbiAqICAgICB0b3A6IDAsXG4gKiAgICAgbGVmdDogMCxcbiAqICAgICBib3R0b206IDEsXG4gKiAgICAgJHRvcDogdHJ1ZSxcbiAqICAgICAkbGVmdDogZmFsc2UsXG4gKiAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gPT4ge1xuICogLy8gICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAvLyAgIHJhbmdlOiB7XG4gKiAvLyAgICAgdG9wOiAwLFxuICogLy8gICAgIGxlZnQ6IDAsXG4gKiAvLyAgICAgYm90dG9tOiAxLFxuICogLy8gICAgIHJpZ2h0OiAxNjM4MyxcbiAqIC8vICAgICAkdG9wOiB0cnVlLFxuICogLy8gICAgICRsZWZ0OiBmYWxzZSxcbiAqIC8vICAgICAkYm90dG9tOiBmYWxzZSxcbiAqIC8vICAgICAkcmlnaHQ6IGZhbHNlXG4gKiAvLyAgIH1cbiAqIC8vIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7UmFuZ2VBMX0gcmFuZ2UgVGhlIHJhbmdlIHBhcnQgb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICogQHJldHVybnMge1JhbmdlQTF9IHNhbWUgcmFuZ2Ugd2l0aCBtaXNzaW5nIGJvdW5kcyBmaWxsZWQgaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRBMVJhbmdlQm91bmRzIChyYW5nZSkge1xuICBpZiAocmFuZ2UudG9wID09IG51bGwpIHtcbiAgICByYW5nZS50b3AgPSAwO1xuICAgIHJhbmdlLiR0b3AgPSBmYWxzZTtcbiAgfVxuICBpZiAocmFuZ2UuYm90dG9tID09IG51bGwpIHtcbiAgICByYW5nZS5ib3R0b20gPSBNQVhfUk9XUztcbiAgICByYW5nZS4kYm90dG9tID0gZmFsc2U7XG4gIH1cbiAgaWYgKHJhbmdlLmxlZnQgPT0gbnVsbCkge1xuICAgIHJhbmdlLmxlZnQgPSAwO1xuICAgIHJhbmdlLiRsZWZ0ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHJhbmdlLnJpZ2h0ID09IG51bGwpIHtcbiAgICByYW5nZS5yaWdodCA9IE1BWF9DT0xTO1xuICAgIHJhbmdlLiRyaWdodCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiByYW5nZTtcbn1cbiIsImltcG9ydCB7IHBhcnNlUmVmIH0gZnJvbSAnLi9wYXJzZVJlZi5qcyc7XG5pbXBvcnQgeyBwYXJzZVNSYW5nZSB9IGZyb20gJy4vcGFyc2VTUmFuZ2UuanMnO1xuXG4vKipcbiAqIFBhcnNlIGEgc3RydWN0dXJlZCByZWZlcmVuY2Ugc3RyaW5nIGludG8gYW4gb2JqZWN0IHJlcHJlc2VudGluZyBpdC5cbiAqXG4gKiBgYGBqc1xuICogcGFyc2VTdHJ1Y3RSZWYoJ3dvcmtib29rLnhsc3ghdGFibGVOYW1lW1sjRGF0YV0sW0NvbHVtbjFdOltDb2x1bW4yXV0nKTtcbiAqIC8vID0+IHtcbiAqIC8vICAgY29udGV4dDogWyAnd29ya2Jvb2sueGxzeCcgXSxcbiAqIC8vICAgc2VjdGlvbnM6IFsgJ2RhdGEnIF0sXG4gKiAvLyAgIGNvbHVtbnM6IFsgJ215IGNvbHVtbicsICdAZm9vJyBdLFxuICogLy8gICB0YWJsZTogJ3RhYmxlTmFtZScsXG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKiBGb3IgQTpBIG9yIEExOkEgc3R5bGUgcmFuZ2VzLCBgbnVsbGAgd2lsbCBiZSB1c2VkIGZvciBhbnkgZGltZW5zaW9ucyB0aGF0IHRoZVxuICogc3ludGF4IGRvZXMgbm90IHNwZWNpZnk6XG4gKlxuICogQHR1dG9yaWFsIFJlZmVyZW5jZXMubWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWYgIEEgc3RydWN0dXJlZCByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcmV0dXJucyB7KFJlZmVyZW5jZVN0cnVjdHxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJlZmVyZW5jZSBvciBudWxsIGlmIGl0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cnVjdFJlZiAocmVmLCBvcHRpb25zID0geyB4bHN4OiBmYWxzZSB9KSB7XG4gIGNvbnN0IHIgPSBwYXJzZVJlZihyZWYsIG9wdGlvbnMpO1xuICBpZiAociAmJiByLnN0cnVjdCkge1xuICAgIGNvbnN0IHN0cnVjdERhdGEgPSBwYXJzZVNSYW5nZShyLnN0cnVjdCk7XG4gICAgaWYgKHN0cnVjdERhdGEgJiYgc3RydWN0RGF0YS5sZW5ndGggPT09IHIuc3RydWN0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMueGxzeFxuICAgICAgICA/IHtcbiAgICAgICAgICB3b3JrYm9va05hbWU6IHIud29ya2Jvb2tOYW1lLFxuICAgICAgICAgIHNoZWV0TmFtZTogci5zaGVldE5hbWUsXG4gICAgICAgICAgdGFibGU6IHIubmFtZSxcbiAgICAgICAgICBjb2x1bW5zOiBzdHJ1Y3REYXRhLmNvbHVtbnMsXG4gICAgICAgICAgc2VjdGlvbnM6IHN0cnVjdERhdGEuc2VjdGlvbnNcbiAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICBjb250ZXh0OiByLmNvbnRleHQsXG4gICAgICAgICAgdGFibGU6IHIubmFtZSxcbiAgICAgICAgICBjb2x1bW5zOiBzdHJ1Y3REYXRhLmNvbHVtbnMsXG4gICAgICAgICAgc2VjdGlvbnM6IHN0cnVjdERhdGEuc2VjdGlvbnNcbiAgICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgeyBSRUZfUkFOR0UsIFJFRl9CRUFNLCBSRUZfVEVSTkFSWSwgVU5LTk9XTiwgUkVGX1NUUlVDVCB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHBhcnNlQTFSZWYgfSBmcm9tICcuL2ExLmpzJztcbmltcG9ydCB7IHBhcnNlU3RydWN0UmVmIH0gZnJvbSAnLi9wYXJzZVN0cnVjdFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGdldElEZXIgKCkge1xuICBsZXQgaSA9IDE7XG4gIHJldHVybiAoKSA9PiAnZnhnJyArIChpKyspO1xufVxuXG5mdW5jdGlvbiBzYW1lVmFsdWUgKGEsIGIpIHtcbiAgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuZnVuY3Rpb24gc2FtZUFycmF5IChhLCBiKSB7XG4gIGlmICgoQXJyYXkuaXNBcnJheShhKSAhPT0gQXJyYXkuaXNBcnJheShiKSkgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghc2FtZVZhbHVlKGFbaV0sIGJbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzYW1lU3RyIChhLCBiKSB7XG4gIGlmICghYSAmJiAhYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcoYSkudG9Mb3dlckNhc2UoKSA9PT0gU3RyaW5nKGIpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGlzRXF1aXZhbGVudCAocmVmQSwgcmVmQikge1xuICAvLyBpZiBuYW1lZCwgbmFtZSBtdXN0IG1hdGNoXG4gIGlmICgocmVmQS5uYW1lIHx8IHJlZkIubmFtZSkgJiYgcmVmQS5uYW1lICE9PSByZWZCLm5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaWYgc3RydWN0dXJlZFxuICBpZiAoKHJlZkEuY29sdW1ucyB8fCByZWZCLmNvbHVtbnMpKSB7XG4gICAgaWYgKHJlZkEudGFibGUgIT09IHJlZkIudGFibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzYW1lQXJyYXkocmVmQS5jb2x1bW5zLCByZWZCLmNvbHVtbnMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghc2FtZUFycmF5KHJlZkEuc2VjdGlvbnMsIHJlZkIuc2VjdGlvbnMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIGlmIHJhbmdlZCwgcmFuZ2UgbXVzdCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbnMgKHdlIGRvbid0IGNhcmUgYWJvdXQgJClcbiAgaWYgKHJlZkEucmFuZ2UgfHwgcmVmQi5yYW5nZSkge1xuICAgIGlmIChcbiAgICAgICFzYW1lVmFsdWUocmVmQS5yYW5nZS50b3AsIHJlZkIucmFuZ2UudG9wKSB8fFxuICAgICAgIXNhbWVWYWx1ZShyZWZBLnJhbmdlLmJvdHRvbSwgcmVmQi5yYW5nZS5ib3R0b20pIHx8XG4gICAgICAhc2FtZVZhbHVlKHJlZkEucmFuZ2UubGVmdCwgcmVmQi5yYW5nZS5sZWZ0KSB8fFxuICAgICAgIXNhbWVWYWx1ZShyZWZBLnJhbmdlLnJpZ2h0LCByZWZCLnJhbmdlLnJpZ2h0KVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBtdXN0IGhhdmUgc2FtZSBjb250ZXh0XG4gIGlmIChcbiAgICAhc2FtZVN0cihyZWZBLndvcmtib29rTmFtZSwgcmVmQi53b3JrYm9va05hbWUpIHx8XG4gICAgIXNhbWVTdHIocmVmQS5zaGVldE5hbWUsIHJlZkIuc2hlZXROYW1lKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGFkZENvbnRleHQgKHJlZiwgc2hlZXROYW1lLCB3b3JrYm9va05hbWUpIHtcbiAgaWYgKCFyZWYuc2hlZXROYW1lKSB7XG4gICAgcmVmLnNoZWV0TmFtZSA9IHNoZWV0TmFtZTtcbiAgfVxuICBpZiAoIXJlZi53b3JrYm9va05hbWUpIHtcbiAgICByZWYud29ya2Jvb2tOYW1lID0gd29ya2Jvb2tOYW1lO1xuICB9XG4gIHJldHVybiByZWY7XG59XG5cbi8qKlxuICogUnVucyB0aHJvdWdoIGEgbGlzdCBvZiB0b2tlbnMgYW5kIGFkZHMgZXh0cmEgYXR0cmlidXRlcyBzdWNoIGFzIG1hdGNoaW5nXG4gKiBwYXJlbnMgYW5kIHJhbmdlcy5cbiAqXG4gKiBUaGUgYGNvbnRleHRgIHBhcmFtZXRlciBkZWZpbmVzIGRlZmF1bHQgcmVmZXJlbmNlIGF0dHJpYnV0ZXM6XG4gKiBgeyB3b3JrYm9va05hbWU6ICdyZXBvcnQueGxzeCcsIHNoZWV0TmFtZTogJ1NoZWV0MScgfWAuXG4gKiBJZiBzdXBwbGllZCwgdGhlc2UgYXJlIHVzZWQgdG8gbWF0Y2ggYEExYCB0byBgU2hlZXQxIUExYC5cbiAqXG4gKiBBbGwgdG9rZW5zIHdpbGwgYmUgdGFnZ2VkIHdpdGggYSBgLmRlcHRoYCBudW1iZXIgdmFsdWUgdG8gaW5kaWNhdGluZyB0aGVcbiAqIGxldmVsIG9mIG5lc3RpbmcgaW4gcGFyZW50aGVzZXMgYXMgd2VsbCBhcyBhbiBgLmluZGV4YCBudW1iZXIgaW5kaWNhdGluZ1xuICogdGhlaXIgemVybyBiYXNlZCBwb3NpdGlvbiBpbiB0aGUgbGlzdC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXJyYXkgb2YgdG9rZW5zIGJ1dCB0aGUgZm9sbG93aW5nXG4gKiBwcm9wZXJ0aWVzIHdpbGwgYWRkZWQgdG8gdG9rZW5zIChhcyBhcHBsaWNhYmxlKTpcbiAqXG4gKiAjIyMjIFBhcmVudGhlc2VzICggKVxuICpcbiAqIE1hdGNoaW5nIHBhcmVucyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZ3JvdXBJZGAgc3RyaW5nIGlkZW50aWZpZXIgYXMgd2VsbCBhc1xuICogYSBgLmRlcHRoYCBudW1iZXIgdmFsdWUgKGluZGljYXRpbmcgdGhlIGxldmVsIG9mIG5lc3RpbmcpLlxuICpcbiAqIENsb3NpbmcgcGFyZW5zIHdpdGhvdXQgYSBjb3VudGVycGFydCB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZXJyb3JgXG4gKiAoYm9vbGVhbiB0cnVlKS5cbiAqXG4gKiAjIyMjIEN1cmx5IGJyYWNrZXRzIHsgfVxuICpcbiAqIE1hdGNoaW5nIGN1cmx5IGJyYWNrZXRzIHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5ncm91cElkYCBzdHJpbmcgaWRlbnRpZmllci5cbiAqIFRoZXNlIG1heSBub3QgYmUgbmVzdGVkIGluIEV4Y2VsLlxuICpcbiAqIENsb3NpbmcgY3VybHkgYnJhY2tldHMgd2l0aG91dCBhIGNvdW50ZXJwYXJ0IHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5lcnJvcmBcbiAqIChib29sZWFuIGB0cnVlYCkuXG4gKlxuICogIyMjIyBSYW5nZXMgKGBSRUZfUkFOR0VgIG9yIGBSRUZfQkVBTWAgdHlwZSB0b2tlbnMpXG4gKlxuICogQWxsIHJhbmdlcyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZ3JvdXBJZGAgc3RyaW5nIGlkZW50aWZpZXIgcmVnYXJkbGVzcyBvZlxuICogdGhlIG51bWJlciBvZiB0aW1lcyB0aGV5IG9jY3VyLlxuICpcbiAqICMjIyMgVG9rZW5zIG9mIHR5cGUgYFVOS05PV05gXG4gKlxuICogQWxsIHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5lcnJvcmAgKGJvb2xlYW4gYHRydWVgKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRva2VuPn0gdG9rZW5saXN0IEFuIGFycmF5IG9mIHRva2VucyAoZnJvbSBgdG9rZW5pemUoKWApXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHQ9e31dIEEgY29udGVzdCB1c2VkIHRvIG1hdGNoIGBBMWAgdG8gYFNoZWV0MSFBMWAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc2hlZXROYW1lPScnXSBBbiBpbXBsaWVkIHNoZWV0IG5hbWUgKCdTaGVldDEnKVxuICogQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0Lndvcmtib29rTmFtZT0nJ10gQW4gaW1wbGllZCB3b3JrYm9vayBuYW1lICgncmVwb3J0Lnhsc3gnKVxuICogQHJldHVybnMge0FycmF5PFRva2VuRW5oYW5jZWQ+fSBUaGUgaW5wdXQgYXJyYXkgd2l0aCB0aGUgZW5jaGFuY2VkIHRva2Vuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9rZW5NZXRhICh0b2tlbmxpc3QsIHsgc2hlZXROYW1lID0gJycsIHdvcmtib29rTmFtZSA9ICcnIH0gPSB7fSkge1xuICBjb25zdCBwYXJlblN0YWNrID0gW107XG4gIGxldCBhcnJheVN0YXJ0ID0gbnVsbDtcbiAgY29uc3QgdWlkID0gZ2V0SURlcigpO1xuICBjb25zdCBrbm93blJlZnMgPSBbXTtcblxuICBjb25zdCBnZXRDdXJyRGVwdGggPSAoKSA9PiBwYXJlblN0YWNrLmxlbmd0aCArIChhcnJheVN0YXJ0ID8gMSA6IDApO1xuXG4gIHRva2VubGlzdC5mb3JFYWNoKCh0b2tlbiwgaSkgPT4ge1xuICAgIHRva2VuLmluZGV4ID0gaTtcbiAgICB0b2tlbi5kZXB0aCA9IGdldEN1cnJEZXB0aCgpO1xuICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJygnKSB7XG4gICAgICBwYXJlblN0YWNrLnB1c2godG9rZW4pO1xuICAgICAgdG9rZW4uZGVwdGggPSBnZXRDdXJyRGVwdGgoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICcpJykge1xuICAgICAgY29uc3QgY291bnRlciA9IHBhcmVuU3RhY2sucG9wKCk7XG4gICAgICBpZiAoY291bnRlcikge1xuICAgICAgICBjb25zdCBwYWlySWQgPSB1aWQoKTtcbiAgICAgICAgdG9rZW4uZ3JvdXBJZCA9IHBhaXJJZDtcbiAgICAgICAgdG9rZW4uZGVwdGggPSBjb3VudGVyLmRlcHRoO1xuICAgICAgICBjb3VudGVyLmdyb3VwSWQgPSBwYWlySWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdG9rZW4uZXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3snKSB7XG4gICAgICBpZiAoIWFycmF5U3RhcnQpIHtcbiAgICAgICAgYXJyYXlTdGFydCA9IHRva2VuO1xuICAgICAgICB0b2tlbi5kZXB0aCA9IGdldEN1cnJEZXB0aCgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRva2VuLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICd9Jykge1xuICAgICAgaWYgKGFycmF5U3RhcnQpIHtcbiAgICAgICAgY29uc3QgcGFpcklkID0gdWlkKCk7XG4gICAgICAgIHRva2VuLmdyb3VwSWQgPSBwYWlySWQ7XG4gICAgICAgIHRva2VuLmRlcHRoID0gYXJyYXlTdGFydC5kZXB0aDtcbiAgICAgICAgYXJyYXlTdGFydC5ncm91cElkID0gcGFpcklkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRva2VuLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGFycmF5U3RhcnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChcbiAgICAgIHRva2VuLnR5cGUgPT09IFJFRl9SQU5HRSB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gUkVGX0JFQU0gfHxcbiAgICAgIHRva2VuLnR5cGUgPT09IFJFRl9URVJOQVJZIHx8XG4gICAgICB0b2tlbi50eXBlID09PSBSRUZfU1RSVUNUXG4gICAgKSB7XG4gICAgICBjb25zdCByZWYgPSAodG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVClcbiAgICAgICAgPyBwYXJzZVN0cnVjdFJlZih0b2tlbi52YWx1ZSwgeyB4bHN4OiB0cnVlIH0pXG4gICAgICAgIDogcGFyc2VBMVJlZih0b2tlbi52YWx1ZSwgeyBhbGxvd1Rlcm5hcnk6IHRydWUsIHhsc3g6IHRydWUgfSk7XG4gICAgICBpZiAocmVmICYmIChyZWYucmFuZ2UgfHwgcmVmLmNvbHVtbnMpKSB7XG4gICAgICAgIHJlZi5zb3VyY2UgPSB0b2tlbi52YWx1ZTtcbiAgICAgICAgYWRkQ29udGV4dChyZWYsIHNoZWV0TmFtZSwgd29ya2Jvb2tOYW1lKTtcbiAgICAgICAgY29uc3Qga25vd24gPSBrbm93blJlZnMuZmluZChkID0+IGlzRXF1aXZhbGVudChkLCByZWYpKTtcbiAgICAgICAgaWYgKGtub3duKSB7XG4gICAgICAgICAgdG9rZW4uZ3JvdXBJZCA9IGtub3duLmdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmVmLmdyb3VwSWQgPSB1aWQoKTtcbiAgICAgICAgICB0b2tlbi5ncm91cElkID0gcmVmLmdyb3VwSWQ7XG4gICAgICAgICAga25vd25SZWZzLnB1c2gocmVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBVTktOT1dOKSB7XG4gICAgICB0b2tlbi5lcnJvciA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRva2VubGlzdDtcbn1cbiIsIi8qXG4qKiBSQyBub3RhdGlvbiB3b3JrcyBkaWZmZXJlbnRseSBmcm9tIEExIGluIHRoYXQgd2UgY2FuJ3QgbWVyZ2Ugc3RhdGljXG4qKiByZWZlcmVuY2VzIGpvaW5lZCBieSBgOmAuIE1lcmdpbmcgY2FuIG9ubHkgd29yayBiZXR3ZWVuIHJlZmVyZW5jZXNcbioqIHRoYXQgYXJlIHJlbGF0aXZlL2Fic29sdXRlIG9uIHRoZSBzYW1lIGF4ZXMsIHNvOlxuKiogLSBSMUMxOlIyQzIgd2lsbCB3b3JrLFxuKiogLSBSWzFdQzE6UlsyXUMyIHdpbGwgYWxzbyB3b3JrLCBidXRcbioqIC0gUlsxXUNbMV06UjJDMiBkb2Vzbid0IGhhdmUgYSBkaXJlY3QgcmVjdGFuZ2xlIHJlcHJlc2VudGlvbiB3aXRob3V0IGNvbnRleHQuXG4qL1xuaW1wb3J0IHsgcmFuZ2VPcGVyYXRvciwgdHJpbURpcmVjdGlvbiB9IGZyb20gJy4vYTEuanMnO1xuaW1wb3J0IHsgTUFYX1JPV1MsIE1BWF9DT0xTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWYgfSBmcm9tICcuL3BhcnNlUmVmLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeVByZWZpeCwgc3RyaW5naWZ5UHJlZml4QWx0IH0gZnJvbSAnLi9zdHJpbmdpZnlQcmVmaXguanMnO1xuXG5jb25zdCBjbGFtcCA9IChtaW4sIHZhbCwgbWF4KSA9PiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIG1pbiksIG1heCk7XG5cbmZ1bmN0aW9uIHRvQ29vcmQgKHZhbHVlLCBpc0Ficykge1xuICBpZiAoaXNBYnMpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlICsgMSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID8gJ1snICsgdmFsdWUgKyAnXScgOiAnJztcbn1cblxuLyoqXG4gKiBTdHJpbmdpZnkgYSByYW5nZSBvYmplY3QgaW50byBSMUMxIHN5bnRheC5cbiAqXG4gKiBAaWdub3JlXG4gKiBAcHJpdmF0ZVxuICogQHNlZSBwYXJzZVIxQzFSZWZcbiAqIEBwYXJhbSB7UmFuZ2VSMUMxfSByYW5nZSAgQSByYW5nZSBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICBBbiBSMUMxLXN0eWxlIHN0cmluZyByZXByZXNlbmF0aW9uIG9mIGEgcmFuZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUjFDMSAocmFuZ2UpIHtcbiAgbGV0IHsgcjAsIGMwLCByMSwgYzEgfSA9IHJhbmdlO1xuICBjb25zdCB7ICRjMCwgJGMxLCAkcjAsICRyMSB9ID0gcmFuZ2U7XG4gIGNvbnN0IG51bGxSMCA9IHIwID09IG51bGw7XG4gIGNvbnN0IG51bGxDMCA9IGMwID09IG51bGw7XG4gIGxldCBudWxsUjEgPSByMSA9PSBudWxsO1xuICBsZXQgbnVsbEMxID0gYzEgPT0gbnVsbDtcbiAgY29uc3Qgb3AgPSByYW5nZU9wZXJhdG9yKHJhbmdlLnRyaW0pO1xuICBjb25zdCBoYXNUcmltID0gISFyYW5nZS50cmltO1xuICByMCA9IGNsYW1wKCRyMCA/IDAgOiAtTUFYX1JPV1MsIHIwIHwgMCwgTUFYX1JPV1MpO1xuICBjMCA9IGNsYW1wKCRjMCA/IDAgOiAtTUFYX0NPTFMsIGMwIHwgMCwgTUFYX0NPTFMpO1xuICBpZiAoIW51bGxSMCAmJiBudWxsUjEgJiYgIW51bGxDMCAmJiBudWxsQzEpIHtcbiAgICByMSA9IHIwO1xuICAgIG51bGxSMSA9IGZhbHNlO1xuICAgIGMxID0gYzA7XG4gICAgbnVsbEMxID0gZmFsc2U7XG4gIH1cbiAgZWxzZSB7XG4gICAgcjEgPSBjbGFtcCgkcjEgPyAwIDogLU1BWF9ST1dTLCByMSB8IDAsIE1BWF9ST1dTKTtcbiAgICBjMSA9IGNsYW1wKCRjMSA/IDAgOiAtTUFYX0NPTFMsIGMxIHwgMCwgTUFYX0NPTFMpO1xuICB9XG4gIC8vIEM6Q1xuICBjb25zdCBhbGxSb3dzID0gcjAgPT09IDAgJiYgcjEgPj0gTUFYX1JPV1M7XG4gIGlmICgoYWxsUm93cyAmJiAhbnVsbEMwICYmICFudWxsQzEpIHx8IChudWxsUjAgJiYgbnVsbFIxKSkge1xuICAgIGNvbnN0IGEgPSB0b0Nvb3JkKGMwLCAkYzApO1xuICAgIGNvbnN0IGIgPSB0b0Nvb3JkKGMxLCAkYzEpO1xuICAgIHJldHVybiAnQycgKyAoYSA9PT0gYiAmJiAhaGFzVHJpbSA/IGEgOiBhICsgb3AgKyAnQycgKyBiKTtcbiAgfVxuICAvLyBSOlJcbiAgY29uc3QgYWxsQ29scyA9IGMwID09PSAwICYmIGMxID49IE1BWF9DT0xTO1xuICBpZiAoKGFsbENvbHMgJiYgIW51bGxSMCAmJiAhbnVsbFIxKSB8fCAobnVsbEMwICYmIG51bGxDMSkpIHtcbiAgICBjb25zdCBhID0gdG9Db29yZChyMCwgJHIwKTtcbiAgICBjb25zdCBiID0gdG9Db29yZChyMSwgJHIxKTtcbiAgICByZXR1cm4gJ1InICsgKGEgPT09IGIgJiYgIWhhc1RyaW0gPyBhIDogYSArIG9wICsgJ1InICsgYik7XG4gIH1cbiAgY29uc3Qgc19yMCA9IHRvQ29vcmQocjAsICRyMCk7XG4gIGNvbnN0IHNfcjEgPSB0b0Nvb3JkKHIxLCAkcjEpO1xuICBjb25zdCBzX2MwID0gdG9Db29yZChjMCwgJGMwKTtcbiAgY29uc3Qgc19jMSA9IHRvQ29vcmQoYzEsICRjMSk7XG4gIC8vIFJDOlIsIFJDOkNcbiAgaWYgKG51bGxSMCB8fCBudWxsUjEgfHwgbnVsbEMwIHx8IG51bGxDMSkge1xuICAgIHJldHVybiAoXG4gICAgICAobnVsbFIwID8gJycgOiAnUicgKyBzX3IwKSArXG4gICAgICAobnVsbEMwID8gJycgOiAnQycgKyBzX2MwKSArXG4gICAgICBvcCArXG4gICAgICAobnVsbFIxID8gJycgOiAnUicgKyBzX3IxKSArXG4gICAgICAobnVsbEMxID8gJycgOiAnQycgKyBzX2MxKVxuICAgICk7XG4gIH1cbiAgLy8gUkM6UkNcbiAgaWYgKHNfcjAgIT09IHNfcjEgfHwgc19jMCAhPT0gc19jMSkge1xuICAgIHJldHVybiAnUicgKyBzX3IwICsgJ0MnICsgc19jMCArIG9wICsgJ1InICsgc19yMSArICdDJyArIHNfYzE7XG4gIH1cbiAgLy8gUkNcbiAgcmV0dXJuICdSJyArIHNfcjAgKyAnQycgKyBzX2MwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVIxQzFQYXJ0IChyZWYpIHtcbiAgbGV0IHIwID0gbnVsbDtcbiAgbGV0IGMwID0gbnVsbDtcbiAgbGV0ICRyMCA9IG51bGw7XG4gIGxldCAkYzAgPSBudWxsO1xuICAvLyBSIHBhcnRcbiAgY29uc3Qgcm0gPSAvXlIoPzpcXFsoWystXT9cXGQrKVxcXXwoXFxkKykpPy8uZXhlYyhyZWYpO1xuICBpZiAocm0pIHtcbiAgICBpZiAocm1bMV0pIHtcbiAgICAgIHIwID0gcGFyc2VJbnQocm1bMV0sIDEwKTtcbiAgICAgICRyMCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChybVsyXSkge1xuICAgICAgcjAgPSBwYXJzZUludChybVsyXSwgMTApIC0gMTtcbiAgICAgICRyMCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcjAgPSAwO1xuICAgICAgJHIwID0gZmFsc2U7XG4gICAgfVxuICAgIHJlZiA9IHJlZi5zbGljZShybVswXS5sZW5ndGgpO1xuICB9XG4gIC8vIEMgcGFydFxuICBjb25zdCBjbSA9IC9eQyg/OlxcWyhbKy1dP1xcZCspXFxdfChcXGQrKSk/Ly5leGVjKHJlZik7XG4gIGlmIChjbSkge1xuICAgIGlmIChjbVsxXSkge1xuICAgICAgYzAgPSBwYXJzZUludChjbVsxXSwgMTApO1xuICAgICAgJGMwID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNtWzJdKSB7XG4gICAgICBjMCA9IHBhcnNlSW50KGNtWzJdLCAxMCkgLSAxO1xuICAgICAgJGMwID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjMCA9IDA7XG4gICAgICAkYzAgPSBmYWxzZTtcbiAgICB9XG4gICAgcmVmID0gcmVmLnNsaWNlKGNtWzBdLmxlbmd0aCk7XG4gIH1cbiAgLy8gbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBwYXJ0IChhbmQgbm90aGluZyBtb3JlKVxuICBpZiAoKCFybSAmJiAhY20pIHx8IHJlZi5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWyByMCwgYzAsICRyMCwgJGMwIF07XG59XG5cbi8qKlxuICogUGFyc2UgYSBzaW1wbGUgc3RyaW5nIHJlZmVyZW5jZSB0byBhbiBSMUMxIHJhbmdlIGludG8gYSByYW5nZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHJhbmdlU3RyaW5nICBBIHJhbmdlIHN0cmluZ1xuICogQHJldHVybnMgeyhSYW5nZVIxQzF8bnVsbCl9IEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSB2YWxpZCByZWZlcmVuY2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVIxQzEgKHJhbmdlU3RyaW5nKSB7XG4gIGxldCBmaW5hbCA9IG51bGw7XG4gIGNvbnN0IFsgcGFydDEsIG9wLCBwYXJ0Miwgb3ZlcmZsb3cgXSA9IHJhbmdlU3RyaW5nLnNwbGl0KC8oXFwuPzpcXC4/KS8pO1xuICBpZiAob3ZlcmZsb3cpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByYW5nZSA9IHBhcnNlUjFDMVBhcnQocGFydDEpO1xuICBjb25zdCB0cmltID0gdHJpbURpcmVjdGlvbighIW9wICYmIG9wWzBdID09PSAnLicsICEhb3AgJiYgb3Bbb3AubGVuZ3RoIC0gMV0gPT09ICcuJyk7XG4gIGlmIChyYW5nZSkge1xuICAgIGNvbnN0IFsgcjAsIGMwLCAkcjAsICRjMCBdID0gcmFuZ2U7XG4gICAgaWYgKHBhcnQyKSB7XG4gICAgICBjb25zdCBleHRlbmRUbyA9IHBhcnNlUjFDMVBhcnQocGFydDIpO1xuICAgICAgaWYgKGV4dGVuZFRvKSB7XG4gICAgICAgIGZpbmFsID0ge307XG4gICAgICAgIGNvbnN0IFsgcjEsIGMxLCAkcjEsICRjMSBdID0gZXh0ZW5kVG87XG4gICAgICAgIC8vIHJvd3NcbiAgICAgICAgaWYgKHIwICE9IG51bGwgJiYgcjEgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLnIwID0gJHIwID09PSAkcjEgPyBNYXRoLm1pbihyMCwgcjEpIDogcjA7XG4gICAgICAgICAgZmluYWwuJHIwID0gJHIwO1xuICAgICAgICAgIGZpbmFsLnIxID0gJHIwID09PSAkcjEgPyBNYXRoLm1heChyMCwgcjEpIDogcjE7XG4gICAgICAgICAgZmluYWwuJHIxID0gJHIxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHIwICE9IG51bGwgJiYgcjEgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIHBhcnRpYWwgUkM6Q1xuICAgICAgICAgIGZpbmFsLnIwID0gcjA7XG4gICAgICAgICAgZmluYWwuJHIwID0gJHIwO1xuICAgICAgICAgIGZpbmFsLnIxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kcjEgPSAkcjA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocjAgPT0gbnVsbCAmJiByMSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gcGFydGlhbCBDOlJDXG4gICAgICAgICAgZmluYWwucjAgPSByMTtcbiAgICAgICAgICBmaW5hbC4kcjAgPSAkcjE7XG4gICAgICAgICAgZmluYWwucjEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRyMSA9ICRyMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyMCA9PSBudWxsICYmIHIxID09IG51bGwpIHtcbiAgICAgICAgICAvLyBDOkNcbiAgICAgICAgICBmaW5hbC5yMCA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJHIwID0gZmFsc2U7XG4gICAgICAgICAgZmluYWwucjEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRyMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbHVtbnNcbiAgICAgICAgaWYgKGMwICE9IG51bGwgJiYgYzEgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLmMwID0gJGMwID09PSAkYzEgPyBNYXRoLm1pbihjMCwgYzEpIDogYzA7XG4gICAgICAgICAgZmluYWwuJGMwID0gJGMwO1xuICAgICAgICAgIGZpbmFsLmMxID0gJGMwID09PSAkYzEgPyBNYXRoLm1heChjMCwgYzEpIDogYzE7XG4gICAgICAgICAgZmluYWwuJGMxID0gJGMxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMwICE9IG51bGwgJiYgYzEgPT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLmMwID0gYzA7XG4gICAgICAgICAgZmluYWwuJGMwID0gJGMwO1xuICAgICAgICAgIGZpbmFsLmMxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kYzEgPSAkYzA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYzAgPT0gbnVsbCAmJiBjMSAhPSBudWxsKSB7XG4gICAgICAgICAgZmluYWwuYzAgPSBjMTtcbiAgICAgICAgICBmaW5hbC4kYzAgPSAkYzE7XG4gICAgICAgICAgZmluYWwuYzEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRjMSA9ICRjMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjMCA9PSBudWxsICYmIGMxID09IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5jMCA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJGMwID0gZmFsc2U7XG4gICAgICAgICAgZmluYWwuYzEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRjMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJhbmdlIG9ubHkgLSBubyBzZWNvbmQgcGFydFxuICAgIGVsc2UgaWYgKHIwICE9IG51bGwgJiYgYzAgPT0gbnVsbCkge1xuICAgICAgZmluYWwgPSB7XG4gICAgICAgIHIwOiByMCxcbiAgICAgICAgYzA6IG51bGwsXG4gICAgICAgIHIxOiByMCxcbiAgICAgICAgYzE6IG51bGwsXG4gICAgICAgICRyMDogJHIwLFxuICAgICAgICAkYzA6IGZhbHNlLFxuICAgICAgICAkcjE6ICRyMCxcbiAgICAgICAgJGMxOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAocjAgPT0gbnVsbCAmJiBjMCAhPSBudWxsKSB7XG4gICAgICBmaW5hbCA9IHtcbiAgICAgICAgcjA6IG51bGwsXG4gICAgICAgIGMwOiBjMCxcbiAgICAgICAgcjE6IG51bGwsXG4gICAgICAgIGMxOiBjMCxcbiAgICAgICAgJHIwOiBmYWxzZSxcbiAgICAgICAgJGMwOiAkYzAsXG4gICAgICAgICRyMTogZmFsc2UsXG4gICAgICAgICRjMTogJGMwXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZpbmFsID0ge1xuICAgICAgICByMDogcjAgfHwgMCxcbiAgICAgICAgYzA6IGMwIHx8IDAsXG4gICAgICAgIHIxOiByMCB8fCAwLFxuICAgICAgICBjMTogYzAgfHwgMCxcbiAgICAgICAgJHIwOiAkcjAgfHwgZmFsc2UsXG4gICAgICAgICRjMDogJGMwIHx8IGZhbHNlLFxuICAgICAgICAkcjE6ICRyMCB8fCBmYWxzZSxcbiAgICAgICAgJGMxOiAkYzAgfHwgZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChmaW5hbCAmJiB0cmltKSB7XG4gICAgZmluYWwudHJpbSA9IHRyaW07XG4gIH1cbiAgcmV0dXJuIGZpbmFsO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHJlZmVyZW5jZSBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgaXQuXG4gKlxuICogYGBganNcbiAqIHBhcnNlUjFDMVJlZignU2hlZXQxIVJbOV1DOTpSWzldQzknKTtcbiAqIC8vID0+IHtcbiAqIC8vICAgY29udGV4dDogWyAnU2hlZXQxJyBdLFxuICogLy8gICByYW5nZToge1xuICogLy8gICAgIHIwOiA5LFxuICogLy8gICAgIGMwOiA4LFxuICogLy8gICAgIHIxOiA5LFxuICogLy8gICAgIGMxOiA4LFxuICogLy8gICAgICRjMDogdHJ1ZSxcbiAqIC8vICAgICAkYzE6IHRydWVcbiAqIC8vICAgICAkcjA6IGZhbHNlLFxuICogLy8gICAgICRyMTogZmFsc2VcbiAqIC8vICAgfVxuICogLy8gfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZlN0cmluZyBBbiBSMUMxLXN0eWxlIHJlZmVyZW5jZSBzdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMgeyhSZWZlcmVuY2VSMUMxfG51bGwpfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFsaWQgcmVmZXJlbmNlIG9yIG51bGwgaWYgaXQgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUjFDMVJlZiAocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQgPSB0cnVlLCBhbGxvd1Rlcm5hcnkgPSBmYWxzZSwgeGxzeCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBkID0gcGFyc2VSZWYocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQsIGFsbG93VGVybmFyeSwgeGxzeCwgcjFjMTogdHJ1ZSB9KTtcbiAgaWYgKGQgJiYgKGQucjAgfHwgZC5uYW1lKSkge1xuICAgIGNvbnN0IHJhbmdlID0gZC5yMVxuICAgICAgPyBmcm9tUjFDMShkLnIwICsgZC5vcGVyYXRvciArIGQucjEpXG4gICAgICA6IGZyb21SMUMxKGQucjApO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIHJhbmdlIH1cbiAgICAgICAgOiB7IGNvbnRleHQ6IGQuY29udGV4dCwgcmFuZ2UgfTtcbiAgICB9XG4gICAgaWYgKGQubmFtZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIG5hbWU6IGQubmFtZSB9XG4gICAgICAgIDogeyBjb250ZXh0OiBkLmNvbnRleHQsIG5hbWU6IGQubmFtZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBHZXQgYW4gUjFDMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlSMUMxUmVmKHtcbiAqICAgY29udGV4dDogWyAnU2hlZXQxJyBdLFxuICogICByYW5nZToge1xuICogICAgIHIwOiA5LFxuICogICAgIGMwOiA4LFxuICogICAgIHIxOiA5LFxuICogICAgIGMxOiA4LFxuICogICAgICRjMDogdHJ1ZSxcbiAqICAgICAkYzE6IHRydWVcbiAqICAgICAkcjA6IGZhbHNlLFxuICogICAgICRyMTogZmFsc2VcbiAqICAgfVxuICogfSk7XG4gKiAvLyA9PiAnU2hlZXQxIVJbOV1DOTpSWzldQzknXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1JlZmVyZW5jZVIxQzF9IHJlZk9iamVjdCBBIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZWZlcmVuY2UgaW4gUjFDMS1zdHlsZSBzdHJpbmcgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlSMUMxUmVmIChyZWZPYmplY3QsIHsgeGxzeCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBwcmVmaXggPSB4bHN4XG4gICAgPyBzdHJpbmdpZnlQcmVmaXhBbHQocmVmT2JqZWN0KVxuICAgIDogc3RyaW5naWZ5UHJlZml4KHJlZk9iamVjdCk7XG4gIHJldHVybiBwcmVmaXggKyAoXG4gICAgcmVmT2JqZWN0Lm5hbWUgPyByZWZPYmplY3QubmFtZSA6IHRvUjFDMShyZWZPYmplY3QucmFuZ2UpXG4gICk7XG59XG4iLCJpbXBvcnQgeyBNQVhfUk9XUywgTUFYX0NPTFMsIEVSUk9SIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgZnJvbUExLCBwYXJzZUExUmVmLCBzdHJpbmdpZnlBMVJlZiB9IGZyb20gJy4vYTEuanMnO1xuaW1wb3J0IHsgcGFyc2VSMUMxUmVmLCBzdHJpbmdpZnlSMUMxUmVmIH0gZnJvbSAnLi9yYy5qcyc7XG5pbXBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuaW1wb3J0IHsgaXNSYW5nZSB9IGZyb20gJy4vaXNUeXBlLmpzJztcblxuY29uc3QgY2FsYyA9IChhYnMsIHZYLCBhWCkgPT4ge1xuICBpZiAodlggPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBhYnMgPyB2WCA6IHZYIC0gYVg7XG59O1xuXG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgd2l0aExvY2F0aW9uOiBmYWxzZSxcbiAgbWVyZ2VSZWZzOiBmYWxzZSxcbiAgYWxsb3dUZXJuYXJ5OiB0cnVlLFxuICByMWMxOiBmYWxzZVxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHJhbmdlcyBpbiBhIGZvcm11bGEgb3IgbGlzdCBvZiB0b2tlbnMgZnJvbSBhYnNvbHV0ZSBBMSBzeW50YXggdG9cbiAqIHJlbGF0aXZlIFIxQzEgc3ludGF4LlxuICpcbiAqIFJldHVybnMgdGhlIHNhbWUgZm9ybXVsYSB3aXRoIHRoZSByYW5nZXMgdHJhbnNsYXRlZC4gSWYgYW4gYXJyYXkgb2YgdG9rZW5zXG4gKiB3YXMgc3VwcGxpZWQsIHRoZW4gdGhlIHNhbWUgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIHRyYW5zbGF0ZVRvUjFDMShcIj1TVU0oRTEwLCRFJDIsU2hlZXQhJEUkMylcIiwgXCJEMTBcIik7XG4gKiAvLyA9PiBcIj1TVU0oUkNbMV0sUjJDNSxTaGVldCFSM0M1KVwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IGZvcm11bGEgQSBzdHJpbmcgKGFuIEV4Y2VsIGZvcm11bGEpIG9yIGEgdG9rZW4gbGlzdCB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNob3JDZWxsIEEgc2ltcGxlIHN0cmluZyByZWZlcmVuY2UgdG8gYW4gQTEgY2VsbCBJRCAoYEFGMTIzYCBvcmAkQyQ1YCkuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT10cnVlXSAgRW5hYmxlcyB0aGUgcmVjb2duaXRpb24gb2YgdGVybmFyeSByYW5nZXMgaW4gdGhlIHN0eWxlIG9mIGBBMTpBYCBvciBgQTE6MWAuIFRoZXNlIGFyZSBzdXBwb3J0ZWQgYnkgR29vZ2xlIFNoZWV0cyBidXQgbm90IEV4Y2VsLiBTZWU6IFJlZmVyZW5jZXMubWQuXG4gKiBAcmV0dXJucyB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IEEgZm9ybXVsYSBzdHJpbmcgb3IgdG9rZW4gbGlzdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHdhcyBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvUjFDMSAoZm9ybXVsYSwgYW5jaG9yQ2VsbCwgeyB4bHN4ID0gZmFsc2UsIGFsbG93VGVybmFyeSA9IHRydWUgfSA9IHt9KSB7XG4gIGNvbnN0IHsgdG9wLCBsZWZ0IH0gPSBmcm9tQTEoYW5jaG9yQ2VsbCk7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGZvcm11bGEgPT09ICdzdHJpbmcnO1xuXG4gIGNvbnN0IHRva2VucyA9IGlzU3RyaW5nXG4gICAgPyB0b2tlbml6ZShmb3JtdWxhLCB7IC4uLnNldHRpbmdzLCB4bHN4LCBhbGxvd1Rlcm5hcnkgfSlcbiAgICA6IGZvcm11bGE7XG5cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICBjb25zdCByZWZPcHRzID0geyB4bHN4LCBhbGxvd1Rlcm5hcnkgfTtcbiAgdG9rZW5zLmZvckVhY2godG9rZW4gPT4ge1xuICAgIGlmIChpc1JhbmdlKHRva2VuKSkge1xuICAgICAgY29uc3QgdG9rZW5WYWx1ZSA9IHRva2VuLnZhbHVlO1xuICAgICAgY29uc3QgcmVmID0gcGFyc2VBMVJlZih0b2tlblZhbHVlLCByZWZPcHRzKTtcbiAgICAgIGNvbnN0IGQgPSByZWYucmFuZ2U7XG4gICAgICBjb25zdCByYW5nZSA9IHt9O1xuICAgICAgcmFuZ2UucjAgPSBjYWxjKGQuJHRvcCwgZC50b3AsIHRvcCk7XG4gICAgICByYW5nZS5yMSA9IGNhbGMoZC4kYm90dG9tLCBkLmJvdHRvbSwgdG9wKTtcbiAgICAgIHJhbmdlLmMwID0gY2FsYyhkLiRsZWZ0LCBkLmxlZnQsIGxlZnQpO1xuICAgICAgcmFuZ2UuYzEgPSBjYWxjKGQuJHJpZ2h0LCBkLnJpZ2h0LCBsZWZ0KTtcbiAgICAgIHJhbmdlLiRyMCA9IGQuJHRvcDtcbiAgICAgIHJhbmdlLiRyMSA9IGQuJGJvdHRvbTtcbiAgICAgIHJhbmdlLiRjMCA9IGQuJGxlZnQ7XG4gICAgICByYW5nZS4kYzEgPSBkLiRyaWdodDtcbiAgICAgIGlmIChkLnRyaW0pIHtcbiAgICAgICAgcmFuZ2UudHJpbSA9IGQudHJpbTtcbiAgICAgIH1cbiAgICAgIHJlZi5yYW5nZSA9IHJhbmdlO1xuICAgICAgdG9rZW4udmFsdWUgPSBzdHJpbmdpZnlSMUMxUmVmKHJlZiwgcmVmT3B0cyk7XG4gICAgICAvLyBpZiB0b2tlbiBpbmNsdWRlcyBvZmZzZXRzLCB0aG9zZSBvZmZzZXRzIGFyZSBub3cgbGlrZWx5IHdyb25nIVxuICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgICAgb2Zmc2V0U2tldyArPSB0b2tlbi52YWx1ZS5sZW5ndGggLSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9mZnNldFNrZXcgJiYgdG9rZW4ubG9jKSB7XG4gICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlzU3RyaW5nXG4gICAgPyB0b2tlbnMubWFwKGQgPT4gZC52YWx1ZSkuam9pbignJylcbiAgICA6IHRva2Vucztcbn1cblxuZnVuY3Rpb24gdG9GaXhlZCAodmFsLCBhYnMsIGJhc2UsIG1heCwgd3JhcEVkZ2VzID0gdHJ1ZSkge1xuICBsZXQgdiA9IHZhbDtcbiAgaWYgKHYgIT0gbnVsbCAmJiAhYWJzKSB7XG4gICAgdiA9IGJhc2UgKyB2YWw7XG4gICAgLy8gRXhjZWwgXCJ3cmFwcyBhcm91bmRcIiB3aGVuIHZhbHVlIGdvZXMgb3V0IG9mIGxvd2VyIGJvdW5kcy5cbiAgICAvLyBJdCdzIGEgYml0IHF1aXJreSBvbiBlbnRyeSBhcyBFeGNlbCBfcmVhbGx5IHdhbnRzXyB0byByZS1yZXdpdGUgdGhlXG4gICAgLy8gcmVmZXJlbmNlcyBidXQgdGhlIGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggSU5ESVJFQ1Q6XG4gICAgLy8gLi4uIEluIEExOiBSQ1stMV0gPT4gUjFDWzE2MzgzXS5cbiAgICBpZiAodiA8IDApIHtcbiAgICAgIGlmICghd3JhcEVkZ2VzKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgICB9XG4gICAgICB2ID0gbWF4ICsgdiArIDE7XG4gICAgfVxuICAgIC8vIC4uLiBJbiBCMTogPVJDWzE2MzgzXSA9PiA9UkNbLTFdXG4gICAgaWYgKHYgPiBtYXgpIHtcbiAgICAgIGlmICghd3JhcEVkZ2VzKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgICB9XG4gICAgICB2IC09IG1heCArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgd3JhcEVkZ2VzOiB0cnVlLFxuICBtZXJnZVJlZnM6IHRydWUsXG4gIGFsbG93VGVybmFyeTogdHJ1ZSxcbiAgeGxzeDogZmFsc2Vcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyByYW5nZXMgaW4gYSBmb3JtdWxhIG9yIGxpc3Qgb2YgdG9rZW5zIGZyb20gcmVsYXRpdmUgUjFDMSBzeW50YXggdG9cbiAqIGFic29sdXRlIEExIHN5bnRheC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIGZvcm11bGEgd2l0aCB0aGUgcmFuZ2VzIHRyYW5zbGF0ZWQuIElmIGFuIGFycmF5IG9mIHRva2Vuc1xuICogd2FzIHN1cHBsaWVkLCB0aGVuIHRoZSBzYW1lIGFycmF5IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiB0cmFuc2xhdGVUb0ExKFwiPVNVTShSQ1sxXSxSMkM1LFNoZWV0IVIzQzUpXCIsIFwiRDEwXCIpO1xuICogLy8gPT4gXCI9U1VNKEUxMCwkRSQyLFNoZWV0ISRFJDMpXCIpO1xuICogYGBgXG4gKlxuICogSWYgYW4gaW5wdXQgcmFuZ2UgaXMgLTEsLTEgcmVsYXRpdmUgcm93cy9jb2x1bW5zIGFuZCB0aGUgYW5jaG9yIGlzIEExLCB0aGVcbiAqIHJlc3VsdGluZyByYW5nZSB3aWxsIChieSBkZWZhdWx0KSB3cmFwIGFyb3VuZCB0byB0aGUgYm90dG9tIG9mIHRoZSBzaGVldFxuICogcmVzdWx0aW5nIGluIHRoZSByYW5nZSBYRkQxMDQ4NTc2LiBUaGlzIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCBzbyBtYXkgc2V0XG4gKiBgd3JhcEVkZ2VzYCB0byBmYWxzZSB3aGljaCB3aWxsIGluc3RlYWQgdHVybiB0aGUgcmFuZ2UgaW50byBhIGAjUkVGIWAgZXJyb3IuXG4gKlxuICogYGBganNcbiAqIHRyYW5zbGF0ZVRvQTEoXCI9UlstMV1DWy0xXVwiLCBcIkExXCIpO1xuICogLy8gPT4gXCI9WEZEMTA0ODU3NlwiKTtcbiAqXG4gKiB0cmFuc2xhdGVUb0ExKFwiPVJbLTFdQ1stMV1cIiwgXCJBMVwiLCB7IHdyYXBFZGdlczogZmFsc2UgfSk7XG4gKiAvLyA9PiBcIj0jUkVGIVwiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGUgdGhhdCBpZiB5b3UgYXJlIHBhc3NpbmcgaW4gYSBsaXN0IG9mIHRva2VucyB0aGF0IHdhcyBub3QgY3JlYXRlZCB1c2luZ1xuICogYG1lcmdlUmVmc2AgYW5kIHlvdSBkaXNhYmxlIGVkZ2Ugd3JhcHBpbmcgKG9yIHlvdSBzaW1wbHkgc2V0IGJvdGggb3B0aW9uc1xuICogdG8gZmFsc2UpLCB5b3UgY2FuIGVuZCB1cCB3aXRoIGEgZm9ybXVsYSBzdWNoIGFzIGA9I1JFRiE6QjJgIG9yXG4gKiBgPVNoZWV0MyEjUkVGITpGM2AuIFRoZXNlIGFyZSB2YWxpZCBmb3JtdWxhcyBpbiB0aGUgRXhjZWwgZm9ybXVsYSBsYW5ndWFnZVxuICogYW5kIEV4Y2VsIHdpbGwgYWNjZXB0IHRoZW0sIGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGluIEdvb2dsZSBTaGVldHMuXG4gKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgQXJyYXk8VG9rZW4+KX0gZm9ybXVsYSBBIHN0cmluZyAoYW4gRXhjZWwgZm9ybXVsYSkgb3IgYSB0b2tlbiBsaXN0IHRoYXQgc2hvdWxkIGJlIGFkanVzdGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGFuY2hvckNlbGwgQSBzaW1wbGUgc3RyaW5nIHJlZmVyZW5jZSB0byBhbiBBMSBjZWxsIElEIChgQUYxMjNgIG9yYCRDJDVgKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMud3JhcEVkZ2VzPXRydWVdICBXcmFwIG91dC1vZi1ib3VuZHMgcmFuZ2VzIGFyb3VuZCBzaGVldCBlZGdlcyByYXRoZXIgdGhhbiB0dXJuaW5nIHRoZW0gdG8gI1JFRiEgZXJyb3JzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm1lcmdlUmVmcz10cnVlXSAgIFNob3VsZCByYW5nZXMgYmUgdHJlYXRlZCBhcyB3aG9sZSByZWZlcmVuY2VzIChgU2hlZXQxIUExOkIyYCkgb3IgYXMgc2VwYXJhdGUgdG9rZW5zIGZvciBlYWNoIHBhcnQ6IChgU2hlZXQxYCxgIWAsYEExYCxgOmAsYEIyYCkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT10cnVlXSAgRW5hYmxlcyB0aGUgcmVjb2duaXRpb24gb2YgdGVybmFyeSByYW5nZXMgaW4gdGhlIHN0eWxlIG9mIGBBMTpBYCBvciBgQTE6MWAuIFRoZXNlIGFyZSBzdXBwb3J0ZWQgYnkgR29vZ2xlIFNoZWV0cyBidXQgbm90IEV4Y2VsLiBTZWU6IFJlZmVyZW5jZXMubWQuXG4gKiBAcmV0dXJucyB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IEEgZm9ybXVsYSBzdHJpbmcgb3IgdG9rZW4gbGlzdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHdhcyBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvQTEgKGZvcm11bGEsIGFuY2hvckNlbGwsIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucykge1xuICBjb25zdCBhbmNob3IgPSBmcm9tQTEoYW5jaG9yQ2VsbCk7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGZvcm11bGEgPT09ICdzdHJpbmcnO1xuICBjb25zdCBvcHRzID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuXG4gIGNvbnN0IHRva2VucyA9IGlzU3RyaW5nXG4gICAgPyB0b2tlbml6ZShmb3JtdWxhLCB7XG4gICAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgICAgbWVyZ2VSZWZzOiBvcHRzLm1lcmdlUmVmcyxcbiAgICAgIHhsc3g6IG9wdHMueGxzeCxcbiAgICAgIGFsbG93VGVybmFyeTogb3B0cy5hbGxvd1Rlcm5hcnksXG4gICAgICByMWMxOiB0cnVlXG4gICAgfSlcbiAgICA6IGZvcm11bGE7XG5cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICBjb25zdCByZWZPcHRzID0geyB4bHN4OiBvcHRzLnhsc3gsIGFsbG93VGVybmFyeTogb3B0cy5hbGxvd1Rlcm5hcnkgfTtcbiAgdG9rZW5zLmZvckVhY2godG9rZW4gPT4ge1xuICAgIGlmIChpc1JhbmdlKHRva2VuKSkge1xuICAgICAgY29uc3QgdG9rZW5WYWx1ZSA9IHRva2VuLnZhbHVlO1xuICAgICAgY29uc3QgcmVmID0gcGFyc2VSMUMxUmVmKHRva2VuVmFsdWUsIHJlZk9wdHMpO1xuICAgICAgY29uc3QgZCA9IHJlZi5yYW5nZTtcbiAgICAgIGNvbnN0IHJhbmdlID0ge307XG4gICAgICBjb25zdCByMCA9IHRvRml4ZWQoZC5yMCwgZC4kcjAsIGFuY2hvci50b3AsIE1BWF9ST1dTLCBvcHRzLndyYXBFZGdlcyk7XG4gICAgICBjb25zdCByMSA9IHRvRml4ZWQoZC5yMSwgZC4kcjEsIGFuY2hvci50b3AsIE1BWF9ST1dTLCBvcHRzLndyYXBFZGdlcyk7XG4gICAgICBpZiAocjAgPiByMSkge1xuICAgICAgICByYW5nZS50b3AgPSByMTtcbiAgICAgICAgcmFuZ2UuJHRvcCA9IGQuJHIxO1xuICAgICAgICByYW5nZS5ib3R0b20gPSByMDtcbiAgICAgICAgcmFuZ2UuJGJvdHRvbSA9IGQuJHIwO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJhbmdlLnRvcCA9IHIwO1xuICAgICAgICByYW5nZS4kdG9wID0gZC4kcjA7XG4gICAgICAgIHJhbmdlLmJvdHRvbSA9IHIxO1xuICAgICAgICByYW5nZS4kYm90dG9tID0gZC4kcjE7XG4gICAgICB9XG4gICAgICBjb25zdCBjMCA9IHRvRml4ZWQoZC5jMCwgZC4kYzAsIGFuY2hvci5sZWZ0LCBNQVhfQ09MUywgb3B0cy53cmFwRWRnZXMpO1xuICAgICAgY29uc3QgYzEgPSB0b0ZpeGVkKGQuYzEsIGQuJGMxLCBhbmNob3IubGVmdCwgTUFYX0NPTFMsIG9wdHMud3JhcEVkZ2VzKTtcbiAgICAgIGlmIChjMCA+IGMxKSB7XG4gICAgICAgIHJhbmdlLmxlZnQgPSBjMTtcbiAgICAgICAgcmFuZ2UuJGxlZnQgPSBkLiRjMTtcbiAgICAgICAgcmFuZ2UucmlnaHQgPSBjMDtcbiAgICAgICAgcmFuZ2UuJHJpZ2h0ID0gZC4kYzA7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmFuZ2UubGVmdCA9IGMwO1xuICAgICAgICByYW5nZS4kbGVmdCA9IGQuJGMwO1xuICAgICAgICByYW5nZS5yaWdodCA9IGMxO1xuICAgICAgICByYW5nZS4kcmlnaHQgPSBkLiRjMTtcbiAgICAgIH1cbiAgICAgIGlmIChkLnRyaW0pIHtcbiAgICAgICAgcmFuZ2UudHJpbSA9IGQudHJpbTtcbiAgICAgIH1cbiAgICAgIGlmIChpc05hTihyMCkgfHwgaXNOYU4ocjEpIHx8IGlzTmFOKGMwKSB8fCBpc05hTihjMSkpIHtcbiAgICAgICAgLy8gY29udmVydCB0byByZWYgZXJyb3JcbiAgICAgICAgdG9rZW4udHlwZSA9IEVSUk9SO1xuICAgICAgICB0b2tlbi52YWx1ZSA9ICcjUkVGISc7XG4gICAgICAgIGRlbGV0ZSB0b2tlbi5ncm91cElkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlZi5yYW5nZSA9IHJhbmdlO1xuICAgICAgICB0b2tlbi52YWx1ZSA9IHN0cmluZ2lmeUExUmVmKHJlZiwgcmVmT3B0cyk7XG4gICAgICB9XG4gICAgICAvLyBpZiB0b2tlbiBpbmNsdWRlcyBvZmZzZXRzLCB0aG9zZSBvZmZzZXRzIGFyZSBub3cgbGlrZWx5IHdyb25nIVxuICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgICAgb2Zmc2V0U2tldyArPSB0b2tlbi52YWx1ZS5sZW5ndGggLSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9mZnNldFNrZXcgJiYgdG9rZW4ubG9jKSB7XG4gICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlzU3RyaW5nXG4gICAgPyB0b2tlbnMubWFwKGQgPT4gZC52YWx1ZSkuam9pbignJylcbiAgICA6IHRva2Vucztcbn1cbiIsImltcG9ydCB7IHN0cmluZ2lmeVByZWZpeCwgc3RyaW5naWZ5UHJlZml4QWx0IH0gZnJvbSAnLi9zdHJpbmdpZnlQcmVmaXguanMnO1xuXG5mdW5jdGlvbiBxdW90ZUNvbG5hbWUgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbW1xcXSMnQF0pL2csICdcXCckMScpO1xufVxuXG5mdW5jdGlvbiBuZWVkc0JyYWNlcyAoc3RyKSB7XG4gIHJldHVybiAhL15bYS16QS1aMC05XFx1MDBhMS1cXHVmZmZmXSskLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHRvU2VudGVuY2VDYXNlIChzdHIpIHtcbiAgcmV0dXJuIHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc3RydWN0dXJlZCByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlTdHJ1Y3RSZWYoe1xuICogICBjb250ZXh0OiBbICd3b3JrYm9vay54bHN4JyBdLFxuICogICBzZWN0aW9uczogWyAnZGF0YScgXSxcbiAqICAgY29sdW1uczogWyAnbXkgY29sdW1uJywgJ0Bmb28nIF0sXG4gKiAgIHRhYmxlOiAndGFibGVOYW1lJyxcbiAqIH0pO1xuICogLy8gPT4gJ3dvcmtib29rLnhsc3ghdGFibGVOYW1lW1sjRGF0YV0sW0NvbHVtbjFdOltDb2x1bW4yXV0nXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1JlZmVyZW5jZVN0cnVjdH0gcmVmT2JqZWN0IEEgc3RydWN0dXJlZCByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRoaXNSb3c9ZmFsc2VdICBFbmZvcmNlcyB1c2luZyB0aGUgYFsjVGhpcyBSb3ddYCBpbnN0ZWFkIG9mIHRoZSBgQGAgc2hvcnRoYW5kIHdoZW4gc2VyaWFsaXppbmcgc3RydWN0dXJlZCByYW5nZXMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RydWN0dXJlZCByZWZlcmVuY2UgaW4gc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5U3RydWN0UmVmIChyZWZPYmplY3QsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHhsc3gsIHRoaXNSb3cgfSA9IG9wdGlvbnM7XG4gIGxldCBzID0geGxzeFxuICAgID8gc3RyaW5naWZ5UHJlZml4QWx0KHJlZk9iamVjdClcbiAgICA6IHN0cmluZ2lmeVByZWZpeChyZWZPYmplY3QpO1xuXG4gIGlmIChyZWZPYmplY3QudGFibGUpIHtcbiAgICBzICs9IHJlZk9iamVjdC50YWJsZTtcbiAgfVxuICBjb25zdCBudW1Db2x1bW5zID0gcmVmT2JqZWN0LmNvbHVtbnM/Lmxlbmd0aCA/PyAwO1xuICBjb25zdCBudW1TZWN0aW9ucyA9IHJlZk9iamVjdC5zZWN0aW9ucz8ubGVuZ3RoID8/IDA7XG4gIC8vIHNpbmdsZSBzZWN0aW9uXG4gIGlmIChudW1TZWN0aW9ucyA9PT0gMSAmJiAhbnVtQ29sdW1ucykge1xuICAgIHMgKz0gYFsjJHt0b1NlbnRlbmNlQ2FzZShyZWZPYmplY3Quc2VjdGlvbnNbMF0pfV1gO1xuICB9XG4gIC8vIHNpbmdsZSBjb2x1bW5cbiAgZWxzZSBpZiAoIW51bVNlY3Rpb25zICYmIG51bUNvbHVtbnMgPT09IDEpIHtcbiAgICBzICs9IGBbJHtxdW90ZUNvbG5hbWUocmVmT2JqZWN0LmNvbHVtbnNbMF0pfV1gO1xuICB9XG4gIGVsc2Uge1xuICAgIHMgKz0gJ1snO1xuICAgIC8vIHNpbmdsZSBbI3RoaXMgcm93XSBzZWN0aW9ucyBnZXQgbm9ybWFsaXplZCB0byBhbiBAIGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaW5nbGVBdCA9ICF0aGlzUm93ICYmIG51bVNlY3Rpb25zID09PSAxICYmIHJlZk9iamVjdC5zZWN0aW9uc1swXS50b0xvd2VyQ2FzZSgpID09PSAndGhpcyByb3cnO1xuICAgIGlmIChzaW5nbGVBdCkge1xuICAgICAgcyArPSAnQCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bVNlY3Rpb25zKSB7XG4gICAgICBzICs9IHJlZk9iamVjdC5zZWN0aW9uc1xuICAgICAgICAubWFwKGQgPT4gYFsjJHt0b1NlbnRlbmNlQ2FzZShkKX1dYClcbiAgICAgICAgLmpvaW4oJywnKTtcbiAgICAgIGlmIChudW1Db2x1bW5zKSB7XG4gICAgICAgIHMgKz0gJywnO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhIGNhc2Ugb2YgYSBzaW5nbGUgYWxwaGFudW1iZXJpYyBjb2x1bW4gd2l0aCBhIFsjdGhpcyByb3ddIGJlY29tZXMgW0Bjb2xdXG4gICAgaWYgKHNpbmdsZUF0ICYmIHJlZk9iamVjdC5jb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiAhbmVlZHNCcmFjZXMocmVmT2JqZWN0LmNvbHVtbnNbMF0pKSB7XG4gICAgICBzICs9IHF1b3RlQ29sbmFtZShyZWZPYmplY3QuY29sdW1uc1swXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bUNvbHVtbnMpIHtcbiAgICAgIHMgKz0gcmVmT2JqZWN0LmNvbHVtbnMuc2xpY2UoMCwgMilcbiAgICAgICAgLm1hcChkID0+IChgWyR7cXVvdGVDb2xuYW1lKGQpfV1gKSlcbiAgICAgICAgLmpvaW4oJzonKTtcbiAgICB9XG4gICAgcyArPSAnXSc7XG4gIH1cbiAgcmV0dXJuIHM7XG59XG4iLCJleHBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuZXhwb3J0IHsgcGFyc2UgfSBmcm9tICcuL3BhcnNlci5qcyc7XG5leHBvcnQgeyBhZGRUb2tlbk1ldGEgfSBmcm9tICcuL2FkZFRva2VuTWV0YS5qcyc7XG5leHBvcnQgeyB0cmFuc2xhdGVUb1IxQzEsIHRyYW5zbGF0ZVRvQTEgfSBmcm9tICcuL3RyYW5zbGF0ZS5qcyc7XG5leHBvcnQgeyBNQVhfQ09MUywgTUFYX1JPV1MgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5leHBvcnQgeyBtZXJnZVJlZlRva2VucyB9IGZyb20gJy4vbWVyZ2VSZWZUb2tlbnMuanMnO1xuZXhwb3J0IHsgZml4UmFuZ2VzIH0gZnJvbSAnLi9maXhSYW5nZXMuanMnO1xuZXhwb3J0IHtcbiAgaXNFcnJvcixcbiAgaXNGdW5jdGlvbixcbiAgaXNGeFByZWZpeCxcbiAgaXNMaXRlcmFsLFxuICBpc09wZXJhdG9yLFxuICBpc1JhbmdlLFxuICBpc1JlZmVyZW5jZSxcbiAgaXNXaGl0ZXNwYWNlXG59IGZyb20gJy4vaXNUeXBlLmpzJztcblxuZXhwb3J0IHsgZnJvbUNvbCB9IGZyb20gJy4vZnJvbUNvbC5qcyc7XG5leHBvcnQgeyB0b0NvbCB9IGZyb20gJy4vdG9Db2wuanMnO1xuXG5leHBvcnQge1xuICBwYXJzZUExUmVmLFxuICBzdHJpbmdpZnlBMVJlZixcbiAgYWRkQTFSYW5nZUJvdW5kc1xufSBmcm9tICcuL2ExLmpzJztcblxuZXhwb3J0IHtcbiAgcGFyc2VSMUMxUmVmLFxuICBzdHJpbmdpZnlSMUMxUmVmXG59IGZyb20gJy4vcmMuanMnO1xuXG5leHBvcnQgeyBzdHJpbmdpZnlTdHJ1Y3RSZWYgfSBmcm9tICcuL3N0cmluZ2lmeVN0cnVjdFJlZi5qcyc7XG5leHBvcnQgeyBwYXJzZVN0cnVjdFJlZiB9IGZyb20gJy4vcGFyc2VTdHJ1Y3RSZWYuanMnO1xuXG5pbXBvcnQge1xuICAvLyB0b2tlbiB0eXBlc1xuICBPUEVSQVRPUixcbiAgQk9PTEVBTixcbiAgRVJST1IsXG4gIE5VTUJFUixcbiAgRlVOQ1RJT04sXG4gIE5FV0xJTkUsXG4gIFdISVRFU1BBQ0UsXG4gIFNUUklORyxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfQkVBTSxcbiAgUkVGX1RFUk5BUlksXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1NUUlVDVCxcbiAgRlhfUFJFRklYLFxuICBVTktOT1dOLFxuICAvLyBBU1QgdHlwZXNcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUl9MSVRFUkFMLFxuICBDQUxMLFxuICBBUlJBWSxcbiAgSURFTlRJRklFUlxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogQSBkaWN0aW9uYXJ5IG9mIHRoZSB0eXBlcyB1c2VkIHRvIGlkZW50aWZ5IHRva2VuIHZhcmlhbnRzLlxuICpcbiAqIEByZWFkb25seVxuICogQGNvbnN0YW50IHtPYmplY3Q8c3RyaW5nPn0gdG9rZW5UeXBlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IE9QRVJBVE9SIC0gTmV3bGluZSAoYFxcbmApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQk9PTEVBTiAtIEJvb2xlYW4gbGl0ZXJhbCAoYFRSVUVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVSUk9SIC0gRXJyb3IgbGl0ZXJhbCAoYCNWQUxVRSFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5VTUJFUiAtIE51bWJlciBsaXRlcmFsIChgMTIzLjRgLCBgLTEuNWUrMmApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRlVOQ1RJT04gLSBGdW5jdGlvbiBuYW1lIChgU1VNYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBORVdMSU5FIC0gTmV3bGluZSBjaGFyYWN0ZXIgKGBcXG5gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFdISVRFU1BBQ0UgLSBXaGl0ZXNwYWNlIGNoYXJhY3RlciBzZXF1ZW5jZSAoYCBgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNUUklORyAtIFN0cmluZyBsaXRlcmFsIChgXCJMb3JlbSBpcHN1bVwiYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDT05URVhUIC0gUmVmZXJlbmNlIGNvbnRleHQgKFtXb3JrYm9vay54bHN4XVNoZWV0MSlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDT05URVhUX1FVT1RFIC0gUXVvdGVkIHJlZmVyZW5jZSBjb250ZXh0IChgJ1tNeSB3b3JrYm9vay54bHN4XVNoZWV0MSdgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9SQU5HRSAtIEEgcmFuZ2UgaWRlbnRpZmllciAoYEExYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfQkVBTSAtIEEgcmFuZ2UgXCJiZWFtXCIgaWRlbnRpZmllciAoYEE6QWAgb3IgYDE6MWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGX1RFUk5BUlkgLSBBIHRlcm5hcnkgcmFuZ2UgaWRlbnRpZmllciAoYEIyOkJgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9OQU1FRCAtIEEgbmFtZSAvIG5hbWVkIHJhbmdlIGlkZW50aWZpZXIgKGBpbmNvbWVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9TVFJVQ1QgLSBBIHN0cnVjdHVyZWQgcmVmZXJlbmNlIGlkZW50aWZpZXIgKGB0YWJsZVtbQ29sdW1uMV06W0NvbHVtbjJdXWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRlhfUFJFRklYIC0gQSBsZWFkaW5nIGVxdWFscyBzaWduIGF0IHRoZSBzdGFydCBvZiBhIGZvcm11bGEgKGA9YClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVTktOT1dOIC0gQW55IHVuaWRlbnRpZmlhYmxlIHJhbmdlIG9mIGNoYXJhY3RlcnMuXG4gKiBAc2VlIHRva2VuaXplXG4gKi9cbmV4cG9ydCBjb25zdCB0b2tlblR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIE9QRVJBVE9SLFxuICBCT09MRUFOLFxuICBFUlJPUixcbiAgTlVNQkVSLFxuICBGVU5DVElPTixcbiAgTkVXTElORSxcbiAgV0hJVEVTUEFDRSxcbiAgU1RSSU5HLFxuICBDT05URVhULFxuICBDT05URVhUX1FVT1RFLFxuICBSRUZfUkFOR0UsXG4gIFJFRl9CRUFNLFxuICBSRUZfVEVSTkFSWSxcbiAgUkVGX05BTUVELFxuICBSRUZfU1RSVUNULFxuICBGWF9QUkVGSVgsXG4gIFVOS05PV05cbn0pO1xuXG4vKipcbiAqIEEgZGljdGlvbmFyeSBvZiB0aGUgdHlwZXMgdXNlZCB0byBpZGVudGlmeSBBU1Qgbm9kZSB2YXJpYW50cy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBjb25zdGFudCB7T2JqZWN0PHN0cmluZz59IG5vZGVUeXBlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFVOQVJZIC0gQSB1bmFyeSBvcGVyYXRpb24gKGAxMCVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJJTkFSWSAtIEEgYmluYXJ5IG9wZXJhdGlvbiAoYDEwKzEwYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZFUkVOQ0UgLSBBIHJhbmdlIGlkZW50aWZpZXIgKGBBMWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTElURVJBTCAtIEEgbGl0ZXJhbCAobnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4pIChgMTIzYCwgYFwiZm9vXCJgLCBgZmFsc2VgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVSUk9SIC0gQW4gZXJyb3IgbGl0ZXJhbCAoYCNWQUxVRSFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IENBTEwgLSBBIGZ1bmN0aW9uIGNhbGwgZXhwcmVzc2lvbiAoYFNVTSgxLDIpYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBBUlJBWSAtIEFuIGFycmF5IGV4cHJlc3Npb24gKGB7MSwyOzMsNH1gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IElERU5USUZJRVIgLSBBIGZ1bmN0aW9uIG5hbWUgaWRlbnRpZmllciAoYFNVTWApXG4gKiBAc2VlIHBhcnNlXG4gKi9cbmV4cG9ydCBjb25zdCBub2RlVHlwZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUjogRVJST1JfTElURVJBTCxcbiAgQ0FMTCxcbiAgQVJSQVksXG4gIElERU5USUZJRVJcbn0pO1xuIiwiaW1wb3J0IHsgaXNSYW5nZSB9IGZyb20gJy4vaXNUeXBlLmpzJztcbmltcG9ydCB7IHBhcnNlQTFSZWYsIHN0cmluZ2lmeUExUmVmLCBhZGRBMVJhbmdlQm91bmRzIH0gZnJvbSAnLi9hMS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cnVjdFJlZiB9IGZyb20gJy4vcGFyc2VTdHJ1Y3RSZWYuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5U3RydWN0UmVmIH0gZnJvbSAnLi9zdHJpbmdpZnlTdHJ1Y3RSZWYuanMnO1xuaW1wb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcbmltcG9ydCB7IFJFRl9TVFJVQ1QgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8vIFRoZXJlIGlzIG5vIFIxQzEgY291bnRlcnBhcnQgdG8gdGhpcy4gVGhpcyBpcyBiZWNhdXNlIHdpdGhvdXQgYW4gYW5jaG9yIGNlbGxcbi8vIGl0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIGlmIGEgcmVsYXRpdmUrYWJzb2x1dGUgcmFuZ2UgKFJbMV1DWzFdOlI1QzUpXG4vLyBuZWVkcyB0byBiZSBmbGlwcGVkIG9yIG5vdC4gVGhlIHNvbHV0aW9uIGlzIHRvIGNvbnZlcnQgdG8gQTEgZmlyc3Q6XG4vLyB0cmFuc2xhdGVUb1JDKGZpeFJhbmdlcyh0cmFuc2xhdGVUb0ExKC4uLikpKVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgQTEgc3R5bGUgcmFuZ2VzIGFuZCBzdHJ1Y3R1cmVkIHJlZmVyZW5jZXMgaW4gYSBmb3JtdWxhIG9yIGxpc3Qgb2ZcbiAqIHRva2Vucy5cbiAqIFxuICogSXQgZW5zdXJlcyB0aGF0IHRoYXQgdGhlIHRvcCBhbmQgbGVmdCBjb29yZGluYXRlcyBvZiBhbiBBMSByYW5nZSBhcmUgb24gdGhlXG4gKiBsZWZ0LWhhbmQgc2lkZSBvZiBhIGNvbG9uIG9wZXJhdG9yOlxuICpcbiAqIGBCMjpBMWAg4oaSIGBBMTpCMmAgIFxuICogYDE6QTFgIOKGkiBgQTE6MWAgIFxuICogYEE6QTFgIOKGkiBgQTE6QWAgIFxuICogYEI6QWAg4oaSIGBBOkJgICBcbiAqIGAyOjFgIOKGkiBgMToyYCAgXG4gKiBgQTE6QTFgIOKGkiBgQTFgICBcbiAqXG4gKiBXaGVuIGB7IGFkZEJvdW5kczogdHJ1ZSB9YCBpcyBwYXNzZWQgYXMgYW4gb3B0aW9uLCB0aGUgbWlzc2luZyBib3VuZHMgYXJlXG4gKiBhbHNvIGFkZGVkLiBUaGlzIGNhbiBiZSBkb25lIHRvIGVuc3VyZSBFeGNlbCBjb21wYXRpYmxlIHJhbmdlcy4gVGhlIGZpeGVzXG4gKiB0aGVuIGFkZGl0aW9uYWxseSBpbmNsdWRlOlxuICpcbiAqIGAxOkExYCDihpIgYEExOjFgIOKGkiBgMToxYCAgXG4gKiBgQTpBMWAg4oaSIGBBMTpBYCDihpIgYEE6QWAgIFxuICogYEExOkFgIOKGkiBgQTpBYCAgXG4gKiBgQTE6MWAg4oaSIGBBOjFgICBcbiAqIGBCMjpCYCDihpIgYEIyOjEwNDg1NzZgICBcbiAqIGBCMjoyYCDihpIgYEIyOlhGRDJgICBcbiAqXG4gKiBTdHJ1Y3R1cmVkIHJhbmdlcyBhcmUgbm9ybWFsaXplZCBjbGVhbmVkIHVwIHRvIGhhdmUgY29uc2lzdGVudCBvcmRlciBhbmRcbiAqIGNhcGl0YWxpemF0aW9uIG9mIHNlY3Rpb25zIGFzIHdlbGwgYXMgcmVtb3ZpbmcgcmVkdW5kYW50IG9uZXMuXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSBmb3JtdWxhIHdpdGggdGhlIHJhbmdlcyB1cGRhdGVkLiBJZiBhbiBhcnJheSBvZiB0b2tlbnMgd2FzXG4gKiBzdXBwbGllZCwgdGhlbiBhIG5ldyBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0geyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBmb3JtdWxhIEEgc3RyaW5nIChhbiBFeGNlbCBmb3JtdWxhKSBvciBhIHRva2VuIGxpc3QgdGhhdCBzaG91bGQgYmUgYWRqdXN0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFkZEJvdW5kcz1mYWxzZV0gIEZpbGwgaW4gYW55IHVuZGVmaW5lZCBib3VuZHMgb2YgcmFuZ2Ugb2JqZWN0cy4gVG9wIHRvIDAsIGJvdHRvbSB0byAxMDQ4NTc1LCBsZWZ0IHRvIDAsIGFuZCByaWdodCB0byAxNjM4My5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudGhpc1Jvdz1mYWxzZV0gIEVuZm9yY2VzIHVzaW5nIHRoZSBgWyNUaGlzIFJvd11gIGluc3RlYWQgb2YgdGhlIGBAYCBzaG9ydGhhbmQgd2hlbiBzZXJpYWxpemluZyBzdHJ1Y3R1cmVkIHJhbmdlcy5cbiAqIEByZXR1cm5zIHsoc3RyaW5nIHwgQXJyYXk8VG9rZW4+KX0gQSBmb3JtdWxhIHN0cmluZyBvciB0b2tlbiBsaXN0IChkZXBlbmRpbmcgb24gd2hpY2ggd2FzIGlucHV0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZml4UmFuZ2VzIChmb3JtdWxhLCBvcHRpb25zID0geyBhZGRCb3VuZHM6IGZhbHNlIH0pIHtcbiAgaWYgKHR5cGVvZiBmb3JtdWxhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmaXhSYW5nZXModG9rZW5pemUoZm9ybXVsYSwgb3B0aW9ucyksIG9wdGlvbnMpXG4gICAgICAubWFwKGQgPT4gZC52YWx1ZSlcbiAgICAgIC5qb2luKCcnKTtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkoZm9ybXVsYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpeFJhbmdlcyBleHBlY3RzIGFuIGFycmF5IG9mIHRva2VucycpO1xuICB9XG4gIGNvbnN0IHsgYWRkQm91bmRzLCByMWMxLCB4bHN4LCB0aGlzUm93IH0gPSBvcHRpb25zO1xuICBpZiAocjFjMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZml4UmFuZ2VzIGRvZXMgbm90IGhhdmUgYW4gUjFDMSBtb2RlJyk7XG4gIH1cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICByZXR1cm4gZm9ybXVsYS5tYXAodCA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSB7IC4uLnQgfTtcbiAgICBpZiAodC5sb2MpIHtcbiAgICAgIHRva2VuLmxvYyA9IFsgLi4udC5sb2MgXTtcbiAgICB9XG4gICAgbGV0IG9mZnNldERlbHRhID0gMDtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVCkge1xuICAgICAgY29uc3Qgc3JlZiA9IHBhcnNlU3RydWN0UmVmKHRva2VuLnZhbHVlLCB7IHhsc3ggfSk7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHN0cmluZ2lmeVN0cnVjdFJlZihzcmVmLCB7IHhsc3gsIHRoaXNSb3cgfSk7XG4gICAgICBvZmZzZXREZWx0YSA9IG5ld1ZhbHVlLmxlbmd0aCAtIHRva2VuLnZhbHVlLmxlbmd0aDtcbiAgICAgIHRva2VuLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmFuZ2UodG9rZW4pKSB7XG4gICAgICBjb25zdCByZWYgPSBwYXJzZUExUmVmKHRva2VuLnZhbHVlLCB7IHhsc3gsIGFsbG93VGVybmFyeTogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHJhbmdlID0gcmVmLnJhbmdlO1xuICAgICAgLy8gZmlsbCBtaXNzaW5nIGRpbWVuc2lvbnM/XG4gICAgICBpZiAoYWRkQm91bmRzKSB7XG4gICAgICAgIGFkZEExUmFuZ2VCb3VuZHMocmFuZ2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3VmFsdWUgPSBzdHJpbmdpZnlBMVJlZihyZWYsIHsgeGxzeCB9KTtcbiAgICAgIG9mZnNldERlbHRhID0gbmV3VmFsdWUubGVuZ3RoIC0gdG9rZW4udmFsdWUubGVuZ3RoO1xuICAgICAgdG9rZW4udmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIHRoYXQgcG9zaXRpb25pbmcgaXMgc3RpbGwgY29ycmVjdFxuICAgIGlmIChvZmZzZXRTa2V3IHx8IG9mZnNldERlbHRhKSB7XG4gICAgICBpZiAodG9rZW4ubG9jKSB7XG4gICAgICAgIHRva2VuLmxvY1swXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgICAgb2Zmc2V0U2tldyArPSBvZmZzZXREZWx0YTtcbiAgICAgIGlmICh0b2tlbi5sb2MpIHtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb2Zmc2V0U2tldyArPSBvZmZzZXREZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xuICB9KTtcbn1cblxuIl0sIm5hbWVzIjpbIk9QRVJBVE9SIiwiT1BFUkFUT1JfVFJJTSIsIkJPT0xFQU4iLCJFUlJPUiIsIk5VTUJFUiIsIkZVTkNUSU9OIiwiTkVXTElORSIsIldISVRFU1BBQ0UiLCJTVFJJTkciLCJDT05URVhUX1FVT1RFIiwiQ09OVEVYVCIsIlJFRl9SQU5HRSIsIlJFRl9CRUFNIiwiUkVGX1RFUk5BUlkiLCJSRUZfTkFNRUQiLCJSRUZfU1RSVUNUIiwiRlhfUFJFRklYIiwiVU5LTk9XTiIsIlVOQVJZIiwiQklOQVJZIiwiUkVGRVJFTkNFIiwiTElURVJBTCIsIkVSUk9SX0xJVEVSQUwiLCJDQUxMIiwiTEFNQkRBIiwiTEVUIiwiQVJSQVkiLCJJREVOVElGSUVSIiwiTUFYX0NPTFMiLCJNQVhfUk9XUyIsImZyb21Db2wiLCJjb2x1bW5TdHJpbmciLCJ4IiwibCIsImxlbmd0aCIsIm4iLCJjIiwiY2hhckNvZGVBdCIsInJlX1NSY29sdW1uQiIsInJlX1NSY29sdW1uTiIsImtleVRlcm1zIiwiaGVhZGVycyIsImRhdGEiLCJ0b3RhbHMiLCJhbGwiLCJmeiIsIl9sZW4iLCJhcmd1bWVudHMiLCJhIiwiQXJyYXkiLCJfa2V5IiwiT2JqZWN0IiwiZnJlZXplIiwic2VjdGlvbk1hcCIsIm1hdGNoQ29sdW1uIiwicyIsImFsbG93VW5icmFjZWQiLCJ1bmRlZmluZWQiLCJtIiwiZXhlYyIsInZhbHVlIiwic2xpY2UiLCJyZXBsYWNlIiwicGFyc2VTUmFuZ2UiLCJyYXciLCJjb2x1bW5zIiwibTEiLCJwb3MiLCJ0ZXJtcyIsImsiLCJ0b0xvd2VyQ2FzZSIsInB1c2giLCJleHBlY3RfbW9yZSIsImxlZnRDb2wiLCJyaWdodENvbCIsInNlY3Rpb25zIiwiY29uY2F0IiwidG9rZW4iLCJyZV9DT05URVhUIiwicmVfQ09OVEVYVF9RVU9URSIsInJuZ1BhcnQiLCJjb2xQYXJ0Iiwicm93UGFydCIsInJhbmdlT3AiLCJuZXh0Tm90Q2hhciIsInJlX0ExQ09MIiwiUmVnRXhwIiwicmVfQTFST1ciLCJyZV9BMVJBTkdFIiwicmVfQTFQQVJUSUFMIiwiclBhcnQiLCJjUGFydCIsInJlX1JDQ09MIiwicmVfUkNST1ciLCJyZV9SQ1JBTkdFIiwicmVfUkNQQVJUSUFMIiwicmVfTkFNRUQiLCJtYWtlSGFuZGxlciIsInR5cGUiLCJyZSIsInN0ciIsImxleE5hbWVkIiwibGMiLCJyZV9RVU9URURfVkFMVUUiLCJyZV9RVU9URURfVkFMVUVfWExTWCIsImxleENvbnRleHQiLCJvcHRpb25zIiwibXEiLCJ4bHN4IiwidGVzdCIsImIiLCJsZXhTdHJ1Y3R1cmVkIiwic3RydWN0RGF0YSIsImkiLCJyZVJDTnVtcyIsInJlQTFOdW1zIiwibGV4UmFuZ2UiLCJ0IiwicjFjMSIsImFsbG93VGVybmFyeSIsImxhc3RJbmRleCIsInZhbCIsInBhcnNlSW50IiwibGV4ZXJzIiwibGV4ZXJzUmVmcyIsIm9wdHMiLCJyZWZQYXJ0c1RyZWUiLCJwYWNrTGlzdCIsImYiLCJub2RlIiwia2V5IiwiZm9yRWFjaCIsInJ1biIsInJldmVyc2UiLCJtYXRjaGVyIiwidG9rZW5zIiwiY3Vyck5vZGUiLCJhbmNob3JJbmRleCIsImluZGV4IiwibWVyZ2VSZWZUb2tlbnMiLCJ0b2tlbmxpc3QiLCJmaW5hbFRva2VucyIsInZhbGlkIiwidG9NZXJnZSIsIm1hcCIsImQiLCJqb2luIiwibG9jIiwidW5zaGlmdCIsImlzVHlwZSIsImRlZmF1bHRPcHRpb25zIiwid2l0aExvY2F0aW9uIiwibWVyZ2VSZWZzIiwibmVnYXRpdmVOdW1iZXJzIiwiaXNUZXh0VG9rZW4iLCJjYXVzZXNCaW5hcnlNaW51cyIsImdldFRva2VucyIsImZ4IiwidG9rZW5IYW5kbGVycyIsImFzc2lnbiIsImxldE9yTGFtYmRhIiwidW5rbm93blJDIiwidHJpbU9wcyIsInRhaWwwIiwidGFpbDEiLCJsYXN0VG9rZW4iLCJwdXNoVG9rZW4iLCJpc0N1cnJVbmtub3duIiwiaXNMYXN0VW5rbm93biIsInN0YXJ0UG9zIiwidG9rZW5UeXBlIiwidG9rZW5WYWx1ZSIsImxhc3RMQyIsInZhbExDIiwidW50ZXJtaW5hdGVkIiwicCIsImxhc3QxIiwibWludXMiLCJwb3AiLCJ3aXRoaW5DYWxsIiwicGFyZW5EZXB0aCIsInYiLCJmaXhSQ05hbWVzIiwiYmVmb3JlIiwiYWZ0ZXIiLCJ0b2tlbml6ZSIsImZvcm11bGEiLCJpc1JhbmdlIiwiaXNSZWZlcmVuY2UiLCJpc0xpdGVyYWwiLCJpc0Vycm9yIiwiaXNXaGl0ZXNwYWNlIiwiaXNGdW5jdGlvbiIsImlzRnhQcmVmaXgiLCJpc09wZXJhdG9yIiwiRU5EIiwicmVmRnVuY3Rpb25zIiwiaXNSZWZlcmVuY2VGdW5jdGlvbk5hbWUiLCJmbk5hbWUiLCJpbmNsdWRlcyIsInRvVXBwZXJDYXNlIiwiaXNSZWZlcmVuY2VOb2RlIiwib3BlcmF0b3IiLCJjYWxsZWUiLCJuYW1lIiwic3ltYm9sVGFibGUiLCJjdXJyZW50Tm9kZSIsInRva2VuSW5kZXgiLCJwZXJtaXRBcnJheVJhbmdlcyIsInBlcm1pdEFycmF5Q2FsbHMiLCJoYWx0IiwibWVzc2FnZSIsImF0SW5kZXgiLCJlcnIiLCJFcnJvciIsInNvdXJjZSIsInNvdXJjZU9mZnNldCIsInJlZHVjZSIsInJlZklzVXBjb21pbmciLCJuZXh0IiwiYWxsb3dPcGVyYXRvcnMiLCJ0cmltIiwiaXNSZWZlcmVuY2VUb2tlbiIsImFkdmFuY2UiLCJleHBlY3ROZXh0IiwibGVmdE5vZGUiLCJpZCIsImhhdmVSZWYiLCJwb3NzaWJsZVdTT3AiLCJuZXh0SXNDYWxsIiwiY3JlYXRlIiwiZXhwcmVzc2lvbiIsInJicCIsImxlZnQiLCJudWQiLCJsYnAiLCJsZWQiLCJvcmlnaW5hbF9zeW1ib2wiLCJzeW1ib2wiLCJicCIsImluZml4IiwidGhpcyIsInJpZ2h0IiwicG9zdGZpeCIsInByZWZpeCIsInN1YmV4cHIiLCJyYW5nZUluZml4IiwiY29tbWEiLCJ1bmlvblJlZnMiLCJlbmFibGUiLCJjdXJyU3RhdGUiLCJwYXJzZUxhbWJkYSIsImFyZ3MiLCJhcmdOYW1lcyIsImJvZHkiLCJkb25lIiwicHJldlN0YXRlIiwiYXJnVG9rZW5JbmRleCIsImFyZyIsImtpbmQiLCJjdXJyTmFtZSIsInBhcmFtcyIsInBhcnNlTGV0IiwidmFscyIsImFyZ0NvdW50ZXIiLCJhZGRBcmd1bWVudCIsImxhc3RBcmciLCJsYXN0V2FzQ29tbWEiLCJkZWNsYXJhdGlvbnMiLCJpbml0Iiwic3BsaXRQcmVmaXgiLCJzdHJpbmdzT25seSIsImluQnJhY2UiLCJjdXJyU3RyIiwicGFydHMiLCJmbHVzaCIsImJyYWNlZCIsImNoYXIiLCJzcGxpdENvbnRleHQiLCJjb250ZXh0U3RyaW5nIiwiY29udGV4dCIsInNwbGl0Q29udGV4dFhsc3giLCJjdHgiLCJ3b3JrYm9va05hbWUiLCJzaGVldE5hbWUiLCJpdGVtIiwiZSIsImxjRm4iLCJjYWxsIiwiY2xvc2VQYXJlbiIsInJvdyIsInJvd3MiLCJjbG9zaW5nQnJhY2UiLCJlbGVtZW50cyIsInBSYW5nZU9wIiwicFJhbmdlIiwicjAiLCJwUGFydGlhbCIsInBSYW5nZTIiLCJyMSIsInBCYW5nIiwicEJlYW0iLCJwU3RydWN1cmVkIiwic3RydWN0IiwicENvbnRleHQiLCJzcGxpdHRlciIsInBOYW1lZCIsInZhbGlkUnVucyIsInZhbGlkUnVuc05hbWVkIiwicGFyc2VSZWYiLCJyZWYiLCJhbGxvd05hbWVkIiwicmVmRGF0YSIsInNoaWZ0IiwicnVucyIsImV2ZXJ5IiwicGFyc2UiLCJqIiwiY2hhckZyb20iLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJ0b0NvbCIsImNvbHVtbkluZGV4IiwicmVCYW5uZWRDaGFycyIsInN0cmluZ2lmeVByZWZpeCIsInByZSIsInF1b3RlIiwibnRoIiwic2NvcGUiLCJzdHJpbmdpZnlQcmVmaXhBbHQiLCJjbGFtcCIsIm1pbiIsIm1heCIsIk1hdGgiLCJ0b0NvbFN0ciIsInRvUm93U3RyIiwiciIsInJhbmdlT3BlcmF0b3IiLCJ0cmltRGlyZWN0aW9uIiwiaGVhZCIsInRhaWwiLCJzcGxpdEExIiwicm93U3RyIiwiZnJvbUExIiwicmFuZ2VTdHJpbmciLCJ0b3AiLCJib3R0b20iLCIkdG9wIiwiJGxlZnQiLCIkYm90dG9tIiwiJHJpZ2h0IiwicGFydDEiLCJvcDEiLCJwYXJ0MiIsIm9wMiIsInBhcnQzIiwic3BsaXQiLCJwMSIsInAyIiwicGFyc2VBMVJlZiIsInJlZlN0cmluZyIsInJhbmdlIiwic3RyaW5naWZ5QTFSZWYiLCJyZWZPYmplY3QiLCJub0xlZnQiLCJub1JpZ2h0Iiwibm9Ub3AiLCJub0JvdHRvbSIsIm9wIiwidG9BMSIsImFkZEExUmFuZ2VCb3VuZHMiLCJwYXJzZVN0cnVjdFJlZiIsInRhYmxlIiwic2FtZVZhbHVlIiwic2FtZUFycmF5IiwiaXNBcnJheSIsInNhbWVTdHIiLCJ0b0Nvb3JkIiwiaXNBYnMiLCJwYXJzZVIxQzFQYXJ0IiwiYzAiLCIkcjAiLCIkYzAiLCJybSIsImNtIiwiZnJvbVIxQzEiLCJmaW5hbCIsIm92ZXJmbG93IiwiZXh0ZW5kVG8iLCJjMSIsIiRyMSIsIiRjMSIsInBhcnNlUjFDMVJlZiIsInN0cmluZ2lmeVIxQzFSZWYiLCJudWxsUjAiLCJudWxsQzAiLCJudWxsUjEiLCJudWxsQzEiLCJoYXNUcmltIiwic19yMCIsInNfcjEiLCJzX2MwIiwic19jMSIsInRvUjFDMSIsImNhbGMiLCJhYnMiLCJ2WCIsImFYIiwic2V0dGluZ3MiLCJ0b0ZpeGVkIiwiYmFzZSIsIndyYXBFZGdlcyIsIk5hTiIsInF1b3RlQ29sbmFtZSIsInRvU2VudGVuY2VDYXNlIiwic3RyaW5naWZ5U3RydWN0UmVmIiwidGhpc1JvdyIsIm51bUNvbHVtbnMiLCJudW1TZWN0aW9ucyIsInNpbmdsZUF0IiwidG9rZW5UeXBlcyIsIm5vZGVUeXBlcyIsInBhcmVuU3RhY2siLCJhcnJheVN0YXJ0IiwidWlkIiwiZ2V0SURlciIsImtub3duUmVmcyIsImdldEN1cnJEZXB0aCIsImRlcHRoIiwiY291bnRlciIsInBhaXJJZCIsImdyb3VwSWQiLCJlcnJvciIsImFkZENvbnRleHQiLCJrbm93biIsImZpbmQiLCJyZWZBIiwicmVmQiIsImlzRXF1aXZhbGVudCIsImZpeFJhbmdlcyIsImFkZEJvdW5kcyIsIm9mZnNldFNrZXciLCJvZmZzZXREZWx0YSIsIm5ld1ZhbHVlIiwicm9vdCIsImFuY2hvckNlbGwiLCJhbmNob3IiLCJpc1N0cmluZyIsInJlZk9wdHMiLCJpc05hTiJdLCJtYXBwaW5ncyI6ImFBQU8sTUFBTUEsRUFBVyxXQUNYQyxFQUFnQixnQkFDaEJDLEVBQVUsT0FDVkMsRUFBUSxRQUNSQyxFQUFTLFNBQ1RDLEVBQVcsT0FDWEMsRUFBVSxVQUNWQyxFQUFhLGFBQ2JDLEVBQVMsU0FDVEMsRUFBZ0IsZ0JBQ2hCQyxFQUFVLFVBQ1ZDLEVBQVksUUFDWkMsRUFBVyxhQUNYQyxFQUFjLGdCQUNkQyxFQUFZLGNBQ1pDLEVBQWEsYUFDYkMsRUFBWSxZQUNaQyxFQUFVLFVBRVZDLEVBQVEsa0JBQ1JDLEVBQVMsbUJBQ1RDLEVBQVksc0JBQ1pDLEVBQVUsVUFDVkMsRUFBZ0IsZUFDaEJDLEVBQU8saUJBQ1BDLEVBQVMsbUJBQ1RDLEVBQU0sZ0JBQ05DLEVBQVEsa0JBQ1JDLEVBQWEsYUFHYkMsRUFBWSxNQUNaQyxFQUFZLFFDckJsQixTQUFTQyxFQUFTQyxHQUN2QixNQUFNQyxFQUFLRCxHQUFnQixHQUNyQkUsRUFBSUQsRUFBRUUsT0FDWixJQUFJQyxFQUFJLEVBQ1IsR0FBSUYsRUFBSSxFQUFHLENBQ1QsTUFBTUcsRUFBSUosRUFBRUssV0FBV0osRUFBSSxHQUUzQkUsR0FBd0IsS0FBbEIsRUFBSUMsR0FEQUEsRUFBSSxHQUFLLEdBQUssR0FDTixHQUNwQixDQUNBLEdBQUlILEVBQUksRUFBRyxDQUNULE1BQU1HLEVBQUlKLEVBQUVLLFdBQVdKLEVBQUksR0FFM0JFLEdBQXdCLElBQWxCLEVBQUlDLEdBREFBLEVBQUksR0FBSyxHQUFLLEdBQ04sR0FDcEIsQ0FDQSxHQUFJSCxFQUFHLENBQ0wsTUFBTUcsRUFBSUosRUFBRUssV0FBV0osRUFBSSxHQUUzQkUsR0FBTUMsR0FESUEsRUFBSSxHQUFLLEdBQUssR0FDVCxFQUNqQixDQUNBLE9BQU9ELENBQ1QsQ0MvQkEsTUFBTUcsRUFBZSwr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
1
+ "use strict";const e="operator",t="operator-trim",n="bool",l="error",o="number",r="func",s="newline",u="whitespace",i="string",a="context_quote",c="context",f="range",p="range_beam",h="range_ternary",g="range_named",d="structured",m="fx_prefix",x="unknown",y="UnaryExpression",v="BinaryExpression",$="ReferenceIdentifier",w="Literal",R="ErrorLiteral",N="CallExpression",E="LambdaExpression",b="LetExpression",A="ArrayExpression",C="Identifier",k=16383,T=1048575;function L(e){const t=e||"",n=t.length;let l=0;if(n>2){const e=t.charCodeAt(n-3);l+=676*(1+e-(e>95?32:0)-65)}if(n>1){const e=t.charCodeAt(n-2);l+=26*(1+e-(e>95?32:0)-65)}if(n){const e=t.charCodeAt(n-1);l+=e-(e>95?32:0)-65}return l}const I=/^\[('['#@[\]]|[^'#@[\]])*\]/i,O=/^([^#@[\]:]+)/i,U={headers:1,data:2,totals:4,all:8,"this row":16,"@":16},F=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Object.freeze(t)},_={0:F(),1:F("headers"),2:F("data"),4:F("totals"),8:F("all"),16:F("this row"),3:F("headers","data"),6:F("data","totals")},S=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=I.exec(e);if(n){const e=n[0].slice(1,-1).replace(/'(['#@[\]])/g,"$1");return[n[0],e]}return t&&(n=O.exec(e),n)?[n[0],n[0]]:null};function M(e){const t=[];let n,l,o=0,r=e,s=0;if(!(n=/^(\[\s*)/.exec(r)))return null;if(l=/^\[#([a-z ]+)\]/i.exec(r)){const e=l[1].toLowerCase();if(o+=l[0].length,!U[e])return null;s|=U[e]}else if(l=S(r,!1))o+=l[0].length,l[1]&&t.push(l[1]);else{let l=!0;for(r=r.slice(n[1].length),o+=n[1].length;l&&(n=/^\[#([a-z ]+)\](\s*,\s*)?/i.exec(r));){const e=n[1].toLowerCase();if(!U[e])return null;s|=U[e],r=r.slice(n[0].length),o+=n[0].length,l=!!n[2]}if(l&&(n=/^@/.exec(r))&&(s|=U["@"],r=r.slice(1),o+=1,l="]"!==r[0]),!(s in _))return null;const u=l?S(e.slice(o)):null;if(u){if(o+=u[0].length,t.push(u[1]),r=e.slice(o),":"===r[0]){r=r.slice(1),o++;const e=S(r);if(!e)return null;o+=e[0].length,t.push(e[1])}l=!1}for(;" "===e[o];)o++;if(l||"]"!==e[o])return null;o++}const u=_[s];return{columns:t,sections:u?u.concat():u,length:o,token:e.slice(0,o)}}const D=/^(?!!)(\[(?:[^\]])+\])?([0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]+)?(?=!)/,z=/^'(?:''|[^'])*('|$)(?=!)/,j="\\$?[A-Z]{1,3}\\$?[1-9][0-9]{0,6}",B="\\$?[A-Z]{1,3}",Z="\\$?[1-9][0-9]{0,6}",X="\\.?:\\.?",P="(?![a-z0-9_\\u00a1-\\uffff])",W=new RegExp(`^${B}${X}${B}${P}`,"i"),G=new RegExp(`^${Z}${X}${Z}${P}`,"i"),Y=new RegExp(`^${j}${P}`,"i"),H=new RegExp(`^((${B}|${Z})${X}${j}|${j}${X}(${B}|${Z}))(?![\\w($.])`,"i"),K="(?:R(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,6})?)",q="(?:C(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,4})?)",V=new RegExp(`^${q}(${X}${q})?${P}`,"i"),Q=new RegExp(`^${K}(${X}${K})?${P}`,"i"),J=new RegExp(`^(?:(?=[RC])${K}${q})${P}`,"i"),ee=new RegExp(`^(${K}${q}(${X}${q}|${X}${K})(?![[\\d])|(${K}|${q})(${X}${K}${q}))${P}`,"i"),te=/^[a-zA-Z\\_\u00a1-\uffff][a-zA-Z0-9\\_.?\u00a1-\uffff]{0,254}/i;function ne(e,t){return n=>{const l=t.exec(n);if(l)return{type:e,value:l[0]}}}function le(e){const t=te.exec(e);if(t){const e=t[0].toLowerCase();return"\\"===e[0]&&t[0].length<3||("r"===e||"c"===e)?null:{type:g,value:t[0]}}}const oe=/^'(?:[^[\]]+?)?(?:\[(.+?)\])?(?:[^[\]]+?)'$/,re=/^'\[(.+?)\]'$/;function se(e,t){const n=z.exec(e);if(n){const e=n[0];if(t.xlsx&&re.test(e)||oe.test(e))return{type:a,value:e}}const l=D.exec(e);if(l){const[,e,n]=l;if(e&&n||n||e&&!n&&t.xlsx)return{type:c,value:l[0]}}}function ue(e){const t=M(e);if(t){let n=t.length;for(;" "===e[n];)n++;if("!"!==e[n])return{type:d,value:t.token}}return null}const ie=/([RC])(\[?)(-?\d+)/gi,ae=/(\d+|[a-zA-Z]+)/gi;function ce(e,t){let n,l;if(t.r1c1){if(t.allowTernary&&(n=ee.exec(e))?l={type:h,value:n[0]}:(n=J.exec(e))?l={type:f,value:n[0]}:((n=Q.exec(e))||(n=V.exec(e)))&&(l={type:p,value:n[0]}),l){for(ie.lastIndex=0;null!==(n=ie.exec(l.value));){const e=("R"===n[1]?T:k)+(n[2]?0:1),t=parseInt(n[3],10);if(t>e||t<-e)return null}return l}}else if(t.allowTernary&&(n=H.exec(e))?l={type:h,value:n[0]}:(n=W.exec(e))||(n=G.exec(e))?l={type:p,value:n[0]}:(n=Y.exec(e))&&(l={type:f,value:n[0]}),l){for(ae.lastIndex=0;null!==(n=ae.exec(l.value));)if(/^\d/.test(n[1])){if(parseInt(n[1],10)-1>T)return null}else if(L(n[1])>k)return null;return l}}const fe=[ne(l,/^#(NAME\?|FIELD!|CALC!|VALUE!|REF!|DIV\/0!|NULL!|NUM!|N\/A|GETTING_DATA\b|SPILL!|UNKNOWN!|FIELD\b|CALC\b|SYNTAX\?|ERROR!|CONNECT!|BLOCKED!|EXTERNAL!)/i),ne(t,/^(\.:\.|\.:|:\.)/),ne(e,/^(<=|>=|<>|[-+/*^%&<>=]|[{},;]|[()]|@|:|!|#)/),ne(r,/^[A-Z_]+[A-Z\d_.]*(?=\()/i),ne(n,/^(TRUE|FALSE)\b/i),ne(s,/^\n+/),ne(u,/^[ \f\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/),ne(i,/^"(?:""|[^"])*("|$)/),se,ce,ue,ne(o,/^(?:\d+(\.\d+)?(?:[eE][+-]?\d+)?|\d+)/),le],pe=[function(t,n){if(n.r1c1)return"!"===t[0]?{type:e,value:t[0]}:null;const l=/^(!|\.?:\.?)/.exec(t);return l?{type:e,value:l[1]}:null},se,ce,ue,le],he={};function ge(e,t){if(e.length){const n=e[0];t[n]=t[n]||{},ge(e.slice(1),t[n])}else t.$=!0}[[f,":",f],[f,".:",f],[f,":.",f],[f,".:.",f],[f],[p],[h],[c,"!",f,":",f],[c,"!",f,".:",f],[c,"!",f,":.",f],[c,"!",f,".:.",f],[c,"!",f],[c,"!",p],[c,"!",h],[a,"!",f,":",f],[a,"!",f,".:",f],[a,"!",f,":.",f],[a,"!",f,".:.",f],[a,"!",f],[a,"!",p],[a,"!",h],[g],[c,"!",g],[a,"!",g],[d],[g,d],[c,"!",g,d],[a,"!",g,d]].forEach((e=>ge(e.concat().reverse(),he)));const de=function(t,n,l){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const r=t[l-o];if(r){const s=r.type===e?r.value:r.type;if(s in n)return de(t,n[s],l,o+1)}return n.$?o:0};function me(e){const t=[];for(let n=e.length-1;n>=0;n--){let l=e[n];const o=de(e,he,n);if(o){const t=e.slice(n-o+1,n+1);l={...l},l.value=t.map((e=>e.value)).join(""),l.loc&&t[0].loc&&(l.loc[0]=t[0].loc[0]),n-=o-1}t.unshift(l)}return t}const xe=(e,t)=>e&&e.type===t,ye={withLocation:!1,mergeRefs:!0,allowTernary:!1,negativeNumbers:!0,r1c1:!1},ve=e=>e.type===g||e.type===r,$e=t=>!xe(t,e)||"%"===t.value||"}"===t.value||")"===t.value||"#"===t.value;function we(n,l){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const c=Object.assign({},ye,a),{withLocation:p,mergeRefs:h,negativeNumbers:d}=c,y=[];let v=0,$=0,w=0;const R=[];let N=null,E=null,b=null;const A=e=>{const n=e.type===x,l=b&&b.type===x;b&&(n&&l||n&&ve(b)||l&&ve(e))?(b.value+=e.value,b.type=x,p&&(b.loc[1]=e.loc[1])):(e.type===t&&(R.push(y.length),e.type=x),y.push(e),b=e,e.type!==u&&e.type!==s&&(E=N,N=e))};if("="===n[0]){v++,A({type:m,value:"=",...p?{loc:[0,1]}:{}})}for(;v<n.length;){const t=v,s=n.slice(v);let u="",a="";for(let e=0;e<l.length;e++){const t=l[e](s,c);if(t){u=t.type,a=t.value,v+=a.length;break}}u||(u=x,a=n[v],v++);const f={type:u,value:a,...p?{loc:[t,v]}:{}};if(b&&b.type===r&&"("===a){const e=b.value.toLowerCase();"lambda"!==e&&"let"!==e||$++}if(u===x){const e=a.toLowerCase();w+="r"===e||"c"===e?1:0}if(u===i){const e=a.length;if('""'===a);else if('"'===a||'"'!==a[e-1])f.unterminated=!0;else if('""'!==a&&'"'===a[e-2]){let t=e-1;for(;'"'===a[t];)t--;!(t+1)^(e-t+1)%2==0&&(f.unterminated=!0)}}if(d&&u===o){const t=b;if(t&&xe(t,e)&&"-"===t.value&&(!E||xe(E,m)||!$e(E))){const e=y.pop();f.value="-"+a,p&&(f.loc[0]=e.loc[0]),N=E,b=y[y.length-1]}}A(f)}w&&$&&function(t){let n,l=0,o=0;for(const s of t){if(s.type===e)if("("===s.value){if(o++,n.type===r){const e=n.value.toLowerCase();"lambda"!==e&&"let"!==e||(l=o)}}else")"===s.value&&(o--,o<l&&(l=0));else l&&s.type===x&&/^[rc]$/.test(s.value)&&(s.type=g);n=s}}(y);for(const t of R){const n=y[t-1],l=y[t-1];n&&n.type===f&&l&&l.type===f?y[t].type=e:y[t].type=x}return h?me(y):y}function Re(e){return we(e,fe,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}function Ne(e){return!!e&&(e.type===f||e.type===p||e.type===h)}function Ee(e){return!!e&&(e.type===f||e.type===p||e.type===h||e.type===d||e.type===g)}function be(e){return!!e&&(e.type===n||e.type===l||e.type===o||e.type===i)}function Ae(e){return!!e&&e.type===l}function Ce(e){return!!e&&(e.type===u||e.type===s)}function ke(e){return!!e&&e.type===r}function Te(e){return!!e&&e.type===m}function Le(t){return!!t&&t.type===e}const Ie="(END)",Oe="(FUNCTION)",Ue="(WHITESPACE)",Fe=["ANCHORARRAY","CHOOSE","DROP","IF","IFS","INDEX","INDIRECT","LAMBDA","LET","OFFSET","REDUCE","SINGLE","SWITCH","TAKE","TRIMRANGE","XLOOKUP"],_e={};let Se,Me,De,ze=!1,je=!1,Be=!1;const Ze=e=>Be||Fe.includes(e.toUpperCase()),Xe=e=>!!e&&(e.type===$||(e.type===R||e.type===l)&&"#REF!"===e.value||e.type===v&&(":"===e.operator||" "===e.operator||","===e.operator)||Ee(e)||e.type===N&&Ze(e.callee.name));function Pe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=new Error(e);throw n.source=Me.map((e=>e.value)).join(""),n.sourceOffset=Me.slice(0,t??De).reduce(((e,t)=>e+t.value.length),0),n}function We(){let e,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=De;do{e=Me[++n]}while(e&&(Ce(e)||Le(e)&&"("===e.value));return function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(e&&e.value)+"";return!(!Ee(e)&&(!t||!Le(e)||":"!==n&&","!==n&&n.trim())&&(!ke(e)||!Ze(n))&&(!Ae(e)||"#REF!"!==n))}(e,t)}function Ge(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e&&e!==Se.id&&Pe(`Expected ${e} but got ${Se.id}`),Ce(Me[De])){const e=Xe(t),n=e&&We(!1),l=e&&Me[De+1]&&"("===Me[De+1].value;if(!n&&!l)for(;Ce(Me[De]);)De++}if(De>=Me.length)return void(Se=_e[Ie]);const n=Me[De];let l;return De+=1,n.unterminated&&Pe("Encountered an unterminated token"),Le(n)?(l=_e[n.value],l||Pe(`Unknown operator ${n.value}`)):Ce(n)?l=_e[Ue]:be(n)?l=_e[w]:Ee(n)?l=_e[$]:ke(n)?l=_e[Oe]:Pe(`Unexpected ${n.type} token: ${n.value}`),Se=Object.create(l),Se.type=n.type,Se.value=n.value,n.loc&&(Se.loc=[...n.loc]),Se}function Ye(e){let t=Se;Ge(null,t);let n=t.nud();for(;e<Se.lbp;)t=Se,Ge(null,t),n=t.led(n);return n}const He={nud:()=>Pe("Invalid syntax"),led:()=>Pe("Missing operator")};function Ke(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=_e[e];return n?t>=n.lbp&&(n.lbp=t):(n={...He},n.id=e,n.value=e,n.lbp=t,_e[e]=n),n}function qe(e,t,n){const l=Ke(e,t);return l.led=n||function(e){this.type=v,this.operator=this.value,delete this.value;const n=Ye(t);return this.arguments=[e,n],this.loc&&(this.loc=[e.loc[0],n.loc[1]]),this},l}function Ve(e,t){const n=Ke(e,0);return n.lbp=70,n.led=t||function(e){return this.type=y,this.operator=this.value,delete this.value,this.arguments=[e],this.loc&&(this.loc[0]=e.loc[0]),this},n}function Qe(e,t){const n=Ke(e);return n.nud=t||function(){this.type=y,this.operator=this.value,delete this.value;const e=Ye(70);return this.arguments=[e],this.loc&&(this.loc[1]=e.loc[1]),this},n}function Je(e,t){return qe(e,t,(function(n){Xe(n)||Pe(`Unexpected ${e} operator`);const l=Ye(t);return Xe(l)||Pe(`Unexpected ${Se.type} following ${this.id}`),this.type=v,this.operator=this.value.trim()?this.value:" ",delete this.value,this.arguments=[n,l],this.loc&&(this.loc=[n.loc[0],l.loc[1]]),this}))}Ke(Ie),Je(":",80);const et=Je(",",80);Je(Ue,80);const tt=e=>{const t=et.lbp>0;return null!=e&&(et.lbp=e?80:0),t};function nt(e){const t=[],n={};let l,o=!1;const r=tt(!1);if(")"!==Se.id)for(;!o;){Ce(Se)&&Ge();const e=De,r=Ye(0);if(","===Se.id){if(r.type===$&&"name"===r.kind){const e=r.value.toLowerCase();e in n&&Pe("Duplicate name: "+r.value),n[e]=1;const l={type:C,name:r.value};r.loc&&(l.loc=r.loc),t.push(l)}else De=e,Pe("LAMBDA argument is not a name");Ge(",")}else l=r,o=!0}return tt(r),delete this.value,this.type=E,this.params=t,this.body=l||null,e.loc&&(this.loc=[e.loc[0],Se.loc[1]]),Ge(")",this),this}function lt(e){const t=[],n=[],l={};let o,r=0;const s=(e,s)=>{if(o&&Pe("Unexpected argument following calculation"),s&&r>=2)o=e;else{if(!(r%2))if(e&&e.type===$&&"name"===e.kind){const n=e.value.toLowerCase();n in l&&Pe("Duplicate name: "+e.value),l[n]=1,t.push({type:C,name:e.value,loc:e.loc})}else r>=2?o=e:Pe("Argument is not a name");else n.push(e)}r++},u=tt(!1);let i=!1;if(")"!==Se.id){for(;")"!==Se.id;)if(Ce(Se)&&Ge(),","===Se.id)s(null),i=!0,Ge();else{s(Ye(0),","!==Se.id),i=!1,","===Se.id&&(Ge(","),i=!0)}tt(u)}i&&s(null,!0),void 0===o&&Pe("Unexpected end of arguments"),tt(u),delete this.value,this.type=b,this.declarations=[],t.length||Pe("Unexpected end of arguments");for(let e=0;e<t.length;e++){const l={type:"LetDeclarator",id:t[e],init:n[e],loc:t[e].loc&&[t[e].loc[0],n[e].loc[1]]};this.declarations.push(l)}return this.body=o,e.loc&&(this.loc=[e.loc[0],Se.loc[1]]),Ge(")",this),this}function ot(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!1,l="";const o=[],r=()=>{l&&o.push(t?l:{value:l,braced:n}),l=""};for(let t=0;t<e.length;t++){const o=e[t];"["===o?(r(),n=!0):"]"===o?(r(),n=!1):l+=o}return r(),o}function rt(e){return{context:ot(e,!0)}}function st(e){const t={},n=ot(e);if(n.length>1)t.workbookName=n[n.length-2].value,t.sheetName=n[n.length-1].value;else if(1===n.length){const e=n[0];e.braced?t.workbookName=e.value:t.sheetName=e.value}return t}Ve("%"),Ve("#",(function(e){return Xe(e)||Pe("# expects a reference"),this.type=y,this.operator=this.value,delete this.value,this.arguments=[e],this})),Qe("+"),Qe("-"),Qe("@"),qe("^",50),qe("*",40),qe("/",40),qe("+",30),qe("-",30),qe("&",20),qe("=",10),qe("<",10),qe(">",10),qe("<=",10),qe(">=",10),qe("<>",10),Ke(w).nud=function(){const{type:e,value:t}=this;if(this.type=w,this.raw=t,e===o)this.value=+t;else if(e===n)this.value="TRUE"===t.toUpperCase();else if(e===l)this.type=R,this.value=t.toUpperCase();else{if(e!==i)throw new Error("Unsupported literal type: "+e);this.value=t.slice(1,-1).replace(/""/g,'"')}return this},Ke($).nud=function(){return this.type===g?this.kind="name":this.type===d?this.kind="table":this.type===p?this.kind="beam":this.kind="range",this.type=$,this},Ke(")"),Qe("(",(function(){const e=tt(!0),t=Ye(0);return Ge(")",t),tt(e),t})),Ke(Oe).nud=function(){return this},qe("(",90,(function(e){let t={type:C,name:e.value};e.id!==Oe&&(e.type===E||e.type===N||e.type===b||e.type===$||e.type===y&&"#"===e.value||e.type===R&&"#REF!"===e.value?t=e:Pe("Unexpected call",De-1));const n=e.value.toLowerCase();if("lambda"===n)return nt.call(this,e);if("let"===n)return lt.call(this,e);const l=[];let o=!1;if(")"!==Se.id){const e=tt(!1);for(;")"!==Se.id;)if(Ce(Se)&&Ge(),","===Se.id)l.push(null),o=!0,Ge();else{const e=Ye(0);l.push(e),o=!1,","===Se.id&&(Ge(","),o=!0)}tt(e)}o&&l.push(null);const r=Se;return delete this.value,this.type=N,this.callee=t,e.loc&&(this.callee.loc=[...e.loc]),this.arguments=l,e.loc&&(this.loc=[e.loc[0],r.loc[1]]),Ge(")",this),this})),Ke("}"),Ke(";"),Qe("{",(function(){"}"===Se.id&&Pe("Unexpected empty array");let e=[],t=!1;const n=[e],l=tt(!1);for(;!t;){if(Ce(Se)&&Ge(),be(Se))e.push(_e[w].nud.call(Se)),Ge();else if(ze&&Xe(Se))e.push(_e[$].nud.call(Se)),Ge();else if(je&&ke(Se)){const t=Ye(0);e.push(t)}else Pe(`Unexpected ${Se.type} in array: ${Se.value}`);","===Se.id?Ge(","):";"===Se.id?(Ge(";"),e=[],n.push(e)):t=!0}const o=Se;return Ge("}"),tt(l),this.type=A,this.elements=n,this.loc&&(this.loc[1]=o.loc[1]),delete this.value,this}));const ut=e=>e&&(":"===e.value||".:"===e.value||":."===e.value||".:."===e.value)&&{operator:e.value},it=e=>e&&e.type===f&&{r0:e.value},at=e=>e&&e.type===h&&{r0:e.value},ct=e=>e&&e.type===f&&{r1:e.value},ft=t=>t&&t.type===e&&"!"===t.value&&{},pt=e=>e&&e.type===p&&{r0:e.value},ht=e=>e&&e.type===d&&{struct:e.value},gt=(e,t)=>{const n=t.xlsx?st:rt;return e&&e.type===c?n(e.value):e&&e.type===a?n(e.value.slice(1,-1).replace(/''/g,"'")):void 0},dt=e=>e&&e.type===g&&{name:e.value},mt=[[at],[it,ut,ct],[it],[pt],[gt,ft,at],[gt,ft,it,ut,ct],[gt,ft,it],[gt,ft,pt]],xt=mt.concat([[dt],[gt,ft,dt],[ht],[dt,ht],[gt,ft,dt,ht]]);function yt(e,t){const n={withLocation:!1,mergeRefs:!1,allowTernary:!1,allowNamed:!0,r1c1:!1,xlsx:!1,...t},l=we(e,pe,n),o=n.xlsx?{workbookName:"",sheetName:"",r0:"",r1:"",name:"",operator:""}:{context:[],r0:"",r1:"",name:"",operator:""};l.length&&l[0].type===m&&l.shift();const r=n.allowNamed?xt:mt;for(let e=0;e<r.length;e++){const t={...o};if(r[e].length===l.length){const o=r[e].every(((e,o)=>{const r=e(l[o],n);return Object.assign(t,r),r}));if(o)return t}}return null}const vt=String.fromCharCode;function $t(e){return(e>=702?vt(((e-702)/676-0)%26+65):"")+(e>=26?vt((e/26-1)%26+65):"")+vt(e%26+65)}const wt=/[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;function Rt(e){let t="",n=0,l=0;const o=e.context||[];for(let e=o.length;e>-1;e--){const r=o[e];if(r){t=(l%2?"["+r+"]":r)+t,n+=+wt.test(r),l++}}return n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}function Nt(e){let t="",n=0;const{workbookName:l,sheetName:o}=e;return l&&(t+="["+l+"]",n+=+wt.test(l)),o&&(t+=o,n+=+wt.test(o)),n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}const Et=(e,t,n)=>Math.min(Math.max(t,e),n),bt=(e,t)=>(t?"$":"")+$t(e),At=(e,t)=>(t?"$":"")+String(e+1);function Ct(e){return"both"===e?".:.":"head"===e?".:":"tail"===e?":.":":"}function kt(e,t){return e&&t?"both":e?"head":t?"tail":void 0}function Tt(e){const t=/^(?=.)(\$(?=\D))?([A-Za-z]{0,3})?(\$)?([1-9][0-9]{0,6})?$/.exec(e);return t&&(t[2]||t[4])?[t[4]?(n=t[4],+n-1):null,t[2]?L(t[2]):null,!!t[3],!!t[1]]:null;var n}function Lt(e){let t=null,n=null,l=null,o=null,r=!1,s=!1,u=!1,i=!1;const[a,c,f,p,h]=e.split(/(\.?:\.?)/);if(p||h)return null;const g=kt(!!c&&"."===c[0],!!c&&"."===c[c.length-1]),d=Tt(a),m=f?Tt(f):null;if(!d||f&&!m)return null;if(null!=d[0]&&null!=d[1]?[t,n,r,s]=d:null==d[0]&&null!=d[1]?[,n,,s]=d:null!=d[0]&&null==d[1]&&([t,,r]=d),f)null!=m[0]&&null!=m[1]?[l,o,u,i]=m:null==m[0]&&null!=m[1]?[,o,,i]=m:null!=m[0]&&null==m[1]&&([l,,u]=m);else{if(null==t||null==n)return null;l=t,o=n,u=r,i=s}null!=o&&(null==n||null!=n&&o<n)&&([n,o,s,i]=[o,n,i,s]),null!=l&&(null==t||null!=t&&l<t)&&([t,l,r,u]=[l,t,u,r]);const x={top:t,left:n,bottom:l,right:o,$top:r,$left:s,$bottom:u,$right:i};return g&&(x.trim=g),x}function It(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=yt(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!1});if(o&&(o.r0||o.name)){let e=null;return o.r0&&(e=Lt(o.r1?o.r0+o.operator+o.r1:o.r0)),e?l?{workbookName:o.workbookName,sheetName:o.sheetName,range:e}:{context:o.context,range:e}:o.name?l?{workbookName:o.workbookName,sheetName:o.sheetName,name:o.name}:{context:o.context,name:o.name}:null}return null}function Ot(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(t?Nt(e):Rt(e))+(e.name?e.name:function(e){let{top:t,left:n,bottom:l,right:o,trim:r}=e;const{$left:s,$right:u,$top:i,$bottom:a}=e,c=null==n,f=null==o,p=null==t,h=null==l;t=Et(0,0|t,T),n=Et(0,0|n,k),!c&&!p&&f&&h?(l=t,o=n):(l=Et(0,0|l,T),o=Et(0,0|o,k));const g=Ct(r);return 0===t&&l>=T&&!c&&!f&&(!(s&&!c||u&&!f)||n===o)||p&&h?bt(n,s)+g+bt(o,u):0===n&&o>=k&&!p&&!h&&(!(i&&!p||a&&!h)||t===l)||c&&f?At(t,i)+g+At(l,a):c||p||f||!h?c||!p||f||h?c||p||!f||h?!c||p||f||h?o!==n||l!==t||u!==s||a!==i?bt(n,s)+At(t,i)+g+bt(o,u)+At(l,a):bt(n,s)+At(t,i):bt(o,u)+At(t,i)+g+At(l,a):bt(n,s)+At(t,i)+g+At(l,a):bt(n,s)+At(l,a)+g+bt(o,u):bt(n,s)+At(t,i)+g+bt(o,u)}(e.range))}function Ut(e){return null==e.top&&(e.top=0,e.$top=!1),null==e.bottom&&(e.bottom=T,e.$bottom=!1),null==e.left&&(e.left=0,e.$left=!1),null==e.right&&(e.right=k,e.$right=!1),e}function Ft(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{xlsx:!1};const n=yt(e,t);if(n&&n.struct){const e=M(n.struct);if(e&&e.length===n.struct.length)return t.xlsx?{workbookName:n.workbookName,sheetName:n.sheetName,table:n.name,columns:e.columns,sections:e.sections}:{context:n.context,table:n.name,columns:e.columns,sections:e.sections}}return null}function _t(e,t){return null==e&&null==t||e===t}function St(e,t){if(Array.isArray(e)!==Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!_t(e[n],t[n]))return!1;return!0}function Mt(e,t){return!e&&!t||String(e).toLowerCase()===String(t).toLowerCase()}const Dt=(e,t,n)=>Math.min(Math.max(t,e),n);function zt(e,t){return t?String(e+1):e?"["+e+"]":""}function jt(e){let t=null,n=null,l=null,o=null;const r=/^R(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);r&&(r[1]?(t=parseInt(r[1],10),l=!1):r[2]?(t=parseInt(r[2],10)-1,l=!0):(t=0,l=!1),e=e.slice(r[0].length));const s=/^C(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);return s&&(s[1]?(n=parseInt(s[1],10),o=!1):s[2]?(n=parseInt(s[2],10)-1,o=!0):(n=0,o=!1),e=e.slice(s[0].length)),!r&&!s||e.length?null:[t,n,l,o]}function Bt(e){let t=null;const[n,l,o,r]=e.split(/(\.?:\.?)/);if(r)return null;const s=jt(n),u=kt(!!l&&"."===l[0],!!l&&"."===l[l.length-1]);if(s){const[e,n,l,r]=s;if(o){const s=jt(o);if(!s)return null;{t={};const[o,u,i,a]=s;null!=e&&null!=o?(t.r0=l===i?Math.min(e,o):e,t.$r0=l,t.r1=l===i?Math.max(e,o):o,t.$r1=i):null!=e&&null==o?(t.r0=e,t.$r0=l,t.r1=null,t.$r1=l):null==e&&null!=o?(t.r0=o,t.$r0=i,t.r1=null,t.$r1=i):null==e&&null==o&&(t.r0=null,t.$r0=!1,t.r1=null,t.$r1=!1),null!=n&&null!=u?(t.c0=r===a?Math.min(n,u):n,t.$c0=r,t.c1=r===a?Math.max(n,u):u,t.$c1=a):null!=n&&null==u?(t.c0=n,t.$c0=r,t.c1=null,t.$c1=r):null==n&&null!=u?(t.c0=u,t.$c0=a,t.c1=null,t.$c1=a):null==n&&null==u&&(t.c0=null,t.$c0=!1,t.c1=null,t.$c1=!1)}}else t=null!=e&&null==n?{r0:e,c0:null,r1:e,c1:null,$r0:l,$c0:!1,$r1:l,$c1:!1}:null==e&&null!=n?{r0:null,c0:n,r1:null,c1:n,$r0:!1,$c0:r,$r1:!1,$c1:r}:{r0:e||0,c0:n||0,r1:e||0,c1:n||0,$r0:l||!1,$c0:r||!1,$r1:l||!1,$c1:r||!1}}return t&&u&&(t.trim=u),t}function Zt(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=yt(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!0});if(o&&(o.r0||o.name)){const e=o.r1?Bt(o.r0+o.operator+o.r1):Bt(o.r0);return e?l?{workbookName:o.workbookName,sheetName:o.sheetName,range:e}:{context:o.context,range:e}:o.name?l?{workbookName:o.workbookName,sheetName:o.sheetName,name:o.name}:{context:o.context,name:o.name}:null}return null}function Xt(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(t?Nt(e):Rt(e))+(e.name?e.name:function(e){let{r0:t,c0:n,r1:l,c1:o}=e;const{$c0:r,$c1:s,$r0:u,$r1:i}=e,a=null==t,c=null==n;let f=null==l,p=null==o;const h=Ct(e.trim),g=!!e.trim;if(t=Dt(u?0:-1048575,0|t,T),n=Dt(r?0:-16383,0|n,k),!a&&f&&!c&&p?(l=t,f=!1,o=n,p=!1):(l=Dt(i?0:-1048575,0|l,T),o=Dt(s?0:-16383,0|o,k)),0===t&&l>=T&&!c&&!p||a&&f){const e=zt(n,r),t=zt(o,s);return"C"+(e!==t||g?e+h+"C"+t:e)}if(0===n&&o>=k&&!a&&!f||c&&p){const e=zt(t,u),n=zt(l,i);return"R"+(e!==n||g?e+h+"R"+n:e)}const d=zt(t,u),m=zt(l,i),x=zt(n,r),y=zt(o,s);return a||f||c||p?(a?"":"R"+d)+(c?"":"C"+x)+h+(f?"":"R"+m)+(p?"":"C"+y):d!==m||x!==y?"R"+d+"C"+x+h+"R"+m+"C"+y:"R"+d+"C"+x}(e.range))}const Pt=(e,t,n)=>null==t?null:e?t:t-n,Wt={withLocation:!1,mergeRefs:!1,allowTernary:!0,r1c1:!1};function Gt(e,t,n,l){let o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e;if(null!=r&&!t){if(r=n+e,r<0){if(!o)return NaN;r=l+r+1}if(r>l){if(!o)return NaN;r-=l+1}}return r}const Yt={wrapEdges:!0,mergeRefs:!0,allowTernary:!0,xlsx:!1};function Ht(e){return e.replace(/([[\]#'@])/g,"'$1")}function Kt(e){return e[0].toUpperCase()+e.slice(1).toLowerCase()}function qt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xlsx:n,thisRow:l}=t;let o=n?Nt(e):Rt(e);e.table&&(o+=e.table);const r=e.columns?.length??0,s=e.sections?.length??0;if(1!==s||r)if(s||1!==r){o+="[";const t=!l&&1===s&&"this row"===e.sections[0].toLowerCase();t?o+="@":s&&(o+=e.sections.map((e=>`[#${Kt(e)}]`)).join(","),r&&(o+=",")),t&&1===e.columns.length&&(u=e.columns[0],/^[a-zA-Z0-9\u00a1-\uffff]+$/.test(u))?o+=Ht(e.columns[0]):r&&(o+=e.columns.slice(0,2).map((e=>`[${Ht(e)}]`)).join(":")),o+="]"}else o+=`[${Ht(e.columns[0])}]`;else o+=`[#${Kt(e.sections[0])}]`;var u;return o}const Vt=Object.freeze({OPERATOR:e,BOOLEAN:n,ERROR:l,NUMBER:o,FUNCTION:r,NEWLINE:s,WHITESPACE:u,STRING:i,CONTEXT:c,CONTEXT_QUOTE:a,REF_RANGE:f,REF_BEAM:p,REF_TERNARY:h,REF_NAMED:g,REF_STRUCT:d,FX_PREFIX:m,UNKNOWN:x}),Qt=Object.freeze({UNARY:y,BINARY:v,REFERENCE:$,LITERAL:w,ERROR:R,CALL:N,ARRAY:A,IDENTIFIER:C});exports.MAX_COLS=k,exports.MAX_ROWS=T,exports.addA1RangeBounds=Ut,exports.addTokenMeta=function(e){let{sheetName:t="",workbookName:n=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const l=[];let o=null;const r=function(){let e=1;return()=>"fxg"+e++}(),s=[],u=()=>l.length+(o?1:0);return e.forEach(((e,i)=>{if(e.index=i,e.depth=u(),"("===e.value)l.push(e),e.depth=u();else if(")"===e.value){const t=l.pop();if(t){const n=r();e.groupId=n,e.depth=t.depth,t.groupId=n}else e.error=!0}else if("{"===e.value)o?e.error=!0:(o=e,e.depth=u());else if("}"===e.value){if(o){const t=r();e.groupId=t,e.depth=o.depth,o.groupId=t}else e.error=!0;o=null}else if(e.type===f||e.type===p||e.type===h||e.type===d){const l=e.type===d?Ft(e.value,{xlsx:!0}):It(e.value,{allowTernary:!0,xlsx:!0});if(l&&(l.range||l.columns)){l.source=e.value,function(e,t,n){e.sheetName||(e.sheetName=t),e.workbookName||(e.workbookName=n)}(l,t,n);const o=s.find((e=>function(e,t){if((e.name||t.name)&&e.name!==t.name)return!1;if(e.columns||t.columns){if(e.table!==t.table)return!1;if(!St(e.columns,t.columns))return!1;if(!St(e.sections,t.sections))return!1}return!!(!e.range&&!t.range||_t(e.range.top,t.range.top)&&_t(e.range.bottom,t.range.bottom)&&_t(e.range.left,t.range.left)&&_t(e.range.right,t.range.right))&&!(!Mt(e.workbookName,t.workbookName)||!Mt(e.sheetName,t.sheetName))}(e,l)));o?e.groupId=o.groupId:(l.groupId=r(),e.groupId=l.groupId,s.push(l))}}else e.type===x&&(e.error=!0)})),e},exports.fixRanges=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{addBounds:!1};if("string"==typeof t)return e(Re(t,n),n).map((e=>e.value)).join("");if(!Array.isArray(t))throw new Error("fixRanges expects an array of tokens");const{addBounds:l,r1c1:o,xlsx:r,thisRow:s}=n;if(o)throw new Error("fixRanges does not have an R1C1 mode");let u=0;return t.map((e=>{const t={...e};e.loc&&(t.loc=[...e.loc]);let n=0;if(t.type===d){const e=qt(Ft(t.value,{xlsx:r}),{xlsx:r,thisRow:s});n=e.length-t.value.length,t.value=e}else if(Ne(t)){const e=It(t.value,{xlsx:r,allowTernary:!0}),o=e.range;l&&Ut(o);const s=Ot(e,{xlsx:r});n=s.length-t.value.length,t.value=s}return u||n?(t.loc&&(t.loc[0]+=u),u+=n,t.loc&&(t.loc[1]+=u)):u+=n,t}))},exports.fromCol=L,exports.isError=Ae,exports.isFunction=ke,exports.isFxPrefix=Te,exports.isLiteral=be,exports.isOperator=Le,exports.isRange=Ne,exports.isReference=Ee,exports.isWhitespace=Ce,exports.mergeRefTokens=me,exports.nodeTypes=Qt,exports.parse=function(e,t){if("string"==typeof e)Me=Re(e,{withLocation:!1,...t,mergeRefs:!0});else{if(!Array.isArray(e))throw new Error("Parse requires a string or array of tokens.");Me=e}for(ze=t?.permitArrayRanges,je=t?.permitArrayCalls,Be=t?.looseRefCalls,De=0;Ce(Me[De])||Te(Me[De]);)De++;Ge(),tt(!0);const n=Ye(0);return Ge(Ie),n},exports.parseA1Ref=It,exports.parseR1C1Ref=Zt,exports.parseStructRef=Ft,exports.stringifyA1Ref=Ot,exports.stringifyR1C1Ref=Xt,exports.stringifyStructRef=qt,exports.toCol=$t,exports.tokenTypes=Vt,exports.tokenize=Re,exports.translateToA1=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Yt;const o=Lt(t),r="string"==typeof e,s={...Yt,...n},u=r?Re(e,{withLocation:!1,mergeRefs:s.mergeRefs,xlsx:s.xlsx,allowTernary:s.allowTernary,r1c1:!0}):e;let i=0;const a={xlsx:s.xlsx,allowTernary:s.allowTernary};return u.forEach((e=>{if(Ne(e)){const t=e.value,n=Zt(t,a),r=n.range,u={},c=Gt(r.r0,r.$r0,o.top,T,s.wrapEdges),f=Gt(r.r1,r.$r1,o.top,T,s.wrapEdges);c>f?(u.top=f,u.$top=r.$r1,u.bottom=c,u.$bottom=r.$r0):(u.top=c,u.$top=r.$r0,u.bottom=f,u.$bottom=r.$r1);const p=Gt(r.c0,r.$c0,o.left,k,s.wrapEdges),h=Gt(r.c1,r.$c1,o.left,k,s.wrapEdges);p>h?(u.left=h,u.$left=r.$c1,u.right=p,u.$right=r.$c0):(u.left=p,u.$left=r.$c0,u.right=h,u.$right=r.$c1),r.trim&&(u.trim=r.trim),isNaN(c)||isNaN(f)||isNaN(p)||isNaN(h)?(e.type=l,e.value="#REF!",delete e.groupId):(n.range=u,e.value=Ot(n,a)),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),r?u.map((e=>e.value)).join(""):u},exports.translateToR1C1=function(e,t){let{xlsx:n=!1,allowTernary:l=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{top:o,left:r}=Lt(t),s="string"==typeof e,u=s?Re(e,{...Wt,xlsx:n,allowTernary:l}):e;let i=0;const a={xlsx:n,allowTernary:l};return u.forEach((e=>{if(Ne(e)){const t=e.value,n=It(t,a),l=n.range,s={};s.r0=Pt(l.$top,l.top,o),s.r1=Pt(l.$bottom,l.bottom,o),s.c0=Pt(l.$left,l.left,r),s.c1=Pt(l.$right,l.right,r),s.$r0=l.$top,s.$r1=l.$bottom,s.$c0=l.$left,s.$c1=l.$right,l.trim&&(s.trim=l.trim),n.range=s,e.value=Xt(n,a),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),s?u.map((e=>e.value)).join(""):u};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnguanMiLCJzb3VyY2VzIjpbIi4uL2xpYi9jb25zdGFudHMuanMiLCIuLi9saWIvZnJvbUNvbC5qcyIsIi4uL2xpYi9wYXJzZVNSYW5nZS5qcyIsIi4uL2xpYi9sZXhlclBhcnRzLmpzIiwiLi4vbGliL21lcmdlUmVmVG9rZW5zLmpzIiwiLi4vbGliL2xleGVyLmpzIiwiLi4vbGliL2lzVHlwZS5qcyIsIi4uL2xpYi9wYXJzZXIuanMiLCIuLi9saWIvcGFyc2VSZWYuanMiLCIuLi9saWIvdG9Db2wuanMiLCIuLi9saWIvc3RyaW5naWZ5UHJlZml4LmpzIiwiLi4vbGliL2ExLmpzIiwiLi4vbGliL3BhcnNlU3RydWN0UmVmLmpzIiwiLi4vbGliL2FkZFRva2VuTWV0YS5qcyIsIi4uL2xpYi9yYy5qcyIsIi4uL2xpYi90cmFuc2xhdGUuanMiLCIuLi9saWIvc3RyaW5naWZ5U3RydWN0UmVmLmpzIiwiLi4vbGliL2luZGV4LmpzIiwiLi4vbGliL2ZpeFJhbmdlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1BFUkFUT1IgPSAnb3BlcmF0b3InO1xuZXhwb3J0IGNvbnN0IE9QRVJBVE9SX1RSSU0gPSAnb3BlcmF0b3ItdHJpbSc7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9ICdib29sJztcbmV4cG9ydCBjb25zdCBFUlJPUiA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gJ251bWJlcic7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSAnZnVuYyc7XG5leHBvcnQgY29uc3QgTkVXTElORSA9ICduZXdsaW5lJztcbmV4cG9ydCBjb25zdCBXSElURVNQQUNFID0gJ3doaXRlc3BhY2UnO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9ICdzdHJpbmcnO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRfUVVPVEUgPSAnY29udGV4dF9xdW90ZSc7XG5leHBvcnQgY29uc3QgQ09OVEVYVCA9ICdjb250ZXh0JztcbmV4cG9ydCBjb25zdCBSRUZfUkFOR0UgPSAncmFuZ2UnO1xuZXhwb3J0IGNvbnN0IFJFRl9CRUFNID0gJ3JhbmdlX2JlYW0nO1xuZXhwb3J0IGNvbnN0IFJFRl9URVJOQVJZID0gJ3JhbmdlX3Rlcm5hcnknO1xuZXhwb3J0IGNvbnN0IFJFRl9OQU1FRCA9ICdyYW5nZV9uYW1lZCc7XG5leHBvcnQgY29uc3QgUkVGX1NUUlVDVCA9ICdzdHJ1Y3R1cmVkJztcbmV4cG9ydCBjb25zdCBGWF9QUkVGSVggPSAnZnhfcHJlZml4JztcbmV4cG9ydCBjb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG5leHBvcnQgY29uc3QgVU5BUlkgPSAnVW5hcnlFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBCSU5BUlkgPSAnQmluYXJ5RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgUkVGRVJFTkNFID0gJ1JlZmVyZW5jZUlkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IExJVEVSQUwgPSAnTGl0ZXJhbCc7XG5leHBvcnQgY29uc3QgRVJST1JfTElURVJBTCA9ICdFcnJvckxpdGVyYWwnO1xuZXhwb3J0IGNvbnN0IENBTEwgPSAnQ2FsbEV4cHJlc3Npb24nO1xuZXhwb3J0IGNvbnN0IExBTUJEQSA9ICdMYW1iZGFFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBMRVQgPSAnTGV0RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgQVJSQVkgPSAnQXJyYXlFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBJREVOVElGSUVSID0gJ0lkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IExFVF9ERUNMID0gJ0xldERlY2xhcmF0b3InO1xuXG5leHBvcnQgY29uc3QgTUFYX0NPTFMgPSAoMiAqKiAxNCkgLSAxOyAvLyAxNjM4M1xuZXhwb3J0IGNvbnN0IE1BWF9ST1dTID0gKDIgKiogMjApIC0gMTsgLy8gMTA0ODU3NVxuIiwiLyoqXG4gKiBDb252ZXJ0IGEgY29sdW1uIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBhIDAgYmFzZWRcbiAqIG9mZnNldCBudW1iZXIgKGBcIkNcImAgPSBgMmApLlxuICpcbiAqIFRoZSBtZXRob2QgZXhwZWN0cyBhIHZhbGlkIGNvbHVtbiBpZGVudGlmaWVyIG1hZGUgdXAgb2YgX29ubHlfXG4gKiBBLVogbGV0dGVycywgd2hpY2ggbWF5IGJlIGVpdGhlciB1cHBlciBvciBsb3dlciBjYXNlLiBPdGhlciBpbnB1dCB3aWxsXG4gKiByZXR1cm4gZ2FyYmFnZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uU3RyaW5nICBUaGUgY29sdW1uIHN0cmluZyBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAgWmVybyBiYXNlZCBjb2x1bW4gaW5kZXggbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ29sIChjb2x1bW5TdHJpbmcpIHtcbiAgY29uc3QgeCA9IChjb2x1bW5TdHJpbmcgfHwgJycpO1xuICBjb25zdCBsID0geC5sZW5ndGg7XG4gIGxldCBuID0gMDtcbiAgaWYgKGwgPiAyKSB7XG4gICAgY29uc3QgYyA9IHguY2hhckNvZGVBdChsIC0gMyk7XG4gICAgY29uc3QgYSA9IGMgPiA5NSA/IDMyIDogMDtcbiAgICBuICs9ICgxICsgYyAtIGEgLSA2NSkgKiA2NzY7XG4gIH1cbiAgaWYgKGwgPiAxKSB7XG4gICAgY29uc3QgYyA9IHguY2hhckNvZGVBdChsIC0gMik7XG4gICAgY29uc3QgYSA9IGMgPiA5NSA/IDMyIDogMDtcbiAgICBuICs9ICgxICsgYyAtIGEgLSA2NSkgKiAyNjtcbiAgfVxuICBpZiAobCkge1xuICAgIGNvbnN0IGMgPSB4LmNoYXJDb2RlQXQobCAtIDEpO1xuICAgIGNvbnN0IGEgPSBjID4gOTUgPyAzMiA6IDA7XG4gICAgbiArPSAoYyAtIGEpIC0gNjU7XG4gIH1cbiAgcmV0dXJuIG47XG59XG4iLCJjb25zdCByZV9TUmNvbHVtbkIgPSAvXlxcWygnWycjQFtcXF1dfFteJyNAW1xcXV0pKlxcXS9pO1xuY29uc3QgcmVfU1Jjb2x1bW5OID0gL14oW14jQFtcXF06XSspL2k7XG5cbmNvbnN0IGtleVRlcm1zID0ge1xuICAnaGVhZGVycyc6IDEsXG4gICdkYXRhJzogMixcbiAgJ3RvdGFscyc6IDQsXG4gICdhbGwnOiA4LFxuICAndGhpcyByb3cnOiAxNixcbiAgJ0AnOiAxNlxufTtcblxuY29uc3QgZnogPSAoLi4uYSkgPT4gT2JqZWN0LmZyZWV6ZShhKTtcblxuLy8gb25seSBjb21iaW5hdGlvbnMgYWxsb3dlZCBhcmU6ICNkYXRhICsgKCNoZWFkZXJzIHwgI3RvdGFscyB8ICNkYXRhKVxuY29uc3Qgc2VjdGlvbk1hcCA9IHtcbiAgLy8gbm8gdGVybXNcbiAgMDogZnooKSxcbiAgLy8gc2luZ2xlIHRlcm1cbiAgMTogZnooJ2hlYWRlcnMnKSxcbiAgMjogZnooJ2RhdGEnKSxcbiAgNDogZnooJ3RvdGFscycpLFxuICA4OiBmeignYWxsJyksXG4gIDE2OiBmeigndGhpcyByb3cnKSxcbiAgLy8gaGVhZGVycytkYXRhXG4gIDM6IGZ6KCdoZWFkZXJzJywgJ2RhdGEnKSxcbiAgLy8gdG90YWxzK2RhdGFcbiAgNjogZnooJ2RhdGEnLCAndG90YWxzJylcbn07XG5cbmNvbnN0IG1hdGNoQ29sdW1uID0gKHMsIGFsbG93VW5icmFjZWQgPSB0cnVlKSA9PiB7XG4gIGxldCBtID0gcmVfU1Jjb2x1bW5CLmV4ZWMocyk7XG4gIGlmIChtKSB7XG4gICAgY29uc3QgdmFsdWUgPSBtWzBdLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nKFsnI0BbXFxdXSkvZywgJyQxJyk7XG4gICAgcmV0dXJuIFsgbVswXSwgdmFsdWUgXTtcbiAgfVxuICBpZiAoYWxsb3dVbmJyYWNlZCkge1xuICAgIG0gPSByZV9TUmNvbHVtbk4uZXhlYyhzKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIFsgbVswXSwgbVswXSBdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNSYW5nZSAocmF3KSB7XG4gIGNvbnN0IGNvbHVtbnMgPSBbXTtcbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBzID0gcmF3O1xuICBsZXQgbTtcbiAgbGV0IG0xO1xuICBsZXQgdGVybXMgPSAwO1xuXG4gIC8vIHN0YXJ0IG9mIHN0cnVjdHVyZWQgcmVmP1xuICBpZiAoKG0gPSAvXihcXFtcXHMqKS8uZXhlYyhzKSkpIHtcbiAgICAvLyBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIGEgc2ltcGxlIGtleXdvcmQgb3IgY29sdW1uXG4gICAgLy8gWyNrZXl3b3JkXVxuICAgIGlmICgobTEgPSAvXlxcWyMoW2EteiBdKylcXF0vaS5leGVjKHMpKSkge1xuICAgICAgY29uc3QgayA9IG0xWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBwb3MgKz0gbTFbMF0ubGVuZ3RoO1xuICAgICAgaWYgKGtleVRlcm1zW2tdKSB7XG4gICAgICAgIHRlcm1zIHw9IGtleVRlcm1zW2tdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBbY29sdW1uXVxuICAgIGVsc2UgaWYgKChtMSA9IG1hdGNoQ29sdW1uKHMsIGZhbHNlKSkpIHtcbiAgICAgIHBvcyArPSBtMVswXS5sZW5ndGg7XG4gICAgICBpZiAobTFbMV0pIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKG0xWzFdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlIHRoZSBcIm5vcm1hbFwiIG1ldGhvZFxuICAgIC8vIFtbI2tleXdvcmRdXVxuICAgIC8vIFtbY29sdW1uXV1cbiAgICAvLyBbQF1cbiAgICAvLyBbQGNvbHVtbl1cbiAgICAvLyBbQFtjb2x1bW5dXVxuICAgIC8vIFtAY29sdW1uOmNvbHVtbl1cbiAgICAvLyBbQGNvbHVtbjpbY29sdW1uXV1cbiAgICAvLyBbQFtjb2x1bW5dOmNvbHVtbl1cbiAgICAvLyBbQFtjb2x1bW5dOltjb2x1bW5dXVxuICAgIC8vIFtjb2x1bW46Y29sdW1uXVxuICAgIC8vIFtjb2x1bW46W2NvbHVtbl1dXG4gICAgLy8gW1tjb2x1bW5dOmNvbHVtbl1cbiAgICAvLyBbW2NvbHVtbl06W2NvbHVtbl1dXG4gICAgLy8gW1sja2V5d29yZF0sY29sdW1uXVxuICAgIC8vIFtbI2tleXdvcmRdLGNvbHVtbjpjb2x1bW5dXG4gICAgLy8gW1sja2V5d29yZF0sWyNrZXl3b3JkXSxjb2x1bW46Y29sdW1uXVxuICAgIC8vIC4uLlxuICAgIGVsc2Uge1xuICAgICAgbGV0IGV4cGVjdF9tb3JlID0gdHJ1ZTtcbiAgICAgIHMgPSBzLnNsaWNlKG1bMV0ubGVuZ3RoKTtcbiAgICAgIHBvcyArPSBtWzFdLmxlbmd0aDtcbiAgICAgIC8vIG1hdGNoIGtleXdvcmRzIGFzIHdlIGZpbmQgdGhlbVxuICAgICAgd2hpbGUgKFxuICAgICAgICBleHBlY3RfbW9yZSAmJlxuICAgICAgICAobSA9IC9eXFxbIyhbYS16IF0rKVxcXShcXHMqLFxccyopPy9pLmV4ZWMocykpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgayA9IG1bMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGtleVRlcm1zW2tdKSB7XG4gICAgICAgICAgdGVybXMgfD0ga2V5VGVybXNba107XG4gICAgICAgICAgcyA9IHMuc2xpY2UobVswXS5sZW5ndGgpO1xuICAgICAgICAgIHBvcyArPSBtWzBdLmxlbmd0aDtcbiAgICAgICAgICBleHBlY3RfbW9yZSA9ICEhbVsyXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaXMgdGhlcmUgYW4gQCBzcGVjaWZpZXI/XG4gICAgICBpZiAoZXhwZWN0X21vcmUgJiYgKG0gPSAvXkAvLmV4ZWMocykpKSB7XG4gICAgICAgIHRlcm1zIHw9IGtleVRlcm1zWydAJ107XG4gICAgICAgIHMgPSBzLnNsaWNlKDEpO1xuICAgICAgICBwb3MgKz0gMTtcbiAgICAgICAgZXhwZWN0X21vcmUgPSBzWzBdICE9PSAnXSc7XG4gICAgICB9XG4gICAgICAvLyBub3QgYWxsIGtleXdvcmQgdGVybXMgbWF5IGJlIGNvbWJpbmVkXG4gICAgICBpZiAoISh0ZXJtcyBpbiBzZWN0aW9uTWFwKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIGNvbHVtbiBkZWZpbml0aW9uc1xuICAgICAgY29uc3QgbGVmdENvbCA9IGV4cGVjdF9tb3JlID8gbWF0Y2hDb2x1bW4ocmF3LnNsaWNlKHBvcykpIDogbnVsbDtcbiAgICAgIGlmIChsZWZ0Q29sKSB7XG4gICAgICAgIHBvcyArPSBsZWZ0Q29sWzBdLmxlbmd0aDtcbiAgICAgICAgY29sdW1ucy5wdXNoKGxlZnRDb2xbMV0pO1xuICAgICAgICBzID0gcmF3LnNsaWNlKHBvcyk7XG4gICAgICAgIGlmIChzWzBdID09PSAnOicpIHtcbiAgICAgICAgICBzID0gcy5zbGljZSgxKTtcbiAgICAgICAgICBwb3MrKztcbiAgICAgICAgICBjb25zdCByaWdodENvbCA9IG1hdGNoQ29sdW1uKHMpO1xuICAgICAgICAgIGlmIChyaWdodENvbCkge1xuICAgICAgICAgICAgcG9zICs9IHJpZ2h0Q29sWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaChyaWdodENvbFsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4cGVjdF9tb3JlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBhZHZhbmNlIHdzXG4gICAgICB3aGlsZSAocmF3W3Bvc10gPT09ICcgJykge1xuICAgICAgICBwb3MrKztcbiAgICAgIH1cbiAgICAgIC8vIGNsb3NlIHRoZSByZWZcbiAgICAgIGlmIChleHBlY3RfbW9yZSB8fCByYXdbcG9zXSAhPT0gJ10nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gc3RlcCBvdmVyIHRoZSBjbG9zaW5nIF1cbiAgICAgIHBvcysrO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNlY3Rpb25zID0gc2VjdGlvbk1hcFt0ZXJtc107XG4gIHJldHVybiB7XG4gICAgY29sdW1ucyxcbiAgICBzZWN0aW9uczogc2VjdGlvbnMgPyBzZWN0aW9ucy5jb25jYXQoKSA6IHNlY3Rpb25zLFxuICAgIGxlbmd0aDogcG9zLFxuICAgIHRva2VuOiByYXcuc2xpY2UoMCwgcG9zKVxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgT1BFUkFUT1IsXG4gIEJPT0xFQU4sXG4gIEVSUk9SLFxuICBOVU1CRVIsXG4gIEZVTkNUSU9OLFxuICBORVdMSU5FLFxuICBXSElURVNQQUNFLFxuICBTVFJJTkcsXG4gIENPTlRFWFQsXG4gIENPTlRFWFRfUVVPVEUsXG4gIFJFRl9SQU5HRSxcbiAgUkVGX0JFQU0sXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1RFUk5BUlksXG4gIFJFRl9TVFJVQ1QsXG4gIE1BWF9DT0xTLFxuICBNQVhfUk9XUyxcbiAgT1BFUkFUT1JfVFJJTVxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBmcm9tQ29sIH0gZnJvbSAnLi9mcm9tQ29sLmpzJztcbmltcG9ydCB7IHBhcnNlU1JhbmdlIH0gZnJvbSAnLi9wYXJzZVNSYW5nZS5qcyc7XG5cbmNvbnN0IHJlX0VSUk9SID0gL14jKE5BTUVcXD98RklFTEQhfENBTEMhfFZBTFVFIXxSRUYhfERJVlxcLzAhfE5VTEwhfE5VTSF8TlxcL0F8R0VUVElOR19EQVRBXFxifFNQSUxMIXxVTktOT1dOIXxGSUVMRFxcYnxDQUxDXFxifFNZTlRBWFxcP3xFUlJPUiF8Q09OTkVDVCF8QkxPQ0tFRCF8RVhURVJOQUwhKS9pO1xuY29uc3QgcmVfT1BFUkFUT1IgPSAvXig8PXw+PXw8PnxbLSsvKl4lJjw+PV18W3t9LDtdfFsoKV18QHw6fCF8IykvO1xuY29uc3QgcmVfQk9PTEVBTiA9IC9eKFRSVUV8RkFMU0UpXFxiL2k7XG5jb25zdCByZV9GVU5DVElPTiA9IC9eW0EtWl9dK1tBLVpcXGRfLl0qKD89XFwoKS9pO1xuY29uc3QgcmVfTkVXTElORSA9IC9eXFxuKy87XG5jb25zdCByZV9XSElURVNQQUNFID0gL15bIFxcZlxcclxcdFxcdlxcdTAwYTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBhXFx1MjAyOFxcdTIwMjlcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHVmZWZmXSsvO1xuY29uc3QgcmVfU1RSSU5HID0gL15cIig/OlwiXCJ8W15cIl0pKihcInwkKS87XG5jb25zdCByZV9OVU1CRVIgPSAvXig/OlxcZCsoXFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/fFxcZCspLztcbmNvbnN0IHJlX0NPTlRFWFQgPSAvXig/ISEpKFxcWyg/OlteXFxdXSkrXFxdKT8oWzAtOUEtWmEtei5fwqHCpMKnwqjCqlxcdTAwYWTCry1cXHVmZmZmXSspPyg/PSEpLztcbmNvbnN0IHJlX0NPTlRFWFRfUVVPVEUgPSAvXicoPzonJ3xbXiddKSooJ3wkKSg/PSEpLztcbmNvbnN0IHJlX1JBTkdFX1RSSU0gPSAvXihcXC46XFwufFxcLjp8OlxcLikvO1xuXG5jb25zdCBybmdQYXJ0ID0gJ1xcXFwkP1tBLVpdezEsM31cXFxcJD9bMS05XVswLTldezAsNn0nO1xuY29uc3QgY29sUGFydCA9ICdcXFxcJD9bQS1aXXsxLDN9JztcbmNvbnN0IHJvd1BhcnQgPSAnXFxcXCQ/WzEtOV1bMC05XXswLDZ9JztcbmNvbnN0IHJhbmdlT3AgPSAnXFxcXC4/OlxcXFwuPyc7XG5jb25zdCBuZXh0Tm90Q2hhciA9ICcoPyFbYS16MC05X1xcXFx1MDBhMS1cXFxcdWZmZmZdKSc7XG5jb25zdCByZV9BMUNPTCA9IG5ldyBSZWdFeHAoYF4ke2NvbFBhcnR9JHtyYW5nZU9wfSR7Y29sUGFydH0ke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9BMVJPVyA9IG5ldyBSZWdFeHAoYF4ke3Jvd1BhcnR9JHtyYW5nZU9wfSR7cm93UGFydH0ke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9BMVJBTkdFID0gbmV3IFJlZ0V4cChgXiR7cm5nUGFydH0ke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9BMVBBUlRJQUwgPSBuZXcgUmVnRXhwKGBeKCgke2NvbFBhcnR9fCR7cm93UGFydH0pJHtyYW5nZU9wfSR7cm5nUGFydH18JHtybmdQYXJ0fSR7cmFuZ2VPcH0oJHtjb2xQYXJ0fXwke3Jvd1BhcnR9KSkoPyFbXFxcXHcoJC5dKWAsICdpJyk7XG5jb25zdCByUGFydCA9ICcoPzpSKD86XFxcXFtbKy1dP1xcXFxkK1xcXFxdfFsxLTldWzAtOV17MCw2fSk/KSc7XG5jb25zdCBjUGFydCA9ICcoPzpDKD86XFxcXFtbKy1dP1xcXFxkK1xcXFxdfFsxLTldWzAtOV17MCw0fSk/KSc7XG5jb25zdCByZV9SQ0NPTCA9IG5ldyBSZWdFeHAoYF4ke2NQYXJ0fSgke3JhbmdlT3B9JHtjUGFydH0pPyR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcbmNvbnN0IHJlX1JDUk9XID0gbmV3IFJlZ0V4cChgXiR7clBhcnR9KCR7cmFuZ2VPcH0ke3JQYXJ0fSk/JHtuZXh0Tm90Q2hhcn1gLCAnaScpO1xuY29uc3QgcmVfUkNSQU5HRSA9IG5ldyBSZWdFeHAoYF4oPzooPz1bUkNdKSR7clBhcnR9JHtjUGFydH0pJHtuZXh0Tm90Q2hhcn1gLCAnaScpO1xuY29uc3QgcmVfUkNQQVJUSUFMID0gbmV3IFJlZ0V4cChgXigke3JQYXJ0fSR7Y1BhcnR9KCR7cmFuZ2VPcH0ke2NQYXJ0fXwke3JhbmdlT3B9JHtyUGFydH0pKD8hW1tcXFxcZF0pfCgke3JQYXJ0fXwke2NQYXJ0fSkoJHtyYW5nZU9wfSR7clBhcnR9JHtjUGFydH0pKSR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcblxuLy8gVGhlIGFkdmVydGl6ZWQgbmFtZWQgcmFuZ2VzIHJ1bGVzIGFyZSBhIGJpdCBvZmYgZnJvbSB3aGF0IEV4Y2VsIHNlZW1zIHRvIGRvOlxuLy8gaW4gdGhlIFwiZXh0ZW5kZWQgcmFuZ2VcIiBvZiBjaGFycywgaXQgbG9va3MgbGlrZSBpdCBhbGxvd3MgbW9zdCB0aGluZ3MgYWJvdmVcbi8vIFUrMDBCMCB3aXRoIHRoZSByYW5nZSBiZXR3ZWVuIFUrMDBBMC1VKzAwQUYgcmF0aGVyIHJhbmRvbS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuLy8gY29uc3QgcmVfTkFNRUQgPSAvXlthLXpBLVpcXFxcX8KhwqTCp8KowqpcXHUwMGFkwq9cXHUwMGIwLVxcdWZmZmZdW2EtekEtWjAtOVxcXFxfLj/CocKkwqfCqMKqXFx1MDBhZMKvXFx1MDBiMC1cXHVmZmZmXXswLDI1NH0vaTtcbi8vIEkndmUgc2ltcGxpZmllZCB0byBhbGxvd2luZyBldmVyeXRoaW5nIGFib3ZlIFUrMDBBMTpcbmNvbnN0IHJlX05BTUVEID0gL15bYS16QS1aXFxcXF9cXHUwMGExLVxcdWZmZmZdW2EtekEtWjAtOVxcXFxfLj9cXHUwMGExLVxcdWZmZmZdezAsMjU0fS9pO1xuXG5mdW5jdGlvbiBtYWtlSGFuZGxlciAodHlwZSwgcmUpIHtcbiAgcmV0dXJuIHN0ciA9PiB7XG4gICAgY29uc3QgbSA9IHJlLmV4ZWMoc3RyKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxleE5hbWVkIChzdHIpIHtcbiAgY29uc3QgbSA9IHJlX05BTUVELmV4ZWMoc3RyKTtcbiAgaWYgKG0pIHtcbiAgICBjb25zdCBsYyA9IG1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAvLyBuYW1lcyBzdGFydGluZyB3aXRoIFxcIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyIGxvbmdcbiAgICBpZiAobGNbMF0gPT09ICdcXFxcJyAmJiBtWzBdLmxlbmd0aCA8IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBzaW5nbGUgY2hhcmFjdGVycyBSIGFuZCBDIGFyZSBmb3JiaWRkZW4gYXMgbmFtZXNcbiAgICBpZiAobGMgPT09ICdyJyB8fCBsYyA9PT0gJ2MnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHsgdHlwZTogUkVGX05BTUVELCB2YWx1ZTogbVswXSB9O1xuICB9XG59XG5cbmNvbnN0IHJlX1FVT1RFRF9WQUxVRSA9IC9eJyg/OlteW1xcXV0rPyk/KD86XFxbKC4rPylcXF0pPyg/OlteW1xcXV0rPyknJC87XG5jb25zdCByZV9RVU9URURfVkFMVUVfWExTWCA9IC9eJ1xcWyguKz8pXFxdJyQvO1xuZnVuY3Rpb24gbGV4Q29udGV4dCAoc3RyLCBvcHRpb25zKSB7XG4gIGNvbnN0IG1xID0gcmVfQ09OVEVYVF9RVU9URS5leGVjKHN0cik7XG4gIGlmIChtcSkge1xuICAgIGNvbnN0IHZhbHVlID0gbXFbMF07XG4gICAgY29uc3QgaXNWYWxpZCA9IG9wdGlvbnMueGxzeFxuICAgICAgPyByZV9RVU9URURfVkFMVUVfWExTWC50ZXN0KHZhbHVlKSB8fCByZV9RVU9URURfVkFMVUUudGVzdCh2YWx1ZSlcbiAgICAgIDogcmVfUVVPVEVEX1ZBTFVFLnRlc3QodmFsdWUpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBDT05URVhUX1FVT1RFLCB2YWx1ZTogdmFsdWUgfTtcbiAgICB9XG4gIH1cbiAgLy8geGxzeCB4bWwgdXNlcyBhIHZhcmlhbnQgb2YgdGhlIHN5bnRheCB0aGF0IGhhcyBleHRlcm5hbCByZWZlcmVuY2VzIGluXG4gIC8vIGJyYWNldHMuIEFueSBvZjogWzFdU2hlZXQxIUExLCAnWzFdU2hlZXQgb25lJyFBMSwgWzFdIW5hbWVkXG4gIC8vIFdlJ3JlIG9ubHkgY29uY2VybmVkIHdpdGggdGhlIG5vbiBxdW90ZWQgdmVyc2lvbiBoZXJlIGFzIHRoZSBxdW90ZWQgdmVyc2lvblxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBleGFtaW5lIHdoYXQgaXMgaW4gdGhlIHF1b3Rlcy5cbiAgY29uc3QgbSA9IHJlX0NPTlRFWFQuZXhlYyhzdHIpO1xuICBpZiAobSkge1xuICAgIGNvbnN0IFsgLCBhLCBiIF0gPSBtO1xuICAgIGNvbnN0IHZhbGlkID0gKFxuICAgICAgKChhICYmIGIpIHx8IGIpIHx8IC8vIFwiW2FdYiFcIiBvciBcImIhXCIgZm9ybXNcbiAgICAgIChhICYmICFiICYmIG9wdGlvbnMueGxzeCkgLy8gXCJbYV1cIiBmb3JtIChhbGxvd2VkIGluIHhsc3ggbW9kZSlcbiAgICApO1xuICAgIGlmICh2YWxpZCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogQ09OVEVYVCwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGV4U3RydWN0dXJlZCAoc3RyKSB7XG4gIGNvbnN0IHN0cnVjdERhdGEgPSBwYXJzZVNSYW5nZShzdHIpO1xuICBpZiAoc3RydWN0RGF0YSkge1xuICAgIC8vIHdlIGhhdmUgYSBtYXRjaCBmb3IgYSB2YWxpZCBTUlxuICAgIGxldCBpID0gc3RydWN0RGF0YS5sZW5ndGg7XG4gICAgLy8gc2tpcCB0YWlsaW5nIHdoaXRlc3BhY2VcbiAgICB3aGlsZSAoc3RyW2ldID09PSAnICcpIHtcbiAgICAgIGkrKztcbiAgICB9XG4gICAgLy8gYW5kIGVuc3VyZSB0aGF0IGl0IGlzbid0IGZvbGxvd2VkIGJ5IGEgIVxuICAgIGlmIChzdHJbaV0gIT09ICchJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogUkVGX1NUUlVDVCxcbiAgICAgICAgdmFsdWU6IHN0cnVjdERhdGEudG9rZW5cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCByZVJDTnVtcyA9IC8oW1JDXSkoXFxbPykoLT9cXGQrKS9naTtcbmNvbnN0IHJlQTFOdW1zID0gLyhcXGQrfFthLXpBLVpdKykvZ2k7XG5mdW5jdGlvbiBsZXhSYW5nZSAoc3RyLCBvcHRpb25zKSB7XG4gIGxldCBtLCB0O1xuICBpZiAob3B0aW9ucy5yMWMxKSB7XG4gICAgLy8gUkMgbm90YXRpb25cbiAgICBpZiAob3B0aW9ucy5hbGxvd1Rlcm5hcnkgJiYgKG0gPSByZV9SQ1BBUlRJQUwuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX1RFUk5BUlksIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChtID0gcmVfUkNSQU5HRS5leGVjKHN0cikpKSB7XG4gICAgICB0ID0geyB0eXBlOiBSRUZfUkFOR0UsIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChtID0gcmVfUkNST1cuZXhlYyhzdHIpKSB8fCAobSA9IHJlX1JDQ09MLmV4ZWMoc3RyKSkpIHtcbiAgICAgIHQgPSB7IHR5cGU6IFJFRl9CRUFNLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgICBpZiAodCkge1xuICAgICAgcmVSQ051bXMubGFzdEluZGV4ID0gMDtcbiAgICAgIHdoaWxlICgobSA9IHJlUkNOdW1zLmV4ZWModC52YWx1ZSkpICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHggPSAobVsxXSA9PT0gJ1InID8gTUFYX1JPV1MgOiBNQVhfQ09MUykgKyAobVsyXSA/IDAgOiAxKTtcbiAgICAgICAgY29uc3QgdmFsID0gcGFyc2VJbnQobVszXSwgMTApO1xuICAgICAgICBpZiAodmFsID4geCB8fCB2YWwgPCAteCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gQTEgbm90YXRpb25cbiAgICBpZiAob3B0aW9ucy5hbGxvd1Rlcm5hcnkgJiYgKG0gPSByZV9BMVBBUlRJQUwuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX1RFUk5BUlksIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChtID0gcmVfQTFDT0wuZXhlYyhzdHIpKSB8fCAobSA9IHJlX0ExUk9XLmV4ZWMoc3RyKSkpIHtcbiAgICAgIHQgPSB7IHR5cGU6IFJFRl9CRUFNLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgICBlbHNlIGlmICgobSA9IHJlX0ExUkFOR0UuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX1JBTkdFLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgICBpZiAodCkge1xuICAgICAgcmVBMU51bXMubGFzdEluZGV4ID0gMDtcbiAgICAgIC8vIFhYWDogY2FuIHByb2JhYmx5IG9wdGltaXplIHRoaXMgYXMgd2Uga25vdyBsZXR0ZXJzIGNhbiBvbmx5IGJlIDMgYXQgbWF4XG4gICAgICB3aGlsZSAoKG0gPSByZUExTnVtcy5leGVjKHQudmFsdWUpKSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoL15cXGQvLnRlc3QobVsxXSkpIHsgLy8gcm93XG4gICAgICAgICAgaWYgKChwYXJzZUludChtWzFdLCAxMCkgLSAxKSA+IE1BWF9ST1dTKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZnJvbUNvbChtWzFdKSA+IE1BWF9DT0xTKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZXhSZWZPcCAocywgb3B0cykge1xuICAvLyBpbiBSMUMxIG1vZGUgd2Ugb25seSBhbGxvdyAhXG4gIGlmIChvcHRzLnIxYzEpIHtcbiAgICByZXR1cm4gKHNbMF0gPT09ICchJylcbiAgICAgID8geyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6IHNbMF0gfVxuICAgICAgOiBudWxsO1xuICB9XG4gIC8vIGluIEExIG1vZGUgd2UgYWxsb3cgWyAnIScsICc6JywgJy46JywgJzouJywgJy46LiddXG4gIGNvbnN0IG0gPSAvXighfFxcLj86XFwuPykvLmV4ZWMocyk7XG4gIGlmIChtKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogT1BFUkFUT1IsIHZhbHVlOiBtWzFdIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBsZXhlcnMgPSBbXG4gIG1ha2VIYW5kbGVyKEVSUk9SLCByZV9FUlJPUiksXG4gIG1ha2VIYW5kbGVyKE9QRVJBVE9SX1RSSU0sIHJlX1JBTkdFX1RSSU0pLFxuICBtYWtlSGFuZGxlcihPUEVSQVRPUiwgcmVfT1BFUkFUT1IpLFxuICBtYWtlSGFuZGxlcihGVU5DVElPTiwgcmVfRlVOQ1RJT04pLFxuICBtYWtlSGFuZGxlcihCT09MRUFOLCByZV9CT09MRUFOKSxcbiAgbWFrZUhhbmRsZXIoTkVXTElORSwgcmVfTkVXTElORSksXG4gIG1ha2VIYW5kbGVyKFdISVRFU1BBQ0UsIHJlX1dISVRFU1BBQ0UpLFxuICBtYWtlSGFuZGxlcihTVFJJTkcsIHJlX1NUUklORyksXG4gIGxleENvbnRleHQsXG4gIGxleFJhbmdlLFxuICBsZXhTdHJ1Y3R1cmVkLFxuICBtYWtlSGFuZGxlcihOVU1CRVIsIHJlX05VTUJFUiksXG4gIGxleE5hbWVkXG5dO1xuXG5leHBvcnQgY29uc3QgbGV4ZXJzUmVmcyA9IFtcbiAgbGV4UmVmT3AsXG4gIGxleENvbnRleHQsXG4gIGxleFJhbmdlLFxuICBsZXhTdHJ1Y3R1cmVkLFxuICBsZXhOYW1lZFxuXTtcbiIsImltcG9ydCB7IENPTlRFWFQsIENPTlRFWFRfUVVPVEUsIFJFRl9SQU5HRSwgUkVGX05BTUVELCBSRUZfQkVBTSwgUkVGX1RFUk5BUlksIE9QRVJBVE9SLCBSRUZfU1RSVUNUIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5jb25zdCBFTkQgPSAnJCc7XG5cbmNvbnN0IHZhbGlkUnVuc01lcmdlID0gW1xuICBbIFJFRl9SQU5HRSwgJzonLCBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfUkFOR0UsICcuOicsIFJFRl9SQU5HRSBdLFxuICBbIFJFRl9SQU5HRSwgJzouJywgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX1JBTkdFLCAnLjouJywgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX0JFQU0gXSxcbiAgWyBSRUZfVEVSTkFSWSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFLCAnOicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFLCAnLjonLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9SQU5HRSwgJzouJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfUkFOR0UsICcuOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX0JFQU0gXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9URVJOQVJZIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UsICc6JywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UsICcuOicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1JBTkdFLCAnOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9SQU5HRSwgJy46LicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfQkVBTSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1RFUk5BUlkgXSxcbiAgWyBSRUZfTkFNRUQgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9OQU1FRCBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX05BTUVEIF0sXG4gIFsgUkVGX1NUUlVDVCBdLFxuICBbIFJFRl9OQU1FRCwgUkVGX1NUUlVDVCBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX05BTUVELCBSRUZfU1RSVUNUIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfTkFNRUQsIFJFRl9TVFJVQ1QgXVxuXTtcblxuLy8gdmFsaWQgdG9rZW4gcnVucyBhcmUgY29udmVydGVkIHRvIGEgdHJlZSBzdHJ1Y3R1cmVcbmNvbnN0IHJlZlBhcnRzVHJlZSA9IHt9O1xuZnVuY3Rpb24gcGFja0xpc3QgKGYsIG5vZGUpIHtcbiAgaWYgKGYubGVuZ3RoKSB7XG4gICAgY29uc3Qga2V5ID0gZlswXTtcbiAgICBub2RlW2tleV0gPSBub2RlW2tleV0gfHwge307XG4gICAgcGFja0xpc3QoZi5zbGljZSgxKSwgbm9kZVtrZXldKTtcbiAgfVxuICBlbHNlIHtcbiAgICBub2RlW0VORF0gPSB0cnVlO1xuICB9XG59XG52YWxpZFJ1bnNNZXJnZS5mb3JFYWNoKHJ1biA9PiBwYWNrTGlzdChydW4uY29uY2F0KCkucmV2ZXJzZSgpLCByZWZQYXJ0c1RyZWUpKTtcblxuLy8gYXR0ZW1wdCB0byBtYXRjaCBhIGJhY2t3YXJkcyBydW4gb2YgdG9rZW5zIGZyb20gYSBnaXZlbiBwb2ludFxuLy8gdG8gYSBwYXRoIGluIHRoZSB0cmVlXG5jb25zdCBtYXRjaGVyID0gKHRva2VucywgY3Vyck5vZGUsIGFuY2hvckluZGV4LCBpbmRleCA9IDApID0+IHtcbiAgY29uc3QgdG9rZW4gPSB0b2tlbnNbYW5jaG9ySW5kZXggLSBpbmRleF07XG4gIGlmICh0b2tlbikge1xuICAgIGNvbnN0IGtleSA9ICh0b2tlbi50eXBlID09PSBPUEVSQVRPUikgPyB0b2tlbi52YWx1ZSA6IHRva2VuLnR5cGU7XG4gICAgaWYgKGtleSBpbiBjdXJyTm9kZSkge1xuICAgICAgcmV0dXJuIG1hdGNoZXIodG9rZW5zLCBjdXJyTm9kZVtrZXldLCBhbmNob3JJbmRleCwgaW5kZXggKyAxKTtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJOb2RlW0VORF0pIHtcbiAgICAvLyB3ZSBtYXkgZW5kIGhlcmUgc28gdGhpcyBpcyBhIG1hdGNoXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIC8vIG5vIG1hdGNoXG4gIHJldHVybiAwO1xufTtcblxuLyoqXG4gKiBNZXJnZXMgY29udGV4dCB3aXRoIHJlZmVyZW5jZSB0b2tlbnMgYXMgcG9zc2libGUgaW4gYSBsaXN0IG9mIHRva2Vucy5cbiAqXG4gKiBXaGVuIGdpdmVuIGEgdG9rZW5saXN0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIHJhbmdlcyByZXR1cm5lZFxuICogYXMgd2hvbGUgcmVmZXJlbmNlcyAoYFNoZWV0MSFBMTpCMmApIHJhdGhlciB0aGFuIHNlcGFyYXRlIHRva2VucyBmb3IgZWFjaFxuICogcGFydDogKGBTaGVldDFgLGAhYCxgQTFgLGA6YCxgQjJgKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRva2VuPn0gdG9rZW5saXN0IEFuIGFycmF5IG9mIHRva2VucyAoZnJvbSBgdG9rZW5pemUoKWApXG4gKiBAcmV0dXJucyB7QXJyYXk8VG9rZW4+fSBBIG5ldyBsaXN0IG9mIHRva2VucyB3aXRoIHJhbmdlIHBhcnRzIG1lcmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlUmVmVG9rZW5zICh0b2tlbmxpc3QpIHtcbiAgY29uc3QgZmluYWxUb2tlbnMgPSBbXTtcbiAgLy8gdGhpcyBzZWVrcyBiYWNrd2FyZHMgYmVjYXVzZSBpdCdzIHJlYWxseSB0aGUgcmFuZ2UgcGFydFxuICAvLyB0aGF0IGNvbnRyb2xzIHdoYXQgY2FuIGJlIGpvaW5lZC5cbiAgZm9yIChsZXQgaSA9IHRva2VubGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxldCB0b2tlbiA9IHRva2VubGlzdFtpXTtcbiAgICBjb25zdCB2YWxpZCA9IG1hdGNoZXIodG9rZW5saXN0LCByZWZQYXJ0c1RyZWUsIGkpO1xuICAgIGlmICh2YWxpZCkge1xuICAgICAgY29uc3QgdG9NZXJnZSA9IHRva2VubGlzdC5zbGljZShpIC0gdmFsaWQgKyAxLCBpICsgMSk7XG4gICAgICAvLyB1c2UgdGhlIG1ldGEgcHJvcGVydGllcyBmcm9tIHRoZSBcImZpcnN0XCIgdG9rZW4gKHJpZ2h0LW1vc3QgdG9rZW4pXG4gICAgICB0b2tlbiA9IHsgLi4udG9rZW4gfTtcbiAgICAgIHRva2VuLnZhbHVlID0gdG9NZXJnZS5tYXAoZCA9PiBkLnZhbHVlKS5qb2luKCcnKTtcbiAgICAgIC8vIGFkanVzdCB0aGUgb2Zmc2V0cyB0byBpbmNsdWRlIGFsbCB0aGUgdGV4dFxuICAgICAgaWYgKHRva2VuLmxvYyAmJiB0b01lcmdlWzBdLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gPSB0b01lcmdlWzBdLmxvY1swXTtcbiAgICAgIH1cbiAgICAgIGkgLT0gdmFsaWQgLSAxO1xuICAgIH1cbiAgICBmaW5hbFRva2Vucy51bnNoaWZ0KHRva2VuKTtcbiAgfVxuICByZXR1cm4gZmluYWxUb2tlbnM7XG59XG4iLCJpbXBvcnQge1xuICBGWF9QUkVGSVgsXG4gIE5FV0xJTkUsXG4gIE5VTUJFUixcbiAgT1BFUkFUT1IsXG4gIFJFRl9OQU1FRCxcbiAgU1RSSU5HLFxuICBVTktOT1dOLFxuICBXSElURVNQQUNFLFxuICBGVU5DVElPTixcbiAgT1BFUkFUT1JfVFJJTSxcbiAgUkVGX1JBTkdFXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGxleGVycyB9IGZyb20gJy4vbGV4ZXJQYXJ0cy5qcyc7XG5pbXBvcnQgeyBtZXJnZVJlZlRva2VucyB9IGZyb20gJy4vbWVyZ2VSZWZUb2tlbnMuanMnO1xuXG5jb25zdCBpc1R5cGUgPSAodCwgdHlwZSkgPT4gdCAmJiB0LnR5cGUgPT09IHR5cGU7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICBtZXJnZVJlZnM6IHRydWUsXG4gIGFsbG93VGVybmFyeTogZmFsc2UsXG4gIG5lZ2F0aXZlTnVtYmVyczogdHJ1ZSxcbiAgcjFjMTogZmFsc2Vcbn07XG5cbmNvbnN0IGlzVGV4dFRva2VuID0gdG9rZW4gPT4ge1xuICByZXR1cm4gKFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9OQU1FRCB8fFxuICAgIHRva2VuLnR5cGUgPT09IEZVTkNUSU9OXG4gICk7XG59O1xuXG5jb25zdCBjYXVzZXNCaW5hcnlNaW51cyA9IHRva2VuID0+IHtcbiAgcmV0dXJuICFpc1R5cGUodG9rZW4sIE9QRVJBVE9SKSB8fCAoXG4gICAgdG9rZW4udmFsdWUgPT09ICclJyB8fFxuICAgIHRva2VuLnZhbHVlID09PSAnfScgfHxcbiAgICB0b2tlbi52YWx1ZSA9PT0gJyknIHx8XG4gICAgdG9rZW4udmFsdWUgPT09ICcjJ1xuICApO1xufTtcblxuZnVuY3Rpb24gZml4UkNOYW1lcyAodG9rZW5zKSB7XG4gIGxldCB3aXRoaW5DYWxsID0gMDtcbiAgbGV0IHBhcmVuRGVwdGggPSAwO1xuICBsZXQgbGFzdFRva2VuO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgIGlmICh0b2tlbi50eXBlID09PSBPUEVSQVRPUikge1xuICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnKCcpIHtcbiAgICAgICAgcGFyZW5EZXB0aCsrO1xuICAgICAgICBpZiAobGFzdFRva2VuLnR5cGUgPT09IEZVTkNUSU9OKSB7XG4gICAgICAgICAgY29uc3QgdiA9IGxhc3RUb2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmICh2ID09PSAnbGFtYmRhJyB8fCB2ID09PSAnbGV0Jykge1xuICAgICAgICAgICAgd2l0aGluQ2FsbCA9IHBhcmVuRGVwdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJyknKSB7XG4gICAgICAgIHBhcmVuRGVwdGgtLTtcbiAgICAgICAgaWYgKHBhcmVuRGVwdGggPCB3aXRoaW5DYWxsKSB7XG4gICAgICAgICAgd2l0aGluQ2FsbCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAod2l0aGluQ2FsbCAmJiB0b2tlbi50eXBlID09PSBVTktOT1dOICYmIC9eW3JjXSQvLnRlc3QodG9rZW4udmFsdWUpKSB7XG4gICAgICB0b2tlbi50eXBlID0gUkVGX05BTUVEO1xuICAgIH1cbiAgICBsYXN0VG9rZW4gPSB0b2tlbjtcbiAgfVxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5zIChmeCwgdG9rZW5IYW5kbGVycywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIGNvbnN0IHsgd2l0aExvY2F0aW9uLCBtZXJnZVJlZnMsIG5lZ2F0aXZlTnVtYmVycyB9ID0gb3B0cztcbiAgY29uc3QgdG9rZW5zID0gW107XG4gIGxldCBwb3MgPSAwO1xuICBsZXQgbGV0T3JMYW1iZGEgPSAwO1xuICBsZXQgdW5rbm93blJDID0gMDtcbiAgY29uc3QgdHJpbU9wcyA9IFtdO1xuXG4gIGxldCB0YWlsMCA9IG51bGw7IC8vIGxhc3Qgbm9uLXdoaXRlc3BhY2UgdG9rZW5cbiAgbGV0IHRhaWwxID0gbnVsbDsgLy8gcGVudWx0aW1hdGUgbm9uLXdoaXRlc3BhY2UgdG9rZW5cbiAgbGV0IGxhc3RUb2tlbiA9IG51bGw7IC8vIGxhc3QgdG9rZW5cbiAgY29uc3QgcHVzaFRva2VuID0gdG9rZW4gPT4ge1xuICAgIGNvbnN0IGlzQ3VyclVua25vd24gPSB0b2tlbi50eXBlID09PSBVTktOT1dOO1xuICAgIGNvbnN0IGlzTGFzdFVua25vd24gPSBsYXN0VG9rZW4gJiYgbGFzdFRva2VuLnR5cGUgPT09IFVOS05PV047XG4gICAgaWYgKGxhc3RUb2tlbiAmJiAoXG4gICAgICAoaXNDdXJyVW5rbm93biAmJiBpc0xhc3RVbmtub3duKSB8fFxuICAgICAgKGlzQ3VyclVua25vd24gJiYgaXNUZXh0VG9rZW4obGFzdFRva2VuKSkgfHxcbiAgICAgIChpc0xhc3RVbmtub3duICYmIGlzVGV4dFRva2VuKHRva2VuKSlcbiAgICApKSB7XG4gICAgICAvLyBVTktOT1dOIHRva2VucyBcImNvbnRhbWluYXRlXCIgc2libGluZyB0ZXh0IHRva2Vuc1xuICAgICAgbGFzdFRva2VuLnZhbHVlICs9IHRva2VuLnZhbHVlO1xuICAgICAgbGFzdFRva2VuLnR5cGUgPSBVTktOT1dOO1xuICAgICAgaWYgKHdpdGhMb2NhdGlvbikge1xuICAgICAgICBsYXN0VG9rZW4ubG9jWzFdID0gdG9rZW4ubG9jWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi50eXBlID09PSBPUEVSQVRPUl9UUklNKSB7XG4gICAgICAgIHRyaW1PcHMucHVzaCh0b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgdG9rZW4udHlwZSA9IFVOS05PV047XG4gICAgICB9XG4gICAgICAvLyBwdXNoIHRva2VuIGFzIG5vcm1hbGx5XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICBsYXN0VG9rZW4gPSB0b2tlbjtcbiAgICAgIGlmICh0b2tlbi50eXBlICE9PSBXSElURVNQQUNFICYmIHRva2VuLnR5cGUgIT09IE5FV0xJTkUpIHtcbiAgICAgICAgdGFpbDEgPSB0YWlsMDtcbiAgICAgICAgdGFpbDAgPSB0b2tlbjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgaWYgKGZ4WzBdID09PSAnPScpIHtcbiAgICBjb25zdCB0b2tlbiA9IHtcbiAgICAgIHR5cGU6IEZYX1BSRUZJWCxcbiAgICAgIHZhbHVlOiAnPScsXG4gICAgICAuLi4od2l0aExvY2F0aW9uID8geyBsb2M6IFsgMCwgMSBdIH0gOiB7fSlcbiAgICB9O1xuICAgIHBvcysrO1xuICAgIHB1c2hUb2tlbih0b2tlbik7XG4gIH1cblxuICB3aGlsZSAocG9zIDwgZngubGVuZ3RoKSB7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBwb3M7XG4gICAgY29uc3QgcyA9IGZ4LnNsaWNlKHBvcyk7XG4gICAgbGV0IHRva2VuVHlwZSA9ICcnO1xuICAgIGxldCB0b2tlblZhbHVlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbkhhbmRsZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gdG9rZW5IYW5kbGVyc1tpXShzLCBvcHRzKTtcbiAgICAgIGlmICh0KSB7XG4gICAgICAgIHRva2VuVHlwZSA9IHQudHlwZTtcbiAgICAgICAgdG9rZW5WYWx1ZSA9IHQudmFsdWU7XG4gICAgICAgIHBvcyArPSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0b2tlblR5cGUpIHtcbiAgICAgIHRva2VuVHlwZSA9IFVOS05PV047XG4gICAgICB0b2tlblZhbHVlID0gZnhbcG9zXTtcbiAgICAgIHBvcysrO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgdHlwZTogdG9rZW5UeXBlLFxuICAgICAgdmFsdWU6IHRva2VuVmFsdWUsXG4gICAgICAuLi4od2l0aExvY2F0aW9uID8geyBsb2M6IFsgc3RhcnRQb3MsIHBvcyBdIH0gOiB7fSlcbiAgICB9O1xuXG4gICAgLy8gbWFrZSBhIG5vdGUgaWYgd2UgZm91bmQgYSBsZXQvbGFtYmRhIGNhbGxcbiAgICBpZiAobGFzdFRva2VuICYmIGxhc3RUb2tlbi50eXBlID09PSBGVU5DVElPTiAmJiB0b2tlblZhbHVlID09PSAnKCcpIHtcbiAgICAgIGNvbnN0IGxhc3RMQyA9IGxhc3RUb2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxhc3RMQyA9PT0gJ2xhbWJkYScgfHwgbGFzdExDID09PSAnbGV0Jykge1xuICAgICAgICBsZXRPckxhbWJkYSsrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBtYWtlIGEgbm90ZSBpZiB3ZSBmb3VuZCBhIFIgb3IgQyB1bmtub3duXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gVU5LTk9XTikge1xuICAgICAgY29uc3QgdmFsTEMgPSB0b2tlblZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1bmtub3duUkMgKz0gKHZhbExDID09PSAncicgfHwgdmFsTEMgPT09ICdjJykgPyAxIDogMDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgdGVybWluYXRpb25cbiAgICBpZiAodG9rZW5UeXBlID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IGwgPSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgIGlmICh0b2tlblZhbHVlID09PSAnXCJcIicpIHtcbiAgICAgICAgLy8gY29tbW9uIGNhc2UgdGhhdCBJUyB0ZXJtaW5hdGVkXG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0b2tlblZhbHVlID09PSAnXCInIHx8IHRva2VuVmFsdWVbbCAtIDFdICE9PSAnXCInKSB7XG4gICAgICAgIHRva2VuLnVudGVybWluYXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0b2tlblZhbHVlICE9PSAnXCJcIicgJiYgdG9rZW5WYWx1ZVtsIC0gMl0gPT09ICdcIicpIHtcbiAgICAgICAgbGV0IHAgPSBsIC0gMTtcbiAgICAgICAgd2hpbGUgKHRva2VuVmFsdWVbcF0gPT09ICdcIicpIHsgcC0tOyB9XG4gICAgICAgIGNvbnN0IGF0U3RhcnQgPSAocCArIDEpO1xuICAgICAgICBjb25zdCBvZGROdW0gPSAoKGwgLSBwICsgMSkgJSAyID09PSAwKTtcbiAgICAgICAgaWYgKCFhdFN0YXJ0IF4gb2RkTnVtKSB7XG4gICAgICAgICAgdG9rZW4udW50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWdhdGl2ZU51bWJlcnMgJiYgdG9rZW5UeXBlID09PSBOVU1CRVIpIHtcbiAgICAgIGNvbnN0IGxhc3QxID0gbGFzdFRva2VuO1xuICAgICAgLy8gZG8gd2UgaGF2ZSBhIG51bWJlciBwcmVjZWRlZCBieSBhIG1pbnVzP1xuICAgICAgaWYgKGxhc3QxICYmIGlzVHlwZShsYXN0MSwgT1BFUkFUT1IpICYmIGxhc3QxLnZhbHVlID09PSAnLScpIHtcbiAgICAgICAgLy8gbWlzc2luZyB0YWlsMSBtZWFucyB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0YWlsMSB8fFxuICAgICAgICAgIGlzVHlwZSh0YWlsMSwgRlhfUFJFRklYKSB8fFxuICAgICAgICAgICFjYXVzZXNCaW5hcnlNaW51cyh0YWlsMSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbWludXMgPSB0b2tlbnMucG9wKCk7XG4gICAgICAgICAgdG9rZW4udmFsdWUgPSAnLScgKyB0b2tlblZhbHVlO1xuICAgICAgICAgIGlmICh3aXRoTG9jYXRpb24pIHtcbiAgICAgICAgICAgIC8vIGVuc3VyZSBvZmZzZXRzIGFyZSB1cCB0byBkYXRlXG4gICAgICAgICAgICB0b2tlbi5sb2NbMF0gPSBtaW51cy5sb2NbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5leHQgc3RlcCB0cmllcyB0byBjb3VudGVyIHRoZSBzY3Jld2luZyBhcm91bmQgd2l0aCB0aGUgdGFpbGluZ1xuICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBjb3JyZWN0IGFnYWluIG9uY2Ugd2UgcHVzaFRva2VuKClcbiAgICAgICAgICB0YWlsMCA9IHRhaWwxO1xuICAgICAgICAgIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoVG9rZW4odG9rZW4pO1xuICB9XG5cbiAgLy8gaWYgd2UgZW5jb3VudGVyZWQgYm90aCBhIExBTUJEQS9MRVQgY2FsbCwgYW5kIHVua25vd24gJ3InIG9yICdjJyB0b2tlbnNcbiAgLy8gd2UnbGwgdHVybiB0aGUgdW5rbm93biB0b2tlbnMgaW50byBuYW1lcyB3aXRoaW4gdGhlIGNhbGwuXG4gIGlmICh1bmtub3duUkMgJiYgbGV0T3JMYW1iZGEpIHtcbiAgICBmaXhSQ05hbWVzKHRva2Vucyk7XG4gIH1cblxuICAvLyBBbnkgT1BFUkFUT1JfVFJJTSB0b2tlbnMgaGF2ZSBiZWVuIGluZGV4ZWQgYWxyZWFkeSwgdGhleSBub3cgbmVlZCB0byBiZVxuICAvLyBlaXRoZXIgdHVybmVkIGludG8gT1BFUkFUT1JzIG9yIFVOS05PV05zLiBUcmltIG9wZXJhdG9ycyBhcmUgb25seSBhbGxvd2VkXG4gIC8vIGJldHdlZW4gdHdvIFJFRl9SQU5HRSB0b2tlbnMgYXMgdGhleSBhcmUgbm90IHZhbGlkIGluIGV4cHJlc3Npb25zIGFzIGZ1bGxcbiAgLy8gb3BlcmF0b3JzLlxuICBmb3IgKGNvbnN0IGluZGV4IG9mIHRyaW1PcHMpIHtcbiAgICBjb25zdCBiZWZvcmUgPSB0b2tlbnNbaW5kZXggLSAxXTtcbiAgICBjb25zdCBhZnRlciA9IHRva2Vuc1tpbmRleCAtIDFdO1xuICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnR5cGUgPT09IFJFRl9SQU5HRSAmJiBhZnRlciAmJiBhZnRlci50eXBlID09PSBSRUZfUkFOR0UpIHtcbiAgICAgIHRva2Vuc1tpbmRleF0udHlwZSA9IE9QRVJBVE9SO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRva2Vuc1tpbmRleF0udHlwZSA9IFVOS05PV047XG4gICAgfVxuICB9XG5cbiAgaWYgKG1lcmdlUmVmcykge1xuICAgIHJldHVybiBtZXJnZVJlZlRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuLyoqXG4gKiBCcmVha3MgYSBzdHJpbmcgZm9ybXVsYSBpbnRvIGEgbGlzdCBvZiB0b2tlbnMuXG4gKlxuICogVGhlIHJldHVybmVkIG91dHB1dCB3aWxsIGJlIGFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB0b2tlbnM6XG4gKlxuICogYGBganNcbiAqIFtcbiAqICAgeyB0eXBlOiBGWF9QUkVGSVgsIHZhbHVlOiAnPScgfSxcbiAqICAgeyB0eXBlOiBGVU5DVElPTiwgdmFsdWU6ICdTVU0nIH0sXG4gKiAgIHsgdHlwZTogT1BFUkFUT1IsIHZhbHVlOiAnKCcgfSxcbiAqICAgeyB0eXBlOiBSRUZfUkFOR0UsIHZhbHVlOiAnQTE6QjInIH0sXG4gKiAgIHsgdHlwZTogT1BFUkFUT1IsIHZhbHVlOiAnKScgfVxuICogXVxuICogYGBgXG4gKlxuICogVG9rZW4gdHlwZXMgbWF5IGJlIGZvdW5kIGFzIGFuIE9iamVjdCBhcyB0aGVcbiAqIFtgdG9rZW5UeXBlc2AgZXhwb3J0XXtAbGluayB0b2tlblR5cGVzfSBvbiB0aGUgcGFja2FnZVxuICogKGBpbXBvcnQge3Rva2VuVHlwZXN9IGZyb20gJ0Bib3JnYXIvZngnO2ApLlxuICpcbiAqIFRvIHN1cHBvcnQgc3ludGF4IGhpZ2hsaWdodGluZyBhcyB5b3UgdHlwZSwgYFNUUklOR2AgdG9rZW5zIGFyZSBhbGxvd2VkIHRvIGJlXG4gKiBcInVudGVybWluYXRlZFwiLiBGb3IgZXhhbXBsZSwgdGhlIGluY29tcGxldGUgZm9ybXVsYSBgPVwiSGVsbG8gd29ybGRgIHdvdWxkIGJlXG4gKiB0b2tlbml6ZWQgYXM6XG4gKlxuICogYGBganNcbiAqIFtcbiAqICAgeyB0eXBlOiBGWF9QUkVGSVgsIHZhbHVlOiAnPScgfSxcbiAqICAgeyB0eXBlOiBTVFJJTkcsIHZhbHVlOiAnXCJIZWxsbyB3b3JsZCcsIHVudGVybWluYXRlZDogdHJ1ZSB9LFxuICogXVxuICogYGBgXG4gKlxuICogQHNlZSB0b2tlblR5cGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybXVsYSBBbiBFeGNlbCBmb3JtdWxhIHN0cmluZyAoYW4gRXhjZWwgZXhwcmVzc2lvbikgb3IgYW4gYXJyYXkgb2YgdG9rZW5zLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9ZmFsc2VdICBFbmFibGVzIHRoZSByZWNvZ25pdGlvbiBvZiB0ZXJuYXJ5IHJhbmdlcyBpbiB0aGUgc3R5bGUgb2YgYEExOkFgIG9yIGBBMToxYC4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieSBHb29nbGUgU2hlZXRzIGJ1dCBub3QgRXhjZWwuIFNlZTogUmVmZXJlbmNlcy5tZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubmVnYXRpdmVOdW1iZXJzPXRydWVdICBNZXJnZXMgdW5hcnkgbWludXNlcyB3aXRoIHRoZWlyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBudW1iZXIgdG9rZW5zIChgLWAsYDFgKSA9PiBgLTFgIChhbHRlcm5hdGl2ZWx5IHRoZXNlIHdpbGwgYmUgdW5hcnkgb3BlcmF0aW9ucyBpbiB0aGUgdHJlZSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnIxYzE9ZmFsc2VdICBSYW5nZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBSMUMxIHN0eWxlIGZvcm1hdCByYXRoZXIgdGhhbiB0aGUgbW9yZSBwb3B1bGFyIEExIHN0eWxlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy53aXRoTG9jYXRpb249dHJ1ZV0gIE5vZGVzIHdpbGwgaW5jbHVkZSBzb3VyY2UgcG9zaXRpb24gb2Zmc2V0cyB0byB0aGUgdG9rZW5zOiBgeyBsb2M6IFsgc3RhcnQsIGVuZCBdIH1gXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm1lcmdlUmVmcz10cnVlXSAgU2hvdWxkIHJhbmdlcyBiZSByZXR1cm5lZCBhcyB3aG9sZSByZWZlcmVuY2VzIChgU2hlZXQxIUExOkIyYCkgb3IgYXMgc2VwYXJhdGUgdG9rZW5zIGZvciBlYWNoIHBhcnQ6IChgU2hlZXQxYCxgIWAsYEExYCxgOmAsYEIyYCkuIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBbYG1lcmdlUmVmVG9rZW5zYF0oI21lcmdlUmVmVG9rZW5zKVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgRW5hYmxlcyBhIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcyBmb3VuZCBvbmx5IGluIFhMU1ggZmlsZXMuXG4gKiBAcmV0dXJucyB7QXJyYXk8VG9rZW4+fSBBbiBBU1Qgb2Ygbm9kZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplIChmb3JtdWxhLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGdldFRva2Vucyhmb3JtdWxhLCBsZXhlcnMsIG9wdGlvbnMpO1xufVxuIiwiaW1wb3J0IHtcbiAgUkVGX1JBTkdFLCBSRUZfQkVBTSwgUkVGX05BTUVELCBSRUZfVEVSTkFSWSwgUkVGX1NUUlVDVCxcbiAgRlhfUFJFRklYLCBXSElURVNQQUNFLCBORVdMSU5FLFxuICBGVU5DVElPTiwgT1BFUkFUT1IsXG4gIEVSUk9SLCBTVFJJTkcsIE5VTUJFUiwgQk9PTEVBTlxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgYSByYW5nZS5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiB0aGF0IGhhcyBhIHR5cGUgb2YgZWl0aGVyIFJFRl9SQU5HRVxuICogKGBBMWAgb3IgYEExOkIyYCksIFJFRl9URVJOQVJZIChgQTE6QWAsIGBBMToxYCwgYDE6QTFgLCBvciBgQTpBMWApLCBvclxuICogUkVGX0JFQU0gKGBBOkFgIG9yIGAxOjFgKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIEEgdG9rZW5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgcmFuZ2UsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmFuZ2UgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBSRUZfUkFOR0UgfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfQkVBTSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9URVJOQVJZXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgYSByZWZlcmVuY2UuXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBSRUZfUkFOR0UgKGBBMWAgb3IgYEExOkIyYCksXG4gKiBSRUZfVEVSTkFSWSAoYEExOkFgLCBgQTE6MWAsIGAxOkExYCwgb3IgYEE6QTFgKSwgUkVGX0JFQU0gKGBBOkFgIG9yIGAxOjFgKSxcbiAqIG9yIFJFRl9OQU1FRCAoYG15cmFuZ2VgKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyByZWZlcmVuY2UsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlICh0b2tlbikge1xuICByZXR1cm4gISF0b2tlbiAmJiAoXG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX1JBTkdFIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX0JFQU0gfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfVEVSTkFSWSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9TVFJVQ1QgfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfTkFNRURcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhIGxpdGVyYWwuXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBCT09MRUFOIChgVFJVRWAgb3IgYEZBTFNFYCksXG4gKiBFUlJPUiAoYCNWQUxVRSFgKSwgTlVNQkVSICgxMjMuNCksIG9yIFNUUklORyAoYFwibG9yZW0gaXBzdW1cImApLiBJbiBhbGwgb3RoZXJcbiAqIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBsaXRlcmFsLCBGYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdGVyYWwgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBCT09MRUFOIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gRVJST1IgfHxcbiAgICB0b2tlbi50eXBlID09PSBOVU1CRVIgfHxcbiAgICB0b2tlbi50eXBlID09PSBTVFJJTkdcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhbiBlcnJvci5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIEVSUk9SIChgI1ZBTFVFIWApLiBJbiBhbGxcbiAqIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBlcnJvciwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvciAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gRVJST1I7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgd2hpdGVzcGFjZS5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIFdISVRFU1BBQ0UgKGAgYCkgb3JcbiAqIE5FV0xJTkUgKGBcXG5gKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyB3aGl0ZXNwYWNlLCBGYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1doaXRlc3BhY2UgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBXSElURVNQQUNFIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gTkVXTElORVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGEgZnVuY3Rpb24uXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBGVU5DVElPTi5cbiAqIEluIGFsbCBvdGhlciBjYXNlcyBgZmFsc2VgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7YW55fSB0b2tlbiBUaGUgdG9rZW5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgZnVuY3Rpb24sIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24gKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIHRva2VuLnR5cGUgPT09IEZVTkNUSU9OO1xufVxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgRlhfUFJFRklYIChsZWFkaW5nIGA9YCBpblxuICogZm9ybXVsYSkuIEluIGFsbCBvdGhlciBjYXNlcyBgZmFsc2VgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7YW55fSB0b2tlbiBUaGUgdG9rZW5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgZWZmZWN0cyBwcmVmaXgsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnhQcmVmaXggKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIHRva2VuLnR5cGUgPT09IEZYX1BSRUZJWDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhbiBvcGVyYXRvci5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIE9QRVJBVE9SIChgK2Agb3IgYDpgKS4gSW4gYWxsXG4gKiBvdGhlciBjYXNlcyBgZmFsc2VgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7YW55fSB0b2tlbiBUaGUgdG9rZW5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgb3BlcmF0b3IsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT3BlcmF0b3IgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIHRva2VuLnR5cGUgPT09IE9QRVJBVE9SO1xufVxuIiwiLypcbiAqIEV4Y2VsIGZvcm11bGEgbGFuZ3VhZ2UgcGFyc2VyXG4gKlxuICogVGhpcyBwYXJzZXIgaXMgYSBUb3AtRG93biBPcGVyYXRvciBQcmVjZWRlbmNlIChQcmF0dCkgcGFyc2VyLiBJdCdzIGJhc2VkIG9uXG4gKiB0aGUgb25lIHRoYXQgRG91Z2xhcyBDcm9ja2ZvcmQgZGVzY3JpYmVzIGluIENoYXB0ZXIgOSBvZiB0aGUgTydSZWlsbHkgYm9va1xuICogQmV1dGlmdWwgQ29kZSAoaHR0cDovL2Nyb2NrZm9yZC5jb20vamF2YXNjcmlwdC90ZG9wL3Rkb3AuaHRtbCkuXG4gKlxuICogVGhlIHBhcnNlciBoYW5kbGVzIG1vc3QgYmFzaWMgdGhpbmdzIEV4Y2VsL1NoZWV0cyBkbyBleGNlcHQ6XG4gKiBgU2hlZXQxOlNoZWV0MiFBMWAgcmVmZXJlbmNlcyBjcm9zcyBjb250ZXh0cyAoM0QgcmVmZXJlbmNlcylcbiAqL1xuaW1wb3J0IHtcbiAgaXNSZWZlcmVuY2UsXG4gIGlzTGl0ZXJhbCxcbiAgaXNGdW5jdGlvbixcbiAgaXNXaGl0ZXNwYWNlLFxuICBpc0Z4UHJlZml4LFxuICBpc09wZXJhdG9yLFxuICBpc0Vycm9yXG59IGZyb20gJy4vaXNUeXBlLmpzJztcbmltcG9ydCB7XG4gIFVOQVJZLFxuICBCSU5BUlksXG4gIFJFRkVSRU5DRSxcbiAgTElURVJBTCxcbiAgRVJST1JfTElURVJBTCxcbiAgQ0FMTCxcbiAgTEFNQkRBLFxuICBBUlJBWSxcbiAgSURFTlRJRklFUixcbiAgTlVNQkVSLFxuICBCT09MRUFOLFxuICBFUlJPUixcbiAgU1RSSU5HLFxuICBMRVQsXG4gIExFVF9ERUNMLFxuICBSRUZfTkFNRUQsXG4gIFJFRl9TVFJVQ1QsXG4gIFJFRl9CRUFNXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuaW1wb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcblxuY29uc3QgRU5EID0gJyhFTkQpJztcbmNvbnN0IEZVTkNUSU9OID0gJyhGVU5DVElPTiknO1xuY29uc3QgV0hJVEVTUEFDRSA9ICcoV0hJVEVTUEFDRSknO1xuXG5jb25zdCByZWZGdW5jdGlvbnMgPSBbXG4gICdBTkNIT1JBUlJBWScsXG4gICdDSE9PU0UnLFxuICAnRFJPUCcsXG4gICdJRicsXG4gICdJRlMnLFxuICAnSU5ERVgnLFxuICAnSU5ESVJFQ1QnLFxuICAnTEFNQkRBJyxcbiAgJ0xFVCcsXG4gICdPRkZTRVQnLFxuICAnUkVEVUNFJyxcbiAgJ1NJTkdMRScsXG4gICdTV0lUQ0gnLFxuICAnVEFLRScsXG4gICdUUklNUkFOR0UnLFxuICAnWExPT0tVUCdcbl07XG5cbmNvbnN0IHN5bWJvbFRhYmxlID0ge307XG5sZXQgY3VycmVudE5vZGU7XG5sZXQgdG9rZW5zO1xubGV0IHRva2VuSW5kZXg7XG5sZXQgcGVybWl0QXJyYXlSYW5nZXMgPSBmYWxzZTtcbmxldCBwZXJtaXRBcnJheUNhbGxzID0gZmFsc2U7XG5sZXQgbG9vc2VSZWZDYWxscyA9IGZhbHNlO1xuXG5jb25zdCBpc1JlZmVyZW5jZUZ1bmN0aW9uTmFtZSA9IGZuTmFtZSA9PiB7XG4gIHJldHVybiBsb29zZVJlZkNhbGxzIHx8IHJlZkZ1bmN0aW9ucy5pbmNsdWRlcyhmbk5hbWUudG9VcHBlckNhc2UoKSk7XG59O1xuXG5jb25zdCBpc1JlZmVyZW5jZVRva2VuID0gKHRva2VuLCBhbGxvd09wZXJhdG9ycyA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gKHRva2VuICYmIHRva2VuLnZhbHVlKSArICcnO1xuICBpZiAoaXNSZWZlcmVuY2UodG9rZW4pKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGFsbG93T3BlcmF0b3JzICYmIGlzT3BlcmF0b3IodG9rZW4pICYmICh2YWx1ZSA9PT0gJzonIHx8IHZhbHVlID09PSAnLCcgfHwgIXZhbHVlLnRyaW0oKSkpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gam9pbiwgdW5pb24sIGludGVyc2VjdGlvblxuICB9XG4gIGlmIChpc0Z1bmN0aW9uKHRva2VuKSAmJiBpc1JlZmVyZW5jZUZ1bmN0aW9uTmFtZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gZnVuY3Rpb24gdGhhdCB5aWVsZHMgcmVmZXJlbmNlXG4gIH1cbiAgaWYgKGlzRXJyb3IodG9rZW4pICYmIHZhbHVlID09PSAnI1JFRiEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNSZWZlcmVuY2VOb2RlID0gbm9kZSA9PiB7XG4gIHJldHVybiAoISFub2RlKSAmJiAoXG4gICAgKG5vZGUudHlwZSA9PT0gUkVGRVJFTkNFKSB8fFxuICAgICgobm9kZS50eXBlID09PSBFUlJPUl9MSVRFUkFMIHx8IG5vZGUudHlwZSA9PT0gRVJST1IpICYmIG5vZGUudmFsdWUgPT09ICcjUkVGIScpIHx8XG4gICAgKG5vZGUudHlwZSA9PT0gQklOQVJZICYmIChcbiAgICAgIG5vZGUub3BlcmF0b3IgPT09ICc6JyB8fFxuICAgICAgbm9kZS5vcGVyYXRvciA9PT0gJyAnIHx8XG4gICAgICBub2RlLm9wZXJhdG9yID09PSAnLCcpXG4gICAgKSB8fFxuICAgIGlzUmVmZXJlbmNlKG5vZGUpIHx8XG4gICAgKG5vZGUudHlwZSA9PT0gQ0FMTCAmJiBpc1JlZmVyZW5jZUZ1bmN0aW9uTmFtZShub2RlLmNhbGxlZS5uYW1lKSlcbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGhhbHQgKG1lc3NhZ2UsIGF0SW5kZXggPSBudWxsKSB7XG4gIGNvbnN0IGVyciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyLnNvdXJjZSA9IHRva2Vucy5tYXAoZCA9PiBkLnZhbHVlKS5qb2luKCcnKTtcbiAgZXJyLnNvdXJjZU9mZnNldCA9IHRva2Vuc1xuICAgIC5zbGljZSgwLCBhdEluZGV4ID8/IHRva2VuSW5kZXgpXG4gICAgLnJlZHVjZSgoYSwgZCkgPT4gYSArIGQudmFsdWUubGVuZ3RoLCAwKTtcbiAgdGhyb3cgZXJyO1xufVxuXG4vLyBBMSBBMSB8IEExIChBMSkgfCBBMSAoKEExKSkgfCBBMSAoIChBMSkgKSB8IC4uLlxuZnVuY3Rpb24gcmVmSXNVcGNvbWluZyAoYWxsb3dPcGVyYXRvcnMgPSBmYWxzZSkge1xuICBsZXQgaSA9IHRva2VuSW5kZXg7XG4gIGxldCBuZXh0O1xuICBkbyB7XG4gICAgbmV4dCA9IHRva2Vuc1srK2ldO1xuICB9XG4gIHdoaWxlIChcbiAgICBuZXh0ICYmIChcbiAgICAgIGlzV2hpdGVzcGFjZShuZXh0KSB8fFxuICAgICAgKGlzT3BlcmF0b3IobmV4dCkgJiYgbmV4dC52YWx1ZSA9PT0gJygnKVxuICAgIClcbiAgKTtcbiAgcmV0dXJuIGlzUmVmZXJlbmNlVG9rZW4obmV4dCwgYWxsb3dPcGVyYXRvcnMpO1xufVxuXG5mdW5jdGlvbiBhZHZhbmNlIChleHBlY3ROZXh0ID0gbnVsbCwgbGVmdE5vZGUgPSBudWxsKSB7XG4gIGlmIChleHBlY3ROZXh0ICYmIGV4cGVjdE5leHQgIT09IGN1cnJlbnROb2RlLmlkKSB7XG4gICAgaGFsdChgRXhwZWN0ZWQgJHtleHBlY3ROZXh0fSBidXQgZ290ICR7Y3VycmVudE5vZGUuaWR9YCk7XG4gIH1cbiAgLy8gbG9vayBhaGVhZCB0byBzZWUgaWYgd2UgaGF2ZSAoICggXCIgXCIsIFwiKFwiICkrIFJFRiApXG4gIGlmIChpc1doaXRlc3BhY2UodG9rZW5zW3Rva2VuSW5kZXhdKSkge1xuICAgIC8vIHBvdGVudGlhbCBpbnRlcnNlY3Rpb24gb3BlcmF0aW9uIChzbyBkb24ndCBhbGxvdyBvcGVyYXRvcnMgYXMgdXBjb21pbmcpXG4gICAgY29uc3QgaGF2ZVJlZiA9IGlzUmVmZXJlbmNlTm9kZShsZWZ0Tm9kZSk7XG4gICAgY29uc3QgcG9zc2libGVXU09wID0gaGF2ZVJlZiAmJiByZWZJc1VwY29taW5nKGZhbHNlKTtcbiAgICBjb25zdCBuZXh0SXNDYWxsID0gaGF2ZVJlZiAmJiB0b2tlbnNbdG9rZW5JbmRleCArIDFdICYmIHRva2Vuc1t0b2tlbkluZGV4ICsgMV0udmFsdWUgPT09ICcoJztcbiAgICBpZiAoIXBvc3NpYmxlV1NPcCAmJiAhbmV4dElzQ2FsbCkge1xuICAgICAgLy8gaWdub3JlIHdoaXRlc3BhY2VcbiAgICAgIHdoaWxlIChpc1doaXRlc3BhY2UodG9rZW5zW3Rva2VuSW5kZXhdKSkge1xuICAgICAgICB0b2tlbkluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEVPVFxuICBpZiAodG9rZW5JbmRleCA+PSB0b2tlbnMubGVuZ3RoKSB7XG4gICAgY3VycmVudE5vZGUgPSBzeW1ib2xUYWJsZVtFTkRdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gdG9rZW5zW3Rva2VuSW5kZXhdO1xuICB0b2tlbkluZGV4ICs9IDE7XG5cbiAgaWYgKHRva2VuLnVudGVybWluYXRlZCkge1xuICAgIGhhbHQoJ0VuY291bnRlcmVkIGFuIHVudGVybWluYXRlZCB0b2tlbicpO1xuICB9XG5cbiAgbGV0IG5vZGU7XG4gIGlmIChpc09wZXJhdG9yKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVt0b2tlbi52YWx1ZV07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBoYWx0KGBVbmtub3duIG9wZXJhdG9yICR7dG9rZW4udmFsdWV9YCk7XG4gICAgfVxuICB9XG4gIGVsc2UgaWYgKGlzV2hpdGVzcGFjZSh0b2tlbikpIHtcbiAgICBub2RlID0gc3ltYm9sVGFibGVbV0hJVEVTUEFDRV07XG4gIH1cbiAgZWxzZSBpZiAoaXNMaXRlcmFsKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtMSVRFUkFMXTtcbiAgfVxuICBlbHNlIGlmIChpc1JlZmVyZW5jZSh0b2tlbikpIHtcbiAgICBub2RlID0gc3ltYm9sVGFibGVbUkVGRVJFTkNFXTtcbiAgfVxuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtGVU5DVElPTl07XG4gIH1cbiAgZWxzZSB7XG4gICAgaGFsdChgVW5leHBlY3RlZCAke3Rva2VuLnR5cGV9IHRva2VuOiAke3Rva2VuLnZhbHVlfWApO1xuICB9XG5cbiAgY3VycmVudE5vZGUgPSBPYmplY3QuY3JlYXRlKG5vZGUpO1xuICBjdXJyZW50Tm9kZS50eXBlID0gdG9rZW4udHlwZTtcbiAgY3VycmVudE5vZGUudmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgaWYgKHRva2VuLmxvYykge1xuICAgIGN1cnJlbnROb2RlLmxvYyA9IFsgLi4udG9rZW4ubG9jIF07XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnROb2RlO1xufVxuXG5mdW5jdGlvbiBleHByZXNzaW9uIChyYnApIHtcbiAgbGV0IHQgPSBjdXJyZW50Tm9kZTtcbiAgYWR2YW5jZShudWxsLCB0KTtcbiAgbGV0IGxlZnQgPSB0Lm51ZCgpO1xuICB3aGlsZSAocmJwIDwgY3VycmVudE5vZGUubGJwKSB7XG4gICAgdCA9IGN1cnJlbnROb2RlO1xuICAgIGFkdmFuY2UobnVsbCwgdCk7XG4gICAgbGVmdCA9IHQubGVkKGxlZnQpO1xuICB9XG4gIHJldHVybiBsZWZ0O1xufVxuXG5jb25zdCBvcmlnaW5hbF9zeW1ib2wgPSB7XG4gIC8vIG51bGwgZGVub3RhdGlvblxuICBudWQ6ICgpID0+IGhhbHQoJ0ludmFsaWQgc3ludGF4JyksIC8vIFVuZGVmaW5lZFxuICAvLyBsZWZ0IGRlbm90YXRpb25cbiAgbGVkOiAoKSA9PiBoYWx0KCdNaXNzaW5nIG9wZXJhdG9yJylcbn07XG5cbi8vIGJwID0gYmluZGluZyBwb3dlclxuZnVuY3Rpb24gc3ltYm9sIChpZCwgYnAgPSAwKSB7XG4gIGxldCBzID0gc3ltYm9sVGFibGVbaWRdO1xuICBpZiAocykge1xuICAgIGlmIChicCA+PSBzLmxicCkge1xuICAgICAgcy5sYnAgPSBicDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgcyA9IHsgLi4ub3JpZ2luYWxfc3ltYm9sIH07XG4gICAgcy5pZCA9IGlkO1xuICAgIHMudmFsdWUgPSBpZDtcbiAgICBzLmxicCA9IGJwO1xuICAgIHN5bWJvbFRhYmxlW2lkXSA9IHM7XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIGluZml4IChpZCwgYnAsIGxlZCkge1xuICBjb25zdCBzID0gc3ltYm9sKGlkLCBicCk7XG4gIHMubGVkID0gbGVkIHx8IGZ1bmN0aW9uIChsZWZ0KSB7XG4gICAgdGhpcy50eXBlID0gQklOQVJZO1xuICAgIHRoaXMub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgIGNvbnN0IHJpZ2h0ID0gZXhwcmVzc2lvbihicCk7XG4gICAgdGhpcy5hcmd1bWVudHMgPSBbIGxlZnQsIHJpZ2h0IF07XG4gICAgaWYgKHRoaXMubG9jKSB7XG4gICAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIHJpZ2h0LmxvY1sxXSBdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIHBvc3RmaXggKGlkLCBsZWQpIHtcbiAgY29uc3QgcyA9IHN5bWJvbChpZCwgMCk7XG4gIHMubGJwID0gNzA7XG4gIHMubGVkID0gbGVkIHx8IGZ1bmN0aW9uIChsZWZ0KSB7XG4gICAgdGhpcy50eXBlID0gVU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgdGhpcy5hcmd1bWVudHMgPSBbIGxlZnQgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jWzBdID0gbGVmdC5sb2NbMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcHJlZml4IChpZCwgbnVkKSB7XG4gIGNvbnN0IHMgPSBzeW1ib2woaWQpO1xuICBzLm51ZCA9IG51ZCB8fCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy50eXBlID0gVU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgY29uc3Qgc3ViZXhwciA9IGV4cHJlc3Npb24oNzApO1xuICAgIHRoaXMuYXJndW1lbnRzID0gWyBzdWJleHByIF07XG4gICAgaWYgKHRoaXMubG9jKSB7XG4gICAgICB0aGlzLmxvY1sxXSA9IHN1YmV4cHIubG9jWzFdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5maXggKGlkLCBicCkge1xuICByZXR1cm4gaW5maXgoaWQsIGJwLCBmdW5jdGlvbiAobGVmdCkge1xuICAgIGlmICghaXNSZWZlcmVuY2VOb2RlKGxlZnQpKSB7XG4gICAgICBoYWx0KGBVbmV4cGVjdGVkICR7aWR9IG9wZXJhdG9yYCk7XG4gICAgfVxuICAgIGNvbnN0IHJpZ2h0ID0gZXhwcmVzc2lvbihicCk7XG4gICAgaWYgKCFpc1JlZmVyZW5jZU5vZGUocmlnaHQsIHRydWUpKSB7XG4gICAgICBoYWx0KGBVbmV4cGVjdGVkICR7Y3VycmVudE5vZGUudHlwZX0gZm9sbG93aW5nICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gICAgdGhpcy50eXBlID0gQklOQVJZO1xuICAgIHRoaXMub3BlcmF0b3IgPSB0aGlzLnZhbHVlLnRyaW0oKSA/IHRoaXMudmFsdWUgOiAnICc7IC8vIGhhY2sgYXJvdW5kIHdoaXRlc3BhY2Ugb3BcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICB0aGlzLmFyZ3VtZW50cyA9IFsgbGVmdCwgcmlnaHQgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgcmlnaHQubG9jWzFdIF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxuc3ltYm9sKEVORCk7XG5cbi8vIHJlZmVyZW5jZSBvcGVyYXRvcnNcbnJhbmdlSW5maXgoJzonLCA4MCk7IC8vIHJhbmdlIGpvaW4vZXh0ZW5kID1CNzpPRkZTRVQoQTEsMTAsMTApXG5jb25zdCBjb21tYSA9IHJhbmdlSW5maXgoJywnLCA4MCk7IC8vIHVuaW9uID1CNzpENyxDNjpDOFxucmFuZ2VJbmZpeChXSElURVNQQUNFLCA4MCk7IC8vIGludGVyc2VjdDogPUI3OkQ3IEM2OkM4XG5cbi8vIEV4Y2VsJ3MgZ3JhbW1hciBpcyBhbWJpZ3VvdXMuIFRoaXMgdHVybnMgdGhlICwgb3BlcmF0b3IncyBsZWZ0IGJpbmRpbmdcbi8vIHBvd2VyIG9uL29mZiB3aGljaCBhbGxvd3MgdXMgdG8gdHJlYXQgLCBhcyBhIHN5bWJvbCB3aGVyZSB3ZSBuZWVkLlxuY29uc3QgdW5pb25SZWZzID0gZW5hYmxlID0+IHtcbiAgY29uc3QgY3VyclN0YXRlID0gY29tbWEubGJwID4gMDtcbiAgaWYgKGVuYWJsZSAhPSBudWxsKSB7IGNvbW1hLmxicCA9IGVuYWJsZSA/IDgwIDogMDsgfVxuICByZXR1cm4gY3VyclN0YXRlO1xufTtcblxuLy8gYXJpdGhtZXRpYyBhbmQgc3RyaW5nIG9wZXJhdGlvbnNcbnBvc3RmaXgoJyUnKTsgLy8gcGVyY2VudFxucG9zdGZpeCgnIycsIGZ1bmN0aW9uIChsZWZ0KSB7IC8vIHNwaWxsZWQgcmFuZ2UgKF94bGZuLkFOQ0hPUkFSUkFZKVxuICBpZiAoIWlzUmVmZXJlbmNlTm9kZShsZWZ0KSkge1xuICAgIGhhbHQoJyMgZXhwZWN0cyBhIHJlZmVyZW5jZScpO1xuICB9XG4gIHRoaXMudHlwZSA9IFVOQVJZO1xuICB0aGlzLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHRoaXMuYXJndW1lbnRzID0gWyBsZWZ0IF07XG4gIHJldHVybiB0aGlzO1xufSk7IC8vIHJhbmdlXG5wcmVmaXgoJysnKTsgLy8gdW5hcnkgcGx1c1xucHJlZml4KCctJyk7IC8vIHVuYXJ5IG1pbnVzXG5wcmVmaXgoJ0AnKTsgLy8gaW1wbGljaXQgaW50ZXJzZWN0aW9uIChfeGxmbi5TSU5HTEUpXG5pbmZpeCgnXicsIDUwKTsgLy8gcG93ZXJcbmluZml4KCcqJywgNDApOyAvLyBtdWx0aXBseVxuaW5maXgoJy8nLCA0MCk7IC8vIGRpdmlkZVxuaW5maXgoJysnLCAzMCk7IC8vIGFkZFxuaW5maXgoJy0nLCAzMCk7IC8vIHN1YnRyYWN0XG5pbmZpeCgnJicsIDIwKTsgLy8gdGV4dCBjb25jYXRcblxuLy8gY29tcGFyaXNvblxuaW5maXgoJz0nLCAxMCk7XG5pbmZpeCgnPCcsIDEwKTtcbmluZml4KCc+JywgMTApO1xuaW5maXgoJzw9JywgMTApO1xuaW5maXgoJz49JywgMTApO1xuaW5maXgoJzw+JywgMTApO1xuc3ltYm9sKExJVEVSQUwpLm51ZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gdGhpcztcbiAgdGhpcy50eXBlID0gTElURVJBTDtcbiAgdGhpcy5yYXcgPSB2YWx1ZTtcbiAgaWYgKHR5cGUgPT09IE5VTUJFUikge1xuICAgIHRoaXMudmFsdWUgPSArdmFsdWU7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gQk9PTEVBTikge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnVFJVRSc7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gRVJST1IpIHtcbiAgICB0aGlzLnR5cGUgPSBFUlJPUl9MSVRFUkFMO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICB9XG4gIGVsc2UgaWYgKHR5cGUgPT09IFNUUklORykge1xuICAgIC8vIEZJWE1FOiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgc3RyaW5nIGlzIHVudGVybWluYXRlZFxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZS5zbGljZSgxLCAtMSkucmVwbGFjZSgvXCJcIi9nLCAnXCInKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGxpdGVyYWwgdHlwZTogJyArIHR5cGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcbnN5bWJvbChSRUZFUkVOQ0UpLm51ZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMudHlwZSA9PT0gUkVGX05BTUVEKSB7XG4gICAgdGhpcy5raW5kID0gJ25hbWUnO1xuICB9XG4gIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gUkVGX1NUUlVDVCkge1xuICAgIHRoaXMua2luZCA9ICd0YWJsZSc7IC8vIHN0cnVjdHVyZWQgP1xuICB9XG4gIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gUkVGX0JFQU0pIHtcbiAgICB0aGlzLmtpbmQgPSAnYmVhbSc7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5raW5kID0gJ3JhbmdlJztcbiAgfVxuICB0aGlzLnR5cGUgPSBSRUZFUkVOQ0U7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gcGFyZW5zXG5zeW1ib2woJyknKTtcbnByZWZpeCgnKCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcHJldlN0YXRlID0gdW5pb25SZWZzKHRydWUpO1xuICBjb25zdCBlID0gZXhwcmVzc2lvbigwKTtcbiAgYWR2YW5jZSgnKScsIGUpO1xuICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgcmV0dXJuIGU7XG59KTtcblxuLy8gZnVuY3Rpb24gY2FsbFxuc3ltYm9sKEZVTkNUSU9OKS5udWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcbmluZml4KCcoJywgOTAsIGZ1bmN0aW9uIChsZWZ0KSB7XG4gIGxldCBjYWxsZWUgPSB7XG4gICAgdHlwZTogSURFTlRJRklFUixcbiAgICBuYW1lOiBsZWZ0LnZhbHVlXG4gIH07XG4gIGlmIChsZWZ0LmlkICE9PSBGVU5DVElPTikge1xuICAgIGlmIChcbiAgICAgIGxlZnQudHlwZSA9PT0gTEFNQkRBIHx8XG4gICAgICAvLyBFeGNlbCBvbmx5IGFsbG93cyBjYWxscyB0byBcIm5hbWVzXCIgYW5kIHJlZiBmdW5jdGlvbnMuIFNpbmNlIHdlIGRvbid0XG4gICAgICAvLyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIHR3byAodGhpcyByZXF1aXJlcyBhIHRhYmxlIG9mIGZ1bmN0aW9uIG5hbWVzKVxuICAgICAgLy8gd2UncmUgb3Zlcmx5IHBlcm1pc3NpdmUgaGVyZTpcbiAgICAgIGxlZnQudHlwZSA9PT0gQ0FMTCB8fFxuICAgICAgbGVmdC50eXBlID09PSBMRVQgfHxcbiAgICAgIGxlZnQudHlwZSA9PT0gUkVGRVJFTkNFIHx8XG4gICAgICAobGVmdC50eXBlID09PSBVTkFSWSAmJiBsZWZ0LnZhbHVlID09PSAnIycpIHx8IC8vIEJlY2F1c2UgaXQncyByZWFsbHkgU0lOR0xFKC4uLikoKVxuICAgICAgKGxlZnQudHlwZSA9PT0gRVJST1JfTElURVJBTCAmJiBsZWZ0LnZhbHVlID09PSAnI1JFRiEnKVxuICAgICkge1xuICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgUkVGRVJFTkNFLCBkbyB3ZSB3YW50IHRvIHNldCB0aGUgbm9kZSB0byBJZGVudGlmaWVyP1xuICAgICAgY2FsbGVlID0gbGVmdDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBoYWx0KCdVbmV4cGVjdGVkIGNhbGwnLCB0b2tlbkluZGV4IC0gMSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxjRm4gPSBsZWZ0LnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChsY0ZuID09PSAnbGFtYmRhJykge1xuICAgIHJldHVybiBwYXJzZUxhbWJkYS5jYWxsKHRoaXMsIGxlZnQpO1xuICB9XG4gIGlmIChsY0ZuID09PSAnbGV0Jykge1xuICAgIHJldHVybiBwYXJzZUxldC5jYWxsKHRoaXMsIGxlZnQpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgbGV0IGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICBpZiAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgIGNvbnN0IHByZXZTdGF0ZSA9IHVuaW9uUmVmcyhmYWxzZSk7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlLmlkICE9PSAnKScpIHtcbiAgICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICAgIGFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJywnKSB7XG4gICAgICAgIGFyZ3MucHVzaChudWxsKTtcbiAgICAgICAgbGFzdFdhc0NvbW1hID0gdHJ1ZTtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICBsYXN0V2FzQ29tbWEgPSBmYWxzZTtcbiAgICAgICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgICAgICBhZHZhbmNlKCcsJyk7XG4gICAgICAgICAgbGFzdFdhc0NvbW1hID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgfVxuICBpZiAobGFzdFdhc0NvbW1hKSB7XG4gICAgYXJncy5wdXNoKG51bGwpO1xuICB9XG4gIGNvbnN0IGNsb3NlUGFyZW4gPSBjdXJyZW50Tm9kZTtcbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHRoaXMudHlwZSA9IENBTEw7XG4gIHRoaXMuY2FsbGVlID0gY2FsbGVlO1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmNhbGxlZS5sb2MgPSBbIC4uLmxlZnQubG9jIF07XG4gIH1cbiAgdGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIGNsb3NlUGFyZW4ubG9jWzFdIF07XG4gIH1cbiAgYWR2YW5jZSgnKScsIHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn0pO1xuXG5mdW5jdGlvbiBwYXJzZUxhbWJkYSAobGVmdCkge1xuICBjb25zdCBhcmdzID0gW107XG4gIGNvbnN0IGFyZ05hbWVzID0ge307XG4gIGxldCBib2R5O1xuICBsZXQgZG9uZSA9IGZhbHNlO1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnMoZmFsc2UpO1xuICBpZiAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgaWYgKGlzV2hpdGVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXJnVG9rZW5JbmRleCA9IHRva2VuSW5kZXg7XG4gICAgICBjb25zdCBhcmcgPSBleHByZXNzaW9uKDApO1xuICAgICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgICAgLy8gYWxsIGJ1dCBsYXN0IGFyZ3MgbXVzdCBiZSBuYW1lc1xuICAgICAgICBpZiAoYXJnLnR5cGUgPT09IFJFRkVSRU5DRSAmJiBhcmcua2luZCA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgLy8gbmFtZXMgbWF5IG5vdCBiZSBkdXBsaWNhdGVzXG4gICAgICAgICAgY29uc3QgY3Vyck5hbWUgPSBhcmcudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoY3Vyck5hbWUgaW4gYXJnTmFtZXMpIHtcbiAgICAgICAgICAgIGhhbHQoJ0R1cGxpY2F0ZSBuYW1lOiAnICsgYXJnLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXJnTmFtZXNbY3Vyck5hbWVdID0gMTtcbiAgICAgICAgICBjb25zdCBhID0geyB0eXBlOiBJREVOVElGSUVSLCBuYW1lOiBhcmcudmFsdWUgfTtcbiAgICAgICAgICBpZiAoYXJnLmxvYykgeyBhLmxvYyA9IGFyZy5sb2M7IH1cbiAgICAgICAgICBhcmdzLnB1c2goYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdG9rZW5JbmRleCA9IGFyZ1Rva2VuSW5kZXg7XG4gICAgICAgICAgaGFsdCgnTEFNQkRBIGFyZ3VtZW50IGlzIG5vdCBhIG5hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICBhZHZhbmNlKCcsJyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYm9keSA9IGFyZztcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy50eXBlID0gTEFNQkRBO1xuICB0aGlzLnBhcmFtcyA9IGFyZ3M7XG4gIHRoaXMuYm9keSA9IGJvZHkgfHwgbnVsbDtcbiAgaWYgKGxlZnQubG9jKSB7XG4gICAgdGhpcy5sb2MgPSBbIGxlZnQubG9jWzBdLCBjdXJyZW50Tm9kZS5sb2NbMV0gXTtcbiAgfVxuICBhZHZhbmNlKCcpJywgdGhpcyk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxldCAobGVmdCkge1xuICBjb25zdCBhcmdzID0gW107XG4gIGNvbnN0IHZhbHMgPSBbXTtcbiAgY29uc3QgYXJnTmFtZXMgPSB7fTtcbiAgbGV0IGJvZHk7XG4gIGxldCBhcmdDb3VudGVyID0gMDtcbiAgY29uc3QgYWRkQXJndW1lbnQgPSAoYXJnLCBsYXN0QXJnKSA9PiB7XG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIGhhbHQoJ1VuZXhwZWN0ZWQgYXJndW1lbnQgZm9sbG93aW5nIGNhbGN1bGF0aW9uJyk7XG4gICAgfVxuICAgIGlmIChsYXN0QXJnICYmIGFyZ0NvdW50ZXIgPj0gMikge1xuICAgICAgYm9keSA9IGFyZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB3YW50TmFtZSA9ICEoYXJnQ291bnRlciAlIDIpO1xuICAgICAgaWYgKHdhbnROYW1lKSB7XG4gICAgICAgIGlmIChhcmcgJiYgKGFyZy50eXBlID09PSBSRUZFUkVOQ0UgJiYgYXJnLmtpbmQgPT09ICduYW1lJykpIHtcbiAgICAgICAgICAvLyBuYW1lcyBtYXkgbm90IGJlIGR1cGxpY2F0ZXNcbiAgICAgICAgICBjb25zdCBjdXJyTmFtZSA9IGFyZy52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChjdXJyTmFtZSBpbiBhcmdOYW1lcykge1xuICAgICAgICAgICAgaGFsdCgnRHVwbGljYXRlIG5hbWU6ICcgKyBhcmcudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcmdOYW1lc1tjdXJyTmFtZV0gPSAxO1xuICAgICAgICAgIGFyZ3MucHVzaCh7IHR5cGU6IElERU5USUZJRVIsIG5hbWU6IGFyZy52YWx1ZSwgbG9jOiBhcmcubG9jIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ0NvdW50ZXIgPj0gMikge1xuICAgICAgICAgIGJvZHkgPSBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaGFsdCgnQXJndW1lbnQgaXMgbm90IGEgbmFtZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFscy5wdXNoKGFyZyk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ0NvdW50ZXIrKztcbiAgfTtcbiAgY29uc3QgcHJldlN0YXRlID0gdW5pb25SZWZzKGZhbHNlKTtcbiAgbGV0IGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICBpZiAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgIHdoaWxlIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgICBpZiAoaXNXaGl0ZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICBhZGRBcmd1bWVudChudWxsKTtcbiAgICAgICAgbGFzdFdhc0NvbW1hID0gdHJ1ZTtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICAgIGFkZEFyZ3VtZW50KGFyZywgY3VycmVudE5vZGUuaWQgIT09ICcsJyk7XG4gICAgICAgIGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICAgIGFkdmFuY2UoJywnKTtcbiAgICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICB9XG4gIGlmIChsYXN0V2FzQ29tbWEpIHtcbiAgICBhZGRBcmd1bWVudChudWxsLCB0cnVlKTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gIGlmIChib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICBoYWx0KCdVbmV4cGVjdGVkIGVuZCBvZiBhcmd1bWVudHMnKTtcbiAgfVxuICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHRoaXMudHlwZSA9IExFVDtcbiAgdGhpcy5kZWNsYXJhdGlvbnMgPSBbXTtcbiAgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgIGhhbHQoJ1VuZXhwZWN0ZWQgZW5kIG9mIGFyZ3VtZW50cycpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHMgPSB7XG4gICAgICB0eXBlOiBMRVRfREVDTCxcbiAgICAgIGlkOiBhcmdzW2ldLFxuICAgICAgaW5pdDogdmFsc1tpXSxcbiAgICAgIGxvYzogYXJnc1tpXS5sb2MgJiYgWyBhcmdzW2ldLmxvY1swXSwgdmFsc1tpXS5sb2NbMV0gXVxuICAgIH07XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMucHVzaChzKTtcbiAgfVxuICB0aGlzLmJvZHkgPSBib2R5O1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIGN1cnJlbnROb2RlLmxvY1sxXSBdO1xuICB9XG4gIGFkdmFuY2UoJyknLCB0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIGFycmF5IGxpdGVyYWxcbnN5bWJvbCgnfScpO1xuc3ltYm9sKCc7Jyk7XG5wcmVmaXgoJ3snLCBmdW5jdGlvbiAoKSB7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJ30nKSB7IC8vIGFycmF5cyBtdXN0IG5vdCBiZSBlbXB0eVxuICAgIGhhbHQoJ1VuZXhwZWN0ZWQgZW1wdHkgYXJyYXknKTtcbiAgfVxuICBsZXQgcm93ID0gW107XG4gIGxldCBkb25lID0gZmFsc2U7XG4gIGNvbnN0IHJvd3MgPSBbIHJvdyBdO1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnMoZmFsc2UpO1xuICB3aGlsZSAoIWRvbmUpIHtcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgYWR2YW5jZSgpO1xuICAgIH1cbiAgICAvLyBhcnJheXMgYWxsb3cgb25seSBsaXRlcmFscywgcmFuZ2VzIChpbiBHU2hlZXRzKSBhbmQgLDs6IG9wZXJhdG9ycy5cbiAgICAvLyBGSVhNRTogaWYgeyBuZWdhdGl2ZU51bWJlcnM6IGZhbHNlIH0gd2UgbXVzdCBjb25zdW1lIG1pbnVzZXMgYXMgd2VsbC5cbiAgICAvLyBFeGNlbCBhbGxvd3MgPXstMX0gYnV0IG5vdCA9eygtMSl9IGFuZCA9ezElfVxuICAgIGlmIChpc0xpdGVyYWwoY3VycmVudE5vZGUpKSB7XG4gICAgICByb3cucHVzaChzeW1ib2xUYWJsZVtMSVRFUkFMXS5udWQuY2FsbChjdXJyZW50Tm9kZSkpO1xuICAgICAgYWR2YW5jZSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChwZXJtaXRBcnJheVJhbmdlcyAmJiBpc1JlZmVyZW5jZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgICByb3cucHVzaChzeW1ib2xUYWJsZVtSRUZFUkVOQ0VdLm51ZC5jYWxsKGN1cnJlbnROb2RlKSk7XG4gICAgICBhZHZhbmNlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBlcm1pdEFycmF5Q2FsbHMgJiYgaXNGdW5jdGlvbihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICByb3cucHVzaChhcmcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGhhbHQoYFVuZXhwZWN0ZWQgJHtjdXJyZW50Tm9kZS50eXBlfSBpbiBhcnJheTogJHtjdXJyZW50Tm9kZS52YWx1ZX1gKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgIC8vIG5leHQgaXRlbVxuICAgICAgYWR2YW5jZSgnLCcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJzsnKSB7XG4gICAgICAvLyBuZXh0IHJvd1xuICAgICAgYWR2YW5jZSgnOycpO1xuICAgICAgcm93ID0gW107XG4gICAgICByb3dzLnB1c2gocm93KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2xvc2luZ0JyYWNlID0gY3VycmVudE5vZGU7XG4gIGFkdmFuY2UoJ30nKTtcbiAgdW5pb25SZWZzKHByZXZTdGF0ZSk7XG4gIHRoaXMudHlwZSA9IEFSUkFZO1xuICB0aGlzLmVsZW1lbnRzID0gcm93cztcbiAgaWYgKHRoaXMubG9jKSB7XG4gICAgdGhpcy5sb2NbMV0gPSBjbG9zaW5nQnJhY2UubG9jWzFdO1xuICB9XG4gIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICByZXR1cm4gdGhpcztcbn0pO1xuXG4vKipcbiAqIFBhcnNlcyBhIHN0cmluZyBmb3JtdWxhIG9yIGxpc3Qgb2YgdG9rZW5zIGludG8gYW4gQVNULlxuICpcbiAqIFRoZSBwYXJzZXIgcmVxdWlyZXMgYG1lcmdlUmVmc2AgdG8gaGF2ZSBiZWVuIGB0cnVlYCBpbiB0b2tlbmxpc3Qgb3B0aW9ucyxcbiAqIGJlY2F1c2UgaXQgZG9lcyBub3QgcmVjb2duaXplIHJlZmVyZW5jZSBjb250ZXh0IHRva2Vucy5cbiAqXG4gKiBUaGUgQVNUIEFic3RyYWN0IFN5bnRheCBUcmVlJ3MgZm9ybWF0IGlzIGRvY3VtZW50ZWQgaW5cbiAqIFtBU1RfZm9ybWF0Lm1kXSguL0FTVF9mb3JtYXQubWQpXG4gKlxuICogQHNlZSBub2RlVHlwZXNcbiAqIEBwYXJhbSB7KHN0cmluZyB8IFRva2VuW10pfSBmb3JtdWxhIEFuIEV4Y2VsIGZvcm11bGEgc3RyaW5nIChhbiBFeGNlbCBleHByZXNzaW9uKSBvciBhbiBhcnJheSBvZiB0b2tlbnMuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93TmFtZWQ9dHJ1ZV0gIEVuYWJsZSBwYXJzaW5nIG5hbWVzIGFzIHdlbGwgYXMgcmFuZ2VzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9ZmFsc2VdICBFbmFibGVzIHRoZSByZWNvZ25pdGlvbiBvZiB0ZXJuYXJ5IHJhbmdlcyBpbiB0aGUgc3R5bGUgb2YgYEExOkFgIG9yIGBBMToxYC4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieSBHb29nbGUgU2hlZXRzIGJ1dCBub3QgRXhjZWwuIFNlZTogUmVmZXJlbmNlcy5tZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubmVnYXRpdmVOdW1iZXJzPXRydWVdICBNZXJnZXMgdW5hcnkgbWludXNlcyB3aXRoIHRoZWlyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBudW1iZXIgdG9rZW5zIChgLWAsYDFgKSA9PiBgLTFgIChhbHRlcm5hdGl2ZWx5IHRoZXNlIHdpbGwgYmUgdW5hcnkgb3BlcmF0aW9ucyBpbiB0aGUgdHJlZSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnBlcm1pdEFycmF5UmFuZ2VzPWZhbHNlXSAgUmFuZ2VzIGFyZSBhbGxvd2VkIGFzIGVsZW1lbnRzIG9mIGFycmF5cy4gVGhpcyBpcyBhIGZlYXR1cmUgaW4gR29vZ2xlIFNoZWV0cyB3aGlsZSBFeGNlbCBkb2VzIG5vdCBhbGxvdyBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGVybWl0QXJyYXlDYWxscz1mYWxzZV0gIEZ1bmN0aW9uIGNhbGxzIGFyZSBhbGxvd2VkIGFzIGVsZW1lbnRzIG9mIGFycmF5cy4gVGhpcyBpcyBhIGZlYXR1cmUgaW4gR29vZ2xlIFNoZWV0cyB3aGlsZSBFeGNlbCBkb2VzIG5vdCBhbGxvdyBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubG9vc2VSZWZDYWxscz1mYWxzZV0gIFBlcm1pdHMgYW55IGZ1bmN0aW9uIGNhbGwgd2hlcmUgb3RoZXJ3aXNlIG9ubHkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJlZmVyZW5jZXMgd291bGQgYmUgcGVybWl0dGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yMWMxPWZhbHNlXSAgUmFuZ2VzIGFyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgUjFDMSBzdHlsZSBmb3JtYXQgcmF0aGVyIHRoYW4gdGhlIG1vcmUgcG9wdWxhciBBMSBzdHlsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMud2l0aExvY2F0aW9uPWZhbHNlXSAgTm9kZXMgd2lsbCBpbmNsdWRlIHNvdXJjZSBwb3NpdGlvbiBvZmZzZXRzIHRvIHRoZSB0b2tlbnM6IGB7IGxvYzogWyBzdGFydCwgZW5kIF0gfWBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtBc3RFeHByZXNzaW9ufSBBbiBBU1Qgb2Ygbm9kZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlIChmb3JtdWxhLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm9ybXVsYSA9PT0gJ3N0cmluZycpIHtcbiAgICB0b2tlbnMgPSB0b2tlbml6ZShmb3JtdWxhLCB7XG4gICAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1lcmdlUmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZm9ybXVsYSkpIHtcbiAgICB0b2tlbnMgPSBmb3JtdWxhO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyc2UgcmVxdWlyZXMgYSBzdHJpbmcgb3IgYXJyYXkgb2YgdG9rZW5zLicpO1xuICB9XG4gIC8vIGFsbG93IHJhbmdlcyBpbiBhcnJheSBcImxpdGVyYWxzXCI/XG4gIHBlcm1pdEFycmF5UmFuZ2VzID0gb3B0aW9ucz8ucGVybWl0QXJyYXlSYW5nZXM7XG4gIC8vIGFsbG93IGNhbGxzIGluIGFycmF5cyBcImxpdGVyYWxzXCI/XG4gIHBlcm1pdEFycmF5Q2FsbHMgPSBvcHRpb25zPy5wZXJtaXRBcnJheUNhbGxzO1xuICAvLyBhbGxvdyBhbnkgZnVuY3Rpb24gY2FsbCBpbiByYW5nZSBvcGVyYXRpb25zP1xuICBsb29zZVJlZkNhbGxzID0gb3B0aW9ucz8ubG9vc2VSZWZDYWxscztcbiAgLy8gc2V0IGluZGV4IHRvIHN0YXJ0XG4gIHRva2VuSW5kZXggPSAwO1xuICAvLyBkaXNjYXJkIHJlZHVuZGFudCB3aGl0ZXNwYWNlIGFuZCA9IHByZWZpeFxuICB3aGlsZSAoaXNXaGl0ZXNwYWNlKHRva2Vuc1t0b2tlbkluZGV4XSkgfHwgaXNGeFByZWZpeCh0b2tlbnNbdG9rZW5JbmRleF0pKSB7XG4gICAgdG9rZW5JbmRleCsrO1xuICB9XG4gIGFkdmFuY2UoKTtcbiAgdW5pb25SZWZzKHRydWUpO1xuICBjb25zdCByb290ID0gZXhwcmVzc2lvbigwKTtcbiAgYWR2YW5jZShFTkQpO1xuICByZXR1cm4gcm9vdDtcbn1cbiIsImltcG9ydCB7XG4gIEZYX1BSRUZJWCxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfVEVSTkFSWSxcbiAgUkVGX05BTUVELFxuICBSRUZfQkVBTSxcbiAgUkVGX1NUUlVDVCxcbiAgT1BFUkFUT1Jcbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgbGV4ZXJzUmVmcyB9IGZyb20gJy4vbGV4ZXJQYXJ0cy5qcyc7XG5pbXBvcnQgeyBnZXRUb2tlbnMgfSBmcm9tICcuL2xleGVyLmpzJztcblxuLy8gTGliZXJhbGx5IHNwbGl0IGEgY29udGV4dCBzdHJpbmcgdXAgaW50byBwYXJ0cy5cbi8vIFBlcm1pdHMgYW55IGNvbWJpbmF0aW9uIG9mIGJyYWNlZCBhbmQgdW5icmFjZWQgaXRlbXMuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQcmVmaXggKHN0ciwgc3RyaW5nc09ubHkgPSBmYWxzZSkge1xuICBsZXQgaW5CcmFjZSA9IGZhbHNlO1xuICBsZXQgY3VyclN0ciA9ICcnO1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoY3VyclN0cikge1xuICAgICAgcGFydHMucHVzaChcbiAgICAgICAgc3RyaW5nc09ubHlcbiAgICAgICAgICA/IGN1cnJTdHJcbiAgICAgICAgICA6IHsgdmFsdWU6IGN1cnJTdHIsIGJyYWNlZDogaW5CcmFjZSB9XG4gICAgICApO1xuICAgIH1cbiAgICBjdXJyU3RyID0gJyc7XG4gIH07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0cltpXTtcbiAgICBpZiAoY2hhciA9PT0gJ1snKSB7XG4gICAgICBmbHVzaCgpO1xuICAgICAgaW5CcmFjZSA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoYXIgPT09ICddJykge1xuICAgICAgZmx1c2goKTtcbiAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjdXJyU3RyICs9IGNoYXI7XG4gICAgfVxuICB9XG4gIGZsdXNoKCk7XG4gIHJldHVybiBwYXJ0cztcbn1cblxuZnVuY3Rpb24gc3BsaXRDb250ZXh0IChjb250ZXh0U3RyaW5nKSB7XG4gIHJldHVybiB7IGNvbnRleHQ6IHNwbGl0UHJlZml4KGNvbnRleHRTdHJpbmcsIHRydWUpIH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0Q29udGV4dFhsc3ggKGNvbnRleHRTdHJpbmcpIHtcbiAgY29uc3QgY29udGV4dCA9IHt9O1xuICBjb25zdCBjdHggPSBzcGxpdFByZWZpeChjb250ZXh0U3RyaW5nKTtcbiAgaWYgKGN0eC5sZW5ndGggPiAxKSB7XG4gICAgY29udGV4dC53b3JrYm9va05hbWUgPSBjdHhbY3R4Lmxlbmd0aCAtIDJdLnZhbHVlO1xuICAgIGNvbnRleHQuc2hlZXROYW1lID0gY3R4W2N0eC5sZW5ndGggLSAxXS52YWx1ZTtcbiAgfVxuICBlbHNlIGlmIChjdHgubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgaXRlbSA9IGN0eFswXTtcbiAgICBpZiAoaXRlbS5icmFjZWQpIHtcbiAgICAgIGNvbnRleHQud29ya2Jvb2tOYW1lID0gaXRlbS52YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250ZXh0LnNoZWV0TmFtZSA9IGl0ZW0udmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5jb25zdCB1bnF1b3RlID0gZCA9PiBkLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XG5cbmNvbnN0IHBSYW5nZU9wID0gdCA9PiB0ICYmICh0LnZhbHVlID09PSAnOicgfHwgdC52YWx1ZSA9PT0gJy46JyB8fCB0LnZhbHVlID09PSAnOi4nIHx8IHQudmFsdWUgPT09ICcuOi4nKSAmJiB7IG9wZXJhdG9yOiB0LnZhbHVlIH07XG5jb25zdCBwUmFuZ2UgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfUkFOR0UgJiYgeyByMDogdC52YWx1ZSB9O1xuY29uc3QgcFBhcnRpYWwgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfVEVSTkFSWSAmJiB7IHIwOiB0LnZhbHVlIH07XG5jb25zdCBwUmFuZ2UyID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gUkVGX1JBTkdFICYmIHsgcjE6IHQudmFsdWUgfTtcbmNvbnN0IHBCYW5nID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gT1BFUkFUT1IgJiYgdC52YWx1ZSA9PT0gJyEnICYmIHt9O1xuY29uc3QgcEJlYW0gPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfQkVBTSAmJiB7IHIwOiB0LnZhbHVlIH07XG5jb25zdCBwU3RydWN1cmVkID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gUkVGX1NUUlVDVCAmJiB7IHN0cnVjdDogdC52YWx1ZSB9O1xuY29uc3QgcENvbnRleHQgPSAodCwgb3B0cykgPT4ge1xuICBjb25zdCBzcGxpdHRlciA9IG9wdHMueGxzeCA/IHNwbGl0Q29udGV4dFhsc3ggOiBzcGxpdENvbnRleHQ7XG4gIGlmICh0ICYmIHQudHlwZSA9PT0gQ09OVEVYVCkge1xuICAgIHJldHVybiBzcGxpdHRlcih0LnZhbHVlKTtcbiAgfVxuICBpZiAodCAmJiB0LnR5cGUgPT09IENPTlRFWFRfUVVPVEUpIHtcbiAgICByZXR1cm4gc3BsaXR0ZXIodW5xdW90ZSh0LnZhbHVlKSk7XG4gIH1cbn07XG5jb25zdCBwTmFtZWQgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfTkFNRUQgJiYgeyBuYW1lOiB0LnZhbHVlIH07XG5cbmNvbnN0IHZhbGlkUnVucyA9IFtcbiAgWyBwUGFydGlhbCBdLFxuICBbIHBSYW5nZSwgcFJhbmdlT3AsIHBSYW5nZTIgXSxcbiAgWyBwUmFuZ2UgXSxcbiAgWyBwQmVhbSBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcFBhcnRpYWwgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBSYW5nZSwgcFJhbmdlT3AsIHBSYW5nZTIgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBSYW5nZSBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcEJlYW0gXVxuXTtcblxuY29uc3QgdmFsaWRSdW5zTmFtZWQgPSB2YWxpZFJ1bnMuY29uY2F0KFtcbiAgWyBwTmFtZWQgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBOYW1lZCBdLFxuICBbIHBTdHJ1Y3VyZWQgXSxcbiAgWyBwTmFtZWQsIHBTdHJ1Y3VyZWQgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBOYW1lZCwgcFN0cnVjdXJlZCBdXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVmIChyZWYsIG9wdHMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgIG1lcmdlUmVmczogZmFsc2UsXG4gICAgYWxsb3dUZXJuYXJ5OiBmYWxzZSxcbiAgICBhbGxvd05hbWVkOiB0cnVlLFxuICAgIHIxYzE6IGZhbHNlLFxuICAgIHhsc3g6IGZhbHNlLFxuICAgIC4uLm9wdHNcbiAgfTtcbiAgY29uc3QgdG9rZW5zID0gZ2V0VG9rZW5zKHJlZiwgbGV4ZXJzUmVmcywgb3B0aW9ucyk7XG4gIGNvbnN0IHJlZkRhdGEgPSBvcHRpb25zLnhsc3hcbiAgICA/IHtcbiAgICAgIHdvcmtib29rTmFtZTogJycsXG4gICAgICBzaGVldE5hbWU6ICcnLFxuICAgICAgcjA6ICcnLFxuICAgICAgcjE6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBvcGVyYXRvcjogJydcbiAgICB9XG4gICAgOiB7XG4gICAgICBjb250ZXh0OiBbXSxcbiAgICAgIHIwOiAnJyxcbiAgICAgIHIxOiAnJyxcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgb3BlcmF0b3I6ICcnXG4gICAgfTtcbiAgLy8gZGlzY2FyZCB0aGUgXCI9XCItcHJlZml4IGlmIGl0IGlzIHRoZXJlXG4gIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1swXS50eXBlID09PSBGWF9QUkVGSVgpIHtcbiAgICB0b2tlbnMuc2hpZnQoKTtcbiAgfVxuICBjb25zdCBydW5zID0gb3B0aW9ucy5hbGxvd05hbWVkID8gdmFsaWRSdW5zTmFtZWQgOiB2YWxpZFJ1bnM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcnVucy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRhdGEgPSB7IC4uLnJlZkRhdGEgfTtcbiAgICBpZiAocnVuc1tpXS5sZW5ndGggPT09IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHZhbGlkID0gcnVuc1tpXS5ldmVyeSgocGFyc2UsIGopID0+IHtcbiAgICAgICAgY29uc3QgZCA9IHBhcnNlKHRva2Vuc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgZCk7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSk7XG4gICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIiwiY29uc3QgY2hhckZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4vKipcbiAqIENvbnZlcnQgYSAwIGJhc2VkIG9mZnNldCBudW1iZXIgdG8gYSBjb2x1bW4gc3RyaW5nXG4gKiByZXByZXNlbnRhdGlvbiAoYDJgID0gYFwiQ1wiYCkuXG4gKlxuICogVGhlIG1ldGhvZCBleHBlY3RzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTYzODMuIE90aGVyIGlucHV0IHdpbGxcbiAqIHJldHVybiBnYXJiYWdlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBaZXJvIGJhc2VkIGNvbHVtbiBpbmRleCBudW1iZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb2x1bW4gc3RyaW5nIGlkZW50aWZpZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29sIChjb2x1bW5JbmRleCkge1xuICByZXR1cm4gKFxuICAgIChjb2x1bW5JbmRleCA+PSA3MDJcbiAgICAgID8gY2hhckZyb20oKCgoKGNvbHVtbkluZGV4IC0gNzAyKSAvIDY3NikgLSAwKSAlIDI2KSArIDY1KVxuICAgICAgOiAnJykgK1xuICAgIChjb2x1bW5JbmRleCA+PSAyNlxuICAgICAgPyBjaGFyRnJvbSgoKCgoY29sdW1uSW5kZXggLyAyNikgLSAxKSAlIDI2KSArIDY1KSlcbiAgICAgIDogJycpICtcbiAgICBjaGFyRnJvbSgoY29sdW1uSW5kZXggJSAyNikgKyA2NSlcbiAgKTtcbn1cbiIsImNvbnN0IHJlQmFubmVkQ2hhcnMgPSAvW14wLTlBLVphLXouX8KhwqTCp8KowqpcXHUwMGFkwq8tXFx1ZmZmZl0vO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UHJlZml4IChyZWYpIHtcbiAgbGV0IHByZSA9ICcnO1xuICBsZXQgcXVvdGUgPSAwO1xuICBsZXQgbnRoID0gMDtcbiAgY29uc3QgY29udGV4dCA9IHJlZi5jb250ZXh0IHx8IFtdO1xuICBmb3IgKGxldCBpID0gY29udGV4dC5sZW5ndGg7IGkgPiAtMTsgaS0tKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBjb250ZXh0W2ldO1xuICAgIGlmIChzY29wZSkge1xuICAgICAgY29uc3QgcGFydCA9IChudGggJSAyKSA/ICdbJyArIHNjb3BlICsgJ10nIDogc2NvcGU7XG4gICAgICBwcmUgPSBwYXJ0ICsgcHJlO1xuICAgICAgcXVvdGUgKz0gK3JlQmFubmVkQ2hhcnMudGVzdChzY29wZSk7XG4gICAgICBudGgrKztcbiAgICB9XG4gIH1cbiAgaWYgKHF1b3RlKSB7XG4gICAgcHJlID0gXCInXCIgKyBwcmUucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gIH1cbiAgcmV0dXJuIHByZSA/IHByZSArICchJyA6IHByZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVByZWZpeEFsdCAocmVmKSB7XG4gIGxldCBwcmUgPSAnJztcbiAgbGV0IHF1b3RlID0gMDtcbiAgY29uc3QgeyB3b3JrYm9va05hbWUsIHNoZWV0TmFtZSB9ID0gcmVmO1xuICBpZiAod29ya2Jvb2tOYW1lKSB7XG4gICAgcHJlICs9ICdbJyArIHdvcmtib29rTmFtZSArICddJztcbiAgICBxdW90ZSArPSArcmVCYW5uZWRDaGFycy50ZXN0KHdvcmtib29rTmFtZSk7XG4gIH1cbiAgaWYgKHNoZWV0TmFtZSkge1xuICAgIHByZSArPSBzaGVldE5hbWU7XG4gICAgcXVvdGUgKz0gK3JlQmFubmVkQ2hhcnMudGVzdChzaGVldE5hbWUpO1xuICB9XG4gIGlmIChxdW90ZSkge1xuICAgIHByZSA9IFwiJ1wiICsgcHJlLnJlcGxhY2UoLycvZywgXCInJ1wiKSArIFwiJ1wiO1xuICB9XG4gIHJldHVybiBwcmUgPyBwcmUgKyAnIScgOiBwcmU7XG59XG4iLCJpbXBvcnQgeyBNQVhfUk9XUywgTUFYX0NPTFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlZiB9IGZyb20gJy4vcGFyc2VSZWYuanMnO1xuaW1wb3J0IHsgdG9Db2wgfSBmcm9tICcuL3RvQ29sLmpzJztcbmltcG9ydCB7IGZyb21Db2wgfSBmcm9tICcuL2Zyb21Db2wuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5UHJlZml4LCBzdHJpbmdpZnlQcmVmaXhBbHQgfSBmcm9tICcuL3N0cmluZ2lmeVByZWZpeC5qcyc7XG5cbmNvbnN0IGNsYW1wID0gKG1pbiwgdmFsLCBtYXgpID0+IE1hdGgubWluKE1hdGgubWF4KHZhbCwgbWluKSwgbWF4KTtcbmNvbnN0IHRvQ29sU3RyID0gKGMsIGEpID0+IChhID8gJyQnIDogJycpICsgdG9Db2woYyk7XG5jb25zdCB0b1Jvd1N0ciA9IChyLCBhKSA9PiAoYSA/ICckJyA6ICcnKSArIHRvUm93KHIpO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdyAocm93U3RyKSB7XG4gIHJldHVybiArcm93U3RyIC0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUm93ICh0b3ApIHtcbiAgcmV0dXJuIFN0cmluZyh0b3AgKyAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUmVsYXRpdmUgKHJhbmdlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByYW5nZSwgeyAkbGVmdDogZmFsc2UsICRyaWdodDogZmFsc2UsICR0b3A6IGZhbHNlLCAkYm90dG9tOiBmYWxzZSB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQWJzb2x1dGUgKHJhbmdlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByYW5nZSwgeyAkbGVmdDogdHJ1ZSwgJHJpZ2h0OiB0cnVlLCAkdG9wOiB0cnVlLCAkYm90dG9tOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7J2hlYWQnIHwgJ3RhaWwnIHwgJ2JvdGgnIHwgbnVsbCB8IHVuZGVmaW5lZH0gdHJpbSBEb2VzIHRoZSByYW5nZSBoYXZlIHRyaW1taW5nP1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFwcHJvcHJpYXRlIHJhbmdlIGpvaW4gb3BlcmF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlT3BlcmF0b3IgKHRyaW0pIHtcbiAgaWYgKHRyaW0gPT09ICdib3RoJykge1xuICAgIHJldHVybiAnLjouJztcbiAgfVxuICBlbHNlIGlmICh0cmltID09PSAnaGVhZCcpIHtcbiAgICByZXR1cm4gJy46JztcbiAgfVxuICBlbHNlIGlmICh0cmltID09PSAndGFpbCcpIHtcbiAgICByZXR1cm4gJzouJztcbiAgfVxuICByZXR1cm4gJzonO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbURpcmVjdGlvbiAoaGVhZCwgdGFpbCkge1xuICBpZiAoaGVhZCAmJiB0YWlsKSB7XG4gICAgcmV0dXJuICdib3RoJztcbiAgfVxuICBpZiAoaGVhZCkge1xuICAgIHJldHVybiAnaGVhZCc7XG4gIH1cbiAgaWYgKHRhaWwpIHtcbiAgICByZXR1cm4gJ3RhaWwnO1xuICB9XG59XG5cbi8qKlxuICogU3RyaW5naWZ5IGEgcmFuZ2Ugb2JqZWN0IGludG8gQTEgc3ludGF4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAaWdub3JlXG4gKiBAc2VlIHBhcnNlQTFSZWZcbiAqIEBwYXJhbSB7UmFuZ2VBMX0gcmFuZ2UgIEEgcmFuZ2Ugb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgQW4gQTEtc3R5bGUgc3RyaW5nIHJlcHJlc2VuYXRpb24gb2YgYSByYW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9BMSAocmFuZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQgeyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQsIHRyaW0gfSA9IHJhbmdlO1xuICBjb25zdCB7ICRsZWZ0LCAkcmlnaHQsICR0b3AsICRib3R0b20gfSA9IHJhbmdlO1xuICBjb25zdCBub0xlZnQgPSBsZWZ0ID09IG51bGw7XG4gIGNvbnN0IG5vUmlnaHQgPSByaWdodCA9PSBudWxsO1xuICBjb25zdCBub1RvcCA9IHRvcCA9PSBudWxsO1xuICBjb25zdCBub0JvdHRvbSA9IGJvdHRvbSA9PSBudWxsO1xuICAvLyBhbGxvdyBza2lwcGluZyByaWdodCBhbmQgYm90dG9tIHRvIGRlZmluZSBhIGNlbGxcbiAgdG9wID0gY2xhbXAoMCwgdG9wIHwgMCwgTUFYX1JPV1MpO1xuICBsZWZ0ID0gY2xhbXAoMCwgbGVmdCB8IDAsIE1BWF9DT0xTKTtcbiAgaWYgKCFub0xlZnQgJiYgIW5vVG9wICYmIG5vUmlnaHQgJiYgbm9Cb3R0b20pIHtcbiAgICBib3R0b20gPSB0b3A7XG4gICAgcmlnaHQgPSBsZWZ0O1xuICB9XG4gIGVsc2Uge1xuICAgIGJvdHRvbSA9IGNsYW1wKDAsIGJvdHRvbSB8IDAsIE1BWF9ST1dTKTtcbiAgICByaWdodCA9IGNsYW1wKDAsIHJpZ2h0IHwgMCwgTUFYX0NPTFMpO1xuICB9XG4gIGNvbnN0IG9wID0gcmFuZ2VPcGVyYXRvcih0cmltKTtcbiAgLy8gQTpBXG4gIGNvbnN0IGFsbFJvd3MgPSB0b3AgPT09IDAgJiYgYm90dG9tID49IE1BWF9ST1dTO1xuICBjb25zdCBoYXZlQWJzQ29sID0gKCRsZWZ0ICYmICFub0xlZnQpIHx8ICgkcmlnaHQgJiYgIW5vUmlnaHQpO1xuICBpZiAoKGFsbFJvd3MgJiYgIW5vTGVmdCAmJiAhbm9SaWdodCAmJiAoIWhhdmVBYnNDb2wgfHwgbGVmdCA9PT0gcmlnaHQpKSB8fCAobm9Ub3AgJiYgbm9Cb3R0b20pKSB7XG4gICAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIG9wICsgdG9Db2xTdHIocmlnaHQsICRyaWdodCk7XG4gIH1cbiAgLy8gMToxXG4gIGNvbnN0IGFsbENvbHMgPSBsZWZ0ID09PSAwICYmIHJpZ2h0ID49IE1BWF9DT0xTO1xuICBjb25zdCBoYXZlQWJzUm93ID0gKCR0b3AgJiYgIW5vVG9wKSB8fCAoJGJvdHRvbSAmJiAhbm9Cb3R0b20pO1xuICBpZiAoKGFsbENvbHMgJiYgIW5vVG9wICYmICFub0JvdHRvbSAmJiAoIWhhdmVBYnNSb3cgfHwgdG9wID09PSBib3R0b20pKSB8fCAobm9MZWZ0ICYmIG5vUmlnaHQpKSB7XG4gICAgcmV0dXJuIHRvUm93U3RyKHRvcCwgJHRvcCkgKyBvcCArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTE6MVxuICBpZiAoIW5vTGVmdCAmJiAhbm9Ub3AgJiYgIW5vUmlnaHQgJiYgbm9Cb3R0b20pIHtcbiAgICByZXR1cm4gdG9Db2xTdHIobGVmdCwgJGxlZnQpICsgdG9Sb3dTdHIodG9wLCAkdG9wKSArIG9wICsgdG9Db2xTdHIocmlnaHQsICRyaWdodCk7XG4gIH1cbiAgLy8gQTpBMSA9PiBBMToxXG4gIGlmICghbm9MZWZ0ICYmIG5vVG9wICYmICFub1JpZ2h0ICYmICFub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cihib3R0b20sICRib3R0b20pICsgb3AgKyB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KTtcbiAgfVxuICAvLyBBMTpBXG4gIGlmICghbm9MZWZ0ICYmICFub1RvcCAmJiBub1JpZ2h0ICYmICFub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgKyB0b1Jvd1N0cihib3R0b20sICRib3R0b20pO1xuICB9XG4gIC8vIEE6QTEgPT4gQTE6QVxuICBpZiAobm9MZWZ0ICYmICFub1RvcCAmJiAhbm9SaWdodCAmJiAhbm9Cb3R0b20pIHtcbiAgICByZXR1cm4gdG9Db2xTdHIocmlnaHQsICRyaWdodCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgKyB0b1Jvd1N0cihib3R0b20sICRib3R0b20pO1xuICB9XG4gIC8vIEExOkExXG4gIGlmIChyaWdodCAhPT0gbGVmdCB8fCBib3R0b20gIT09IHRvcCB8fCAkcmlnaHQgIT09ICRsZWZ0IHx8ICRib3R0b20gIT09ICR0b3ApIHtcbiAgICByZXR1cm4gdG9Db2xTdHIobGVmdCwgJGxlZnQpICsgdG9Sb3dTdHIodG9wLCAkdG9wKSArIG9wICtcbiAgICAgICAgICAgdG9Db2xTdHIocmlnaHQsICRyaWdodCkgKyB0b1Jvd1N0cihib3R0b20sICRib3R0b20pO1xuICB9XG4gIC8vIEExXG4gIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApO1xufVxuXG5mdW5jdGlvbiBzcGxpdEExIChzdHIpIHtcbiAgY29uc3QgbSA9IC9eKD89LikoXFwkKD89XFxEKSk/KFtBLVphLXpdezAsM30pPyhcXCQpPyhbMS05XVswLTldezAsNn0pPyQvLmV4ZWMoc3RyKTtcbiAgaWYgKCFtIHx8ICghbVsyXSAmJiAhbVs0XSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gW1xuICAgIG1bNF0gPyBmcm9tUm93KG1bNF0pIDogbnVsbCwgLy8gcm93IGluZGV4IG9yIG51bGxcbiAgICBtWzJdID8gZnJvbUNvbChtWzJdKSA6IG51bGwsIC8vIGNvbCBpbmRleCBvciBudWxsXG4gICAgISFtWzNdLCAvLyBpcyByb3cgYWJzb2x1dGU/XG4gICAgISFtWzFdICAvLyBpcyBjb2wgYWJzb2x1dGU/XG4gIF07XG59XG5cbi8qKlxuICogUGFyc2UgYSBzaW1wbGUgc3RyaW5nIHJlZmVyZW5jZSB0byBhbiBBMSByYW5nZSBpbnRvIGEgcmFuZ2Ugb2JqZWN0LlxuICogV2lsbCBhY2NlcHQgYEExYCwgYEEyYCwgYEE6QWAsIG9yIGAxOjFgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAaWdub3JlXG4gKiBAc2VlIHBhcnNlQTFSZWZcbiAqIEBwYXJhbSB7c3RyaW5nfSByYW5nZVN0cmluZyAgQSByYW5nZSBzdHJpbmdcbiAqIEByZXR1cm5zIHsoUmFuZ2VBMXxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJhbmdlIG9yIG51bGwgaWYgaXQgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21BMSAocmFuZ2VTdHJpbmcpIHtcbiAgbGV0IHRvcCA9IG51bGw7XG4gIGxldCBsZWZ0ID0gbnVsbDtcbiAgbGV0IGJvdHRvbSA9IG51bGw7XG4gIGxldCByaWdodCA9IG51bGw7XG4gIGxldCAkdG9wID0gZmFsc2U7XG4gIGxldCAkbGVmdCA9IGZhbHNlO1xuICBsZXQgJGJvdHRvbSA9IGZhbHNlO1xuICBsZXQgJHJpZ2h0ID0gZmFsc2U7XG4gIGNvbnN0IFsgcGFydDEsIG9wMSwgcGFydDIsIG9wMiwgcGFydDMgXSA9IHJhbmdlU3RyaW5nLnNwbGl0KC8oXFwuPzpcXC4/KS8pO1xuICBpZiAob3AyIHx8IHBhcnQzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdHJpbSA9IHRyaW1EaXJlY3Rpb24oISFvcDEgJiYgb3AxWzBdID09PSAnLicsICEhb3AxICYmIG9wMVtvcDEubGVuZ3RoIC0gMV0gPT09ICcuJyk7XG4gIGNvbnN0IHAxID0gc3BsaXRBMShwYXJ0MSk7XG4gIGNvbnN0IHAyID0gcGFydDIgPyBzcGxpdEExKHBhcnQyKSA6IG51bGw7XG4gIGlmICghcDEgfHwgKHBhcnQyICYmICFwMikpIHtcbiAgICAvLyBpbnZhbGlkIHNlY3Rpb25cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBwYXJ0IDEgYml0c1xuICBpZiAocDFbMF0gIT0gbnVsbCAmJiBwMVsxXSAhPSBudWxsKSB7XG4gICAgWyB0b3AsIGxlZnQsICR0b3AsICRsZWZ0IF0gPSBwMTtcbiAgfVxuICBlbHNlIGlmIChwMVswXSA9PSBudWxsICYmIHAxWzFdICE9IG51bGwpIHtcbiAgICBbICwgbGVmdCwgLCAkbGVmdCBdID0gcDE7XG4gIH1cbiAgZWxzZSBpZiAocDFbMF0gIT0gbnVsbCAmJiBwMVsxXSA9PSBudWxsKSB7XG4gICAgWyB0b3AsICwgJHRvcCBdID0gcDE7XG4gIH1cbiAgLy8gcGFydCAyIGJpdHNcbiAgaWYgKCFwYXJ0Mikge1xuICAgIC8vIHBhcnQgMiBtdXN0IGV4aXN0IGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBudWxsOlxuICAgIC8vIHRoaXMgZGlzYWxsb3dzIGEgc2luZ2xlIG51bSBvciBjb2wgcGF0dGVybnNcbiAgICBpZiAodG9wID09IG51bGwgfHwgbGVmdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgYm90dG9tID0gdG9wO1xuICAgIHJpZ2h0ID0gbGVmdDtcbiAgICAkYm90dG9tID0gJHRvcDtcbiAgICAkcmlnaHQgPSAkbGVmdDtcbiAgfVxuICBlbHNlIGlmIChwMlswXSAhPSBudWxsICYmIHAyWzFdICE9IG51bGwpIHtcbiAgICBbIGJvdHRvbSwgcmlnaHQsICRib3R0b20sICRyaWdodCBdID0gcDI7XG4gIH1cbiAgZWxzZSBpZiAocDJbMF0gPT0gbnVsbCAmJiBwMlsxXSAhPSBudWxsKSB7XG4gICAgWyAsIHJpZ2h0LCAsICRyaWdodCBdID0gcDI7XG4gIH1cbiAgZWxzZSBpZiAocDJbMF0gIT0gbnVsbCAmJiBwMlsxXSA9PSBudWxsKSB7XG4gICAgWyBib3R0b20sICwgJGJvdHRvbSBdID0gcDI7XG4gIH1cbiAgLy8gZmxpcCBsZWZ0L3JpZ2h0IGFuZCB0b3AvYm90dG9tIGFzIG5lZWRlZFxuICAvLyBmb3IgcGFydGlhbCByYW5nZXMgd2UgcGVyZmVyIHRoZSBjb29yZCBvbiB0aGUgbGVmdC1zaWRlIG9mIHRoZSA6XG4gIGlmIChyaWdodCAhPSBudWxsICYmIChsZWZ0ID09IG51bGwgfHwgKGxlZnQgIT0gbnVsbCAmJiByaWdodCA8IGxlZnQpKSkge1xuICAgIFsgbGVmdCwgcmlnaHQsICRsZWZ0LCAkcmlnaHQgXSA9IFsgcmlnaHQsIGxlZnQsICRyaWdodCwgJGxlZnQgXTtcbiAgfVxuICBpZiAoYm90dG9tICE9IG51bGwgJiYgKHRvcCA9PSBudWxsIHx8ICh0b3AgIT0gbnVsbCAmJiBib3R0b20gPCB0b3ApKSkge1xuICAgIFsgdG9wLCBib3R0b20sICR0b3AsICRib3R0b20gXSA9IFsgYm90dG9tLCB0b3AsICRib3R0b20sICR0b3AgXTtcbiAgfVxuICBjb25zdCByID0geyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQsICR0b3AsICRsZWZ0LCAkYm90dG9tLCAkcmlnaHQgfTtcbiAgaWYgKHRyaW0pIHsgci50cmltID0gdHJpbTsgfVxuICByZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyByZWZlcmVuY2UgaW50byBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGl0LlxuICpcbiAqIGBgYGpzXG4gKiBwYXJzZUExUmVmKCdTaGVldDEhQSQxOiRCMicpO1xuICogLy8gPT4ge1xuICogLy8gICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAvLyAgIHJhbmdlOiB7XG4gKiAvLyAgICAgdG9wOiAwLFxuICogLy8gICAgIGxlZnQ6IDAsXG4gKiAvLyAgICAgYm90dG9tOiAxLFxuICogLy8gICAgIHJpZ2h0OiAxXG4gKiAvLyAgICAgJHRvcDogdHJ1ZSxcbiAqIC8vICAgICAkbGVmdDogZmFsc2UsXG4gKiAvLyAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAvLyAgICAgJHJpZ2h0OiB0cnVlXG4gKiAvLyAgIH1cbiAqIC8vIH1cbiAqIGBgYFxuICpcbiAqIEZvciBBOkEgb3IgQTE6QSBzdHlsZSByYW5nZXMsIGBudWxsYCB3aWxsIGJlIHVzZWQgZm9yIGFueSBkaW1lbnNpb25zIHRoYXQgdGhlXG4gKiBzeW50YXggZG9lcyBub3Qgc3BlY2lmeTpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmU3RyaW5nICBBbiBBMS1zdHlsZSByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93TmFtZWQ9dHJ1ZV0gIEVuYWJsZSBwYXJzaW5nIG5hbWVzIGFzIHdlbGwgYXMgcmFuZ2VzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9ZmFsc2VdICBFbmFibGVzIHRoZSByZWNvZ25pdGlvbiBvZiB0ZXJuYXJ5IHJhbmdlcyBpbiB0aGUgc3R5bGUgb2YgYEExOkFgIG9yIGBBMToxYC4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieSBHb29nbGUgU2hlZXRzIGJ1dCBub3QgRXhjZWwuIFNlZTogUmVmZXJlbmNlcy5tZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHsoUmVmZXJlbmNlQTF8bnVsbCl9IEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSB2YWxpZCByZWZlcmVuY2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBMVJlZiAocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQgPSB0cnVlLCBhbGxvd1Rlcm5hcnkgPSBmYWxzZSwgeGxzeCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBkID0gcGFyc2VSZWYocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQsIGFsbG93VGVybmFyeSwgeGxzeCwgcjFjMTogZmFsc2UgfSk7XG4gIGlmIChkICYmIChkLnIwIHx8IGQubmFtZSkpIHtcbiAgICBsZXQgcmFuZ2UgPSBudWxsO1xuICAgIGlmIChkLnIwKSB7XG4gICAgICByYW5nZSA9IGZyb21BMShkLnIxID8gZC5yMCArIGQub3BlcmF0b3IgKyBkLnIxIDogZC5yMCk7XG4gICAgfVxuICAgIGlmIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIHJhbmdlIH1cbiAgICAgICAgOiB7IGNvbnRleHQ6IGQuY29udGV4dCwgcmFuZ2UgfTtcbiAgICB9XG4gICAgaWYgKGQubmFtZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIG5hbWU6IGQubmFtZSB9XG4gICAgICAgIDogeyBjb250ZXh0OiBkLmNvbnRleHQsIG5hbWU6IGQubmFtZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBHZXQgYW4gQTEtc3R5bGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVmZXJlbmNlIG9iamVjdC5cbiAqXG4gKiBgYGBqc1xuICogc3RyaW5naWZ5QTFSZWYoe1xuICogICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAgIHJhbmdlOiB7XG4gKiAgICAgdG9wOiAwLFxuICogICAgIGxlZnQ6IDAsXG4gKiAgICAgYm90dG9tOiAxLFxuICogICAgIHJpZ2h0OiAxLFxuICogICAgICR0b3A6IHRydWUsXG4gKiAgICAgJGxlZnQ6IGZhbHNlLFxuICogICAgICRib3R0b206IGZhbHNlLFxuICogICAgICRyaWdodDogdHJ1ZVxuICogICB9XG4gKiB9KTtcbiAqIC8vID0+ICdTaGVldDEhQSQxOiRCMidcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7UmVmZXJlbmNlQTF9IHJlZk9iamVjdCBBIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZWZlcmVuY2UgaW4gQTEtc3R5bGUgc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5QTFSZWYgKHJlZk9iamVjdCwgeyB4bHN4ID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHByZWZpeCA9IHhsc3hcbiAgICA/IHN0cmluZ2lmeVByZWZpeEFsdChyZWZPYmplY3QpXG4gICAgOiBzdHJpbmdpZnlQcmVmaXgocmVmT2JqZWN0KTtcbiAgcmV0dXJuIHByZWZpeCArIChcbiAgICByZWZPYmplY3QubmFtZSA/IHJlZk9iamVjdC5uYW1lIDogdG9BMShyZWZPYmplY3QucmFuZ2UpXG4gICk7XG59XG5cbi8qKlxuICogRmlsbCB0aGUgYW55IG1pc3NpbmcgYm91bmRzIGluIHJhbmdlIG9iamVjdHMuIFRvcCB3aWxsIGJlIHNldCB0byAwLCBib3R0b20gdG9cbiAqIDEwNDg1NzUsIGxlZnQgdG8gMCwgYW5kIHJpZ2h0IHRvIDE2MzgzLCBpZiB0aGV5IGFyZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogYGBganNcbiAqIGFkZEExUmFuZ2VCb3VuZHMoe1xuICogICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAgIHJhbmdlOiB7XG4gKiAgICAgdG9wOiAwLFxuICogICAgIGxlZnQ6IDAsXG4gKiAgICAgYm90dG9tOiAxLFxuICogICAgICR0b3A6IHRydWUsXG4gKiAgICAgJGxlZnQ6IGZhbHNlLFxuICogICAgICRib3R0b206IGZhbHNlLFxuICogICB9XG4gKiB9KTtcbiAqIC8vID0+IHtcbiAqIC8vICAgY29udGV4dDogWyAnU2hlZXQxJyBdLFxuICogLy8gICByYW5nZToge1xuICogLy8gICAgIHRvcDogMCxcbiAqIC8vICAgICBsZWZ0OiAwLFxuICogLy8gICAgIGJvdHRvbTogMSxcbiAqIC8vICAgICByaWdodDogMTYzODMsXG4gKiAvLyAgICAgJHRvcDogdHJ1ZSxcbiAqIC8vICAgICAkbGVmdDogZmFsc2UsXG4gKiAvLyAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAvLyAgICAgJHJpZ2h0OiBmYWxzZVxuICogLy8gICB9XG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1JhbmdlQTF9IHJhbmdlIFRoZSByYW5nZSBwYXJ0IG9mIGEgcmVmZXJlbmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtSYW5nZUExfSBzYW1lIHJhbmdlIHdpdGggbWlzc2luZyBib3VuZHMgZmlsbGVkIGluLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQTFSYW5nZUJvdW5kcyAocmFuZ2UpIHtcbiAgaWYgKHJhbmdlLnRvcCA9PSBudWxsKSB7XG4gICAgcmFuZ2UudG9wID0gMDtcbiAgICByYW5nZS4kdG9wID0gZmFsc2U7XG4gIH1cbiAgaWYgKHJhbmdlLmJvdHRvbSA9PSBudWxsKSB7XG4gICAgcmFuZ2UuYm90dG9tID0gTUFYX1JPV1M7XG4gICAgcmFuZ2UuJGJvdHRvbSA9IGZhbHNlO1xuICB9XG4gIGlmIChyYW5nZS5sZWZ0ID09IG51bGwpIHtcbiAgICByYW5nZS5sZWZ0ID0gMDtcbiAgICByYW5nZS4kbGVmdCA9IGZhbHNlO1xuICB9XG4gIGlmIChyYW5nZS5yaWdodCA9PSBudWxsKSB7XG4gICAgcmFuZ2UucmlnaHQgPSBNQVhfQ09MUztcbiAgICByYW5nZS4kcmlnaHQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gcmFuZ2U7XG59XG4iLCJpbXBvcnQgeyBwYXJzZVJlZiB9IGZyb20gJy4vcGFyc2VSZWYuanMnO1xuaW1wb3J0IHsgcGFyc2VTUmFuZ2UgfSBmcm9tICcuL3BhcnNlU1JhbmdlLmpzJztcblxuLyoqXG4gKiBQYXJzZSBhIHN0cnVjdHVyZWQgcmVmZXJlbmNlIHN0cmluZyBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgaXQuXG4gKlxuICogYGBganNcbiAqIHBhcnNlU3RydWN0UmVmKCd3b3JrYm9vay54bHN4IXRhYmxlTmFtZVtbI0RhdGFdLFtDb2x1bW4xXTpbQ29sdW1uMl1dJyk7XG4gKiAvLyA9PiB7XG4gKiAvLyAgIGNvbnRleHQ6IFsgJ3dvcmtib29rLnhsc3gnIF0sXG4gKiAvLyAgIHNlY3Rpb25zOiBbICdkYXRhJyBdLFxuICogLy8gICBjb2x1bW5zOiBbICdteSBjb2x1bW4nLCAnQGZvbycgXSxcbiAqIC8vICAgdGFibGU6ICd0YWJsZU5hbWUnLFxuICogLy8gfVxuICogYGBgXG4gKlxuICogRm9yIEE6QSBvciBBMTpBIHN0eWxlIHJhbmdlcywgYG51bGxgIHdpbGwgYmUgdXNlZCBmb3IgYW55IGRpbWVuc2lvbnMgdGhhdCB0aGVcbiAqIHN5bnRheCBkb2VzIG5vdCBzcGVjaWZ5OlxuICpcbiAqIEB0dXRvcmlhbCBSZWZlcmVuY2VzLm1kXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmICBBIHN0cnVjdHVyZWQgcmVmZXJlbmNlIHN0cmluZ1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMgeyhSZWZlcmVuY2VTdHJ1Y3R8bnVsbCl9IEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSB2YWxpZCByZWZlcmVuY2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJ1Y3RSZWYgKHJlZiwgb3B0aW9ucyA9IHsgeGxzeDogZmFsc2UgfSkge1xuICBjb25zdCByID0gcGFyc2VSZWYocmVmLCBvcHRpb25zKTtcbiAgaWYgKHIgJiYgci5zdHJ1Y3QpIHtcbiAgICBjb25zdCBzdHJ1Y3REYXRhID0gcGFyc2VTUmFuZ2Uoci5zdHJ1Y3QpO1xuICAgIGlmIChzdHJ1Y3REYXRhICYmIHN0cnVjdERhdGEubGVuZ3RoID09PSByLnN0cnVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnhsc3hcbiAgICAgICAgPyB7XG4gICAgICAgICAgd29ya2Jvb2tOYW1lOiByLndvcmtib29rTmFtZSxcbiAgICAgICAgICBzaGVldE5hbWU6IHIuc2hlZXROYW1lLFxuICAgICAgICAgIHRhYmxlOiByLm5hbWUsXG4gICAgICAgICAgY29sdW1uczogc3RydWN0RGF0YS5jb2x1bW5zLFxuICAgICAgICAgIHNlY3Rpb25zOiBzdHJ1Y3REYXRhLnNlY3Rpb25zXG4gICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgY29udGV4dDogci5jb250ZXh0LFxuICAgICAgICAgIHRhYmxlOiByLm5hbWUsXG4gICAgICAgICAgY29sdW1uczogc3RydWN0RGF0YS5jb2x1bW5zLFxuICAgICAgICAgIHNlY3Rpb25zOiBzdHJ1Y3REYXRhLnNlY3Rpb25zXG4gICAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIiwiaW1wb3J0IHsgUkVGX1JBTkdFLCBSRUZfQkVBTSwgUkVGX1RFUk5BUlksIFVOS05PV04sIFJFRl9TVFJVQ1QgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBwYXJzZUExUmVmIH0gZnJvbSAnLi9hMS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cnVjdFJlZiB9IGZyb20gJy4vcGFyc2VTdHJ1Y3RSZWYuanMnO1xuXG5mdW5jdGlvbiBnZXRJRGVyICgpIHtcbiAgbGV0IGkgPSAxO1xuICByZXR1cm4gKCkgPT4gJ2Z4ZycgKyAoaSsrKTtcbn1cblxuZnVuY3Rpb24gc2FtZVZhbHVlIChhLCBiKSB7XG4gIGlmIChhID09IG51bGwgJiYgYiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGEgPT09IGI7XG59XG5cbmZ1bmN0aW9uIHNhbWVBcnJheSAoYSwgYikge1xuICBpZiAoKEFycmF5LmlzQXJyYXkoYSkgIT09IEFycmF5LmlzQXJyYXkoYikpIHx8IGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXNhbWVWYWx1ZShhW2ldLCBiW2ldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2FtZVN0ciAoYSwgYikge1xuICBpZiAoIWEgJiYgIWIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCkgPT09IFN0cmluZyhiKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBpc0VxdWl2YWxlbnQgKHJlZkEsIHJlZkIpIHtcbiAgLy8gaWYgbmFtZWQsIG5hbWUgbXVzdCBtYXRjaFxuICBpZiAoKHJlZkEubmFtZSB8fCByZWZCLm5hbWUpICYmIHJlZkEubmFtZSAhPT0gcmVmQi5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGlmIHN0cnVjdHVyZWRcbiAgaWYgKChyZWZBLmNvbHVtbnMgfHwgcmVmQi5jb2x1bW5zKSkge1xuICAgIGlmIChyZWZBLnRhYmxlICE9PSByZWZCLnRhYmxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghc2FtZUFycmF5KHJlZkEuY29sdW1ucywgcmVmQi5jb2x1bW5zKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXNhbWVBcnJheShyZWZBLnNlY3Rpb25zLCByZWZCLnNlY3Rpb25zKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBpZiByYW5nZWQsIHJhbmdlIG11c3QgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25zICh3ZSBkb24ndCBjYXJlIGFib3V0ICQpXG4gIGlmIChyZWZBLnJhbmdlIHx8IHJlZkIucmFuZ2UpIHtcbiAgICBpZiAoXG4gICAgICAhc2FtZVZhbHVlKHJlZkEucmFuZ2UudG9wLCByZWZCLnJhbmdlLnRvcCkgfHxcbiAgICAgICFzYW1lVmFsdWUocmVmQS5yYW5nZS5ib3R0b20sIHJlZkIucmFuZ2UuYm90dG9tKSB8fFxuICAgICAgIXNhbWVWYWx1ZShyZWZBLnJhbmdlLmxlZnQsIHJlZkIucmFuZ2UubGVmdCkgfHxcbiAgICAgICFzYW1lVmFsdWUocmVmQS5yYW5nZS5yaWdodCwgcmVmQi5yYW5nZS5yaWdodClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gbXVzdCBoYXZlIHNhbWUgY29udGV4dFxuICBpZiAoXG4gICAgIXNhbWVTdHIocmVmQS53b3JrYm9va05hbWUsIHJlZkIud29ya2Jvb2tOYW1lKSB8fFxuICAgICFzYW1lU3RyKHJlZkEuc2hlZXROYW1lLCByZWZCLnNoZWV0TmFtZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhZGRDb250ZXh0IChyZWYsIHNoZWV0TmFtZSwgd29ya2Jvb2tOYW1lKSB7XG4gIGlmICghcmVmLnNoZWV0TmFtZSkge1xuICAgIHJlZi5zaGVldE5hbWUgPSBzaGVldE5hbWU7XG4gIH1cbiAgaWYgKCFyZWYud29ya2Jvb2tOYW1lKSB7XG4gICAgcmVmLndvcmtib29rTmFtZSA9IHdvcmtib29rTmFtZTtcbiAgfVxuICByZXR1cm4gcmVmO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhyb3VnaCBhIGxpc3Qgb2YgdG9rZW5zIGFuZCBhZGRzIGV4dHJhIGF0dHJpYnV0ZXMgc3VjaCBhcyBtYXRjaGluZ1xuICogcGFyZW5zIGFuZCByYW5nZXMuXG4gKlxuICogVGhlIGBjb250ZXh0YCBwYXJhbWV0ZXIgZGVmaW5lcyBkZWZhdWx0IHJlZmVyZW5jZSBhdHRyaWJ1dGVzOlxuICogYHsgd29ya2Jvb2tOYW1lOiAncmVwb3J0Lnhsc3gnLCBzaGVldE5hbWU6ICdTaGVldDEnIH1gLlxuICogSWYgc3VwcGxpZWQsIHRoZXNlIGFyZSB1c2VkIHRvIG1hdGNoIGBBMWAgdG8gYFNoZWV0MSFBMWAuXG4gKlxuICogQWxsIHRva2VucyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGEgYC5kZXB0aGAgbnVtYmVyIHZhbHVlIHRvIGluZGljYXRpbmcgdGhlXG4gKiBsZXZlbCBvZiBuZXN0aW5nIGluIHBhcmVudGhlc2VzIGFzIHdlbGwgYXMgYW4gYC5pbmRleGAgbnVtYmVyIGluZGljYXRpbmdcbiAqIHRoZWlyIHplcm8gYmFzZWQgcG9zaXRpb24gaW4gdGhlIGxpc3QuXG4gKlxuICogVGhlIHJldHVybmVkIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFycmF5IG9mIHRva2VucyBidXQgdGhlIGZvbGxvd2luZ1xuICogcHJvcGVydGllcyB3aWxsIGFkZGVkIHRvIHRva2VucyAoYXMgYXBwbGljYWJsZSk6XG4gKlxuICogIyMjIyBQYXJlbnRoZXNlcyAoIClcbiAqXG4gKiBNYXRjaGluZyBwYXJlbnMgd2lsbCBiZSB0YWdnZWQgd2l0aCBgLmdyb3VwSWRgIHN0cmluZyBpZGVudGlmaWVyIGFzIHdlbGwgYXNcbiAqIGEgYC5kZXB0aGAgbnVtYmVyIHZhbHVlIChpbmRpY2F0aW5nIHRoZSBsZXZlbCBvZiBuZXN0aW5nKS5cbiAqXG4gKiBDbG9zaW5nIHBhcmVucyB3aXRob3V0IGEgY291bnRlcnBhcnQgd2lsbCBiZSB0YWdnZWQgd2l0aCBgLmVycm9yYFxuICogKGJvb2xlYW4gdHJ1ZSkuXG4gKlxuICogIyMjIyBDdXJseSBicmFja2V0cyB7IH1cbiAqXG4gKiBNYXRjaGluZyBjdXJseSBicmFja2V0cyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZ3JvdXBJZGAgc3RyaW5nIGlkZW50aWZpZXIuXG4gKiBUaGVzZSBtYXkgbm90IGJlIG5lc3RlZCBpbiBFeGNlbC5cbiAqXG4gKiBDbG9zaW5nIGN1cmx5IGJyYWNrZXRzIHdpdGhvdXQgYSBjb3VudGVycGFydCB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZXJyb3JgXG4gKiAoYm9vbGVhbiBgdHJ1ZWApLlxuICpcbiAqICMjIyMgUmFuZ2VzIChgUkVGX1JBTkdFYCBvciBgUkVGX0JFQU1gIHR5cGUgdG9rZW5zKVxuICpcbiAqIEFsbCByYW5nZXMgd2lsbCBiZSB0YWdnZWQgd2l0aCBgLmdyb3VwSWRgIHN0cmluZyBpZGVudGlmaWVyIHJlZ2FyZGxlc3Mgb2ZcbiAqIHRoZSBudW1iZXIgb2YgdGltZXMgdGhleSBvY2N1ci5cbiAqXG4gKiAjIyMjIFRva2VucyBvZiB0eXBlIGBVTktOT1dOYFxuICpcbiAqIEFsbCB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZXJyb3JgIChib29sZWFuIGB0cnVlYCkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxUb2tlbj59IHRva2VubGlzdCBBbiBhcnJheSBvZiB0b2tlbnMgKGZyb20gYHRva2VuaXplKClgKVxuICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0PXt9XSBBIGNvbnRlc3QgdXNlZCB0byBtYXRjaCBgQTFgIHRvIGBTaGVldDEhQTFgLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnNoZWV0TmFtZT0nJ10gQW4gaW1wbGllZCBzaGVldCBuYW1lICgnU2hlZXQxJylcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC53b3JrYm9va05hbWU9JyddIEFuIGltcGxpZWQgd29ya2Jvb2sgbmFtZSAoJ3JlcG9ydC54bHN4JylcbiAqIEByZXR1cm5zIHtBcnJheTxUb2tlbkVuaGFuY2VkPn0gVGhlIGlucHV0IGFycmF5IHdpdGggdGhlIGVuY2hhbmNlZCB0b2tlbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRva2VuTWV0YSAodG9rZW5saXN0LCB7IHNoZWV0TmFtZSA9ICcnLCB3b3JrYm9va05hbWUgPSAnJyB9ID0ge30pIHtcbiAgY29uc3QgcGFyZW5TdGFjayA9IFtdO1xuICBsZXQgYXJyYXlTdGFydCA9IG51bGw7XG4gIGNvbnN0IHVpZCA9IGdldElEZXIoKTtcbiAgY29uc3Qga25vd25SZWZzID0gW107XG5cbiAgY29uc3QgZ2V0Q3VyckRlcHRoID0gKCkgPT4gcGFyZW5TdGFjay5sZW5ndGggKyAoYXJyYXlTdGFydCA/IDEgOiAwKTtcblxuICB0b2tlbmxpc3QuZm9yRWFjaCgodG9rZW4sIGkpID0+IHtcbiAgICB0b2tlbi5pbmRleCA9IGk7XG4gICAgdG9rZW4uZGVwdGggPSBnZXRDdXJyRGVwdGgoKTtcbiAgICBpZiAodG9rZW4udmFsdWUgPT09ICcoJykge1xuICAgICAgcGFyZW5TdGFjay5wdXNoKHRva2VuKTtcbiAgICAgIHRva2VuLmRlcHRoID0gZ2V0Q3VyckRlcHRoKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnKScpIHtcbiAgICAgIGNvbnN0IGNvdW50ZXIgPSBwYXJlblN0YWNrLnBvcCgpO1xuICAgICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgICAgY29uc3QgcGFpcklkID0gdWlkKCk7XG4gICAgICAgIHRva2VuLmdyb3VwSWQgPSBwYWlySWQ7XG4gICAgICAgIHRva2VuLmRlcHRoID0gY291bnRlci5kZXB0aDtcbiAgICAgICAgY291bnRlci5ncm91cElkID0gcGFpcklkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRva2VuLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICd7Jykge1xuICAgICAgaWYgKCFhcnJheVN0YXJ0KSB7XG4gICAgICAgIGFycmF5U3RhcnQgPSB0b2tlbjtcbiAgICAgICAgdG9rZW4uZGVwdGggPSBnZXRDdXJyRGVwdGgoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0b2tlbi5lcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnfScpIHtcbiAgICAgIGlmIChhcnJheVN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHBhaXJJZCA9IHVpZCgpO1xuICAgICAgICB0b2tlbi5ncm91cElkID0gcGFpcklkO1xuICAgICAgICB0b2tlbi5kZXB0aCA9IGFycmF5U3RhcnQuZGVwdGg7XG4gICAgICAgIGFycmF5U3RhcnQuZ3JvdXBJZCA9IHBhaXJJZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0b2tlbi5lcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgICBhcnJheVN0YXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoXG4gICAgICB0b2tlbi50eXBlID09PSBSRUZfUkFOR0UgfHxcbiAgICAgIHRva2VuLnR5cGUgPT09IFJFRl9CRUFNIHx8XG4gICAgICB0b2tlbi50eXBlID09PSBSRUZfVEVSTkFSWSB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVFxuICAgICkge1xuICAgICAgY29uc3QgcmVmID0gKHRva2VuLnR5cGUgPT09IFJFRl9TVFJVQ1QpXG4gICAgICAgID8gcGFyc2VTdHJ1Y3RSZWYodG9rZW4udmFsdWUsIHsgeGxzeDogdHJ1ZSB9KVxuICAgICAgICA6IHBhcnNlQTFSZWYodG9rZW4udmFsdWUsIHsgYWxsb3dUZXJuYXJ5OiB0cnVlLCB4bHN4OiB0cnVlIH0pO1xuICAgICAgaWYgKHJlZiAmJiAocmVmLnJhbmdlIHx8IHJlZi5jb2x1bW5zKSkge1xuICAgICAgICByZWYuc291cmNlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIGFkZENvbnRleHQocmVmLCBzaGVldE5hbWUsIHdvcmtib29rTmFtZSk7XG4gICAgICAgIGNvbnN0IGtub3duID0ga25vd25SZWZzLmZpbmQoZCA9PiBpc0VxdWl2YWxlbnQoZCwgcmVmKSk7XG4gICAgICAgIGlmIChrbm93bikge1xuICAgICAgICAgIHRva2VuLmdyb3VwSWQgPSBrbm93bi5ncm91cElkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlZi5ncm91cElkID0gdWlkKCk7XG4gICAgICAgICAgdG9rZW4uZ3JvdXBJZCA9IHJlZi5ncm91cElkO1xuICAgICAgICAgIGtub3duUmVmcy5wdXNoKHJlZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVU5LTk9XTikge1xuICAgICAgdG9rZW4uZXJyb3IgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0b2tlbmxpc3Q7XG59XG4iLCIvKlxuKiogUkMgbm90YXRpb24gd29ya3MgZGlmZmVyZW50bHkgZnJvbSBBMSBpbiB0aGF0IHdlIGNhbid0IG1lcmdlIHN0YXRpY1xuKiogcmVmZXJlbmNlcyBqb2luZWQgYnkgYDpgLiBNZXJnaW5nIGNhbiBvbmx5IHdvcmsgYmV0d2VlbiByZWZlcmVuY2VzXG4qKiB0aGF0IGFyZSByZWxhdGl2ZS9hYnNvbHV0ZSBvbiB0aGUgc2FtZSBheGVzLCBzbzpcbioqIC0gUjFDMTpSMkMyIHdpbGwgd29yayxcbioqIC0gUlsxXUMxOlJbMl1DMiB3aWxsIGFsc28gd29yaywgYnV0XG4qKiAtIFJbMV1DWzFdOlIyQzIgZG9lc24ndCBoYXZlIGEgZGlyZWN0IHJlY3RhbmdsZSByZXByZXNlbnRpb24gd2l0aG91dCBjb250ZXh0LlxuKi9cbmltcG9ydCB7IHJhbmdlT3BlcmF0b3IsIHRyaW1EaXJlY3Rpb24gfSBmcm9tICcuL2ExLmpzJztcbmltcG9ydCB7IE1BWF9ST1dTLCBNQVhfQ09MUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmIH0gZnJvbSAnLi9wYXJzZVJlZi5qcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnlQcmVmaXgsIHN0cmluZ2lmeVByZWZpeEFsdCB9IGZyb20gJy4vc3RyaW5naWZ5UHJlZml4LmpzJztcblxuY29uc3QgY2xhbXAgPSAobWluLCB2YWwsIG1heCkgPT4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCBtaW4pLCBtYXgpO1xuXG5mdW5jdGlvbiB0b0Nvb3JkICh2YWx1ZSwgaXNBYnMpIHtcbiAgaWYgKGlzQWJzKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSArIDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZSA/ICdbJyArIHZhbHVlICsgJ10nIDogJyc7XG59XG5cbi8qKlxuICogU3RyaW5naWZ5IGEgcmFuZ2Ugb2JqZWN0IGludG8gUjFDMSBzeW50YXguXG4gKlxuICogQGlnbm9yZVxuICogQHByaXZhdGVcbiAqIEBzZWUgcGFyc2VSMUMxUmVmXG4gKiBAcGFyYW0ge1JhbmdlUjFDMX0gcmFuZ2UgIEEgcmFuZ2Ugb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgQW4gUjFDMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBvZiBhIHJhbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1IxQzEgKHJhbmdlKSB7XG4gIGxldCB7IHIwLCBjMCwgcjEsIGMxIH0gPSByYW5nZTtcbiAgY29uc3QgeyAkYzAsICRjMSwgJHIwLCAkcjEgfSA9IHJhbmdlO1xuICBjb25zdCBudWxsUjAgPSByMCA9PSBudWxsO1xuICBjb25zdCBudWxsQzAgPSBjMCA9PSBudWxsO1xuICBsZXQgbnVsbFIxID0gcjEgPT0gbnVsbDtcbiAgbGV0IG51bGxDMSA9IGMxID09IG51bGw7XG4gIGNvbnN0IG9wID0gcmFuZ2VPcGVyYXRvcihyYW5nZS50cmltKTtcbiAgY29uc3QgaGFzVHJpbSA9ICEhcmFuZ2UudHJpbTtcbiAgcjAgPSBjbGFtcCgkcjAgPyAwIDogLU1BWF9ST1dTLCByMCB8IDAsIE1BWF9ST1dTKTtcbiAgYzAgPSBjbGFtcCgkYzAgPyAwIDogLU1BWF9DT0xTLCBjMCB8IDAsIE1BWF9DT0xTKTtcbiAgaWYgKCFudWxsUjAgJiYgbnVsbFIxICYmICFudWxsQzAgJiYgbnVsbEMxKSB7XG4gICAgcjEgPSByMDtcbiAgICBudWxsUjEgPSBmYWxzZTtcbiAgICBjMSA9IGMwO1xuICAgIG51bGxDMSA9IGZhbHNlO1xuICB9XG4gIGVsc2Uge1xuICAgIHIxID0gY2xhbXAoJHIxID8gMCA6IC1NQVhfUk9XUywgcjEgfCAwLCBNQVhfUk9XUyk7XG4gICAgYzEgPSBjbGFtcCgkYzEgPyAwIDogLU1BWF9DT0xTLCBjMSB8IDAsIE1BWF9DT0xTKTtcbiAgfVxuICAvLyBDOkNcbiAgY29uc3QgYWxsUm93cyA9IHIwID09PSAwICYmIHIxID49IE1BWF9ST1dTO1xuICBpZiAoKGFsbFJvd3MgJiYgIW51bGxDMCAmJiAhbnVsbEMxKSB8fCAobnVsbFIwICYmIG51bGxSMSkpIHtcbiAgICBjb25zdCBhID0gdG9Db29yZChjMCwgJGMwKTtcbiAgICBjb25zdCBiID0gdG9Db29yZChjMSwgJGMxKTtcbiAgICByZXR1cm4gJ0MnICsgKGEgPT09IGIgJiYgIWhhc1RyaW0gPyBhIDogYSArIG9wICsgJ0MnICsgYik7XG4gIH1cbiAgLy8gUjpSXG4gIGNvbnN0IGFsbENvbHMgPSBjMCA9PT0gMCAmJiBjMSA+PSBNQVhfQ09MUztcbiAgaWYgKChhbGxDb2xzICYmICFudWxsUjAgJiYgIW51bGxSMSkgfHwgKG51bGxDMCAmJiBudWxsQzEpKSB7XG4gICAgY29uc3QgYSA9IHRvQ29vcmQocjAsICRyMCk7XG4gICAgY29uc3QgYiA9IHRvQ29vcmQocjEsICRyMSk7XG4gICAgcmV0dXJuICdSJyArIChhID09PSBiICYmICFoYXNUcmltID8gYSA6IGEgKyBvcCArICdSJyArIGIpO1xuICB9XG4gIGNvbnN0IHNfcjAgPSB0b0Nvb3JkKHIwLCAkcjApO1xuICBjb25zdCBzX3IxID0gdG9Db29yZChyMSwgJHIxKTtcbiAgY29uc3Qgc19jMCA9IHRvQ29vcmQoYzAsICRjMCk7XG4gIGNvbnN0IHNfYzEgPSB0b0Nvb3JkKGMxLCAkYzEpO1xuICAvLyBSQzpSLCBSQzpDXG4gIGlmIChudWxsUjAgfHwgbnVsbFIxIHx8IG51bGxDMCB8fCBudWxsQzEpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKG51bGxSMCA/ICcnIDogJ1InICsgc19yMCkgK1xuICAgICAgKG51bGxDMCA/ICcnIDogJ0MnICsgc19jMCkgK1xuICAgICAgb3AgK1xuICAgICAgKG51bGxSMSA/ICcnIDogJ1InICsgc19yMSkgK1xuICAgICAgKG51bGxDMSA/ICcnIDogJ0MnICsgc19jMSlcbiAgICApO1xuICB9XG4gIC8vIFJDOlJDXG4gIGlmIChzX3IwICE9PSBzX3IxIHx8IHNfYzAgIT09IHNfYzEpIHtcbiAgICByZXR1cm4gJ1InICsgc19yMCArICdDJyArIHNfYzAgKyBvcCArICdSJyArIHNfcjEgKyAnQycgKyBzX2MxO1xuICB9XG4gIC8vIFJDXG4gIHJldHVybiAnUicgKyBzX3IwICsgJ0MnICsgc19jMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VSMUMxUGFydCAocmVmKSB7XG4gIGxldCByMCA9IG51bGw7XG4gIGxldCBjMCA9IG51bGw7XG4gIGxldCAkcjAgPSBudWxsO1xuICBsZXQgJGMwID0gbnVsbDtcbiAgLy8gUiBwYXJ0XG4gIGNvbnN0IHJtID0gL15SKD86XFxbKFsrLV0/XFxkKylcXF18KFxcZCspKT8vLmV4ZWMocmVmKTtcbiAgaWYgKHJtKSB7XG4gICAgaWYgKHJtWzFdKSB7XG4gICAgICByMCA9IHBhcnNlSW50KHJtWzFdLCAxMCk7XG4gICAgICAkcjAgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocm1bMl0pIHtcbiAgICAgIHIwID0gcGFyc2VJbnQocm1bMl0sIDEwKSAtIDE7XG4gICAgICAkcjAgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHIwID0gMDtcbiAgICAgICRyMCA9IGZhbHNlO1xuICAgIH1cbiAgICByZWYgPSByZWYuc2xpY2Uocm1bMF0ubGVuZ3RoKTtcbiAgfVxuICAvLyBDIHBhcnRcbiAgY29uc3QgY20gPSAvXkMoPzpcXFsoWystXT9cXGQrKVxcXXwoXFxkKykpPy8uZXhlYyhyZWYpO1xuICBpZiAoY20pIHtcbiAgICBpZiAoY21bMV0pIHtcbiAgICAgIGMwID0gcGFyc2VJbnQoY21bMV0sIDEwKTtcbiAgICAgICRjMCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChjbVsyXSkge1xuICAgICAgYzAgPSBwYXJzZUludChjbVsyXSwgMTApIC0gMTtcbiAgICAgICRjMCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYzAgPSAwO1xuICAgICAgJGMwID0gZmFsc2U7XG4gICAgfVxuICAgIHJlZiA9IHJlZi5zbGljZShjbVswXS5sZW5ndGgpO1xuICB9XG4gIC8vIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgcGFydCAoYW5kIG5vdGhpbmcgbW9yZSlcbiAgaWYgKCghcm0gJiYgIWNtKSB8fCByZWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFsgcjAsIGMwLCAkcjAsICRjMCBdO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc2ltcGxlIHN0cmluZyByZWZlcmVuY2UgdG8gYW4gUjFDMSByYW5nZSBpbnRvIGEgcmFuZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAaWdub3JlXG4gKiBAc2VlIHBhcnNlQTFSZWZcbiAqIEBwYXJhbSB7c3RyaW5nfSByYW5nZVN0cmluZyAgQSByYW5nZSBzdHJpbmdcbiAqIEByZXR1cm5zIHsoUmFuZ2VSMUMxfG51bGwpfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFsaWQgcmVmZXJlbmNlIG9yIG51bGwgaWYgaXQgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21SMUMxIChyYW5nZVN0cmluZykge1xuICBsZXQgZmluYWwgPSBudWxsO1xuICBjb25zdCBbIHBhcnQxLCBvcCwgcGFydDIsIG92ZXJmbG93IF0gPSByYW5nZVN0cmluZy5zcGxpdCgvKFxcLj86XFwuPykvKTtcbiAgaWYgKG92ZXJmbG93KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPSBwYXJzZVIxQzFQYXJ0KHBhcnQxKTtcbiAgY29uc3QgdHJpbSA9IHRyaW1EaXJlY3Rpb24oISFvcCAmJiBvcFswXSA9PT0gJy4nLCAhIW9wICYmIG9wW29wLmxlbmd0aCAtIDFdID09PSAnLicpO1xuICBpZiAocmFuZ2UpIHtcbiAgICBjb25zdCBbIHIwLCBjMCwgJHIwLCAkYzAgXSA9IHJhbmdlO1xuICAgIGlmIChwYXJ0Mikge1xuICAgICAgY29uc3QgZXh0ZW5kVG8gPSBwYXJzZVIxQzFQYXJ0KHBhcnQyKTtcbiAgICAgIGlmIChleHRlbmRUbykge1xuICAgICAgICBmaW5hbCA9IHt9O1xuICAgICAgICBjb25zdCBbIHIxLCBjMSwgJHIxLCAkYzEgXSA9IGV4dGVuZFRvO1xuICAgICAgICAvLyByb3dzXG4gICAgICAgIGlmIChyMCAhPSBudWxsICYmIHIxICE9IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5yMCA9ICRyMCA9PT0gJHIxID8gTWF0aC5taW4ocjAsIHIxKSA6IHIwO1xuICAgICAgICAgIGZpbmFsLiRyMCA9ICRyMDtcbiAgICAgICAgICBmaW5hbC5yMSA9ICRyMCA9PT0gJHIxID8gTWF0aC5tYXgocjAsIHIxKSA6IHIxO1xuICAgICAgICAgIGZpbmFsLiRyMSA9ICRyMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyMCAhPSBudWxsICYmIHIxID09IG51bGwpIHtcbiAgICAgICAgICAvLyBwYXJ0aWFsIFJDOkNcbiAgICAgICAgICBmaW5hbC5yMCA9IHIwO1xuICAgICAgICAgIGZpbmFsLiRyMCA9ICRyMDtcbiAgICAgICAgICBmaW5hbC5yMSA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJHIxID0gJHIwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHIwID09IG51bGwgJiYgcjEgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIHBhcnRpYWwgQzpSQ1xuICAgICAgICAgIGZpbmFsLnIwID0gcjE7XG4gICAgICAgICAgZmluYWwuJHIwID0gJHIxO1xuICAgICAgICAgIGZpbmFsLnIxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kcjEgPSAkcjE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocjAgPT0gbnVsbCAmJiByMSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gQzpDXG4gICAgICAgICAgZmluYWwucjAgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRyMCA9IGZhbHNlO1xuICAgICAgICAgIGZpbmFsLnIxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kcjEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgIGlmIChjMCAhPSBudWxsICYmIGMxICE9IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5jMCA9ICRjMCA9PT0gJGMxID8gTWF0aC5taW4oYzAsIGMxKSA6IGMwO1xuICAgICAgICAgIGZpbmFsLiRjMCA9ICRjMDtcbiAgICAgICAgICBmaW5hbC5jMSA9ICRjMCA9PT0gJGMxID8gTWF0aC5tYXgoYzAsIGMxKSA6IGMxO1xuICAgICAgICAgIGZpbmFsLiRjMSA9ICRjMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjMCAhPSBudWxsICYmIGMxID09IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5jMCA9IGMwO1xuICAgICAgICAgIGZpbmFsLiRjMCA9ICRjMDtcbiAgICAgICAgICBmaW5hbC5jMSA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJGMxID0gJGMwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMwID09IG51bGwgJiYgYzEgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLmMwID0gYzE7XG4gICAgICAgICAgZmluYWwuJGMwID0gJGMxO1xuICAgICAgICAgIGZpbmFsLmMxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kYzEgPSAkYzE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYzAgPT0gbnVsbCAmJiBjMSA9PSBudWxsKSB7XG4gICAgICAgICAgZmluYWwuYzAgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRjMCA9IGZhbHNlO1xuICAgICAgICAgIGZpbmFsLmMxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kYzEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyByYW5nZSBvbmx5IC0gbm8gc2Vjb25kIHBhcnRcbiAgICBlbHNlIGlmIChyMCAhPSBudWxsICYmIGMwID09IG51bGwpIHtcbiAgICAgIGZpbmFsID0ge1xuICAgICAgICByMDogcjAsXG4gICAgICAgIGMwOiBudWxsLFxuICAgICAgICByMTogcjAsXG4gICAgICAgIGMxOiBudWxsLFxuICAgICAgICAkcjA6ICRyMCxcbiAgICAgICAgJGMwOiBmYWxzZSxcbiAgICAgICAgJHIxOiAkcjAsXG4gICAgICAgICRjMTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHIwID09IG51bGwgJiYgYzAgIT0gbnVsbCkge1xuICAgICAgZmluYWwgPSB7XG4gICAgICAgIHIwOiBudWxsLFxuICAgICAgICBjMDogYzAsXG4gICAgICAgIHIxOiBudWxsLFxuICAgICAgICBjMTogYzAsXG4gICAgICAgICRyMDogZmFsc2UsXG4gICAgICAgICRjMDogJGMwLFxuICAgICAgICAkcjE6IGZhbHNlLFxuICAgICAgICAkYzE6ICRjMFxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmaW5hbCA9IHtcbiAgICAgICAgcjA6IHIwIHx8IDAsXG4gICAgICAgIGMwOiBjMCB8fCAwLFxuICAgICAgICByMTogcjAgfHwgMCxcbiAgICAgICAgYzE6IGMwIHx8IDAsXG4gICAgICAgICRyMDogJHIwIHx8IGZhbHNlLFxuICAgICAgICAkYzA6ICRjMCB8fCBmYWxzZSxcbiAgICAgICAgJHIxOiAkcjAgfHwgZmFsc2UsXG4gICAgICAgICRjMTogJGMwIHx8IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBpZiAoZmluYWwgJiYgdHJpbSkge1xuICAgIGZpbmFsLnRyaW0gPSB0cmltO1xuICB9XG4gIHJldHVybiBmaW5hbDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyByZWZlcmVuY2UgaW50byBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGl0LlxuICpcbiAqIGBgYGpzXG4gKiBwYXJzZVIxQzFSZWYoJ1NoZWV0MSFSWzldQzk6Uls5XUM5Jyk7XG4gKiAvLyA9PiB7XG4gKiAvLyAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqIC8vICAgcmFuZ2U6IHtcbiAqIC8vICAgICByMDogOSxcbiAqIC8vICAgICBjMDogOCxcbiAqIC8vICAgICByMTogOSxcbiAqIC8vICAgICBjMTogOCxcbiAqIC8vICAgICAkYzA6IHRydWUsXG4gKiAvLyAgICAgJGMxOiB0cnVlXG4gKiAvLyAgICAgJHIwOiBmYWxzZSxcbiAqIC8vICAgICAkcjE6IGZhbHNlXG4gKiAvLyAgIH1cbiAqIC8vIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZTdHJpbmcgQW4gUjFDMS1zdHlsZSByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93TmFtZWQ9dHJ1ZV0gIEVuYWJsZSBwYXJzaW5nIG5hbWVzIGFzIHdlbGwgYXMgcmFuZ2VzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9ZmFsc2VdICBFbmFibGVzIHRoZSByZWNvZ25pdGlvbiBvZiB0ZXJuYXJ5IHJhbmdlcyBpbiB0aGUgc3R5bGUgb2YgYEExOkFgIG9yIGBBMToxYC4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieSBHb29nbGUgU2hlZXRzIGJ1dCBub3QgRXhjZWwuIFNlZTogUmVmZXJlbmNlcy5tZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHsoUmVmZXJlbmNlUjFDMXxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJlZmVyZW5jZSBvciBudWxsIGlmIGl0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVIxQzFSZWYgKHJlZlN0cmluZywgeyBhbGxvd05hbWVkID0gdHJ1ZSwgYWxsb3dUZXJuYXJ5ID0gZmFsc2UsIHhsc3ggPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgZCA9IHBhcnNlUmVmKHJlZlN0cmluZywgeyBhbGxvd05hbWVkLCBhbGxvd1Rlcm5hcnksIHhsc3gsIHIxYzE6IHRydWUgfSk7XG4gIGlmIChkICYmIChkLnIwIHx8IGQubmFtZSkpIHtcbiAgICBjb25zdCByYW5nZSA9IGQucjFcbiAgICAgID8gZnJvbVIxQzEoZC5yMCArIGQub3BlcmF0b3IgKyBkLnIxKVxuICAgICAgOiBmcm9tUjFDMShkLnIwKTtcbiAgICBpZiAocmFuZ2UpIHtcbiAgICAgIHJldHVybiB4bHN4XG4gICAgICAgID8geyB3b3JrYm9va05hbWU6IGQud29ya2Jvb2tOYW1lLCBzaGVldE5hbWU6IGQuc2hlZXROYW1lLCByYW5nZSB9XG4gICAgICAgIDogeyBjb250ZXh0OiBkLmNvbnRleHQsIHJhbmdlIH07XG4gICAgfVxuICAgIGlmIChkLm5hbWUpIHtcbiAgICAgIHJldHVybiB4bHN4XG4gICAgICAgID8geyB3b3JrYm9va05hbWU6IGQud29ya2Jvb2tOYW1lLCBzaGVldE5hbWU6IGQuc2hlZXROYW1lLCBuYW1lOiBkLm5hbWUgfVxuICAgICAgICA6IHsgY29udGV4dDogZC5jb250ZXh0LCBuYW1lOiBkLm5hbWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogR2V0IGFuIFIxQzEtc3R5bGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVmZXJlbmNlIG9iamVjdC5cbiAqXG4gKiBgYGBqc1xuICogc3RyaW5naWZ5UjFDMVJlZih7XG4gKiAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqICAgcmFuZ2U6IHtcbiAqICAgICByMDogOSxcbiAqICAgICBjMDogOCxcbiAqICAgICByMTogOSxcbiAqICAgICBjMTogOCxcbiAqICAgICAkYzA6IHRydWUsXG4gKiAgICAgJGMxOiB0cnVlXG4gKiAgICAgJHIwOiBmYWxzZSxcbiAqICAgICAkcjE6IGZhbHNlXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gPT4gJ1NoZWV0MSFSWzldQzk6Uls5XUM5J1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtSZWZlcmVuY2VSMUMxfSByZWZPYmplY3QgQSByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVmZXJlbmNlIGluIFIxQzEtc3R5bGUgc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UjFDMVJlZiAocmVmT2JqZWN0LCB7IHhsc3ggPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgcHJlZml4ID0geGxzeFxuICAgID8gc3RyaW5naWZ5UHJlZml4QWx0KHJlZk9iamVjdClcbiAgICA6IHN0cmluZ2lmeVByZWZpeChyZWZPYmplY3QpO1xuICByZXR1cm4gcHJlZml4ICsgKFxuICAgIHJlZk9iamVjdC5uYW1lID8gcmVmT2JqZWN0Lm5hbWUgOiB0b1IxQzEocmVmT2JqZWN0LnJhbmdlKVxuICApO1xufVxuIiwiaW1wb3J0IHsgTUFYX1JPV1MsIE1BWF9DT0xTLCBFUlJPUiB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGZyb21BMSwgcGFyc2VBMVJlZiwgc3RyaW5naWZ5QTFSZWYgfSBmcm9tICcuL2ExLmpzJztcbmltcG9ydCB7IHBhcnNlUjFDMVJlZiwgc3RyaW5naWZ5UjFDMVJlZiB9IGZyb20gJy4vcmMuanMnO1xuaW1wb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcbmltcG9ydCB7IGlzUmFuZ2UgfSBmcm9tICcuL2lzVHlwZS5qcyc7XG5cbmNvbnN0IGNhbGMgPSAoYWJzLCB2WCwgYVgpID0+IHtcbiAgaWYgKHZYID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gYWJzID8gdlggOiB2WCAtIGFYO1xufTtcblxuY29uc3Qgc2V0dGluZ3MgPSB7XG4gIHdpdGhMb2NhdGlvbjogZmFsc2UsXG4gIG1lcmdlUmVmczogZmFsc2UsXG4gIGFsbG93VGVybmFyeTogdHJ1ZSxcbiAgcjFjMTogZmFsc2Vcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyByYW5nZXMgaW4gYSBmb3JtdWxhIG9yIGxpc3Qgb2YgdG9rZW5zIGZyb20gYWJzb2x1dGUgQTEgc3ludGF4IHRvXG4gKiByZWxhdGl2ZSBSMUMxIHN5bnRheC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIGZvcm11bGEgd2l0aCB0aGUgcmFuZ2VzIHRyYW5zbGF0ZWQuIElmIGFuIGFycmF5IG9mIHRva2Vuc1xuICogd2FzIHN1cHBsaWVkLCB0aGVuIHRoZSBzYW1lIGFycmF5IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiB0cmFuc2xhdGVUb1IxQzEoXCI9U1VNKEUxMCwkRSQyLFNoZWV0ISRFJDMpXCIsIFwiRDEwXCIpO1xuICogLy8gPT4gXCI9U1VNKFJDWzFdLFIyQzUsU2hlZXQhUjNDNSlcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBmb3JtdWxhIEEgc3RyaW5nIChhbiBFeGNlbCBmb3JtdWxhKSBvciBhIHRva2VuIGxpc3QgdGhhdCBzaG91bGQgYmUgYWRqdXN0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5jaG9yQ2VsbCBBIHNpbXBsZSBzdHJpbmcgcmVmZXJlbmNlIHRvIGFuIEExIGNlbGwgSUQgKGBBRjEyM2Agb3JgJEMkNWApLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9dHJ1ZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHJldHVybnMgeyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBBIGZvcm11bGEgc3RyaW5nIG9yIHRva2VuIGxpc3QgKGRlcGVuZGluZyBvbiB3aGljaCB3YXMgaW5wdXQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVUb1IxQzEgKGZvcm11bGEsIGFuY2hvckNlbGwsIHsgeGxzeCA9IGZhbHNlLCBhbGxvd1Rlcm5hcnkgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCB7IHRvcCwgbGVmdCB9ID0gZnJvbUExKGFuY2hvckNlbGwpO1xuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBmb3JtdWxhID09PSAnc3RyaW5nJztcblxuICBjb25zdCB0b2tlbnMgPSBpc1N0cmluZ1xuICAgID8gdG9rZW5pemUoZm9ybXVsYSwgeyAuLi5zZXR0aW5ncywgeGxzeCwgYWxsb3dUZXJuYXJ5IH0pXG4gICAgOiBmb3JtdWxhO1xuXG4gIGxldCBvZmZzZXRTa2V3ID0gMDtcbiAgY29uc3QgcmVmT3B0cyA9IHsgeGxzeCwgYWxsb3dUZXJuYXJ5IH07XG4gIHRva2Vucy5mb3JFYWNoKHRva2VuID0+IHtcbiAgICBpZiAoaXNSYW5nZSh0b2tlbikpIHtcbiAgICAgIGNvbnN0IHRva2VuVmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICAgIGNvbnN0IHJlZiA9IHBhcnNlQTFSZWYodG9rZW5WYWx1ZSwgcmVmT3B0cyk7XG4gICAgICBjb25zdCBkID0gcmVmLnJhbmdlO1xuICAgICAgY29uc3QgcmFuZ2UgPSB7fTtcbiAgICAgIHJhbmdlLnIwID0gY2FsYyhkLiR0b3AsIGQudG9wLCB0b3ApO1xuICAgICAgcmFuZ2UucjEgPSBjYWxjKGQuJGJvdHRvbSwgZC5ib3R0b20sIHRvcCk7XG4gICAgICByYW5nZS5jMCA9IGNhbGMoZC4kbGVmdCwgZC5sZWZ0LCBsZWZ0KTtcbiAgICAgIHJhbmdlLmMxID0gY2FsYyhkLiRyaWdodCwgZC5yaWdodCwgbGVmdCk7XG4gICAgICByYW5nZS4kcjAgPSBkLiR0b3A7XG4gICAgICByYW5nZS4kcjEgPSBkLiRib3R0b207XG4gICAgICByYW5nZS4kYzAgPSBkLiRsZWZ0O1xuICAgICAgcmFuZ2UuJGMxID0gZC4kcmlnaHQ7XG4gICAgICBpZiAoZC50cmltKSB7XG4gICAgICAgIHJhbmdlLnRyaW0gPSBkLnRyaW07XG4gICAgICB9XG4gICAgICByZWYucmFuZ2UgPSByYW5nZTtcbiAgICAgIHRva2VuLnZhbHVlID0gc3RyaW5naWZ5UjFDMVJlZihyZWYsIHJlZk9wdHMpO1xuICAgICAgLy8gaWYgdG9rZW4gaW5jbHVkZXMgb2Zmc2V0cywgdGhvc2Ugb2Zmc2V0cyBhcmUgbm93IGxpa2VseSB3cm9uZyFcbiAgICAgIGlmICh0b2tlbi5sb2MpIHtcbiAgICAgICAgdG9rZW4ubG9jWzBdICs9IG9mZnNldFNrZXc7XG4gICAgICAgIG9mZnNldFNrZXcgKz0gdG9rZW4udmFsdWUubGVuZ3RoIC0gdG9rZW5WYWx1ZS5sZW5ndGg7XG4gICAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvZmZzZXRTa2V3ICYmIHRva2VuLmxvYykge1xuICAgICAgdG9rZW4ubG9jWzBdICs9IG9mZnNldFNrZXc7XG4gICAgICB0b2tlbi5sb2NbMV0gKz0gb2Zmc2V0U2tldztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpc1N0cmluZ1xuICAgID8gdG9rZW5zLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpXG4gICAgOiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIHRvRml4ZWQgKHZhbCwgYWJzLCBiYXNlLCBtYXgsIHdyYXBFZGdlcyA9IHRydWUpIHtcbiAgbGV0IHYgPSB2YWw7XG4gIGlmICh2ICE9IG51bGwgJiYgIWFicykge1xuICAgIHYgPSBiYXNlICsgdmFsO1xuICAgIC8vIEV4Y2VsIFwid3JhcHMgYXJvdW5kXCIgd2hlbiB2YWx1ZSBnb2VzIG91dCBvZiBsb3dlciBib3VuZHMuXG4gICAgLy8gSXQncyBhIGJpdCBxdWlya3kgb24gZW50cnkgYXMgRXhjZWwgX3JlYWxseSB3YW50c18gdG8gcmUtcmV3aXRlIHRoZVxuICAgIC8vIHJlZmVyZW5jZXMgYnV0IHRoZSBiZWhhdmlvdXIgaXMgY29uc2lzdGVudCB3aXRoIElORElSRUNUOlxuICAgIC8vIC4uLiBJbiBBMTogUkNbLTFdID0+IFIxQ1sxNjM4M10uXG4gICAgaWYgKHYgPCAwKSB7XG4gICAgICBpZiAoIXdyYXBFZGdlcykge1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgfVxuICAgICAgdiA9IG1heCArIHYgKyAxO1xuICAgIH1cbiAgICAvLyAuLi4gSW4gQjE6ID1SQ1sxNjM4M10gPT4gPVJDWy0xXVxuICAgIGlmICh2ID4gbWF4KSB7XG4gICAgICBpZiAoIXdyYXBFZGdlcykge1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgfVxuICAgICAgdiAtPSBtYXggKyAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHdyYXBFZGdlczogdHJ1ZSxcbiAgbWVyZ2VSZWZzOiB0cnVlLFxuICBhbGxvd1Rlcm5hcnk6IHRydWUsXG4gIHhsc3g6IGZhbHNlXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgcmFuZ2VzIGluIGEgZm9ybXVsYSBvciBsaXN0IG9mIHRva2VucyBmcm9tIHJlbGF0aXZlIFIxQzEgc3ludGF4IHRvXG4gKiBhYnNvbHV0ZSBBMSBzeW50YXguXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSBmb3JtdWxhIHdpdGggdGhlIHJhbmdlcyB0cmFuc2xhdGVkLiBJZiBhbiBhcnJheSBvZiB0b2tlbnNcbiAqIHdhcyBzdXBwbGllZCwgdGhlbiB0aGUgc2FtZSBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogdHJhbnNsYXRlVG9BMShcIj1TVU0oUkNbMV0sUjJDNSxTaGVldCFSM0M1KVwiLCBcIkQxMFwiKTtcbiAqIC8vID0+IFwiPVNVTShFMTAsJEUkMixTaGVldCEkRSQzKVwiKTtcbiAqIGBgYFxuICpcbiAqIElmIGFuIGlucHV0IHJhbmdlIGlzIC0xLC0xIHJlbGF0aXZlIHJvd3MvY29sdW1ucyBhbmQgdGhlIGFuY2hvciBpcyBBMSwgdGhlXG4gKiByZXN1bHRpbmcgcmFuZ2Ugd2lsbCAoYnkgZGVmYXVsdCkgd3JhcCBhcm91bmQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc2hlZXRcbiAqIHJlc3VsdGluZyBpbiB0aGUgcmFuZ2UgWEZEMTA0ODU3Ni4gVGhpcyBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQgc28gbWF5IHNldFxuICogYHdyYXBFZGdlc2AgdG8gZmFsc2Ugd2hpY2ggd2lsbCBpbnN0ZWFkIHR1cm4gdGhlIHJhbmdlIGludG8gYSBgI1JFRiFgIGVycm9yLlxuICpcbiAqIGBgYGpzXG4gKiB0cmFuc2xhdGVUb0ExKFwiPVJbLTFdQ1stMV1cIiwgXCJBMVwiKTtcbiAqIC8vID0+IFwiPVhGRDEwNDg1NzZcIik7XG4gKlxuICogdHJhbnNsYXRlVG9BMShcIj1SWy0xXUNbLTFdXCIsIFwiQTFcIiwgeyB3cmFwRWRnZXM6IGZhbHNlIH0pO1xuICogLy8gPT4gXCI9I1JFRiFcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlIHRoYXQgaWYgeW91IGFyZSBwYXNzaW5nIGluIGEgbGlzdCBvZiB0b2tlbnMgdGhhdCB3YXMgbm90IGNyZWF0ZWQgdXNpbmdcbiAqIGBtZXJnZVJlZnNgIGFuZCB5b3UgZGlzYWJsZSBlZGdlIHdyYXBwaW5nIChvciB5b3Ugc2ltcGx5IHNldCBib3RoIG9wdGlvbnNcbiAqIHRvIGZhbHNlKSwgeW91IGNhbiBlbmQgdXAgd2l0aCBhIGZvcm11bGEgc3VjaCBhcyBgPSNSRUYhOkIyYCBvclxuICogYD1TaGVldDMhI1JFRiE6RjNgLiBUaGVzZSBhcmUgdmFsaWQgZm9ybXVsYXMgaW4gdGhlIEV4Y2VsIGZvcm11bGEgbGFuZ3VhZ2VcbiAqIGFuZCBFeGNlbCB3aWxsIGFjY2VwdCB0aGVtLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBpbiBHb29nbGUgU2hlZXRzLlxuICpcbiAqIEBwYXJhbSB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IGZvcm11bGEgQSBzdHJpbmcgKGFuIEV4Y2VsIGZvcm11bGEpIG9yIGEgdG9rZW4gbGlzdCB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNob3JDZWxsIEEgc2ltcGxlIHN0cmluZyByZWZlcmVuY2UgdG8gYW4gQTEgY2VsbCBJRCAoYEFGMTIzYCBvcmAkQyQ1YCkuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLndyYXBFZGdlcz10cnVlXSAgV3JhcCBvdXQtb2YtYm91bmRzIHJhbmdlcyBhcm91bmQgc2hlZXQgZWRnZXMgcmF0aGVyIHRoYW4gdHVybmluZyB0aGVtIHRvICNSRUYhIGVycm9yc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5tZXJnZVJlZnM9dHJ1ZV0gICBTaG91bGQgcmFuZ2VzIGJlIHRyZWF0ZWQgYXMgd2hvbGUgcmVmZXJlbmNlcyAoYFNoZWV0MSFBMTpCMmApIG9yIGFzIHNlcGFyYXRlIHRva2VucyBmb3IgZWFjaCBwYXJ0OiAoYFNoZWV0MWAsYCFgLGBBMWAsYDpgLGBCMmApLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9dHJ1ZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHJldHVybnMgeyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBBIGZvcm11bGEgc3RyaW5nIG9yIHRva2VuIGxpc3QgKGRlcGVuZGluZyBvbiB3aGljaCB3YXMgaW5wdXQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVUb0ExIChmb3JtdWxhLCBhbmNob3JDZWxsLCBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMpIHtcbiAgY29uc3QgYW5jaG9yID0gZnJvbUExKGFuY2hvckNlbGwpO1xuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBmb3JtdWxhID09PSAnc3RyaW5nJztcbiAgY29uc3Qgb3B0cyA9IHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcblxuICBjb25zdCB0b2tlbnMgPSBpc1N0cmluZ1xuICAgID8gdG9rZW5pemUoZm9ybXVsYSwge1xuICAgICAgd2l0aExvY2F0aW9uOiBmYWxzZSxcbiAgICAgIG1lcmdlUmVmczogb3B0cy5tZXJnZVJlZnMsXG4gICAgICB4bHN4OiBvcHRzLnhsc3gsXG4gICAgICBhbGxvd1Rlcm5hcnk6IG9wdHMuYWxsb3dUZXJuYXJ5LFxuICAgICAgcjFjMTogdHJ1ZVxuICAgIH0pXG4gICAgOiBmb3JtdWxhO1xuXG4gIGxldCBvZmZzZXRTa2V3ID0gMDtcbiAgY29uc3QgcmVmT3B0cyA9IHsgeGxzeDogb3B0cy54bHN4LCBhbGxvd1Rlcm5hcnk6IG9wdHMuYWxsb3dUZXJuYXJ5IH07XG4gIHRva2Vucy5mb3JFYWNoKHRva2VuID0+IHtcbiAgICBpZiAoaXNSYW5nZSh0b2tlbikpIHtcbiAgICAgIGNvbnN0IHRva2VuVmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICAgIGNvbnN0IHJlZiA9IHBhcnNlUjFDMVJlZih0b2tlblZhbHVlLCByZWZPcHRzKTtcbiAgICAgIGNvbnN0IGQgPSByZWYucmFuZ2U7XG4gICAgICBjb25zdCByYW5nZSA9IHt9O1xuICAgICAgY29uc3QgcjAgPSB0b0ZpeGVkKGQucjAsIGQuJHIwLCBhbmNob3IudG9wLCBNQVhfUk9XUywgb3B0cy53cmFwRWRnZXMpO1xuICAgICAgY29uc3QgcjEgPSB0b0ZpeGVkKGQucjEsIGQuJHIxLCBhbmNob3IudG9wLCBNQVhfUk9XUywgb3B0cy53cmFwRWRnZXMpO1xuICAgICAgaWYgKHIwID4gcjEpIHtcbiAgICAgICAgcmFuZ2UudG9wID0gcjE7XG4gICAgICAgIHJhbmdlLiR0b3AgPSBkLiRyMTtcbiAgICAgICAgcmFuZ2UuYm90dG9tID0gcjA7XG4gICAgICAgIHJhbmdlLiRib3R0b20gPSBkLiRyMDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByYW5nZS50b3AgPSByMDtcbiAgICAgICAgcmFuZ2UuJHRvcCA9IGQuJHIwO1xuICAgICAgICByYW5nZS5ib3R0b20gPSByMTtcbiAgICAgICAgcmFuZ2UuJGJvdHRvbSA9IGQuJHIxO1xuICAgICAgfVxuICAgICAgY29uc3QgYzAgPSB0b0ZpeGVkKGQuYzAsIGQuJGMwLCBhbmNob3IubGVmdCwgTUFYX0NPTFMsIG9wdHMud3JhcEVkZ2VzKTtcbiAgICAgIGNvbnN0IGMxID0gdG9GaXhlZChkLmMxLCBkLiRjMSwgYW5jaG9yLmxlZnQsIE1BWF9DT0xTLCBvcHRzLndyYXBFZGdlcyk7XG4gICAgICBpZiAoYzAgPiBjMSkge1xuICAgICAgICByYW5nZS5sZWZ0ID0gYzE7XG4gICAgICAgIHJhbmdlLiRsZWZ0ID0gZC4kYzE7XG4gICAgICAgIHJhbmdlLnJpZ2h0ID0gYzA7XG4gICAgICAgIHJhbmdlLiRyaWdodCA9IGQuJGMwO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJhbmdlLmxlZnQgPSBjMDtcbiAgICAgICAgcmFuZ2UuJGxlZnQgPSBkLiRjMDtcbiAgICAgICAgcmFuZ2UucmlnaHQgPSBjMTtcbiAgICAgICAgcmFuZ2UuJHJpZ2h0ID0gZC4kYzE7XG4gICAgICB9XG4gICAgICBpZiAoZC50cmltKSB7XG4gICAgICAgIHJhbmdlLnRyaW0gPSBkLnRyaW07XG4gICAgICB9XG4gICAgICBpZiAoaXNOYU4ocjApIHx8IGlzTmFOKHIxKSB8fCBpc05hTihjMCkgfHwgaXNOYU4oYzEpKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgdG8gcmVmIGVycm9yXG4gICAgICAgIHRva2VuLnR5cGUgPSBFUlJPUjtcbiAgICAgICAgdG9rZW4udmFsdWUgPSAnI1JFRiEnO1xuICAgICAgICBkZWxldGUgdG9rZW4uZ3JvdXBJZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZWYucmFuZ2UgPSByYW5nZTtcbiAgICAgICAgdG9rZW4udmFsdWUgPSBzdHJpbmdpZnlBMVJlZihyZWYsIHJlZk9wdHMpO1xuICAgICAgfVxuICAgICAgLy8gaWYgdG9rZW4gaW5jbHVkZXMgb2Zmc2V0cywgdGhvc2Ugb2Zmc2V0cyBhcmUgbm93IGxpa2VseSB3cm9uZyFcbiAgICAgIGlmICh0b2tlbi5sb2MpIHtcbiAgICAgICAgdG9rZW4ubG9jWzBdICs9IG9mZnNldFNrZXc7XG4gICAgICAgIG9mZnNldFNrZXcgKz0gdG9rZW4udmFsdWUubGVuZ3RoIC0gdG9rZW5WYWx1ZS5sZW5ndGg7XG4gICAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvZmZzZXRTa2V3ICYmIHRva2VuLmxvYykge1xuICAgICAgdG9rZW4ubG9jWzBdICs9IG9mZnNldFNrZXc7XG4gICAgICB0b2tlbi5sb2NbMV0gKz0gb2Zmc2V0U2tldztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpc1N0cmluZ1xuICAgID8gdG9rZW5zLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpXG4gICAgOiB0b2tlbnM7XG59XG4iLCJpbXBvcnQgeyBzdHJpbmdpZnlQcmVmaXgsIHN0cmluZ2lmeVByZWZpeEFsdCB9IGZyb20gJy4vc3RyaW5naWZ5UHJlZml4LmpzJztcblxuZnVuY3Rpb24gcXVvdGVDb2xuYW1lIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW1tcXF0jJ0BdKS9nLCAnXFwnJDEnKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNCcmFjZXMgKHN0cikge1xuICByZXR1cm4gIS9eW2EtekEtWjAtOVxcdTAwYTEtXFx1ZmZmZl0rJC8udGVzdChzdHIpO1xufVxuXG5mdW5jdGlvbiB0b1NlbnRlbmNlQ2FzZSAoc3RyKSB7XG4gIHJldHVybiBzdHJbMF0udG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHN0cnVjdHVyZWQgcmVmZXJlbmNlIG9iamVjdC5cbiAqXG4gKiBgYGBqc1xuICogc3RyaW5naWZ5U3RydWN0UmVmKHtcbiAqICAgY29udGV4dDogWyAnd29ya2Jvb2sueGxzeCcgXSxcbiAqICAgc2VjdGlvbnM6IFsgJ2RhdGEnIF0sXG4gKiAgIGNvbHVtbnM6IFsgJ215IGNvbHVtbicsICdAZm9vJyBdLFxuICogICB0YWJsZTogJ3RhYmxlTmFtZScsXG4gKiB9KTtcbiAqIC8vID0+ICd3b3JrYm9vay54bHN4IXRhYmxlTmFtZVtbI0RhdGFdLFtDb2x1bW4xXTpbQ29sdW1uMl1dJ1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtSZWZlcmVuY2VTdHJ1Y3R9IHJlZk9iamVjdCBBIHN0cnVjdHVyZWQgcmVmZXJlbmNlIG9iamVjdFxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50aGlzUm93PWZhbHNlXSAgRW5mb3JjZXMgdXNpbmcgdGhlIGBbI1RoaXMgUm93XWAgaW5zdGVhZCBvZiB0aGUgYEBgIHNob3J0aGFuZCB3aGVuIHNlcmlhbGl6aW5nIHN0cnVjdHVyZWQgcmFuZ2VzLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0cnVjdHVyZWQgcmVmZXJlbmNlIGluIHN0cmluZyBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVN0cnVjdFJlZiAocmVmT2JqZWN0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB4bHN4LCB0aGlzUm93IH0gPSBvcHRpb25zO1xuICBsZXQgcyA9IHhsc3hcbiAgICA/IHN0cmluZ2lmeVByZWZpeEFsdChyZWZPYmplY3QpXG4gICAgOiBzdHJpbmdpZnlQcmVmaXgocmVmT2JqZWN0KTtcblxuICBpZiAocmVmT2JqZWN0LnRhYmxlKSB7XG4gICAgcyArPSByZWZPYmplY3QudGFibGU7XG4gIH1cbiAgY29uc3QgbnVtQ29sdW1ucyA9IHJlZk9iamVjdC5jb2x1bW5zPy5sZW5ndGggPz8gMDtcbiAgY29uc3QgbnVtU2VjdGlvbnMgPSByZWZPYmplY3Quc2VjdGlvbnM/Lmxlbmd0aCA/PyAwO1xuICAvLyBzaW5nbGUgc2VjdGlvblxuICBpZiAobnVtU2VjdGlvbnMgPT09IDEgJiYgIW51bUNvbHVtbnMpIHtcbiAgICBzICs9IGBbIyR7dG9TZW50ZW5jZUNhc2UocmVmT2JqZWN0LnNlY3Rpb25zWzBdKX1dYDtcbiAgfVxuICAvLyBzaW5nbGUgY29sdW1uXG4gIGVsc2UgaWYgKCFudW1TZWN0aW9ucyAmJiBudW1Db2x1bW5zID09PSAxKSB7XG4gICAgcyArPSBgWyR7cXVvdGVDb2xuYW1lKHJlZk9iamVjdC5jb2x1bW5zWzBdKX1dYDtcbiAgfVxuICBlbHNlIHtcbiAgICBzICs9ICdbJztcbiAgICAvLyBzaW5nbGUgWyN0aGlzIHJvd10gc2VjdGlvbnMgZ2V0IG5vcm1hbGl6ZWQgdG8gYW4gQCBieSBkZWZhdWx0XG4gICAgY29uc3Qgc2luZ2xlQXQgPSAhdGhpc1JvdyAmJiBudW1TZWN0aW9ucyA9PT0gMSAmJiByZWZPYmplY3Quc2VjdGlvbnNbMF0udG9Mb3dlckNhc2UoKSA9PT0gJ3RoaXMgcm93JztcbiAgICBpZiAoc2luZ2xlQXQpIHtcbiAgICAgIHMgKz0gJ0AnO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW1TZWN0aW9ucykge1xuICAgICAgcyArPSByZWZPYmplY3Quc2VjdGlvbnNcbiAgICAgICAgLm1hcChkID0+IGBbIyR7dG9TZW50ZW5jZUNhc2UoZCl9XWApXG4gICAgICAgIC5qb2luKCcsJyk7XG4gICAgICBpZiAobnVtQ29sdW1ucykge1xuICAgICAgICBzICs9ICcsJztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gYSBjYXNlIG9mIGEgc2luZ2xlIGFscGhhbnVtYmVyaWMgY29sdW1uIHdpdGggYSBbI3RoaXMgcm93XSBiZWNvbWVzIFtAY29sXVxuICAgIGlmIChzaW5nbGVBdCAmJiByZWZPYmplY3QuY29sdW1ucy5sZW5ndGggPT09IDEgJiYgIW5lZWRzQnJhY2VzKHJlZk9iamVjdC5jb2x1bW5zWzBdKSkge1xuICAgICAgcyArPSBxdW90ZUNvbG5hbWUocmVmT2JqZWN0LmNvbHVtbnNbMF0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW1Db2x1bW5zKSB7XG4gICAgICBzICs9IHJlZk9iamVjdC5jb2x1bW5zLnNsaWNlKDAsIDIpXG4gICAgICAgIC5tYXAoZCA9PiAoYFske3F1b3RlQ29sbmFtZShkKX1dYCkpXG4gICAgICAgIC5qb2luKCc6Jyk7XG4gICAgfVxuICAgIHMgKz0gJ10nO1xuICB9XG4gIHJldHVybiBzO1xufVxuIiwiZXhwb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcbmV4cG9ydCB7IHBhcnNlIH0gZnJvbSAnLi9wYXJzZXIuanMnO1xuZXhwb3J0IHsgYWRkVG9rZW5NZXRhIH0gZnJvbSAnLi9hZGRUb2tlbk1ldGEuanMnO1xuZXhwb3J0IHsgdHJhbnNsYXRlVG9SMUMxLCB0cmFuc2xhdGVUb0ExIH0gZnJvbSAnLi90cmFuc2xhdGUuanMnO1xuZXhwb3J0IHsgTUFYX0NPTFMsIE1BWF9ST1dTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuZXhwb3J0IHsgbWVyZ2VSZWZUb2tlbnMgfSBmcm9tICcuL21lcmdlUmVmVG9rZW5zLmpzJztcbmV4cG9ydCB7IGZpeFJhbmdlcyB9IGZyb20gJy4vZml4UmFuZ2VzLmpzJztcbmV4cG9ydCB7XG4gIGlzRXJyb3IsXG4gIGlzRnVuY3Rpb24sXG4gIGlzRnhQcmVmaXgsXG4gIGlzTGl0ZXJhbCxcbiAgaXNPcGVyYXRvcixcbiAgaXNSYW5nZSxcbiAgaXNSZWZlcmVuY2UsXG4gIGlzV2hpdGVzcGFjZVxufSBmcm9tICcuL2lzVHlwZS5qcyc7XG5cbmV4cG9ydCB7IGZyb21Db2wgfSBmcm9tICcuL2Zyb21Db2wuanMnO1xuZXhwb3J0IHsgdG9Db2wgfSBmcm9tICcuL3RvQ29sLmpzJztcblxuZXhwb3J0IHtcbiAgcGFyc2VBMVJlZixcbiAgc3RyaW5naWZ5QTFSZWYsXG4gIGFkZEExUmFuZ2VCb3VuZHNcbn0gZnJvbSAnLi9hMS5qcyc7XG5cbmV4cG9ydCB7XG4gIHBhcnNlUjFDMVJlZixcbiAgc3RyaW5naWZ5UjFDMVJlZlxufSBmcm9tICcuL3JjLmpzJztcblxuZXhwb3J0IHsgc3RyaW5naWZ5U3RydWN0UmVmIH0gZnJvbSAnLi9zdHJpbmdpZnlTdHJ1Y3RSZWYuanMnO1xuZXhwb3J0IHsgcGFyc2VTdHJ1Y3RSZWYgfSBmcm9tICcuL3BhcnNlU3RydWN0UmVmLmpzJztcblxuaW1wb3J0IHtcbiAgLy8gdG9rZW4gdHlwZXNcbiAgT1BFUkFUT1IsXG4gIEJPT0xFQU4sXG4gIEVSUk9SLFxuICBOVU1CRVIsXG4gIEZVTkNUSU9OLFxuICBORVdMSU5FLFxuICBXSElURVNQQUNFLFxuICBTVFJJTkcsXG4gIENPTlRFWFQsXG4gIENPTlRFWFRfUVVPVEUsXG4gIFJFRl9SQU5HRSxcbiAgUkVGX0JFQU0sXG4gIFJFRl9URVJOQVJZLFxuICBSRUZfTkFNRUQsXG4gIFJFRl9TVFJVQ1QsXG4gIEZYX1BSRUZJWCxcbiAgVU5LTk9XTixcbiAgLy8gQVNUIHR5cGVzXG4gIFVOQVJZLFxuICBCSU5BUlksXG4gIFJFRkVSRU5DRSxcbiAgTElURVJBTCxcbiAgRVJST1JfTElURVJBTCxcbiAgQ0FMTCxcbiAgQVJSQVksXG4gIElERU5USUZJRVJcbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG4vKipcbiAqIEEgZGljdGlvbmFyeSBvZiB0aGUgdHlwZXMgdXNlZCB0byBpZGVudGlmeSB0b2tlbiB2YXJpYW50cy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBjb25zdGFudCB7T2JqZWN0PHN0cmluZz59IHRva2VuVHlwZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBPUEVSQVRPUiAtIE5ld2xpbmUgKGBcXG5gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJPT0xFQU4gLSBCb29sZWFuIGxpdGVyYWwgKGBUUlVFYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFUlJPUiAtIEVycm9yIGxpdGVyYWwgKGAjVkFMVUUhYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBOVU1CRVIgLSBOdW1iZXIgbGl0ZXJhbCAoYDEyMy40YCwgYC0xLjVlKzJgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEZVTkNUSU9OIC0gRnVuY3Rpb24gbmFtZSAoYFNVTWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTkVXTElORSAtIE5ld2xpbmUgY2hhcmFjdGVyIChgXFxuYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBXSElURVNQQUNFIC0gV2hpdGVzcGFjZSBjaGFyYWN0ZXIgc2VxdWVuY2UgKGAgYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVFJJTkcgLSBTdHJpbmcgbGl0ZXJhbCAoYFwiTG9yZW0gaXBzdW1cImApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQ09OVEVYVCAtIFJlZmVyZW5jZSBjb250ZXh0IChbV29ya2Jvb2sueGxzeF1TaGVldDEpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQ09OVEVYVF9RVU9URSAtIFF1b3RlZCByZWZlcmVuY2UgY29udGV4dCAoYCdbTXkgd29ya2Jvb2sueGxzeF1TaGVldDEnYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfUkFOR0UgLSBBIHJhbmdlIGlkZW50aWZpZXIgKGBBMWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGX0JFQU0gLSBBIHJhbmdlIFwiYmVhbVwiIGlkZW50aWZpZXIgKGBBOkFgIG9yIGAxOjFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9URVJOQVJZIC0gQSB0ZXJuYXJ5IHJhbmdlIGlkZW50aWZpZXIgKGBCMjpCYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfTkFNRUQgLSBBIG5hbWUgLyBuYW1lZCByYW5nZSBpZGVudGlmaWVyIChgaW5jb21lYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfU1RSVUNUIC0gQSBzdHJ1Y3R1cmVkIHJlZmVyZW5jZSBpZGVudGlmaWVyIChgdGFibGVbW0NvbHVtbjFdOltDb2x1bW4yXV1gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEZYX1BSRUZJWCAtIEEgbGVhZGluZyBlcXVhbHMgc2lnbiBhdCB0aGUgc3RhcnQgb2YgYSBmb3JtdWxhIChgPWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVU5LTk9XTiAtIEFueSB1bmlkZW50aWZpYWJsZSByYW5nZSBvZiBjaGFyYWN0ZXJzLlxuICogQHNlZSB0b2tlbml6ZVxuICovXG5leHBvcnQgY29uc3QgdG9rZW5UeXBlcyA9IE9iamVjdC5mcmVlemUoe1xuICBPUEVSQVRPUixcbiAgQk9PTEVBTixcbiAgRVJST1IsXG4gIE5VTUJFUixcbiAgRlVOQ1RJT04sXG4gIE5FV0xJTkUsXG4gIFdISVRFU1BBQ0UsXG4gIFNUUklORyxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfQkVBTSxcbiAgUkVGX1RFUk5BUlksXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1NUUlVDVCxcbiAgRlhfUFJFRklYLFxuICBVTktOT1dOXG59KTtcblxuLyoqXG4gKiBBIGRpY3Rpb25hcnkgb2YgdGhlIHR5cGVzIHVzZWQgdG8gaWRlbnRpZnkgQVNUIG5vZGUgdmFyaWFudHMuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAY29uc3RhbnQge09iamVjdDxzdHJpbmc+fSBub2RlVHlwZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVTkFSWSAtIEEgdW5hcnkgb3BlcmF0aW9uIChgMTAlYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBCSU5BUlkgLSBBIGJpbmFyeSBvcGVyYXRpb24gKGAxMCsxMGApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGRVJFTkNFIC0gQSByYW5nZSBpZGVudGlmaWVyIChgQTFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IExJVEVSQUwgLSBBIGxpdGVyYWwgKG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuKSAoYDEyM2AsIGBcImZvb1wiYCwgYGZhbHNlYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFUlJPUiAtIEFuIGVycm9yIGxpdGVyYWwgKGAjVkFMVUUhYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDQUxMIC0gQSBmdW5jdGlvbiBjYWxsIGV4cHJlc3Npb24gKGBTVU0oMSwyKWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQVJSQVkgLSBBbiBhcnJheSBleHByZXNzaW9uIChgezEsMjszLDR9YClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJREVOVElGSUVSIC0gQSBmdW5jdGlvbiBuYW1lIGlkZW50aWZpZXIgKGBTVU1gKVxuICogQHNlZSBwYXJzZVxuICovXG5leHBvcnQgY29uc3Qgbm9kZVR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFVOQVJZLFxuICBCSU5BUlksXG4gIFJFRkVSRU5DRSxcbiAgTElURVJBTCxcbiAgRVJST1I6IEVSUk9SX0xJVEVSQUwsXG4gIENBTEwsXG4gIEFSUkFZLFxuICBJREVOVElGSUVSXG59KTtcbiIsImltcG9ydCB7IGlzUmFuZ2UgfSBmcm9tICcuL2lzVHlwZS5qcyc7XG5pbXBvcnQgeyBwYXJzZUExUmVmLCBzdHJpbmdpZnlBMVJlZiwgYWRkQTFSYW5nZUJvdW5kcyB9IGZyb20gJy4vYTEuanMnO1xuaW1wb3J0IHsgcGFyc2VTdHJ1Y3RSZWYgfSBmcm9tICcuL3BhcnNlU3RydWN0UmVmLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeVN0cnVjdFJlZiB9IGZyb20gJy4vc3RyaW5naWZ5U3RydWN0UmVmLmpzJztcbmltcG9ydCB7IHRva2VuaXplIH0gZnJvbSAnLi9sZXhlci5qcyc7XG5pbXBvcnQgeyBSRUZfU1RSVUNUIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG4vLyBUaGVyZSBpcyBubyBSMUMxIGNvdW50ZXJwYXJ0IHRvIHRoaXMuIFRoaXMgaXMgYmVjYXVzZSB3aXRob3V0IGFuIGFuY2hvciBjZWxsXG4vLyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBpZiBhIHJlbGF0aXZlK2Fic29sdXRlIHJhbmdlIChSWzFdQ1sxXTpSNUM1KVxuLy8gbmVlZHMgdG8gYmUgZmxpcHBlZCBvciBub3QuIFRoZSBzb2x1dGlvbiBpcyB0byBjb252ZXJ0IHRvIEExIGZpcnN0OlxuLy8gdHJhbnNsYXRlVG9SQyhmaXhSYW5nZXModHJhbnNsYXRlVG9BMSguLi4pKSlcblxuLyoqXG4gKiBOb3JtYWxpemVzIEExIHN0eWxlIHJhbmdlcyBhbmQgc3RydWN0dXJlZCByZWZlcmVuY2VzIGluIGEgZm9ybXVsYSBvciBsaXN0IG9mXG4gKiB0b2tlbnMuXG4gKiBcbiAqIEl0IGVuc3VyZXMgdGhhdCB0aGF0IHRoZSB0b3AgYW5kIGxlZnQgY29vcmRpbmF0ZXMgb2YgYW4gQTEgcmFuZ2UgYXJlIG9uIHRoZVxuICogbGVmdC1oYW5kIHNpZGUgb2YgYSBjb2xvbiBvcGVyYXRvcjpcbiAqXG4gKiBgQjI6QTFgIOKGkiBgQTE6QjJgICBcbiAqIGAxOkExYCDihpIgYEExOjFgICBcbiAqIGBBOkExYCDihpIgYEExOkFgICBcbiAqIGBCOkFgIOKGkiBgQTpCYCAgXG4gKiBgMjoxYCDihpIgYDE6MmAgIFxuICogYEExOkExYCDihpIgYEExYCAgXG4gKlxuICogV2hlbiBgeyBhZGRCb3VuZHM6IHRydWUgfWAgaXMgcGFzc2VkIGFzIGFuIG9wdGlvbiwgdGhlIG1pc3NpbmcgYm91bmRzIGFyZVxuICogYWxzbyBhZGRlZC4gVGhpcyBjYW4gYmUgZG9uZSB0byBlbnN1cmUgRXhjZWwgY29tcGF0aWJsZSByYW5nZXMuIFRoZSBmaXhlc1xuICogdGhlbiBhZGRpdGlvbmFsbHkgaW5jbHVkZTpcbiAqXG4gKiBgMTpBMWAg4oaSIGBBMToxYCDihpIgYDE6MWAgIFxuICogYEE6QTFgIOKGkiBgQTE6QWAg4oaSIGBBOkFgICBcbiAqIGBBMTpBYCDihpIgYEE6QWAgIFxuICogYEExOjFgIOKGkiBgQToxYCAgXG4gKiBgQjI6QmAg4oaSIGBCMjoxMDQ4NTc2YCAgXG4gKiBgQjI6MmAg4oaSIGBCMjpYRkQyYCAgXG4gKlxuICogU3RydWN0dXJlZCByYW5nZXMgYXJlIG5vcm1hbGl6ZWQgY2xlYW5lZCB1cCB0byBoYXZlIGNvbnNpc3RlbnQgb3JkZXIgYW5kXG4gKiBjYXBpdGFsaXphdGlvbiBvZiBzZWN0aW9ucyBhcyB3ZWxsIGFzIHJlbW92aW5nIHJlZHVuZGFudCBvbmVzLlxuICpcbiAqIFJldHVybnMgdGhlIHNhbWUgZm9ybXVsYSB3aXRoIHRoZSByYW5nZXMgdXBkYXRlZC4gSWYgYW4gYXJyYXkgb2YgdG9rZW5zIHdhc1xuICogc3VwcGxpZWQsIHRoZW4gYSBuZXcgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgQXJyYXk8VG9rZW4+KX0gZm9ybXVsYSBBIHN0cmluZyAoYW4gRXhjZWwgZm9ybXVsYSkgb3IgYSB0b2tlbiBsaXN0IHRoYXQgc2hvdWxkIGJlIGFkanVzdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hZGRCb3VuZHM9ZmFsc2VdICBGaWxsIGluIGFueSB1bmRlZmluZWQgYm91bmRzIG9mIHJhbmdlIG9iamVjdHMuIFRvcCB0byAwLCBib3R0b20gdG8gMTA0ODU3NSwgbGVmdCB0byAwLCBhbmQgcmlnaHQgdG8gMTYzODMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRoaXNSb3c9ZmFsc2VdICBFbmZvcmNlcyB1c2luZyB0aGUgYFsjVGhpcyBSb3ddYCBpbnN0ZWFkIG9mIHRoZSBgQGAgc2hvcnRoYW5kIHdoZW4gc2VyaWFsaXppbmcgc3RydWN0dXJlZCByYW5nZXMuXG4gKiBAcmV0dXJucyB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IEEgZm9ybXVsYSBzdHJpbmcgb3IgdG9rZW4gbGlzdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHdhcyBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpeFJhbmdlcyAoZm9ybXVsYSwgb3B0aW9ucyA9IHsgYWRkQm91bmRzOiBmYWxzZSB9KSB7XG4gIGlmICh0eXBlb2YgZm9ybXVsYSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZml4UmFuZ2VzKHRva2VuaXplKGZvcm11bGEsIG9wdGlvbnMpLCBvcHRpb25zKVxuICAgICAgLm1hcChkID0+IGQudmFsdWUpXG4gICAgICAuam9pbignJyk7XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZvcm11bGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmaXhSYW5nZXMgZXhwZWN0cyBhbiBhcnJheSBvZiB0b2tlbnMnKTtcbiAgfVxuICBjb25zdCB7IGFkZEJvdW5kcywgcjFjMSwgeGxzeCwgdGhpc1JvdyB9ID0gb3B0aW9ucztcbiAgaWYgKHIxYzEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpeFJhbmdlcyBkb2VzIG5vdCBoYXZlIGFuIFIxQzEgbW9kZScpO1xuICB9XG4gIGxldCBvZmZzZXRTa2V3ID0gMDtcbiAgcmV0dXJuIGZvcm11bGEubWFwKHQgPT4ge1xuICAgIGNvbnN0IHRva2VuID0geyAuLi50IH07XG4gICAgaWYgKHQubG9jKSB7XG4gICAgICB0b2tlbi5sb2MgPSBbIC4uLnQubG9jIF07XG4gICAgfVxuICAgIGxldCBvZmZzZXREZWx0YSA9IDA7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFJFRl9TVFJVQ1QpIHtcbiAgICAgIGNvbnN0IHNyZWYgPSBwYXJzZVN0cnVjdFJlZih0b2tlbi52YWx1ZSwgeyB4bHN4IH0pO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBzdHJpbmdpZnlTdHJ1Y3RSZWYoc3JlZiwgeyB4bHN4LCB0aGlzUm93IH0pO1xuICAgICAgb2Zmc2V0RGVsdGEgPSBuZXdWYWx1ZS5sZW5ndGggLSB0b2tlbi52YWx1ZS5sZW5ndGg7XG4gICAgICB0b2tlbi52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JhbmdlKHRva2VuKSkge1xuICAgICAgY29uc3QgcmVmID0gcGFyc2VBMVJlZih0b2tlbi52YWx1ZSwgeyB4bHN4LCBhbGxvd1Rlcm5hcnk6IHRydWUgfSk7XG4gICAgICBjb25zdCByYW5nZSA9IHJlZi5yYW5nZTtcbiAgICAgIC8vIGZpbGwgbWlzc2luZyBkaW1lbnNpb25zP1xuICAgICAgaWYgKGFkZEJvdW5kcykge1xuICAgICAgICBhZGRBMVJhbmdlQm91bmRzKHJhbmdlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gc3RyaW5naWZ5QTFSZWYocmVmLCB7IHhsc3ggfSk7XG4gICAgICBvZmZzZXREZWx0YSA9IG5ld1ZhbHVlLmxlbmd0aCAtIHRva2VuLnZhbHVlLmxlbmd0aDtcbiAgICAgIHRva2VuLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIC8vIGVuc3VyZSB0aGF0IHBvc2l0aW9uaW5nIGlzIHN0aWxsIGNvcnJlY3RcbiAgICBpZiAob2Zmc2V0U2tldyB8fCBvZmZzZXREZWx0YSkge1xuICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgIH1cbiAgICAgIG9mZnNldFNrZXcgKz0gb2Zmc2V0RGVsdGE7XG4gICAgICBpZiAodG9rZW4ubG9jKSB7XG4gICAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9mZnNldFNrZXcgKz0gb2Zmc2V0RGVsdGE7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbiAgfSk7XG59XG5cbiJdLCJuYW1lcyI6WyJPUEVSQVRPUiIsIk9QRVJBVE9SX1RSSU0iLCJCT09MRUFOIiwiRVJST1IiLCJOVU1CRVIiLCJGVU5DVElPTiIsIk5FV0xJTkUiLCJXSElURVNQQUNFIiwiU1RSSU5HIiwiQ09OVEVYVF9RVU9URSIsIkNPTlRFWFQiLCJSRUZfUkFOR0UiLCJSRUZfQkVBTSIsIlJFRl9URVJOQVJZIiwiUkVGX05BTUVEIiwiUkVGX1NUUlVDVCIsIkZYX1BSRUZJWCIsIlVOS05PV04iLCJVTkFSWSIsIkJJTkFSWSIsIlJFRkVSRU5DRSIsIkxJVEVSQUwiLCJFUlJPUl9MSVRFUkFMIiwiQ0FMTCIsIkxBTUJEQSIsIkxFVCIsIkFSUkFZIiwiSURFTlRJRklFUiIsIk1BWF9DT0xTIiwiTUFYX1JPV1MiLCJmcm9tQ29sIiwiY29sdW1uU3RyaW5nIiwieCIsImwiLCJsZW5ndGgiLCJuIiwiYyIsImNoYXJDb2RlQXQiLCJyZV9TUmNvbHVtbkIiLCJyZV9TUmNvbHVtbk4iLCJrZXlUZXJtcyIsImhlYWRlcnMiLCJkYXRhIiwidG90YWxzIiwiYWxsIiwiZnoiLCJfbGVuIiwiYXJndW1lbnRzIiwiYSIsIkFycmF5IiwiX2tleSIsIk9iamVjdCIsImZyZWV6ZSIsInNlY3Rpb25NYXAiLCJtYXRjaENvbHVtbiIsInMiLCJhbGxvd1VuYnJhY2VkIiwidW5kZWZpbmVkIiwibSIsImV4ZWMiLCJ2YWx1ZSIsInNsaWNlIiwicmVwbGFjZSIsInBhcnNlU1JhbmdlIiwicmF3IiwiY29sdW1ucyIsIm0xIiwicG9zIiwidGVybXMiLCJrIiwidG9Mb3dlckNhc2UiLCJwdXNoIiwiZXhwZWN0X21vcmUiLCJsZWZ0Q29sIiwicmlnaHRDb2wiLCJzZWN0aW9ucyIsImNvbmNhdCIsInRva2VuIiwicmVfQ09OVEVYVCIsInJlX0NPTlRFWFRfUVVPVEUiLCJybmdQYXJ0IiwiY29sUGFydCIsInJvd1BhcnQiLCJyYW5nZU9wIiwibmV4dE5vdENoYXIiLCJyZV9BMUNPTCIsIlJlZ0V4cCIsInJlX0ExUk9XIiwicmVfQTFSQU5HRSIsInJlX0ExUEFSVElBTCIsInJQYXJ0IiwiY1BhcnQiLCJyZV9SQ0NPTCIsInJlX1JDUk9XIiwicmVfUkNSQU5HRSIsInJlX1JDUEFSVElBTCIsInJlX05BTUVEIiwibWFrZUhhbmRsZXIiLCJ0eXBlIiwicmUiLCJzdHIiLCJsZXhOYW1lZCIsImxjIiwicmVfUVVPVEVEX1ZBTFVFIiwicmVfUVVPVEVEX1ZBTFVFX1hMU1giLCJsZXhDb250ZXh0Iiwib3B0aW9ucyIsIm1xIiwieGxzeCIsInRlc3QiLCJiIiwibGV4U3RydWN0dXJlZCIsInN0cnVjdERhdGEiLCJpIiwicmVSQ051bXMiLCJyZUExTnVtcyIsImxleFJhbmdlIiwidCIsInIxYzEiLCJhbGxvd1Rlcm5hcnkiLCJsYXN0SW5kZXgiLCJ2YWwiLCJwYXJzZUludCIsImxleGVycyIsImxleGVyc1JlZnMiLCJvcHRzIiwicmVmUGFydHNUcmVlIiwicGFja0xpc3QiLCJmIiwibm9kZSIsImtleSIsImZvckVhY2giLCJydW4iLCJyZXZlcnNlIiwibWF0Y2hlciIsInRva2VucyIsImN1cnJOb2RlIiwiYW5jaG9ySW5kZXgiLCJpbmRleCIsIm1lcmdlUmVmVG9rZW5zIiwidG9rZW5saXN0IiwiZmluYWxUb2tlbnMiLCJ2YWxpZCIsInRvTWVyZ2UiLCJtYXAiLCJkIiwiam9pbiIsImxvYyIsInVuc2hpZnQiLCJpc1R5cGUiLCJkZWZhdWx0T3B0aW9ucyIsIndpdGhMb2NhdGlvbiIsIm1lcmdlUmVmcyIsIm5lZ2F0aXZlTnVtYmVycyIsImlzVGV4dFRva2VuIiwiY2F1c2VzQmluYXJ5TWludXMiLCJnZXRUb2tlbnMiLCJmeCIsInRva2VuSGFuZGxlcnMiLCJhc3NpZ24iLCJsZXRPckxhbWJkYSIsInVua25vd25SQyIsInRyaW1PcHMiLCJ0YWlsMCIsInRhaWwxIiwibGFzdFRva2VuIiwicHVzaFRva2VuIiwiaXNDdXJyVW5rbm93biIsImlzTGFzdFVua25vd24iLCJzdGFydFBvcyIsInRva2VuVHlwZSIsInRva2VuVmFsdWUiLCJsYXN0TEMiLCJ2YWxMQyIsInVudGVybWluYXRlZCIsInAiLCJsYXN0MSIsIm1pbnVzIiwicG9wIiwid2l0aGluQ2FsbCIsInBhcmVuRGVwdGgiLCJ2IiwiZml4UkNOYW1lcyIsImJlZm9yZSIsImFmdGVyIiwidG9rZW5pemUiLCJmb3JtdWxhIiwiaXNSYW5nZSIsImlzUmVmZXJlbmNlIiwiaXNMaXRlcmFsIiwiaXNFcnJvciIsImlzV2hpdGVzcGFjZSIsImlzRnVuY3Rpb24iLCJpc0Z4UHJlZml4IiwiaXNPcGVyYXRvciIsIkVORCIsInJlZkZ1bmN0aW9ucyIsInN5bWJvbFRhYmxlIiwiY3VycmVudE5vZGUiLCJ0b2tlbkluZGV4IiwicGVybWl0QXJyYXlSYW5nZXMiLCJwZXJtaXRBcnJheUNhbGxzIiwibG9vc2VSZWZDYWxscyIsImlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lIiwiZm5OYW1lIiwiaW5jbHVkZXMiLCJ0b1VwcGVyQ2FzZSIsImlzUmVmZXJlbmNlTm9kZSIsIm9wZXJhdG9yIiwiY2FsbGVlIiwibmFtZSIsImhhbHQiLCJtZXNzYWdlIiwiYXRJbmRleCIsImVyciIsIkVycm9yIiwic291cmNlIiwic291cmNlT2Zmc2V0IiwicmVkdWNlIiwicmVmSXNVcGNvbWluZyIsIm5leHQiLCJhbGxvd09wZXJhdG9ycyIsInRyaW0iLCJpc1JlZmVyZW5jZVRva2VuIiwiYWR2YW5jZSIsImV4cGVjdE5leHQiLCJsZWZ0Tm9kZSIsImlkIiwiaGF2ZVJlZiIsInBvc3NpYmxlV1NPcCIsIm5leHRJc0NhbGwiLCJjcmVhdGUiLCJleHByZXNzaW9uIiwicmJwIiwibGVmdCIsIm51ZCIsImxicCIsImxlZCIsIm9yaWdpbmFsX3N5bWJvbCIsInN5bWJvbCIsImJwIiwiaW5maXgiLCJ0aGlzIiwicmlnaHQiLCJwb3N0Zml4IiwicHJlZml4Iiwic3ViZXhwciIsInJhbmdlSW5maXgiLCJjb21tYSIsInVuaW9uUmVmcyIsImVuYWJsZSIsImN1cnJTdGF0ZSIsInBhcnNlTGFtYmRhIiwiYXJncyIsImFyZ05hbWVzIiwiYm9keSIsImRvbmUiLCJwcmV2U3RhdGUiLCJhcmdUb2tlbkluZGV4IiwiYXJnIiwia2luZCIsImN1cnJOYW1lIiwicGFyYW1zIiwicGFyc2VMZXQiLCJ2YWxzIiwiYXJnQ291bnRlciIsImFkZEFyZ3VtZW50IiwibGFzdEFyZyIsImxhc3RXYXNDb21tYSIsImRlY2xhcmF0aW9ucyIsImluaXQiLCJzcGxpdFByZWZpeCIsInN0cmluZ3NPbmx5IiwiaW5CcmFjZSIsImN1cnJTdHIiLCJwYXJ0cyIsImZsdXNoIiwiYnJhY2VkIiwiY2hhciIsInNwbGl0Q29udGV4dCIsImNvbnRleHRTdHJpbmciLCJjb250ZXh0Iiwic3BsaXRDb250ZXh0WGxzeCIsImN0eCIsIndvcmtib29rTmFtZSIsInNoZWV0TmFtZSIsIml0ZW0iLCJlIiwibGNGbiIsImNhbGwiLCJjbG9zZVBhcmVuIiwicm93Iiwicm93cyIsImNsb3NpbmdCcmFjZSIsImVsZW1lbnRzIiwicFJhbmdlT3AiLCJwUmFuZ2UiLCJyMCIsInBQYXJ0aWFsIiwicFJhbmdlMiIsInIxIiwicEJhbmciLCJwQmVhbSIsInBTdHJ1Y3VyZWQiLCJzdHJ1Y3QiLCJwQ29udGV4dCIsInNwbGl0dGVyIiwicE5hbWVkIiwidmFsaWRSdW5zIiwidmFsaWRSdW5zTmFtZWQiLCJwYXJzZVJlZiIsInJlZiIsImFsbG93TmFtZWQiLCJyZWZEYXRhIiwic2hpZnQiLCJydW5zIiwiZXZlcnkiLCJwYXJzZSIsImoiLCJjaGFyRnJvbSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInRvQ29sIiwiY29sdW1uSW5kZXgiLCJyZUJhbm5lZENoYXJzIiwic3RyaW5naWZ5UHJlZml4IiwicHJlIiwicXVvdGUiLCJudGgiLCJzY29wZSIsInN0cmluZ2lmeVByZWZpeEFsdCIsImNsYW1wIiwibWluIiwibWF4IiwiTWF0aCIsInRvQ29sU3RyIiwidG9Sb3dTdHIiLCJyIiwicmFuZ2VPcGVyYXRvciIsInRyaW1EaXJlY3Rpb24iLCJoZWFkIiwidGFpbCIsInNwbGl0QTEiLCJyb3dTdHIiLCJmcm9tQTEiLCJyYW5nZVN0cmluZyIsInRvcCIsImJvdHRvbSIsIiR0b3AiLCIkbGVmdCIsIiRib3R0b20iLCIkcmlnaHQiLCJwYXJ0MSIsIm9wMSIsInBhcnQyIiwib3AyIiwicGFydDMiLCJzcGxpdCIsInAxIiwicDIiLCJwYXJzZUExUmVmIiwicmVmU3RyaW5nIiwicmFuZ2UiLCJzdHJpbmdpZnlBMVJlZiIsInJlZk9iamVjdCIsIm5vTGVmdCIsIm5vUmlnaHQiLCJub1RvcCIsIm5vQm90dG9tIiwib3AiLCJ0b0ExIiwiYWRkQTFSYW5nZUJvdW5kcyIsInBhcnNlU3RydWN0UmVmIiwidGFibGUiLCJzYW1lVmFsdWUiLCJzYW1lQXJyYXkiLCJpc0FycmF5Iiwic2FtZVN0ciIsInRvQ29vcmQiLCJpc0FicyIsInBhcnNlUjFDMVBhcnQiLCJjMCIsIiRyMCIsIiRjMCIsInJtIiwiY20iLCJmcm9tUjFDMSIsImZpbmFsIiwib3ZlcmZsb3ciLCJleHRlbmRUbyIsImMxIiwiJHIxIiwiJGMxIiwicGFyc2VSMUMxUmVmIiwic3RyaW5naWZ5UjFDMVJlZiIsIm51bGxSMCIsIm51bGxDMCIsIm51bGxSMSIsIm51bGxDMSIsImhhc1RyaW0iLCJzX3IwIiwic19yMSIsInNfYzAiLCJzX2MxIiwidG9SMUMxIiwiY2FsYyIsImFicyIsInZYIiwiYVgiLCJzZXR0aW5ncyIsInRvRml4ZWQiLCJiYXNlIiwid3JhcEVkZ2VzIiwiTmFOIiwicXVvdGVDb2xuYW1lIiwidG9TZW50ZW5jZUNhc2UiLCJzdHJpbmdpZnlTdHJ1Y3RSZWYiLCJ0aGlzUm93IiwibnVtQ29sdW1ucyIsIm51bVNlY3Rpb25zIiwic2luZ2xlQXQiLCJ0b2tlblR5cGVzIiwibm9kZVR5cGVzIiwicGFyZW5TdGFjayIsImFycmF5U3RhcnQiLCJ1aWQiLCJnZXRJRGVyIiwia25vd25SZWZzIiwiZ2V0Q3VyckRlcHRoIiwiZGVwdGgiLCJjb3VudGVyIiwicGFpcklkIiwiZ3JvdXBJZCIsImVycm9yIiwiYWRkQ29udGV4dCIsImtub3duIiwiZmluZCIsInJlZkEiLCJyZWZCIiwiaXNFcXVpdmFsZW50IiwiZml4UmFuZ2VzIiwiYWRkQm91bmRzIiwib2Zmc2V0U2tldyIsIm9mZnNldERlbHRhIiwibmV3VmFsdWUiLCJyb290IiwiYW5jaG9yQ2VsbCIsImFuY2hvciIsImlzU3RyaW5nIiwicmVmT3B0cyIsImlzTmFOIl0sIm1hcHBpbmdzIjoiYUFBTyxNQUFNQSxFQUFXLFdBQ1hDLEVBQWdCLGdCQUNoQkMsRUFBVSxPQUNWQyxFQUFRLFFBQ1JDLEVBQVMsU0FDVEMsRUFBVyxPQUNYQyxFQUFVLFVBQ1ZDLEVBQWEsYUFDYkMsRUFBUyxTQUNUQyxFQUFnQixnQkFDaEJDLEVBQVUsVUFDVkMsRUFBWSxRQUNaQyxFQUFXLGFBQ1hDLEVBQWMsZ0JBQ2RDLEVBQVksY0FDWkMsRUFBYSxhQUNiQyxFQUFZLFlBQ1pDLEVBQVUsVUFFVkMsRUFBUSxrQkFDUkMsRUFBUyxtQkFDVEMsRUFBWSxzQkFDWkMsRUFBVSxVQUNWQyxFQUFnQixlQUNoQkMsRUFBTyxpQkFDUEMsRUFBUyxtQkFDVEMsRUFBTSxnQkFDTkMsRUFBUSxrQkFDUkMsRUFBYSxhQUdiQyxFQUFZLE1BQ1pDLEVBQVksUUNyQmxCLFNBQVNDLEVBQVNDLEdBQ3ZCLE1BQU1DLEVBQUtELEdBQWdCLEdBQ3JCRSxFQUFJRCxFQUFFRSxPQUNaLElBQUlDLEVBQUksRUFDUixHQUFJRixFQUFJ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