react-bootstrap-table-ng-overlay 4.18.0 → 4.19.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/react-bootstrap-table-ng-overlay.js +3 -3
- package/dist/react-bootstrap-table-ng-overlay.min.js +3 -3
- package/lib/index.d.ts +0 -6
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/src/loading-overlay-spinner.d.ts +8 -0
- package/lib/src/loading-overlay-spinner.js +34 -0
- package/lib/src/loading-overlay-spinner.js.map +1 -0
- package/lib/src/loading-overlay-styles.d.ts +52 -0
- package/lib/src/loading-overlay-styles.js +78 -0
- package/lib/src/loading-overlay-styles.js.map +1 -0
- package/lib/src/loading-overlay.d.ts +63 -0
- package/lib/src/loading-overlay.js +179 -0
- package/lib/src/loading-overlay.js.map +1 -0
- package/package.json +7 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNgOverlay=t(require("react"),require("react-dom")):e.ReactBootstrapTableNgOverlay=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={3(e){"use strict";e.exports=t},88(e,t,n){"use strict";n.r(t),n.d(t,{cache:()=>Re,css:()=>Ne,cx:()=>Se,flush:()=>ke,getRegisteredStyles:()=>Oe,hydrate:()=>we,injectGlobal:()=>_e,keyframes:()=>Ae,merge:()=>Ce,sheet:()=>Te});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach(function(e){var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)}),this.tags=[],this.ctr=0},e}(),a=Math.abs,i=String.fromCharCode,s=Object.assign;function o(e){return e.trim()}function c(e,t,n){return e.replace(t,n)}function l(e,t){return e.indexOf(t)}function u(e,t){return 0|e.charCodeAt(t)}function d(e,t,n){return e.slice(t,n)}function p(e){return e.length}function f(e){return e.length}function h(e,t){return t.push(e),e}var v=1,m=1,y=0,g=0,x=0,E="";function b(e,t,n,r,a,i,s){return{value:e,root:t,parent:n,type:r,props:a,children:i,line:v,column:m,length:s,return:""}}function k(e,t){return s(b("",null,null,"",null,null,0),e,{length:-e.length},t)}function w(){return x=g>0?u(E,--g):0,m--,10===x&&(m=1,v--),x}function S(){return x=g<y?u(E,g++):0,m++,10===x&&(m=1,v++),x}function C(){return u(E,g)}function O(){return g}function _(e,t){return d(E,e,t)}function A(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function N(e){return v=m=1,y=p(E=e),g=0,[]}function T(e){return E="",e}function R(e){return o(_(g-1,P(91===e?e+2:40===e?e+1:e)))}function $(e){for(;(x=C())&&x<33;)S();return A(e)>2||A(x)>3?"":" "}function j(e,t){for(;--t&&S()&&!(x<48||x>102||x>57&&x<65||x>70&&x<97););return _(e,O()+(t<6&&32==C()&&32==S()))}function P(e){for(;S();)switch(x){case e:return g;case 34:case 39:34!==e&&39!==e&&P(x);break;case 40:41===e&&P(e);break;case 92:S()}return g}function M(e,t){for(;S()&&e+x!==57&&(e+x!==84||47!==C()););return"/*"+_(t,g-1)+"*"+i(47===e?e:S())}function D(e){for(;!A(C());)S();return _(e,g)}var L="-ms-",F="-moz-",I="-webkit-",q="comm",G="rule",V="decl",W="@keyframes";function z(e,t){for(var n="",r=f(e),a=0;a<r;a++)n+=t(e[a],a,e,t)||"";return n}function U(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case V:return e.return=e.return||e.value;case q:return"";case W:return e.return=e.value+"{"+z(e.children,r)+"}";case G:e.value=e.props.join(",")}return p(n=z(e.children,r))?e.return=e.value+"{"+n+"}":""}function B(e){return T(H("",null,null,null,[""],e=N(e),0,[0],e))}function H(e,t,n,r,a,s,o,d,f){for(var v=0,m=0,y=o,g=0,x=0,E=0,b=1,k=1,_=1,A=0,N="",T=a,P=s,L=r,F=N;k;)switch(E=A,A=S()){case 40:if(108!=E&&58==u(F,y-1)){-1!=l(F+=c(R(A),"&","&\f"),"&\f")&&(_=-1);break}case 34:case 39:case 91:F+=R(A);break;case 9:case 10:case 13:case 32:F+=$(E);break;case 92:F+=j(O()-1,7);continue;case 47:switch(C()){case 42:case 47:h(Y(M(S(),O()),t,n),f);break;default:F+="/"}break;case 123*b:d[v++]=p(F)*_;case 125*b:case 59:case 0:switch(A){case 0:case 125:k=0;case 59+m:-1==_&&(F=c(F,/\f/g,"")),x>0&&p(F)-y&&h(x>32?Z(F+";",r,n,y-1):Z(c(F," ","")+";",r,n,y-2),f);break;case 59:F+=";";default:if(h(L=X(F,t,n,v,m,a,d,N,T=[],P=[],y),s),123===A)if(0===m)H(F,t,L,L,T,s,y,d,P);else switch(99===g&&110===u(F,3)?100:g){case 100:case 108:case 109:case 115:H(e,L,L,r&&h(X(e,L,L,0,0,a,d,N,a,T=[],y),P),a,P,y,d,r?T:P);break;default:H(F,L,L,L,[""],P,0,d,P)}}v=m=x=0,b=_=1,N=F="",y=o;break;case 58:y=1+p(F),x=E;default:if(b<1)if(123==A)--b;else if(125==A&&0==b++&&125==w())continue;switch(F+=i(A),A*b){case 38:_=m>0?1:(F+="\f",-1);break;case 44:d[v++]=(p(F)-1)*_,_=1;break;case 64:45===C()&&(F+=R(S())),g=C(),m=y=p(N=F+=D(O())),A++;break;case 45:45===E&&2==p(F)&&(b=0)}}return s}function X(e,t,n,r,i,s,l,u,p,h,v){for(var m=i-1,y=0===i?s:[""],g=f(y),x=0,E=0,k=0;x<r;++x)for(var w=0,S=d(e,m+1,m=a(E=l[x])),C=e;w<g;++w)(C=o(E>0?y[w]+" "+S:c(S,/&\f/g,y[w])))&&(p[k++]=C);return b(e,t,n,0===i?G:u,p,h,v)}function Y(e,t,n){return b(e,t,n,q,i(x),d(e,2,-2),0)}function Z(e,t,n,r){return b(e,t,n,V,d(e,0,r),d(e,r+1,-1),r)}var J=function(e,t,n){for(var r=0,a=0;r=a,a=C(),38===r&&12===a&&(t[n]=1),!A(a);)S();return _(e,g)},K=function(e,t){return T(function(e,t){var n=-1,r=44;do{switch(A(r)){case 0:38===r&&12===C()&&(t[n]=1),e[n]+=J(g-1,t,n);break;case 2:e[n]+=R(r);break;case 4:if(44===r){e[++n]=58===C()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=i(r)}}while(r=S());return e}(N(e),t))},Q=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Q.get(n))&&!r){Q.set(e,!0);for(var a=[],i=K(t,a),s=n.props,o=0,c=0;o<i.length;o++)for(var l=0;l<s.length;l++,c++)e.props[c]=a[o]?i[o].replace(/&\f/g,s[l]):s[l]+" "+i[o]}}},te=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function ne(e,t){switch(function(e,t){return 45^u(e,0)?(((t<<2^u(e,0))<<2^u(e,1))<<2^u(e,2))<<2^u(e,3):0}(e,t)){case 5103:return I+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return I+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return I+e+F+e+L+e+e;case 6828:case 4268:return I+e+L+e+e;case 6165:return I+e+L+"flex-"+e+e;case 5187:return I+e+c(e,/(\w+).+(:[^]+)/,I+"box-$1$2"+L+"flex-$1$2")+e;case 5443:return I+e+L+"flex-item-"+c(e,/flex-|-self/,"")+e;case 4675:return I+e+L+"flex-line-pack"+c(e,/align-content|flex-|-self/,"")+e;case 5548:return I+e+L+c(e,"shrink","negative")+e;case 5292:return I+e+L+c(e,"basis","preferred-size")+e;case 6060:return I+"box-"+c(e,"-grow","")+I+e+L+c(e,"grow","positive")+e;case 4554:return I+c(e,/([^-])(transform)/g,"$1"+I+"$2")+e;case 6187:return c(c(c(e,/(zoom-|grab)/,I+"$1"),/(image-set)/,I+"$1"),e,"")+e;case 5495:case 3959:return c(e,/(image-set\([^]*)/,I+"$1$`$1");case 4968:return c(c(e,/(.+:)(flex-)?(.*)/,I+"box-pack:$3"+L+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+I+e+e;case 4095:case 3583:case 4068:case 2532:return c(e,/(.+)-inline(.+)/,I+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(p(e)-1-t>6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return c(e,/(.+:)(.+)-([^]+)/,"$1"+I+"$2-$3$1"+F+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~l(e,"stretch")?ne(c(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,p(e)-3-(~l(e,"!important")&&10))){case 107:return c(e,":",":"+I)+e;case 101:return c(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+I+(45===u(e,14)?"inline-":"")+"box$3$1"+I+"$2$3$1"+L+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return I+e+L+e+e}return e}var re=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case V:e.return=ne(e.value,e.length);break;case W:return z([k(e,{value:c(e.value,"@","@"+I)})],r);case G:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return z([k(e,{props:[c(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return z([k(e,{props:[c(t,/:(plac\w+)/,":"+I+"input-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,":-moz-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,L+"input-$1")]})],r)}return""})}}],ae=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))})}var a,i,s=e.stylisPlugins||re,o={},c=[];a=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)o[t[n]]=!0;c.push(e)});var l,u,d,p,h=[U,(p=function(e){l.insert(e)},function(e){e.root||(e=e.return)&&p(e)})],v=(u=[ee,te].concat(s,h),d=f(u),function(e,t,n,r){for(var a="",i=0;i<d;i++)a+=u[i](e,t,n,r)||"";return a});i=function(e,t,n,r){l=n,z(B(e?e+"{"+t.styles+"}":t.styles),v),r&&(m.inserted[t.name]=!0)};var m={key:t,sheet:new r({key:t,container:a,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:o,registered:{},insert:i};return m.sheet.hydrate(c),m};var ie={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function se(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var oe=/[A-Z]|^ms/g,ce=/_EMO_([^_]+?)_([^]*?)_EMO_/g,le=function(e){return 45===e.charCodeAt(1)},ue=function(e){return null!=e&&"boolean"!=typeof e},de=se(function(e){return le(e)?e:e.replace(oe,"-$&").toLowerCase()}),pe=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(ce,function(e,t,n){return he={name:t,styles:n,next:he},t})}return 1===ie[e]||le(e)||"number"!=typeof t||0===t?t:t+"px"};function fe(e,t,n){if(null==n)return"";var r=n;if(void 0!==r.__emotion_styles)return r;switch(typeof n){case"boolean":return"";case"object":var a=n;if(1===a.anim)return he={name:a.name,styles:a.styles,next:he},a.name;var i=n;if(void 0!==i.styles){var s=i.next;if(void 0!==s)for(;void 0!==s;)he={name:s.name,styles:s.styles,next:he},s=s.next;return i.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var a=0;a<n.length;a++)r+=fe(e,t,n[a])+";";else for(var i in n){var s=n[i];if("object"!=typeof s){var o=s;null!=t&&void 0!==t[o]?r+=i+"{"+t[o]+"}":ue(o)&&(r+=de(i)+":"+pe(i,o)+";")}else if(!Array.isArray(s)||"string"!=typeof s[0]||null!=t&&void 0!==t[s[0]]){var c=fe(e,t,s);switch(i){case"animation":case"animationName":r+=de(i)+":"+c+";";break;default:r+=i+"{"+c+"}"}}else for(var l=0;l<s.length;l++)ue(s[l])&&(r+=de(i)+":"+pe(i,s[l])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=he,c=n(e);return he=o,fe(e,t,c)}}var l=n;if(null==t)return l;var u=t[l];return void 0!==u?u:l}var he,ve=/label:\s*([^\s;{]+)\s*(;|$)/g;function me(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,a="";he=void 0;var i=e[0];null==i||void 0===i.raw?(r=!1,a+=fe(n,t,i)):a+=i[0];for(var s=1;s<e.length;s++){if(a+=fe(n,t,e[s]),r)a+=i[s]}ve.lastIndex=0;for(var o,c="";null!==(o=ve.exec(a));)c+="-"+o[1];var l=function(e){for(var t,n=0,r=0,a=e.length;a>=4;++r,a-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(a){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(a)+c;return{name:l,styles:a,next:he}}function ye(e,t,n){var r="";return n.split(" ").forEach(function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(r+=n+" ")}),r}function ge(e,t){if(void 0===e.inserted[t.name])return e.insert("",t,e.sheet,!0)}function xe(e,t,n){var r=[],a=ye(e,r,n);return r.length<2?n:a+t(r)}var Ee=function e(t){for(var n="",r=0;r<t.length;r++){var a=t[r];if(null!=a){var i=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))i=e(a);else for(var s in i="",a)a[s]&&s&&(i&&(i+=" "),i+=s);break;default:i=a}i&&(n&&(n+=" "),n+=i)}}return n},be=function(e){var t=ae(e);t.sheet.speedy=function(e){this.isSpeedy=e},t.compat=!0;var n=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered,void 0);return function(e,t,n){!function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)}(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}(t,a,!1),t.key+"-"+a.name};return{css:n,cx:function(){for(var e=arguments.length,r=new Array(e),a=0;a<e;a++)r[a]=arguments[a];return xe(t.registered,n,Ee(r))},injectGlobal:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered);ge(t,a)},keyframes:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered),i="animation-"+a.name;return ge(t,{name:a.name,styles:"@keyframes "+i+"{"+a.styles+"}"}),i},hydrate:function(e){e.forEach(function(e){t.inserted[e]=!0})},flush:function(){t.registered={},t.inserted={},t.sheet.flush()},sheet:t.sheet,cache:t,getRegisteredStyles:ye.bind(null,t.registered),merge:xe.bind(null,t.registered,n)}}({key:"css"}),ke=be.flush,we=be.hydrate,Se=be.cx,Ce=be.merge,Oe=be.getRegisteredStyles,_e=be.injectGlobal,Ae=be.keyframes,Ne=be.css,Te=be.sheet,Re=be.cache},310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function a(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function s(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function o(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>C,ReplaceTransition:()=>j,SwitchTransition:()=>V,Transition:()=>k,TransitionGroup:()=>R,config:()=>p});var c=n(442),l=n.n(c),u=n(3),d=n.n(u);const p={disabled:!1},f=l().createContext(null);var h=function(e){return e.scrollTop},v="unmounted",m="exited",y="entering",g="entered",x="exiting",E=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var a,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(a=m,r.appearStatus=y):a=g:a=t.unmountOnExit||t.mountOnEnter?v:m,r.state={status:a},r.nextCallback=null,r}s(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:m}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==y&&n!==g&&(t=y):n!==y&&n!==g||(t=x)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===y){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===m&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,a=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=a[0],s=a[1],o=this.getTimeouts(),c=r?o.appear:o.enter;!e&&!n||p.disabled?this.safeSetState({status:g},function(){t.props.onEntered(i)}):(this.props.onEnter(i,s),this.safeSetState({status:y},function(){t.props.onEntering(i,s),t.onTransitionEnd(c,function(){t.safeSetState({status:g},function(){t.props.onEntered(i,s)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!p.disabled?(this.props.onExit(r),this.safeSetState({status:x},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:m},function(){e.props.onExited(r)})})})):this.safeSetState({status:m},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var a=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=a[0],s=a[1];this.props.addEndListener(i,s)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,a(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return l().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):l().cloneElement(l().Children.only(n),r))},t}(l().Component);function b(){}E.contextType=f,E.propTypes={},E.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},E.UNMOUNTED=v,E.EXITED=m,E.ENTERING=y,E.ENTERED=g,E.EXITING=x;const k=E;var w=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=o(n.className,r):n.setAttribute("class",o(n.className&&n.className.baseVal||"",r)));var n,r})},S=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1];t.removeClasses(a,"exit"),t.addClass(a,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1]?"appear":"enter";t.addClass(a,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1]?"appear":"enter";t.removeClasses(a,i),t.addClass(a,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,a=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:a,activeClassName:r?a+"-active":n[e+"Active"],doneClassName:r?a+"-done":n[e+"Done"]}},t}s(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],a=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&a&&(r+=" "+a),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,a=n.active,i=n.done;this.appliedClasses[t]={},r&&w(e,r),a&&w(e,a),i&&w(e,i)},n.render=function(){var e=this.props,t=(e.classNames,a(e,["classNames"]));return l().createElement(k,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(l().Component);S.defaultProps={classNames:""},S.propTypes={};const C=S;function O(e,t){var n=Object.create(null);return e&&c.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,c.isValidElement)(e)?t(e):e}(e)}),n}function _(e,t,n){return null!=n[t]?n[t]:e.props[t]}function A(e,t,n){var r=O(e.children),a=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,a=Object.create(null),i=[];for(var s in e)s in t?i.length&&(a[s]=i,i=[]):i.push(s);var o={};for(var c in t){if(a[c])for(r=0;r<a[c].length;r++){var l=a[c][r];o[a[c][r]]=n(l)}o[c]=n(c)}for(r=0;r<i.length;r++)o[i[r]]=n(i[r]);return o}(t,r);return Object.keys(a).forEach(function(i){var s=a[i];if((0,c.isValidElement)(s)){var o=i in t,l=i in r,u=t[i],d=(0,c.isValidElement)(u)&&!u.props.in;!l||o&&!d?l||!o||d?l&&o&&(0,c.isValidElement)(u)&&(a[i]=(0,c.cloneElement)(s,{onExited:n.bind(null,s),in:u.props.in,exit:_(s,"exit",e),enter:_(s,"enter",e)})):a[i]=(0,c.cloneElement)(s,{in:!1}):a[i]=(0,c.cloneElement)(s,{onExited:n.bind(null,s),in:!0,exit:_(s,"exit",e),enter:_(s,"enter",e)})}}),a}var N=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},T=function(e){function t(t,n){var r,a=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:a,firstRender:!0},r}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,a=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,O(n.children,function(e){return(0,c.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:_(e,"appear",n),enter:_(e,"enter",n),exit:_(e,"exit",n)})})):A(e,a,i),firstRender:!1}},n.handleExited=function(e,t){var n=O(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=a(e,["component","childFactory"]),i=this.state.contextValue,s=N(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?l().createElement(f.Provider,{value:i},s):l().createElement(f.Provider,{value:i},l().createElement(t,r,s))},t}(l().Component);T.propTypes={},T.defaultProps={component:"div",childFactory:function(e){return e}};const R=T;var $=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}s(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,a=this.props.children,i=l().Children.toArray(a)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var s=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](s)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=a(e,["children","in"]),i=l().Children.toArray(t),s=i[0],o=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,l().createElement(R,r,n?l().cloneElement(s,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):l().cloneElement(o,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(l().Component);$.propTypes={};const j=$;var P,M;var D="out-in",L="in-out",F=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},I=((P={})[D]=function(e){var t=e.current,n=e.changeState;return l().cloneElement(t,{in:!1,onExited:F(t,"onExited",function(){n(y,null)})})},P[L]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,l().cloneElement(r,{in:!0,onEntered:F(r,"onEntered",function(){n(y)})})]},P),q=((M={})[D]=function(e){var t=e.children,n=e.changeState;return l().cloneElement(t,{in:!0,onEntered:F(t,"onEntered",function(){n(g,l().cloneElement(t,{in:!0}))})})},M[L]=function(e){var t=e.current,n=e.children,r=e.changeState;return[l().cloneElement(t,{in:!1,onExited:F(t,"onExited",function(){r(g,l().cloneElement(n,{in:!0}))})}),l().cloneElement(n,{in:!0})]},M),G=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).state={status:g,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===y&&e.mode===L?{status:y}:!t.current||(n=t.current,r=e.children,n===r||l().isValidElement(n)&&l().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:l().cloneElement(e.children,{in:!0})}:{status:x};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,a=this.state,i=a.status,s=a.current,o={children:n,current:s,changeState:this.changeState,status:i};switch(i){case y:e=q[r](o);break;case x:e=I[r](o);break;case g:e=s}return l().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(l().Component);G.propTypes={},G.defaultProps={mode:D};const V=G},442(t){"use strict";t.exports=e},544(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(88),c=n(310),l=i(n(442)),u=s(n(968)),d=s(n(908));class p extends l.default.Component{constructor(e){super(e),this.wrapper=(0,l.createRef)(),this.nodeRef=(0,l.createRef)(),this.getStyles=(e,t)=>{const n=d.default[e](t,this.props),r=this.props.styles?this.props.styles[e]:void 0;return r?"function"==typeof r?r(n,this.props):r:n},this.cx=(e,...t)=>{const n=Array.isArray(e)?e:[e];return(0,o.cx)(...n.map(e=>{var t;return e?`${null!==(t=this.props.classNamePrefix)&&void 0!==t?t:"_loading_overlay_"}${e}`:""}),...t)},this.state={overflowCSS:{}}}componentDidMount(){const e=window.getComputedStyle(this.wrapper.current),t=["overflow","overflowX","overflowY"].reduce((t,n)=>("visible"!==e[n]&&(t[n]="hidden"),t),{});this.setState({overflowCSS:t})}componentDidUpdate(e){const{active:t}=this.props;t&&(this.wrapper.current.scrollTop=0)}render(){const{children:e,className:t,onClick:n,active:r,fadeSpeed:a=500,spinner:i,text:s}=this.props;return l.default.createElement("div",{"data-testid":"wrapper",ref:this.wrapper,className:this.cx(["wrapper",r&&"wrapper--active"],(0,o.css)(this.getStyles("wrapper",r?this.state.overflowCSS:{})),t)},l.default.createElement(c.CSSTransition,{in:r,classNames:"_loading-overlay-transition",timeout:a,unmountOnExit:!0,ref:this.nodeRef,addEndListener:()=>{}},e=>l.default.createElement("div",{"data-testid":"overlay",className:this.cx("overlay",(0,o.css)(this.getStyles("overlay",e))),onClick:n},l.default.createElement("div",{className:this.cx("content",(0,o.css)(this.getStyles("content"))),ref:this.nodeRef},i&&("boolean"==typeof i?l.default.createElement(u.default,{cx:this.cx,getStyles:this.getStyles}):i),s))),e)}}t.default=p},556(e,t,n){e.exports=n(694)()},694(e,t,n){"use strict";var r=n(925);function a(){}function i(){}i.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,i,s){if(s!==r){var o=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:a};return n.PropTypes=n,n}},862(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(n(556)),i=r(n(442)),s=r(n(544));t.default=e=>t=>{var n;return(n=class extends i.default.Component{componentDidMount(){if(t){const{wrapper:e}=this.overlay,t=e.current.firstChild,n=e.current.parentElement.querySelector("thead"),r=e.current.parentElement.querySelector("tbody"),a=e.current.parentElement.querySelector("caption");let i=window.getComputedStyle(n).height;a&&(i=parseFloat(i.replace("px","")).toString(),i+=parseFloat(window.getComputedStyle(a).height.replace("px","")).toString(),i=`${i}px`),t.style.marginTop=i,t.style.height=window.getComputedStyle(r).height}}render(){return i.default.createElement(s.default,{ref:e=>this.overlay=e,...e,active:t},this.props.children)}}).propTypes={children:a.default.element.isRequired},n}},908(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(88),a=r.keyframes`
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNgOverlay=t(require("react"),require("react-dom")):e.ReactBootstrapTableNgOverlay=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={3(e){"use strict";e.exports=t},88(e,t,n){"use strict";n.r(t),n.d(t,{cache:()=>Re,css:()=>Ae,cx:()=>Se,flush:()=>ke,getRegisteredStyles:()=>Oe,hydrate:()=>we,injectGlobal:()=>_e,keyframes:()=>Ne,merge:()=>Ce,sheet:()=>Te});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach(function(e){var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)}),this.tags=[],this.ctr=0},e}(),a=Math.abs,i=String.fromCharCode,s=Object.assign;function o(e){return e.trim()}function c(e,t,n){return e.replace(t,n)}function l(e,t){return e.indexOf(t)}function u(e,t){return 0|e.charCodeAt(t)}function d(e,t,n){return e.slice(t,n)}function p(e){return e.length}function f(e){return e.length}function h(e,t){return t.push(e),e}var v=1,m=1,g=0,y=0,x=0,E="";function b(e,t,n,r,a,i,s){return{value:e,root:t,parent:n,type:r,props:a,children:i,line:v,column:m,length:s,return:""}}function k(e,t){return s(b("",null,null,"",null,null,0),e,{length:-e.length},t)}function w(){return x=y>0?u(E,--y):0,m--,10===x&&(m=1,v--),x}function S(){return x=y<g?u(E,y++):0,m++,10===x&&(m=1,v++),x}function C(){return u(E,y)}function O(){return y}function _(e,t){return d(E,e,t)}function N(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function A(e){return v=m=1,g=p(E=e),y=0,[]}function T(e){return E="",e}function R(e){return o(_(y-1,j(91===e?e+2:40===e?e+1:e)))}function $(e){for(;(x=C())&&x<33;)S();return N(e)>2||N(x)>3?"":" "}function P(e,t){for(;--t&&S()&&!(x<48||x>102||x>57&&x<65||x>70&&x<97););return _(e,O()+(t<6&&32==C()&&32==S()))}function j(e){for(;S();)switch(x){case e:return y;case 34:case 39:34!==e&&39!==e&&j(x);break;case 40:41===e&&j(e);break;case 92:S()}return y}function M(e,t){for(;S()&&e+x!==57&&(e+x!==84||47!==C()););return"/*"+_(t,y-1)+"*"+i(47===e?e:S())}function D(e){for(;!N(C());)S();return _(e,y)}var L="-ms-",F="-moz-",I="-webkit-",q="comm",G="rule",V="decl",W="@keyframes";function z(e,t){for(var n="",r=f(e),a=0;a<r;a++)n+=t(e[a],a,e,t)||"";return n}function U(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case V:return e.return=e.return||e.value;case q:return"";case W:return e.return=e.value+"{"+z(e.children,r)+"}";case G:e.value=e.props.join(",")}return p(n=z(e.children,r))?e.return=e.value+"{"+n+"}":""}function B(e){return T(H("",null,null,null,[""],e=A(e),0,[0],e))}function H(e,t,n,r,a,s,o,d,f){for(var v=0,m=0,g=o,y=0,x=0,E=0,b=1,k=1,_=1,N=0,A="",T=a,j=s,L=r,F=A;k;)switch(E=N,N=S()){case 40:if(108!=E&&58==u(F,g-1)){-1!=l(F+=c(R(N),"&","&\f"),"&\f")&&(_=-1);break}case 34:case 39:case 91:F+=R(N);break;case 9:case 10:case 13:case 32:F+=$(E);break;case 92:F+=P(O()-1,7);continue;case 47:switch(C()){case 42:case 47:h(Y(M(S(),O()),t,n),f);break;default:F+="/"}break;case 123*b:d[v++]=p(F)*_;case 125*b:case 59:case 0:switch(N){case 0:case 125:k=0;case 59+m:-1==_&&(F=c(F,/\f/g,"")),x>0&&p(F)-g&&h(x>32?Z(F+";",r,n,g-1):Z(c(F," ","")+";",r,n,g-2),f);break;case 59:F+=";";default:if(h(L=X(F,t,n,v,m,a,d,A,T=[],j=[],g),s),123===N)if(0===m)H(F,t,L,L,T,s,g,d,j);else switch(99===y&&110===u(F,3)?100:y){case 100:case 108:case 109:case 115:H(e,L,L,r&&h(X(e,L,L,0,0,a,d,A,a,T=[],g),j),a,j,g,d,r?T:j);break;default:H(F,L,L,L,[""],j,0,d,j)}}v=m=x=0,b=_=1,A=F="",g=o;break;case 58:g=1+p(F),x=E;default:if(b<1)if(123==N)--b;else if(125==N&&0==b++&&125==w())continue;switch(F+=i(N),N*b){case 38:_=m>0?1:(F+="\f",-1);break;case 44:d[v++]=(p(F)-1)*_,_=1;break;case 64:45===C()&&(F+=R(S())),y=C(),m=g=p(A=F+=D(O())),N++;break;case 45:45===E&&2==p(F)&&(b=0)}}return s}function X(e,t,n,r,i,s,l,u,p,h,v){for(var m=i-1,g=0===i?s:[""],y=f(g),x=0,E=0,k=0;x<r;++x)for(var w=0,S=d(e,m+1,m=a(E=l[x])),C=e;w<y;++w)(C=o(E>0?g[w]+" "+S:c(S,/&\f/g,g[w])))&&(p[k++]=C);return b(e,t,n,0===i?G:u,p,h,v)}function Y(e,t,n){return b(e,t,n,q,i(x),d(e,2,-2),0)}function Z(e,t,n,r){return b(e,t,n,V,d(e,0,r),d(e,r+1,-1),r)}var J=function(e,t,n){for(var r=0,a=0;r=a,a=C(),38===r&&12===a&&(t[n]=1),!N(a);)S();return _(e,y)},K=function(e,t){return T(function(e,t){var n=-1,r=44;do{switch(N(r)){case 0:38===r&&12===C()&&(t[n]=1),e[n]+=J(y-1,t,n);break;case 2:e[n]+=R(r);break;case 4:if(44===r){e[++n]=58===C()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=i(r)}}while(r=S());return e}(A(e),t))},Q=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Q.get(n))&&!r){Q.set(e,!0);for(var a=[],i=K(t,a),s=n.props,o=0,c=0;o<i.length;o++)for(var l=0;l<s.length;l++,c++)e.props[c]=a[o]?i[o].replace(/&\f/g,s[l]):s[l]+" "+i[o]}}},te=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function ne(e,t){switch(function(e,t){return 45^u(e,0)?(((t<<2^u(e,0))<<2^u(e,1))<<2^u(e,2))<<2^u(e,3):0}(e,t)){case 5103:return I+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return I+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return I+e+F+e+L+e+e;case 6828:case 4268:return I+e+L+e+e;case 6165:return I+e+L+"flex-"+e+e;case 5187:return I+e+c(e,/(\w+).+(:[^]+)/,I+"box-$1$2"+L+"flex-$1$2")+e;case 5443:return I+e+L+"flex-item-"+c(e,/flex-|-self/,"")+e;case 4675:return I+e+L+"flex-line-pack"+c(e,/align-content|flex-|-self/,"")+e;case 5548:return I+e+L+c(e,"shrink","negative")+e;case 5292:return I+e+L+c(e,"basis","preferred-size")+e;case 6060:return I+"box-"+c(e,"-grow","")+I+e+L+c(e,"grow","positive")+e;case 4554:return I+c(e,/([^-])(transform)/g,"$1"+I+"$2")+e;case 6187:return c(c(c(e,/(zoom-|grab)/,I+"$1"),/(image-set)/,I+"$1"),e,"")+e;case 5495:case 3959:return c(e,/(image-set\([^]*)/,I+"$1$`$1");case 4968:return c(c(e,/(.+:)(flex-)?(.*)/,I+"box-pack:$3"+L+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+I+e+e;case 4095:case 3583:case 4068:case 2532:return c(e,/(.+)-inline(.+)/,I+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(p(e)-1-t>6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return c(e,/(.+:)(.+)-([^]+)/,"$1"+I+"$2-$3$1"+F+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~l(e,"stretch")?ne(c(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,p(e)-3-(~l(e,"!important")&&10))){case 107:return c(e,":",":"+I)+e;case 101:return c(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+I+(45===u(e,14)?"inline-":"")+"box$3$1"+I+"$2$3$1"+L+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return I+e+L+e+e}return e}var re=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case V:e.return=ne(e.value,e.length);break;case W:return z([k(e,{value:c(e.value,"@","@"+I)})],r);case G:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return z([k(e,{props:[c(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return z([k(e,{props:[c(t,/:(plac\w+)/,":"+I+"input-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,":-moz-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,L+"input-$1")]})],r)}return""})}}],ae=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))})}var a,i,s=e.stylisPlugins||re,o={},c=[];a=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)o[t[n]]=!0;c.push(e)});var l,u,d,p,h=[U,(p=function(e){l.insert(e)},function(e){e.root||(e=e.return)&&p(e)})],v=(u=[ee,te].concat(s,h),d=f(u),function(e,t,n,r){for(var a="",i=0;i<d;i++)a+=u[i](e,t,n,r)||"";return a});i=function(e,t,n,r){l=n,z(B(e?e+"{"+t.styles+"}":t.styles),v),r&&(m.inserted[t.name]=!0)};var m={key:t,sheet:new r({key:t,container:a,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:o,registered:{},insert:i};return m.sheet.hydrate(c),m};var ie={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function se(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var oe=/[A-Z]|^ms/g,ce=/_EMO_([^_]+?)_([^]*?)_EMO_/g,le=function(e){return 45===e.charCodeAt(1)},ue=function(e){return null!=e&&"boolean"!=typeof e},de=se(function(e){return le(e)?e:e.replace(oe,"-$&").toLowerCase()}),pe=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(ce,function(e,t,n){return he={name:t,styles:n,next:he},t})}return 1===ie[e]||le(e)||"number"!=typeof t||0===t?t:t+"px"};function fe(e,t,n){if(null==n)return"";var r=n;if(void 0!==r.__emotion_styles)return r;switch(typeof n){case"boolean":return"";case"object":var a=n;if(1===a.anim)return he={name:a.name,styles:a.styles,next:he},a.name;var i=n;if(void 0!==i.styles){var s=i.next;if(void 0!==s)for(;void 0!==s;)he={name:s.name,styles:s.styles,next:he},s=s.next;return i.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var a=0;a<n.length;a++)r+=fe(e,t,n[a])+";";else for(var i in n){var s=n[i];if("object"!=typeof s){var o=s;null!=t&&void 0!==t[o]?r+=i+"{"+t[o]+"}":ue(o)&&(r+=de(i)+":"+pe(i,o)+";")}else if(!Array.isArray(s)||"string"!=typeof s[0]||null!=t&&void 0!==t[s[0]]){var c=fe(e,t,s);switch(i){case"animation":case"animationName":r+=de(i)+":"+c+";";break;default:r+=i+"{"+c+"}"}}else for(var l=0;l<s.length;l++)ue(s[l])&&(r+=de(i)+":"+pe(i,s[l])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=he,c=n(e);return he=o,fe(e,t,c)}}var l=n;if(null==t)return l;var u=t[l];return void 0!==u?u:l}var he,ve=/label:\s*([^\s;{]+)\s*(;|$)/g;function me(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,a="";he=void 0;var i=e[0];null==i||void 0===i.raw?(r=!1,a+=fe(n,t,i)):a+=i[0];for(var s=1;s<e.length;s++){if(a+=fe(n,t,e[s]),r)a+=i[s]}ve.lastIndex=0;for(var o,c="";null!==(o=ve.exec(a));)c+="-"+o[1];var l=function(e){for(var t,n=0,r=0,a=e.length;a>=4;++r,a-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(a){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(a)+c;return{name:l,styles:a,next:he}}function ge(e,t,n){var r="";return n.split(" ").forEach(function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(r+=n+" ")}),r}function ye(e,t){if(void 0===e.inserted[t.name])return e.insert("",t,e.sheet,!0)}function xe(e,t,n){var r=[],a=ge(e,r,n);return r.length<2?n:a+t(r)}var Ee=function e(t){for(var n="",r=0;r<t.length;r++){var a=t[r];if(null!=a){var i=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))i=e(a);else for(var s in i="",a)a[s]&&s&&(i&&(i+=" "),i+=s);break;default:i=a}i&&(n&&(n+=" "),n+=i)}}return n},be=function(e){var t=ae(e);t.sheet.speedy=function(e){this.isSpeedy=e},t.compat=!0;var n=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered,void 0);return function(e,t,n){!function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)}(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}(t,a,!1),t.key+"-"+a.name};return{css:n,cx:function(){for(var e=arguments.length,r=new Array(e),a=0;a<e;a++)r[a]=arguments[a];return xe(t.registered,n,Ee(r))},injectGlobal:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered);ye(t,a)},keyframes:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered),i="animation-"+a.name;return ye(t,{name:a.name,styles:"@keyframes "+i+"{"+a.styles+"}"}),i},hydrate:function(e){e.forEach(function(e){t.inserted[e]=!0})},flush:function(){t.registered={},t.inserted={},t.sheet.flush()},sheet:t.sheet,cache:t,getRegisteredStyles:ge.bind(null,t.registered),merge:xe.bind(null,t.registered,n)}}({key:"css"}),ke=be.flush,we=be.hydrate,Se=be.cx,Ce=be.merge,Oe=be.getRegisteredStyles,_e=be.injectGlobal,Ne=be.keyframes,Ae=be.css,Te=be.sheet,Re=be.cache},310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function a(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function s(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function o(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>C,ReplaceTransition:()=>P,SwitchTransition:()=>V,Transition:()=>k,TransitionGroup:()=>R,config:()=>p});var c=n(442),l=n.n(c),u=n(3),d=n.n(u);const p={disabled:!1},f=l().createContext(null);var h=function(e){return e.scrollTop},v="unmounted",m="exited",g="entering",y="entered",x="exiting",E=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var a,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(a=m,r.appearStatus=g):a=y:a=t.unmountOnExit||t.mountOnEnter?v:m,r.state={status:a},r.nextCallback=null,r}s(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:m}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==g&&n!==y&&(t=g):n!==g&&n!==y||(t=x)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===g){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===m&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,a=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=a[0],s=a[1],o=this.getTimeouts(),c=r?o.appear:o.enter;!e&&!n||p.disabled?this.safeSetState({status:y},function(){t.props.onEntered(i)}):(this.props.onEnter(i,s),this.safeSetState({status:g},function(){t.props.onEntering(i,s),t.onTransitionEnd(c,function(){t.safeSetState({status:y},function(){t.props.onEntered(i,s)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!p.disabled?(this.props.onExit(r),this.safeSetState({status:x},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:m},function(){e.props.onExited(r)})})})):this.safeSetState({status:m},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var a=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=a[0],s=a[1];this.props.addEndListener(i,s)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,a(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return l().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):l().cloneElement(l().Children.only(n),r))},t}(l().Component);function b(){}E.contextType=f,E.propTypes={},E.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},E.UNMOUNTED=v,E.EXITED=m,E.ENTERING=g,E.ENTERED=y,E.EXITING=x;const k=E;var w=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=o(n.className,r):n.setAttribute("class",o(n.className&&n.className.baseVal||"",r)));var n,r})},S=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1];t.removeClasses(a,"exit"),t.addClass(a,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1]?"appear":"enter";t.addClass(a,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1]?"appear":"enter";t.removeClasses(a,i),t.addClass(a,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,a=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:a,activeClassName:r?a+"-active":n[e+"Active"],doneClassName:r?a+"-done":n[e+"Done"]}},t}s(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],a=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&a&&(r+=" "+a),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,a=n.active,i=n.done;this.appliedClasses[t]={},r&&w(e,r),a&&w(e,a),i&&w(e,i)},n.render=function(){var e=this.props,t=(e.classNames,a(e,["classNames"]));return l().createElement(k,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(l().Component);S.defaultProps={classNames:""},S.propTypes={};const C=S;function O(e,t){var n=Object.create(null);return e&&c.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,c.isValidElement)(e)?t(e):e}(e)}),n}function _(e,t,n){return null!=n[t]?n[t]:e.props[t]}function N(e,t,n){var r=O(e.children),a=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,a=Object.create(null),i=[];for(var s in e)s in t?i.length&&(a[s]=i,i=[]):i.push(s);var o={};for(var c in t){if(a[c])for(r=0;r<a[c].length;r++){var l=a[c][r];o[a[c][r]]=n(l)}o[c]=n(c)}for(r=0;r<i.length;r++)o[i[r]]=n(i[r]);return o}(t,r);return Object.keys(a).forEach(function(i){var s=a[i];if((0,c.isValidElement)(s)){var o=i in t,l=i in r,u=t[i],d=(0,c.isValidElement)(u)&&!u.props.in;!l||o&&!d?l||!o||d?l&&o&&(0,c.isValidElement)(u)&&(a[i]=(0,c.cloneElement)(s,{onExited:n.bind(null,s),in:u.props.in,exit:_(s,"exit",e),enter:_(s,"enter",e)})):a[i]=(0,c.cloneElement)(s,{in:!1}):a[i]=(0,c.cloneElement)(s,{onExited:n.bind(null,s),in:!0,exit:_(s,"exit",e),enter:_(s,"enter",e)})}}),a}var A=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},T=function(e){function t(t,n){var r,a=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:a,firstRender:!0},r}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,a=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,O(n.children,function(e){return(0,c.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:_(e,"appear",n),enter:_(e,"enter",n),exit:_(e,"exit",n)})})):N(e,a,i),firstRender:!1}},n.handleExited=function(e,t){var n=O(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=a(e,["component","childFactory"]),i=this.state.contextValue,s=A(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?l().createElement(f.Provider,{value:i},s):l().createElement(f.Provider,{value:i},l().createElement(t,r,s))},t}(l().Component);T.propTypes={},T.defaultProps={component:"div",childFactory:function(e){return e}};const R=T;var $=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}s(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,a=this.props.children,i=l().Children.toArray(a)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var s=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](s)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=a(e,["children","in"]),i=l().Children.toArray(t),s=i[0],o=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,l().createElement(R,r,n?l().cloneElement(s,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):l().cloneElement(o,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(l().Component);$.propTypes={};const P=$;var j,M;var D="out-in",L="in-out",F=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},I=((j={})[D]=function(e){var t=e.current,n=e.changeState;return l().cloneElement(t,{in:!1,onExited:F(t,"onExited",function(){n(g,null)})})},j[L]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,l().cloneElement(r,{in:!0,onEntered:F(r,"onEntered",function(){n(g)})})]},j),q=((M={})[D]=function(e){var t=e.children,n=e.changeState;return l().cloneElement(t,{in:!0,onEntered:F(t,"onEntered",function(){n(y,l().cloneElement(t,{in:!0}))})})},M[L]=function(e){var t=e.current,n=e.children,r=e.changeState;return[l().cloneElement(t,{in:!1,onExited:F(t,"onExited",function(){r(y,l().cloneElement(n,{in:!0}))})}),l().cloneElement(n,{in:!0})]},M),G=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).state={status:y,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===g&&e.mode===L?{status:g}:!t.current||(n=t.current,r=e.children,n===r||l().isValidElement(n)&&l().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:l().cloneElement(e.children,{in:!0})}:{status:x};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,a=this.state,i=a.status,s=a.current,o={children:n,current:s,changeState:this.changeState,status:i};switch(i){case g:e=q[r](o);break;case x:e=I[r](o);break;case y:e=s}return l().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(l().Component);G.propTypes={},G.defaultProps={mode:D};const V=G},346(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=n(88),i=r(n(556)),s=r(n(442)),o=({getStyles:e,cx:t})=>s.default.createElement("div",{className:t("spinner",(0,a.css)(e("spinner")))},s.default.createElement("svg",{viewBox:"25 25 50 50"},s.default.createElement("circle",{cx:"50",cy:"50",r:"20",fill:"none",strokeWidth:"2",strokeMiterlimit:"10"})));o.propTypes={getStyles:i.default.func.isRequired,cx:i.default.func.isRequired},t.default=o},442(t){"use strict";t.exports=e},554(e,t,n){"use strict";var r,a=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),s=0;s<n.length;s++)"default"!==n[s]&&a(t,e,n[s]);return i(t,e),t}),o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const c=n(88),l=n(310),u=s(n(442)),d=o(n(346)),p=o(n(947));class f extends u.default.Component{constructor(e){super(e),this.wrapper=(0,u.createRef)(),this.nodeRef=(0,u.createRef)(),this.getStyles=(e,t)=>{const n=p.default[e](t,this.props),r=this.props.styles?this.props.styles[e]:void 0;return r?"function"==typeof r?r(n,this.props):r:n},this.cx=(e,...t)=>{const n=Array.isArray(e)?e:[e];return(0,c.cx)(...n.map(e=>e?`${this.props.classNamePrefix??"_loading_overlay_"}${e}`:""),...t)},this.state={overflowCSS:{}}}componentDidMount(){const e=window.getComputedStyle(this.wrapper.current),t=["overflow","overflowX","overflowY"].reduce((t,n)=>("visible"!==e[n]&&(t[n]="hidden"),t),{});this.setState({overflowCSS:t})}componentDidUpdate(e){const{active:t}=this.props;t&&(this.wrapper.current.scrollTop=0)}render(){const{children:e,className:t,onClick:n,active:r,fadeSpeed:a=500,spinner:i,text:s}=this.props;return u.default.createElement("div",{"data-testid":"wrapper",ref:this.wrapper,className:this.cx(["wrapper",r&&"wrapper--active"],(0,c.css)(this.getStyles("wrapper",r?this.state.overflowCSS:{})),t)},u.default.createElement(l.CSSTransition,{in:r,classNames:"_loading-overlay-transition",timeout:a,unmountOnExit:!0,ref:this.nodeRef,addEndListener:()=>{}},e=>u.default.createElement("div",{"data-testid":"overlay",className:this.cx("overlay",(0,c.css)(this.getStyles("overlay",e))),onClick:n},u.default.createElement("div",{className:this.cx("content",(0,c.css)(this.getStyles("content"))),ref:this.nodeRef},i&&("boolean"==typeof i?u.default.createElement(d.default,{cx:this.cx,getStyles:this.getStyles}):i),s))),e)}}t.default=f},556(e,t,n){e.exports=n(694)()},694(e,t,n){"use strict";var r=n(925);function a(){}function i(){}i.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,i,s){if(s!==r){var o=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:a};return n.PropTypes=n,n}},862(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(n(556)),i=r(n(442)),s=r(n(554));t.default=e=>t=>{var n;return(n=class extends i.default.Component{componentDidMount(){if(t){const{wrapper:e}=this.overlay,t=e.current.firstChild,n=e.current.parentElement.querySelector("thead"),r=e.current.parentElement.querySelector("tbody"),a=e.current.parentElement.querySelector("caption");let i=window.getComputedStyle(n).height;a&&(i=parseFloat(i.replace("px","")).toString(),i+=parseFloat(window.getComputedStyle(a).height.replace("px","")).toString(),i=`${i}px`),t.style.marginTop=i,t.style.height=window.getComputedStyle(r).height}}render(){return i.default.createElement(s.default,{ref:e=>{this.overlay=e},...e,active:t},this.props.children)}}).propTypes={children:a.default.element.isRequired},n}},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},947(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(88),a=r.keyframes`
|
|
2
2
|
from {
|
|
3
3
|
transform: rotate(0deg);
|
|
4
4
|
}
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
stroke-dasharray: 89,200;
|
|
19
19
|
stroke-dashoffset: -124px;
|
|
20
20
|
}
|
|
21
|
-
`,s={wrapper:e=>
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLW92ZXJsYXkvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctb3ZlcmxheS5qcyIsIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBQzFCLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxRQUFTLGFBQWNKLEdBQ0wsaUJBQVpDLFFBQ2RBLFFBQXNDLDZCQUFJRCxFQUFRRyxRQUFRLFNBQVVBLFFBQVEsY0FFNUVKLEVBQW1DLDZCQUFJQyxFQUFRRCxFQUFZLE1BQUdBLEVBQWUsU0FDOUUsQ0FURCxDQVNHTyxLQUFNLENBQUNDLEVBQWtDQyxJLCtCQ1Q1Q04sRUFBT0QsUUFBVU8sQyxpTUN5RGpCLElBQUlDLEVBQTBCLFdBRTVCLFNBQVNBLEVBQVdDLEdBQ2xCLElBQUlDLEVBQVFDLEtBRVpBLEtBQUtDLFdBQWEsU0FBVUMsR0FDMUIsSUFBSUMsRUFJQUEsRUFGc0IsSUFBdEJKLEVBQU1LLEtBQUtDLE9BQ1ROLEVBQU1PLGVBQ0NQLEVBQU1PLGVBQWVDLFlBQ3JCUixFQUFNUyxRQUNOVCxFQUFNVSxVQUFVQyxXQUVoQlgsRUFBTUksT0FHUkosRUFBTUssS0FBS0wsRUFBTUssS0FBS0MsT0FBUyxHQUFHRSxZQUc3Q1IsRUFBTVUsVUFBVUUsYUFBYVQsRUFBS0MsR0FFbENKLEVBQU1LLEtBQUtRLEtBQUtWLEVBQ2xCLEVBRUFGLEtBQUthLGNBQThCQyxJQUFuQmhCLEVBQVFpQixRQUF3Q2pCLEVBQVFpQixPQUN4RWYsS0FBS0ksS0FBTyxHQUNaSixLQUFLZ0IsSUFBTSxFQUNYaEIsS0FBS2lCLE1BQVFuQixFQUFRbUIsTUFFckJqQixLQUFLa0IsSUFBTXBCLEVBQVFvQixJQUNuQmxCLEtBQUtTLFVBQVlYLEVBQVFXLFVBQ3pCVCxLQUFLUSxRQUFVVixFQUFRVSxRQUN2QlIs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LEVBQVFBLEVBQU9ELFFBQVNrbUIsR0FHcEVqbUIsRUFBT0QsT0FDZixDLE9DckJBa21CLEVBQW9CeFQsRUFBS3pTLElBQ3hCLElBQUlxbUIsRUFBU3JtQixHQUFVQSxFQUFPcWYsV0FDN0IsSUFBT3JmLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBaW1CLEVBQW9CSyxFQUFFRCxFQUFRLENBQUVFLEVBQUdGLElBQzVCQSxHQ0xSSixFQUFvQkssRUFBSSxDQUFDdm1CLEVBQVN5bUIsS0FDakMsSUFBSSxJQUFJNWtCLEtBQU80a0IsRUFDWFAsRUFBb0I5UyxFQUFFcVQsRUFBWTVrQixLQUFTcWtCLEVBQW9COVMsRUFBRXBULEVBQVM2QixJQUM1RThCLE9BQU8rYixlQUFlMWYsRUFBUzZCLEVBQUssQ0FBRTRkLFlBQVksRUFBTTlXLElBQUs4ZCxFQUFXNWtCLE1DSjNFcWtCLEVBQW9COVMsRUFBSSxDQUFDaEUsRUFBS3VMLElBQVVoWCxPQUFPNUIsVUFBVThRLGVBQWV0SixLQUFLNkYsRUFBS3VMLEdDQ2xGdUwsRUFBb0J0VCxFQUFLNVMsSUFDSCxvQkFBWDBtQixRQUEwQkEsT0FBT0MsYUFDMUNoakIsT0FBTytiLGVBQWUxZixFQUFTMG1CLE9BQU9DLFlBQWEsQ0FBRTdpQixNQUFPLFdBRTdESCxPQUFPK2IsZUFBZTFmLEVBQVMsYUFBYyxDQUFFOEQsT0FBTyxLQ0Y3Qm9pQixFQUFvQixJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9Ub2tlbml6ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2Nzcy9jcmVhdGUtaW5zdGFuY2UvZGlzdC9lbW90aW9uLWNzcy1jcmVhdGUtaW5zdGFuY2UuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvZGlzdC9lbW90aW9uLWNzcy5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vcmVtb3ZlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvcmVmbG93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9DU1NUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vYWRkQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9oYXNDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvQ2hpbGRNYXBwaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vUmVwbGFjZVRyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1N3aXRjaFRyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1sb2FkaW5nLW92ZXJsYXktbmV4dGdlbi9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1vdmVybGF5L2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtbG9hZGluZy1vdmVybGF5LW5leHRnZW4vbGliL3N0eWxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWxvYWRpbmctb3ZlcmxheS1uZXh0Z2VuL2xpYi9jb21wb25lbnRzL1NwaW5uZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nT3ZlcmxheVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdPdmVybGF5XCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzNfXykgPT4ge1xucmV0dXJuICIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fM19fOyIsInZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwg4p2k77iPXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG5cbmZ1bmN0aW9uIHNoZWV0Rm9yVGFnKHRhZykge1xuICBpZiAodGFnLnNoZWV0KSB7XG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH0gLy8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIHJldHVybiB3aXRoIGEgdmFsdWVcbiAgLy8gVFMgY2FuJ3QgdW5kZXJzdGFuZCBpdCB0aG91Z2ggc28gd2UgbWFrZSBpdCBzdG9wIGNvbXBsYWluaW5nIGhlcmVcblxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBvcHRpb25zLmtleSk7XG5cbiAgaWYgKG9wdGlvbnMubm9uY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgb3B0aW9ucy5ub25jZSk7XG4gIH1cblxuICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICByZXR1cm4gdGFnO1xufVxuXG52YXIgU3R5bGVTaGVldCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIC8vIFVzaW5nIE5vZGUgaW5zdGVhZCBvZiBIVE1MRWxlbWVudCBzaW5jZSBjb250YWluZXIgbWF5IGJlIGEgU2hhZG93Um9vdFxuICBmdW5jdGlvbiBTdHlsZVNoZWV0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5faW5zZXJ0VGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgICAgdmFyIGJlZm9yZTtcblxuICAgICAgaWYgKF90aGlzLnRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChfdGhpcy5pbnNlcnRpb25Qb2ludCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmluc2VydGlvblBvaW50Lm5leHRTaWJsaW5nO1xuICAgICAgICB9IGVsc2UgaWYgKF90aGlzLnByZXBlbmQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5iZWZvcmU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZm9yZSA9IF90aGlzLnRhZ3NbX3RoaXMudGFncy5sZW5ndGggLSAxXS5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZSh0YWcsIGJlZm9yZSk7XG5cbiAgICAgIF90aGlzLnRhZ3MucHVzaCh0YWcpO1xuICAgIH07XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gb3B0aW9ucy5zcGVlZHkgPT09IHVuZGVmaW5lZCA/ICFpc0RldmVsb3BtZW50IDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdGhpcy50YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykge1xuICAgICAgdmFyIF90YWckcGFyZW50Tm9kZTtcblxuICAgICAgcmV0dXJuIChfdGFnJHBhcmVudE5vZGUgPSB0YWcucGFyZW50Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90YWckcGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwiLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFic1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCAodmFsdWUsIGxlbmd0aCkge1xuXHRyZXR1cm4gY2hhcmF0KHZhbHVlLCAwKSBeIDQ1ID8gKCgoKCgoKGxlbmd0aCA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMCkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAxKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDIpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMykgOiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICogQHJldHVybiB7c3RyaW5nP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoICh2YWx1ZSwgcGF0dGVybikge1xuXHRyZXR1cm4gKHZhbHVlID0gcGF0dGVybi5leGVjKHZhbHVlKSkgPyB2YWx1ZVswXSA6IHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcGF0dGVyblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlICh2YWx1ZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoKSB7XG5cdHJldHVybiB2YWx1ZS5pbmRleE9mKHNlYXJjaClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhcmF0ICh2YWx1ZSwgaW5kZXgpIHtcblx0cmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpIHwgMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHIgKHZhbHVlLCBiZWdpbiwgZW5kKSB7XG5cdHJldHVybiB2YWx1ZS5zbGljZShiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpemVvZiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHthbnlbXX0gYXJyYXlcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCAodmFsdWUsIGFycmF5KSB7XG5cdHJldHVybiBhcnJheS5wdXNoKHZhbHVlKSwgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUgKGFycmF5LCBjYWxsYmFjaykge1xuXHRyZXR1cm4gYXJyYXkubWFwKGNhbGxiYWNrKS5qb2luKCcnKVxufVxuIiwiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuZXhwb3J0IHZhciBMQVlFUiA9ICdAbGF5ZXInXG4iLCJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBMQVlFUjogaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSBicmVha1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIGNoYXJhdCwgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDogaWYgKGFtcGVyc2FuZCA9PSAtMSkgY2hhcmFjdGVycyA9IHJlcGxhY2UoY2hhcmFjdGVycywgL1xcZi9nLCAnJylcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCJpbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnO1xuaW1wb3J0IHsgZGVhbGxvYywgYWxsb2MsIG5leHQsIHRva2VuLCBmcm9tLCBwZWVrLCBkZWxpbWl0LCBzbGljZSwgcG9zaXRpb24sIFJVTEVTRVQsIGNvbWJpbmUsIG1hdGNoLCBzZXJpYWxpemUsIGNvcHksIHJlcGxhY2UsIFdFQktJVCwgTU9aLCBNUywgS0VZRlJBTUVTLCBERUNMQVJBVElPTiwgaGFzaCwgY2hhcmF0LCBzdHJsZW4sIGluZGV4b2YsIHN0cmluZ2lmeSwgcnVsZXNoZWV0LCBtaWRkbGV3YXJlLCBjb21waWxlIH0gZnJvbSAnc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcgPSBmdW5jdGlvbiBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcoYmVnaW4sIHBvaW50cywgaW5kZXgpIHtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgdmFyIGNoYXJhY3RlciA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwcmV2aW91cyA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSBwZWVrKCk7IC8vICZcXGZcblxuICAgIGlmIChwcmV2aW91cyA9PT0gMzggJiYgY2hhcmFjdGVyID09PSAxMikge1xuICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZShiZWdpbiwgcG9zaXRpb24pO1xufTtcblxudmFyIHRvUnVsZXMgPSBmdW5jdGlvbiB0b1J1bGVzKHBhcnNlZCwgcG9pbnRzKSB7XG4gIC8vIHByZXRlbmQgd2UndmUgc3RhcnRlZCB3aXRoIGEgY29tbWFcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjaGFyYWN0ZXIgPSA0NDtcblxuICBkbyB7XG4gICAgc3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vICZcXGZcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gMzggJiYgcGVlaygpID09PSAxMikge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm90IDEwMCUgY29ycmVjdCwgd2UgZG9uJ3QgYWNjb3VudCBmb3IgbGl0ZXJhbCBzZXF1ZW5jZXMgaGVyZSAtIGxpa2UgZm9yIGV4YW1wbGUgcXVvdGVkIHN0cmluZ3NcbiAgICAgICAgICAvLyBzdHlsaXMgaW5zZXJ0cyBcXGYgYWZ0ZXIgJiB0byBrbm93IHdoZW4gJiB3aGVyZSBpdCBzaG91bGQgcmVwbGFjZSB0aGlzIHNlcXVlbmNlIHdpdGggdGhlIGNvbnRleHQgc2VsZWN0b3JcbiAgICAgICAgICAvLyBhbmQgd2hlbiBpdCBzaG91bGQganVzdCBjb25jYXRlbmF0ZSB0aGUgb3V0ZXIgYW5kIGlubmVyIHNlbGVjdG9yc1xuICAgICAgICAgIC8vIGl0J3MgdmVyeSB1bmxpa2VseSBmb3IgdGhpcyBzZXF1ZW5jZSB0byBhY3R1YWxseSBhcHBlYXIgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgc28gd2UganVzdCBsZXZlcmFnZSB0aGlzIGZhY3QgaGVyZVxuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcocG9zaXRpb24gLSAxLCBwb2ludHMsIGluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBkZWxpbWl0KGNoYXJhY3Rlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIC8vIGNvbW1hXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDQ0KSB7XG4gICAgICAgICAgLy8gY29sb25cbiAgICAgICAgICBwYXJzZWRbKytpbmRleF0gPSBwZWVrKCkgPT09IDU4ID8gJyZcXGYnIDogJyc7XG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IHBhcnNlZFtpbmRleF0ubGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZnJvbShjaGFyYWN0ZXIpO1xuICAgIH1cbiAgfSB3aGlsZSAoY2hhcmFjdGVyID0gbmV4dCgpKTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxudmFyIGdldFJ1bGVzID0gZnVuY3Rpb24gZ2V0UnVsZXModmFsdWUsIHBvaW50cykge1xuICByZXR1cm4gZGVhbGxvYyh0b1J1bGVzKGFsbG9jKHZhbHVlKSwgcG9pbnRzKSk7XG59OyAvLyBXZWFrU2V0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIGJ1dCBvbmx5IFdlYWtNYXAgaXMgc3VwcG9ydGVkIGluIElFMTFcblxuXG52YXIgZml4ZWRFbGVtZW50cyA9IC8qICNfX1BVUkVfXyAqL25ldyBXZWFrTWFwKCk7XG52YXIgY29tcGF0ID0gZnVuY3Rpb24gY29tcGF0KGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8ICFlbGVtZW50LnBhcmVudCB8fCAvLyBwb3NpdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBjb250YWlucyBwc2V1ZG9cbiAgLy8gbmVnYXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgaGFzIGJlZW4gYWxyZWFkeSBwcmVmaXhlZFxuICBlbGVtZW50Lmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gIHZhciBpc0ltcGxpY2l0UnVsZSA9IGVsZW1lbnQuY29sdW1uID09PSBwYXJlbnQuY29sdW1uICYmIGVsZW1lbnQubGluZSA9PT0gcGFyZW50LmxpbmU7XG5cbiAgd2hpbGUgKHBhcmVudC50eXBlICE9PSAncnVsZScpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gIH0gLy8gc2hvcnQtY2lyY3VpdCBmb3IgdGhlIHNpbXBsZXN0IGNhc2VcblxuXG4gIGlmIChlbGVtZW50LnByb3BzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZS5jaGFyQ29kZUF0KDApICE9PSA1OFxuICAvKiBjb2xvbiAqL1xuICAmJiAhZml4ZWRFbGVtZW50cy5nZXQocGFyZW50KSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZiB0aGlzIGlzIGFuIGltcGxpY2l0bHkgaW5zZXJ0ZWQgcnVsZSAodGhlIG9uZSBlYWdlcmx5IGluc2VydGVkIGF0IHRoZSBlYWNoIG5ldyBuZXN0ZWQgbGV2ZWwpXG4gIC8vIHRoZW4gdGhlIHByb3BzIGhhcyBhbHJlYWR5IGJlZW4gbWFuaXB1bGF0ZWQgYmVmb3JlaGFuZCBhcyB0aGV5IHRoYXQgYXJyYXkgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIGl0cyBcInJ1bGUgcGFyZW50XCJcblxuXG4gIGlmIChpc0ltcGxpY2l0UnVsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpeGVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHRydWUpO1xuICB2YXIgcG9pbnRzID0gW107XG4gIHZhciBydWxlcyA9IGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpO1xuICB2YXIgcGFyZW50UnVsZXMgPSBwYXJlbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcmVudFJ1bGVzLmxlbmd0aDsgaisrLCBrKyspIHtcbiAgICAgIGVsZW1lbnQucHJvcHNba10gPSBwb2ludHNbaV0gPyBydWxlc1tpXS5yZXBsYWNlKC8mXFxmL2csIHBhcmVudFJ1bGVzW2pdKSA6IHBhcmVudFJ1bGVzW2pdICsgXCIgXCIgKyBydWxlc1tpXTtcbiAgICB9XG4gIH1cbn07XG52YXIgcmVtb3ZlTGFiZWwgPSBmdW5jdGlvbiByZW1vdmVMYWJlbChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdkZWNsJykge1xuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIC8vIGNoYXJjb2RlIGZvciBsXG4gICAgdmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gMTA4ICYmIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgdmFsdWUuY2hhckNvZGVBdCgyKSA9PT0gOTgpIHtcbiAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICAgICAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2ggKi9cblxuZnVuY3Rpb24gcHJlZml4KHZhbHVlLCBsZW5ndGgpIHtcbiAgc3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG4gICAgLy8gY29sb3ItYWRqdXN0XG4gICAgY2FzZSA1MTAzOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdwcmludC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbmltYXRpb24sIGFuaW1hdGlvbi0oZGVsYXl8ZGlyZWN0aW9ufGR1cmF0aW9ufGZpbGwtbW9kZXxpdGVyYXRpb24tY291bnR8bmFtZXxwbGF5LXN0YXRlfHRpbWluZy1mdW5jdGlvbilcblxuICAgIGNhc2UgNTczNzpcbiAgICBjYXNlIDQyMDE6XG4gICAgY2FzZSAzMTc3OlxuICAgIGNhc2UgMzQzMzpcbiAgICBjYXNlIDE2NDE6XG4gICAgY2FzZSA0NDU3OlxuICAgIGNhc2UgMjkyMTogLy8gdGV4dC1kZWNvcmF0aW9uLCBmaWx0ZXIsIGNsaXAtcGF0aCwgYmFja2ZhY2UtdmlzaWJpbGl0eSwgY29sdW1uLCBib3gtZGVjb3JhdGlvbi1icmVha1xuXG4gICAgY2FzZSA1NTcyOlxuICAgIGNhc2UgNjM1NjpcbiAgICBjYXNlIDU4NDQ6XG4gICAgY2FzZSAzMTkxOlxuICAgIGNhc2UgNjY0NTpcbiAgICBjYXNlIDMwMDU6IC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXG4gICAgY2FzZSA2MzkxOlxuICAgIGNhc2UgNTg3OTpcbiAgICBjYXNlIDU2MjM6XG4gICAgY2FzZSA2MTM1OlxuICAgIGNhc2UgNDU5OTpcbiAgICBjYXNlIDQ4NTU6IC8vIGJhY2tncm91bmQtY2xpcCwgY29sdW1ucywgY29sdW1uLShjb3VudHxmaWxsfGdhcHxydWxlfHJ1bGUtY29sb3J8cnVsZS1zdHlsZXxydWxlLXdpZHRofHNwYW58d2lkdGgpXG5cbiAgICBjYXNlIDQyMTU6XG4gICAgY2FzZSA2Mzg5OlxuICAgIGNhc2UgNTEwOTpcbiAgICBjYXNlIDUzNjU6XG4gICAgY2FzZSA1NjIxOlxuICAgIGNhc2UgMzgyOTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFwcGVhcmFuY2UsIHVzZXItc2VsZWN0LCB0cmFuc2Zvcm0sIGh5cGhlbnMsIHRleHQtc2l6ZS1hZGp1c3RcblxuICAgIGNhc2UgNTM0OTpcbiAgICBjYXNlIDQyNDY6XG4gICAgY2FzZSA0ODEwOlxuICAgIGNhc2UgNjk2ODpcbiAgICBjYXNlIDI3NTY6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNT1ogKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LCBmbGV4LWRpcmVjdGlvblxuXG4gICAgY2FzZSA2ODI4OlxuICAgIGNhc2UgNDI2ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBvcmRlclxuXG4gICAgY2FzZSA2MTY1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1pdGVtc1xuXG4gICAgY2FzZSA1MTg3OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgcmVwbGFjZSh2YWx1ZSwgLyhcXHcrKS4rKDpbXl0rKS8sIFdFQktJVCArICdib3gtJDEkMicgKyBNUyArICdmbGV4LSQxJDInKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLXNlbGZcblxuICAgIGNhc2UgNTQ0MzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtaXRlbS0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tY29udGVudFxuXG4gICAgY2FzZSA0Njc1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1saW5lLXBhY2snICsgcmVwbGFjZSh2YWx1ZSwgL2FsaWduLWNvbnRlbnR8ZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LXNocmlua1xuXG4gICAgY2FzZSA1NTQ4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWJhc2lzXG5cbiAgICBjYXNlIDUyOTI6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1ncm93XG5cbiAgICBjYXNlIDYwNjA6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ2JveC0nICsgcmVwbGFjZSh2YWx1ZSwgJy1ncm93JywgJycpICsgV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdncm93JywgJ3Bvc2l0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyB0cmFuc2l0aW9uXG5cbiAgICBjYXNlIDQ1NTQ6XG4gICAgICByZXR1cm4gV0VCS0lUICsgcmVwbGFjZSh2YWx1ZSwgLyhbXi1dKSh0cmFuc2Zvcm0pL2csICckMScgKyBXRUJLSVQgKyAnJDInKSArIHZhbHVlO1xuICAgIC8vIGN1cnNvclxuXG4gICAgY2FzZSA2MTg3OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKHpvb20tfGdyYWIpLywgV0VCS0lUICsgJyQxJyksIC8oaW1hZ2Utc2V0KS8sIFdFQktJVCArICckMScpLCB2YWx1ZSwgJycpICsgdmFsdWU7XG4gICAgLy8gYmFja2dyb3VuZCwgYmFja2dyb3VuZC1pbWFnZVxuXG4gICAgY2FzZSA1NDk1OlxuICAgIGNhc2UgMzk1OTpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJyk7XG4gICAgLy8ganVzdGlmeS1jb250ZW50XG5cbiAgICBjYXNlIDQ5Njg6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblxuICAgIGNhc2UgNDA5NTpcbiAgICBjYXNlIDM1ODM6XG4gICAgY2FzZSA0MDY4OlxuICAgIGNhc2UgMjUzMjpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rKS1pbmxpbmUoLispLywgV0VCS0lUICsgJyQxJDInKSArIHZhbHVlO1xuICAgIC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cbiAgICBjYXNlIDgxMTY6XG4gICAgY2FzZSA3MDU5OlxuICAgIGNhc2UgNTc1MzpcbiAgICBjYXNlIDU1MzU6XG4gICAgY2FzZSA1NDQ1OlxuICAgIGNhc2UgNTcwMTpcbiAgICBjYXNlIDQ5MzM6XG4gICAgY2FzZSA0Njc3OlxuICAgIGNhc2UgNTUzMzpcbiAgICBjYXNlIDU3ODk6XG4gICAgY2FzZSA1MDIxOlxuICAgIGNhc2UgNDc2NTpcbiAgICAgIC8vIHN0cmV0Y2gsIG1heC1jb250ZW50LCBtaW4tY29udGVudCwgZmlsbC1hdmFpbGFibGVcbiAgICAgIGlmIChzdHJsZW4odmFsdWUpIC0gMSAtIGxlbmd0aCA+IDYpIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSkge1xuICAgICAgICAvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgIC8vIC1cbiAgICAgICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpIGJyZWFrO1xuICAgICAgICAvLyAoZilpbGwtYXZhaWxhYmxlLCAoZilpdC1jb250ZW50XG5cbiAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlO1xuICAgICAgICAvLyAocyl0cmV0Y2hcblxuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICByZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoKSArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICAvLyBwb3NpdGlvbjogc3RpY2t5XG5cbiAgICBjYXNlIDQ5NDk6XG4gICAgICAvLyAocyl0aWNreT9cbiAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpICE9PSAxMTUpIGJyZWFrO1xuICAgIC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4KVxuXG4gICAgY2FzZSA2NDQ0OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIHN0cmxlbih2YWx1ZSkgLSAzIC0gKH5pbmRleG9mKHZhbHVlLCAnIWltcG9ydGFudCcpICYmIDEwKSkpIHtcbiAgICAgICAgLy8gc3RpYyhrKXlcbiAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlO1xuICAgICAgICAvLyAoaW5saW5lLSk/ZmwoZSl4XG5cbiAgICAgICAgY2FzZSAxMDE6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjshXSspKDt8IS4rKT8vLCAnJDEnICsgV0VCS0lUICsgKGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gkMycgKyAnJDEnICsgV0VCS0lUICsgJyQyJDMnICsgJyQxJyArIE1TICsgJyQyYm94JDMnKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICAvLyB3cml0aW5nLW1vZGVcblxuICAgIGNhc2UgNTkzNjpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxMSkpIHtcbiAgICAgICAgLy8gdmVydGljYWwtbChyKVxuICAgICAgICBjYXNlIDExNDpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gdmVydGljYWwtcihsKVxuXG4gICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGItcmwnKSArIHZhbHVlO1xuICAgICAgICAvLyBob3Jpem9udGFsKC0pdGJcblxuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAnbHInKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBwcmVmaXhlciA9IGZ1bmN0aW9uIHByZWZpeGVyKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcbiAgaWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpIGlmICghZWxlbWVudFtcInJldHVyblwiXSkgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIERFQ0xBUkFUSU9OOlxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgS0VZRlJBTUVTOlxuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgIHZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKVxuICAgICAgfSldLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlIFJVTEVTRVQ6XG4gICAgICBpZiAoZWxlbWVudC5sZW5ndGgpIHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuICAgICAgICAgIC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuICAgICAgICAgIGNhc2UgJzpyZWFkLW9ubHknOlxuICAgICAgICAgIGNhc2UgJzpyZWFkLXdyaXRlJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICAgIC8vIDpwbGFjZWhvbGRlclxuXG4gICAgICAgICAgY2FzZSAnOjpwbGFjZWhvbGRlcic6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9KTtcbiAgfVxufTtcblxudmFyIGRlZmF1bHRTdHlsaXNQbHVnaW5zID0gW3ByZWZpeGVyXTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgaWYgKGtleSA9PT0gJ2NzcycpIHtcbiAgICB2YXIgc3NyU3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl06bm90KFtkYXRhLXNdKVwiKTsgLy8gZ2V0IFNTUmVkIHN0eWxlcyBvdXQgb2YgdGhlIHdheSBvZiBSZWFjdCdzIGh5ZHJhdGlvblxuICAgIC8vIGRvY3VtZW50LmhlYWQgaXMgYSBzYWZlIHBsYWNlIHRvIG1vdmUgdGhlbSB0byh0aG91Z2ggbm90ZSBkb2N1bWVudC5oZWFkIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGFzdCBwbGFjZSB0aGV5IHdpbGwgYmUpXG4gICAgLy8gbm90ZSB0aGlzIHZlcnkgdmVyeSBpbnRlbnRpb25hbGx5IHRhcmdldHMgYWxsIHN0eWxlIGVsZW1lbnRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGtleSB0byBlbnN1cmVcbiAgICAvLyB0aGF0IGNyZWF0aW5nIGEgY2FjaGUgd29ya3MgaW5zaWRlIG9mIHJlbmRlciBvZiBhIFJlYWN0IGNvbXBvbmVudFxuXG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzc3JTdHlsZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAvLyB3ZSB3YW50IHRvIG9ubHkgbW92ZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgc3BhY2UgaW4gdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbiBFbW90aW9uIDExIHNlcnZlci1zaWRlIHJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgICAvLyB3aGlsZSB3ZSB3aWxsIGFscmVhZHkgaWdub3JlIEVtb3Rpb24gMTEgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGJlY2F1c2Ugb2YgdGhlIDpub3QoW2RhdGEtc10pIHBhcnQgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAvLyBFbW90aW9uIDEwIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBkaWQgbm90IGhhdmUgZGF0YS1zIChidXQgaW1wb3J0YW50bHkgZGlkIG5vdCBoYXZlIGEgc3BhY2UgaW4gdGhlaXIgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZXMpXG4gICAgICAvLyBzbyBjaGVja2luZyBmb3IgdGhlIHNwYWNlIGVuc3VyZXMgdGhhdCBsb2FkaW5nIEVtb3Rpb24gMTEgYWZ0ZXIgRW1vdGlvbiAxMCBoYXMgaW5zZXJ0ZWQgc29tZSBzdHlsZXNcbiAgICAgIC8vIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgRW1vdGlvbiAxMCBzdHlsZXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICB2YXIgZGF0YUVtb3Rpb25BdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJyk7XG5cbiAgICAgIGlmIChkYXRhRW1vdGlvbkF0dHJpYnV0ZS5pbmRleE9mKCcgJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICB2YXIgaW5zZXJ0ZWQgPSB7fTtcbiAgdmFyIGNvbnRhaW5lcjtcbiAgdmFyIG5vZGVzVG9IeWRyYXRlID0gW107XG5cbiAge1xuICAgIGNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmhlYWQ7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggLy8gdGhpcyBtZWFucyB3ZSB3aWxsIGlnbm9yZSBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGEgc3BhY2UgaW4gdGhlbSB3aGljaFxuICAgIC8vIG1lYW5zIHRoYXQgdGhlIHN0eWxlIGVsZW1lbnRzIHdlJ3JlIGxvb2tpbmcgYXQgYXJlIG9ubHkgRW1vdGlvbiAxMSBzZXJ2ZXItcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXj1cXFwiXCIgKyBrZXkgKyBcIiBcXFwiXVwiKSwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAge1xuICAgIHZhciBjdXJyZW50U2hlZXQ7XG4gICAgdmFyIGZpbmFsaXppbmdQbHVnaW5zID0gW3N0cmluZ2lmeSwgcnVsZXNoZWV0KGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KHJ1bGUpO1xuICAgIH0pXTtcbiAgICB2YXIgc2VyaWFsaXplciA9IG1pZGRsZXdhcmUob21uaXByZXNlbnRQbHVnaW5zLmNvbmNhdChzdHlsaXNQbHVnaW5zLCBmaW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIHN0eWxpcyA9IGZ1bmN0aW9uIHN0eWxpcyhzdHlsZXMpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShzdHlsZXMpLCBzZXJpYWxpemVyKTtcbiAgICB9O1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICBjdXJyZW50U2hlZXQgPSBzaGVldDtcblxuICAgICAgc3R5bGlzKHNlbGVjdG9yID8gc2VsZWN0b3IgKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCIgOiBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlID0ge1xuICAgIGtleToga2V5LFxuICAgIHNoZWV0OiBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBzcGVlZHk6IG9wdGlvbnMuc3BlZWR5LFxuICAgICAgcHJlcGVuZDogb3B0aW9ucy5wcmVwZW5kLFxuICAgICAgaW5zZXJ0aW9uUG9pbnQ6IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnRcbiAgICB9KSxcbiAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICBpbnNlcnRlZDogaW5zZXJ0ZWQsXG4gICAgcmVnaXN0ZXJlZDoge30sXG4gICAgaW5zZXJ0OiBfaW5zZXJ0XG4gIH07XG4gIGNhY2hlLnNoZWV0Lmh5ZHJhdGUobm9kZXNUb0h5ZHJhdGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVDYWNoZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGFzcGVjdFJhdGlvOiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICBzY2FsZTogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBjb21wb25lbnRTZWxlY3RvciA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKGNvbXBvbmVudFNlbGVjdG9yLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFNlbGVjdG9yO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICB2YXIga2V5ZnJhbWVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoa2V5ZnJhbWVzLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBrZXlmcmFtZXMubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczoga2V5ZnJhbWVzLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGtleWZyYW1lcy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBzZXJpYWxpemVkU3R5bGVzLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgKyBcIjtcIjtcbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfSAvLyBmaW5hbGl6ZSBzdHJpbmcgdmFsdWVzIChyZWd1bGFyIHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBpbnRlcnBvbGF0ZWQgaW50byBjc3MgY2FsbHMpXG5cblxuICB2YXIgYXNTdHJpbmcgPSBpbnRlcnBvbGF0aW9uO1xuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gYXNTdHJpbmc7XG4gIH1cblxuICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFthc1N0cmluZ107XG4gIHJldHVybiBjYWNoZWQgIT09IHVuZGVmaW5lZCA/IGNhY2hlZCA6IGFzU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBhc1N0cmluZyA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChyZWdpc3RlcmVkICE9IG51bGwgJiYgcmVnaXN0ZXJlZFthc1N0cmluZ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbYXNTdHJpbmddICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKGFzU3RyaW5nKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgYXNTdHJpbmcpICsgXCI7XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlW19pXSkgKyBcIjtcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGludGVycG9sYXRlZCA9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHZhbHVlKTtcblxuICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBpbnRlcnBvbGF0ZWQgKyBcIjtcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0ga2V5ICsgXCJ7XCIgKyBpbnRlcnBvbGF0ZWQgKyBcIn1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbnZhciBsYWJlbFBhdHRlcm4gPSAvbGFiZWw6XFxzKihbXlxcczt7XSspXFxzKig7fCQpL2c7IC8vIHRoaXMgaXMgdGhlIGN1cnNvciBmb3Iga2V5ZnJhbWVzXG4vLyBrZXlmcmFtZXMgYXJlIHN0b3JlZCBvbiB0aGUgU2VyaWFsaXplZFN0eWxlcyBvYmplY3QgYXMgYSBsaW5rZWQgbGlzdFxuXG52YXIgY3Vyc29yO1xuZnVuY3Rpb24gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIHJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCAmJiBhcmdzWzBdLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH1cblxuICB2YXIgc3RyaW5nTW9kZSA9IHRydWU7XG4gIHZhciBzdHlsZXMgPSAnJztcbiAgY3Vyc29yID0gdW5kZWZpbmVkO1xuICB2YXIgc3RyaW5ncyA9IGFyZ3NbMF07XG5cbiAgaWYgKHN0cmluZ3MgPT0gbnVsbCB8fCBzdHJpbmdzLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyaW5nTW9kZSA9IGZhbHNlO1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBzdHJpbmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYXNUZW1wbGF0ZVN0cmluZ3NBcnIgPSBzdHJpbmdzO1xuXG4gICAgc3R5bGVzICs9IGFzVGVtcGxhdGVTdHJpbmdzQXJyWzBdO1xuICB9IC8vIHdlIHN0YXJ0IGF0IDEgc2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBmaXJzdCBhcmdcblxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBhcmdzW2ldKTtcblxuICAgIGlmIChzdHJpbmdNb2RlKSB7XG4gICAgICB2YXIgdGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgICAgc3R5bGVzICs9IHRlbXBsYXRlU3RyaW5nc0FycltpXTtcbiAgICB9XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgbWF0Y2hbMV07XG4gIH1cblxuICB2YXIgbmFtZSA9IGhhc2hTdHJpbmcoc3R5bGVzKSArIGlkZW50aWZpZXJOYW1lO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBuZXh0OiBjdXJzb3JcbiAgfTtcbn1cblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgaXNCcm93c2VyID0gdHJ1ZTtcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiIsImltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuXG5mdW5jdGlvbiBpbnNlcnRXaXRob3V0U2NvcGluZyhjYWNoZSwgc2VyaWFsaXplZCkge1xuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlLmluc2VydCgnJywgc2VyaWFsaXplZCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlKHJlZ2lzdGVyZWQsIGNzcywgY2xhc3NOYW1lKSB7XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciByYXdDbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMpO1xufVxuXG52YXIgY3JlYXRlRW1vdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb24ob3B0aW9ucykge1xuICB2YXIgY2FjaGUgPSBjcmVhdGVDYWNoZShvcHRpb25zKTtcblxuICBjYWNoZS5zaGVldC5zcGVlZHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSB2YWx1ZTtcbiAgfTtcblxuICBjYWNoZS5jb21wYXQgPSB0cnVlO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQsIHVuZGVmaW5lZCk7XG4gICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB9O1xuXG4gIHZhciBrZXlmcmFtZXMgPSBmdW5jdGlvbiBrZXlmcmFtZXMoKSB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgdmFyIGFuaW1hdGlvbiA9IFwiYW5pbWF0aW9uLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICAgIGluc2VydFdpdGhvdXRTY29waW5nKGNhY2hlLCB7XG4gICAgICBuYW1lOiBzZXJpYWxpemVkLm5hbWUsXG4gICAgICBzdHlsZXM6IFwiQGtleWZyYW1lcyBcIiArIGFuaW1hdGlvbiArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIlxuICAgIH0pO1xuICAgIHJldHVybiBhbmltYXRpb247XG4gIH07XG5cbiAgdmFyIGluamVjdEdsb2JhbCA9IGZ1bmN0aW9uIGluamVjdEdsb2JhbCgpIHtcbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBpbnNlcnRXaXRob3V0U2NvcGluZyhjYWNoZSwgc2VyaWFsaXplZCk7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgaW5qZWN0R2xvYmFsOiBpbmplY3RHbG9iYWwsXG4gICAga2V5ZnJhbWVzOiBrZXlmcmFtZXMsXG4gICAgaHlkcmF0ZTogZnVuY3Rpb24gaHlkcmF0ZShpZHMpIHtcbiAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRba2V5XSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGZsdXNoOiBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgIGNhY2hlLnJlZ2lzdGVyZWQgPSB7fTtcbiAgICAgIGNhY2hlLmluc2VydGVkID0ge307XG4gICAgICBjYWNoZS5zaGVldC5mbHVzaCgpO1xuICAgIH0sXG4gICAgc2hlZXQ6IGNhY2hlLnNoZWV0LFxuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBnZXRSZWdpc3RlcmVkU3R5bGVzOiBnZXRSZWdpc3RlcmVkU3R5bGVzLmJpbmQobnVsbCwgY2FjaGUucmVnaXN0ZXJlZCksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgY2FjaGUucmVnaXN0ZXJlZCwgY3NzKVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGNscyA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlRW1vdGlvbiBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgY3JlYXRlRW1vdGlvbiBmcm9tICcuLi9jcmVhdGUtaW5zdGFuY2UvZGlzdC9lbW90aW9uLWNzcy1jcmVhdGUtaW5zdGFuY2UuZXNtLmpzJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi91dGlscyc7XG5cbnZhciBfY3JlYXRlRW1vdGlvbiA9IGNyZWF0ZUVtb3Rpb24oe1xuICBrZXk6ICdjc3MnXG59KSxcbiAgICBmbHVzaCA9IF9jcmVhdGVFbW90aW9uLmZsdXNoLFxuICAgIGh5ZHJhdGUgPSBfY3JlYXRlRW1vdGlvbi5oeWRyYXRlLFxuICAgIGN4ID0gX2NyZWF0ZUVtb3Rpb24uY3gsXG4gICAgbWVyZ2UgPSBfY3JlYXRlRW1vdGlvbi5tZXJnZSxcbiAgICBnZXRSZWdpc3RlcmVkU3R5bGVzID0gX2NyZWF0ZUVtb3Rpb24uZ2V0UmVnaXN0ZXJlZFN0eWxlcyxcbiAgICBpbmplY3RHbG9iYWwgPSBfY3JlYXRlRW1vdGlvbi5pbmplY3RHbG9iYWwsXG4gICAga2V5ZnJhbWVzID0gX2NyZWF0ZUVtb3Rpb24ua2V5ZnJhbWVzLFxuICAgIGNzcyA9IF9jcmVhdGVFbW90aW9uLmNzcyxcbiAgICBzaGVldCA9IF9jcmVhdGVFbW90aW9uLnNoZWV0LFxuICAgIGNhY2hlID0gX2NyZWF0ZUVtb3Rpb24uY2FjaGU7XG5cbmV4cG9ydCB7IGNhY2hlLCBjc3MsIGN4LCBmbHVzaCwgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaHlkcmF0ZSwgaW5qZWN0R2xvYmFsLCBrZXlmcmFtZXMsIG1lcmdlLCBzaGVldCB9O1xuIiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7XG4gICAgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5leHBvcnQgeyBfZXh0ZW5kcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZShvcmlnQ2xhc3MsIGNsYXNzVG9SZW1vdmUpIHtcbiAgcmV0dXJuIG9yaWdDbGFzcy5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNsYXNzVG9SZW1vdmUgKyBcIig/OlxcXFxzfCQpXCIsICdnJyksICckMScpLnJlcGxhY2UoL1xccysvZywgJyAnKS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG59XG4vKipcbiAqIFJlbW92ZXMgYSBDU1MgY2xhc3MgZnJvbSBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUsIGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnLCBjbGFzc05hbWUpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZGlzYWJsZWQ6IGZhbHNlXG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImV4cG9ydCB2YXIgZm9yY2VSZWZsb3cgPSBmdW5jdGlvbiBmb3JjZVJlZmxvdyhub2RlKSB7XG4gIHJldHVybiBub2RlLnNjcm9sbFRvcDtcbn07IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5leHBvcnQgdmFyIFVOTU9VTlRFRCA9ICd1bm1vdW50ZWQnO1xuZXhwb3J0IHZhciBFWElURUQgPSAnZXhpdGVkJztcbmV4cG9ydCB2YXIgRU5URVJJTkcgPSAnZW50ZXJpbmcnO1xuZXhwb3J0IHZhciBFTlRFUkVEID0gJ2VudGVyZWQnO1xuZXhwb3J0IHZhciBFWElUSU5HID0gJ2V4aXRpbmcnO1xuLyoqXG4gKiBUaGUgVHJhbnNpdGlvbiBjb21wb25lbnQgbGV0cyB5b3UgZGVzY3JpYmUgYSB0cmFuc2l0aW9uIGZyb20gb25lIGNvbXBvbmVudFxuICogc3RhdGUgdG8gYW5vdGhlciBfb3ZlciB0aW1lXyB3aXRoIGEgc2ltcGxlIGRlY2xhcmF0aXZlIEFQSS4gTW9zdCBjb21tb25seVxuICogaXQncyB1c2VkIHRvIGFuaW1hdGUgdGhlIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIG9mIGEgY29tcG9uZW50LCBidXQgY2FuIGFsc29cbiAqIGJlIHVzZWQgdG8gZGVzY3JpYmUgaW4tcGxhY2UgdHJhbnNpdGlvbiBzdGF0ZXMgYXMgd2VsbC5cbiAqXG4gKiAtLS1cbiAqXG4gKiAqKk5vdGUqKjogYFRyYW5zaXRpb25gIGlzIGEgcGxhdGZvcm0tYWdub3N0aWMgYmFzZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZ1xuICogdHJhbnNpdGlvbnMgaW4gQ1NTLCB5b3UnbGwgcHJvYmFibHkgd2FudCB0byB1c2VcbiAqIFtgQ1NTVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvY3NzLXRyYW5zaXRpb24pXG4gKiBpbnN0ZWFkLiBJdCBpbmhlcml0cyBhbGwgdGhlIGZlYXR1cmVzIG9mIGBUcmFuc2l0aW9uYCwgYnV0IGNvbnRhaW5zXG4gKiBhZGRpdGlvbmFsIGZlYXR1cmVzIG5lY2Vzc2FyeSB0byBwbGF5IG5pY2Ugd2l0aCBDU1MgdHJhbnNpdGlvbnMgKGhlbmNlIHRoZVxuICogbmFtZSBvZiB0aGUgY29tcG9uZW50KS5cbiAqXG4gKiAtLS1cbiAqXG4gKiBCeSBkZWZhdWx0IHRoZSBgVHJhbnNpdGlvbmAgY29tcG9uZW50IGRvZXMgbm90IGFsdGVyIHRoZSBiZWhhdmlvciBvZiB0aGVcbiAqIGNvbXBvbmVudCBpdCByZW5kZXJzLCBpdCBvbmx5IHRyYWNrcyBcImVudGVyXCIgYW5kIFwiZXhpdFwiIHN0YXRlcyBmb3IgdGhlXG4gKiBjb21wb25lbnRzLiBJdCdzIHVwIHRvIHlvdSB0byBnaXZlIG1lYW5pbmcgYW5kIGVmZmVjdCB0byB0aG9zZSBzdGF0ZXMuIEZvclxuICogZXhhbXBsZSB3ZSBjYW4gYWRkIHN0eWxlcyB0byBhIGNvbXBvbmVudCB3aGVuIGl0IGVudGVycyBvciBleGl0czpcbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbiAqXG4gKiBjb25zdCBkdXJhdGlvbiA9IDMwMDtcbiAqXG4gKiBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gKiAgIHRyYW5zaXRpb246IGBvcGFjaXR5ICR7ZHVyYXRpb259bXMgZWFzZS1pbi1vdXRgLFxuICogICBvcGFjaXR5OiAwLFxuICogfVxuICpcbiAqIGNvbnN0IHRyYW5zaXRpb25TdHlsZXMgPSB7XG4gKiAgIGVudGVyaW5nOiB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZW50ZXJlZDogIHsgb3BhY2l0eTogMSB9LFxuICogICBleGl0aW5nOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiAgIGV4aXRlZDogIHsgb3BhY2l0eTogMCB9LFxuICogfTtcbiAqXG4gKiBjb25zdCBGYWRlID0gKHsgaW46IGluUHJvcCB9KSA9PiAoXG4gKiAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9e2R1cmF0aW9ufT5cbiAqICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgPGRpdiBzdHlsZT17e1xuICogICAgICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gKiAgICAgICAgIC4uLnRyYW5zaXRpb25TdHlsZXNbc3RhdGVdXG4gKiAgICAgICB9fT5cbiAqICAgICAgICAgSSdtIGEgZmFkZSBUcmFuc2l0aW9uIVxuICogICAgICAgPC9kaXY+XG4gKiAgICAgKX1cbiAqICAgPC9UcmFuc2l0aW9uPlxuICogKTtcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGFyZSA0IG1haW4gc3RhdGVzIGEgVHJhbnNpdGlvbiBjYW4gYmUgaW46XG4gKiAgLSBgJ2VudGVyaW5nJ2BcbiAqICAtIGAnZW50ZXJlZCdgXG4gKiAgLSBgJ2V4aXRpbmcnYFxuICogIC0gYCdleGl0ZWQnYFxuICpcbiAqIFRyYW5zaXRpb24gc3RhdGUgaXMgdG9nZ2xlZCB2aWEgdGhlIGBpbmAgcHJvcC4gV2hlbiBgdHJ1ZWAgdGhlIGNvbXBvbmVudFxuICogYmVnaW5zIHRoZSBcIkVudGVyXCIgc3RhZ2UuIER1cmluZyB0aGlzIHN0YWdlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgZnJvbVxuICogaXRzIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0ZSwgdG8gYCdlbnRlcmluZydgIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gKiB0cmFuc2l0aW9uIGFuZCB0aGVuIHRvIHRoZSBgJ2VudGVyZWQnYCBzdGFnZSBvbmNlIGl0J3MgY29tcGxldGUuIExldCdzIHRha2VcbiAqIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAod2UnbGwgdXNlIHRoZVxuICogW3VzZVN0YXRlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlc3RhdGUpIGhvb2spOlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXs1MDB9PlxuICogICAgICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgICAgIC8vIC4uLlxuICogICAgICAgICApfVxuICogICAgICAgPC9UcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgdG8gdGhlIGAnZW50ZXJpbmcnYCBzdGF0ZVxuICogYW5kIHN0YXkgdGhlcmUgZm9yIDUwMG1zICh0aGUgdmFsdWUgb2YgYHRpbWVvdXRgKSBiZWZvcmUgaXQgZmluYWxseSBzd2l0Y2hlc1xuICogdG8gYCdlbnRlcmVkJ2AuXG4gKlxuICogV2hlbiBgaW5gIGlzIGBmYWxzZWAgdGhlIHNhbWUgdGhpbmcgaGFwcGVucyBleGNlcHQgdGhlIHN0YXRlIG1vdmVzIGZyb21cbiAqIGAnZXhpdGluZydgIHRvIGAnZXhpdGVkJ2AuXG4gKi9cblxudmFyIFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuICAgIHZhciBwYXJlbnRHcm91cCA9IGNvbnRleHQ7IC8vIEluIHRoZSBjb250ZXh0IG9mIGEgVHJhbnNpdGlvbkdyb3VwIGFsbCBlbnRlcnMgYXJlIHJlYWxseSBhcHBlYXJzXG5cbiAgICB2YXIgYXBwZWFyID0gcGFyZW50R3JvdXAgJiYgIXBhcmVudEdyb3VwLmlzTW91bnRpbmcgPyBwcm9wcy5lbnRlciA6IHByb3BzLmFwcGVhcjtcbiAgICB2YXIgaW5pdGlhbFN0YXR1cztcbiAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByb3BzLmluKSB7XG4gICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVOVEVSRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy51bm1vdW50T25FeGl0IHx8IHByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gVU5NT1VOVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogaW5pdGlhbFN0YXR1c1xuICAgIH07XG4gICAgX3RoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmLCBwcmV2U3RhdGUpIHtcbiAgICB2YXIgbmV4dEluID0gX3JlZi5pbjtcblxuICAgIGlmIChuZXh0SW4gJiYgcHJldlN0YXRlLnN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgLy8gICBsZXQgbmV4dFN0YXR1cyA9IG51bGxcbiAgLy8gICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gIC8vICAgICBjb25zdCB7IHN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAvLyAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHsgbmV4dFN0YXR1cyB9XG4gIC8vIH1cbiAgO1xuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyh0cnVlLCB0aGlzLmFwcGVhclN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgbmV4dFN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gICAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklORztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyhmYWxzZSwgbmV4dFN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0VGltZW91dHMgPSBmdW5jdGlvbiBnZXRUaW1lb3V0cygpIHtcbiAgICB2YXIgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dDtcbiAgICB2YXIgZXhpdCwgZW50ZXIsIGFwcGVhcjtcbiAgICBleGl0ID0gZW50ZXIgPSBhcHBlYXIgPSB0aW1lb3V0O1xuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCAmJiB0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGV4aXQgPSB0aW1lb3V0LmV4aXQ7XG4gICAgICBlbnRlciA9IHRpbWVvdXQuZW50ZXI7IC8vIFRPRE86IHJlbW92ZSBmYWxsYmFjayBmb3IgbmV4dCBtYWpvclxuXG4gICAgICBhcHBlYXIgPSB0aW1lb3V0LmFwcGVhciAhPT0gdW5kZWZpbmVkID8gdGltZW91dC5hcHBlYXIgOiBlbnRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhpdDogZXhpdCxcbiAgICAgIGVudGVyOiBlbnRlcixcbiAgICAgIGFwcGVhcjogYXBwZWFyXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhdHVzID0gZnVuY3Rpb24gdXBkYXRlU3RhdHVzKG1vdW50aW5nLCBuZXh0U3RhdHVzKSB7XG4gICAgaWYgKG1vdW50aW5nID09PSB2b2lkIDApIHtcbiAgICAgIG1vdW50aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5leHRTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIC8vIG5leHRTdGF0dXMgd2lsbCBhbHdheXMgYmUgRU5URVJJTkcgb3IgRVhJVElORy5cbiAgICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0IHx8IHRoaXMucHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3B1bGwvNzQ5XG4gICAgICAgICAgLy8gV2l0aCB1bm1vdW50T25FeGl0IG9yIG1vdW50T25FbnRlciwgdGhlIGVudGVyIGFuaW1hdGlvbiBzaG91bGQgaGFwcGVuIGF0IHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gYGV4aXRlZGAgYW5kIGBlbnRlcmluZ2AuXG4gICAgICAgICAgLy8gVG8gbWFrZSB0aGUgYW5pbWF0aW9uIGhhcHBlbiwgIHdlIGhhdmUgdG8gc2VwYXJhdGUgZWFjaCByZW5kZXJpbmcgYW5kIGF2b2lkIGJlaW5nIHByb2Nlc3NlZCBhcyBiYXRjaGVkLlxuXG4gICAgICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtRW50ZXIobW91bnRpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtRXhpdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG5cbiAgICB2YXIgX3JlZjIgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbYXBwZWFyaW5nXSA6IFtSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSwgYXBwZWFyaW5nXSxcbiAgICAgICAgbWF5YmVOb2RlID0gX3JlZjJbMF0sXG4gICAgICAgIG1heWJlQXBwZWFyaW5nID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIGVudGVyVGltZW91dCA9IGFwcGVhcmluZyA/IHRpbWVvdXRzLmFwcGVhciA6IHRpbWVvdXRzLmVudGVyOyAvLyBubyBlbnRlciBhbmltYXRpb24gc2tpcCByaWdodCB0byBFTlRFUkVEXG4gICAgLy8gaWYgd2UgYXJlIG1vdW50aW5nIGFuZCBydW5uaW5nIHRoaXMgaXQgbWVhbnMgYXBwZWFyIF9tdXN0XyBiZSBzZXRcblxuICAgIGlmICghbW91bnRpbmcgJiYgIWVudGVyIHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRXhpdCA9IGZ1bmN0aW9uIHBlcmZvcm1FeGl0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBtYXliZU5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gbm8gZXhpdCBhbmltYXRpb24gc2tpcCByaWdodCB0byBFWElURURcblxuICAgIGlmICghZXhpdCB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRVhJVElOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcblxuICAgICAgX3RoaXMzLm9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0cy5leGl0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIgPSB0aW1lb3V0ID09IG51bGwgJiYgIXRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXI7XG5cbiAgICBpZiAoIW5vZGUgfHwgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lcikge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIHZhciBfcmVmMyA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFt0aGlzLm5leHRDYWxsYmFja10gOiBbbm9kZSwgdGhpcy5uZXh0Q2FsbGJhY2tdLFxuICAgICAgICAgIG1heWJlTm9kZSA9IF9yZWYzWzBdLFxuICAgICAgICAgIG1heWJlTmV4dENhbGxiYWNrID0gX3JlZjNbMV07XG5cbiAgICAgIHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIobWF5YmVOb2RlLCBtYXliZU5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBfaW4gPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgX21vdW50T25FbnRlciA9IF90aGlzJHByb3BzLm1vdW50T25FbnRlcixcbiAgICAgICAgX3VubW91bnRPbkV4aXQgPSBfdGhpcyRwcm9wcy51bm1vdW50T25FeGl0LFxuICAgICAgICBfYXBwZWFyID0gX3RoaXMkcHJvcHMuYXBwZWFyLFxuICAgICAgICBfZW50ZXIgPSBfdGhpcyRwcm9wcy5lbnRlcixcbiAgICAgICAgX2V4aXQgPSBfdGhpcyRwcm9wcy5leGl0LFxuICAgICAgICBfdGltZW91dCA9IF90aGlzJHByb3BzLnRpbWVvdXQsXG4gICAgICAgIF9hZGRFbmRMaXN0ZW5lciA9IF90aGlzJHByb3BzLmFkZEVuZExpc3RlbmVyLFxuICAgICAgICBfb25FbnRlciA9IF90aGlzJHByb3BzLm9uRW50ZXIsXG4gICAgICAgIF9vbkVudGVyaW5nID0gX3RoaXMkcHJvcHMub25FbnRlcmluZyxcbiAgICAgICAgX29uRW50ZXJlZCA9IF90aGlzJHByb3BzLm9uRW50ZXJlZCxcbiAgICAgICAgX29uRXhpdCA9IF90aGlzJHByb3BzLm9uRXhpdCxcbiAgICAgICAgX29uRXhpdGluZyA9IF90aGlzJHByb3BzLm9uRXhpdGluZyxcbiAgICAgICAgX29uRXhpdGVkID0gX3RoaXMkcHJvcHMub25FeGl0ZWQsXG4gICAgICAgIF9ub2RlUmVmID0gX3RoaXMkcHJvcHMubm9kZVJlZixcbiAgICAgICAgY2hpbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCIsIFwibW91bnRPbkVudGVyXCIsIFwidW5tb3VudE9uRXhpdFwiLCBcImFwcGVhclwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcInRpbWVvdXRcIiwgXCJhZGRFbmRMaXN0ZW5lclwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FbnRlcmVkXCIsIFwib25FeGl0XCIsIFwib25FeGl0aW5nXCIsIFwib25FeGl0ZWRcIiwgXCJub2RlUmVmXCJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAvLyBhbGxvd3MgZm9yIG5lc3RlZCBUcmFuc2l0aW9uc1xuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpIDogUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBjaGlsZFByb3BzKSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uLmNvbnRleHRUeXBlID0gVHJhbnNpdGlvbkdyb3VwQ29udGV4dDtcblRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogQSBSZWFjdCByZWZlcmVuY2UgdG8gRE9NIGVsZW1lbnQgdGhhdCBuZWVkIHRvIHRyYW5zaXRpb246XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTEyNzEzMC80NjcxOTMyXG4gICAqXG4gICAqICAgLSBXaGVuIGBub2RlUmVmYCBwcm9wIGlzIHVzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgKiAgICAgIChlLmcuIGBvbkVudGVyYCkgYmVjYXVzZSB1c2VyIGFscmVhZHkgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG5vZGUuXG4gICAqICAgLSBXaGVuIGNoYW5naW5nIGBrZXlgIHByb3Agb2YgYFRyYW5zaXRpb25gIGluIGEgYFRyYW5zaXRpb25Hcm91cGAgYSBuZXdcbiAgICogICAgIGBub2RlUmVmYCBuZWVkIHRvIGJlIHByb3ZpZGVkIHRvIGBUcmFuc2l0aW9uYCB3aXRoIGNoYW5nZWQgYGtleWAgcHJvcFxuICAgKiAgICAgKHNlZVxuICAgKiAgICAgW3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvMTM0MzVmODk3YjNhYjcxZjZlMTlkNzI0ZjE0NTU5NmY1OTEwNTgxYy90ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qcyNMMzYyLUw0MzcpKS5cbiAgICovXG4gIG5vZGVSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8gUHJvcFR5cGVzLmFueSA6IGZ1bmN0aW9uIChwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBwcm9wVmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBQcm9wVHlwZXMuaW5zdGFuY2VPZih2YWx1ZSAmJiAnb3duZXJEb2N1bWVudCcgaW4gdmFsdWUgPyB2YWx1ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkVsZW1lbnQgOiBFbGVtZW50KShwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KTtcbiAgICB9XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIGBmdW5jdGlvbmAgY2hpbGQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIFJlYWN0IGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaXNcbiAgICogY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0dXMgKGAnZW50ZXJpbmcnYCwgYCdlbnRlcmVkJ2AsXG4gICAqIGAnZXhpdGluZydgLCBgJ2V4aXRlZCdgKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXBwbHkgY29udGV4dFxuICAgKiBzcGVjaWZpYyBwcm9wcyB0byBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIDxUcmFuc2l0aW9uIGluPXt0aGlzLnN0YXRlLmlufSB0aW1lb3V0PXsxNTB9PlxuICAgKiAgIHtzdGF0ZSA9PiAoXG4gICAqICAgICA8TXlDb21wb25lbnQgY2xhc3NOYW1lPXtgZmFkZSBmYWRlLSR7c3RhdGV9YH0gLz5cbiAgICogICApfVxuICAgKiA8L1RyYW5zaXRpb24+XG4gICAqIGBgYFxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjb21wb25lbnQ7IHRyaWdnZXJzIHRoZSBlbnRlciBvciBleGl0IHN0YXRlc1xuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgaXMgbW91bnRlZCBpbW1lZGlhdGVseSBhbG9uZyB3aXRoXG4gICAqIHRoZSBwYXJlbnQgYFRyYW5zaXRpb25gIGNvbXBvbmVudC4gSWYgeW91IHdhbnQgdG8gXCJsYXp5IG1vdW50XCIgdGhlIGNvbXBvbmVudCBvbiB0aGVcbiAgICogZmlyc3QgYGluPXt0cnVlfWAgeW91IGNhbiBzZXQgYG1vdW50T25FbnRlcmAuIEFmdGVyIHRoZSBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIHRoZSBjb21wb25lbnQgd2lsbCBzdGF5XG4gICAqIG1vdW50ZWQsIGV2ZW4gb24gXCJleGl0ZWRcIiwgdW5sZXNzIHlvdSBhbHNvIHNwZWNpZnkgYHVubW91bnRPbkV4aXRgLlxuICAgKi9cbiAgbW91bnRPbkVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IHN0YXlzIG1vdW50ZWQgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgYCdleGl0ZWQnYCBzdGF0ZS5cbiAgICogU2V0IGB1bm1vdW50T25FeGl0YCBpZiB5b3UnZCBwcmVmZXIgdG8gdW5tb3VudCB0aGUgY29tcG9uZW50IGFmdGVyIGl0IGZpbmlzaGVzIGV4aXRpbmcuXG4gICAqL1xuICB1bm1vdW50T25FeGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGRvZXMgbm90IHBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlblxuICAgKiBpdCBmaXJzdCBtb3VudHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpbmAuIElmIHlvdSB3YW50IHRoaXNcbiAgICogYmVoYXZpb3IsIHNldCBib3RoIGBhcHBlYXJgIGFuZCBgaW5gIHRvIGB0cnVlYC5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogdGhlcmUgYXJlIG5vIHNwZWNpYWwgYXBwZWFyIHN0YXRlcyBsaWtlIGBhcHBlYXJpbmdgL2BhcHBlYXJlZGAsIHRoaXMgcHJvcFxuICAgKiA+IG9ubHkgYWRkcyBhbiBhZGRpdGlvbmFsIGVudGVyIHRyYW5zaXRpb24uIEhvd2V2ZXIsIGluIHRoZVxuICAgKiA+IGA8Q1NTVHJhbnNpdGlvbj5gIGNvbXBvbmVudCB0aGF0IGZpcnN0IGVudGVyIHRyYW5zaXRpb24gZG9lcyByZXN1bHQgaW5cbiAgICogPiBhZGRpdGlvbmFsIGAuYXBwZWFyLSpgIGNsYXNzZXMsIHRoYXQgd2F5IHlvdSBjYW4gY2hvb3NlIHRvIHN0eWxlIGl0XG4gICAqID4gZGlmZmVyZW50bHkuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4ge1xuICAgKiAgIC8vIHVzZSB0aGUgY3NzIHRyYW5zaXRpb25lbmQgZXZlbnQgdG8gbWFyayB0aGUgZmluaXNoIG9mIGEgdHJhbnNpdGlvblxuICAgKiAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGRvbmUsIGZhbHNlKTtcbiAgICogfX1cbiAgICogYGBgXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyZWRcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0ZWRcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59IDoge307IC8vIE5hbWUgdGhlIGZ1bmN0aW9uIHNvIGl0IGlzIGNsZWFyZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cblRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBpbjogZmFsc2UsXG4gIG1vdW50T25FbnRlcjogZmFsc2UsXG4gIHVubW91bnRPbkV4aXQ6IGZhbHNlLFxuICBhcHBlYXI6IGZhbHNlLFxuICBlbnRlcjogdHJ1ZSxcbiAgZXhpdDogdHJ1ZSxcbiAgb25FbnRlcjogbm9vcCxcbiAgb25FbnRlcmluZzogbm9vcCxcbiAgb25FbnRlcmVkOiBub29wLFxuICBvbkV4aXQ6IG5vb3AsXG4gIG9uRXhpdGluZzogbm9vcCxcbiAgb25FeGl0ZWQ6IG5vb3Bcbn07XG5UcmFuc2l0aW9uLlVOTU9VTlRFRCA9IFVOTU9VTlRFRDtcblRyYW5zaXRpb24uRVhJVEVEID0gRVhJVEVEO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IEVOVEVSSU5HO1xuVHJhbnNpdGlvbi5FTlRFUkVEID0gRU5URVJFRDtcblRyYW5zaXRpb24uRVhJVElORyA9IEVYSVRJTkc7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgYWRkT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZU9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL3JlbW92ZUNsYXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IHsgY2xhc3NOYW1lc1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5cbnZhciBfYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYWRkT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcblxudmFyIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIHJlbW92ZU9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIGV4Y2VsbGVudFxuICogW25nLWFuaW1hdGVdKGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZ0FuaW1hdGUpIGxpYnJhcnksIHlvdSBzaG91bGRcbiAqIHVzZSBpdCBpZiB5b3UncmUgdXNpbmcgQ1NTIHRyYW5zaXRpb25zIG9yIGFuaW1hdGlvbnMuIEl0J3MgYnVpbHQgdXBvbiB0aGVcbiAqIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbilcbiAqIGNvbXBvbmVudCwgc28gaXQgaW5oZXJpdHMgYWxsIG9mIGl0cyBwcm9wcy5cbiAqXG4gKiBgQ1NTVHJhbnNpdGlvbmAgYXBwbGllcyBhIHBhaXIgb2YgY2xhc3MgbmFtZXMgZHVyaW5nIHRoZSBgYXBwZWFyYCwgYGVudGVyYCxcbiAqIGFuZCBgZXhpdGAgc3RhdGVzIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgZmlyc3QgY2xhc3MgaXMgYXBwbGllZCBhbmQgdGhlbiBhXG4gKiBzZWNvbmQgYCotYWN0aXZlYCBjbGFzcyBpbiBvcmRlciB0byBhY3RpdmF0ZSB0aGUgQ1NTIHRyYW5zaXRpb24uIEFmdGVyIHRoZVxuICogdHJhbnNpdGlvbiwgbWF0Y2hpbmcgYCotZG9uZWAgY2xhc3MgbmFtZXMgYXJlIGFwcGxpZWQgdG8gcGVyc2lzdCB0aGVcbiAqIHRyYW5zaXRpb24gc3RhdGUuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxDU1NUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezIwMH0gY2xhc3NOYW1lcz1cIm15LW5vZGVcIj5cbiAqICAgICAgICAgPGRpdj5cbiAqICAgICAgICAgICB7XCJJJ2xsIHJlY2VpdmUgbXktbm9kZS0qIGNsYXNzZXNcIn1cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBgaW5gIHByb3AgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNoaWxkIGNvbXBvbmVudCB3aWxsIGZpcnN0IHJlY2VpdmVcbiAqIHRoZSBjbGFzcyBgZXhhbXBsZS1lbnRlcmAsIHRoZW4gdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgd2lsbCBiZSBhZGRlZCBpblxuICogdGhlIG5leHQgdGljay4gYENTU1RyYW5zaXRpb25gIFtmb3JjZXMgYVxuICogcmVmbG93XShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvNTAwNzMwM2U3MjlhNzRiZTY2YTIxYzNlMjIwNWU0OTE2ODIxNTI0Yi9zcmMvQ1NTVHJhbnNpdGlvbi5qcyNMMjA4LUwyMTUpXG4gKiBiZXR3ZWVuIGJlZm9yZSBhZGRpbmcgdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHRyaWNrXG4gKiBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byB0cmFuc2l0aW9uIGJldHdlZW4gYGV4YW1wbGUtZW50ZXJgIGFuZFxuICogYGV4YW1wbGUtZW50ZXItYWN0aXZlYCBldmVuIHRob3VnaCB0aGV5IHdlcmUgYWRkZWQgaW1tZWRpYXRlbHkgb25lIGFmdGVyXG4gKiBhbm90aGVyLiBNb3N0IG5vdGFibHksIHRoaXMgaXMgd2hhdCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXMgdG8gYW5pbWF0ZVxuICogX2FwcGVhcmFuY2VfLlxuICpcbiAqIGBgYGNzc1xuICogLm15LW5vZGUtZW50ZXIge1xuICogICBvcGFjaXR5OiAwO1xuICogfVxuICogLm15LW5vZGUtZW50ZXItYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMTtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQge1xuICogICBvcGFjaXR5OiAxO1xuICogfVxuICogLm15LW5vZGUtZXhpdC1hY3RpdmUge1xuICogICBvcGFjaXR5OiAwO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogYGBgXG4gKlxuICogYCotYWN0aXZlYCBjbGFzc2VzIHJlcHJlc2VudCB3aGljaCBzdHlsZXMgeW91IHdhbnQgdG8gYW5pbWF0ZSAqKnRvKiosIHNvIGl0J3NcbiAqIGltcG9ydGFudCB0byBhZGQgYHRyYW5zaXRpb25gIGRlY2xhcmF0aW9uIG9ubHkgdG8gdGhlbSwgb3RoZXJ3aXNlIHRyYW5zaXRpb25zXG4gKiBtaWdodCBub3QgYmVoYXZlIGFzIGludGVuZGVkISBUaGlzIG1pZ2h0IG5vdCBiZSBvYnZpb3VzIHdoZW4gdGhlIHRyYW5zaXRpb25zXG4gKiBhcmUgc3ltbWV0cmljYWwsIGkuZS4gd2hlbiBgKi1lbnRlci1hY3RpdmVgIGlzIHRoZSBzYW1lIGFzIGAqLWV4aXRgLCBsaWtlIGluXG4gKiB0aGUgZXhhbXBsZSBhYm92ZSAobWludXMgYHRyYW5zaXRpb25gKSwgYnV0IGl0IGJlY29tZXMgYXBwYXJlbnQgaW4gbW9yZVxuICogY29tcGxleCB0cmFuc2l0aW9ucy5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91J3JlIHVzaW5nIHRoZVxuICogW2BhcHBlYXJgXShodHRwOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbiNUcmFuc2l0aW9uLXByb3AtYXBwZWFyKVxuICogcHJvcCwgbWFrZSBzdXJlIHRvIGRlZmluZSBzdHlsZXMgZm9yIGAuYXBwZWFyLSpgIGNsYXNzZXMgYXMgd2VsbC5cbiAqL1xuXG5cbnZhciBDU1NUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKENTU1RyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIENTU1RyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuYXBwbGllZENsYXNzZXMgPSB7XG4gICAgICBhcHBlYXI6IHt9LFxuICAgICAgZW50ZXI6IHt9LFxuICAgICAgZXhpdDoge31cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlciA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudFsxXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcicsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDIgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyaW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1sxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NFswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnYXBwZWFyJyk7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2VudGVyJyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0aW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDUgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDVbMF07XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0aW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnJlc29sdmVBcmd1bWVudHMgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm5vZGVSZWYgPyBbX3RoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50LCBtYXliZU5vZGVdIC8vIGhlcmUgYG1heWJlTm9kZWAgaXMgYWN0dWFsbHkgYGFwcGVhcmluZ2BcbiAgICAgIDogW21heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmddO1xuICAgIH07XG5cbiAgICBfdGhpcy5nZXRDbGFzc05hbWVzID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gX3RoaXMucHJvcHMuY2xhc3NOYW1lcztcbiAgICAgIHZhciBpc1N0cmluZ0NsYXNzTmFtZXMgPSB0eXBlb2YgY2xhc3NOYW1lcyA9PT0gJ3N0cmluZyc7XG4gICAgICB2YXIgcHJlZml4ID0gaXNTdHJpbmdDbGFzc05hbWVzICYmIGNsYXNzTmFtZXMgPyBjbGFzc05hbWVzICsgXCItXCIgOiAnJztcbiAgICAgIHZhciBiYXNlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gXCJcIiArIHByZWZpeCArIHR5cGUgOiBjbGFzc05hbWVzW3R5cGVdO1xuICAgICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1hY3RpdmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiQWN0aXZlXCJdO1xuICAgICAgdmFyIGRvbmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItZG9uZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJEb25lXCJdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogYmFzZUNsYXNzTmFtZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lOiBhY3RpdmVDbGFzc05hbWUsXG4gICAgICAgIGRvbmVDbGFzc05hbWU6IGRvbmVDbGFzc05hbWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBDU1NUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCB0eXBlLCBwaGFzZSkge1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmdldENsYXNzTmFtZXModHlwZSlbcGhhc2UgKyBcIkNsYXNzTmFtZVwiXTtcblxuICAgIHZhciBfdGhpcyRnZXRDbGFzc05hbWVzID0gdGhpcy5nZXRDbGFzc05hbWVzKCdlbnRlcicpLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkZ2V0Q2xhc3NOYW1lcy5kb25lQ2xhc3NOYW1lO1xuXG4gICAgaWYgKHR5cGUgPT09ICdhcHBlYXInICYmIHBoYXNlID09PSAnZG9uZScgJiYgZG9uZUNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgZG9uZUNsYXNzTmFtZTtcbiAgICB9IC8vIFRoaXMgaXMgdG8gZm9yY2UgYSByZXBhaW50LFxuICAgIC8vIHdoaWNoIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byB0cmFuc2l0aW9uIHN0eWxlcyB3aGVuIGFkZGluZyBhIGNsYXNzIG5hbWUuXG5cblxuICAgIGlmIChwaGFzZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdW3BoYXNlXSA9IGNsYXNzTmFtZTtcblxuICAgICAgX2FkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVDbGFzc2VzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKSB7XG4gICAgdmFyIF90aGlzJGFwcGxpZWRDbGFzc2VzJCA9IHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0sXG4gICAgICAgIGJhc2VDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYmFzZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmFjdGl2ZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5kb25lO1xuICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0gPSB7fTtcblxuICAgIGlmIChiYXNlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBiYXNlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChkb25lQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBkb25lQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lcyxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2xhc3NOYW1lc1wiXSk7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBvbkVudGVyOiB0aGlzLm9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMub25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5vbkVudGVyaW5nLFxuICAgICAgb25FeGl0OiB0aGlzLm9uRXhpdCxcbiAgICAgIG9uRXhpdGluZzogdGhpcy5vbkV4aXRpbmcsXG4gICAgICBvbkV4aXRlZDogdGhpcy5vbkV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gQ1NTVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuQ1NTVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZXM6ICcnXG59O1xuQ1NTVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBfZXh0ZW5kcyh7fSwgVHJhbnNpdGlvbi5wcm9wVHlwZXMsIHtcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRpb24gY2xhc3NOYW1lcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQgYXMgaXQgYXBwZWFycywgZW50ZXJzLFxuICAgKiBleGl0cyBvciBoYXMgZmluaXNoZWQgdGhlIHRyYW5zaXRpb24uIEEgc2luZ2xlIG5hbWUgY2FuIGJlIHByb3ZpZGVkLCB3aGljaFxuICAgKiB3aWxsIGJlIHN1ZmZpeGVkIGZvciBlYWNoIHN0YWdlLCBlLmcuIGBjbGFzc05hbWVzPVwiZmFkZVwiYCBhcHBsaWVzOlxuICAgKlxuICAgKiAtIGBmYWRlLWFwcGVhcmAsIGBmYWRlLWFwcGVhci1hY3RpdmVgLCBgZmFkZS1hcHBlYXItZG9uZWBcbiAgICogLSBgZmFkZS1lbnRlcmAsIGBmYWRlLWVudGVyLWFjdGl2ZWAsIGBmYWRlLWVudGVyLWRvbmVgXG4gICAqIC0gYGZhZGUtZXhpdGAsIGBmYWRlLWV4aXQtYWN0aXZlYCwgYGZhZGUtZXhpdC1kb25lYFxuICAgKlxuICAgKiBBIGZldyBkZXRhaWxzIHRvIG5vdGUgYWJvdXQgaG93IHRoZXNlIGNsYXNzZXMgYXJlIGFwcGxpZWQ6XG4gICAqXG4gICAqIDEuIFRoZXkgYXJlIF9qb2luZWRfIHdpdGggdGhlIG9uZXMgdGhhdCBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZSBjaGlsZFxuICAgKiAgICBjb21wb25lbnQsIHNvIGlmIHlvdSB3YW50IHRvIGFkZCBzb21lIGJhc2Ugc3R5bGVzLCB5b3UgY2FuIHVzZVxuICAgKiAgICBgY2xhc3NOYW1lYCB3aXRob3V0IHdvcnJ5aW5nIHRoYXQgaXQgd2lsbCBiZSBvdmVycmlkZGVuLlxuICAgKlxuICAgKiAyLiBJZiB0aGUgdHJhbnNpdGlvbiBjb21wb25lbnQgbW91bnRzIHdpdGggYGluPXtmYWxzZX1gLCBubyBjbGFzc2VzIGFyZVxuICAgKiAgICBhcHBsaWVkIHlldC4gWW91IG1pZ2h0IGJlIGV4cGVjdGluZyBgKi1leGl0LWRvbmVgLCBidXQgaWYgeW91IHRoaW5rXG4gICAqICAgIGFib3V0IGl0LCBhIGNvbXBvbmVudCBjYW5ub3QgZmluaXNoIGV4aXRpbmcgaWYgaXQgaGFzbid0IGVudGVyZWQgeWV0LlxuICAgKlxuICAgKiAyLiBgZmFkZS1hcHBlYXItZG9uZWAgYW5kIGBmYWRlLWVudGVyLWRvbmVgIHdpbGwgX2JvdGhfIGJlIGFwcGxpZWQuIFRoaXNcbiAgICogICAgYWxsb3dzIHlvdSB0byBkZWZpbmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciB3aGVuIGFwcGVhcmluZyBpcyBkb25lIGFuZFxuICAgKiAgICB3aGVuIHJlZ3VsYXIgZW50ZXJpbmcgaXMgZG9uZSwgdXNpbmcgc2VsZWN0b3JzIGxpa2VcbiAgICogICAgYC5mYWRlLWVudGVyLWRvbmU6bm90KC5mYWRlLWFwcGVhci1kb25lKWAuIEZvciBleGFtcGxlLCB5b3UgY291bGQgYXBwbHlcbiAgICogICAgYW4gZXBpYyBlbnRyYW5jZSBhbmltYXRpb24gd2hlbiBlbGVtZW50IGZpcnN0IGFwcGVhcnMgaW4gdGhlIERPTSB1c2luZ1xuICAgKiAgICBbQW5pbWF0ZS5jc3NdKGh0dHBzOi8vZGFuZWRlbi5naXRodWIuaW8vYW5pbWF0ZS5jc3MvKS4gT3RoZXJ3aXNlIHlvdSBjYW5cbiAgICogICAgc2ltcGx5IHVzZSBgZmFkZS1lbnRlci1kb25lYCBmb3IgZGVmaW5pbmcgYm90aCBjYXNlcy5cbiAgICpcbiAgICogRWFjaCBpbmRpdmlkdWFsIGNsYXNzTmFtZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluZGVwZW5kZW50bHkgbGlrZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17e1xuICAgKiAgYXBwZWFyOiAnbXktYXBwZWFyJyxcbiAgICogIGFwcGVhckFjdGl2ZTogJ215LWFjdGl2ZS1hcHBlYXInLFxuICAgKiAgYXBwZWFyRG9uZTogJ215LWRvbmUtYXBwZWFyJyxcbiAgICogIGVudGVyOiAnbXktZW50ZXInLFxuICAgKiAgZW50ZXJBY3RpdmU6ICdteS1hY3RpdmUtZW50ZXInLFxuICAgKiAgZW50ZXJEb25lOiAnbXktZG9uZS1lbnRlcicsXG4gICAqICBleGl0OiAnbXktZXhpdCcsXG4gICAqICBleGl0QWN0aXZlOiAnbXktYWN0aXZlLWV4aXQnLFxuICAgKiAgZXhpdERvbmU6ICdteS1kb25lLWV4aXQnLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gc2V0IHRoZXNlIGNsYXNzZXMgdXNpbmcgQ1NTIE1vZHVsZXM6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcbiAgICogYGBgXG4gICAqXG4gICAqIHlvdSBtaWdodCB3YW50IHRvIHVzZSBjYW1lbENhc2UgaW4geW91ciBDU1MgZmlsZSwgdGhhdCB3YXkgY291bGQgc2ltcGx5XG4gICAqIHNwcmVhZCB0aGVtIGluc3RlYWQgb2YgbGlzdGluZyB0aGVtIG9uZSBieSBvbmU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3sgLi4uc3R5bGVzIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwge1xuICAgKiAgYXBwZWFyPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyRG9uZT86IHN0cmluZyxcbiAgICogIGVudGVyPzogc3RyaW5nLFxuICAgKiAgZW50ZXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBlbnRlckRvbmU/OiBzdHJpbmcsXG4gICAqICBleGl0Pzogc3RyaW5nLFxuICAgKiAgZXhpdEFjdGl2ZT86IHN0cmluZyxcbiAgICogIGV4aXREb25lPzogc3RyaW5nLFxuICAgKiB9fVxuICAgKi9cbiAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1NoYXBlLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yICdhcHBlYXInIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXItYWN0aXZlJyBvclxuICAgKiAnYXBwZWFyLWFjdGl2ZScgY2xhc3MgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3JcbiAgICogJ2FwcGVhcicgY2xhc3NlcyBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0LWFjdGl2ZScgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzc2VzXG4gICAqIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBleGl0LWRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSkgOiB7fTtcbmV4cG9ydCBkZWZhdWx0IENTU1RyYW5zaXRpb247IiwiaW1wb3J0IGhhc0NsYXNzIGZyb20gJy4vaGFzQ2xhc3MnO1xuLyoqXG4gKiBBZGRzIGEgQ1NTIGNsYXNzIHRvIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7ZWxzZSBpZiAoIWhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgXCIgXCIgKyBjbGFzc05hbWU7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJykgKyBcIiBcIiArIGNsYXNzTmFtZSk7XG59IiwiLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBlbGVtZW50IGhhcyBhIENTUyBjbGFzcy5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICByZXR1cm4gKFwiIFwiICsgKGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgZWxlbWVudC5jbGFzc05hbWUpICsgXCIgXCIpLmluZGV4T2YoXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIikgIT09IC0xO1xufSIsImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwIGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwJztcbi8qKlxuICogVGhlIGA8UmVwbGFjZVRyYW5zaXRpb24+YCBjb21wb25lbnQgaXMgYSBzcGVjaWFsaXplZCBgVHJhbnNpdGlvbmAgY29tcG9uZW50XG4gKiB0aGF0IGFuaW1hdGVzIGJldHdlZW4gdHdvIGNoaWxkcmVuLlxuICpcbiAqIGBgYGpzeFxuICogPFJlcGxhY2VUcmFuc2l0aW9uIGluPlxuICogICA8RmFkZT48ZGl2PkkgYXBwZWFyIGZpcnN0PC9kaXY+PC9GYWRlPlxuICogICA8RmFkZT48ZGl2PkkgcmVwbGFjZSB0aGUgYWJvdmU8L2Rpdj48L0ZhZGU+XG4gKiA8L1JlcGxhY2VUcmFuc2l0aW9uPlxuICogYGBgXG4gKi9cblxudmFyIFJlcGxhY2VUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFJlcGxhY2VUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBSZXBsYWNlVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgX2FyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBfYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KF9hcmdzKSkgfHwgdGhpcztcblxuICAgIF90aGlzLmhhbmRsZUVudGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcicsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJpbmcnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJlZCcsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0JywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcbiAgICAgICAgYXJnc1tfa2V5Nl0gPSBhcmd1bWVudHNbX2tleTZdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRpbmcnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0ZWQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJlcGxhY2VUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlTGlmZWN5Y2xlID0gZnVuY3Rpb24gaGFuZGxlTGlmZWN5Y2xlKGhhbmRsZXIsIGlkeCwgb3JpZ2luYWxBcmdzKSB7XG4gICAgdmFyIF9jaGlsZCRwcm9wcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbilbaWR4XTtcbiAgICBpZiAoY2hpbGQucHJvcHNbaGFuZGxlcl0pIChfY2hpbGQkcHJvcHMgPSBjaGlsZC5wcm9wcylbaGFuZGxlcl0uYXBwbHkoX2NoaWxkJHByb3BzLCBvcmlnaW5hbEFyZ3MpO1xuXG4gICAgaWYgKHRoaXMucHJvcHNbaGFuZGxlcl0pIHtcbiAgICAgIHZhciBtYXliZU5vZGUgPSBjaGlsZC5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICB0aGlzLnByb3BzW2hhbmRsZXJdKG1heWJlTm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgaW5Qcm9wID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIl0pO1xuXG4gICAgdmFyIF9SZWFjdCRDaGlsZHJlbiR0b0FyciA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLFxuICAgICAgICBmaXJzdCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclswXSxcbiAgICAgICAgc2Vjb25kID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzFdO1xuXG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJlZDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGVkO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXAsIHByb3BzLCBpblByb3AgPyBSZWFjdC5jbG9uZUVsZW1lbnQoZmlyc3QsIHtcbiAgICAgIGtleTogJ2ZpcnN0JyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRW50ZXIsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUVudGVyaW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUVudGVyZWRcbiAgICB9KSA6IFJlYWN0LmNsb25lRWxlbWVudChzZWNvbmQsIHtcbiAgICAgIGtleTogJ3NlY29uZCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUV4aXQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUV4aXRpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBSZXBsYWNlVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUmVwbGFjZVRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBpbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IGZ1bmN0aW9uIGNoaWxkcmVuKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIGlmIChSZWFjdC5DaGlsZHJlbi5jb3VudChwcm9wc1twcm9wTmFtZV0pICE9PSAyKSByZXR1cm4gbmV3IEVycm9yKFwiXFxcIlwiICsgcHJvcE5hbWUgKyBcIlxcXCIgbXVzdCBiZSBleGFjdGx5IHR3byB0cmFuc2l0aW9uIGNvbXBvbmVudHMuXCIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IDoge307XG5leHBvcnQgZGVmYXVsdCBSZXBsYWNlVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcblxudmFyIF9sZWF2ZVJlbmRlcnMsIF9lbnRlclJlbmRlcnM7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRU5URVJFRCwgRU5URVJJTkcsIEVYSVRJTkcgfSBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcblxuZnVuY3Rpb24gYXJlQ2hpbGRyZW5EaWZmZXJlbnQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuKSB7XG4gIGlmIChvbGRDaGlsZHJlbiA9PT0gbmV3Q2hpbGRyZW4pIHJldHVybiBmYWxzZTtcblxuICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQob2xkQ2hpbGRyZW4pICYmIFJlYWN0LmlzVmFsaWRFbGVtZW50KG5ld0NoaWxkcmVuKSAmJiBvbGRDaGlsZHJlbi5rZXkgIT0gbnVsbCAmJiBvbGRDaGlsZHJlbi5rZXkgPT09IG5ld0NoaWxkcmVuLmtleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBFbnVtIG9mIG1vZGVzIGZvciBTd2l0Y2hUcmFuc2l0aW9uIGNvbXBvbmVudFxuICogQGVudW0geyBzdHJpbmcgfVxuICovXG5cblxuZXhwb3J0IHZhciBtb2RlcyA9IHtcbiAgb3V0OiAnb3V0LWluJyxcbiAgaW46ICdpbi1vdXQnXG59O1xuXG52YXIgY2FsbEhvb2sgPSBmdW5jdGlvbiBjYWxsSG9vayhlbGVtZW50LCBuYW1lLCBjYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZWxlbWVudCRwcm9wcztcblxuICAgIGVsZW1lbnQucHJvcHNbbmFtZV0gJiYgKF9lbGVtZW50JHByb3BzID0gZWxlbWVudC5wcm9wcylbbmFtZV0uYXBwbHkoX2VsZW1lbnQkcHJvcHMsIGFyZ3VtZW50cyk7XG4gICAgY2IoKTtcbiAgfTtcbn07XG5cbnZhciBsZWF2ZVJlbmRlcnMgPSAoX2xlYXZlUmVuZGVycyA9IHt9LCBfbGVhdmVSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgY3VycmVudCA9IF9yZWYuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZi5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORywgbnVsbCk7XG4gICAgfSlcbiAgfSk7XG59LCBfbGVhdmVSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgY3VycmVudCA9IF9yZWYyLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYyLmNoYW5nZVN0YXRlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgcmV0dXJuIFtjdXJyZW50LCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcpO1xuICAgIH0pXG4gIH0pXTtcbn0sIF9sZWF2ZVJlbmRlcnMpO1xudmFyIGVudGVyUmVuZGVycyA9IChfZW50ZXJSZW5kZXJzID0ge30sIF9lbnRlclJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMy5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjMuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSk7XG59LCBfZW50ZXJSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY3VycmVudCA9IF9yZWY0LmN1cnJlbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmNC5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFtSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSksIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlXG4gIH0pXTtcbn0sIF9lbnRlclJlbmRlcnMpO1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBbdnVlIHRyYW5zaXRpb24gbW9kZXNdKGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3RyYW5zaXRpb25zLmh0bWwjVHJhbnNpdGlvbi1Nb2RlcykuXG4gKiBZb3UgY2FuIHVzZSBpdCB3aGVuIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIHJlbmRlciBiZXR3ZWVuIHN0YXRlIHRyYW5zaXRpb25zLlxuICogQmFzZWQgb24gdGhlIHNlbGVjdGVkIG1vZGUgYW5kIHRoZSBjaGlsZCdzIGtleSB3aGljaCBpcyB0aGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgbWFrZXMgYSBjb25zaXN0ZW50IHRyYW5zaXRpb24gYmV0d2VlbiB0aGVtLlxuICpcbiAqIElmIHRoZSBgb3V0LWluYCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIHdhaXRzIHVudGlsIHRoZSBvbGQgY2hpbGQgbGVhdmVzIGFuZCB0aGVuIGluc2VydHMgYSBuZXcgY2hpbGQuXG4gKiBJZiB0aGUgYGluLW91dGAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBpbnNlcnRzIGEgbmV3IGNoaWxkIGZpcnN0LCB3YWl0cyBmb3IgdGhlIG5ldyBjaGlsZCB0byBlbnRlciBhbmQgdGhlbiByZW1vdmVzIHRoZSBvbGQgY2hpbGQuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSB3YW50IHRoZSBhbmltYXRpb24gdG8gaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gKiAodGhhdCBpcywgdG8gaGF2ZSB0aGUgb2xkIGNoaWxkIHJlbW92ZWQgYW5kIGEgbmV3IGNoaWxkIGluc2VydGVkICoqYXQgdGhlIHNhbWUgdGltZSoqKSxcbiAqIHlvdSBzaG91bGQgdXNlXG4gKiBbYFRyYW5zaXRpb25Hcm91cGBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi1ncm91cClcbiAqIGluc3RlYWQuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgcmV0dXJuIChcbiAqICAgIDxTd2l0Y2hUcmFuc2l0aW9uPlxuICogICAgICA8Q1NTVHJhbnNpdGlvblxuICogICAgICAgIGtleT17c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIGRvbmUsIGZhbHNlKX1cbiAqICAgICAgICBjbGFzc05hbWVzPSdmYWRlJ1xuICogICAgICA+XG4gKiAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRTdGF0ZShzdGF0ZSA9PiAhc3RhdGUpfT5cbiAqICAgICAgICAgIHtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICA8L2J1dHRvbj5cbiAqICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgPC9Td2l0Y2hUcmFuc2l0aW9uPlxuICogICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGBjc3NcbiAqIC5mYWRlLWVudGVye1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWV4aXR7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZle1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZSxcbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgdHJhbnNpdGlvbjogb3BhY2l0eSA1MDBtcztcbiAqIH1cbiAqIGBgYFxuICovXG5cbnZhciBTd2l0Y2hUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXRjaFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN3aXRjaFRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IEVOVEVSRUQsXG4gICAgICBjdXJyZW50OiBudWxsXG4gICAgfTtcbiAgICBfdGhpcy5hcHBlYXJlZCA9IGZhbHNlO1xuXG4gICAgX3RoaXMuY2hhbmdlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdHVzLCBjdXJyZW50KSB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcy5zdGF0ZS5jdXJyZW50O1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBjdXJyZW50OiBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXRjaFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuYXBwZWFyZWQgPSB0cnVlO1xuICB9O1xuXG4gIFN3aXRjaFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgIGlmIChwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50OiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09IEVOVEVSSU5HICYmIHByb3BzLm1vZGUgPT09IG1vZGVzLmluKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5jdXJyZW50ICYmIGFyZUNoaWxkcmVuRGlmZmVyZW50KHN0YXRlLmN1cnJlbnQsIHByb3BzLmNoaWxkcmVuKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiBSZWFjdC5jbG9uZUVsZW1lbnQocHJvcHMuY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIG1vZGUgPSBfdGhpcyRwcm9wcy5tb2RlLFxuICAgICAgICBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHN0YXR1cyA9IF90aGlzJHN0YXRlLnN0YXR1cyxcbiAgICAgICAgY3VycmVudCA9IF90aGlzJHN0YXRlLmN1cnJlbnQ7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGU6IHRoaXMuY2hhbmdlU3RhdGUsXG4gICAgICBzdGF0dXM6IHN0YXR1c1xuICAgIH07XG4gICAgdmFyIGNvbXBvbmVudDtcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIEVOVEVSSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBlbnRlclJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVYSVRJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGxlYXZlUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRU5URVJFRDpcbiAgICAgICAgY29tcG9uZW50ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogIXRoaXMuYXBwZWFyZWRcbiAgICAgIH1cbiAgICB9LCBjb21wb25lbnQpO1xuICB9O1xuXG4gIHJldHVybiBTd2l0Y2hUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Td2l0Y2hUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIFRyYW5zaXRpb24gbW9kZXMuXG4gICAqIGBvdXQtaW5gOiBDdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0IGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBuZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbi5cbiAgICogYGluLW91dGA6IE5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluIGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBjdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0LlxuICAgKlxuICAgKiBAdHlwZSB7J291dC1pbid8J2luLW91dCd9XG4gICAqL1xuICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW21vZGVzLmluLCBtb2Rlcy5vdXRdKSxcblxuICAvKipcbiAgICogQW55IGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKVxufSA6IHt9O1xuU3dpdGNoVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIG1vZGU6IG1vZGVzLm91dFxufTtcbmV4cG9ydCBkZWZhdWx0IFN3aXRjaFRyYW5zaXRpb247IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgUmVhY3QtTG9hZGluZy1PdmVybGF5IDEuMFxuLy8gUHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL2RlcnJpY2twZWxsZXRpZXIvcmVhY3QtbG9hZGluZy1vdmVybGF5XG4vLyBEZWZpbml0aW9ucyBieTogRGVmaW5pdGVseVR5cGVkIDxodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkXG5jb25zdCBjc3NfMSA9IHJlcXVpcmUoXCJAZW1vdGlvbi9jc3NcIik7XG5jb25zdCByZWFjdF90cmFuc2l0aW9uX2dyb3VwXzEgPSByZXF1aXJlKFwicmVhY3QtdHJhbnNpdGlvbi1ncm91cFwiKTtcbmNvbnN0IHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IFNwaW5uZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb25lbnRzL1NwaW5uZXJcIikpO1xuY29uc3Qgc3R5bGVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVzXCIpKTtcbmNsYXNzIExvYWRpbmdPdmVybGF5IGV4dGVuZHMgcmVhY3RfMS5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLndyYXBwZXIgPSAoMCwgcmVhY3RfMS5jcmVhdGVSZWYpKCk7XG4gICAgICAgIHRoaXMubm9kZVJlZiA9ICgwLCByZWFjdF8xLmNyZWF0ZVJlZikoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiBhbiBlbW90aW9uIGNzcyBvYmplY3QgZm9yIGEgZ2l2ZW4gZWxlbWVudCBrZXlcbiAgICAgICAgICogSWYgYSBjdXN0b20gc3R5bGUgd2FzIHByb3ZpZGVkIHZpYSBwcm9wcywgcnVuIGl0IHdpdGhcbiAgICAgICAgICogdGhlIGJhc2UgY3NzIG9iai5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0U3R5bGVzID0gKGtleSwgcHJvdmlkZWRTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IHN0eWxlc18xLmRlZmF1bHRba2V5XShwcm92aWRlZFN0YXRlLCB0aGlzLnByb3BzKTtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMucHJvcHMuc3R5bGVzID8gdGhpcy5wcm9wcy5zdHlsZXNba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghY3VzdG9tKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGN1c3RvbSA9PT0gXCJmdW5jdGlvblwiID8gY3VzdG9tKGJhc2UsIHRoaXMucHJvcHMpIDogY3VzdG9tO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29udmVuaWVuY2UgY3ggd3JhcHBlciB0byBhZGQgcHJlZml4IGNsYXNzZXMgdG8gZWFjaCBvZiB0aGUgY2hpbGRcbiAgICAgICAgICogZWxlbWVudHMgZm9yIHN0eWxpbmcgcHVycG9zZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmN4ID0gKG5hbWVzLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KG5hbWVzKSA/IG5hbWVzIDogW25hbWVzXTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgY3NzXzEuY3gpKC4uLmFyci5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyBgJHsoX2EgPSB0aGlzLnByb3BzLmNsYXNzTmFtZVByZWZpeCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJfbG9hZGluZ19vdmVybGF5X1wifSR7bmFtZX1gXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH0pLCAuLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgb3ZlcmZsb3dDU1M6IHt9IH07XG4gICAgfVxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBjb25zdCB3cmFwcGVyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLndyYXBwZXIuY3VycmVudCk7XG4gICAgICAgIGNvbnN0IG92ZXJmbG93Q1NTID0gW1wib3ZlcmZsb3dcIiwgXCJvdmVyZmxvd1hcIiwgXCJvdmVyZmxvd1lcIl0ucmVkdWNlKChtLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAod3JhcHBlclN0eWxlW2ldICE9PSBcInZpc2libGVcIilcbiAgICAgICAgICAgICAgICBtW2ldID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBvdmVyZmxvd0NTUyB9KTtcbiAgICB9XG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgICBjb25zdCB7IGFjdGl2ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGFjdGl2ZSlcbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5jdXJyZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBvbkNsaWNrLCBhY3RpdmUsIGZhZGVTcGVlZCA9IDUwMCwgc3Bpbm5lciwgdGV4dCwgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBcImRhdGEtdGVzdGlkXCI6IFwid3JhcHBlclwiLCByZWY6IHRoaXMud3JhcHBlciwgY2xhc3NOYW1lOiB0aGlzLmN4KFtcIndyYXBwZXJcIiwgYWN0aXZlICYmIFwid3JhcHBlci0tYWN0aXZlXCJdLCAoMCwgY3NzXzEuY3NzKSh0aGlzLmdldFN0eWxlcyhcIndyYXBwZXJcIiwgYWN0aXZlID8gdGhpcy5zdGF0ZS5vdmVyZmxvd0NTUyA6IHt9KSksIGNsYXNzTmFtZSkgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlYWN0X3RyYW5zaXRpb25fZ3JvdXBfMS5DU1NUcmFuc2l0aW9uLCB7IGluOiBhY3RpdmUsIGNsYXNzTmFtZXM6IFwiX2xvYWRpbmctb3ZlcmxheS10cmFuc2l0aW9uXCIsIHRpbWVvdXQ6IGZhZGVTcGVlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSwgcmVmOiB0aGlzLm5vZGVSZWYsIGFkZEVuZExpc3RlbmVyOiAoKSA9PiB7IH0gfSwgKHN0YXRlKSA9PiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBcImRhdGEtdGVzdGlkXCI6IFwib3ZlcmxheVwiLCBjbGFzc05hbWU6IHRoaXMuY3goXCJvdmVybGF5XCIsICgwLCBjc3NfMS5jc3MpKHRoaXMuZ2V0U3R5bGVzKFwib3ZlcmxheVwiLCBzdGF0ZSkpKSwgb25DbGljazogb25DbGljayB9LFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB0aGlzLmN4KFwiY29udGVudFwiLCAoMCwgY3NzXzEuY3NzKSh0aGlzLmdldFN0eWxlcyhcImNvbnRlbnRcIikpKSwgcmVmOiB0aGlzLm5vZGVSZWYgfSxcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBzcGlubmVyID09PSBcImJvb2xlYW5cIiA/IChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChTcGlubmVyXzEuZGVmYXVsdCwgeyBjeDogdGhpcy5jeCwgZ2V0U3R5bGVzOiB0aGlzLmdldFN0eWxlcyB9KSkgOiAoc3Bpbm5lcikpLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0KSkpKSxcbiAgICAgICAgICAgIGNoaWxkcmVuKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTG9hZGluZ092ZXJsYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgTG9hZGluZ092ZXJsYXkgZnJvbSBcInJlYWN0LWxvYWRpbmctb3ZlcmxheS1uZXh0Z2VuXCI7XG5cbmludGVyZmFjZSBUYWJsZUxvYWRpbmdPdmVybGF5V3JhcHBlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKG9wdGlvbnM/OiBhbnkpID0+IChsb2FkaW5nPzogYm9vbGVhbikgPT5cbiAgY2xhc3MgVGFibGVMb2FkaW5nT3ZlcmxheVdyYXBwZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8VGFibGVMb2FkaW5nT3ZlcmxheVdyYXBwZXJQcm9wcz4ge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgICB9O1xuXG4gICAgb3ZlcmxheTogYW55O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAobG9hZGluZykge1xuICAgICAgICBjb25zdCB7IHdyYXBwZXIgfSA9IHRoaXMub3ZlcmxheTtcbiAgICAgICAgY29uc3QgbWFza2VyID0gd3JhcHBlci5jdXJyZW50LmZpcnN0Q2hpbGQ7XG4gICAgICAgIGNvbnN0IGhlYWRlckRPTSA9IHdyYXBwZXIuY3VycmVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0aGVhZFwiKTtcbiAgICAgICAgY29uc3QgYm9keURPTSA9IHdyYXBwZXIuY3VycmVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0Ym9keVwiKTtcbiAgICAgICAgY29uc3QgY2FwdGlvbkRPTSA9XG4gICAgICAgICAgd3JhcHBlci5jdXJyZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImNhcHRpb25cIik7XG4gICAgICAgIGxldCBtYXJnaW5Ub3AgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShoZWFkZXJET00pLmhlaWdodDtcbiAgICAgICAgaWYgKGNhcHRpb25ET00pIHtcbiAgICAgICAgICBtYXJnaW5Ub3AgPSBwYXJzZUZsb2F0KG1hcmdpblRvcC5yZXBsYWNlKFwicHhcIiwgXCJcIikpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgbWFyZ2luVG9wICs9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjYXB0aW9uRE9NKS5oZWlnaHQucmVwbGFjZShcInB4XCIsIFwiXCIpXG4gICAgICAgICAgKS50b1N0cmluZygpO1xuICAgICAgICAgIG1hcmdpblRvcCA9IGAke21hcmdpblRvcH1weGA7XG4gICAgICAgIH1cbiAgICAgICAgbWFza2VyLnN0eWxlLm1hcmdpblRvcCA9IG1hcmdpblRvcDtcbiAgICAgICAgbWFza2VyLnN0eWxlLmhlaWdodCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGJvZHlET00pLmhlaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TG9hZGluZ092ZXJsYXlcbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+ICh0aGlzLm92ZXJsYXkgPSBuKX1cbiAgICAgICAgICB7Li4ub3B0aW9uc31cbiAgICAgICAgICBhY3RpdmU9e2xvYWRpbmd9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9Mb2FkaW5nT3ZlcmxheT5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjc3NfMSA9IHJlcXVpcmUoXCJAZW1vdGlvbi9jc3NcIik7XG5jb25zdCByb3RhdGUzNjAgPSAoMCwgY3NzXzEua2V5ZnJhbWVzKSBgXG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG5gO1xuY29uc3Qgc3Bpbm5lckRhc2ggPSAoMCwgY3NzXzEua2V5ZnJhbWVzKSBgXG4gIDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxLDIwMDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgfVxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg5LDIwMDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTM1cHg7XG4gIH1cbiAgMTAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODksMjAwO1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTI0cHg7XG4gIH1cbmA7XG5jb25zdCBTVFlMRVMgPSB7XG4gICAgd3JhcHBlcjogKHN0YXRlKSA9PiAoT2JqZWN0LmFzc2lnbih7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIgfSwgc3RhdGUpKSxcbiAgICBvdmVybGF5OiAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgIHRvcDogXCIwcHhcIixcbiAgICAgICAgbGVmdDogXCIwcHhcIixcbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgZm9udFNpemU6IFwiMS4yZW1cIixcbiAgICAgICAgY29sb3I6IFwiI0ZGRlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcInJnYmEoMCwgMCwgMCwgMC43KVwiLFxuICAgICAgICB6SW5kZXg6IDgwMCxcbiAgICAgICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtwcm9wcy5mYWRlU3BlZWR9bXMgZWFzZS1pbmAsXG4gICAgICAgIG9wYWNpdHk6IHN0YXRlID09PSBcImVudGVyaW5nXCIgfHwgc3RhdGUgPT09IFwiZW50ZXJlZFwiID8gMSA6IDAsXG4gICAgfSksXG4gICAgY29udGVudDogKCkgPT4gKHtcbiAgICAgICAgbWFyZ2luOiBcImF1dG9cIixcbiAgICB9KSxcbiAgICBzcGlubmVyOiAoKSA9PiAoe1xuICAgICAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgICAgICBtYXJnaW46IFwiMHB4IGF1dG8gMTBweCBhdXRvXCIsXG4gICAgICAgIHdpZHRoOiBcIjUwcHhcIixcbiAgICAgICAgbWF4SGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgXCImOmJlZm9yZVwiOiB7XG4gICAgICAgICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICAgICAgICBwYWRkaW5nVG9wOiBcIjEwMCVcIixcbiAgICAgICAgfSxcbiAgICAgICAgXCImIHN2Z1wiOiB7XG4gICAgICAgICAgICBhbmltYXRpb246IGAke3JvdGF0ZTM2MH0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IFwiY2VudGVyIGNlbnRlclwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgIHRvcDogXCIwXCIsXG4gICAgICAgICAgICBib3R0b206IFwiMFwiLFxuICAgICAgICAgICAgbGVmdDogXCIwXCIsXG4gICAgICAgICAgICByaWdodDogXCIwXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiYXV0b1wiLFxuICAgICAgICAgICAgXCImIGNpcmNsZVwiOiB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBgJHtzcGlubmVyRGFzaH0gMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZWAsXG4gICAgICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBcIjEsMjAwXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogMCxcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiNGRkZcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gU1RZTEVTO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLmpzLm1hcCIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjc3NfMSA9IHJlcXVpcmUoXCJAZW1vdGlvbi9jc3NcIik7XG5jb25zdCBwcm9wX3R5cGVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuY29uc3QgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgU3Bpbm5lciA9ICh7IGdldFN0eWxlcywgY3ggfSkgPT4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjeChcInNwaW5uZXJcIiwgKDAsIGNzc18xLmNzcykoZ2V0U3R5bGVzKFwic3Bpbm5lclwiKSkpIH0sXG4gICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjI1IDI1IDUwIDUwXCIgfSxcbiAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwgeyBjeDogXCI1MFwiLCBjeTogXCI1MFwiLCByOiBcIjIwXCIsIGZpbGw6IFwibm9uZVwiLCBzdHJva2VXaWR0aDogXCIyXCIsIHN0cm9rZU1pdGVybGltaXQ6IFwiMTBcIiB9KSkpKTtcblNwaW5uZXIucHJvcFR5cGVzID0ge1xuICAgIGdldFN0eWxlczogcHJvcF90eXBlc18xLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGN4OiBwcm9wX3R5cGVzXzEuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gU3Bpbm5lcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNwaW5uZXIuanMubWFwIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NjIpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX18iLCJTdHlsZVNoZWV0Iiwib3B0aW9ucyIsIl90aGlzIiwidGhpcyIsIl9pbnNlcnRUYWciLCJ0YWciLCJiZWZvcmUiLCJ0YWdzIiwibGVuZ3RoIiwiaW5zZXJ0aW9uUG9pbnQiLCJuZXh0U2libGluZyIsInByZXBlbmQiLCJjb250YWluZXIiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicHVzaCIsImlzU3BlZWR5IiwidW5kZWZpbmVkIiwic3BlZWR5IiwiY3RyIiwibm9uY2UiLCJrZXkiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJoeWRyYXRlIiwibm9kZXMiLCJmb3JFYWNoIiwiaW5zZXJ0IiwicnVsZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJjcmVhdGVTdHlsZUVsZW1lbnQiLCJzaGVldCIsImkiLCJzdHlsZVNoZWV0cyIsIm93bmVyTm9kZSIsInNoZWV0Rm9yVGFnIiwiaW5zZXJ0UnVsZSIsImNzc1J1bGVzIiwiZSIsImZsdXNoIiwiX3RhZyRwYXJlbnROb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwiYWJzIiwiTWF0aCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIk9iamVjdCIsImFzc2lnbiIsInRyaW0iLCJ2YWx1ZSIsInBhdHRlcm4iLCJyZXBsYWNlbWVudCIsInJlcGxhY2UiLCJpbmRleG9mIiwic2VhcmNoIiwiaW5kZXhPZiIsImluZGV4IiwiY2hhckNvZGVBdCIsImJlZ2luIiwiZW5kIiwic2xpY2UiLCJhcnJheSIsImxpbmUiLCJjb2x1bW4iLCJwb3NpdGlvbiIsImNoYXJhY3RlciIsImNoYXJhY3RlcnMiLCJub2RlIiwicGFyZW50IiwidHlwZSIsInByb3BzIiwiY2hpbGRyZW4iLCJyZXR1cm4iLCJwcmV2IiwibmV4dCIsInBlZWsiLCJjYXJldCIsInRva2VuIiwiYWxsb2MiLCJkZWFsbG9jIiwiZGVsaW1pdCIsImRlbGltaXRlciIsIndoaXRlc3BhY2UiLCJlc2NhcGluZyIsImNvdW50IiwiY29tbWVudGVyIiwiaWRlbnRpZmllciIsIkNPTU1FTlQiLCJjYWxsYmFjayIsIm91dHB1dCIsInN0cmluZ2lmeSIsImVsZW1lbnQiLCJqb2luIiwiY29tcGlsZSIsInBhcnNlIiwicnVsZXMiLCJydWxlc2V0cyIsInBzZXVkbyIsInBvaW50cyIsImRlY2xhcmF0aW9ucyIsIm9mZnNldCIsImF0cnVsZSIsInByb3BlcnR5IiwicHJldmlvdXMiLCJ2YXJpYWJsZSIsInNjYW5uaW5nIiwiYW1wZXJzYW5kIiwicmVmZXJlbmNlIiwiY29tbWVudCIsImRlY2xhcmF0aW9uIiwicnVsZXNldCIsInBvc3QiLCJzaXplIiwiaiIsImsiLCJ4IiwieSIsInoiLCJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCJnZXRSdWxlcyIsInBhcnNlZCIsInRvUnVsZXMiLCJmaXhlZEVsZW1lbnRzIiwiV2Vha01hcCIsImNvbXBhdCIsImlzSW1wbGljaXRSdWxlIiwiZ2V0Iiwic2V0IiwicGFyZW50UnVsZXMiLCJyZW1vdmVMYWJlbCIsImhhc2giLCJkZWZhdWx0U3R5bGlzUGx1Z2lucyIsIm1hcCIsImV4ZWMiLCJjcmVhdGVDYWNoZSIsInNzclN0eWxlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJBcnJheSIsImNhbGwiLCJnZXRBdHRyaWJ1dGUiLCJoZWFkIiwiX2luc2VydCIsInN0eWxpc1BsdWdpbnMiLCJpbnNlcnRlZCIsIm5vZGVzVG9IeWRyYXRlIiwiYXR0cmliIiwic3BsaXQiLCJjdXJyZW50U2hlZXQiLCJjb2xsZWN0aW9uIiwiZmluYWxpemluZ1BsdWdpbnMiLCJzZXJpYWxpemVyIiwiY29uY2F0Iiwic2VsZWN0b3IiLCJzZXJpYWxpemVkIiwic2hvdWxkQ2FjaGUiLCJzdHlsZXMiLCJjYWNoZSIsIm5hbWUiLCJyZWdpc3RlcmVkIiwidW5pdGxlc3NLZXlzIiwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiLCJhc3BlY3RSYXRpbyIsImJvcmRlckltYWdlT3V0c2V0IiwiYm9yZGVySW1hZ2VTbGljZSIsImJvcmRlckltYWdlV2lkdGgiLCJib3hGbGV4IiwiYm94RmxleEdyb3VwIiwiYm94T3JkaW5hbEdyb3VwIiwiY29sdW1uQ291bnQiLCJjb2x1bW5zIiwiZmxleCIsImZsZXhHcm93IiwiZmxleFBvc2l0aXZlIiwiZmxleFNocmluayIsImZsZXhOZWdhdGl2ZSIsImZsZXhPcmRlciIsImdyaWRSb3ciLCJncmlkUm93RW5kIiwiZ3JpZFJvd1NwYW4iLCJncmlkUm93U3RhcnQiLCJncmlkQ29sdW1uIiwiZ3JpZENvbHVtbkVuZCIsImdyaWRDb2x1bW5TcGFuIiwiZ3JpZENvbHVtblN0YXJ0IiwibXNHcmlkUm93IiwibXNHcmlkUm93U3BhbiIsIm1zR3JpZENvbHVtbiIsIm1zR3JpZENvbHVtblNwYW4iLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJzY2FsZSIsInRhYlNpemUiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwiV2Via2l0TGluZUNsYW1wIiwiZmlsbE9wYWNpdHkiLCJmbG9vZE9wYWNpdHkiLCJzdG9wT3BhY2l0eSIsInN0cm9rZURhc2hhcnJheSIsInN0cm9rZURhc2hvZmZzZXQiLCJzdHJva2VNaXRlcmxpbWl0Iiwic3Ryb2tlT3BhY2l0eSIsInN0cm9rZVdpZHRoIiwibWVtb2l6ZSIsImZuIiwiY3JlYXRlIiwiYXJnIiwiaHlwaGVuYXRlUmVnZXgiLCJhbmltYXRpb25SZWdleCIsImlzQ3VzdG9tUHJvcGVydHkiLCJpc1Byb2Nlc3NhYmxlVmFsdWUiLCJwcm9jZXNzU3R5bGVOYW1lIiwic3R5bGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwcm9jZXNzU3R5bGVWYWx1ZSIsIm1hdGNoIiwicDEiLCJwMiIsImN1cnNvciIsImhhbmRsZUludGVycG9sYXRpb24iLCJtZXJnZWRQcm9wcyIsImludGVycG9sYXRpb24iLCJjb21wb25lbnRTZWxlY3RvciIsIl9fZW1vdGlvbl9zdHlsZXMiLCJrZXlmcmFtZXMiLCJhbmltIiwic2VyaWFsaXplZFN0eWxlcyIsIm9iaiIsInN0cmluZyIsImlzQXJyYXkiLCJhc1N0cmluZyIsImludGVycG9sYXRlZCIsIl9pIiwiY3JlYXRlU3RyaW5nRnJvbU9iamVjdCIsInByZXZpb3VzQ3Vyc29yIiwicmVzdWx0IiwiY2FjaGVkIiwibGFiZWxQYXR0ZXJuIiwic2VyaWFsaXplU3R5bGVzIiwiYXJncyIsInN0cmluZ01vZGUiLCJzdHJpbmdzIiwicmF3IiwibGFzdEluZGV4IiwiaWRlbnRpZmllck5hbWUiLCJzdHIiLCJoIiwibGVuIiwidG9TdHJpbmciLCJnZXRSZWdpc3RlcmVkU3R5bGVzIiwicmVnaXN0ZXJlZFN0eWxlcyIsImNsYXNzTmFtZXMiLCJyYXdDbGFzc05hbWUiLCJjbGFzc05hbWUiLCJpbnNlcnRXaXRob3V0U2NvcGluZyIsIm1lcmdlIiwiY3NzIiwiY2xhc3NuYW1lcyIsImNscyIsInRvQWRkIiwiX2NyZWF0ZUVtb3Rpb24iLCJfbGVuIiwiYXJndW1lbnRzIiwiX2tleSIsImlzU3RyaW5nVGFnIiwicmVnaXN0ZXJTdHlsZXMiLCJjdXJyZW50IiwiaW5zZXJ0U3R5bGVzIiwiY3giLCJfbGVuNCIsIl9rZXk0IiwiaW5qZWN0R2xvYmFsIiwiX2xlbjMiLCJfa2V5MyIsIl9sZW4yIiwiX2tleTIiLCJhbmltYXRpb24iLCJpZHMiLCJiaW5kIiwiY3JlYXRlRW1vdGlvbiIsIl9leHRlbmRzIiwibiIsInQiLCJyIiwiaGFzT3duUHJvcGVydHkiLCJhcHBseSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiX3NldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfaW5oZXJpdHNMb29zZSIsIm8iLCJjb25zdHJ1Y3RvciIsInJlcGxhY2VDbGFzc05hbWUiLCJvcmlnQ2xhc3MiLCJjbGFzc1RvUmVtb3ZlIiwiUmVnRXhwIiwiZGlzYWJsZWQiLCJmb3JjZVJlZmxvdyIsInNjcm9sbFRvcCIsIlVOTU9VTlRFRCIsIkVYSVRFRCIsIkVOVEVSSU5HIiwiRU5URVJFRCIsIkVYSVRJTkciLCJUcmFuc2l0aW9uIiwiX1JlYWN0JENvbXBvbmVudCIsImNvbnRleHQiLCJpbml0aWFsU3RhdHVzIiwiYXBwZWFyIiwiaXNNb3VudGluZyIsImVudGVyIiwiYXBwZWFyU3RhdHVzIiwiaW4iLCJ1bm1vdW50T25FeGl0IiwibW91bnRPbkVudGVyIiwic3RhdGUiLCJzdGF0dXMiLCJuZXh0Q2FsbGJhY2siLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJfcmVmIiwicHJldlN0YXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJ1cGRhdGVTdGF0dXMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjYW5jZWxOZXh0Q2FsbGJhY2siLCJnZXRUaW1lb3V0cyIsImV4aXQiLCJ0aW1lb3V0IiwibW91bnRpbmciLCJub2RlUmVmIiwicGVyZm9ybUVudGVyIiwicGVyZm9ybUV4aXQiLCJzZXRTdGF0ZSIsIl90aGlzMiIsImFwcGVhcmluZyIsIl9yZWYyIiwibWF5YmVOb2RlIiwibWF5YmVBcHBlYXJpbmciLCJ0aW1lb3V0cyIsImVudGVyVGltZW91dCIsImNvbmZpZyIsInNhZmVTZXRTdGF0ZSIsIm9uRW50ZXJlZCIsIm9uRW50ZXIiLCJvbkVudGVyaW5nIiwib25UcmFuc2l0aW9uRW5kIiwiX3RoaXMzIiwib25FeGl0Iiwib25FeGl0aW5nIiwib25FeGl0ZWQiLCJjYW5jZWwiLCJuZXh0U3RhdGUiLCJzZXROZXh0Q2FsbGJhY2siLCJfdGhpczQiLCJhY3RpdmUiLCJldmVudCIsImhhbmRsZXIiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwic2V0VGltZW91dCIsInJlbmRlciIsIl90aGlzJHByb3BzIiwiY2hpbGRQcm9wcyIsIlRyYW5zaXRpb25Hcm91cENvbnRleHQiLCJQcm92aWRlciIsIm9ubHkiLCJub29wIiwiY29udGV4dFR5cGUiLCJwcm9wVHlwZXMiLCJkZWZhdWx0UHJvcHMiLCJyZW1vdmVDbGFzcyIsImNsYXNzZXMiLCJjIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiYmFzZVZhbCIsIkNTU1RyYW5zaXRpb24iLCJhcHBsaWVkQ2xhc3NlcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudCIsInJlc29sdmVBcmd1bWVudHMiLCJyZW1vdmVDbGFzc2VzIiwiYWRkQ2xhc3MiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQyIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyIsImdldENsYXNzTmFtZXMiLCJpc1N0cmluZ0NsYXNzTmFtZXMiLCJiYXNlQ2xhc3NOYW1lIiwiYWN0aXZlQ2xhc3NOYW1lIiwiZG9uZUNsYXNzTmFtZSIsInBoYXNlIiwiYWRkIiwiY29udGFpbnMiLCJoYXNDbGFzcyIsIl9hZGRDbGFzcyIsIl90aGlzJGFwcGxpZWRDbGFzc2VzJCIsImJhc2UiLCJkb25lIiwiZ2V0Q2hpbGRNYXBwaW5nIiwibWFwRm4iLCJDaGlsZHJlbiIsImNoaWxkIiwiaXNWYWxpZEVsZW1lbnQiLCJtYXBwZXIiLCJnZXRQcm9wIiwicHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJuZXh0UHJvcHMiLCJwcmV2Q2hpbGRNYXBwaW5nIiwibmV4dENoaWxkTWFwcGluZyIsImdldFZhbHVlRm9yS2V5IiwibmV4dEtleXNQZW5kaW5nIiwicGVuZGluZ0tleXMiLCJwcmV2S2V5IiwiY2hpbGRNYXBwaW5nIiwibmV4dEtleSIsInBlbmRpbmdOZXh0S2V5IiwibWVyZ2VDaGlsZE1hcHBpbmdzIiwia2V5cyIsImhhc1ByZXYiLCJoYXNOZXh0IiwicHJldkNoaWxkIiwiaXNMZWF2aW5nIiwiY2xvbmVFbGVtZW50IiwidmFsdWVzIiwiVHJhbnNpdGlvbkdyb3VwIiwiaGFuZGxlRXhpdGVkIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiY29udGV4dFZhbHVlIiwiZmlyc3RSZW5kZXIiLCJtb3VudGVkIiwiY3VycmVudENoaWxkTWFwcGluZyIsIkNvbXBvbmVudCIsImNvbXBvbmVudCIsImNoaWxkRmFjdG9yeSIsIlJlcGxhY2VUcmFuc2l0aW9uIiwiX2FyZ3MiLCJoYW5kbGVFbnRlciIsImhhbmRsZUxpZmVjeWNsZSIsImhhbmRsZUVudGVyaW5nIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXQiLCJfbGVuNSIsIl9rZXk1IiwiaGFuZGxlRXhpdGluZyIsIl9sZW42IiwiX2tleTYiLCJfbGVuNyIsIl9rZXk3IiwiaWR4Iiwib3JpZ2luYWxBcmdzIiwiX2NoaWxkJHByb3BzIiwidG9BcnJheSIsImluUHJvcCIsIl9SZWFjdCRDaGlsZHJlbiR0b0FyciIsImZpcnN0Iiwic2Vjb25kIiwiX2xlYXZlUmVuZGVycyIsIl9lbnRlclJlbmRlcnMiLCJtb2RlcyIsImNhbGxIb29rIiwiY2IiLCJfZWxlbWVudCRwcm9wcyIsImxlYXZlUmVuZGVycyIsImNoYW5nZVN0YXRlIiwiZW50ZXJSZW5kZXJzIiwiX3JlZjQiLCJTd2l0Y2hUcmFuc2l0aW9uIiwiYXBwZWFyZWQiLCJtb2RlIiwib2xkQ2hpbGRyZW4iLCJuZXdDaGlsZHJlbiIsIl90aGlzJHN0YXRlIiwiZGF0YSIsIl9fY3JlYXRlQmluZGluZyIsIm0iLCJrMiIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfX2VzTW9kdWxlIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJ2IiwiX19pbXBvcnRTdGFyIiwibW9kIiwiX19pbXBvcnREZWZhdWx0IiwiY3NzXzEiLCJyZWFjdF90cmFuc2l0aW9uX2dyb3VwXzEiLCJyZWFjdF8xIiwiU3Bpbm5lcl8xIiwic3R5bGVzXzEiLCJMb2FkaW5nT3ZlcmxheSIsImRlZmF1bHQiLCJzdXBlciIsIndyYXBwZXIiLCJjcmVhdGVSZWYiLCJnZXRTdHlsZXMiLCJwcm92aWRlZFN0YXRlIiwiY3VzdG9tIiwibmFtZXMiLCJhcnIiLCJfYSIsImNsYXNzTmFtZVByZWZpeCIsIm92ZXJmbG93Q1NTIiwid3JhcHBlclN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInJlZHVjZSIsIm9uQ2xpY2siLCJmYWRlU3BlZWQiLCJzcGlubmVyIiwidGV4dCIsInJlZiIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiZW1wdHlGdW5jdGlvbiIsImVtcHR5RnVuY3Rpb25XaXRoUmVzZXQiLCJyZXNldFdhcm5pbmdDYWNoZSIsInNoaW0iLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImVyciIsIkVycm9yIiwiZ2V0U2hpbSIsImlzUmVxdWlyZWQiLCJSZWFjdFByb3BUeXBlcyIsImJpZ2ludCIsImJvb2wiLCJmdW5jIiwibnVtYmVyIiwib2JqZWN0Iiwic3ltYm9sIiwiYW55IiwiYXJyYXlPZiIsImVsZW1lbnRUeXBlIiwiaW5zdGFuY2VPZiIsIm9iamVjdE9mIiwib25lT2YiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImV4YWN0IiwiY2hlY2tQcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJsb2FkaW5nIiwib3ZlcmxheSIsIm1hc2tlciIsImhlYWRlckRPTSIsInBhcmVudEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiYm9keURPTSIsImNhcHRpb25ET00iLCJtYXJnaW5Ub3AiLCJoZWlnaHQiLCJwYXJzZUZsb2F0Iiwic3R5bGUiLCJyb3RhdGUzNjAiLCJzcGlubmVyRGFzaCIsIlNUWUxFUyIsIndpZHRoIiwidG9wIiwibGVmdCIsImRpc3BsYXkiLCJ0ZXh0QWxpZ24iLCJmb250U2l6ZSIsImNvbG9yIiwiYmFja2dyb3VuZCIsInRyYW5zaXRpb24iLCJjb250ZW50IiwibWFyZ2luIiwibWF4SGVpZ2h0IiwicGFkZGluZ1RvcCIsInRyYW5zZm9ybU9yaWdpbiIsImJvdHRvbSIsInJpZ2h0Iiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZSIsInByb3BfdHlwZXNfMSIsIlNwaW5uZXIiLCJ2aWV3Qm94IiwiY3kiLCJmaWxsIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsImQiLCJhIiwiZGVmaW5pdGlvbiIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
21
|
+
`,s={wrapper:e=>({position:"relative",...e}),overlay:(e,t)=>({position:"absolute",height:"100%",width:"100%",top:"0px",left:"0px",display:"flex",textAlign:"center",fontSize:"1.2em",color:"#FFF",background:"rgba(0, 0, 0, 0.7)",zIndex:800,transition:`opacity ${t.fadeSpeed}ms ease-in`,opacity:"entering"===e||"entered"===e?1:0}),content:()=>({margin:"auto"}),spinner:()=>({position:"relative",margin:"0px auto 10px auto",width:"50px",maxHeight:"100%","&:before":{content:'""',display:"block",paddingTop:"100%"},"& svg":{animation:`${a} 2s linear infinite`,height:"100%",transformOrigin:"center center",width:"100%",position:"absolute",top:"0",bottom:"0",left:"0",right:"0",margin:"auto","& circle":{animation:`${i} 1.5s ease-in-out infinite`,strokeDasharray:"1,200",strokeDashoffset:0,strokeLinecap:"round",stroke:"#FFF"}}})};t.default=s}},r={};function a(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return n[e].call(i.exports,i,i.exports,a),i.exports}return a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a(862)})());
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLW92ZXJsYXkvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctb3ZlcmxheS5qcyIsIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBQzFCLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxRQUFTLGFBQWNKLEdBQ0wsaUJBQVpDLFFBQ2RBLFFBQXNDLDZCQUFJRCxFQUFRRyxRQUFRLFNBQVVBLFFBQVEsY0FFNUVKLEVBQW1DLDZCQUFJQyxFQUFRRCxFQUFZLE1BQUdBLEVBQWUsU0FDOUUsQ0FURCxDQVNHTyxLQUFNLENBQUNDLEVBQWtDQyxJLCtCQ1Q1Q04sRUFBT0QsUUFBVU8sQyxpTUN5RGpCLElBQUlDLEVBQTBCLFdBRTVCLFNBQVNBLEVBQVdDLEdBQ2xCLElBQUlDLEVBQVFDLEtBRVpBLEtBQUtDLFdBQWEsU0FBVUMsR0FDMUIsSUFBSUMsRUFJQUEsRUFGc0IsSUFBdEJKLEVBQU1LLEtBQUtDLE9BQ1ROLEVBQU1PLGVBQ0NQLEVBQU1PLGVBQWVDLFlBQ3JCUixFQUFNUyxRQUNOVCxFQUFNVSxVQUFVQyxXQUVoQlgsRUFBTUksT0FHUkosRUFBTUssS0FBS0wsRUFBTUssS0FBS0MsT0FBUyxHQUFHRSxZQUc3Q1IsRUFBTVUsVUFBVUUsYUFBYVQsRUFBS0MsR0FFbENKLEVBQU1LLEtBQUtRLEtBQUtWLEVBQ2xCLEVBRUFGLEtBQUthLGNBQThCQyxJQUFuQmhCLEVBQVFpQixRQUF3Q2pCLEVBQVFpQixPQUN4RWYsS0FBS0ksS0FBTyxHQUNaSixLQUFLZ0IsSUFBTSxFQUNYaEIsS0FBS2lCLE1BQVFuQixFQUFRbUIsTUFFckJqQixLQUFLa0IsSUFBTXBCLEVBQVFvQixJQUNuQmxCLEtBQUtTLFVBQVlYLEVBQVFXLFVBQ3pCVCxLQUFLUSxRQUFVVixFQUFRVSxRQUN2QlIs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UzBrQixFQUF5QkUsR0FBWSxDQUdqRDdrQixRQUFTLENBQUMsR0FPWCxPQUhBK2tCLEVBQW9CRixHQUFVdGIsS0FBS3RKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVM0a0IsR0FHcEUza0IsRUFBT0QsT0FDZixDLE9DckJBNGtCLEVBQW9CbFMsRUFBS3pTLElBQ3hCLElBQUkra0IsRUFBUy9rQixHQUFVQSxFQUFPZ2xCLFdBQzdCLElBQU9obEIsRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREEya0IsRUFBb0JNLEVBQUVGLEVBQVEsQ0FBRUcsRUFBR0gsSUFDNUJBLEdDTFJKLEVBQW9CTSxFQUFJLENBQUNsbEIsRUFBU29sQixLQUNqQyxJQUFJLElBQUl2akIsS0FBT3VqQixFQUNYUixFQUFvQnhSLEVBQUVnUyxFQUFZdmpCLEtBQVMraUIsRUFBb0J4UixFQUFFcFQsRUFBUzZCLElBQzVFOEIsT0FBTzBoQixlQUFlcmxCLEVBQVM2QixFQUFLLENBQUV5akIsWUFBWSxFQUFNM2MsSUFBS3ljLEVBQVd2akIsTUNKM0UraUIsRUFBb0J4UixFQUFJLENBQUNoRSxFQUFLdUwsSUFBVWhYLE9BQU81QixVQUFVOFEsZUFBZXRKLEtBQUs2RixFQUFLdUwsR0NDbEZpSyxFQUFvQmhTLEVBQUs1UyxJQUNILG9CQUFYdWxCLFFBQTBCQSxPQUFPQyxhQUMxQzdoQixPQUFPMGhCLGVBQWVybEIsRUFBU3VsQixPQUFPQyxZQUFhLENBQUUxaEIsTUFBTyxXQUU3REgsT0FBTzBoQixlQUFlcmxCLEVBQVMsYUFBYyxDQUFFOEQsT0FBTyxLQ0Y3QjhnQixFQUFvQixJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9Ub2tlbml6ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2Nzcy9jcmVhdGUtaW5zdGFuY2UvZGlzdC9lbW90aW9uLWNzcy1jcmVhdGUtaW5zdGFuY2UuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvZGlzdC9lbW90aW9uLWNzcy5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vcmVtb3ZlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvcmVmbG93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9DU1NUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vYWRkQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9oYXNDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvQ2hpbGRNYXBwaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vUmVwbGFjZVRyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1N3aXRjaFRyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLW92ZXJsYXkvc3JjL2xvYWRpbmctb3ZlcmxheS1zcGlubmVyLnRzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLW92ZXJsYXkvc3JjL2xvYWRpbmctb3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1vdmVybGF5L2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLW92ZXJsYXkvc3JjL2xvYWRpbmctb3ZlcmxheS1zdHlsZXMudHN4Iiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ092ZXJsYXlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nT3ZlcmxheVwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0pO1xufSkoc2VsZiwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX18pID0+IHtcbnJldHVybiAiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzNfXzsiLCJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIOKdpO+4j1xuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcbiAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChrZXkgPT09ICdjc3MnKSB7XG4gICAgdmFyIHNzclN0eWxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25dOm5vdChbZGF0YS1zXSlcIik7IC8vIGdldCBTU1JlZCBzdHlsZXMgb3V0IG9mIHRoZSB3YXkgb2YgUmVhY3QncyBoeWRyYXRpb25cbiAgICAvLyBkb2N1bWVudC5oZWFkIGlzIGEgc2FmZSBwbGFjZSB0byBtb3ZlIHRoZW0gdG8odGhvdWdoIG5vdGUgZG9jdW1lbnQuaGVhZCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxhc3QgcGxhY2UgdGhleSB3aWxsIGJlKVxuICAgIC8vIG5vdGUgdGhpcyB2ZXJ5IHZlcnkgaW50ZW50aW9uYWxseSB0YXJnZXRzIGFsbCBzdHlsZSBlbGVtZW50cyByZWdhcmRsZXNzIG9mIHRoZSBrZXkgdG8gZW5zdXJlXG4gICAgLy8gdGhhdCBjcmVhdGluZyBhIGNhY2hlIHdvcmtzIGluc2lkZSBvZiByZW5kZXIgb2YgYSBSZWFjdCBjb21wb25lbnRcblxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc3NyU3R5bGVzLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgLy8gd2Ugd2FudCB0byBvbmx5IG1vdmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHNwYWNlIGluIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlIHZhbHVlXG4gICAgICAvLyBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYW4gRW1vdGlvbiAxMSBzZXJ2ZXItc2lkZSByZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgICAgLy8gd2hpbGUgd2Ugd2lsbCBhbHJlYWR5IGlnbm9yZSBFbW90aW9uIDExIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBiZWNhdXNlIG9mIHRoZSA6bm90KFtkYXRhLXNdKSBwYXJ0IGluIHRoZSBzZWxlY3RvclxuICAgICAgLy8gRW1vdGlvbiAxMCBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgZGlkIG5vdCBoYXZlIGRhdGEtcyAoYnV0IGltcG9ydGFudGx5IGRpZCBub3QgaGF2ZSBhIHNwYWNlIGluIHRoZWlyIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGVzKVxuICAgICAgLy8gc28gY2hlY2tpbmcgZm9yIHRoZSBzcGFjZSBlbnN1cmVzIHRoYXQgbG9hZGluZyBFbW90aW9uIDExIGFmdGVyIEVtb3Rpb24gMTAgaGFzIGluc2VydGVkIHNvbWUgc3R5bGVzXG4gICAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIEVtb3Rpb24gMTAgc3R5bGVzIGJlaW5nIGRlc3Ryb3llZFxuICAgICAgdmFyIGRhdGFFbW90aW9uQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicpO1xuXG4gICAgICBpZiAoZGF0YUVtb3Rpb25BdHRyaWJ1dGUuaW5kZXhPZignICcpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhdHRyaWIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5zZXJ0ZWRbYXR0cmliW2ldXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzVG9IeWRyYXRlLnB1c2gobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgX2luc2VydDtcblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHJ1bGVzaGVldChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgY3VycmVudFNoZWV0Lmluc2VydChydWxlKTtcbiAgICB9KV07XG4gICAgdmFyIHNlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgZmluYWxpemluZ1BsdWdpbnMpKTtcblxuICAgIHZhciBzdHlsaXMgPSBmdW5jdGlvbiBzdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgc2VyaWFsaXplcik7XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQoc2VsZWN0b3IsIHNlcmlhbGl6ZWQsIHNoZWV0LCBzaG91bGRDYWNoZSkge1xuICAgICAgY3VycmVudFNoZWV0ID0gc2hlZXQ7XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgc2NhbGU6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCB7IHVuaXRsZXNzS2V5cyBhcyBkZWZhdWx0IH07XG4iLCJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCB7IG1lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB2YXIgY29tcG9uZW50U2VsZWN0b3IgPSBpbnRlcnBvbGF0aW9uO1xuXG4gIGlmIChjb21wb25lbnRTZWxlY3Rvci5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHJldHVybiBjb21wb25lbnRTZWxlY3RvcjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGtleWZyYW1lcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKGtleWZyYW1lcy5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZToga2V5ZnJhbWVzLm5hbWUsXG4gICAgICAgICAgICBzdHlsZXM6IGtleWZyYW1lcy5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBrZXlmcmFtZXMubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZXJpYWxpemVkU3R5bGVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZFN0eWxlcy5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICsgXCI7XCI7XG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH0gLy8gZmluYWxpemUgc3RyaW5nIHZhbHVlcyAocmVndWxhciBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgaW50ZXJwb2xhdGVkIGludG8gY3NzIGNhbGxzKVxuXG5cbiAgdmFyIGFzU3RyaW5nID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nO1xuICB9XG5cbiAgdmFyIGNhY2hlZCA9IHJlZ2lzdGVyZWRbYXNTdHJpbmddO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBhc1N0cmluZztcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgYXNTdHJpbmcgPSB2YWx1ZTtcblxuICAgICAgICBpZiAocmVnaXN0ZXJlZCAhPSBudWxsICYmIHJlZ2lzdGVyZWRbYXNTdHJpbmddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0ga2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW2FzU3RyaW5nXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZShhc1N0cmluZykpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIGFzU3RyaW5nKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZVtfaV0pICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpbnRlcnBvbGF0ZWQgPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCB2YWx1ZSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7e10rKVxccyooO3wkKS9nOyAvLyB0aGlzIGlzIHRoZSBjdXJzb3IgZm9yIGtleWZyYW1lc1xuLy8ga2V5ZnJhbWVzIGFyZSBzdG9yZWQgb24gdGhlIFNlcmlhbGl6ZWRTdHlsZXMgb2JqZWN0IGFzIGEgbGlua2VkIGxpc3RcblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIG1hdGNoWzFdO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBoYXNoU3RyaW5nKHN0eWxlcykgKyBpZGVudGlmaWVyTmFtZTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgbmV4dDogY3Vyc29yXG4gIH07XG59XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwidmFyIGlzQnJvd3NlciA9IHRydWU7XG5cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCJpbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcblxuZnVuY3Rpb24gaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHNlcmlhbGl6ZWQpIHtcbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZS5pbnNlcnQoJycsIHNlcmlhbGl6ZWQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIGNyZWF0ZUVtb3Rpb24gPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNhY2hlID0gY3JlYXRlQ2FjaGUob3B0aW9ucyk7XG5cbiAgY2FjaGUuc2hlZXQuc3BlZWR5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gdmFsdWU7XG4gIH07XG5cbiAgY2FjaGUuY29tcGF0ID0gdHJ1ZTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkLCB1bmRlZmluZWQpO1xuICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHZhciBhbmltYXRpb24gPSBcImFuaW1hdGlvbi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgICBpbnNlcnRXaXRob3V0U2NvcGluZyhjYWNoZSwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZC5uYW1lLFxuICAgICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBhbmltYXRpb24gKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCJcbiAgICB9KTtcbiAgICByZXR1cm4gYW5pbWF0aW9uO1xuICB9O1xuXG4gIHZhciBpbmplY3RHbG9iYWwgPSBmdW5jdGlvbiBpbmplY3RHbG9iYWwoKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHNlcmlhbGl6ZWQpO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIGluamVjdEdsb2JhbDogaW5qZWN0R2xvYmFsLFxuICAgIGtleWZyYW1lczoga2V5ZnJhbWVzLFxuICAgIGh5ZHJhdGU6IGZ1bmN0aW9uIGh5ZHJhdGUoaWRzKSB7XG4gICAgICBpZHMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW2tleV0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBmbHVzaDogZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICBjYWNoZS5yZWdpc3RlcmVkID0ge307XG4gICAgICBjYWNoZS5pbnNlcnRlZCA9IHt9O1xuICAgICAgY2FjaGUuc2hlZXQuZmx1c2goKTtcbiAgICB9LFxuICAgIHNoZWV0OiBjYWNoZS5zaGVldCxcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgZ2V0UmVnaXN0ZXJlZFN0eWxlczogZ2V0UmVnaXN0ZXJlZFN0eWxlcy5iaW5kKG51bGwsIGNhY2hlLnJlZ2lzdGVyZWQpLFxuICAgIG1lcmdlOiBtZXJnZS5iaW5kKG51bGwsIGNhY2hlLnJlZ2lzdGVyZWQsIGNzcylcbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHZhciB0b0FkZCA9IHZvaWQgMDtcblxuICAgIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXJnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdba10gJiYgaykge1xuICAgICAgICAgICAgICAgIHRvQWRkICYmICh0b0FkZCArPSAnICcpO1xuICAgICAgICAgICAgICAgIHRvQWRkICs9IGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdG9BZGQgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9BZGQpIHtcbiAgICAgIGNscyAmJiAoY2xzICs9ICcgJyk7XG4gICAgICBjbHMgKz0gdG9BZGQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNscztcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUVtb3Rpb24gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGNyZWF0ZUVtb3Rpb24gZnJvbSAnLi4vY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXRpbHMnO1xuXG52YXIgX2NyZWF0ZUVtb3Rpb24gPSBjcmVhdGVFbW90aW9uKHtcbiAga2V5OiAnY3NzJ1xufSksXG4gICAgZmx1c2ggPSBfY3JlYXRlRW1vdGlvbi5mbHVzaCxcbiAgICBoeWRyYXRlID0gX2NyZWF0ZUVtb3Rpb24uaHlkcmF0ZSxcbiAgICBjeCA9IF9jcmVhdGVFbW90aW9uLmN4LFxuICAgIG1lcmdlID0gX2NyZWF0ZUVtb3Rpb24ubWVyZ2UsXG4gICAgZ2V0UmVnaXN0ZXJlZFN0eWxlcyA9IF9jcmVhdGVFbW90aW9uLmdldFJlZ2lzdGVyZWRTdHlsZXMsXG4gICAgaW5qZWN0R2xvYmFsID0gX2NyZWF0ZUVtb3Rpb24uaW5qZWN0R2xvYmFsLFxuICAgIGtleWZyYW1lcyA9IF9jcmVhdGVFbW90aW9uLmtleWZyYW1lcyxcbiAgICBjc3MgPSBfY3JlYXRlRW1vdGlvbi5jc3MsXG4gICAgc2hlZXQgPSBfY3JlYXRlRW1vdGlvbi5zaGVldCxcbiAgICBjYWNoZSA9IF9jcmVhdGVFbW90aW9uLmNhY2hlO1xuXG5leHBvcnQgeyBjYWNoZSwgY3NzLCBjeCwgZmx1c2gsIGdldFJlZ2lzdGVyZWRTdHlsZXMsIGh5ZHJhdGUsIGluamVjdEdsb2JhbCwga2V5ZnJhbWVzLCBtZXJnZSwgc2hlZXQgfTtcbiIsImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2UodCwgbykge1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLCB0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHQsIHNldFByb3RvdHlwZU9mKHQsIG8pO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIHJlcGxhY2VDbGFzc05hbWUob3JpZ0NsYXNzLCBjbGFzc1RvUmVtb3ZlKSB7XG4gIHJldHVybiBvcmlnQ2xhc3MucmVwbGFjZShuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbGFzc1RvUmVtb3ZlICsgXCIoPzpcXFxcc3wkKVwiLCAnZycpLCAnJDEnKS5yZXBsYWNlKC9cXHMrL2csICcgJykucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpO1xufVxuLyoqXG4gKiBSZW1vdmVzIGEgQ1NTIGNsYXNzIGZyb20gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lLCBjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJywgY2xhc3NOYW1lKSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGRpc2FibGVkOiBmYWxzZVxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJleHBvcnQgdmFyIGZvcmNlUmVmbG93ID0gZnVuY3Rpb24gZm9yY2VSZWZsb3cobm9kZSkge1xuICByZXR1cm4gbm9kZS5zY3JvbGxUb3A7XG59OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyB0aW1lb3V0c1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuZXhwb3J0IHZhciBVTk1PVU5URUQgPSAndW5tb3VudGVkJztcbmV4cG9ydCB2YXIgRVhJVEVEID0gJ2V4aXRlZCc7XG5leHBvcnQgdmFyIEVOVEVSSU5HID0gJ2VudGVyaW5nJztcbmV4cG9ydCB2YXIgRU5URVJFRCA9ICdlbnRlcmVkJztcbmV4cG9ydCB2YXIgRVhJVElORyA9ICdleGl0aW5nJztcbi8qKlxuICogVGhlIFRyYW5zaXRpb24gY29tcG9uZW50IGxldHMgeW91IGRlc2NyaWJlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBjb21wb25lbnRcbiAqIHN0YXRlIHRvIGFub3RoZXIgX292ZXIgdGltZV8gd2l0aCBhIHNpbXBsZSBkZWNsYXJhdGl2ZSBBUEkuIE1vc3QgY29tbW9ubHlcbiAqIGl0J3MgdXNlZCB0byBhbmltYXRlIHRoZSBtb3VudGluZyBhbmQgdW5tb3VudGluZyBvZiBhIGNvbXBvbmVudCwgYnV0IGNhbiBhbHNvXG4gKiBiZSB1c2VkIHRvIGRlc2NyaWJlIGluLXBsYWNlIHRyYW5zaXRpb24gc3RhdGVzIGFzIHdlbGwuXG4gKlxuICogLS0tXG4gKlxuICogKipOb3RlKio6IGBUcmFuc2l0aW9uYCBpcyBhIHBsYXRmb3JtLWFnbm9zdGljIGJhc2UgY29tcG9uZW50LiBJZiB5b3UncmUgdXNpbmdcbiAqIHRyYW5zaXRpb25zIGluIENTUywgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXNlXG4gKiBbYENTU1RyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Nzcy10cmFuc2l0aW9uKVxuICogaW5zdGVhZC4gSXQgaW5oZXJpdHMgYWxsIHRoZSBmZWF0dXJlcyBvZiBgVHJhbnNpdGlvbmAsIGJ1dCBjb250YWluc1xuICogYWRkaXRpb25hbCBmZWF0dXJlcyBuZWNlc3NhcnkgdG8gcGxheSBuaWNlIHdpdGggQ1NTIHRyYW5zaXRpb25zIChoZW5jZSB0aGVcbiAqIG5hbWUgb2YgdGhlIGNvbXBvbmVudCkuXG4gKlxuICogLS0tXG4gKlxuICogQnkgZGVmYXVsdCB0aGUgYFRyYW5zaXRpb25gIGNvbXBvbmVudCBkb2VzIG5vdCBhbHRlciB0aGUgYmVoYXZpb3Igb2YgdGhlXG4gKiBjb21wb25lbnQgaXQgcmVuZGVycywgaXQgb25seSB0cmFja3MgXCJlbnRlclwiIGFuZCBcImV4aXRcIiBzdGF0ZXMgZm9yIHRoZVxuICogY29tcG9uZW50cy4gSXQncyB1cCB0byB5b3UgdG8gZ2l2ZSBtZWFuaW5nIGFuZCBlZmZlY3QgdG8gdGhvc2Ugc3RhdGVzLiBGb3JcbiAqIGV4YW1wbGUgd2UgY2FuIGFkZCBzdHlsZXMgdG8gYSBjb21wb25lbnQgd2hlbiBpdCBlbnRlcnMgb3IgZXhpdHM6XG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG4gKlxuICogY29uc3QgZHVyYXRpb24gPSAzMDA7XG4gKlxuICogY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICogICB0cmFuc2l0aW9uOiBgb3BhY2l0eSAke2R1cmF0aW9ufW1zIGVhc2UtaW4tb3V0YCxcbiAqICAgb3BhY2l0eTogMCxcbiAqIH1cbiAqXG4gKiBjb25zdCB0cmFuc2l0aW9uU3R5bGVzID0ge1xuICogICBlbnRlcmluZzogeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGVudGVyZWQ6ICB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZXhpdGluZzogIHsgb3BhY2l0eTogMCB9LFxuICogICBleGl0ZWQ6ICB7IG9wYWNpdHk6IDAgfSxcbiAqIH07XG4gKlxuICogY29uc3QgRmFkZSA9ICh7IGluOiBpblByb3AgfSkgPT4gKFxuICogICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXtkdXJhdGlvbn0+XG4gKiAgICAge3N0YXRlID0+IChcbiAqICAgICAgIDxkaXYgc3R5bGU9e3tcbiAqICAgICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICogICAgICAgICAuLi50cmFuc2l0aW9uU3R5bGVzW3N0YXRlXVxuICogICAgICAgfX0+XG4gKiAgICAgICAgIEknbSBhIGZhZGUgVHJhbnNpdGlvbiFcbiAqICAgICAgIDwvZGl2PlxuICogICAgICl9XG4gKiAgIDwvVHJhbnNpdGlvbj5cbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgNCBtYWluIHN0YXRlcyBhIFRyYW5zaXRpb24gY2FuIGJlIGluOlxuICogIC0gYCdlbnRlcmluZydgXG4gKiAgLSBgJ2VudGVyZWQnYFxuICogIC0gYCdleGl0aW5nJ2BcbiAqICAtIGAnZXhpdGVkJ2BcbiAqXG4gKiBUcmFuc2l0aW9uIHN0YXRlIGlzIHRvZ2dsZWQgdmlhIHRoZSBgaW5gIHByb3AuIFdoZW4gYHRydWVgIHRoZSBjb21wb25lbnRcbiAqIGJlZ2lucyB0aGUgXCJFbnRlclwiIHN0YWdlLiBEdXJpbmcgdGhpcyBzdGFnZSwgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IGZyb21cbiAqIGl0cyBjdXJyZW50IHRyYW5zaXRpb24gc3RhdGUsIHRvIGAnZW50ZXJpbmcnYCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuICogdHJhbnNpdGlvbiBhbmQgdGhlbiB0byB0aGUgYCdlbnRlcmVkJ2Agc3RhZ2Ugb25jZSBpdCdzIGNvbXBsZXRlLiBMZXQncyB0YWtlXG4gKiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKHdlJ2xsIHVzZSB0aGVcbiAqIFt1c2VTdGF0ZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXN0YXRlKSBob29rKTpcbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17NTAwfT5cbiAqICAgICAgICAge3N0YXRlID0+IChcbiAqICAgICAgICAgICAvLyAuLi5cbiAqICAgICAgICAgKX1cbiAqICAgICAgIDwvVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IHRvIHRoZSBgJ2VudGVyaW5nJ2Agc3RhdGVcbiAqIGFuZCBzdGF5IHRoZXJlIGZvciA1MDBtcyAodGhlIHZhbHVlIG9mIGB0aW1lb3V0YCkgYmVmb3JlIGl0IGZpbmFsbHkgc3dpdGNoZXNcbiAqIHRvIGAnZW50ZXJlZCdgLlxuICpcbiAqIFdoZW4gYGluYCBpcyBgZmFsc2VgIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgZXhjZXB0IHRoZSBzdGF0ZSBtb3ZlcyBmcm9tXG4gKiBgJ2V4aXRpbmcnYCB0byBgJ2V4aXRlZCdgLlxuICovXG5cbnZhciBUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcbiAgICB2YXIgcGFyZW50R3JvdXAgPSBjb250ZXh0OyAvLyBJbiB0aGUgY29udGV4dCBvZiBhIFRyYW5zaXRpb25Hcm91cCBhbGwgZW50ZXJzIGFyZSByZWFsbHkgYXBwZWFyc1xuXG4gICAgdmFyIGFwcGVhciA9IHBhcmVudEdyb3VwICYmICFwYXJlbnRHcm91cC5pc01vdW50aW5nID8gcHJvcHMuZW50ZXIgOiBwcm9wcy5hcHBlYXI7XG4gICAgdmFyIGluaXRpYWxTdGF0dXM7XG4gICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pbikge1xuICAgICAgaWYgKGFwcGVhcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBFTlRFUklORztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFTlRFUkVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMudW5tb3VudE9uRXhpdCB8fCBwcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IFVOTU9VTlRFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IGluaXRpYWxTdGF0dXNcbiAgICB9O1xuICAgIF90aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZiwgcHJldlN0YXRlKSB7XG4gICAgdmFyIG5leHRJbiA9IF9yZWYuaW47XG5cbiAgICBpZiAobmV4dEluICYmIHByZXZTdGF0ZS5zdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldlByb3BzKSB7XG4gIC8vICAgbGV0IG5leHRTdGF0dXMgPSBudWxsXG4gIC8vICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAvLyAgICAgY29uc3QgeyBzdGF0dXMgfSA9IHRoaXMuc3RhdGVcbiAgLy8gICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB7IG5leHRTdGF0dXMgfVxuICAvLyB9XG4gIDtcblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0dXModHJ1ZSwgdGhpcy5hcHBlYXJTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIG5leHRTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoZmFsc2UsIG5leHRTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFRpbWVvdXRzID0gZnVuY3Rpb24gZ2V0VGltZW91dHMoKSB7XG4gICAgdmFyIHRpbWVvdXQgPSB0aGlzLnByb3BzLnRpbWVvdXQ7XG4gICAgdmFyIGV4aXQsIGVudGVyLCBhcHBlYXI7XG4gICAgZXhpdCA9IGVudGVyID0gYXBwZWFyID0gdGltZW91dDtcblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwgJiYgdHlwZW9mIHRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICBleGl0ID0gdGltZW91dC5leGl0O1xuICAgICAgZW50ZXIgPSB0aW1lb3V0LmVudGVyOyAvLyBUT0RPOiByZW1vdmUgZmFsbGJhY2sgZm9yIG5leHQgbWFqb3JcblxuICAgICAgYXBwZWFyID0gdGltZW91dC5hcHBlYXIgIT09IHVuZGVmaW5lZCA/IHRpbWVvdXQuYXBwZWFyIDogZW50ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXQ6IGV4aXQsXG4gICAgICBlbnRlcjogZW50ZXIsXG4gICAgICBhcHBlYXI6IGFwcGVhclxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVN0YXR1cyA9IGZ1bmN0aW9uIHVwZGF0ZVN0YXR1cyhtb3VudGluZywgbmV4dFN0YXR1cykge1xuICAgIGlmIChtb3VudGluZyA9PT0gdm9pZCAwKSB7XG4gICAgICBtb3VudGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChuZXh0U3RhdHVzICE9PSBudWxsKSB7XG4gICAgICAvLyBuZXh0U3RhdHVzIHdpbGwgYWx3YXlzIGJlIEVOVEVSSU5HIG9yIEVYSVRJTkcuXG4gICAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuXG4gICAgICBpZiAobmV4dFN0YXR1cyA9PT0gRU5URVJJTkcpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCB8fCB0aGlzLnByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9wdWxsLzc0OVxuICAgICAgICAgIC8vIFdpdGggdW5tb3VudE9uRXhpdCBvciBtb3VudE9uRW50ZXIsIHRoZSBlbnRlciBhbmltYXRpb24gc2hvdWxkIGhhcHBlbiBhdCB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGl0ZWRgIGFuZCBgZW50ZXJpbmdgLlxuICAgICAgICAgIC8vIFRvIG1ha2UgdGhlIGFuaW1hdGlvbiBoYXBwZW4sICB3ZSBoYXZlIHRvIHNlcGFyYXRlIGVhY2ggcmVuZGVyaW5nIGFuZCBhdm9pZCBiZWluZyBwcm9jZXNzZWQgYXMgYmF0Y2hlZC5cblxuICAgICAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGVyZm9ybUVudGVyKG1vdW50aW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUV4aXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCAmJiB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gRVhJVEVEKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBVTk1PVU5URURcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUVudGVyID0gZnVuY3Rpb24gcGVyZm9ybUVudGVyKG1vdW50aW5nKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgZW50ZXIgPSB0aGlzLnByb3BzLmVudGVyO1xuICAgIHZhciBhcHBlYXJpbmcgPSB0aGlzLmNvbnRleHQgPyB0aGlzLmNvbnRleHQuaXNNb3VudGluZyA6IG1vdW50aW5nO1xuXG4gICAgdmFyIF9yZWYyID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW2FwcGVhcmluZ10gOiBbUmVhY3RET00uZmluZERPTU5vZGUodGhpcyksIGFwcGVhcmluZ10sXG4gICAgICAgIG1heWJlTm9kZSA9IF9yZWYyWzBdLFxuICAgICAgICBtYXliZUFwcGVhcmluZyA9IF9yZWYyWzFdO1xuXG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBlbnRlclRpbWVvdXQgPSBhcHBlYXJpbmcgPyB0aW1lb3V0cy5hcHBlYXIgOiB0aW1lb3V0cy5lbnRlcjsgLy8gbm8gZW50ZXIgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRU5URVJFRFxuICAgIC8vIGlmIHdlIGFyZSBtb3VudGluZyBhbmQgcnVubmluZyB0aGlzIGl0IG1lYW5zIGFwcGVhciBfbXVzdF8gYmUgc2V0XG5cbiAgICBpZiAoIW1vdW50aW5nICYmICFlbnRlciB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG5cbiAgICAgIF90aGlzMi5vblRyYW5zaXRpb25FbmQoZW50ZXJUaW1lb3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUV4aXQgPSBmdW5jdGlvbiBwZXJmb3JtRXhpdCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBleGl0ID0gdGhpcy5wcm9wcy5leGl0O1xuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgbWF5YmVOb2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIG5vIGV4aXQgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRVhJVEVEXG5cbiAgICBpZiAoIWV4aXQgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG5cbiAgICAgIF90aGlzMy5vblRyYW5zaXRpb25FbmQodGltZW91dHMuZXhpdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIGNhbmNlbE5leHRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5uZXh0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCgpO1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2FmZVNldFN0YXRlID0gZnVuY3Rpb24gc2FmZVNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCB0aGVyZSBhcmUgd2VpcmQgcmFjZSBjb25kaXRpb25zIHdpdGhcbiAgICAvLyBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIHVubW91bnRpbmcgaW4gdGVzdGluZywgc28gYWx3YXlzIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gd2UgY2FuIGNhbmNlbCBhbnkgcGVuZGluZyBzZXRTdGF0ZSBjYWxsYmFja3MgYWZ0ZXIgd2UgdW5tb3VudC5cbiAgICBjYWxsYmFjayA9IHRoaXMuc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKTtcbiAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spO1xuICB9O1xuXG4gIF9wcm90by5zZXROZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBzZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBhY3RpdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIF90aGlzNC5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0Q2FsbGJhY2s7XG4gIH07XG5cbiAgX3Byb3RvLm9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0LCBoYW5kbGVyKSB7XG4gICAgdGhpcy5zZXROZXh0Q2FsbGJhY2soaGFuZGxlcik7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyID0gdGltZW91dCA9PSBudWxsICYmICF0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyO1xuXG4gICAgaWYgKCFub2RlIHx8IGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKSB7XG4gICAgICB2YXIgX3JlZjMgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbdGhpcy5uZXh0Q2FsbGJhY2tdIDogW25vZGUsIHRoaXMubmV4dENhbGxiYWNrXSxcbiAgICAgICAgICBtYXliZU5vZGUgPSBfcmVmM1swXSxcbiAgICAgICAgICBtYXliZU5leHRDYWxsYmFjayA9IF9yZWYzWzFdO1xuXG4gICAgICB0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKG1heWJlTm9kZSwgbWF5YmVOZXh0Q2FsbGJhY2spO1xuICAgIH1cblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgIGlmIChzdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgX2luID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIF9tb3VudE9uRW50ZXIgPSBfdGhpcyRwcm9wcy5tb3VudE9uRW50ZXIsXG4gICAgICAgIF91bm1vdW50T25FeGl0ID0gX3RoaXMkcHJvcHMudW5tb3VudE9uRXhpdCxcbiAgICAgICAgX2FwcGVhciA9IF90aGlzJHByb3BzLmFwcGVhcixcbiAgICAgICAgX2VudGVyID0gX3RoaXMkcHJvcHMuZW50ZXIsXG4gICAgICAgIF9leGl0ID0gX3RoaXMkcHJvcHMuZXhpdCxcbiAgICAgICAgX3RpbWVvdXQgPSBfdGhpcyRwcm9wcy50aW1lb3V0LFxuICAgICAgICBfYWRkRW5kTGlzdGVuZXIgPSBfdGhpcyRwcm9wcy5hZGRFbmRMaXN0ZW5lcixcbiAgICAgICAgX29uRW50ZXIgPSBfdGhpcyRwcm9wcy5vbkVudGVyLFxuICAgICAgICBfb25FbnRlcmluZyA9IF90aGlzJHByb3BzLm9uRW50ZXJpbmcsXG4gICAgICAgIF9vbkVudGVyZWQgPSBfdGhpcyRwcm9wcy5vbkVudGVyZWQsXG4gICAgICAgIF9vbkV4aXQgPSBfdGhpcyRwcm9wcy5vbkV4aXQsXG4gICAgICAgIF9vbkV4aXRpbmcgPSBfdGhpcyRwcm9wcy5vbkV4aXRpbmcsXG4gICAgICAgIF9vbkV4aXRlZCA9IF90aGlzJHByb3BzLm9uRXhpdGVkLFxuICAgICAgICBfbm9kZVJlZiA9IF90aGlzJHByb3BzLm5vZGVSZWYsXG4gICAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiLCBcIm1vdW50T25FbnRlclwiLCBcInVubW91bnRPbkV4aXRcIiwgXCJhcHBlYXJcIiwgXCJlbnRlclwiLCBcImV4aXRcIiwgXCJ0aW1lb3V0XCIsIFwiYWRkRW5kTGlzdGVuZXJcIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGluZ1wiLCBcIm9uRXhpdGVkXCIsIFwibm9kZVJlZlwiXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gYWxsb3dzIGZvciBuZXN0ZWQgVHJhbnNpdGlvbnNcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSwgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oc3RhdHVzLCBjaGlsZFByb3BzKSA6IFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgY2hpbGRQcm9wcykpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbi5jb250ZXh0VHlwZSA9IFRyYW5zaXRpb25Hcm91cENvbnRleHQ7XG5UcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIEEgUmVhY3QgcmVmZXJlbmNlIHRvIERPTSBlbGVtZW50IHRoYXQgbmVlZCB0byB0cmFuc2l0aW9uOlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTExMjcxMzAvNDY3MTkzMlxuICAgKlxuICAgKiAgIC0gV2hlbiBgbm9kZVJlZmAgcHJvcCBpcyB1c2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICogICAgICAoZS5nLiBgb25FbnRlcmApIGJlY2F1c2UgdXNlciBhbHJlYWR5IGhhcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBub2RlLlxuICAgKiAgIC0gV2hlbiBjaGFuZ2luZyBga2V5YCBwcm9wIG9mIGBUcmFuc2l0aW9uYCBpbiBhIGBUcmFuc2l0aW9uR3JvdXBgIGEgbmV3XG4gICAqICAgICBgbm9kZVJlZmAgbmVlZCB0byBiZSBwcm92aWRlZCB0byBgVHJhbnNpdGlvbmAgd2l0aCBjaGFuZ2VkIGBrZXlgIHByb3BcbiAgICogICAgIChzZWVcbiAgICogICAgIFt0ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qc10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzEzNDM1Zjg5N2IzYWI3MWY2ZTE5ZDcyNGYxNDU1OTZmNTkxMDU4MWMvdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanMjTDM2Mi1MNDM3KSkuXG4gICAqL1xuICBub2RlUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyA/IFByb3BUeXBlcy5hbnkgOiBmdW5jdGlvbiAocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHZhbHVlID0gcHJvcFZhbHVlW2tleV07XG4gICAgICByZXR1cm4gUHJvcFR5cGVzLmluc3RhbmNlT2YodmFsdWUgJiYgJ293bmVyRG9jdW1lbnQnIGluIHZhbHVlID8gdmFsdWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5FbGVtZW50IDogRWxlbWVudCkocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCk7XG4gICAgfVxuICB9KSxcblxuICAvKipcbiAgICogQSBgZnVuY3Rpb25gIGNoaWxkIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBSZWFjdCBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIGlzXG4gICAqIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IHRyYW5zaXRpb24gc3RhdHVzIChgJ2VudGVyaW5nJ2AsIGAnZW50ZXJlZCdgLFxuICAgKiBgJ2V4aXRpbmcnYCwgYCdleGl0ZWQnYCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGNvbnRleHRcbiAgICogc3BlY2lmaWMgcHJvcHMgdG8gYSBjb21wb25lbnQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiA8VHJhbnNpdGlvbiBpbj17dGhpcy5zdGF0ZS5pbn0gdGltZW91dD17MTUwfT5cbiAgICogICB7c3RhdGUgPT4gKFxuICAgKiAgICAgPE15Q29tcG9uZW50IGNsYXNzTmFtZT17YGZhZGUgZmFkZS0ke3N0YXRlfWB9IC8+XG4gICAqICAgKX1cbiAgICogPC9UcmFuc2l0aW9uPlxuICAgKiBgYGBcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogU2hvdyB0aGUgY29tcG9uZW50OyB0cmlnZ2VycyB0aGUgZW50ZXIgb3IgZXhpdCBzdGF0ZXNcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGlzIG1vdW50ZWQgaW1tZWRpYXRlbHkgYWxvbmcgd2l0aFxuICAgKiB0aGUgcGFyZW50IGBUcmFuc2l0aW9uYCBjb21wb25lbnQuIElmIHlvdSB3YW50IHRvIFwibGF6eSBtb3VudFwiIHRoZSBjb21wb25lbnQgb24gdGhlXG4gICAqIGZpcnN0IGBpbj17dHJ1ZX1gIHlvdSBjYW4gc2V0IGBtb3VudE9uRW50ZXJgLiBBZnRlciB0aGUgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiB0aGUgY29tcG9uZW50IHdpbGwgc3RheVxuICAgKiBtb3VudGVkLCBldmVuIG9uIFwiZXhpdGVkXCIsIHVubGVzcyB5b3UgYWxzbyBzcGVjaWZ5IGB1bm1vdW50T25FeGl0YC5cbiAgICovXG4gIG1vdW50T25FbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBzdGF5cyBtb3VudGVkIGFmdGVyIGl0IHJlYWNoZXMgdGhlIGAnZXhpdGVkJ2Agc3RhdGUuXG4gICAqIFNldCBgdW5tb3VudE9uRXhpdGAgaWYgeW91J2QgcHJlZmVyIHRvIHVubW91bnQgdGhlIGNvbXBvbmVudCBhZnRlciBpdCBmaW5pc2hlcyBleGl0aW5nLlxuICAgKi9cbiAgdW5tb3VudE9uRXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBkb2VzIG5vdCBwZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW5cbiAgICogaXQgZmlyc3QgbW91bnRzLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBgaW5gLiBJZiB5b3Ugd2FudCB0aGlzXG4gICAqIGJlaGF2aW9yLCBzZXQgYm90aCBgYXBwZWFyYCBhbmQgYGluYCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqID4gKipOb3RlKio6IHRoZXJlIGFyZSBubyBzcGVjaWFsIGFwcGVhciBzdGF0ZXMgbGlrZSBgYXBwZWFyaW5nYC9gYXBwZWFyZWRgLCB0aGlzIHByb3BcbiAgICogPiBvbmx5IGFkZHMgYW4gYWRkaXRpb25hbCBlbnRlciB0cmFuc2l0aW9uLiBIb3dldmVyLCBpbiB0aGVcbiAgICogPiBgPENTU1RyYW5zaXRpb24+YCBjb21wb25lbnQgdGhhdCBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIGRvZXMgcmVzdWx0IGluXG4gICAqID4gYWRkaXRpb25hbCBgLmFwcGVhci0qYCBjbGFzc2VzLCB0aGF0IHdheSB5b3UgY2FuIGNob29zZSB0byBzdHlsZSBpdFxuICAgKiA+IGRpZmZlcmVudGx5LlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZW50ZXIgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGV4aXQgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFJlcXVpcmVkIHVubGVzcyBgYWRkRW5kTGlzdGVuZXJgIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zOlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17NTAwfVxuICAgKiBgYGBcbiAgICpcbiAgICogb3IgaW5kaXZpZHVhbGx5OlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17e1xuICAgKiAgYXBwZWFyOiA1MDAsXG4gICAqICBlbnRlcjogMzAwLFxuICAgKiAgZXhpdDogNTAwLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBgYXBwZWFyYCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYGVudGVyYFxuICAgKiAtIGBlbnRlcmAgZGVmYXVsdHMgdG8gYDBgXG4gICAqIC0gYGV4aXRgIGRlZmF1bHRzIHRvIGAwYFxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyIHwgeyBlbnRlcj86IG51bWJlciwgZXhpdD86IG51bWJlciwgYXBwZWFyPzogbnVtYmVyIH19XG4gICAqL1xuICB0aW1lb3V0OiBmdW5jdGlvbiB0aW1lb3V0KHByb3BzKSB7XG4gICAgdmFyIHB0ID0gdGltZW91dHNTaGFwZTtcbiAgICBpZiAoIXByb3BzLmFkZEVuZExpc3RlbmVyKSBwdCA9IHB0LmlzUmVxdWlyZWQ7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHQuYXBwbHkodm9pZCAwLCBbcHJvcHNdLmNvbmNhdChhcmdzKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZ1xuICAgKiBET00gbm9kZSBhbmQgYSBgZG9uZWAgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IHtcbiAgICogICAvLyB1c2UgdGhlIGNzcyB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIG1hcmsgdGhlIGZpbmlzaCBvZiBhIHRyYW5zaXRpb25cbiAgICogICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBkb25lLCBmYWxzZSk7XG4gICAqIH19XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9OyAvLyBOYW1lIHRoZSBmdW5jdGlvbiBzbyBpdCBpcyBjbGVhcmVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5UcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW46IGZhbHNlLFxuICBtb3VudE9uRW50ZXI6IGZhbHNlLFxuICB1bm1vdW50T25FeGl0OiBmYWxzZSxcbiAgYXBwZWFyOiBmYWxzZSxcbiAgZW50ZXI6IHRydWUsXG4gIGV4aXQ6IHRydWUsXG4gIG9uRW50ZXI6IG5vb3AsXG4gIG9uRW50ZXJpbmc6IG5vb3AsXG4gIG9uRW50ZXJlZDogbm9vcCxcbiAgb25FeGl0OiBub29wLFxuICBvbkV4aXRpbmc6IG5vb3AsXG4gIG9uRXhpdGVkOiBub29wXG59O1xuVHJhbnNpdGlvbi5VTk1PVU5URUQgPSBVTk1PVU5URUQ7XG5UcmFuc2l0aW9uLkVYSVRFRCA9IEVYSVRFRDtcblRyYW5zaXRpb24uRU5URVJJTkcgPSBFTlRFUklORztcblRyYW5zaXRpb24uRU5URVJFRCA9IEVOVEVSRUQ7XG5UcmFuc2l0aW9uLkVYSVRJTkcgPSBFWElUSU5HO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGFkZE9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL2FkZENsYXNzJztcbmltcG9ydCByZW1vdmVPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9yZW1vdmVDbGFzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb24gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCB7IGNsYXNzTmFtZXNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuXG52YXIgX2FkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGFkZE9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiByZW1vdmVPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBleGNlbGxlbnRcbiAqIFtuZy1hbmltYXRlXShodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmdBbmltYXRlKSBsaWJyYXJ5LCB5b3Ugc2hvdWxkXG4gKiB1c2UgaXQgaWYgeW91J3JlIHVzaW5nIENTUyB0cmFuc2l0aW9ucyBvciBhbmltYXRpb25zLiBJdCdzIGJ1aWx0IHVwb24gdGhlXG4gKiBbYFRyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24pXG4gKiBjb21wb25lbnQsIHNvIGl0IGluaGVyaXRzIGFsbCBvZiBpdHMgcHJvcHMuXG4gKlxuICogYENTU1RyYW5zaXRpb25gIGFwcGxpZXMgYSBwYWlyIG9mIGNsYXNzIG5hbWVzIGR1cmluZyB0aGUgYGFwcGVhcmAsIGBlbnRlcmAsXG4gKiBhbmQgYGV4aXRgIHN0YXRlcyBvZiB0aGUgdHJhbnNpdGlvbi4gVGhlIGZpcnN0IGNsYXNzIGlzIGFwcGxpZWQgYW5kIHRoZW4gYVxuICogc2Vjb25kIGAqLWFjdGl2ZWAgY2xhc3MgaW4gb3JkZXIgdG8gYWN0aXZhdGUgdGhlIENTUyB0cmFuc2l0aW9uLiBBZnRlciB0aGVcbiAqIHRyYW5zaXRpb24sIG1hdGNoaW5nIGAqLWRvbmVgIGNsYXNzIG5hbWVzIGFyZSBhcHBsaWVkIHRvIHBlcnNpc3QgdGhlXG4gKiB0cmFuc2l0aW9uIHN0YXRlLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8Q1NTVHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXsyMDB9IGNsYXNzTmFtZXM9XCJteS1ub2RlXCI+XG4gKiAgICAgICAgIDxkaXY+XG4gKiAgICAgICAgICAge1wiSSdsbCByZWNlaXZlIG15LW5vZGUtKiBjbGFzc2VzXCJ9XG4gKiAgICAgICAgIDwvZGl2PlxuICogICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYGluYCBwcm9wIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjaGlsZCBjb21wb25lbnQgd2lsbCBmaXJzdCByZWNlaXZlXG4gKiB0aGUgY2xhc3MgYGV4YW1wbGUtZW50ZXJgLCB0aGVuIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIHdpbGwgYmUgYWRkZWQgaW5cbiAqIHRoZSBuZXh0IHRpY2suIGBDU1NUcmFuc2l0aW9uYCBbZm9yY2VzIGFcbiAqIHJlZmxvd10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzUwMDczMDNlNzI5YTc0YmU2NmEyMWMzZTIyMDVlNDkxNjgyMTUyNGIvc3JjL0NTU1RyYW5zaXRpb24uanMjTDIwOC1MMjE1KVxuICogYmV0d2VlbiBiZWZvcmUgYWRkaW5nIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgLiBUaGlzIGlzIGFuIGltcG9ydGFudCB0cmlja1xuICogYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGFtcGxlLWVudGVyYCBhbmRcbiAqIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFkZGVkIGltbWVkaWF0ZWx5IG9uZSBhZnRlclxuICogYW5vdGhlci4gTW9zdCBub3RhYmx5LCB0aGlzIGlzIHdoYXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzIHRvIGFuaW1hdGVcbiAqIF9hcHBlYXJhbmNlXy5cbiAqXG4gKiBgYGBjc3NcbiAqIC5teS1ub2RlLWVudGVyIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5teS1ub2RlLWVudGVyLWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0IHtcbiAqICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQtYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGAqLWFjdGl2ZWAgY2xhc3NlcyByZXByZXNlbnQgd2hpY2ggc3R5bGVzIHlvdSB3YW50IHRvIGFuaW1hdGUgKip0byoqLCBzbyBpdCdzXG4gKiBpbXBvcnRhbnQgdG8gYWRkIGB0cmFuc2l0aW9uYCBkZWNsYXJhdGlvbiBvbmx5IHRvIHRoZW0sIG90aGVyd2lzZSB0cmFuc2l0aW9uc1xuICogbWlnaHQgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZCEgVGhpcyBtaWdodCBub3QgYmUgb2J2aW91cyB3aGVuIHRoZSB0cmFuc2l0aW9uc1xuICogYXJlIHN5bW1ldHJpY2FsLCBpLmUuIHdoZW4gYCotZW50ZXItYWN0aXZlYCBpcyB0aGUgc2FtZSBhcyBgKi1leGl0YCwgbGlrZSBpblxuICogdGhlIGV4YW1wbGUgYWJvdmUgKG1pbnVzIGB0cmFuc2l0aW9uYCksIGJ1dCBpdCBiZWNvbWVzIGFwcGFyZW50IGluIG1vcmVcbiAqIGNvbXBsZXggdHJhbnNpdGlvbnMuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSdyZSB1c2luZyB0aGVcbiAqIFtgYXBwZWFyYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24jVHJhbnNpdGlvbi1wcm9wLWFwcGVhcilcbiAqIHByb3AsIG1ha2Ugc3VyZSB0byBkZWZpbmUgc3R5bGVzIGZvciBgLmFwcGVhci0qYCBjbGFzc2VzIGFzIHdlbGwuXG4gKi9cblxuXG52YXIgQ1NTVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShDU1NUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBDU1NUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLmFwcGxpZWRDbGFzc2VzID0ge1xuICAgICAgYXBwZWFyOiB7fSxcbiAgICAgIGVudGVyOiB7fSxcbiAgICAgIGV4aXQ6IHt9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXIgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudFswXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMV07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyaW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQyID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlswXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcmluZykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyZWQgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDMgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcmVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDRbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2FwcGVhcicpO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdlbnRlcicpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ1ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ1WzBdO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGluZykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ZWQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NlswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5yZXNvbHZlQXJndW1lbnRzID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5ub2RlUmVmID8gW190aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCwgbWF5YmVOb2RlXSAvLyBoZXJlIGBtYXliZU5vZGVgIGlzIGFjdHVhbGx5IGBhcHBlYXJpbmdgXG4gICAgICA6IFttYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nXTtcbiAgICB9O1xuXG4gICAgX3RoaXMuZ2V0Q2xhc3NOYW1lcyA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB2YXIgY2xhc3NOYW1lcyA9IF90aGlzLnByb3BzLmNsYXNzTmFtZXM7XG4gICAgICB2YXIgaXNTdHJpbmdDbGFzc05hbWVzID0gdHlwZW9mIGNsYXNzTmFtZXMgPT09ICdzdHJpbmcnO1xuICAgICAgdmFyIHByZWZpeCA9IGlzU3RyaW5nQ2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzID8gY2xhc3NOYW1lcyArIFwiLVwiIDogJyc7XG4gICAgICB2YXIgYmFzZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IFwiXCIgKyBwcmVmaXggKyB0eXBlIDogY2xhc3NOYW1lc1t0eXBlXTtcbiAgICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItYWN0aXZlXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkFjdGl2ZVwiXTtcbiAgICAgIHZhciBkb25lQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWRvbmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiRG9uZVwiXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VDbGFzc05hbWU6IGJhc2VDbGFzc05hbWUsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZTogYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICBkb25lQ2xhc3NOYW1lOiBkb25lQ2xhc3NOYW1lXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQ1NTVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmFkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgdHlwZSwgcGhhc2UpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRDbGFzc05hbWVzKHR5cGUpW3BoYXNlICsgXCJDbGFzc05hbWVcIl07XG5cbiAgICB2YXIgX3RoaXMkZ2V0Q2xhc3NOYW1lcyA9IHRoaXMuZ2V0Q2xhc3NOYW1lcygnZW50ZXInKSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGdldENsYXNzTmFtZXMuZG9uZUNsYXNzTmFtZTtcblxuICAgIGlmICh0eXBlID09PSAnYXBwZWFyJyAmJiBwaGFzZSA9PT0gJ2RvbmUnICYmIGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIGRvbmVDbGFzc05hbWU7XG4gICAgfSAvLyBUaGlzIGlzIHRvIGZvcmNlIGEgcmVwYWludCxcbiAgICAvLyB3aGljaCBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gdHJhbnNpdGlvbiBzdHlsZXMgd2hlbiBhZGRpbmcgYSBjbGFzcyBuYW1lLlxuXG5cbiAgICBpZiAocGhhc2UgPT09ICdhY3RpdmUnKSB7XG4gICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXVtwaGFzZV0gPSBjbGFzc05hbWU7XG5cbiAgICAgIF9hZGRDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlQ2xhc3NlcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSkge1xuICAgIHZhciBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQgPSB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdLFxuICAgICAgICBiYXNlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmJhc2UsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5hY3RpdmUsXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuZG9uZTtcbiAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdID0ge307XG5cbiAgICBpZiAoYmFzZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgYmFzZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgYWN0aXZlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoZG9uZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgZG9uZUNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgXyA9IF90aGlzJHByb3BzLmNsYXNzTmFtZXMsXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZXNcIl0pO1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgb25FbnRlcjogdGhpcy5vbkVudGVyLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLm9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMub25FbnRlcmluZyxcbiAgICAgIG9uRXhpdDogdGhpcy5vbkV4aXQsXG4gICAgICBvbkV4aXRpbmc6IHRoaXMub25FeGl0aW5nLFxuICAgICAgb25FeGl0ZWQ6IHRoaXMub25FeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIENTU1RyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkNTU1RyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWVzOiAnJ1xufTtcbkNTU1RyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gX2V4dGVuZHMoe30sIFRyYW5zaXRpb24ucHJvcFR5cGVzLCB7XG4gIC8qKlxuICAgKiBUaGUgYW5pbWF0aW9uIGNsYXNzTmFtZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50IGFzIGl0IGFwcGVhcnMsIGVudGVycyxcbiAgICogZXhpdHMgb3IgaGFzIGZpbmlzaGVkIHRoZSB0cmFuc2l0aW9uLiBBIHNpbmdsZSBuYW1lIGNhbiBiZSBwcm92aWRlZCwgd2hpY2hcbiAgICogd2lsbCBiZSBzdWZmaXhlZCBmb3IgZWFjaCBzdGFnZSwgZS5nLiBgY2xhc3NOYW1lcz1cImZhZGVcImAgYXBwbGllczpcbiAgICpcbiAgICogLSBgZmFkZS1hcHBlYXJgLCBgZmFkZS1hcHBlYXItYWN0aXZlYCwgYGZhZGUtYXBwZWFyLWRvbmVgXG4gICAqIC0gYGZhZGUtZW50ZXJgLCBgZmFkZS1lbnRlci1hY3RpdmVgLCBgZmFkZS1lbnRlci1kb25lYFxuICAgKiAtIGBmYWRlLWV4aXRgLCBgZmFkZS1leGl0LWFjdGl2ZWAsIGBmYWRlLWV4aXQtZG9uZWBcbiAgICpcbiAgICogQSBmZXcgZGV0YWlscyB0byBub3RlIGFib3V0IGhvdyB0aGVzZSBjbGFzc2VzIGFyZSBhcHBsaWVkOlxuICAgKlxuICAgKiAxLiBUaGV5IGFyZSBfam9pbmVkXyB3aXRoIHRoZSBvbmVzIHRoYXQgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGUgY2hpbGRcbiAgICogICAgY29tcG9uZW50LCBzbyBpZiB5b3Ugd2FudCB0byBhZGQgc29tZSBiYXNlIHN0eWxlcywgeW91IGNhbiB1c2VcbiAgICogICAgYGNsYXNzTmFtZWAgd2l0aG91dCB3b3JyeWluZyB0aGF0IGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogMi4gSWYgdGhlIHRyYW5zaXRpb24gY29tcG9uZW50IG1vdW50cyB3aXRoIGBpbj17ZmFsc2V9YCwgbm8gY2xhc3NlcyBhcmVcbiAgICogICAgYXBwbGllZCB5ZXQuIFlvdSBtaWdodCBiZSBleHBlY3RpbmcgYCotZXhpdC1kb25lYCwgYnV0IGlmIHlvdSB0aGlua1xuICAgKiAgICBhYm91dCBpdCwgYSBjb21wb25lbnQgY2Fubm90IGZpbmlzaCBleGl0aW5nIGlmIGl0IGhhc24ndCBlbnRlcmVkIHlldC5cbiAgICpcbiAgICogMi4gYGZhZGUtYXBwZWFyLWRvbmVgIGFuZCBgZmFkZS1lbnRlci1kb25lYCB3aWxsIF9ib3RoXyBiZSBhcHBsaWVkLiBUaGlzXG4gICAqICAgIGFsbG93cyB5b3UgdG8gZGVmaW5lIGRpZmZlcmVudCBiZWhhdmlvciBmb3Igd2hlbiBhcHBlYXJpbmcgaXMgZG9uZSBhbmRcbiAgICogICAgd2hlbiByZWd1bGFyIGVudGVyaW5nIGlzIGRvbmUsIHVzaW5nIHNlbGVjdG9ycyBsaWtlXG4gICAqICAgIGAuZmFkZS1lbnRlci1kb25lOm5vdCguZmFkZS1hcHBlYXItZG9uZSlgLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGFwcGx5XG4gICAqICAgIGFuIGVwaWMgZW50cmFuY2UgYW5pbWF0aW9uIHdoZW4gZWxlbWVudCBmaXJzdCBhcHBlYXJzIGluIHRoZSBET00gdXNpbmdcbiAgICogICAgW0FuaW1hdGUuY3NzXShodHRwczovL2RhbmVkZW4uZ2l0aHViLmlvL2FuaW1hdGUuY3NzLykuIE90aGVyd2lzZSB5b3UgY2FuXG4gICAqICAgIHNpbXBseSB1c2UgYGZhZGUtZW50ZXItZG9uZWAgZm9yIGRlZmluaW5nIGJvdGggY2FzZXMuXG4gICAqXG4gICAqIEVhY2ggaW5kaXZpZHVhbCBjbGFzc05hbWVzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBpbmRlcGVuZGVudGx5IGxpa2U6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3tcbiAgICogIGFwcGVhcjogJ215LWFwcGVhcicsXG4gICAqICBhcHBlYXJBY3RpdmU6ICdteS1hY3RpdmUtYXBwZWFyJyxcbiAgICogIGFwcGVhckRvbmU6ICdteS1kb25lLWFwcGVhcicsXG4gICAqICBlbnRlcjogJ215LWVudGVyJyxcbiAgICogIGVudGVyQWN0aXZlOiAnbXktYWN0aXZlLWVudGVyJyxcbiAgICogIGVudGVyRG9uZTogJ215LWRvbmUtZW50ZXInLFxuICAgKiAgZXhpdDogJ215LWV4aXQnLFxuICAgKiAgZXhpdEFjdGl2ZTogJ215LWFjdGl2ZS1leGl0JyxcbiAgICogIGV4aXREb25lOiAnbXktZG9uZS1leGl0JyxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIElmIHlvdSB3YW50IHRvIHNldCB0aGVzZSBjbGFzc2VzIHVzaW5nIENTUyBNb2R1bGVzOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBpbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLmNzcyc7XG4gICAqIGBgYFxuICAgKlxuICAgKiB5b3UgbWlnaHQgd2FudCB0byB1c2UgY2FtZWxDYXNlIGluIHlvdXIgQ1NTIGZpbGUsIHRoYXQgd2F5IGNvdWxkIHNpbXBseVxuICAgKiBzcHJlYWQgdGhlbSBpbnN0ZWFkIG9mIGxpc3RpbmcgdGhlbSBvbmUgYnkgb25lOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7IC4uLnN0eWxlcyB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHtcbiAgICogIGFwcGVhcj86IHN0cmluZyxcbiAgICogIGFwcGVhckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGFwcGVhckRvbmU/OiBzdHJpbmcsXG4gICAqICBlbnRlcj86IHN0cmluZyxcbiAgICogIGVudGVyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZW50ZXJEb25lPzogc3RyaW5nLFxuICAgKiAgZXhpdD86IHN0cmluZyxcbiAgICogIGV4aXRBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBleGl0RG9uZT86IHN0cmluZyxcbiAgICogfX1cbiAgICovXG4gIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXNTaGFwZSxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvciAnYXBwZWFyJyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyLWFjdGl2ZScgb3JcbiAgICogJ2FwcGVhci1hY3RpdmUnIGNsYXNzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yXG4gICAqICdhcHBlYXInIGNsYXNzZXMgYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdC1hY3RpdmUnIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3Nlc1xuICAgKiBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZXhpdC1kb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0pIDoge307XG5leHBvcnQgZGVmYXVsdCBDU1NUcmFuc2l0aW9uOyIsImltcG9ydCBoYXNDbGFzcyBmcm9tICcuL2hhc0NsYXNzJztcbi8qKlxuICogQWRkcyBhIENTUyBjbGFzcyB0byBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO2Vsc2UgaWYgKCFoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZSArIFwiIFwiICsgY2xhc3NOYW1lO2Vsc2UgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycpICsgXCIgXCIgKyBjbGFzc05hbWUpO1xufSIsIi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZWxlbWVudCBoYXMgYSBDU1MgY2xhc3MuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSByZXR1cm4gISFjbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcIiBcIiArIChlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8IGVsZW1lbnQuY2xhc3NOYW1lKSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBoYXNOZXh0ID0gKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkTWFwcGluZ1trZXldO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpICYmICFwcmV2Q2hpbGQucHJvcHMuaW47IC8vIGl0ZW0gaXMgbmV3IChlbnRlcmluZylcblxuICAgIGlmIChoYXNOZXh0ICYmICghaGFzUHJldiB8fCBpc0xlYXZpbmcpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnZW50ZXJpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHRydWUsXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWhhc05leHQgJiYgaGFzUHJldiAmJiAhaXNMZWF2aW5nKSB7XG4gICAgICAvLyBpdGVtIGlzIG9sZCAoZXhpdGluZylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdsZWF2aW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBpbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dCAmJiBoYXNQcmV2ICYmIGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkpIHtcbiAgICAgIC8vIGl0ZW0gaGFzbid0IGNoYW5nZWQgdHJhbnNpdGlvbiBzdGF0ZXNcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHByb3BzO1xuICAgICAgLy8gY29uc29sZS5sb2coJ3VuY2hhbmdlZCcsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogcHJldkNoaWxkLnByb3BzLmluLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hpbGRyZW47XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cCc7XG4vKipcbiAqIFRoZSBgPFJlcGxhY2VUcmFuc2l0aW9uPmAgY29tcG9uZW50IGlzIGEgc3BlY2lhbGl6ZWQgYFRyYW5zaXRpb25gIGNvbXBvbmVudFxuICogdGhhdCBhbmltYXRlcyBiZXR3ZWVuIHR3byBjaGlsZHJlbi5cbiAqXG4gKiBgYGBqc3hcbiAqIDxSZXBsYWNlVHJhbnNpdGlvbiBpbj5cbiAqICAgPEZhZGU+PGRpdj5JIGFwcGVhciBmaXJzdDwvZGl2PjwvRmFkZT5cbiAqICAgPEZhZGU+PGRpdj5JIHJlcGxhY2UgdGhlIGFib3ZlPC9kaXY+PC9GYWRlPlxuICogPC9SZXBsYWNlVHJhbnNpdGlvbj5cbiAqIGBgYFxuICovXG5cbnZhciBSZXBsYWNlVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShSZXBsYWNlVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVwbGFjZVRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChfYXJncykpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXInLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyaW5nJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyZWQnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuICAgICAgICBhcmdzW19rZXk1XSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0aW5nJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykge1xuICAgICAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGVkJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSZXBsYWNlVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZUxpZmVjeWNsZSA9IGZ1bmN0aW9uIGhhbmRsZUxpZmVjeWNsZShoYW5kbGVyLCBpZHgsIG9yaWdpbmFsQXJncykge1xuICAgIHZhciBfY2hpbGQkcHJvcHM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pW2lkeF07XG4gICAgaWYgKGNoaWxkLnByb3BzW2hhbmRsZXJdKSAoX2NoaWxkJHByb3BzID0gY2hpbGQucHJvcHMpW2hhbmRsZXJdLmFwcGx5KF9jaGlsZCRwcm9wcywgb3JpZ2luYWxBcmdzKTtcblxuICAgIGlmICh0aGlzLnByb3BzW2hhbmRsZXJdKSB7XG4gICAgICB2YXIgbWF5YmVOb2RlID0gY2hpbGQucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgICAgdGhpcy5wcm9wc1toYW5kbGVyXShtYXliZU5vZGUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGluUHJvcCA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCJdKTtcblxuICAgIHZhciBfUmVhY3QkQ2hpbGRyZW4kdG9BcnIgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKSxcbiAgICAgICAgZmlyc3QgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMF0sXG4gICAgICAgIHNlY29uZCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclsxXTtcblxuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyaW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyZWQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0aW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRlZDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwLCBwcm9wcywgaW5Qcm9wID8gUmVhY3QuY2xvbmVFbGVtZW50KGZpcnN0LCB7XG4gICAgICBrZXk6ICdmaXJzdCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUVudGVyLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFbnRlcmVkXG4gICAgfSkgOiBSZWFjdC5jbG9uZUVsZW1lbnQoc2Vjb25kLCB7XG4gICAgICBrZXk6ICdzZWNvbmQnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFeGl0LFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFeGl0aW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gUmVwbGFjZVRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJlcGxhY2VUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgaW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBmdW5jdGlvbiBjaGlsZHJlbihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICBpZiAoUmVhY3QuQ2hpbGRyZW4uY291bnQocHJvcHNbcHJvcE5hbWVdKSAhPT0gMikgcmV0dXJuIG5ldyBFcnJvcihcIlxcXCJcIiArIHByb3BOYW1lICsgXCJcXFwiIG11c3QgYmUgZXhhY3RseSB0d28gdHJhbnNpdGlvbiBjb21wb25lbnRzLlwiKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgUmVwbGFjZVRyYW5zaXRpb247IiwiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5cbnZhciBfbGVhdmVSZW5kZXJzLCBfZW50ZXJSZW5kZXJzO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEVOVEVSRUQsIEVOVEVSSU5HLCBFWElUSU5HIH0gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5cbmZ1bmN0aW9uIGFyZUNoaWxkcmVuRGlmZmVyZW50KG9sZENoaWxkcmVuLCBuZXdDaGlsZHJlbikge1xuICBpZiAob2xkQ2hpbGRyZW4gPT09IG5ld0NoaWxkcmVuKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KG9sZENoaWxkcmVuKSAmJiBSZWFjdC5pc1ZhbGlkRWxlbWVudChuZXdDaGlsZHJlbikgJiYgb2xkQ2hpbGRyZW4ua2V5ICE9IG51bGwgJiYgb2xkQ2hpbGRyZW4ua2V5ID09PSBuZXdDaGlsZHJlbi5rZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogRW51bSBvZiBtb2RlcyBmb3IgU3dpdGNoVHJhbnNpdGlvbiBjb21wb25lbnRcbiAqIEBlbnVtIHsgc3RyaW5nIH1cbiAqL1xuXG5cbmV4cG9ydCB2YXIgbW9kZXMgPSB7XG4gIG91dDogJ291dC1pbicsXG4gIGluOiAnaW4tb3V0J1xufTtcblxudmFyIGNhbGxIb29rID0gZnVuY3Rpb24gY2FsbEhvb2soZWxlbWVudCwgbmFtZSwgY2IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2VsZW1lbnQkcHJvcHM7XG5cbiAgICBlbGVtZW50LnByb3BzW25hbWVdICYmIChfZWxlbWVudCRwcm9wcyA9IGVsZW1lbnQucHJvcHMpW25hbWVdLmFwcGx5KF9lbGVtZW50JHByb3BzLCBhcmd1bWVudHMpO1xuICAgIGNiKCk7XG4gIH07XG59O1xuXG52YXIgbGVhdmVSZW5kZXJzID0gKF9sZWF2ZVJlbmRlcnMgPSB7fSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcsIG51bGwpO1xuICAgIH0pXG4gIH0pO1xufSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmMi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMi5jaGFuZ2VTdGF0ZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gIHJldHVybiBbY3VycmVudCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HKTtcbiAgICB9KVxuICB9KV07XG59LCBfbGVhdmVSZW5kZXJzKTtcbnZhciBlbnRlclJlbmRlcnMgPSAoX2VudGVyUmVuZGVycyA9IHt9LCBfZW50ZXJSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjMuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYzLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pO1xufSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmNC5jdXJyZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNC5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjQuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBbUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pLCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZVxuICB9KV07XG59LCBfZW50ZXJSZW5kZXJzKTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgW3Z1ZSB0cmFuc2l0aW9uIG1vZGVzXShodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS90cmFuc2l0aW9ucy5odG1sI1RyYW5zaXRpb24tTW9kZXMpLlxuICogWW91IGNhbiB1c2UgaXQgd2hlbiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSByZW5kZXIgYmV0d2VlbiBzdGF0ZSB0cmFuc2l0aW9ucy5cbiAqIEJhc2VkIG9uIHRoZSBzZWxlY3RlZCBtb2RlIGFuZCB0aGUgY2hpbGQncyBrZXkgd2hpY2ggaXMgdGhlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIG1ha2VzIGEgY29uc2lzdGVudCB0cmFuc2l0aW9uIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBJZiB0aGUgYG91dC1pbmAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCB3YWl0cyB1bnRpbCB0aGUgb2xkIGNoaWxkIGxlYXZlcyBhbmQgdGhlbiBpbnNlcnRzIGEgbmV3IGNoaWxkLlxuICogSWYgdGhlIGBpbi1vdXRgIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgaW5zZXJ0cyBhIG5ldyBjaGlsZCBmaXJzdCwgd2FpdHMgZm9yIHRoZSBuZXcgY2hpbGQgdG8gZW50ZXIgYW5kIHRoZW4gcmVtb3ZlcyB0aGUgb2xkIGNoaWxkLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3Ugd2FudCB0aGUgYW5pbWF0aW9uIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseVxuICogKHRoYXQgaXMsIHRvIGhhdmUgdGhlIG9sZCBjaGlsZCByZW1vdmVkIGFuZCBhIG5ldyBjaGlsZCBpbnNlcnRlZCAqKmF0IHRoZSBzYW1lIHRpbWUqKiksXG4gKiB5b3Ugc2hvdWxkIHVzZVxuICogW2BUcmFuc2l0aW9uR3JvdXBgXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24tZ3JvdXApXG4gKiBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogIHJldHVybiAoXG4gKiAgICA8U3dpdGNoVHJhbnNpdGlvbj5cbiAqICAgICAgPENTU1RyYW5zaXRpb25cbiAqICAgICAgICBrZXk9e3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4gbm9kZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBkb25lLCBmYWxzZSl9XG4gKiAgICAgICAgY2xhc3NOYW1lcz0nZmFkZSdcbiAqICAgICAgPlxuICogICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0U3RhdGUoc3RhdGUgPT4gIXN0YXRlKX0+XG4gKiAgICAgICAgICB7c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgPC9idXR0b24+XG4gKiAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgIDwvU3dpdGNoVHJhbnNpdGlvbj5cbiAqICApO1xuICogfVxuICogYGBgXG4gKlxuICogYGBgY3NzXG4gKiAuZmFkZS1lbnRlcntcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1leGl0e1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmUsXG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG52YXIgU3dpdGNoVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShTd2l0Y2hUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTd2l0Y2hUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBFTlRFUkVELFxuICAgICAgY3VycmVudDogbnVsbFxuICAgIH07XG4gICAgX3RoaXMuYXBwZWFyZWQgPSBmYWxzZTtcblxuICAgIF90aGlzLmNoYW5nZVN0YXRlID0gZnVuY3Rpb24gKHN0YXR1cywgY3VycmVudCkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IHZvaWQgMCkge1xuICAgICAgICBjdXJyZW50ID0gX3RoaXMuc3RhdGUuY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgY3VycmVudDogY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2l0Y2hUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmFwcGVhcmVkID0gdHJ1ZTtcbiAgfTtcblxuICBTd2l0Y2hUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICBpZiAocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudDogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSBFTlRFUklORyAmJiBwcm9wcy5tb2RlID09PSBtb2Rlcy5pbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuY3VycmVudCAmJiBhcmVDaGlsZHJlbkRpZmZlcmVudChzdGF0ZS5jdXJyZW50LCBwcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVElOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudDogUmVhY3QuY2xvbmVFbGVtZW50KHByb3BzLmNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBtb2RlID0gX3RoaXMkcHJvcHMubW9kZSxcbiAgICAgICAgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzdGF0dXMgPSBfdGhpcyRzdGF0ZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcyRzdGF0ZS5jdXJyZW50O1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgY3VycmVudDogY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlOiB0aGlzLmNoYW5nZVN0YXRlLFxuICAgICAgc3RhdHVzOiBzdGF0dXNcbiAgICB9O1xuICAgIHZhciBjb21wb25lbnQ7XG5cbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBFTlRFUklORzpcbiAgICAgICAgY29tcG9uZW50ID0gZW50ZXJSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFWElUSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBsZWF2ZVJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVOVEVSRUQ6XG4gICAgICAgIGNvbXBvbmVudCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6ICF0aGlzLmFwcGVhcmVkXG4gICAgICB9XG4gICAgfSwgY29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gU3dpdGNoVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuU3dpdGNoVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBUcmFuc2l0aW9uIG1vZGVzLlxuICAgKiBgb3V0LWluYDogQ3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dCBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgbmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4uXG4gICAqIGBpbi1vdXRgOiBOZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbiBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgY3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dC5cbiAgICpcbiAgICogQHR5cGUgeydvdXQtaW4nfCdpbi1vdXQnfVxuICAgKi9cbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFttb2Rlcy5pbiwgbW9kZXMub3V0XSksXG5cbiAgLyoqXG4gICAqIEFueSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSlcbn0gOiB7fTtcblN3aXRjaFRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBtb2RlOiBtb2Rlcy5vdXRcbn07XG5leHBvcnQgZGVmYXVsdCBTd2l0Y2hUcmFuc2l0aW9uOyIsImltcG9ydCB7IGNzcyB9IGZyb20gXCJAZW1vdGlvbi9jc3NcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IExvYWRpbmdPdmVybGF5U3R5bGVzIH0gZnJvbSBcIi4vbG9hZGluZy1vdmVybGF5XCI7XG5cbmludGVyZmFjZSBTcGlubmVyUHJvcHMge1xuICBnZXRTdHlsZXM6IChrZXk6IGtleW9mIExvYWRpbmdPdmVybGF5U3R5bGVzLCBwcm92aWRlZFN0YXRlPzogc3RyaW5nKSA9PiBhbnk7XG4gIGN4OiAoY2xhc3NOYW1lOiBzdHJpbmcsIHN0eWxlTmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG59XG5cbmNvbnN0IFNwaW5uZXI6IFJlYWN0LkZDPFNwaW5uZXJQcm9wcz4gPSAoeyBnZXRTdHlsZXMsIGN4IH0pID0+IChcbiAgPGRpdiBjbGFzc05hbWU9e2N4KFwic3Bpbm5lclwiLCBjc3MoZ2V0U3R5bGVzKFwic3Bpbm5lclwiKSkpfT5cbiAgICA8c3ZnIHZpZXdCb3g9XCIyNSAyNSA1MCA1MFwiPlxuICAgICAgPGNpcmNsZVxuICAgICAgICBjeD1cIjUwXCJcbiAgICAgICAgY3k9XCI1MFwiXG4gICAgICAgIHI9XCIyMFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlV2lkdGg9XCIyXCJcbiAgICAgICAgc3Ryb2tlTWl0ZXJsaW1pdD1cIjEwXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIDwvZGl2PlxuKTtcblxuU3Bpbm5lci5wcm9wVHlwZXMgPSB7XG4gIGdldFN0eWxlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY3g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTcGlubmVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvLyBUeXBlIGRlZmluaXRpb25zIGZvciBSZWFjdC1Mb2FkaW5nLU92ZXJsYXkgMS4wXG4vLyBQcm9qZWN0OiBodHRwczovL2dpdGh1Yi5jb20vZGVycmlja3BlbGxldGllci9yZWFjdC1sb2FkaW5nLW92ZXJsYXlcbi8vIERlZmluaXRpb25zIGJ5OiBEZWZpbml0ZWx5VHlwZWQgPGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQ+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWRcbmltcG9ydCB7IGNzcywgY3ggfSBmcm9tIFwiQGVtb3Rpb24vY3NzXCI7XG5pbXBvcnQgeyBDU1NUcmFuc2l0aW9uIH0gZnJvbSBcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXBcIjtcblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4vbG9hZGluZy1vdmVybGF5LXNwaW5uZXJcIjtcbmltcG9ydCBTVFlMRVMgZnJvbSBcIi4vbG9hZGluZy1vdmVybGF5LXN0eWxlc1wiO1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nT3ZlcmxheVN0eWxlcyA9IHtcbiAgY29udGVudD86IChiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBvdmVybGF5PzogKGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIHNwaW5uZXI/OiAoYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcykgPT4gUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgd3JhcHBlcj86IChiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzLCBwcm9wcz86IGFueSkgPT4gUmVhY3QuQ1NTUHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ092ZXJsYXlQcm9wcyB7XG4gIC8qKiBkZWZhdWx0OiBgYHRydWVgYCAtIHdoZXRoZXIgdGhlIGxvYWRlciBpcyB2aXNpYmxlLiAqL1xuICBhY3RpdmU/OiBib29sZWFuO1xuXG4gIC8qKiBkZWZhdWx0OiBgYDUwMGBgIC0gdGhlIHRyYW5zaXRpb24gc3BlZWQgZm9yIGZhZGluZyBvdXQgdGhlIG92ZXJsYXkuICovXG4gIGZhZGVTcGVlZD86IG51bWJlcjtcblxuICAvKiogZGVmYXVsdDogYGB1bmRlZmluZWRgYCAtIGNsaWNrIGhhbmRsZXIgZm9yIHRoZSBvdmVybGF5IHdoZW4gYWN0aXZlLiAqL1xuICBvbkNsaWNrPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0OiBgYHVuZGVmaW5lZGBgIC0gdGhlIGNsYXNzTmFtZSBmb3IgdGhlIHdyYXBwaW5nIGBgPGRpdiAvPmBgIHRoYXRcbiAgICogIGlzIHByZXNlbnQgd2hldGhlciBhY3RpdmUgb3Igbm90LlxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0OiBgYF9sb2FkaW5nX292ZXJsYXlfYGAgLSB0aGUgcHJlZml4IGZvciBhbGwgY2xhc3NOYW1lcyBvbiB0aGVcbiAgICogZ2VuZXJhdGVkIGVsZW1lbnRzLiBzZWUgU3R5bGluZyBmb3IgbW9yZSBpbmZvLlxuICAgKi9cbiAgY2xhc3NOYW1lUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0OiBgYGZhbHNlYGAgLSByZW5kZXJzIHRoZSBkZWZhdWx0IHNwaW5uZXIgd2hlbiB0cnVlIChhbmQgd2hlbiB0aGVcbiAgICogbG9hZGVyIGlzIGFjdGl2ZSkuIE90aGVyd2lzZSB5b3UgY2FuIHByb3ZpZGUgYW55IHZhbGlkIHJlYWN0IG5vZGUgdG8gdXNlXG4gICAqIHlvdXIgb3duIHNwaW5uZXIuXG4gICAqL1xuICBzcGlubmVyPzogYm9vbGVhbiB8IFJlYWN0LlJlYWN0Tm9kZTtcblxuICAvKipcbiAgICogZGVmYXVsdDogYGB1bmRlZmluZWRgYCAtIHRoZSB0ZXh0IG9yIHJlYWN0IG5vZGUgdG8gcmVuZGVyIGluIHRoZSBsb2FkZXIgb3ZlcmxheSB3aGVuIGFjdGl2ZS5cbiAgICovXG4gIHRleHQ/OiBSZWFjdC5SZWFjdE5vZGU7XG5cbiAgLyoqXG4gICAqIGRlZmF1bHQ6IGBgdW5kZWZpbmVkYGAgLSBzZWUgU3R5bGluZyBmb3IgbW9yZSBpbmZvLlxuICAgKi9cbiAgc3R5bGVzPzogTG9hZGluZ092ZXJsYXlTdHlsZXM7XG5cbiAgY2hpbGRyZW4/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ092ZXJsYXlTdGF0ZSB7XG4gIG92ZXJmbG93Q1NTOiBhbnk7XG59XG5cbmNsYXNzIExvYWRpbmdPdmVybGF5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICBMb2FkaW5nT3ZlcmxheVByb3BzLFxuICBMb2FkaW5nT3ZlcmxheVN0YXRlXG4+IHtcbiAgd3JhcHBlcjogYW55ID0gY3JlYXRlUmVmKCk7XG4gIG5vZGVSZWY6IGFueSA9IGNyZWF0ZVJlZigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBMb2FkaW5nT3ZlcmxheVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IG92ZXJmbG93Q1NTOiB7fSB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qgd3JhcHBlclN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy53cmFwcGVyLmN1cnJlbnQpO1xuICAgIGNvbnN0IG92ZXJmbG93Q1NTID0gW1wib3ZlcmZsb3dcIiwgXCJvdmVyZmxvd1hcIiwgXCJvdmVyZmxvd1lcIl0ucmVkdWNlKFxuICAgICAgKG06IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAod3JhcHBlclN0eWxlW2kgYXMgYW55XSAhPT0gXCJ2aXNpYmxlXCIpIG1baV0gPSBcImhpZGRlblwiO1xuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG92ZXJmbG93Q1NTIH0pO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogTG9hZGluZ092ZXJsYXlQcm9wcykge1xuICAgIGNvbnN0IHsgYWN0aXZlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChhY3RpdmUpIHRoaXMud3JhcHBlci5jdXJyZW50LnNjcm9sbFRvcCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGVtb3Rpb24gY3NzIG9iamVjdCBmb3IgYSBnaXZlbiBlbGVtZW50IGtleVxuICAgKiBJZiBhIGN1c3RvbSBzdHlsZSB3YXMgcHJvdmlkZWQgdmlhIHByb3BzLCBydW4gaXQgd2l0aFxuICAgKiB0aGUgYmFzZSBjc3Mgb2JqLlxuICAgKi9cbiAgZ2V0U3R5bGVzID0gKGtleToga2V5b2YgTG9hZGluZ092ZXJsYXlTdHlsZXMsIHByb3ZpZGVkU3RhdGU/OiBhbnkpID0+IHtcbiAgICBjb25zdCBiYXNlID0gU1RZTEVTW2tleV0ocHJvdmlkZWRTdGF0ZSwgdGhpcy5wcm9wcyk7XG4gICAgY29uc3QgY3VzdG9tID0gdGhpcy5wcm9wcy5zdHlsZXMgPyB0aGlzLnByb3BzLnN0eWxlc1trZXldIDogdW5kZWZpbmVkO1xuICAgIGlmICghY3VzdG9tKSB7IHJldHVybiBiYXNlIH07XG4gICAgcmV0dXJuIHR5cGVvZiBjdXN0b20gPT09IFwiZnVuY3Rpb25cIiA/IGN1c3RvbShiYXNlLCB0aGlzLnByb3BzKSA6IGN1c3RvbTtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgY3ggd3JhcHBlciB0byBhZGQgcHJlZml4IGNsYXNzZXMgdG8gZWFjaCBvZiB0aGUgY2hpbGRcbiAgICogZWxlbWVudHMgZm9yIHN0eWxpbmcgcHVycG9zZXMuXG4gICAqL1xuICBjeCA9IChuYW1lczogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIGNvbnN0IGFyciA9IEFycmF5LmlzQXJyYXkobmFtZXMpID8gbmFtZXMgOiBbbmFtZXNdO1xuICAgIHJldHVybiBjeChcbiAgICAgIC4uLmFyci5tYXAoKG5hbWUpID0+XG4gICAgICAgIG5hbWVcbiAgICAgICAgICA/IGAke3RoaXMucHJvcHMuY2xhc3NOYW1lUHJlZml4ID8/IFwiX2xvYWRpbmdfb3ZlcmxheV9cIn0ke25hbWV9YFxuICAgICAgICAgIDogXCJcIlxuICAgICAgKSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBhY3RpdmUsXG4gICAgICBmYWRlU3BlZWQgPSA1MDAsXG4gICAgICBzcGlubmVyLFxuICAgICAgdGV4dCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwid3JhcHBlclwiXG4gICAgICAgIHJlZj17dGhpcy53cmFwcGVyfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3goXG4gICAgICAgICAgW1wid3JhcHBlclwiLCBhY3RpdmUgJiYgXCJ3cmFwcGVyLS1hY3RpdmVcIl0sXG4gICAgICAgICAgY3NzKHRoaXMuZ2V0U3R5bGVzKFwid3JhcHBlclwiLCBhY3RpdmUgPyB0aGlzLnN0YXRlLm92ZXJmbG93Q1NTIDoge30pKSxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgID5cbiAgICAgICAgPENTU1RyYW5zaXRpb25cbiAgICAgICAgICBpbj17YWN0aXZlfVxuICAgICAgICAgIGNsYXNzTmFtZXM9XCJfbG9hZGluZy1vdmVybGF5LXRyYW5zaXRpb25cIlxuICAgICAgICAgIHRpbWVvdXQ9e2ZhZGVTcGVlZH1cbiAgICAgICAgICB1bm1vdW50T25FeGl0XG4gICAgICAgICAgcmVmPXt0aGlzLm5vZGVSZWZ9XG4gICAgICAgICAgYWRkRW5kTGlzdGVuZXI9eygpID0+IHsgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHsoc3RhdGUpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmN4KFxuICAgICAgICAgICAgICAgIFwib3ZlcmxheVwiLFxuICAgICAgICAgICAgICAgIGNzcyh0aGlzLmdldFN0eWxlcyhcIm92ZXJsYXlcIiwgc3RhdGUpKVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmN4KFwiY29udGVudFwiLCBjc3ModGhpcy5nZXRTdHlsZXMoXCJjb250ZW50XCIpKSl9XG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLm5vZGVSZWZ9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7c3Bpbm5lciAmJlxuICAgICAgICAgICAgICAgICAgKHR5cGVvZiBzcGlubmVyID09PSBcImJvb2xlYW5cIiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNwaW5uZXIgY3g9e3RoaXMuY3h9IGdldFN0eWxlcz17dGhpcy5nZXRTdHlsZXN9IC8+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICBzcGlubmVyXG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NTU1RyYW5zaXRpb24+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9hZGluZ092ZXJsYXk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgTG9hZGluZ092ZXJsYXkgZnJvbSBcIi4vc3JjL2xvYWRpbmctb3ZlcmxheVwiO1xuXG5pbnRlcmZhY2UgVGFibGVMb2FkaW5nT3ZlcmxheVdyYXBwZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zPzogYW55KSA9PiAobG9hZGluZz86IGJvb2xlYW4pID0+XG4gIGNsYXNzIFRhYmxlTG9hZGluZ092ZXJsYXlXcmFwcGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFRhYmxlTG9hZGluZ092ZXJsYXlXcmFwcGVyUHJvcHM+IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gICAgfTtcblxuICAgIG92ZXJsYXk6IGFueTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwcGVyIH0gPSB0aGlzLm92ZXJsYXk7XG4gICAgICAgIGNvbnN0IG1hc2tlciA9IHdyYXBwZXIuY3VycmVudC5maXJzdENoaWxkO1xuICAgICAgICBjb25zdCBoZWFkZXJET00gPSB3cmFwcGVyLmN1cnJlbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGhlYWRcIik7XG4gICAgICAgIGNvbnN0IGJvZHlET00gPSB3cmFwcGVyLmN1cnJlbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGJvZHlcIik7XG4gICAgICAgIGNvbnN0IGNhcHRpb25ET00gPVxuICAgICAgICAgIHdyYXBwZXIuY3VycmVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJjYXB0aW9uXCIpO1xuICAgICAgICBsZXQgbWFyZ2luVG9wID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaGVhZGVyRE9NKS5oZWlnaHQ7XG4gICAgICAgIGlmIChjYXB0aW9uRE9NKSB7XG4gICAgICAgICAgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChtYXJnaW5Ub3AucmVwbGFjZShcInB4XCIsIFwiXCIpKS50b1N0cmluZygpO1xuICAgICAgICAgIG1hcmdpblRvcCArPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2FwdGlvbkRPTSkuaGVpZ2h0LnJlcGxhY2UoXCJweFwiLCBcIlwiKVxuICAgICAgICAgICkudG9TdHJpbmcoKTtcbiAgICAgICAgICBtYXJnaW5Ub3AgPSBgJHttYXJnaW5Ub3B9cHhgO1xuICAgICAgICB9XG4gICAgICAgIG1hc2tlci5zdHlsZS5tYXJnaW5Ub3AgPSBtYXJnaW5Ub3A7XG4gICAgICAgIG1hc2tlci5zdHlsZS5oZWlnaHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib2R5RE9NKS5oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPExvYWRpbmdPdmVybGF5XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7IHRoaXMub3ZlcmxheSA9IG47IH19XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgYWN0aXZlPXtsb2FkaW5nfVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvTG9hZGluZ092ZXJsYXk+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSBcIkBlbW90aW9uL2Nzc1wiO1xuXG5jb25zdCByb3RhdGUzNjAgPSBrZXlmcmFtZXNgXG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG5gO1xuXG5jb25zdCBzcGlubmVyRGFzaCA9IGtleWZyYW1lc2BcbiAgMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsMjAwO1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xuICB9XG4gIDUwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODksMjAwO1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMzVweDtcbiAgfVxuICAxMDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiA4OSwyMDA7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjRweDtcbiAgfVxuYDtcblxuY29uc3QgU1RZTEVTID0ge1xuICB3cmFwcGVyOiAoc3RhdGU6IGFueSkgPT4gKHtcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgIC4uLnN0YXRlLFxuICB9KSxcbiAgb3ZlcmxheTogKHN0YXRlOiBhbnksIHByb3BzOiBhbnkpID0+ICh7XG4gICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICB0b3A6IFwiMHB4XCIsXG4gICAgbGVmdDogXCIwcHhcIixcbiAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgZm9udFNpemU6IFwiMS4yZW1cIixcbiAgICBjb2xvcjogXCIjRkZGXCIsXG4gICAgYmFja2dyb3VuZDogXCJyZ2JhKDAsIDAsIDAsIDAuNylcIixcbiAgICB6SW5kZXg6IDgwMCxcbiAgICB0cmFuc2l0aW9uOiBgb3BhY2l0eSAke3Byb3BzLmZhZGVTcGVlZH1tcyBlYXNlLWluYCxcbiAgICBvcGFjaXR5OiBzdGF0ZSA9PT0gXCJlbnRlcmluZ1wiIHx8IHN0YXRlID09PSBcImVudGVyZWRcIiA/IDEgOiAwLFxuICB9KSxcbiAgY29udGVudDogKCkgPT4gKHtcbiAgICBtYXJnaW46IFwiYXV0b1wiLFxuICB9KSxcbiAgc3Bpbm5lcjogKCkgPT4gKHtcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgIG1hcmdpbjogXCIwcHggYXV0byAxMHB4IGF1dG9cIixcbiAgICB3aWR0aDogXCI1MHB4XCIsXG4gICAgbWF4SGVpZ2h0OiBcIjEwMCVcIixcbiAgICBcIiY6YmVmb3JlXCI6IHtcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgIHBhZGRpbmdUb3A6IFwiMTAwJVwiLFxuICAgIH0sXG4gICAgXCImIHN2Z1wiOiB7XG4gICAgICBhbmltYXRpb246IGAke3JvdGF0ZTM2MH0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46IFwiY2VudGVyIGNlbnRlclwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHRvcDogXCIwXCIsXG4gICAgICBib3R0b206IFwiMFwiLFxuICAgICAgbGVmdDogXCIwXCIsXG4gICAgICByaWdodDogXCIwXCIsXG4gICAgICBtYXJnaW46IFwiYXV0b1wiLFxuICAgICAgXCImIGNpcmNsZVwiOiB7XG4gICAgICAgIGFuaW1hdGlvbjogYCR7c3Bpbm5lckRhc2h9IDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGVgLFxuICAgICAgICBzdHJva2VEYXNoYXJyYXk6IFwiMSwyMDBcIixcbiAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogMCxcbiAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICBzdHJva2U6IFwiI0ZGRlwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9KSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNUWUxFUzsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2Mik7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzNfXyIsIlN0eWxlU2hlZXQiLCJvcHRpb25zIiwiX3RoaXMiLCJ0aGlzIiwiX2luc2VydFRhZyIsInRhZyIsImJlZm9yZSIsInRhZ3MiLCJsZW5ndGgiLCJpbnNlcnRpb25Qb2ludCIsIm5leHRTaWJsaW5nIiwicHJlcGVuZCIsImNvbnRhaW5lciIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJwdXNoIiwiaXNTcGVlZHkiLCJ1bmRlZmluZWQiLCJzcGVlZHkiLCJjdHIiLCJub25jZSIsImtleSIsIl9wcm90byIsInByb3RvdHlwZSIsImh5ZHJhdGUiLCJub2RlcyIsImZvckVhY2giLCJpbnNlcnQiLCJydWxlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImNyZWF0ZVN0eWxlRWxlbWVudCIsInNoZWV0IiwiaSIsInN0eWxlU2hlZXRzIiwib3duZXJOb2RlIiwic2hlZXRGb3JUYWciLCJpbnNlcnRSdWxlIiwiY3NzUnVsZXMiLCJlIiwiZmx1c2giLCJfdGFnJHBhcmVudE5vZGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJhYnMiLCJNYXRoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiT2JqZWN0IiwiYXNzaWduIiwidHJpbSIsInZhbHVlIiwicGF0dGVybiIsInJlcGxhY2VtZW50IiwicmVwbGFjZSIsImluZGV4b2YiLCJzZWFyY2giLCJpbmRleE9mIiwiaW5kZXgiLCJjaGFyQ29kZUF0IiwiYmVnaW4iLCJlbmQiLCJzbGljZSIsImFycmF5IiwibGluZSIsImNvbHVtbiIsInBvc2l0aW9uIiwiY2hhcmFjdGVyIiwiY2hhcmFjdGVycyIsIm5vZGUiLCJwYXJlbnQiLCJ0eXBlIiwicHJvcHMiLCJjaGlsZHJlbiIsInJldHVybiIsInByZXYiLCJuZXh0IiwicGVlayIsImNhcmV0IiwidG9rZW4iLCJhbGxvYyIsImRlYWxsb2MiLCJkZWxpbWl0IiwiZGVsaW1pdGVyIiwid2hpdGVzcGFjZSIsImVzY2FwaW5nIiwiY291bnQiLCJjb21tZW50ZXIiLCJpZGVudGlmaWVyIiwiQ09NTUVOVCIsImNhbGxiYWNrIiwib3V0cHV0Iiwic3RyaW5naWZ5IiwiZWxlbWVudCIsImpvaW4iLCJjb21waWxlIiwicGFyc2UiLCJydWxlcyIsInJ1bGVzZXRzIiwicHNldWRvIiwicG9pbnRzIiwiZGVjbGFyYXRpb25zIiwib2Zmc2V0IiwiYXRydWxlIiwicHJvcGVydHkiLCJwcmV2aW91cyIsInZhcmlhYmxlIiwic2Nhbm5pbmciLCJhbXBlcnNhbmQiLCJyZWZlcmVuY2UiLCJjb21tZW50IiwiZGVjbGFyYXRpb24iLCJydWxlc2V0IiwicG9zdCIsInNpemUiLCJqIiwiayIsIngiLCJ5IiwieiIsImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsImdldFJ1bGVzIiwicGFyc2VkIiwidG9SdWxlcyIsImZpeGVkRWxlbWVudHMiLCJXZWFrTWFwIiwiY29tcGF0IiwiaXNJbXBsaWNpdFJ1bGUiLCJnZXQiLCJzZXQiLCJwYXJlbnRSdWxlcyIsInJlbW92ZUxhYmVsIiwiaGFzaCIsImRlZmF1bHRTdHlsaXNQbHVnaW5zIiwibWFwIiwiZXhlYyIsImNyZWF0ZUNhY2hlIiwic3NyU3R5bGVzIiwicXVlcnlTZWxlY3RvckFsbCIsIkFycmF5IiwiY2FsbCIsImdldEF0dHJpYnV0ZSIsImhlYWQiLCJfaW5zZXJ0Iiwic3R5bGlzUGx1Z2lucyIsImluc2VydGVkIiwibm9kZXNUb0h5ZHJhdGUiLCJhdHRyaWIiLCJzcGxpdCIsImN1cnJlbnRTaGVldCIsImNvbGxlY3Rpb24iLCJmaW5hbGl6aW5nUGx1Z2lucyIsInNlcmlhbGl6ZXIiLCJjb25jYXQiLCJzZWxlY3RvciIsInNlcmlhbGl6ZWQiLCJzaG91bGRDYWNoZSIsInN0eWxlcyIsImNhY2hlIiwibmFtZSIsInJlZ2lzdGVyZWQiLCJ1bml0bGVzc0tleXMiLCJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsImFzcGVjdFJhdGlvIiwiYm9yZGVySW1hZ2VPdXRzZXQiLCJib3JkZXJJbWFnZVNsaWNlIiwiYm9yZGVySW1hZ2VXaWR0aCIsImJveEZsZXgiLCJib3hGbGV4R3JvdXAiLCJib3hPcmRpbmFsR3JvdXAiLCJjb2x1bW5Db3VudCIsImNvbHVtbnMiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4UG9zaXRpdmUiLCJmbGV4U2hyaW5rIiwiZmxleE5lZ2F0aXZlIiwiZmxleE9yZGVyIiwiZ3JpZFJvdyIsImdyaWRSb3dFbmQiLCJncmlkUm93U3BhbiIsImdyaWRSb3dTdGFydCIsImdyaWRDb2x1bW4iLCJncmlkQ29sdW1uRW5kIiwiZ3JpZENvbHVtblNwYW4iLCJncmlkQ29sdW1uU3RhcnQiLCJtc0dyaWRSb3ciLCJtc0dyaWRSb3dTcGFuIiwibXNHcmlkQ29sdW1uIiwibXNHcmlkQ29sdW1uU3BhbiIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwib3BhY2l0eSIsIm9yZGVyIiwib3JwaGFucyIsInNjYWxlIiwidGFiU2l6ZSIsIndpZG93cyIsInpJbmRleCIsInpvb20iLCJXZWJraXRMaW5lQ2xhbXAiLCJmaWxsT3BhY2l0eSIsImZsb29kT3BhY2l0eSIsInN0b3BPcGFjaXR5Iiwic3Ryb2tlRGFzaGFycmF5Iiwic3Ryb2tlRGFzaG9mZnNldCIsInN0cm9rZU1pdGVybGltaXQiLCJzdHJva2VPcGFjaXR5Iiwic3Ryb2tlV2lkdGgiLCJtZW1vaXplIiwiZm4iLCJjcmVhdGUiLCJhcmciLCJoeXBoZW5hdGVSZWdleCIsImFuaW1hdGlvblJlZ2V4IiwiaXNDdXN0b21Qcm9wZXJ0eSIsImlzUHJvY2Vzc2FibGVWYWx1ZSIsInByb2Nlc3NTdHlsZU5hbWUiLCJzdHlsZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsInByb2Nlc3NTdHlsZVZhbHVlIiwibWF0Y2giLCJwMSIsInAyIiwiY3Vyc29yIiwiaGFuZGxlSW50ZXJwb2xhdGlvbiIsIm1lcmdlZFByb3BzIiwiaW50ZXJwb2xhdGlvbiIsImNvbXBvbmVudFNlbGVjdG9yIiwiX19lbW90aW9uX3N0eWxlcyIsImtleWZyYW1lcyIsImFuaW0iLCJzZXJpYWxpemVkU3R5bGVzIiwib2JqIiwic3RyaW5nIiwiaXNBcnJheSIsImFzU3RyaW5nIiwiaW50ZXJwb2xhdGVkIiwiX2kiLCJjcmVhdGVTdHJpbmdGcm9tT2JqZWN0IiwicHJldmlvdXNDdXJzb3IiLCJyZXN1bHQiLCJjYWNoZWQiLCJsYWJlbFBhdHRlcm4iLCJzZXJpYWxpemVTdHlsZXMiLCJhcmdzIiwic3RyaW5nTW9kZSIsInN0cmluZ3MiLCJyYXciLCJsYXN0SW5kZXgiLCJpZGVudGlmaWVyTmFtZSIsInN0ciIsImgiLCJsZW4iLCJ0b1N0cmluZyIsImdldFJlZ2lzdGVyZWRTdHlsZXMiLCJyZWdpc3RlcmVkU3R5bGVzIiwiY2xhc3NOYW1lcyIsInJhd0NsYXNzTmFtZSIsImNsYXNzTmFtZSIsImluc2VydFdpdGhvdXRTY29waW5nIiwibWVyZ2UiLCJjc3MiLCJjbGFzc25hbWVzIiwiY2xzIiwidG9BZGQiLCJfY3JlYXRlRW1vdGlvbiIsIl9sZW4iLCJhcmd1bWVudHMiLCJfa2V5IiwiaXNTdHJpbmdUYWciLCJyZWdpc3RlclN0eWxlcyIsImN1cnJlbnQiLCJpbnNlcnRTdHlsZXMiLCJjeCIsIl9sZW40IiwiX2tleTQiLCJpbmplY3RHbG9iYWwiLCJfbGVuMyIsIl9rZXkzIiwiX2xlbjIiLCJfa2V5MiIsImFuaW1hdGlvbiIsImlkcyIsImJpbmQiLCJjcmVhdGVFbW90aW9uIiwiX2V4dGVuZHMiLCJuIiwidCIsInIiLCJoYXNPd25Qcm9wZXJ0eSIsImFwcGx5IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJfc2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9pbmhlcml0c0xvb3NlIiwibyIsImNvbnN0cnVjdG9yIiwicmVwbGFjZUNsYXNzTmFtZSIsIm9yaWdDbGFzcyIsImNsYXNzVG9SZW1vdmUiLCJSZWdFeHAiLCJkaXNhYmxlZCIsImZvcmNlUmVmbG93Iiwic2Nyb2xsVG9wIiwiVU5NT1VOVEVEIiwiRVhJVEVEIiwiRU5URVJJTkciLCJFTlRFUkVEIiwiRVhJVElORyIsIlRyYW5zaXRpb24iLCJfUmVhY3QkQ29tcG9uZW50IiwiY29udGV4dCIsImluaXRpYWxTdGF0dXMiLCJhcHBlYXIiLCJpc01vdW50aW5nIiwiZW50ZXIiLCJhcHBlYXJTdGF0dXMiLCJpbiIsInVubW91bnRPbkV4aXQiLCJtb3VudE9uRW50ZXIiLCJzdGF0ZSIsInN0YXR1cyIsIm5leHRDYWxsYmFjayIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIl9yZWYiLCJwcmV2U3RhdGUiLCJjb21wb25lbnREaWRNb3VudCIsInVwZGF0ZVN0YXR1cyIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsIm5leHRTdGF0dXMiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNhbmNlbE5leHRDYWxsYmFjayIsImdldFRpbWVvdXRzIiwiZXhpdCIsInRpbWVvdXQiLCJtb3VudGluZyIsIm5vZGVSZWYiLCJwZXJmb3JtRW50ZXIiLCJwZXJmb3JtRXhpdCIsInNldFN0YXRlIiwiX3RoaXMyIiwiYXBwZWFyaW5nIiwiX3JlZjIiLCJtYXliZU5vZGUiLCJtYXliZUFwcGVhcmluZyIsInRpbWVvdXRzIiwiZW50ZXJUaW1lb3V0IiwiY29uZmlnIiwic2FmZVNldFN0YXRlIiwib25FbnRlcmVkIiwib25FbnRlciIsIm9uRW50ZXJpbmciLCJvblRyYW5zaXRpb25FbmQiLCJfdGhpczMiLCJvbkV4aXQiLCJvbkV4aXRpbmciLCJvbkV4aXRlZCIsImNhbmNlbCIsIm5leHRTdGF0ZSIsInNldE5leHRDYWxsYmFjayIsIl90aGlzNCIsImFjdGl2ZSIsImV2ZW50IiwiaGFuZGxlciIsImRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIiLCJhZGRFbmRMaXN0ZW5lciIsIl9yZWYzIiwibWF5YmVOZXh0Q2FsbGJhY2siLCJzZXRUaW1lb3V0IiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJjaGlsZFByb3BzIiwiVHJhbnNpdGlvbkdyb3VwQ29udGV4dCIsIlByb3ZpZGVyIiwib25seSIsIm5vb3AiLCJjb250ZXh0VHlwZSIsInByb3BUeXBlcyIsImRlZmF1bHRQcm9wcyIsInJlbW92ZUNsYXNzIiwiY2xhc3NlcyIsImMiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJiYXNlVmFsIiwiQ1NTVHJhbnNpdGlvbiIsImFwcGxpZWRDbGFzc2VzIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50IiwicmVzb2x2ZUFyZ3VtZW50cyIsInJlbW92ZUNsYXNzZXMiLCJhZGRDbGFzcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudDIiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQzIiwiZ2V0Q2xhc3NOYW1lcyIsImlzU3RyaW5nQ2xhc3NOYW1lcyIsImJhc2VDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkb25lQ2xhc3NOYW1lIiwicGhhc2UiLCJhZGQiLCJjb250YWlucyIsImhhc0NsYXNzIiwiX2FkZENsYXNzIiwiX3RoaXMkYXBwbGllZENsYXNzZXMkIiwiYmFzZSIsImRvbmUiLCJnZXRDaGlsZE1hcHBpbmciLCJtYXBGbiIsIkNoaWxkcmVuIiwiY2hpbGQiLCJpc1ZhbGlkRWxlbWVudCIsIm1hcHBlciIsImdldFByb3AiLCJwcm9wIiwiZ2V0TmV4dENoaWxkTWFwcGluZyIsIm5leHRQcm9wcyIsInByZXZDaGlsZE1hcHBpbmciLCJuZXh0Q2hpbGRNYXBwaW5nIiwiZ2V0VmFsdWVGb3JLZXkiLCJuZXh0S2V5c1BlbmRpbmciLCJwZW5kaW5nS2V5cyIsInByZXZLZXkiLCJjaGlsZE1hcHBpbmciLCJuZXh0S2V5IiwicGVuZGluZ05leHRLZXkiLCJtZXJnZUNoaWxkTWFwcGluZ3MiLCJrZXlzIiwiaGFzUHJldiIsImhhc05leHQiLCJwcmV2Q2hpbGQiLCJpc0xlYXZpbmciLCJjbG9uZUVsZW1lbnQiLCJ2YWx1ZXMiLCJUcmFuc2l0aW9uR3JvdXAiLCJoYW5kbGVFeGl0ZWQiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJjb250ZXh0VmFsdWUiLCJmaXJzdFJlbmRlciIsIm1vdW50ZWQiLCJjdXJyZW50Q2hpbGRNYXBwaW5nIiwiQ29tcG9uZW50IiwiY29tcG9uZW50IiwiY2hpbGRGYWN0b3J5IiwiUmVwbGFjZVRyYW5zaXRpb24iLCJfYXJncyIsImhhbmRsZUVudGVyIiwiaGFuZGxlTGlmZWN5Y2xlIiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlcmVkIiwiaGFuZGxlRXhpdCIsIl9sZW41IiwiX2tleTUiLCJoYW5kbGVFeGl0aW5nIiwiX2xlbjYiLCJfa2V5NiIsIl9sZW43IiwiX2tleTciLCJpZHgiLCJvcmlnaW5hbEFyZ3MiLCJfY2hpbGQkcHJvcHMiLCJ0b0FycmF5IiwiaW5Qcm9wIiwiX1JlYWN0JENoaWxkcmVuJHRvQXJyIiwiZmlyc3QiLCJzZWNvbmQiLCJfbGVhdmVSZW5kZXJzIiwiX2VudGVyUmVuZGVycyIsIm1vZGVzIiwiY2FsbEhvb2siLCJjYiIsIl9lbGVtZW50JHByb3BzIiwibGVhdmVSZW5kZXJzIiwiY2hhbmdlU3RhdGUiLCJlbnRlclJlbmRlcnMiLCJfcmVmNCIsIlN3aXRjaFRyYW5zaXRpb24iLCJhcHBlYXJlZCIsIm1vZGUiLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiX3RoaXMkc3RhdGUiLCJkYXRhIiwiU3Bpbm5lciIsImdldFN0eWxlcyIsInZpZXdCb3giLCJjeSIsImZpbGwiLCJmdW5jIiwiaXNSZXF1aXJlZCIsIkxvYWRpbmdPdmVybGF5Iiwic3VwZXIiLCJ3cmFwcGVyIiwiY3JlYXRlUmVmIiwicHJvdmlkZWRTdGF0ZSIsImN1c3RvbSIsIm5hbWVzIiwiYXJyIiwiY2xhc3NOYW1lUHJlZml4Iiwib3ZlcmZsb3dDU1MiLCJ3cmFwcGVyU3R5bGUiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwicmVkdWNlIiwibSIsIm9uQ2xpY2siLCJmYWRlU3BlZWQiLCJzcGlubmVyIiwidGV4dCIsInJlZiIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiZW1wdHlGdW5jdGlvbiIsImVtcHR5RnVuY3Rpb25XaXRoUmVzZXQiLCJyZXNldFdhcm5pbmdDYWNoZSIsInNoaW0iLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImVyciIsIkVycm9yIiwiZ2V0U2hpbSIsIlJlYWN0UHJvcFR5cGVzIiwiYmlnaW50IiwiYm9vbCIsIm51bWJlciIsIm9iamVjdCIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJlbGVtZW50VHlwZSIsImluc3RhbmNlT2YiLCJvYmplY3RPZiIsIm9uZU9mIiwib25lT2ZUeXBlIiwic2hhcGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwibG9hZGluZyIsIm92ZXJsYXkiLCJtYXNrZXIiLCJoZWFkZXJET00iLCJwYXJlbnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsImJvZHlET00iLCJjYXB0aW9uRE9NIiwibWFyZ2luVG9wIiwiaGVpZ2h0IiwicGFyc2VGbG9hdCIsInN0eWxlIiwicm90YXRlMzYwIiwic3Bpbm5lckRhc2giLCJTVFlMRVMiLCJ3aWR0aCIsInRvcCIsImxlZnQiLCJkaXNwbGF5IiwidGV4dEFsaWduIiwiZm9udFNpemUiLCJjb2xvciIsImJhY2tncm91bmQiLCJ0cmFuc2l0aW9uIiwiY29udGVudCIsIm1hcmdpbiIsIm1heEhlaWdodCIsInBhZGRpbmdUb3AiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJib3R0b20iLCJyaWdodCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2UiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImQiLCJhIiwiZGVmaW5pdGlvbiIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|