/**
 * Skipped minification because the original files appears to be already minified.
 * Original file: /npm/wonderwall-stories@1.1.8/dist/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define("Stories",["React"],t):"object"==typeof exports?exports.Stories=t(require("react")):e.Stories=t(e.React)}(window,(function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/dist/index.js",r(r.s=10)}([function(t,r){t.exports=e},function(e,t,r){"use strict";e.exports=r(23)},function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(0)).default.createContext({stories:[],defaultInterval:4e3,width:340,height:640});t.default=o},function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(0));t.default=o.default.createContext({numArray:[],currentId:0,count:0,currentStory:{url:""},videoDuration:0,bufferAction:!1,pause:!1})},function(e,t,r){"use strict";var n=r(1),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return n.isMemo(e)?a:s[e.$$typeof]||o}s[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[n.Memo]=a;var u=Object.defineProperty,l=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,r,n){if("string"!=typeof r){if(h){var o=p(r);o&&o!==h&&e(t,o,n)}var a=l(r);f&&(a=a.concat(f(r)));for(var s=c(t),m=c(r),y=0;y<a.length;++y){var g=a[y];if(!(i[g]||n&&n[g]||m&&m[g]||s&&s[g])){var v=d(r,g);try{u(t,g,v)}catch(e){}}}}return t}},function(e,t,r){"use strict";var n=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,o=function(e){var t={};return function(r){return void 0===t[r]&&(t[r]=e(r)),t[r]}}((function(e){return n.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}));t.a=o},function(e,t,r){"use strict";r.r(t),function(e){r.d(t,"ServerStyleSheet",(function(){return He})),r.d(t,"StyleSheetConsumer",(function(){return re})),r.d(t,"StyleSheetContext",(function(){return te})),r.d(t,"StyleSheetManager",(function(){return ce})),r.d(t,"ThemeConsumer",(function(){return Re})),r.d(t,"ThemeContext",(function(){return Te})),r.d(t,"ThemeProvider",(function(){return ze})),r.d(t,"__PRIVATE__",(function(){return Ue})),r.d(t,"createGlobalStyle",(function(){return Be})),r.d(t,"css",(function(){return ye})),r.d(t,"isStyledComponent",(function(){return w})),r.d(t,"keyframes",(function(){return Ve})),r.d(t,"useTheme",(function(){return We})),r.d(t,"version",(function(){return qe})),r.d(t,"withTheme",(function(){return Ge}));var n=r(1),o=r(0),i=r.n(o),a=r(7),s=r.n(a),c=r(8),u=r(9),l=r(5),f=r(4),d=r.n(f);function p(){return(p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var h=function(e,t){for(var r=[e[0]],n=0,o=t.length;n<o;n+=1)r.push(t[n],e[n+1]);return r},m=function(e){return null!==e&&"object"==typeof e&&"[object Object]"===(e.toString?e.toString():Object.prototype.toString.call(e))&&!Object(n.typeOf)(e)},y=Object.freeze([]),g=Object.freeze({});function v(e){return"function"==typeof e}function b(e){return e.displayName||e.name||"Component"}function w(e){return e&&"string"==typeof e.styledComponentId}var S=void 0!==e&&(e.env.REACT_APP_SC_ATTR||e.env.SC_ATTR)||"data-styled",x="data-styled-version",k="5.1.0",C="undefined"!=typeof window&&"HTMLElement"in window,O="boolean"==typeof SC_DISABLE_SPEEDY&&SC_DISABLE_SPEEDY||void 0!==e&&(e.env.REACT_APP_SC_DISABLE_SPEEDY||e.env.SC_DISABLE_SPEEDY)||!1,j={},A=function(){return r.nc};function _(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];throw new Error("An error occurred. See https://github.com/styled-components/styled-components/blob/master/packages/styled-components/src/utils/errors.md#"+e+" for more information."+(r.length>0?" Additional arguments: "+r.join(", "):""))}var P=function(e){var t=document.head,r=e||t,n=document.createElement("style"),o=function(e){for(var t=e.childNodes,r=t.length;r>=0;r--){var n=t[r];if(n&&1===n.nodeType&&n.hasAttribute(S))return n}}(r),i=void 0!==o?o.nextSibling:null;n.setAttribute(S,"active"),n.setAttribute(x,k);var a=A();return a&&n.setAttribute("nonce",a),r.insertBefore(n,i),n},E=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,r=0,n=t.length;r<n;r++){var o=t[r];if(o.ownerNode===e)return o}_(17)},I=function(){function e(e){var t=this.element=P(e);t.appendChild(document.createTextNode("")),this.sheet=E(t),this.length=0}var t=e.prototype;return t.insertRule=function(e,t){try{return this.sheet.insertRule(t,e),this.length++,!0}catch(e){return!1}},t.deleteRule=function(e){this.sheet.deleteRule(e),this.length--},t.getRule=function(e){var t=this.sheet.cssRules[e];return void 0!==t&&"string"==typeof t.cssText?t.cssText:""},e}(),M=function(){function e(e){var t=this.element=P(e);this.nodes=t.childNodes,this.length=0}var t=e.prototype;return t.insertRule=function(e,t){if(e<=this.length&&e>=0){var r=document.createTextNode(t),n=this.nodes[e];return this.element.insertBefore(r,n||null),this.length++,!0}return!1},t.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},t.getRule=function(e){return e<this.length?this.nodes[e].textContent:""},e}(),T=function(){function e(e){this.rules=[],this.length=0}var t=e.prototype;return t.insertRule=function(e,t){return e<=this.length&&(this.rules.splice(e,0,t),this.length++,!0)},t.deleteRule=function(e){this.rules.splice(e,1),this.length--},t.getRule=function(e){return e<this.length?this.rules[e]:""},e}(),R=512,z=function(){function e(e){this.groupSizes=new Uint32Array(R),this.length=R,this.tag=e}var t=e.prototype;return t.indexOfGroup=function(e){for(var t=0,r=0;r<e;r++)t+=this.groupSizes[r];return t},t.insertRules=function(e,t){if(e>=this.groupSizes.length){for(var r=this.groupSizes,n=r.length,o=n;e>=o;)(o<<=1)<0&&_(16,""+e);this.groupSizes=new Uint32Array(o),this.groupSizes.set(r),this.length=o;for(var i=n;i<o;i++)this.groupSizes[i]=0}for(var a=this.indexOfGroup(e+1),s=0,c=t.length;s<c;s++)this.tag.insertRule(a,t[s])&&(this.groupSizes[e]++,a++)},t.clearGroup=function(e){if(e<this.length){var t=this.groupSizes[e],r=this.indexOfGroup(e),n=r+t;this.groupSizes[e]=0;for(var o=r;o<n;o++)this.tag.deleteRule(r)}},t.getGroup=function(e){var t="";if(e>=this.length||0===this.groupSizes[e])return t;for(var r=this.groupSizes[e],n=this.indexOfGroup(e),o=n+r,i=n;i<o;i++)t+=this.tag.getRule(i)+"/*!sc*/\n";return t},e}(),$=new Map,D=new Map,N=1,L=function(e){if($.has(e))return $.get(e);var t=N++;return $.set(e,t),D.set(t,e),t},F=function(e){return D.get(e)},B=function(e,t){t>=N&&(N=t+1),$.set(e,t),D.set(t,e)},V="style["+S+"]["+x+'="'+k+'"]',H=new RegExp("^"+S+'\\.g(\\d+)\\[id="([\\w\\d-]+)"\\].*?"([^"]*)'),G=function(e,t,r){for(var n,o=r.split(","),i=0,a=o.length;i<a;i++)(n=o[i])&&e.registerName(t,n)},W=function(e,t){for(var r=t.innerHTML.split("/*!sc*/\n"),n=[],o=0,i=r.length;o<i;o++){var a=r[o].trim();if(a){var s=a.match(H);if(s){var c=0|parseInt(s[1],10),u=s[2];0!==c&&(B(u,c),G(e,u,s[3]),e.getTag().insertRules(c,n)),n.length=0}else n.push(a)}}},U=function(e){for(var t=document.querySelectorAll(V),r=0,n=t.length;r<n;r++){var o=t[r];o&&"active"!==o.getAttribute(S)&&(W(e,o),o.parentNode&&o.parentNode.removeChild(o))}},q=C,Z={isServer:!C,useCSSOMInjection:!O},J=function(){function e(e,t,r){void 0===e&&(e=Z),void 0===t&&(t={}),this.options=p({},Z,{},e),this.gs=t,this.names=new Map(r),!this.options.isServer&&C&&q&&(q=!1,U(this))}e.registerId=function(e){return L(e)};var t=e.prototype;return t.reconstructWithOptions=function(t){return new e(p({},this.options,{},t),this.gs,this.names)},t.allocateGSInstance=function(e){return this.gs[e]=(this.gs[e]||0)+1},t.getTag=function(){return this.tag||(this.tag=(t=this.options,r=t.isServer,n=t.useCSSOMInjection,o=t.target,e=r?new T(o):n?new I(o):new M(o),new z(e)));var e,t,r,n,o},t.hasNameForId=function(e,t){return this.names.has(e)&&this.names.get(e).has(t)},t.registerName=function(e,t){if(L(e),this.names.has(e))this.names.get(e).add(t);else{var r=new Set;r.add(t),this.names.set(e,r)}},t.insertRules=function(e,t,r){this.registerName(e,t),this.getTag().insertRules(L(e),r)},t.clearNames=function(e){this.names.has(e)&&this.names.get(e).clear()},t.clearRules=function(e){this.getTag().clearGroup(L(e)),this.clearNames(e)},t.clearTag=function(){this.tag=void 0},t.toString=function(){return function(e){for(var t=e.getTag(),r=t.length,n="",o=0;o<r;o++){var i=F(o);if(void 0!==i){var a=e.names.get(i),s=t.getGroup(o);if(void 0!==a&&0!==s.length){var c=S+".g"+o+'[id="'+i+'"]',u="";void 0!==a&&a.forEach((function(e){e.length>0&&(u+=e+",")})),n+=""+s+c+'{content:"'+u+'"}/*!sc*/\n'}}}return n}(this)},e}(),Y=5381,X=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},Q=function(e){return X(Y,e)};var K=/^\s*\/\/.*$/gm;function ee(e){var t,r,n,o=void 0===e?g:e,i=o.options,a=void 0===i?g:i,s=o.plugins,u=void 0===s?y:s,l=new c.a(a),f=[],d=function(e){function t(t){if(t)try{e(t+"}")}catch(e){}}return function(r,n,o,i,a,s,c,u,l,f){switch(r){case 1:if(0===l&&64===n.charCodeAt(0))return e(n+";"),"";break;case 2:if(0===u)return n+"/*|*/";break;case 3:switch(u){case 102:case 112:return e(o[0]+n),"";default:return n+(0===f?"/*|*/":"")}case-2:n.split("/*|*/}").forEach(t)}}}((function(e){f.push(e)})),p=function(e,n,o){return n>0&&-1!==o.slice(0,n).indexOf(r)&&o.slice(n-r.length,n)!==r?"."+t:e};function h(e,o,i,a){void 0===a&&(a="&");var s=e.replace(K,""),c=o&&i?i+" "+o+" { "+s+" }":s;return t=a,r=o,n=new RegExp("\\"+r+"\\b","g"),l(i||!o?"":o,c)}return l.use([].concat(u,[function(e,t,o){2===e&&o.length&&o[0].lastIndexOf(r)>0&&(o[0]=o[0].replace(n,p))},d,function(e){if(-2===e){var t=f;return f=[],t}}])),h.hash=u.length?u.reduce((function(e,t){return t.name||_(15),X(e,t.name)}),Y).toString():"",h}var te=i.a.createContext(),re=te.Consumer,ne=i.a.createContext(),oe=(ne.Consumer,new J),ie=ee();function ae(){return Object(o.useContext)(te)||oe}function se(){return Object(o.useContext)(ne)||ie}function ce(e){var t=Object(o.useState)(e.stylisPlugins),r=t[0],n=t[1],a=ae(),c=Object(o.useMemo)((function(){var t=a;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target})),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t}),[e.disableCSSOMInjection,e.sheet,e.target]),u=Object(o.useMemo)((function(){return ee({options:{prefix:!e.disableVendorPrefixes},plugins:r})}),[e.disableVendorPrefixes,r]);return Object(o.useEffect)((function(){s()(r,e.stylisPlugins)||n(e.stylisPlugins)}),[e.stylisPlugins]),i.a.createElement(te.Provider,{value:c},i.a.createElement(ne.Provider,{value:u},e.children))}var ue=function(){function e(e,t){var r=this;this.inject=function(e){e.hasNameForId(r.id,r.name)||e.insertRules(r.id,r.name,ie.apply(void 0,r.stringifyArgs))},this.toString=function(){return _(12,String(r.name))},this.name=e,this.id="sc-keyframes-"+e,this.stringifyArgs=t}return e.prototype.getName=function(){return this.name},e}(),le=/([A-Z])/g,fe=/^ms-/;function de(e){return e.replace(le,"-$1").toLowerCase().replace(fe,"-ms-")}var pe=function(e){return null==e||!1===e||""===e},he=function e(t,r){var n=[];return Object.keys(t).forEach((function(r){if(!pe(t[r])){if(m(t[r]))return n.push.apply(n,e(t[r],r)),n;if(v(t[r]))return n.push(de(r)+":",t[r],";"),n;n.push(de(r)+": "+(o=r,null==(i=t[r])||"boolean"==typeof i||""===i?"":"number"!=typeof i||0===i||o in u.a?String(i).trim():i+"px")+";")}var o,i;return n})),r?[r+" {"].concat(n,["}"]):n};function me(e,t,r){if(Array.isArray(e)){for(var n,o=[],i=0,a=e.length;i<a;i+=1)""!==(n=me(e[i],t,r))&&(Array.isArray(n)?o.push.apply(o,n):o.push(n));return o}return pe(e)?"":w(e)?"."+e.styledComponentId:v(e)?"function"!=typeof(s=e)||s.prototype&&s.prototype.isReactComponent||!t?e:me(e(t),t,r):e instanceof ue?r?(e.inject(r),e.getName()):e:m(e)?he(e):e.toString();var s}function ye(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return v(e)||m(e)?me(h(y,[e].concat(r))):0===r.length&&1===e.length&&"string"==typeof e[0]?e:me(h(e,r))}var ge=function(e){return"function"==typeof e||"object"==typeof e&&null!==e&&!Array.isArray(e)},ve=function(e){return"__proto__"!==e&&"constructor"!==e&&"prototype"!==e};function be(e,t,r){var n=e[r];ge(t)&&ge(n)?we(n,t):e[r]=t}function we(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];for(var o=0,i=r;o<i.length;o++){var a=i[o];if(ge(a))for(var s in a)ve(s)&&be(e,a[s],s)}return e}var Se=/(a)(d)/gi,xe=52,ke=function(e){return String.fromCharCode(e+(e>25?39:97))};function Ce(e){var t,r="";for(t=Math.abs(e);t>xe;t=t/xe|0)r=ke(t%xe)+r;return(ke(t%xe)+r).replace(Se,"$1-$2")}function Oe(e){for(var t=0;t<e.length;t+=1){var r=e[t];if(v(r)&&!w(r))return!1}return!0}var je=function(){function e(e,t){this.rules=e,this.staticRulesId="",this.isStatic=Oe(e),this.componentId=t,this.baseHash=Q(t),J.registerId(t)}return e.prototype.generateAndInjectStyles=function(e,t,r){var n=this.componentId;if(this.isStatic&&!r.hash){if(this.staticRulesId&&t.hasNameForId(n,this.staticRulesId))return this.staticRulesId;var o=me(this.rules,e,t).join(""),i=Ce(X(this.baseHash,o.length)>>>0);if(!t.hasNameForId(n,i)){var a=r(o,"."+i,void 0,n);t.insertRules(n,i,a)}return this.staticRulesId=i,i}for(var s=this.rules.length,c=X(this.baseHash,r.hash),u="",l=0;l<s;l++){var f=this.rules[l];if("string"==typeof f)u+=f;else{var d=me(f,e,t),p=Array.isArray(d)?d.join(""):d;c=X(c,p+l),u+=p}}var h=Ce(c>>>0);if(!t.hasNameForId(n,h)){var m=r(u,"."+h,void 0,n);t.insertRules(n,h,m)}return h},e}(),Ae=(new Set,function(e,t,r){return void 0===r&&(r=g),e.theme!==r.theme&&e.theme||t||r.theme}),_e=/[[\].#*$><+~=|^:(),"'`-]+/g,Pe=/(^-|-$)/g;function Ee(e){return e.replace(_e,"-").replace(Pe,"")}function Ie(e){return"string"==typeof e&&!0}var Me=function(e){return Ce(Q(e)>>>0)};var Te=i.a.createContext(),Re=Te.Consumer;function ze(e){var t=Object(o.useContext)(Te),r=Object(o.useMemo)((function(){return function(e,t){return e?v(e)?e(t):Array.isArray(e)||"object"!=typeof e?_(8):t?p({},t,{},e):e:_(14)}(e.theme,t)}),[e.theme,t]);return e.children?i.a.createElement(Te.Provider,{value:r},e.children):null}var $e={};function De(e,t,r){var n=e.attrs,i=e.componentStyle,a=e.defaultProps,s=e.foldedComponentIds,c=e.shouldForwardProp,u=e.styledComponentId,f=e.target;Object(o.useDebugValue)(u);var d=function(e,t,r){void 0===e&&(e=g);var n=p({},t,{theme:e}),o={};return r.forEach((function(e){var t,r,i,a=e;for(t in v(a)&&(a=a(n)),a)n[t]=o[t]="className"===t?(r=o[t],i=a[t],r&&i?r+" "+i:r||i):a[t]})),[n,o]}(Ae(t,Object(o.useContext)(Te),a)||g,t,n),h=d[0],m=d[1],y=function(e,t,r,n){var i=ae(),a=se(),s=e.isStatic&&!t?e.generateAndInjectStyles(g,i,a):e.generateAndInjectStyles(r,i,a);return Object(o.useDebugValue)(s),s}(i,n.length>0,h),b=r,w=m.$as||t.$as||m.as||t.as||f,S=Ie(w),x=m!==t?p({},t,{},m):t,k=c||S&&l.a,C={};for(var O in x)"$"!==O[0]&&"as"!==O&&("forwardedAs"===O?C.as=x[O]:k&&!k(O,l.a)||(C[O]=x[O]));return t.style&&m.style!==t.style&&(C.style=p({},t.style,{},m.style)),C.className=Array.prototype.concat(s,u,y!==u?y:null,t.className,m.className).filter(Boolean).join(" "),C.ref=b,Object(o.createElement)(w,C)}function Ne(e,t,r){var n=w(e),o=!Ie(e),a=t.displayName,s=void 0===a?function(e){return Ie(e)?"styled."+e:"Styled("+b(e)+")"}(e):a,c=t.componentId,u=void 0===c?function(e,t){var r="string"!=typeof e?"sc":Ee(e);$e[r]=($e[r]||0)+1;var n=r+"-"+Me(r+$e[r]);return t?t+"-"+n:n}(t.displayName,t.parentComponentId):c,l=t.attrs,f=void 0===l?y:l,h=t.displayName&&t.componentId?Ee(t.displayName)+"-"+t.componentId:t.componentId||u,m=n&&e.attrs?Array.prototype.concat(e.attrs,f).filter(Boolean):f,g=t.shouldForwardProp;n&&e.shouldForwardProp&&(g=g?function(r,n){return e.shouldForwardProp(r,n)&&t.shouldForwardProp(r,n)}:e.shouldForwardProp);var v,S=new je(n?e.componentStyle.rules.concat(r):r,h),x=function(e,t){return De(v,e,t)};return x.displayName=s,(v=i.a.forwardRef(x)).attrs=m,v.componentStyle=S,v.displayName=s,v.shouldForwardProp=g,v.foldedComponentIds=n?Array.prototype.concat(e.foldedComponentIds,e.styledComponentId):y,v.styledComponentId=h,v.target=n?e.target:e,v.withComponent=function(e){var n=t.componentId,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(t,["componentId"]),i=n&&n+"-"+(Ie(e)?e:Ee(b(e)));return Ne(e,p({},o,{attrs:m,componentId:i}),r)},Object.defineProperty(v,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(t){this._foldedDefaultProps=n?we({},e.defaultProps,t):t}}),v.toString=function(){return"."+v.styledComponentId},o&&d()(v,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,self:!0,styledComponentId:!0,target:!0,withComponent:!0}),v}var Le=function(e){return function e(t,r,o){if(void 0===o&&(o=g),!Object(n.isValidElementType)(r))return _(1,String(r));var i=function(){return t(r,o,ye.apply(void 0,arguments))};return i.withConfig=function(n){return e(t,r,p({},o,{},n))},i.attrs=function(n){return e(t,r,p({},o,{attrs:Array.prototype.concat(o.attrs,n).filter(Boolean)}))},i}(Ne,e)};["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"].forEach((function(e){Le[e]=Le(e)}));var Fe=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Oe(e)}var t=e.prototype;return t.createStyles=function(e,t,r,n){var o=n(me(this.rules,t,r).join(""),""),i=this.componentId+e;r.insertRules(i,i,o)},t.removeStyles=function(e,t){t.clearRules(this.componentId+e)},t.renderStyles=function(e,t,r,n){J.registerId(this.componentId+e),this.removeStyles(e,r),this.createStyles(e,t,r,n)},e}();function Be(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var a=ye.apply(void 0,[e].concat(r)),s="sc-global-"+Me(JSON.stringify(a)),c=new Fe(a,s);return i.a.memo((function e(t){var r=ae(),n=se(),i=Object(o.useContext)(Te),a=Object(o.useRef)(null);null===a.current&&(a.current=r.allocateGSInstance(s));var u=a.current;if(c.isStatic)c.renderStyles(u,j,r,n);else{var l=p({},t,{theme:Ae(t,i,e.defaultProps)});c.renderStyles(u,l,r,n)}return Object(o.useEffect)((function(){return function(){return c.removeStyles(u,r)}}),y),null}))}function Ve(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var o=ye.apply(void 0,[e].concat(r)).join(""),i=Me(o);return new ue(i,[o,i,"@keyframes"])}var He=function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),r=A();return"<style "+[r&&'nonce="'+r+'"',S+'="true"',x+'="'+k+'"'].filter(Boolean).join(" ")+">"+t+"</style>"},this.getStyleTags=function(){return e.sealed?_(2):e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)return _(2);var r=((t={})[S]="",t[x]=k,t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),n=A();return n&&(r.nonce=n),[i.a.createElement("style",p({},r,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new J({isServer:!0}),this.sealed=!1}var t=e.prototype;return t.collectStyles=function(e){return this.sealed?_(2):i.a.createElement(ce,{sheet:this.instance},e)},t.interleaveWithNodeStream=function(e){return _(3)},e}(),Ge=function(e){var t=i.a.forwardRef((function(t,r){var n=Object(o.useContext)(Te),a=e.defaultProps,s=Ae(t,n,a);return i.a.createElement(e,p({},t,{theme:s,ref:r}))}));return d()(t,e),t.displayName="WithTheme("+b(e)+")",t},We=function(){return Object(o.useContext)(Te)},Ue={StyleSheet:J,masterSheet:oe},qe="5.1.0";t.default=Le}.call(this,r(22))},function(e,t){e.exports=function(e,t,r,n){var o=r?r.call(n,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c<i.length;c++){var u=i[c];if(!s(u))return!1;var l=e[u],f=t[u];if(!1===(o=r?r.call(n,l,f,u):void 0)||void 0===o&&l!==f)return!1}return!0}},function(e,t,r){"use strict";t.a=function(e){function t(e,t,n){var o=t.trim().split(h);t=o;var i=o.length,a=e.length;switch(a){case 0:case 1:var s=0;for(e=0===a?"":e[0]+" ";s<i;++s)t[s]=r(e,t[s],n).trim();break;default:var c=s=0;for(t=[];s<i;++s)for(var u=0;u<a;++u)t[c++]=r(e[u]+" ",o[s],n).trim()}return t}function r(e,t,r){var n=t.charCodeAt(0);switch(33>n&&(n=(t=t.trim()).charCodeAt(0)),n){case 38:return t.replace(m,"$1"+e.trim());case 58:return e.trim()+t.replace(m,"$1"+e.trim());default:if(0<1*r&&0<t.indexOf("\f"))return t.replace(m,(58===e.charCodeAt(0)?"":"$1")+e.trim())}return e+t}function n(e,t,r,i){var a=e+";",s=2*t+3*r+4*i;if(944===s){e=a.indexOf(":",9)+1;var c=a.substring(e,a.length-1).trim();return c=a.substring(0,e).trim()+c+";",1===P||2===P&&o(c,1)?"-webkit-"+c+c:c}if(0===P||2===P&&!o(a,1))return a;switch(s){case 1015:return 97===a.charCodeAt(10)?"-webkit-"+a+a:a;case 951:return 116===a.charCodeAt(3)?"-webkit-"+a+a:a;case 963:return 110===a.charCodeAt(5)?"-webkit-"+a+a:a;case 1009:if(100!==a.charCodeAt(4))break;case 969:case 942:return"-webkit-"+a+a;case 978:return"-webkit-"+a+"-moz-"+a+a;case 1019:case 983:return"-webkit-"+a+"-moz-"+a+"-ms-"+a+a;case 883:if(45===a.charCodeAt(8))return"-webkit-"+a+a;if(0<a.indexOf("image-set(",11))return a.replace(O,"$1-webkit-$2")+a;break;case 932:if(45===a.charCodeAt(4))switch(a.charCodeAt(5)){case 103:return"-webkit-box-"+a.replace("-grow","")+"-webkit-"+a+"-ms-"+a.replace("grow","positive")+a;case 115:return"-webkit-"+a+"-ms-"+a.replace("shrink","negative")+a;case 98:return"-webkit-"+a+"-ms-"+a.replace("basis","preferred-size")+a}return"-webkit-"+a+"-ms-"+a+a;case 964:return"-webkit-"+a+"-ms-flex-"+a+a;case 1023:if(99!==a.charCodeAt(8))break;return"-webkit-box-pack"+(c=a.substring(a.indexOf(":",15)).replace("flex-","").replace("space-between","justify"))+"-webkit-"+a+"-ms-flex-pack"+c+a;case 1005:return d.test(a)?a.replace(f,":-webkit-")+a.replace(f,":-moz-")+a:a;case 1e3:switch(t=(c=a.substring(13).trim()).indexOf("-")+1,c.charCodeAt(0)+c.charCodeAt(t)){case 226:c=a.replace(b,"tb");break;case 232:c=a.replace(b,"tb-rl");break;case 220:c=a.replace(b,"lr");break;default:return a}return"-webkit-"+a+"-ms-"+c+a;case 1017:if(-1===a.indexOf("sticky",9))break;case 975:switch(t=(a=e).length-10,s=(c=(33===a.charCodeAt(t)?a.substring(0,t):a).substring(e.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|c.charCodeAt(7))){case 203:if(111>c.charCodeAt(8))break;case 115:a=a.replace(c,"-webkit-"+c)+";"+a;break;case 207:case 102:a=a.replace(c,"-webkit-"+(102<s?"inline-":"")+"box")+";"+a.replace(c,"-webkit-"+c)+";"+a.replace(c,"-ms-"+c+"box")+";"+a}return a+";";case 938:if(45===a.charCodeAt(5))switch(a.charCodeAt(6)){case 105:return c=a.replace("-items",""),"-webkit-"+a+"-webkit-box-"+c+"-ms-flex-"+c+a;case 115:return"-webkit-"+a+"-ms-flex-item-"+a.replace(x,"")+a;default:return"-webkit-"+a+"-ms-flex-line-pack"+a.replace("align-content","").replace(x,"")+a}break;case 973:case 989:if(45!==a.charCodeAt(3)||122===a.charCodeAt(4))break;case 931:case 953:if(!0===C.test(e))return 115===(c=e.substring(e.indexOf(":")+1)).charCodeAt(0)?n(e.replace("stretch","fill-available"),t,r,i).replace(":fill-available",":stretch"):a.replace(c,"-webkit-"+c)+a.replace(c,"-moz-"+c.replace("fill-",""))+a;break;case 962:if(a="-webkit-"+a+(102===a.charCodeAt(5)?"-ms-"+a:"")+a,211===r+i&&105===a.charCodeAt(13)&&0<a.indexOf("transform",10))return a.substring(0,a.indexOf(";",27)+1).replace(p,"$1-webkit-$2")+a}return a}function o(e,t){var r=e.indexOf(1===t?":":"{"),n=e.substring(0,3!==t?r:10);return r=e.substring(r+1,e.length-1),T(2!==t?n:n.replace(k,"$1"),r,t)}function i(e,t){var r=n(t,t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2));return r!==t+";"?r.replace(S," or ($1)").substring(4):"("+t+")"}function a(e,t,r,n,o,i,a,s,u,l){for(var f,d=0,p=t;d<M;++d)switch(f=I[d].call(c,e,p,r,n,o,i,a,s,u,l)){case void 0:case!1:case!0:case null:break;default:p=f}if(p!==t)return p}function s(e){return void 0!==(e=e.prefix)&&(T=null,e?"function"!=typeof e?P=1:(P=2,T=e):P=0),s}function c(e,r){var s=e;if(33>s.charCodeAt(0)&&(s=s.trim()),s=[s],0<M){var c=a(-1,r,s,s,A,j,0,0,0,0);void 0!==c&&"string"==typeof c&&(r=c)}var f=function e(r,s,c,f,d){for(var p,h,m,b,S,x=0,k=0,C=0,O=0,I=0,T=0,z=m=p=0,$=0,D=0,N=0,L=0,F=c.length,B=F-1,V="",H="",G="",W="";$<F;){if(h=c.charCodeAt($),$===B&&0!==k+O+C+x&&(0!==k&&(h=47===k?10:47),O=C=x=0,F++,B++),0===k+O+C+x){if($===B&&(0<D&&(V=V.replace(l,"")),0<V.trim().length)){switch(h){case 32:case 9:case 59:case 13:case 10:break;default:V+=c.charAt($)}h=59}switch(h){case 123:for(p=(V=V.trim()).charCodeAt(0),m=1,L=++$;$<F;){switch(h=c.charCodeAt($)){case 123:m++;break;case 125:m--;break;case 47:switch(h=c.charCodeAt($+1)){case 42:case 47:e:{for(z=$+1;z<B;++z)switch(c.charCodeAt(z)){case 47:if(42===h&&42===c.charCodeAt(z-1)&&$+2!==z){$=z+1;break e}break;case 10:if(47===h){$=z+1;break e}}$=z}}break;case 91:h++;case 40:h++;case 34:case 39:for(;$++<B&&c.charCodeAt($)!==h;);}if(0===m)break;$++}switch(m=c.substring(L,$),0===p&&(p=(V=V.replace(u,"").trim()).charCodeAt(0)),p){case 64:switch(0<D&&(V=V.replace(l,"")),h=V.charCodeAt(1)){case 100:case 109:case 115:case 45:D=s;break;default:D=E}if(L=(m=e(s,D,m,h,d+1)).length,0<M&&(S=a(3,m,D=t(E,V,N),s,A,j,L,h,d,f),V=D.join(""),void 0!==S&&0===(L=(m=S.trim()).length)&&(h=0,m="")),0<L)switch(h){case 115:V=V.replace(w,i);case 100:case 109:case 45:m=V+"{"+m+"}";break;case 107:m=(V=V.replace(y,"$1 $2"))+"{"+m+"}",m=1===P||2===P&&o("@"+m,3)?"@-webkit-"+m+"@"+m:"@"+m;break;default:m=V+m,112===f&&(H+=m,m="")}else m="";break;default:m=e(s,t(s,V,N),m,f,d+1)}G+=m,m=N=D=z=p=0,V="",h=c.charCodeAt(++$);break;case 125:case 59:if(1<(L=(V=(0<D?V.replace(l,""):V).trim()).length))switch(0===z&&(p=V.charCodeAt(0),45===p||96<p&&123>p)&&(L=(V=V.replace(" ",":")).length),0<M&&void 0!==(S=a(1,V,s,r,A,j,H.length,f,d,f))&&0===(L=(V=S.trim()).length)&&(V="\0\0"),p=V.charCodeAt(0),h=V.charCodeAt(1),p){case 0:break;case 64:if(105===h||99===h){W+=V+c.charAt($);break}default:58!==V.charCodeAt(L-1)&&(H+=n(V,p,h,V.charCodeAt(2)))}N=D=z=p=0,V="",h=c.charCodeAt(++$)}}switch(h){case 13:case 10:47===k?k=0:0===1+p&&107!==f&&0<V.length&&(D=1,V+="\0"),0<M*R&&a(0,V,s,r,A,j,H.length,f,d,f),j=1,A++;break;case 59:case 125:if(0===k+O+C+x){j++;break}default:switch(j++,b=c.charAt($),h){case 9:case 32:if(0===O+x+k)switch(I){case 44:case 58:case 9:case 32:b="";break;default:32!==h&&(b=" ")}break;case 0:b="\\0";break;case 12:b="\\f";break;case 11:b="\\v";break;case 38:0===O+k+x&&(D=N=1,b="\f"+b);break;case 108:if(0===O+k+x+_&&0<z)switch($-z){case 2:112===I&&58===c.charCodeAt($-3)&&(_=I);case 8:111===T&&(_=T)}break;case 58:0===O+k+x&&(z=$);break;case 44:0===k+C+O+x&&(D=1,b+="\r");break;case 34:case 39:0===k&&(O=O===h?0:0===O?h:O);break;case 91:0===O+k+C&&x++;break;case 93:0===O+k+C&&x--;break;case 41:0===O+k+x&&C--;break;case 40:if(0===O+k+x){if(0===p)switch(2*I+3*T){case 533:break;default:p=1}C++}break;case 64:0===k+C+O+x+z+m&&(m=1);break;case 42:case 47:if(!(0<O+x+C))switch(k){case 0:switch(2*h+3*c.charCodeAt($+1)){case 235:k=47;break;case 220:L=$,k=42}break;case 42:47===h&&42===I&&L+2!==$&&(33===c.charCodeAt(L+2)&&(H+=c.substring(L,$+1)),b="",k=0)}}0===k&&(V+=b)}T=I,I=h,$++}if(0<(L=H.length)){if(D=s,0<M&&(void 0!==(S=a(2,H,D,r,A,j,L,f,d,f))&&0===(H=S).length))return W+H+G;if(H=D.join(",")+"{"+H+"}",0!=P*_){switch(2!==P||o(H,2)||(_=0),_){case 111:H=H.replace(v,":-moz-$1")+H;break;case 112:H=H.replace(g,"::-webkit-input-$1")+H.replace(g,"::-moz-$1")+H.replace(g,":-ms-input-$1")+H}_=0}}return W+H+G}(E,s,r,0,0);return 0<M&&(void 0!==(c=a(-2,f,s,s,A,j,f.length,0,0,0))&&(f=c)),"",_=0,j=A=1,f}var u=/^\0+/g,l=/[\0\r\f]/g,f=/: */g,d=/zoo|gra/,p=/([,: ])(transform)/g,h=/,\r+?/g,m=/([\t\r\n ])*\f?&/g,y=/@(k\w+)\s*(\S*)\s*/,g=/::(place)/g,v=/:(read-only)/g,b=/[svh]\w+-[tblr]{2}/,w=/\(\s*(.*)\s*\)/g,S=/([\s\S]*?);/g,x=/-self|flex-/g,k=/[^]*?(:[rp][el]a[\w-]+)[^]*/,C=/stretch|:\s*\w+\-(?:conte|avail)/,O=/([^-])(image-set\()/,j=1,A=1,_=0,P=1,E=[],I=[],M=0,T=null,R=0;return c.use=function e(t){switch(t){case void 0:case null:M=I.length=0;break;default:if("function"==typeof t)I[M++]=t;else if("object"==typeof t)for(var r=0,n=t.length;r<n;++r)e(t[r]);else R=0|!!t}return e},c.set=s,void 0!==e&&s(e),c}},function(e,t,r){"use strict";t.a={animationIterationCount: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,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(e,t,r){"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&o(t,e,r);return i(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var c=a(r(0)),u=s(r(11)),l=s(r(2)),f=function(e){c.useEffect((function(){e.stories.forEach((function(e,t){var r=[],o="object"!==n(e)||!e.url||"image"!==e.type&&e.type?"string"==typeof e?e:null:e.url;o&&(r[t]=new Image,r[t].src=o)}))}),[e.stories]);var t={stories:e.stories.map((function(e){return"string"==typeof e?{url:e}:e})),width:e.width,height:e.height,loader:e.loader,header:e.header,storyStyles:e.storyStyles,loop:e.loop,defaultInterval:e.defaultInterval,isPaused:e.isPaused,currentIndex:e.currentIndex,onStoryStart:e.onStoryStart,onStoryEnd:e.onStoryEnd,onAllStoriesEnd:e.onAllStoriesEnd};return c.default.createElement(l.default.Provider,{value:t},c.default.createElement(u.default,null))};f.defaultProps={width:360,height:640,defaultInterval:4e3},t.default=f},function(e,t,r){"use strict";function n(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=[],n=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){o=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(o)throw i}}return r}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&o(t,e,r);return i(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var c=a(r(0)),u=s(r(2)),l=s(r(3)),f=s(r(12)),d=s(r(19));t.default=function(){var e=n(c.useState(0),2),t=e[0],r=e[1],o=n(c.useState(!0),2),i=o[0],a=o[1],s=n(c.useState(0),2),h=s[0],m=s[1],y=n(c.useState(!0),2),g=y[0],v=y[1],b=n(c.useState(0),2),w=b[0],S=b[1],x=(c.useRef(),c.useRef()),k=c.useContext(u.default),C=k.width,O=k.height,j=k.defaultInterval,A=k.stories,_=k.loop,P=k.currentIndex,E=k.isPaused,I=k.onStoryStart,M=k.onStoryEnd,T=k.onAllStoriesEnd;c.useEffect((function(){return i||(x.current=requestAnimationFrame(R)),function(){cancelAnimationFrame(x.current)}}),[t,i]),c.useEffect((function(){m(0)}),[t,A]),c.useEffect((function(){"number"==typeof P&&(P>=0&&P<A.length?r(P):console.error("Index out of bounds. Current index was set to value more than the length of stories array.",P))}),[P]),c.useEffect((function(){"boolean"==typeof E&&a(E)}),[E]);var R=function e(){m((function(r){0===r&&z();var n=N();return r<100?new Promise((function(e){setTimeout((function(){e()}),10)})).then(e):($(),t===A.length-1&&D(),B()),r+100/(n/10)}))},z=function(){I&&I(t,A[t])},$=function(){M&&M(t,A[t])},D=function(){T&&T()},N=function(){return"video"===A[t].type?w:"number"==typeof A[t].duration?A[t].duration:j},L=function(e,t,r){a("pause"===e),"pause"===e?a(!0):"play"===e?a(!1):"prev"==e?F():"next"==e?B():"setcount"==e&&m(t),v(!!r)},F=function(){t>0&&(r(t-1),m(0))},B=function(){_?V():H()},V=function(){r((t+1)%A.length),m(0)},H=function(){t<A.length-1&&(r(t+1),m(0))};return c.default.createElement("div",{style:Object.assign(Object.assign({},p.container),{width:C,height:O})},c.default.createElement(l.default.Provider,{value:{bufferAction:g,videoDuration:w,numArray:A.map((function(e,t){return t})),currentStory:A[t],currentId:t,count:h,pause:i}},c.default.createElement(d.default,null)),c.default.createElement(f.default,{action:L,bufferAction:g,playState:i,story:A[t],getVideoDuration:function(e){S(1e3*e)}}))};var p={container:{display:"flex",flexDirection:"column",background:"#111",flex:"1 0 auto",position:"relative"},overlay:{position:"absolute",height:"inherit",width:"inherit",display:"flex"}}},function(e,t,r){"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=[],n=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){o=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(o)throw i}}return r}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var i=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),a=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||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&i(t,e,r);return a(t,e),t},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=s(r(0)),l=c(r(13)),f=c(r(14)),d=c(r(15)),p=c(r(2)),h={story:{display:"flex",position:"relative",overflow:"hidden"},storyContent:{width:"auto",maxWidth:"100%",maxHeight:"100%",margin:"auto"}};t.default=function(e){var t=o(u.useState(!1),2),r=t[0],i=t[1],a=o(u.useState(!1),2),s=a[0],c=a[1],m=u.useContext(p.default),y=m.width,g=m.height,v=m.loader,b=m.header,w=m.storyStyles;u.useEffect((function(){c(!1),"object"===n(e.story)&&e.story.content?(i(!0),e.action("pause",!0)):(i(!1),e.action("pause",!0),S.current&&S.current.addEventListener("waiting",(function(){e.action("pause",!0)})),S.current&&S.current.addEventListener("playing",(function(){e.action("play",!0)})))}),[e.story]);var S=u.useRef(null);u.useEffect((function(){S.current&&(e.playState?S.current.pause():S.current.play().catch((function(e){return console.log(e)})))}),[e.playState]);var x=function(){try{i(!0),e.action("play",!0)}catch(e){console.log(e)}},k=function(){try{e.getVideoDuration(S.current.duration),S.current&&S.current.play().then((function(){x()})).catch((function(t){e.action("pause"),console.log(t)}))}catch(e){console.log(e)}},C="object"===n(e.story)&&e.story.header;return u.default.createElement("div",{style:Object.assign(Object.assign({},h.story),{width:y,height:g})},function(){var t="object"===n(e.story)&&e.story.content;if(t)return u.default.createElement(t,{action:e.action,isPaused:e.playState});var r="object"===n(e.story)?e.story.url:e.story,o="object"===n(e.story)&&e.story.styles||w||h.storyContent,i="object"===n(e.story)&&"video"===e.story.type?"video":"image";return"image"===i?u.default.createElement("img",{style:o,src:r,onLoad:x}):"video"===i?u.default.createElement("video",{ref:S,style:o,src:r,controls:!1,onLoadedData:k,autoPlay:!0,playsInline:!0}):null}(),C&&u.default.createElement("div",{style:{position:"absolute",left:12,top:20,zIndex:19}},"object"===n(e.story)?b?b(e.story.header):u.default.createElement(l.default,{heading:e.story.header.heading,subheading:e.story.header.subheading,profileImage:e.story.header.profileImage}):null),!r&&u.default.createElement("div",{style:{width:y,height:g,position:"absolute",left:0,top:0,background:"rgba(0, 0, 0, 0.9)",zIndex:9,display:"flex",justifyContent:"center",alignItems:"center",color:"#ccc"}},v||u.default.createElement("div",{className:d.default.spinner})),"object"===n(e.story)&&e.story.seeMore&&u.default.createElement("div",{style:{position:"absolute",margin:"auto",bottom:s?"unset":0,zIndex:9999,width:"100%",height:s?"100%":"auto"}},u.default.createElement(f.default,{action:e.action,toggleMore:function(t){c(t),e.action(t?"pause":"play")},showContent:s,seeMoreContent:e.story.seeMore})))}},function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(0)),i={main:{display:"flex",alignItems:"center"},img:{width:40,height:40,borderRadius:40,marginRight:10,filter:"drop-shadow(0 0px 2px rgba(0, 0, 0, 0.5))",border:"2px solid rgba(255, 255, 255, 0.8)"},text:{display:"flex",flexDirection:"column",filter:"drop-shadow(0 0px 3px rgba(0, 0, 0, 0.9))"},heading:{fontSize:"1rem",color:"rgba(255, 255, 255, 0.9)",margin:0,marginBottom:2},subheading:{fontSize:"0.6rem",color:"rgba(255, 255, 255, 0.8)",margin:0}};t.default=function(e){var t=e.profileImage,r=e.heading,n=e.subheading;return o.default.createElement("div",{style:i.main},t&&o.default.createElement("img",{style:i.img,src:t}),o.default.createElement("span",{style:i.text},o.default.createElement("p",{style:i.heading},r),o.default.createElement("p",{style:i.subheading},n)))}},function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(0));t.default=function(e){var t=e.seeMoreContent;return e.showContent?o.default.createElement("div",{style:i.seeMoreExpanded},o.default.createElement(t,{close:function(){return e.toggleMore(!1)}})):o.default.createElement("div",{onClick:function(){e.toggleMore(!0)},style:i.seeMore},o.default.createElement("span",{style:i.seeMoreIcon},"⌃"),o.default.createElement("span",{style:i.seeMoreText},"See more"))};var i={seeMore:{height:"10vh",background:"linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2))",display:"flex",flexDirection:"column",width:"100%",alignItems:"center",justifyContent:"flex-end",bottom:0},seeMoreExpanded:{position:"absolute",top:0,left:0,width:"100%",height:"100%",boxSizing:"border-box",zIndex:99999},seeMoreText:{color:"white",textAlign:"center",letterSpacing:"0.1em",marginBottom:"2.2vh",textTransform:"capitalize",opacity:"1",fontSize:"0.8em",transition:"opacity 300ms ease-in-out"},seeMoreIcon:{color:"white",textAlign:"center",letterSpacing:"0.2em",marginBottom:"0.4vh",opacity:"1",filter:"drop-shadow(0 0 5px black)",textTransform:"capitalize",transition:"opacity 300ms ease-in-out"},seeMoreClose:{position:"absolute",filter:"drop-shadow(0 3px 2px #ccc)",right:"0.5rem",top:"0.5rem",fontSize:"1.5rem",opacity:"0.7",padding:"1rem"}}},function(e,t,r){var n=r(16);"string"==typeof n&&(n=[[e.i,n,""]]);var o={insert:"head",singleton:!1};r(18)(n,o);n.locals&&(e.exports=n.locals)},function(e,t,r){(t=e.exports=r(17)(!1)).push([e.i,"._1CK7FHVwhiOnuCiZJwiPq1 {\n\twidth: 40px;\n\theight: 40px;\n\tmargin: 100px auto;\n\tbackground-color: #fff;\n\n\tborder-radius: 100%;\n\t-webkit-animation: _1hEQ2VzIkTiZ-9jZoLI3JC 1s infinite ease-in-out;\n\tanimation: _1hEQ2VzIkTiZ-9jZoLI3JC 1s infinite ease-in-out;\n}\n\n@-webkit-keyframes _1hEQ2VzIkTiZ-9jZoLI3JC {\n\t0% {\n\t\t-webkit-transform: scale(0);\n\t}\n\t100% {\n\t\t-webkit-transform: scale(1);\n\t\topacity: 0;\n\t}\n}\n\n@keyframes _1hEQ2VzIkTiZ-9jZoLI3JC {\n\t0% {\n\t\t-webkit-transform: scale(0);\n\t\ttransform: scale(0);\n\t}\n\t100% {\n\t\t-webkit-transform: scale(1);\n\t\ttransform: scale(1);\n\t\topacity: 0;\n\t}\n}\n",""]),t.locals={spinner:"_1CK7FHVwhiOnuCiZJwiPq1","sk-scaleout":"_1hEQ2VzIkTiZ-9jZoLI3JC"}},function(e,t,r){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var r=function(e,t){var r=e[1]||"",n=e[3];if(!n)return r;if(t&&"function"==typeof btoa){var o=(a=n,s=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),c="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),"/*# ".concat(c," */")),i=n.sources.map((function(e){return"/*# sourceURL=".concat(n.sourceRoot).concat(e," */")}));return[r].concat(i).concat([o]).join("\n")}var a,s,c;return[r].join("\n")}(t,e);return t[2]?"@media ".concat(t[2],"{").concat(r,"}"):r})).join("")},t.i=function(e,r){"string"==typeof e&&(e=[[null,e,""]]);for(var n={},o=0;o<this.length;o++){var i=this[o][0];null!=i&&(n[i]=!0)}for(var a=0;a<e.length;a++){var s=e[a];null!=s[0]&&n[s[0]]||(r&&!s[2]?s[2]=r:r&&(s[2]="(".concat(s[2],") and (").concat(r,")")),t.push(s))}},t}},function(e,t,r){"use strict";var n,o={},i=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},a=function(){var e={};return function(t){if(void 0===e[t]){var r=document.querySelector(t);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}e[t]=r}return e[t]}}();function s(e,t){for(var r=[],n={},o=0;o<e.length;o++){var i=e[o],a=t.base?i[0]+t.base:i[0],s={css:i[1],media:i[2],sourceMap:i[3]};n[a]?n[a].parts.push(s):r.push(n[a]={id:a,parts:[s]})}return r}function c(e,t){for(var r=0;r<e.length;r++){var n=e[r],i=o[n.id],a=0;if(i){for(i.refs++;a<i.parts.length;a++)i.parts[a](n.parts[a]);for(;a<n.parts.length;a++)i.parts.push(y(n.parts[a],t))}else{for(var s=[];a<n.parts.length;a++)s.push(y(n.parts[a],t));o[n.id]={id:n.id,refs:1,parts:s}}}}function u(e){var t=document.createElement("style");if(void 0===e.attributes.nonce){var n=r.nc;n&&(e.attributes.nonce=n)}if(Object.keys(e.attributes).forEach((function(r){t.setAttribute(r,e.attributes[r])})),"function"==typeof e.insert)e.insert(t);else{var o=a(e.insert||"head");if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(t)}return t}var l,f=(l=[],function(e,t){return l[e]=t,l.filter(Boolean).join("\n")});function d(e,t,r,n){var o=r?"":n.css;if(e.styleSheet)e.styleSheet.cssText=f(t,o);else{var i=document.createTextNode(o),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(i,a[t]):e.appendChild(i)}}function p(e,t,r){var n=r.css,o=r.media,i=r.sourceMap;if(o&&e.setAttribute("media",o),i&&btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}var h=null,m=0;function y(e,t){var r,n,o;if(t.singleton){var i=m++;r=h||(h=u(t)),n=d.bind(null,r,i,!1),o=d.bind(null,r,i,!0)}else r=u(t),n=p.bind(null,r,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(r)};return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).attributes="object"==typeof t.attributes?t.attributes:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=i());var r=s(e,t);return c(r,t),function(e){for(var n=[],i=0;i<r.length;i++){var a=r[i],u=o[a.id];u&&(u.refs--,n.push(u))}e&&c(s(e,t),t);for(var l=0;l<n.length;l++){var f=n[l];if(0===f.refs){for(var d=0;d<f.parts.length;d++)f.parts[d]();delete o[f.id]}}}}},function(e,t,r){"use strict";function n(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n        display : flex;\n        justify-Content: center;\n        max-Width: 100%;\n        flex-Wrap: row;\n        position: absolute;\n        width: 44%;\n        padding: 5;\n        padding-Top: 7;\n        align-Self: center;\n        z-Index: 99;\n        /*filter: drop-shadow(0 1px 8px #222);*/\n        bottom : 1.4rem;\n        @media only screen and (max-width: 768px) {\n        width: 85%;\n        bottom : 0.65rem;\n        }\n"]);return n=function(){return e},e}var o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&o(t,e,r);return i(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var c=a(r(0)),u=s(r(20)),l=s(r(3)),f=s(r(6));t.default=function(){var e=c.useContext(l.default),t=e.numArray,r=e.currentId;return c.default.createElement(d,null,t.map((function(e){return c.default.createElement(u.default,{key:e,width:1/t.length,active:e===r?1:e<r?2:0})})))};var d=f.default.div(n())},function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=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 r in e)Object.hasOwnProperty.call(e,r)&&n(t,e,r);return o(t,e),t},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=i(r(0)),c=a(r(21)),u=a(r(3));t.default=function(e){var t=s.useContext(u.default),r=t.bufferAction,n=t.count,o=t.pause,i=e.width,a=e.active;return s.default.createElement(c.default,{width:i,pause:o,bufferAction:r},s.default.createElement("div",{style:Object.assign(Object.assign({},function(e){switch(e.active){case 2:return{width:"100%"};case 1:return{transform:"scaleX(".concat(n/100,")")};case 0:default:return{width:0}}}({active:a})),l.inner)}))};var l={inner:{background:"#fff",height:"100%",maxWidth:"100%",transformOrigin:"center left",WebkitBackfaceVisibility:"hidden",MozBackfaceVisibility:"hidden",msBackfaceVisibility:"hidden",backfaceVisibility:"hidden",WebkitPerspective:1e3,MozPerspective:1e3,msPerspective:1e3,perspective:1e3}}},function(e,t,r){"use strict";function n(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n    height: 4px;\n    @media only screen and (max-width: 768px) {\n        height: 2px;\n    }\n    max-Width: '100%';\n    background: rgba(255,255,255,0.38);\n    margin: 4px;\n    transition: 'opacity 400ms ease-in-out';\n"]);return n=function(){return e},e}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(r(0)),a=o(r(6)),s=function(e){var t=e.width;e.pause,e.bufferAction;return{width:"".concat(100*t,"%"),opacity:1}},c=a.default.div(n());t.default=function(e){return i.default.createElement(c,{style:Object.assign({},s(e))},e.children)}},function(e,t){var r,n,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===i||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:i}catch(e){r=i}try{n="function"==typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var c,u=[],l=!1,f=-1;function d(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(d);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f<t;)c&&c[f].run();f=-1,t=u.length}c=null,l=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===a||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function m(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];u.push(new h(e,t)),1!==u.length||l||s(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=m,o.addListener=m,o.once=m,o.off=m,o.removeListener=m,o.removeAllListeners=m,o.emit=m,o.prependListener=m,o.prependOnceListener=m,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(e,t,r){"use strict";
/** @license React v16.10.2
 * react-is.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */Object.defineProperty(t,"__esModule",{value:!0});var n="function"==typeof Symbol&&Symbol.for,o=n?Symbol.for("react.element"):60103,i=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,s=n?Symbol.for("react.strict_mode"):60108,c=n?Symbol.for("react.profiler"):60114,u=n?Symbol.for("react.provider"):60109,l=n?Symbol.for("react.context"):60110,f=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,h=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,y=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function S(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case o:switch(e=e.type){case f:case d:case a:case c:case s:case h:return e;default:switch(e=e&&e.$$typeof){case l:case p:case u:return e;default:return t}}case g:case y:case i:return t}}}function x(e){return S(e)===d}t.typeOf=S,t.AsyncMode=f,t.ConcurrentMode=d,t.ContextConsumer=l,t.ContextProvider=u,t.Element=o,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=y,t.Portal=i,t.Profiler=c,t.StrictMode=s,t.Suspense=h,t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===c||e===s||e===h||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===y||e.$$typeof===u||e.$$typeof===l||e.$$typeof===p||e.$$typeof===v||e.$$typeof===b||e.$$typeof===w)},t.isAsyncMode=function(e){return x(e)||S(e)===f},t.isConcurrentMode=x,t.isContextConsumer=function(e){return S(e)===l},t.isContextProvider=function(e){return S(e)===u},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===o},t.isForwardRef=function(e){return S(e)===p},t.isFragment=function(e){return S(e)===a},t.isLazy=function(e){return S(e)===g},t.isMemo=function(e){return S(e)===y},t.isPortal=function(e){return S(e)===i},t.isProfiler=function(e){return S(e)===c},t.isStrictMode=function(e){return S(e)===s},t.isSuspense=function(e){return S(e)===h}}])}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdG9yaWVzL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdG9yaWVzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N0b3JpZXMvZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcInJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJhbWRcIjpcIlJlYWN0XCIsXCJyb290XCI6XCJSZWFjdFwifSIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwid2VicGFjazovL1N0b3JpZXMvLi9zcmMvY29udGV4dC9HbG9iYWwudHN4Iiwid2VicGFjazovL1N0b3JpZXMvLi9zcmMvY29udGV4dC9Qcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vU3Rvcmllcy8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9tZW1vaXplLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL1N0b3JpZXMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaXMtcHJvcC12YWxpZC9kaXN0L2lzLXByb3AtdmFsaWQuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vU3Rvcmllcy8uL25vZGVfbW9kdWxlcy9zdHlsZWQtY29tcG9uZW50cy9kaXN0L3N0eWxlZC1jb21wb25lbnRzLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL1N0b3JpZXMvLi9ub2RlX21vZHVsZXMvc2hhbGxvd2VxdWFsL2luZGV4LmpzIiwid2VicGFjazovL1N0b3JpZXMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGlzL2Rpc3Qvc3R5bGlzLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL1N0b3JpZXMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdW5pdGxlc3MvZGlzdC91bml0bGVzcy5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vc3JjL2luZGV4LnRzeCIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vc3JjL2NvbXBvbmVudHMvQ29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vc3JjL2NvbXBvbmVudHMvU3RvcnkudHN4Iiwid2VicGFjazovL1N0b3JpZXMvLi9zcmMvY29tcG9uZW50cy9IZWFkZXIudHN4Iiwid2VicGFjazovL1N0b3JpZXMvLi9zcmMvY29tcG9uZW50cy9TZWVNb3JlLnRzeCIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vc3JjL3N0eWxlcy5jc3M/OTE3MiIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vc3JjL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vU3Rvcmllcy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vU3Rvcmllcy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vc3JjL2NvbXBvbmVudHMvUHJvZ3Jlc3NBcnJheS50c3giLCJ3ZWJwYWNrOi8vU3Rvcmllcy8uL3NyYy9jb21wb25lbnRzL1Byb2dyZXNzLnRzeCIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vc3JjL2NvbXBvbmVudHMvUHJvZ3Jlc3NXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9TdG9yaWVzLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwid2luZG93IiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fIiwiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIkdsb2JhbENvbnRleHQiLCJjcmVhdGVDb250ZXh0Iiwic3RvcmllcyIsImRlZmF1bHRJbnRlcnZhbCIsIndpZHRoIiwiaGVpZ2h0IiwibnVtQXJyYXkiLCJjdXJyZW50SWQiLCJjb3VudCIsImN1cnJlbnRTdG9yeSIsInVybCIsInZpZGVvRHVyYXRpb24iLCJidWZmZXJBY3Rpb24iLCJwYXVzZSIsInJlYWN0SXMiLCJSRUFDVF9TVEFUSUNTIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJjb250ZXh0VHlwZSIsImNvbnRleHRUeXBlcyIsImRlZmF1bHRQcm9wcyIsImRpc3BsYXlOYW1lIiwiZ2V0RGVmYXVsdFByb3BzIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibWl4aW5zIiwicHJvcFR5cGVzIiwidHlwZSIsIktOT1dOX1NUQVRJQ1MiLCJsZW5ndGgiLCJjYWxsZXIiLCJjYWxsZWUiLCJhcmd1bWVudHMiLCJhcml0eSIsIk1FTU9fU1RBVElDUyIsImNvbXBhcmUiLCJUWVBFX1NUQVRJQ1MiLCJnZXRTdGF0aWNzIiwiY29tcG9uZW50IiwiaXNNZW1vIiwiRm9yd2FyZFJlZiIsInJlbmRlciIsIk1lbW8iLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJvYmplY3RQcm90b3R5cGUiLCJob2lzdE5vblJlYWN0U3RhdGljcyIsInRhcmdldENvbXBvbmVudCIsInNvdXJjZUNvbXBvbmVudCIsImJsYWNrbGlzdCIsImluaGVyaXRlZENvbXBvbmVudCIsImtleXMiLCJjb25jYXQiLCJ0YXJnZXRTdGF0aWNzIiwic291cmNlU3RhdGljcyIsImRlc2NyaXB0b3IiLCJlIiwicmVhY3RQcm9wc1JlZ2V4IiwiaW5kZXgiLCJmbiIsImNhY2hlIiwiYXJnIiwidW5kZWZpbmVkIiwicHJvcCIsInRlc3QiLCJjaGFyQ29kZUF0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJ0YXJnZXQiLCJzb3VyY2UiLCJhcHBseSIsInRoaXMiLCJpbnRlcmxlYXZlIiwic3RyaW5ncyIsImludGVycG9sYXRpb25zIiwicmVzdWx0IiwibGVuIiwicHVzaCIsImlzUGxhaW5PYmplY3QiLCJ4IiwidG9TdHJpbmciLCJFTVBUWV9BUlJBWSIsImZyZWV6ZSIsIkVNUFRZX09CSkVDVCIsImlzRnVuY3Rpb24iLCJnZXRDb21wb25lbnROYW1lIiwiaXNTdHlsZWRDb21wb25lbnQiLCJzdHlsZWRDb21wb25lbnRJZCIsIlNDX0FUVFIiLCJwcm9jZXNzIiwiZW52IiwiUkVBQ1RfQVBQX1NDX0FUVFIiLCJTQ19BVFRSX1ZFUlNJT04iLCJTQ19WRVJTSU9OIiwiSVNfQlJPV1NFUiIsIkRJU0FCTEVfU1BFRURZIiwiU0NfRElTQUJMRV9TUEVFRFkiLCJSRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFkiLCJTVEFUSUNfRVhFQ1VUSU9OX0NPTlRFWFQiLCJnZXROb25jZSIsInRocm93U3R5bGVkQ29tcG9uZW50c0Vycm9yIiwiY29kZSIsIl9sZW4iLCJBcnJheSIsIl9rZXkiLCJFcnJvciIsImpvaW4iLCJtYWtlU3R5bGVUYWciLCJoZWFkIiwiZG9jdW1lbnQiLCJwYXJlbnQiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJwcmV2U3R5bGUiLCJjaGlsZE5vZGVzIiwiY2hpbGQiLCJub2RlVHlwZSIsImhhc0F0dHJpYnV0ZSIsImZpbmRMYXN0U3R5bGVUYWciLCJuZXh0U2libGluZyIsInNldEF0dHJpYnV0ZSIsIm5vbmNlIiwiaW5zZXJ0QmVmb3JlIiwiZ2V0U2hlZXQiLCJ0YWciLCJzaGVldCIsInN0eWxlU2hlZXRzIiwib3duZXJOb2RlIiwiQ1NTT01UYWciLCJlbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIl9wcm90byIsImluc2VydFJ1bGUiLCJydWxlIiwiX2Vycm9yIiwiZGVsZXRlUnVsZSIsImdldFJ1bGUiLCJjc3NSdWxlcyIsImNzc1RleHQiLCJUZXh0VGFnIiwibm9kZXMiLCJfcHJvdG8yIiwibm9kZSIsInJlZk5vZGUiLCJyZW1vdmVDaGlsZCIsInRleHRDb250ZW50IiwiVmlydHVhbFRhZyIsIl90YXJnZXQiLCJydWxlcyIsIl9wcm90bzMiLCJzcGxpY2UiLCJCQVNFX1NJWkUiLCJEZWZhdWx0R3JvdXBlZFRhZyIsImdyb3VwU2l6ZXMiLCJVaW50MzJBcnJheSIsImluZGV4T2ZHcm91cCIsImdyb3VwIiwiaW5zZXJ0UnVsZXMiLCJvbGRCdWZmZXIiLCJvbGRTaXplIiwibmV3U2l6ZSIsInNldCIsInJ1bGVJbmRleCIsIl9pIiwiY2xlYXJHcm91cCIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsImdldEdyb3VwIiwiY3NzIiwiZ3JvdXBJRFJlZ2lzdGVyIiwiTWFwIiwicmV2ZXJzZVJlZ2lzdGVyIiwibmV4dEZyZWVHcm91cCIsImdldEdyb3VwRm9ySWQiLCJpZCIsImhhcyIsImdldElkRm9yR3JvdXAiLCJzZXRHcm91cEZvcklkIiwiU0VMRUNUT1IiLCJNQVJLRVJfUkUiLCJSZWdFeHAiLCJyZWh5ZHJhdGVOYW1lc0Zyb21Db250ZW50IiwiY29udGVudCIsIm5hbWVzIiwic3BsaXQiLCJyZWdpc3Rlck5hbWUiLCJyZWh5ZHJhdGVTaGVldEZyb21UYWciLCJwYXJ0cyIsImlubmVySFRNTCIsInBhcnQiLCJ0cmltIiwibWFya2VyIiwibWF0Y2giLCJwYXJzZUludCIsImdldFRhZyIsInJlaHlkcmF0ZVNoZWV0IiwicXVlcnlTZWxlY3RvckFsbCIsImdldEF0dHJpYnV0ZSIsInBhcmVudE5vZGUiLCJTSE9VTERfUkVIWURSQVRFIiwiZGVmYXVsdE9wdGlvbnMiLCJpc1NlcnZlciIsInVzZUNTU09NSW5qZWN0aW9uIiwiU3R5bGVTaGVldCIsIm9wdGlvbnMiLCJnbG9iYWxTdHlsZXMiLCJncyIsInJlZ2lzdGVySWQiLCJyZWNvbnN0cnVjdFdpdGhPcHRpb25zIiwiYWxsb2NhdGVHU0luc3RhbmNlIiwiX3JlZiIsImhhc05hbWVGb3JJZCIsImFkZCIsImdyb3VwTmFtZXMiLCJTZXQiLCJjbGVhck5hbWVzIiwiY2xlYXIiLCJjbGVhclJ1bGVzIiwiY2xlYXJUYWciLCJzZWxlY3RvciIsImZvckVhY2giLCJvdXRwdXRTaGVldCIsIlNFRUQiLCJwaGFzaCIsImgiLCJoYXNoIiwiQ09NTUVOVF9SRUdFWCIsImNyZWF0ZVN0eWxpc0luc3RhbmNlIiwiX3RlbXAiLCJfY29tcG9uZW50SWQiLCJfc2VsZWN0b3IiLCJfc2VsZWN0b3JSZWdleHAiLCJfcmVmJG9wdGlvbnMiLCJfcmVmJHBsdWdpbnMiLCJwbHVnaW5zIiwic3R5bGlzIiwicGFyc2luZ1J1bGVzIiwicGFyc2VSdWxlc1BsdWdpbiIsInRvU2hlZXQiLCJibG9jayIsImNvbnRleHQiLCJzZWxlY3RvcnMiLCJwYXJlbnRzIiwibGluZSIsImNvbHVtbiIsImRlcHRoIiwiYXQiLCJkZWxpbWl0ZXIiLCJpbnNlcnRSdWxlUGx1Z2luIiwic2VsZlJlZmVyZW5jZVJlcGxhY2VyIiwib2Zmc2V0Iiwic3RyaW5nIiwic2xpY2UiLCJpbmRleE9mIiwic3RyaW5naWZ5UnVsZXMiLCJwcmVmaXgiLCJjb21wb25lbnRJZCIsImZsYXRDU1MiLCJyZXBsYWNlIiwiY3NzU3RyIiwidXNlIiwiXyIsImxhc3RJbmRleE9mIiwicGFyc2VkUnVsZXMiLCJyZWR1Y2UiLCJhY2MiLCJwbHVnaW4iLCJTdHlsZVNoZWV0Q29udGV4dCIsIlN0eWxlU2hlZXRDb25zdW1lciIsIkNvbnN1bWVyIiwiU3R5bGlzQ29udGV4dCIsIm1hc3RlclNoZWV0IiwibWFzdGVyU3R5bGlzIiwidXNlU3R5bGVTaGVldCIsInVzZVN0eWxpcyIsIlN0eWxlU2hlZXRNYW5hZ2VyIiwicHJvcHMiLCJfdXNlU3RhdGUiLCJzdHlsaXNQbHVnaW5zIiwic2V0UGx1Z2lucyIsImNvbnRleHRTdHlsZVNoZWV0Iiwic3R5bGVTaGVldCIsImRpc2FibGVDU1NPTUluamVjdGlvbiIsImRpc2FibGVWZW5kb3JQcmVmaXhlcyIsIlByb3ZpZGVyIiwiY2hpbGRyZW4iLCJLZXlmcmFtZXMiLCJzdHJpbmdpZnlBcmdzIiwiX3RoaXMiLCJpbmplY3QiLCJTdHJpbmciLCJnZXROYW1lIiwidXBwZXJjYXNlUGF0dGVybiIsIm1zUGF0dGVybiIsImh5cGhlbmF0ZVN0eWxlTmFtZSIsInRvTG93ZXJDYXNlIiwiaXNGYWxzaXNoIiwiY2h1bmsiLCJvYmpUb0Nzc0FycmF5Iiwib2JqIiwicHJldktleSIsImZsYXR0ZW4iLCJleGVjdXRpb25Db250ZXh0IiwiaXNBcnJheSIsInJ1bGVTZXQiLCJpc1JlYWN0Q29tcG9uZW50Iiwic3R5bGVzIiwiaXNPYmplY3QiLCJ2YWwiLCJpc1ZhbGlkS2V5IiwibWl4aW4iLCJtaXhpbkRlZXAiLCJyZXN0IiwiX3Jlc3QiLCJBRF9SRVBMQUNFUl9SIiwiY2hhcnNMZW5ndGgiLCJnZXRBbHBoYWJldGljQ2hhciIsImZyb21DaGFyQ29kZSIsImdlbmVyYXRlQWxwaGFiZXRpY05hbWUiLCJNYXRoIiwiYWJzIiwiaXNTdGF0aWNSdWxlcyIsIkNvbXBvbmVudFN0eWxlIiwic3RhdGljUnVsZXNJZCIsImlzU3RhdGljIiwiYmFzZUhhc2giLCJnZW5lcmF0ZUFuZEluamVjdFN0eWxlcyIsImNzc1N0YXRpYyIsImNzc1N0YXRpY0Zvcm1hdHRlZCIsImR5bmFtaWNIYXNoIiwicGFydFJ1bGUiLCJwYXJ0Q2h1bmsiLCJwYXJ0U3RyaW5nIiwiX25hbWUiLCJjc3NGb3JtYXR0ZWQiLCJkZXRlcm1pbmVUaGVtZSIsInByb3ZpZGVkVGhlbWUiLCJ0aGVtZSIsImVzY2FwZVJlZ2V4IiwiZGFzaGVzQXRFbmRzIiwiZXNjYXBlIiwic3RyIiwiaXNUYWciLCJnZW5lcmF0ZUNvbXBvbmVudElkIiwiVGhlbWVDb250ZXh0IiwiVGhlbWVDb25zdW1lciIsIlRoZW1lUHJvdmlkZXIiLCJvdXRlclRoZW1lIiwidGhlbWVDb250ZXh0IiwibWVyZ2VUaGVtZSIsImlkZW50aWZpZXJzIiwidXNlU3R5bGVkQ29tcG9uZW50SW1wbCIsImZvcndhcmRlZENvbXBvbmVudCIsImZvcndhcmRlZFJlZiIsImNvbXBvbmVudEF0dHJzIiwiYXR0cnMiLCJjb21wb25lbnRTdHlsZSIsImZvbGRlZENvbXBvbmVudElkcyIsInNob3VsZEZvcndhcmRQcm9wIiwiX3VzZVJlc29sdmVkQXR0cnMiLCJyZXNvbHZlZEF0dHJzIiwiYXR0ckRlZiIsImEiLCJiIiwicmVzb2x2ZWRBdHRyRGVmIiwidXNlUmVzb2x2ZWRBdHRycyIsImdlbmVyYXRlZENsYXNzTmFtZSIsImhhc0F0dHJzIiwid2FyblRvb01hbnlDbGFzc2VzIiwiY2xhc3NOYW1lIiwidXNlSW5qZWN0ZWRTdHlsZSIsInJlZlRvRm9yd2FyZCIsImVsZW1lbnRUb0JlQ3JlYXRlZCIsIiRhcyIsImFzIiwiaXNUYXJnZXRUYWciLCJjb21wdXRlZFByb3BzIiwicHJvcEZpbHRlckZuIiwicHJvcHNGb3JFbGVtZW50IiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlZiIsImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsImlzVGFyZ2V0U3R5bGVkQ29tcCIsImlzQ29tcG9zaXRlQ29tcG9uZW50IiwiX29wdGlvbnMkZGlzcGxheU5hbWUiLCJnZW5lcmF0ZURpc3BsYXlOYW1lIiwiX29wdGlvbnMkY29tcG9uZW50SWQiLCJwYXJlbnRDb21wb25lbnRJZCIsImdlbmVyYXRlSWQiLCJfb3B0aW9ucyRhdHRycyIsImZpbmFsQXR0cnMiLCJmaWx0ZXJGbiIsIldyYXBwZWRTdHlsZWRDb21wb25lbnQiLCJmb3J3YXJkUmVmIiwid2l0aENvbXBvbmVudCIsInByZXZpb3VzQ29tcG9uZW50SWQiLCJvcHRpb25zVG9Db3B5IiwiZXhjbHVkZWQiLCJzb3VyY2VLZXlzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJuZXdDb21wb25lbnRJZCIsIl9mb2xkZWREZWZhdWx0UHJvcHMiLCJzZWxmIiwic3R5bGVkIiwiY29uc3RydWN0V2l0aE9wdGlvbnMiLCJjb21wb25lbnRDb25zdHJ1Y3RvciIsInRlbXBsYXRlRnVuY3Rpb24iLCJ3aXRoQ29uZmlnIiwiY29uZmlnIiwiZG9tRWxlbWVudCIsIkdsb2JhbFN0eWxlIiwiY3JlYXRlU3R5bGVzIiwiaW5zdGFuY2UiLCJyZW1vdmVTdHlsZXMiLCJyZW5kZXJTdHlsZXMiLCJjcmVhdGVHbG9iYWxTdHlsZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnbG9iYWxTdHlsZSIsIm1lbW8iLCJHbG9iYWxTdHlsZUNvbXBvbmVudCIsImluc3RhbmNlUmVmIiwiY3VycmVudCIsImtleWZyYW1lcyIsIlNlcnZlclN0eWxlU2hlZXQiLCJfZW1pdFNoZWV0Q1NTIiwiZ2V0U3R5bGVUYWdzIiwic2VhbGVkIiwiZ2V0U3R5bGVFbGVtZW50IiwiX3Byb3BzIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJzZWFsIiwiY29sbGVjdFN0eWxlcyIsImludGVybGVhdmVXaXRoTm9kZVN0cmVhbSIsImlucHV0Iiwid2l0aFRoZW1lIiwiQ29tcG9uZW50IiwiV2l0aFRoZW1lIiwidGhlbWVQcm9wIiwidXNlVGhlbWUiLCJfX1BSSVZBVEVfXyIsInZlcnNpb24iLCJvYmpBIiwib2JqQiIsImNvbXBhcmVDb250ZXh0IiwicmV0Iiwia2V5c0EiLCJrZXlzQiIsImJIYXNPd25Qcm9wZXJ0eSIsImlkeCIsInZhbHVlQSIsInZhbHVlQiIsIlciLCJYIiwiaWEiLCJaIiwidiIsIkYiLCJQIiwic3Vic3RyaW5nIiwidyIsIkwiLCJqYSIsImthIiwiYWEiLCJHIiwiYmEiLCJsYSIsIm1hIiwiUiIsIm5hIiwiZWEiLCJvYSIsIkgiLCJxIiwiZyIsIkEiLCJTIiwiQiIsIlUiLCJEIiwieiIsIk0iLCJrIiwieSIsIkMiLCJLIiwidSIsIkkiLCJKIiwiZiIsIk4iLCJjaGFyQXQiLCJjYSIsIk8iLCJkYSIsImZhIiwiWSIsIkUiLCJoYSIsIlEiLCJUIiwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiLCJib3JkZXJJbWFnZU91dHNldCIsImJvcmRlckltYWdlU2xpY2UiLCJib3JkZXJJbWFnZVdpZHRoIiwiYm94RmxleCIsImJveEZsZXhHcm91cCIsImJveE9yZGluYWxHcm91cCIsImNvbHVtbkNvdW50IiwiY29sdW1ucyIsImZsZXgiLCJmbGV4R3JvdyIsImZsZXhQb3NpdGl2ZSIsImZsZXhTaHJpbmsiLCJmbGV4TmVnYXRpdmUiLCJmbGV4T3JkZXIiLCJncmlkUm93IiwiZ3JpZFJvd0VuZCIsImdyaWRSb3dTcGFuIiwiZ3JpZFJvd1N0YXJ0IiwiZ3JpZENvbHVtbiIsImdyaWRDb2x1bW5FbmQiLCJncmlkQ29sdW1uU3BhbiIsImdyaWRDb2x1bW5TdGFydCIsIm1zR3JpZFJvdyIsIm1zR3JpZFJvd1NwYW4iLCJtc0dyaWRDb2x1bW4iLCJtc0dyaWRDb2x1bW5TcGFuIiwiZm9udFdlaWdodCIsImxpbmVIZWlnaHQiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcnBoYW5zIiwidGFiU2l6ZSIsIndpZG93cyIsInpJbmRleCIsInpvb20iLCJXZWJraXRMaW5lQ2xhbXAiLCJmaWxsT3BhY2l0eSIsImZsb29kT3BhY2l0eSIsInN0b3BPcGFjaXR5Iiwic3Ryb2tlRGFzaGFycmF5Iiwic3Ryb2tlRGFzaG9mZnNldCIsInN0cm9rZU1pdGVybGltaXQiLCJzdHJva2VPcGFjaXR5Iiwic3Ryb2tlV2lkdGgiLCJSZWFjdEluc3RhU3RvcmllcyIsInVzZUVmZmVjdCIsImltYWdlcyIsIkltYWdlIiwic3JjIiwibWFwIiwibG9hZGVyIiwiaGVhZGVyIiwic3RvcnlTdHlsZXMiLCJsb29wIiwiaXNQYXVzZWQiLCJjdXJyZW50SW5kZXgiLCJvblN0b3J5U3RhcnQiLCJvblN0b3J5RW5kIiwib25BbGxTdG9yaWVzRW5kIiwidXNlU3RhdGUiLCJzZXRDdXJyZW50SWQiLCJzZXRQYXVzZSIsInNldENvdW50Iiwic2V0QnVmZmVyQWN0aW9uIiwic2V0VmlkZW9EdXJhdGlvbiIsImFuaW1hdGlvbkZyYW1lSWQiLCJ1c2VSZWYiLCJ1c2VDb250ZXh0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaW5jcmVtZW50Q291bnQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImNvbnNvbGUiLCJlcnJvciIsInN0b3J5U3RhcnRDYWxsYmFjayIsImludGVydmFsIiwiZ2V0Q3VycmVudEludGVydmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwidGhlbiIsInN0b3J5RW5kQ2FsbGJhY2siLCJhbGxTdG9yaWVzRW5kQ2FsbGJhY2siLCJuZXh0IiwiZHVyYXRpb24iLCJ0b2dnbGVTdGF0ZSIsImFjdGlvbiIsInByZXZpb3VzIiwidXBkYXRlTmV4dFN0b3J5SWRGb3JMb29wIiwidXBkYXRlTmV4dFN0b3J5SWQiLCJjb250YWluZXIiLCJwbGF5U3RhdGUiLCJzdG9yeSIsImdldFZpZGVvRHVyYXRpb24iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImJhY2tncm91bmQiLCJwb3NpdGlvbiIsIm92ZXJsYXkiLCJvdmVyZmxvdyIsInN0b3J5Q29udGVudCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwibWFyZ2luIiwibG9hZGVkIiwic2V0TG9hZGVkIiwic2hvd01vcmUiLCJzZXRTaG93TW9yZSIsInZpZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwbGF5IiwibG9nIiwiaW1hZ2VMb2FkZWQiLCJ2aWRlb0xvYWRlZCIsImlzSGVhZGVyIiwiSW5uZXJDb250ZW50Iiwic3RvcnlDb250ZW50U3R5bGVzIiwib25Mb2FkIiwiY29udHJvbHMiLCJvbkxvYWRlZERhdGEiLCJhdXRvUGxheSIsInBsYXlzSW5saW5lIiwiZ2V0U3RvcnlDb250ZW50IiwibGVmdCIsInRvcCIsImhlYWRpbmciLCJzdWJoZWFkaW5nIiwicHJvZmlsZUltYWdlIiwianVzdGlmeUNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwiY29sb3IiLCJzcGlubmVyIiwic2VlTW9yZSIsImJvdHRvbSIsInRvZ2dsZU1vcmUiLCJzaG93Iiwic2hvd0NvbnRlbnQiLCJzZWVNb3JlQ29udGVudCIsIm1haW4iLCJpbWciLCJib3JkZXJSYWRpdXMiLCJtYXJnaW5SaWdodCIsImJvcmRlciIsInRleHQiLCJmb250U2l6ZSIsIm1hcmdpbkJvdHRvbSIsIlNlZU1vcmVDb250ZW50Iiwic2VlTW9yZUV4cGFuZGVkIiwiY2xvc2UiLCJvbkNsaWNrIiwic2VlTW9yZUljb24iLCJzZWVNb3JlVGV4dCIsImJveFNpemluZyIsInRleHRBbGlnbiIsImxldHRlclNwYWNpbmciLCJ0ZXh0VHJhbnNmb3JtIiwidHJhbnNpdGlvbiIsInNlZU1vcmVDbG9zZSIsInJpZ2h0IiwicGFkZGluZyIsImxvY2FscyIsInVzZVNvdXJjZU1hcCIsImxpc3QiLCJpdGVtIiwiY3NzTWFwcGluZyIsImJ0b2EiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlTWFwIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJkYXRhIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJzb3VyY2VSb290IiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsIm1lZGlhUXVlcnkiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwic3R5bGVzSW5Eb20iLCJpc09sZElFIiwiYWxsIiwiYXRvYiIsImdldFRhcmdldCIsInN0eWxlVGFyZ2V0IiwicXVlcnlTZWxlY3RvciIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwibGlzdFRvU3R5bGVzIiwibmV3U3R5bGVzIiwiYmFzZSIsIm1lZGlhIiwiYWRkU3R5bGVzVG9Eb20iLCJkb21TdHlsZSIsImoiLCJyZWZzIiwiYWRkU3R5bGUiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJhdHRyaWJ1dGVzIiwiaW5zZXJ0IiwidGV4dFN0b3JlIiwicmVwbGFjZVRleHQiLCJyZXBsYWNlbWVudCIsImFwcGx5VG9TaW5nbGV0b25UYWciLCJyZW1vdmUiLCJjc3NOb2RlIiwiYXBwbHlUb1RhZyIsImZpcnN0Q2hpbGQiLCJzaW5nbGV0b24iLCJzaW5nbGV0b25Db3VudGVyIiwidXBkYXRlIiwic3R5bGVJbmRleCIsInJlbW92ZVN0eWxlRWxlbWVudCIsIm5ld09iaiIsIm5ld0xpc3QiLCJtYXlSZW1vdmUiLCJfZG9tU3R5bGUiLCJDb250YWluZXIiLCJhY3RpdmUiLCJkaXYiLCJ0cmFuc2Zvcm0iLCJnZXRQcm9ncmVzc1N0eWxlIiwiaW5uZXIiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJXZWJraXRCYWNrZmFjZVZpc2liaWxpdHkiLCJNb3pCYWNrZmFjZVZpc2liaWxpdHkiLCJtc0JhY2tmYWNlVmlzaWJpbGl0eSIsImJhY2tmYWNlVmlzaWJpbGl0eSIsIldlYmtpdFBlcnNwZWN0aXZlIiwiTW96UGVyc3BlY3RpdmUiLCJtc1BlcnNwZWN0aXZlIiwicGVyc3BlY3RpdmUiLCJnZXRQcm9ncmVzc1dyYXBwZXJTdHlsZSIsIlBnd3JhcHBlciIsImNhY2hlZFNldFRpbWVvdXQiLCJjYWNoZWRDbGVhclRpbWVvdXQiLCJkZWZhdWx0U2V0VGltb3V0IiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImRyYWluaW5nIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImRyYWluUXVldWUiLCJ0aW1lb3V0IiwicnVuIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsImFycmF5Iiwibm9vcCIsIm5leHRUaWNrIiwiYXJncyIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsImRpciIsInVtYXNrIiwiZm9yIiwiJCR0eXBlb2YiLCJ0eXBlT2YiLCJBc3luY01vZGUiLCJDb25jdXJyZW50TW9kZSIsIkNvbnRleHRDb25zdW1lciIsIkNvbnRleHRQcm92aWRlciIsIkVsZW1lbnQiLCJGcmFnbWVudCIsIkxhenkiLCJQb3J0YWwiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsImlzVmFsaWRFbGVtZW50VHlwZSIsImlzQXN5bmNNb2RlIiwiaXNDb25jdXJyZW50TW9kZSIsImlzQ29udGV4dENvbnN1bWVyIiwiaXNDb250ZXh0UHJvdmlkZXIiLCJpc0VsZW1lbnQiLCJpc0ZvcndhcmRSZWYiLCJpc0ZyYWdtZW50IiwiaXNMYXp5IiwiaXNQb3J0YWwiLCJpc1Byb2ZpbGVyIiwiaXNTdHJpY3RNb2RlIiwiaXNTdXNwZW5zZSJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLFVBQVcsQ0FBQyxTQUFVSixHQUNILGlCQUFaQyxRQUNkQSxRQUFpQixRQUFJRCxFQUFRRyxRQUFRLFVBRXJDSixFQUFjLFFBQUlDLEVBQVFELEVBQVksT0FSeEMsQ0FTR08sUUFBUSxTQUFTQyxHQUNwQixPLFlDVEUsSUFBSUMsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVVQsUUFHbkMsSUFBSUMsRUFBU00sRUFBaUJFLEdBQVksQ0FDekNDLEVBQUdELEVBQ0hFLEdBQUcsRUFDSFgsUUFB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QUFPNEgsRUFBRTVILEtBQUtuVCxHQUFHbkcsRUFBUTIwQixPQUFPLFNBQVNyYixHQUFHLE9BQU80SCxFQUFFNUgsS0FBSzFYLEdBQUc1QixFQUFRZ0YsT0FBTyxTQUFTc1UsR0FBRyxPQUFPNEgsRUFBRTVILEtBQUs5WCxHQUFHeEIsRUFBUTQwQixTQUFTLFNBQVN0YixHQUFHLE9BQU80SCxFQUFFNUgsS0FBS3RZLEdBQUdoQixFQUFRNjBCLFdBQVcsU0FBU3ZiLEdBQUcsT0FBTzRILEVBQUU1SCxLQUFLbUgsR0FBR3pnQixFQUFRODBCLGFBQWEsU0FBU3hiLEdBQUcsT0FBTzRILEVBQUU1SCxLQUFLa0ksR0FBR3hoQixFQUFRKzBCLFdBQVcsU0FBU3piLEdBQUcsT0FBTzRILEVBQUU1SCxLQUFLOVciLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIlN0b3JpZXNcIiwgW1wiUmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiU3Rvcmllc1wiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdG9yaWVzXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L2luZGV4LmpzXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXzsiLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEdsb2JhbEN0eCB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmNvbnN0IEdsb2JhbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PEdsb2JhbEN0eD4oe1xuICAgIHN0b3JpZXM6IFtdLFxuICAgIGRlZmF1bHRJbnRlcnZhbDogNDAwMCxcbiAgICB3aWR0aDogMzQwLFxuICAgIGhlaWdodDogNjQwXG59KVxuXG5leHBvcnQgZGVmYXVsdCBHbG9iYWxDb250ZXh0IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUHJvZ3Jlc3NDb250ZXh0IH0gZnJvbSAnLi8uLi9pbnRlcmZhY2VzJ1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0PFByb2dyZXNzQ29udGV4dD4oe1xuICAgIG51bUFycmF5OiBbXSxcbiAgICBjdXJyZW50SWQ6IDAsXG4gICAgY291bnQ6IDAsXG4gICAgY3VycmVudFN0b3J5OiB7IHVybDogJycgfSxcbiAgICB2aWRlb0R1cmF0aW9uOiAwLFxuICAgIGJ1ZmZlckFjdGlvbjogZmFsc2UsXG4gICAgcGF1c2U6IGZhbHNlXG59KSIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZTtcbiIsImltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgcmVhY3RQcm9wc1JlZ2V4ID0gL14oKGNoaWxkcmVufGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfGtleXxyZWZ8YXV0b0ZvY3VzfGRlZmF1bHRWYWx1ZXxkZWZhdWx0Q2hlY2tlZHxpbm5lckhUTUx8c3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nfHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x2YWx1ZUxpbmt8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0eXBlfHVzZU1hcHx2YWx1ZXx3aWR0aHx3bW9kZXx3cmFwfGFib3V0fGRhdGF0eXBlfGlubGlzdHxwcmVmaXh8cHJvcGVydHl8cmVzb3VyY2V8dHlwZW9mfHZvY2FifGF1dG9DYXBpdGFsaXplfGF1dG9Db3JyZWN0fGF1dG9TYXZlfGNvbG9yfGluZXJ0fGl0ZW1Qcm9wfGl0ZW1TY29wZXxpdGVtVHlwZXxpdGVtSUR8aXRlbVJlZnxvbnxyZXN1bHRzfHNlY3VyaXR5fHVuc2VsZWN0YWJsZXxhY2NlbnRIZWlnaHR8YWNjdW11bGF0ZXxhZGRpdGl2ZXxhbGlnbm1lbnRCYXNlbGluZXxhbGxvd1Jlb3JkZXJ8YWxwaGFiZXRpY3xhbXBsaXR1ZGV8YXJhYmljRm9ybXxhc2NlbnR8YXR0cmlidXRlTmFtZXxhdHRyaWJ1dGVUeXBlfGF1dG9SZXZlcnNlfGF6aW11dGh8YmFzZUZyZXF1ZW5jeXxiYXNlbGluZVNoaWZ0fGJhc2VQcm9maWxlfGJib3h8YmVnaW58Ymlhc3xieXxjYWxjTW9kZXxjYXBIZWlnaHR8Y2xpcHxjbGlwUGF0aFVuaXRzfGNsaXBQYXRofGNsaXBSdWxlfGNvbG9ySW50ZXJwb2xhdGlvbnxjb2xvckludGVycG9sYXRpb25GaWx0ZXJzfGNvbG9yUHJvZmlsZXxjb2xvclJlbmRlcmluZ3xjb250ZW50U2NyaXB0VHlwZXxjb250ZW50U3R5bGVUeXBlfGN1cnNvcnxjeHxjeXxkfGRlY2VsZXJhdGV8ZGVzY2VudHxkaWZmdXNlQ29uc3RhbnR8ZGlyZWN0aW9ufGRpc3BsYXl8ZGl2aXNvcnxkb21pbmFudEJhc2VsaW5lfGR1cnxkeHxkeXxlZGdlTW9kZXxlbGV2YXRpb258ZW5hYmxlQmFja2dyb3VuZHxlbmR8ZXhwb25lbnR8ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZHxmaWxsfGZpbGxPcGFjaXR5fGZpbGxSdWxlfGZpbHRlcnxmaWx0ZXJSZXN8ZmlsdGVyVW5pdHN8Zmxvb2RDb2xvcnxmbG9vZE9wYWNpdHl8Zm9jdXNhYmxlfGZvbnRGYW1pbHl8Zm9udFNpemV8Zm9udFNpemVBZGp1c3R8Zm9udFN0cmV0Y2h8Zm9udFN0eWxlfGZvbnRWYXJpYW50fGZvbnRXZWlnaHR8Zm9ybWF0fGZyb218ZnJ8Znh8Znl8ZzF8ZzJ8Z2x5cGhOYW1lfGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsfGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbHxnbHlwaFJlZnxncmFkaWVudFRyYW5zZm9ybXxncmFkaWVudFVuaXRzfGhhbmdpbmd8aG9yaXpBZHZYfGhvcml6T3JpZ2luWHxpZGVvZ3JhcGhpY3xpbWFnZVJlbmRlcmluZ3xpbnxpbjJ8aW50ZXJjZXB0fGt8azF8azJ8azN8azR8a2VybmVsTWF0cml4fGtlcm5lbFVuaXRMZW5ndGh8a2VybmluZ3xrZXlQb2ludHN8a2V5U3BsaW5lc3xrZXlUaW1lc3xsZW5ndGhBZGp1c3R8bGV0dGVyU3BhY2luZ3xsaWdodGluZ0NvbG9yfGxpbWl0aW5nQ29uZUFuZ2xlfGxvY2FsfG1hcmtlckVuZHxtYXJrZXJNaWR8bWFya2VyU3RhcnR8bWFya2VySGVpZ2h0fG1hcmtlclVuaXRzfG1hcmtlcldpZHRofG1hc2t8bWFza0NvbnRlbnRVbml0c3xtYXNrVW5pdHN8bWF0aGVtYXRpY2FsfG1vZGV8bnVtT2N0YXZlc3xvZmZzZXR8b3BhY2l0eXxvcGVyYXRvcnxvcmRlcnxvcmllbnR8b3JpZW50YXRpb258b3JpZ2lufG92ZXJmbG93fG92ZXJsaW5lUG9zaXRpb258b3ZlcmxpbmVUaGlja25lc3N8cGFub3NlMXxwYWludE9yZGVyfHBhdGhMZW5ndGh8cGF0dGVybkNvbnRlbnRVbml0c3xwYXR0ZXJuVHJhbnNmb3JtfHBhdHRlcm5Vbml0c3xwb2ludGVyRXZlbnRzfHBvaW50c3xwb2ludHNBdFh8cG9pbnRzQXRZfHBvaW50c0F0WnxwcmVzZXJ2ZUFscGhhfHByZXNlcnZlQXNwZWN0UmF0aW98cHJpbWl0aXZlVW5pdHN8cnxyYWRpdXN8cmVmWHxyZWZZfHJlbmRlcmluZ0ludGVudHxyZXBlYXRDb3VudHxyZXBlYXREdXJ8cmVxdWlyZWRFeHRlbnNpb25zfHJlcXVpcmVkRmVhdHVyZXN8cmVzdGFydHxyZXN1bHR8cm90YXRlfHJ4fHJ5fHNjYWxlfHNlZWR8c2hhcGVSZW5kZXJpbmd8c2xvcGV8c3BhY2luZ3xzcGVjdWxhckNvbnN0YW50fHNwZWN1bGFyRXhwb25lbnR8c3BlZWR8c3ByZWFkTWV0aG9kfHN0YXJ0T2Zmc2V0fHN0ZERldmlhdGlvbnxzdGVtaHxzdGVtdnxzdGl0Y2hUaWxlc3xzdG9wQ29sb3J8c3RvcE9wYWNpdHl8c3RyaWtldGhyb3VnaFBvc2l0aW9ufHN0cmlrZXRocm91Z2hUaGlja25lc3N8c3RyaW5nfHN0cm9rZXxzdHJva2VEYXNoYXJyYXl8c3Ryb2tlRGFzaG9mZnNldHxzdHJva2VMaW5lY2FwfHN0cm9rZUxpbmVqb2lufHN0cm9rZU1pdGVybGltaXR8c3Ryb2tlT3BhY2l0eXxzdHJva2VXaWR0aHxzdXJmYWNlU2NhbGV8c3lzdGVtTGFuZ3VhZ2V8dGFibGVWYWx1ZXN8dGFyZ2V0WHx0YXJnZXRZfHRleHRBbmNob3J8dGV4dERlY29yYXRpb258dGV4dFJlbmRlcmluZ3x0ZXh0TGVuZ3RofHRvfHRyYW5zZm9ybXx1MXx1Mnx1bmRlcmxpbmVQb3NpdGlvbnx1bmRlcmxpbmVUaGlja25lc3N8dW5pY29kZXx1bmljb2RlQmlkaXx1bmljb2RlUmFuZ2V8dW5pdHNQZXJFbXx2QWxwaGFiZXRpY3x2SGFuZ2luZ3x2SWRlb2dyYXBoaWN8dk1hdGhlbWF0aWNhbHx2YWx1ZXN8dmVjdG9yRWZmZWN0fHZlcnNpb258dmVydEFkdll8dmVydE9yaWdpblh8dmVydE9yaWdpbll8dmlld0JveHx2aWV3VGFyZ2V0fHZpc2liaWxpdHl8d2lkdGhzfHdvcmRTcGFjaW5nfHdyaXRpbmdNb2RlfHh8eEhlaWdodHx4MXx4Mnx4Q2hhbm5lbFNlbGVjdG9yfHhsaW5rQWN0dWF0ZXx4bGlua0FyY3JvbGV8eGxpbmtIcmVmfHhsaW5rUm9sZXx4bGlua1Nob3d8eGxpbmtUaXRsZXx4bGlua1R5cGV8eG1sQmFzZXx4bWxuc3x4bWxuc1hsaW5rfHhtbExhbmd8eG1sU3BhY2V8eXx5MXx5Mnx5Q2hhbm5lbFNlbGVjdG9yfHp8em9vbUFuZFBhbnxmb3J8Y2xhc3N8YXV0b2ZvY3VzKXwoKFtEZF1bQWFdW1R0XVtBYV18W0FhXVtScl1bSWldW0FhXXx4KS0uKikpJC87IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWJmZWU2OGE0Y2Q3ZTYwMDllZjYxZDIzXG5cbnZhciBpbmRleCA9IG1lbW9pemUoZnVuY3Rpb24gKHByb3ApIHtcbiAgcmV0dXJuIHJlYWN0UHJvcHNSZWdleC50ZXN0KHByb3ApIHx8IHByb3AuY2hhckNvZGVBdCgwKSA9PT0gMTExXG4gIC8qIG8gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDEpID09PSAxMTBcbiAgLyogbiAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMikgPCA5MTtcbn1cbi8qIForMSAqL1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iLCJpbXBvcnQgeyB0eXBlT2YsIGlzRWxlbWVudCwgaXNWYWxpZEVsZW1lbnRUeXBlIH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VFZmZlY3QsIHVzZVJlZiwgY3JlYXRlRWxlbWVudCwgdXNlRGVidWdWYWx1ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzaGFsbG93ZXF1YWwgZnJvbSAnc2hhbGxvd2VxdWFsJztcbmltcG9ydCBTdHlsaXMgZnJvbSAnQGVtb3Rpb24vc3R5bGlzJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgdmFsaWRBdHRyIGZyb20gJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0IGhvaXN0IGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8vIFxudmFyIGludGVybGVhdmUgPSAoZnVuY3Rpb24gKHN0cmluZ3MsIGludGVycG9sYXRpb25zKSB7XG4gIHZhciByZXN1bHQgPSBbc3RyaW5nc1swXV07XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGludGVycG9sYXRpb25zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgcmVzdWx0LnB1c2goaW50ZXJwb2xhdGlvbnNbaV0sIHN0cmluZ3NbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuLy8gXG52YXIgaXNQbGFpbk9iamVjdCA9IChmdW5jdGlvbiAoeCkge1xuICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgKHgudG9TdHJpbmcgPyB4LnRvU3RyaW5nKCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkpID09PSAnW29iamVjdCBPYmplY3RdJyAmJiAhdHlwZU9mKHgpO1xufSk7XG5cbi8vIFxudmFyIEVNUFRZX0FSUkFZID0gT2JqZWN0LmZyZWV6ZShbXSk7XG52YXIgRU1QVFlfT0JKRUNUID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbi8vIFxuZnVuY3Rpb24gaXNGdW5jdGlvbih0ZXN0KSB7XG4gIHJldHVybiB0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLy8gXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHRhcmdldCkge1xuICByZXR1cm4gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJyAmJiB0YXJnZXQgOiBmYWxzZSkgfHwgLy8gJEZsb3dGaXhNZVxuICB0YXJnZXQuZGlzcGxheU5hbWUgfHwgLy8gJEZsb3dGaXhNZVxuICB0YXJnZXQubmFtZSB8fCAnQ29tcG9uZW50Jztcbn1cblxuLy8gXG5mdW5jdGlvbiBpc1N0YXRlbGVzc0Z1bmN0aW9uKHRlc3QpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ID09PSAnZnVuY3Rpb24nICYmICEodGVzdC5wcm90b3R5cGUgJiYgdGVzdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbi8vIFxuZnVuY3Rpb24gaXNTdHlsZWRDb21wb25lbnQodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgJiYgdHlwZW9mIHRhcmdldC5zdHlsZWRDb21wb25lbnRJZCA9PT0gJ3N0cmluZyc7XG59XG5cbi8vIFxudmFyIFNDX0FUVFIgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19BVFRSIHx8IHByb2Nlc3MuZW52LlNDX0FUVFIpIHx8ICdkYXRhLXN0eWxlZCc7XG52YXIgU0NfQVRUUl9BQ1RJVkUgPSAnYWN0aXZlJztcbnZhciBTQ19BVFRSX1ZFUlNJT04gPSAnZGF0YS1zdHlsZWQtdmVyc2lvbic7XG52YXIgU0NfVkVSU0lPTiA9IFwiNS4xLjBcIjtcbnZhciBTUExJVFRFUiA9ICcvKiFzYyovXFxuJztcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ0hUTUxFbGVtZW50JyBpbiB3aW5kb3c7XG52YXIgRElTQUJMRV9TUEVFRFkgPSB0eXBlb2YgU0NfRElTQUJMRV9TUEVFRFkgPT09ICdib29sZWFuJyAmJiBTQ19ESVNBQkxFX1NQRUVEWSB8fCB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWSB8fCBwcm9jZXNzLmVudi5TQ19ESVNBQkxFX1NQRUVEWSkgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJzsgLy8gU2hhcmVkIGVtcHR5IGV4ZWN1dGlvbiBjb250ZXh0IHdoZW4gZ2VuZXJhdGluZyBzdGF0aWMgc3R5bGVzXG5cbnZhciBTVEFUSUNfRVhFQ1VUSU9OX0NPTlRFWFQgPSB7fTtcblxuLy8gXG5cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSwgbm8tdW5kZWYgKi9cbnZhciBnZXROb25jZSA9IGZ1bmN0aW9uIGdldE5vbmNlKCkge1xuICByZXR1cm4gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJyA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcbn07XG5cbnZhciBlcnJvck1hcCA9IHtcbiAgXCIxXCI6IFwiQ2Fubm90IGNyZWF0ZSBzdHlsZWQtY29tcG9uZW50IGZvciBjb21wb25lbnQ6ICVzLlxcblxcblwiLFxuICBcIjJcIjogXCJDYW4ndCBjb2xsZWN0IHN0eWxlcyBvbmNlIHlvdSd2ZSBjb25zdW1lZCBhIGBTZXJ2ZXJTdHlsZVNoZWV0YCdzIHN0eWxlcyEgYFNlcnZlclN0eWxlU2hlZXRgIGlzIGEgb25lIG9mZiBpbnN0YW5jZSBmb3IgZWFjaCBzZXJ2ZXItc2lkZSByZW5kZXIgY3ljbGUuXFxuXFxuLSBBcmUgeW91IHRyeWluZyB0byByZXVzZSBpdCBhY3Jvc3MgcmVuZGVycz9cXG4tIEFyZSB5b3UgYWNjaWRlbnRhbGx5IGNhbGxpbmcgY29sbGVjdFN0eWxlcyB0d2ljZT9cXG5cXG5cIixcbiAgXCIzXCI6IFwiU3RyZWFtaW5nIFNTUiBpcyBvbmx5IHN1cHBvcnRlZCBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnQ7IFBsZWFzZSBkbyBub3QgdHJ5IHRvIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlIGJyb3dzZXIuXFxuXFxuXCIsXG4gIFwiNFwiOiBcIlRoZSBgU3R5bGVTaGVldE1hbmFnZXJgIGV4cGVjdHMgYSB2YWxpZCB0YXJnZXQgb3Igc2hlZXQgcHJvcCFcXG5cXG4tIERvZXMgdGhpcyBlcnJvciBvY2N1ciBvbiB0aGUgY2xpZW50IGFuZCBpcyB5b3VyIHRhcmdldCBmYWxzeT9cXG4tIERvZXMgdGhpcyBlcnJvciBvY2N1ciBvbiB0aGUgc2VydmVyIGFuZCBpcyB0aGUgc2hlZXQgZmFsc3k/XFxuXFxuXCIsXG4gIFwiNVwiOiBcIlRoZSBjbG9uZSBtZXRob2QgY2Fubm90IGJlIHVzZWQgb24gdGhlIGNsaWVudCFcXG5cXG4tIEFyZSB5b3UgcnVubmluZyBpbiBhIGNsaWVudC1saWtlIGVudmlyb25tZW50IG9uIHRoZSBzZXJ2ZXI/XFxuLSBBcmUgeW91IHRyeWluZyB0byBydW4gU1NSIG9uIHRoZSBjbGllbnQ/XFxuXFxuXCIsXG4gIFwiNlwiOiBcIlRyeWluZyB0byBpbnNlcnQgYSBuZXcgc3R5bGUgdGFnLCBidXQgdGhlIGdpdmVuIE5vZGUgaXMgdW5tb3VudGVkIVxcblxcbi0gQXJlIHlvdSB1c2luZyBhIGN1c3RvbSB0YXJnZXQgdGhhdCBpc24ndCBtb3VudGVkP1xcbi0gRG9lcyB5b3VyIGRvY3VtZW50IG5vdCBoYXZlIGEgdmFsaWQgaGVhZCBlbGVtZW50P1xcbi0gSGF2ZSB5b3UgYWNjaWRlbnRhbGx5IHJlbW92ZWQgYSBzdHlsZSB0YWcgbWFudWFsbHk/XFxuXFxuXCIsXG4gIFwiN1wiOiBcIlRoZW1lUHJvdmlkZXI6IFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciBcXFwidGhlbWVcXFwiIHByb3AgZnVuY3Rpb24sIGUuZy5cXG5cXG5gYGBqc1xcbnRoZW1lPXsoKSA9PiAoe30pfVxcbmBgYFxcblxcblwiLFxuICBcIjhcIjogXCJUaGVtZVByb3ZpZGVyOiBQbGVhc2UgbWFrZSB5b3VyIFxcXCJ0aGVtZVxcXCIgcHJvcCBhbiBvYmplY3QuXFxuXFxuXCIsXG4gIFwiOVwiOiBcIk1pc3NpbmcgZG9jdW1lbnQgYDxoZWFkPmBcXG5cXG5cIixcbiAgXCIxMFwiOiBcIkNhbm5vdCBmaW5kIGEgU3R5bGVTaGVldCBpbnN0YW5jZS4gVXN1YWxseSB0aGlzIGhhcHBlbnMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvcGllcyBvZiBzdHlsZWQtY29tcG9uZW50cyBsb2FkZWQgYXQgb25jZS4gQ2hlY2sgb3V0IHRoaXMgaXNzdWUgZm9yIGhvdyB0byB0cm91Ymxlc2hvb3QgYW5kIGZpeCB0aGUgY29tbW9uIGNhc2VzIHdoZXJlIHRoaXMgc2l0dWF0aW9uIGNhbiBoYXBwZW46IGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9pc3N1ZXMvMTk0MSNpc3N1ZWNvbW1lbnQtNDE3ODYyMDIxXFxuXFxuXCIsXG4gIFwiMTFcIjogXCJfVGhpcyBlcnJvciB3YXMgcmVwbGFjZWQgd2l0aCBhIGRldi10aW1lIHdhcm5pbmcsIGl0IHdpbGwgYmUgZGVsZXRlZCBmb3IgdjQgZmluYWwuXyBbY3JlYXRlR2xvYmFsU3R5bGVdIHJlY2VpdmVkIGNoaWxkcmVuIHdoaWNoIHdpbGwgbm90IGJlIHJlbmRlcmVkLiBQbGVhc2UgdXNlIHRoZSBjb21wb25lbnQgd2l0aG91dCBwYXNzaW5nIGNoaWxkcmVuIGVsZW1lbnRzLlxcblxcblwiLFxuICBcIjEyXCI6IFwiSXQgc2VlbXMgeW91IGFyZSBpbnRlcnBvbGF0aW5nIGEga2V5ZnJhbWUgZGVjbGFyYXRpb24gKCVzKSBpbnRvIGFuIHVudGFnZ2VkIHN0cmluZy4gVGhpcyB3YXMgc3VwcG9ydGVkIGluIHN0eWxlZC1jb21wb25lbnRzIHYzLCBidXQgaXMgbm90IGxvbmdlciBzdXBwb3J0ZWQgaW4gdjQgYXMga2V5ZnJhbWVzIGFyZSBub3cgaW5qZWN0ZWQgb24tZGVtYW5kLiBQbGVhc2Ugd3JhcCB5b3VyIHN0cmluZyBpbiB0aGUgY3NzXFxcXGBcXFxcYCBoZWxwZXIgd2hpY2ggZW5zdXJlcyB0aGUgc3R5bGVzIGFyZSBpbmplY3RlZCBjb3JyZWN0bHkuIFNlZSBodHRwczovL3d3dy5zdHlsZWQtY29tcG9uZW50cy5jb20vZG9jcy9hcGkjY3NzXFxuXFxuXCIsXG4gIFwiMTNcIjogXCIlcyBpcyBub3QgYSBzdHlsZWQgY29tcG9uZW50IGFuZCBjYW5ub3QgYmUgcmVmZXJyZWQgdG8gdmlhIGNvbXBvbmVudCBzZWxlY3Rvci4gU2VlIGh0dHBzOi8vd3d3LnN0eWxlZC1jb21wb25lbnRzLmNvbS9kb2NzL2FkdmFuY2VkI3JlZmVycmluZy10by1vdGhlci1jb21wb25lbnRzIGZvciBtb3JlIGRldGFpbHMuXFxuXFxuXCIsXG4gIFwiMTRcIjogXCJUaGVtZVByb3ZpZGVyOiBcXFwidGhlbWVcXFwiIHByb3AgaXMgcmVxdWlyZWQuXFxuXFxuXCIsXG4gIFwiMTVcIjogXCJBIHN0eWxpcyBwbHVnaW4gaGFzIGJlZW4gc3VwcGxpZWQgdGhhdCBpcyBub3QgbmFtZWQuIFdlIG5lZWQgYSBuYW1lIGZvciBlYWNoIHBsdWdpbiB0byBiZSBhYmxlIHRvIHByZXZlbnQgc3R5bGluZyBjb2xsaXNpb25zIGJldHdlZW4gZGlmZmVyZW50IHN0eWxpcyBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIHNhbWUgYXBwLiBCZWZvcmUgeW91IHBhc3MgeW91ciBwbHVnaW4gdG8gYDxTdHlsZVNoZWV0TWFuYWdlciBzdHlsaXNQbHVnaW5zPXtbXX0+YCwgcGxlYXNlIG1ha2Ugc3VyZSBlYWNoIHBsdWdpbiBpcyB1bmlxdWVseS1uYW1lZCwgZS5nLlxcblxcbmBgYGpzXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGltcG9ydGVkUGx1Z2luLCAnbmFtZScsIHsgdmFsdWU6ICdzb21lLXVuaXF1ZS1uYW1lJyB9KTtcXG5gYGBcXG5cXG5cIixcbiAgXCIxNlwiOiBcIlJlYWNoZWQgdGhlIGxpbWl0IG9mIGhvdyBtYW55IHN0eWxlZCBjb21wb25lbnRzIG1heSBiZSBjcmVhdGVkIGF0IGdyb3VwICVzLlxcbllvdSBtYXkgb25seSBjcmVhdGUgdXAgdG8gMSwwNzMsNzQxLDgyNCBjb21wb25lbnRzLiBJZiB5b3UncmUgY3JlYXRpbmcgY29tcG9uZW50cyBkeW5hbWljYWxseSxcXG5hcyBmb3IgaW5zdGFuY2UgaW4geW91ciByZW5kZXIgbWV0aG9kIHRoZW4geW91IG1heSBiZSBydW5uaW5nIGludG8gdGhpcyBsaW1pdGF0aW9uLlxcblxcblwiLFxuICBcIjE3XCI6IFwiQ1NTU3R5bGVTaGVldCBjb3VsZCBub3QgYmUgZm91bmQgb24gSFRNTFN0eWxlRWxlbWVudC5cXG5IYXMgc3R5bGVkLWNvbXBvbmVudHMnIHN0eWxlIHRhZyBiZWVuIHVubW91bnRlZCBvciBhbHRlcmVkIGJ5IGFub3RoZXIgc2NyaXB0P1xcblwiXG59O1xuXG4vLyBcbnZhciBFUlJPUlMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gZXJyb3JNYXAgOiB7fTtcbi8qKlxuICogc3VwZXIgYmFzaWMgdmVyc2lvbiBvZiBzcHJpbnRmXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0KCkge1xuICB2YXIgYSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1swXTtcbiAgdmFyIGIgPSBbXTtcblxuICBmb3IgKHZhciBjID0gMSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgYyA8IGxlbjsgYyArPSAxKSB7XG4gICAgYi5wdXNoKGMgPCAwIHx8IGFyZ3VtZW50cy5sZW5ndGggPD0gYyA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1tjXSk7XG4gIH1cblxuICBiLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICBhID0gYS5yZXBsYWNlKC8lW2Etel0vLCBkKTtcbiAgfSk7XG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBDcmVhdGUgYW4gZXJyb3IgZmlsZSBvdXQgb2YgZXJyb3JzLm1kIGZvciBkZXZlbG9wbWVudCBhbmQgYSBzaW1wbGUgd2ViIGxpbmsgdG8gdGhlIGZ1bGwgZXJyb3JzXG4gKiBpbiBwcm9kdWN0aW9uIG1vZGUuXG4gKi9cblxuXG5mdW5jdGlvbiB0aHJvd1N0eWxlZENvbXBvbmVudHNFcnJvcihjb2RlKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBpbnRlcnBvbGF0aW9ucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgaW50ZXJwb2xhdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9ibG9iL21hc3Rlci9wYWNrYWdlcy9zdHlsZWQtY29tcG9uZW50cy9zcmMvdXRpbHMvZXJyb3JzLm1kI1wiICsgY29kZSArIFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICsgKGludGVycG9sYXRpb25zLmxlbmd0aCA+IDAgPyBcIiBBZGRpdGlvbmFsIGFyZ3VtZW50czogXCIgKyBpbnRlcnBvbGF0aW9ucy5qb2luKCcsICcpIDogJycpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0LmFwcGx5KHZvaWQgMCwgW0VSUk9SU1tjb2RlXV0uY29uY2F0KGludGVycG9sYXRpb25zKSkudHJpbSgpKTtcbiAgfVxufVxuXG4vLyBcbnZhciBFTEVNRU5UX1RZUEUgPSAxO1xuLyogTm9kZS5FTEVNRU5UX1RZUEUgKi9cblxuLyoqIEZpbmQgbGFzdCBzdHlsZSBlbGVtZW50IGlmIGFueSBpbnNpZGUgdGFyZ2V0ICovXG5cbnZhciBmaW5kTGFzdFN0eWxlVGFnID0gZnVuY3Rpb24gZmluZExhc3RTdHlsZVRhZyh0YXJnZXQpIHtcbiAgdmFyIGNoaWxkTm9kZXMgPSB0YXJnZXQuY2hpbGROb2RlcztcblxuICBmb3IgKHZhciBpID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGROb2Rlc1tpXTtcblxuICAgIGlmIChjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9UWVBFICYmIGNoaWxkLmhhc0F0dHJpYnV0ZShTQ19BVFRSKSkge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuLyoqIENyZWF0ZSBhIHN0eWxlIGVsZW1lbnQgaW5zaWRlIGB0YXJnZXRgIG9yIDxoZWFkPiBhZnRlciB0aGUgbGFzdCAqL1xuXG5cbnZhciBtYWtlU3R5bGVUYWcgPSBmdW5jdGlvbiBtYWtlU3R5bGVUYWcodGFyZ2V0KSB7XG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZDtcbiAgdmFyIHBhcmVudCA9IHRhcmdldCB8fCBoZWFkO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB2YXIgcHJldlN0eWxlID0gZmluZExhc3RTdHlsZVRhZyhwYXJlbnQpO1xuICB2YXIgbmV4dFNpYmxpbmcgPSBwcmV2U3R5bGUgIT09IHVuZGVmaW5lZCA/IHByZXZTdHlsZS5uZXh0U2libGluZyA6IG51bGw7XG4gIHN0eWxlLnNldEF0dHJpYnV0ZShTQ19BVFRSLCBTQ19BVFRSX0FDVElWRSk7XG4gIHN0eWxlLnNldEF0dHJpYnV0ZShTQ19BVFRSX1ZFUlNJT04sIFNDX1ZFUlNJT04pO1xuICB2YXIgbm9uY2UgPSBnZXROb25jZSgpO1xuICBpZiAobm9uY2UpIHN0eWxlLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gIHBhcmVudC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcbiAgcmV0dXJuIHN0eWxlO1xufTtcbi8qKiBHZXQgdGhlIENTU1N0eWxlU2hlZXQgaW5zdGFuY2UgZm9yIGEgZ2l2ZW4gc3R5bGUgZWxlbWVudCAqL1xuXG52YXIgZ2V0U2hlZXQgPSBmdW5jdGlvbiBnZXRTaGVldCh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gQXZvaWQgRmlyZWZveCBxdWlyayB3aGVyZSB0aGUgc3R5bGUgZWxlbWVudCBtaWdodCBub3QgaGF2ZSBhIHNoZWV0IHByb3BlcnR5XG5cblxuICB2YXIgX2RvY3VtZW50ID0gZG9jdW1lbnQsXG4gICAgICBzdHlsZVNoZWV0cyA9IF9kb2N1bWVudC5zdHlsZVNoZWV0cztcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IHN0eWxlU2hlZXRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBzaGVldCA9IHN0eWxlU2hlZXRzW2ldO1xuXG4gICAgaWYgKHNoZWV0Lm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gc2hlZXQ7XG4gICAgfVxuICB9XG5cbiAgdGhyb3dTdHlsZWRDb21wb25lbnRzRXJyb3IoMTcpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLy8gXG4vKiogQ3JlYXRlIGEgQ1NTU3R5bGVTaGVldC1saWtlIHRhZyBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50ICovXG5cbnZhciBtYWtlVGFnID0gZnVuY3Rpb24gbWFrZVRhZyhfcmVmKSB7XG4gIHZhciBpc1NlcnZlciA9IF9yZWYuaXNTZXJ2ZXIsXG4gICAgICB1c2VDU1NPTUluamVjdGlvbiA9IF9yZWYudXNlQ1NTT01JbmplY3Rpb24sXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldDtcblxuICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFZpcnR1YWxUYWcodGFyZ2V0KTtcbiAgfSBlbHNlIGlmICh1c2VDU1NPTUluamVjdGlvbikge1xuICAgIHJldHVybiBuZXcgQ1NTT01UYWcodGFyZ2V0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFRleHRUYWcodGFyZ2V0KTtcbiAgfVxufTtcbnZhciBDU1NPTVRhZyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENTU09NVGFnKHRhcmdldCkge1xuICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50ID0gbWFrZVN0eWxlVGFnKHRhcmdldCk7IC8vIEF2b2lkIEVkZ2UgYnVnIHdoZXJlIGVtcHR5IHN0eWxlIGVsZW1lbnRzIGRvbid0IGNyZWF0ZSBzaGVldHNcblxuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgICB0aGlzLnNoZWV0ID0gZ2V0U2hlZXQoZWxlbWVudCk7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IENTU09NVGFnLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaW5zZXJ0UnVsZSA9IGZ1bmN0aW9uIGluc2VydFJ1bGUoaW5kZXgsIHJ1bGUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zaGVldC5pbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmRlbGV0ZVJ1bGUgPSBmdW5jdGlvbiBkZWxldGVSdWxlKGluZGV4KSB7XG4gICAgdGhpcy5zaGVldC5kZWxldGVSdWxlKGluZGV4KTtcbiAgICB0aGlzLmxlbmd0aC0tO1xuICB9O1xuXG4gIF9wcm90by5nZXRSdWxlID0gZnVuY3Rpb24gZ2V0UnVsZShpbmRleCkge1xuICAgIHZhciBydWxlID0gdGhpcy5zaGVldC5jc3NSdWxlc1tpbmRleF07IC8vIEF2b2lkIElFMTEgcXVpcmsgd2hlcmUgY3NzVGV4dCBpcyBpbmFjY2Vzc2libGUgb24gc29tZSBpbnZhbGlkIHJ1bGVzXG5cbiAgICBpZiAocnVsZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBydWxlLmNzc1RleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcnVsZS5jc3NUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDU1NPTVRhZztcbn0oKTtcbi8qKiBBIFRhZyB0aGF0IGVtdWxhdGVzIHRoZSBDU1NTdHlsZVNoZWV0IEFQSSBidXQgdXNlcyB0ZXh0IG5vZGVzICovXG5cbnZhciBUZXh0VGFnID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVGV4dFRhZyh0YXJnZXQpIHtcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCA9IG1ha2VTdHlsZVRhZyh0YXJnZXQpO1xuICAgIHRoaXMubm9kZXMgPSBlbGVtZW50LmNoaWxkTm9kZXM7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgdmFyIF9wcm90bzIgPSBUZXh0VGFnLnByb3RvdHlwZTtcblxuICBfcHJvdG8yLmluc2VydFJ1bGUgPSBmdW5jdGlvbiBpbnNlcnRSdWxlKGluZGV4LCBydWxlKSB7XG4gICAgaWYgKGluZGV4IDw9IHRoaXMubGVuZ3RoICYmIGluZGV4ID49IDApIHtcbiAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSk7XG4gICAgICB2YXIgcmVmTm9kZSA9IHRoaXMubm9kZXNbaW5kZXhdO1xuICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShub2RlLCByZWZOb2RlIHx8IG51bGwpO1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzIuZGVsZXRlUnVsZSA9IGZ1bmN0aW9uIGRlbGV0ZVJ1bGUoaW5kZXgpIHtcbiAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5ub2Rlc1tpbmRleF0pO1xuICAgIHRoaXMubGVuZ3RoLS07XG4gIH07XG5cbiAgX3Byb3RvMi5nZXRSdWxlID0gZnVuY3Rpb24gZ2V0UnVsZShpbmRleCkge1xuICAgIGlmIChpbmRleCA8IHRoaXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2Rlc1tpbmRleF0udGV4dENvbnRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFRleHRUYWc7XG59KCk7XG4vKiogQSBjb21wbGV0ZWx5IHZpcnR1YWwgKHNlcnZlci1zaWRlKSBUYWcgdGhhdCBkb2Vzbid0IG1hbmlwdWxhdGUgdGhlIERPTSAqL1xuXG52YXIgVmlydHVhbFRhZyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFZpcnR1YWxUYWcoX3RhcmdldCkge1xuICAgIHRoaXMucnVsZXMgPSBbXTtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH1cblxuICB2YXIgX3Byb3RvMyA9IFZpcnR1YWxUYWcucHJvdG90eXBlO1xuXG4gIF9wcm90bzMuaW5zZXJ0UnVsZSA9IGZ1bmN0aW9uIGluc2VydFJ1bGUoaW5kZXgsIHJ1bGUpIHtcbiAgICBpZiAoaW5kZXggPD0gdGhpcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucnVsZXMuc3BsaWNlKGluZGV4LCAwLCBydWxlKTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zLmRlbGV0ZVJ1bGUgPSBmdW5jdGlvbiBkZWxldGVSdWxlKGluZGV4KSB7XG4gICAgdGhpcy5ydWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMubGVuZ3RoLS07XG4gIH07XG5cbiAgX3Byb3RvMy5nZXRSdWxlID0gZnVuY3Rpb24gZ2V0UnVsZShpbmRleCkge1xuICAgIGlmIChpbmRleCA8IHRoaXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ydWxlc1tpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFZpcnR1YWxUYWc7XG59KCk7XG5cbi8vIFxuLyoqIENyZWF0ZSBhIEdyb3VwZWRUYWcgd2l0aCBhbiB1bmRlcmx5aW5nIFRhZyBpbXBsZW1lbnRhdGlvbiAqL1xuXG52YXIgbWFrZUdyb3VwZWRUYWcgPSBmdW5jdGlvbiBtYWtlR3JvdXBlZFRhZyh0YWcpIHtcbiAgcmV0dXJuIG5ldyBEZWZhdWx0R3JvdXBlZFRhZyh0YWcpO1xufTtcbnZhciBCQVNFX1NJWkUgPSAxIDw8IDk7XG5cbnZhciBEZWZhdWx0R3JvdXBlZFRhZyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIERlZmF1bHRHcm91cGVkVGFnKHRhZykge1xuICAgIHRoaXMuZ3JvdXBTaXplcyA9IG5ldyBVaW50MzJBcnJheShCQVNFX1NJWkUpO1xuICAgIHRoaXMubGVuZ3RoID0gQkFTRV9TSVpFO1xuICAgIHRoaXMudGFnID0gdGFnO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IERlZmF1bHRHcm91cGVkVGFnLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaW5kZXhPZkdyb3VwID0gZnVuY3Rpb24gaW5kZXhPZkdyb3VwKGdyb3VwKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXA7IGkrKykge1xuICAgICAgaW5kZXggKz0gdGhpcy5ncm91cFNpemVzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0UnVsZXMgPSBmdW5jdGlvbiBpbnNlcnRSdWxlcyhncm91cCwgcnVsZXMpIHtcbiAgICBpZiAoZ3JvdXAgPj0gdGhpcy5ncm91cFNpemVzLmxlbmd0aCkge1xuICAgICAgdmFyIG9sZEJ1ZmZlciA9IHRoaXMuZ3JvdXBTaXplcztcbiAgICAgIHZhciBvbGRTaXplID0gb2xkQnVmZmVyLmxlbmd0aDtcbiAgICAgIHZhciBuZXdTaXplID0gb2xkU2l6ZTtcblxuICAgICAgd2hpbGUgKGdyb3VwID49IG5ld1NpemUpIHtcbiAgICAgICAgbmV3U2l6ZSA8PD0gMTtcblxuICAgICAgICBpZiAobmV3U2l6ZSA8IDApIHtcbiAgICAgICAgICB0aHJvd1N0eWxlZENvbXBvbmVudHNFcnJvcigxNiwgXCJcIiArIGdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdyb3VwU2l6ZXMgPSBuZXcgVWludDMyQXJyYXkobmV3U2l6ZSk7XG4gICAgICB0aGlzLmdyb3VwU2l6ZXMuc2V0KG9sZEJ1ZmZlcik7XG4gICAgICB0aGlzLmxlbmd0aCA9IG5ld1NpemU7XG5cbiAgICAgIGZvciAodmFyIGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBTaXplc1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJ1bGVJbmRleCA9IHRoaXMuaW5kZXhPZkdyb3VwKGdyb3VwICsgMSk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDAsIGwgPSBydWxlcy5sZW5ndGg7IF9pIDwgbDsgX2krKykge1xuICAgICAgaWYgKHRoaXMudGFnLmluc2VydFJ1bGUocnVsZUluZGV4LCBydWxlc1tfaV0pKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBTaXplc1tncm91cF0rKztcbiAgICAgICAgcnVsZUluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhckdyb3VwID0gZnVuY3Rpb24gY2xlYXJHcm91cChncm91cCkge1xuICAgIGlmIChncm91cCA8IHRoaXMubGVuZ3RoKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gdGhpcy5ncm91cFNpemVzW2dyb3VwXTtcbiAgICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5pbmRleE9mR3JvdXAoZ3JvdXApO1xuICAgICAgdmFyIGVuZEluZGV4ID0gc3RhcnRJbmRleCArIGxlbmd0aDtcbiAgICAgIHRoaXMuZ3JvdXBTaXplc1tncm91cF0gPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspIHtcbiAgICAgICAgdGhpcy50YWcuZGVsZXRlUnVsZShzdGFydEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldEdyb3VwID0gZnVuY3Rpb24gZ2V0R3JvdXAoZ3JvdXApIHtcbiAgICB2YXIgY3NzID0gJyc7XG5cbiAgICBpZiAoZ3JvdXAgPj0gdGhpcy5sZW5ndGggfHwgdGhpcy5ncm91cFNpemVzW2dyb3VwXSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5ncm91cFNpemVzW2dyb3VwXTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuaW5kZXhPZkdyb3VwKGdyb3VwKTtcbiAgICB2YXIgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgbGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICBjc3MgKz0gXCJcIiArIHRoaXMudGFnLmdldFJ1bGUoaSkgKyBTUExJVFRFUjtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9O1xuXG4gIHJldHVybiBEZWZhdWx0R3JvdXBlZFRhZztcbn0oKTtcblxuLy8gXG52YXIgTUFYX1NNSSA9IDEgPDwgMzEgLSAxO1xudmFyIGdyb3VwSURSZWdpc3RlciA9IG5ldyBNYXAoKTtcbnZhciByZXZlcnNlUmVnaXN0ZXIgPSBuZXcgTWFwKCk7XG52YXIgbmV4dEZyZWVHcm91cCA9IDE7XG52YXIgZ2V0R3JvdXBGb3JJZCA9IGZ1bmN0aW9uIGdldEdyb3VwRm9ySWQoaWQpIHtcbiAgaWYgKGdyb3VwSURSZWdpc3Rlci5oYXMoaWQpKSB7XG4gICAgcmV0dXJuIGdyb3VwSURSZWdpc3Rlci5nZXQoaWQpO1xuICB9XG5cbiAgdmFyIGdyb3VwID0gbmV4dEZyZWVHcm91cCsrO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICgoZ3JvdXAgfCAwKSA8IDAgfHwgZ3JvdXAgPiBNQVhfU01JKSkge1xuICAgIHRocm93U3R5bGVkQ29tcG9uZW50c0Vycm9yKDE2LCBcIlwiICsgZ3JvdXApO1xuICB9XG5cbiAgZ3JvdXBJRFJlZ2lzdGVyLnNldChpZCwgZ3JvdXApO1xuICByZXZlcnNlUmVnaXN0ZXIuc2V0KGdyb3VwLCBpZCk7XG4gIHJldHVybiBncm91cDtcbn07XG52YXIgZ2V0SWRGb3JHcm91cCA9IGZ1bmN0aW9uIGdldElkRm9yR3JvdXAoZ3JvdXApIHtcbiAgcmV0dXJuIHJldmVyc2VSZWdpc3Rlci5nZXQoZ3JvdXApO1xufTtcbnZhciBzZXRHcm91cEZvcklkID0gZnVuY3Rpb24gc2V0R3JvdXBGb3JJZChpZCwgZ3JvdXApIHtcbiAgaWYgKGdyb3VwID49IG5leHRGcmVlR3JvdXApIHtcbiAgICBuZXh0RnJlZUdyb3VwID0gZ3JvdXAgKyAxO1xuICB9XG5cbiAgZ3JvdXBJRFJlZ2lzdGVyLnNldChpZCwgZ3JvdXApO1xuICByZXZlcnNlUmVnaXN0ZXIuc2V0KGdyb3VwLCBpZCk7XG59O1xuXG4vLyBcbnZhciBTRUxFQ1RPUiA9IFwic3R5bGVbXCIgKyBTQ19BVFRSICsgXCJdW1wiICsgU0NfQVRUUl9WRVJTSU9OICsgXCI9XFxcIlwiICsgU0NfVkVSU0lPTiArIFwiXFxcIl1cIjtcbnZhciBNQVJLRVJfUkUgPSBuZXcgUmVnRXhwKFwiXlwiICsgU0NfQVRUUiArIFwiXFxcXC5nKFxcXFxkKylcXFxcW2lkPVxcXCIoW1xcXFx3XFxcXGQtXSspXFxcIlxcXFxdLio/XFxcIihbXlxcXCJdKilcIik7XG52YXIgb3V0cHV0U2hlZXQgPSBmdW5jdGlvbiBvdXRwdXRTaGVldChzaGVldCkge1xuICB2YXIgdGFnID0gc2hlZXQuZ2V0VGFnKCk7XG4gIHZhciBsZW5ndGggPSB0YWcubGVuZ3RoO1xuICB2YXIgY3NzID0gJyc7XG5cbiAgZm9yICh2YXIgZ3JvdXAgPSAwOyBncm91cCA8IGxlbmd0aDsgZ3JvdXArKykge1xuICAgIHZhciBpZCA9IGdldElkRm9yR3JvdXAoZ3JvdXApO1xuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICB2YXIgbmFtZXMgPSBzaGVldC5uYW1lcy5nZXQoaWQpO1xuICAgIHZhciBydWxlcyA9IHRhZy5nZXRHcm91cChncm91cCk7XG4gICAgaWYgKG5hbWVzID09PSB1bmRlZmluZWQgfHwgcnVsZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICB2YXIgc2VsZWN0b3IgPSBTQ19BVFRSICsgXCIuZ1wiICsgZ3JvdXAgKyBcIltpZD1cXFwiXCIgKyBpZCArIFwiXFxcIl1cIjtcbiAgICB2YXIgY29udGVudCA9ICcnO1xuXG4gICAgaWYgKG5hbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnRlbnQgKz0gbmFtZSArIFwiLFwiO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIE5PVEU6IEl0J3MgZWFzaWVyIHRvIGNvbGxlY3QgcnVsZXMgYW5kIGhhdmUgdGhlIG1hcmtlclxuICAgIC8vIGFmdGVyIHRoZSBhY3R1YWwgcnVsZXMgdG8gc2ltcGxpZnkgdGhlIHJlaHlkcmF0aW9uXG5cblxuICAgIGNzcyArPSBcIlwiICsgcnVsZXMgKyBzZWxlY3RvciArIFwie2NvbnRlbnQ6XFxcIlwiICsgY29udGVudCArIFwiXFxcIn1cIiArIFNQTElUVEVSO1xuICB9XG5cbiAgcmV0dXJuIGNzcztcbn07XG5cbnZhciByZWh5ZHJhdGVOYW1lc0Zyb21Db250ZW50ID0gZnVuY3Rpb24gcmVoeWRyYXRlTmFtZXNGcm9tQ29udGVudChzaGVldCwgaWQsIGNvbnRlbnQpIHtcbiAgdmFyIG5hbWVzID0gY29udGVudC5zcGxpdCgnLCcpO1xuICB2YXIgbmFtZTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGlmIChuYW1lID0gbmFtZXNbaV0pIHtcbiAgICAgIHNoZWV0LnJlZ2lzdGVyTmFtZShpZCwgbmFtZSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcmVoeWRyYXRlU2hlZXRGcm9tVGFnID0gZnVuY3Rpb24gcmVoeWRyYXRlU2hlZXRGcm9tVGFnKHNoZWV0LCBzdHlsZSkge1xuICB2YXIgcGFydHMgPSBzdHlsZS5pbm5lckhUTUwuc3BsaXQoU1BMSVRURVIpO1xuICB2YXIgcnVsZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFydHNbaV0udHJpbSgpO1xuICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgdmFyIG1hcmtlciA9IHBhcnQubWF0Y2goTUFSS0VSX1JFKTtcblxuICAgIGlmIChtYXJrZXIpIHtcbiAgICAgIHZhciBncm91cCA9IHBhcnNlSW50KG1hcmtlclsxXSwgMTApIHwgMDtcbiAgICAgIHZhciBpZCA9IG1hcmtlclsyXTtcblxuICAgICAgaWYgKGdyb3VwICE9PSAwKSB7XG4gICAgICAgIC8vIFJlaHlkcmF0ZSBjb21wb25lbnRJZCB0byBncm91cCBpbmRleCBtYXBwaW5nXG4gICAgICAgIHNldEdyb3VwRm9ySWQoaWQsIGdyb3VwKTsgLy8gUmVoeWRyYXRlIG5hbWVzIGFuZCBydWxlc1xuICAgICAgICAvLyBsb29rcyBsaWtlOiBkYXRhLXN0eWxlZC5nMTFbaWQ9XCJpZEFcIl17Y29udGVudDpcIm5hbWVBLFwifVxuXG4gICAgICAgIHJlaHlkcmF0ZU5hbWVzRnJvbUNvbnRlbnQoc2hlZXQsIGlkLCBtYXJrZXJbM10pO1xuICAgICAgICBzaGVldC5nZXRUYWcoKS5pbnNlcnRSdWxlcyhncm91cCwgcnVsZXMpO1xuICAgICAgfVxuXG4gICAgICBydWxlcy5sZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBydWxlcy5wdXNoKHBhcnQpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHJlaHlkcmF0ZVNoZWV0ID0gZnVuY3Rpb24gcmVoeWRyYXRlU2hlZXQoc2hlZXQpIHtcbiAgdmFyIG5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTRUxFQ1RPUik7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgaWYgKG5vZGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoU0NfQVRUUikgIT09IFNDX0FUVFJfQUNUSVZFKSB7XG4gICAgICByZWh5ZHJhdGVTaGVldEZyb21UYWcoc2hlZXQsIG5vZGUpO1xuXG4gICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbnZhciBTSE9VTERfUkVIWURSQVRFID0gSVNfQlJPV1NFUjtcbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgaXNTZXJ2ZXI6ICFJU19CUk9XU0VSLFxuICB1c2VDU1NPTUluamVjdGlvbjogIURJU0FCTEVfU1BFRURZXG59O1xuLyoqIENvbnRhaW5zIHRoZSBtYWluIHN0eWxlc2hlZXQgbG9naWMgZm9yIHN0cmluZ2lmaWNhdGlvbiBhbmQgY2FjaGluZyAqL1xuXG52YXIgU3R5bGVTaGVldCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIC8qKiBSZWdpc3RlciBhIGdyb3VwIElEIHRvIGdpdmUgaXQgYW4gaW5kZXggKi9cbiAgU3R5bGVTaGVldC5yZWdpc3RlcklkID0gZnVuY3Rpb24gcmVnaXN0ZXJJZChpZCkge1xuICAgIHJldHVybiBnZXRHcm91cEZvcklkKGlkKTtcbiAgfTtcblxuICBmdW5jdGlvbiBTdHlsZVNoZWV0KG9wdGlvbnMsIGdsb2JhbFN0eWxlcywgbmFtZXMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbFN0eWxlcyA9PT0gdm9pZCAwKSB7XG4gICAgICBnbG9iYWxTdHlsZXMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdE9wdGlvbnMsIHt9LCBvcHRpb25zKTtcbiAgICB0aGlzLmdzID0gZ2xvYmFsU3R5bGVzO1xuICAgIHRoaXMubmFtZXMgPSBuZXcgTWFwKG5hbWVzKTsgLy8gV2UgcmVoeWRyYXRlIG9ubHkgb25jZSBhbmQgdXNlIHRoZSBzaGVldCB0aGF0IGlzIGNyZWF0ZWQgZmlyc3RcblxuICAgIGlmICghdGhpcy5vcHRpb25zLmlzU2VydmVyICYmIElTX0JST1dTRVIgJiYgU0hPVUxEX1JFSFlEUkFURSkge1xuICAgICAgU0hPVUxEX1JFSFlEUkFURSA9IGZhbHNlO1xuICAgICAgcmVoeWRyYXRlU2hlZXQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5yZWNvbnN0cnVjdFdpdGhPcHRpb25zID0gZnVuY3Rpb24gcmVjb25zdHJ1Y3RXaXRoT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBTdHlsZVNoZWV0KF9leHRlbmRzKHt9LCB0aGlzLm9wdGlvbnMsIHt9LCBvcHRpb25zKSwgdGhpcy5ncywgdGhpcy5uYW1lcyk7XG4gIH07XG5cbiAgX3Byb3RvLmFsbG9jYXRlR1NJbnN0YW5jZSA9IGZ1bmN0aW9uIGFsbG9jYXRlR1NJbnN0YW5jZShpZCkge1xuICAgIHJldHVybiB0aGlzLmdzW2lkXSA9ICh0aGlzLmdzW2lkXSB8fCAwKSArIDE7XG4gIH1cbiAgLyoqIExhemlseSBpbml0aWFsaXNlcyBhIEdyb3VwZWRUYWcgZm9yIHdoZW4gaXQncyBhY3R1YWxseSBuZWVkZWQgKi9cbiAgO1xuXG4gIF9wcm90by5nZXRUYWcgPSBmdW5jdGlvbiBnZXRUYWcoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFnIHx8ICh0aGlzLnRhZyA9IG1ha2VHcm91cGVkVGFnKG1ha2VUYWcodGhpcy5vcHRpb25zKSkpO1xuICB9XG4gIC8qKiBDaGVjayB3aGV0aGVyIGEgbmFtZSBpcyBrbm93biBmb3IgY2FjaGluZyAqL1xuICA7XG5cbiAgX3Byb3RvLmhhc05hbWVGb3JJZCA9IGZ1bmN0aW9uIGhhc05hbWVGb3JJZChpZCwgbmFtZSkge1xuICAgIHJldHVybiB0aGlzLm5hbWVzLmhhcyhpZCkgJiYgdGhpcy5uYW1lcy5nZXQoaWQpLmhhcyhuYW1lKTtcbiAgfVxuICAvKiogTWFyayBhIGdyb3VwJ3MgbmFtZSBhcyBrbm93biBmb3IgY2FjaGluZyAqL1xuICA7XG5cbiAgX3Byb3RvLnJlZ2lzdGVyTmFtZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyTmFtZShpZCwgbmFtZSkge1xuICAgIGdldEdyb3VwRm9ySWQoaWQpO1xuXG4gICAgaWYgKCF0aGlzLm5hbWVzLmhhcyhpZCkpIHtcbiAgICAgIHZhciBncm91cE5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgZ3JvdXBOYW1lcy5hZGQobmFtZSk7XG4gICAgICB0aGlzLm5hbWVzLnNldChpZCwgZ3JvdXBOYW1lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmFtZXMuZ2V0KGlkKS5hZGQobmFtZSk7XG4gICAgfVxuICB9XG4gIC8qKiBJbnNlcnQgbmV3IHJ1bGVzIHdoaWNoIGFsc28gbWFya3MgdGhlIG5hbWUgYXMga25vd24gKi9cbiAgO1xuXG4gIF9wcm90by5pbnNlcnRSdWxlcyA9IGZ1bmN0aW9uIGluc2VydFJ1bGVzKGlkLCBuYW1lLCBydWxlcykge1xuICAgIHRoaXMucmVnaXN0ZXJOYW1lKGlkLCBuYW1lKTtcbiAgICB0aGlzLmdldFRhZygpLmluc2VydFJ1bGVzKGdldEdyb3VwRm9ySWQoaWQpLCBydWxlcyk7XG4gIH1cbiAgLyoqIENsZWFycyBhbGwgY2FjaGVkIG5hbWVzIGZvciBhIGdpdmVuIGdyb3VwIElEICovXG4gIDtcblxuICBfcHJvdG8uY2xlYXJOYW1lcyA9IGZ1bmN0aW9uIGNsZWFyTmFtZXMoaWQpIHtcbiAgICBpZiAodGhpcy5uYW1lcy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLm5hbWVzLmdldChpZCkuY2xlYXIoKTtcbiAgICB9XG4gIH1cbiAgLyoqIENsZWFycyBhbGwgcnVsZXMgZm9yIGEgZ2l2ZW4gZ3JvdXAgSUQgKi9cbiAgO1xuXG4gIF9wcm90by5jbGVhclJ1bGVzID0gZnVuY3Rpb24gY2xlYXJSdWxlcyhpZCkge1xuICAgIHRoaXMuZ2V0VGFnKCkuY2xlYXJHcm91cChnZXRHcm91cEZvcklkKGlkKSk7XG4gICAgdGhpcy5jbGVhck5hbWVzKGlkKTtcbiAgfVxuICAvKiogQ2xlYXJzIHRoZSBlbnRpcmUgdGFnIHdoaWNoIGRlbGV0ZXMgYWxsIHJ1bGVzIGJ1dCBub3QgaXRzIG5hbWVzICovXG4gIDtcblxuICBfcHJvdG8uY2xlYXJUYWcgPSBmdW5jdGlvbiBjbGVhclRhZygpIHtcbiAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGNsZWFyIHRoZSBuYW1lcywgc2luY2UgaXQncyBvbmx5IHVzZWQgZHVyaW5nIFNTUlxuICAgIC8vIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVvdXNseSBvdXRwdXQgb25seSBuZXcgcnVsZXNcbiAgICB0aGlzLnRhZyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKiogT3V0cHV0cyB0aGUgY3VycmVudCBzaGVldCBhcyBhIENTUyBzdHJpbmcgd2l0aCBtYXJrZXJzIGZvciBTU1IgKi9cbiAgO1xuXG4gIF9wcm90by50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBvdXRwdXRTaGVldCh0aGlzKTtcbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuLy8gXG5cbi8qIGVzbGludC1kaXNhYmxlICovXG52YXIgU0VFRCA9IDUzODE7IC8vIFdoZW4gd2UgaGF2ZSBzZXBhcmF0ZSBzdHJpbmdzIGl0J3MgdXNlZnVsIHRvIHJ1biBhIHByb2dyZXNzaXZlXG4vLyB2ZXJzaW9uIG9mIGRqYjIgd2hlcmUgd2UgcHJldGVuZCB0aGF0IHdlJ3JlIHN0aWxsIGxvb3Bpbmcgb3ZlclxuLy8gdGhlIHNhbWUgc3RyaW5nXG5cbnZhciBwaGFzaCA9IGZ1bmN0aW9uIHBoYXNoKGgsIHgpIHtcbiAgdmFyIGkgPSB4Lmxlbmd0aDtcblxuICB3aGlsZSAoaSkge1xuICAgIGggPSBoICogMzMgXiB4LmNoYXJDb2RlQXQoLS1pKTtcbiAgfVxuXG4gIHJldHVybiBoO1xufTsgLy8gVGhpcyBpcyBhIGRqYjIgaGFzaGluZyBmdW5jdGlvblxuXG52YXIgaGFzaCA9IGZ1bmN0aW9uIGhhc2goeCkge1xuICByZXR1cm4gcGhhc2goU0VFRCwgeCk7XG59O1xuXG4vKipcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE2IFN1bHRhbiBUYXJpbW9cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1NcbiAqIE9SIElNUExJRUQgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLFxuICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUlxuICogSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuZnVuY3Rpb24gaW5zZXJ0UnVsZVBsdWdpbiAoaW5zZXJ0UnVsZSkge1xuICB2YXIgZGVsaW1pdGVyID0gJy8qfCovJztcbiAgdmFyIG5lZWRsZSA9IGRlbGltaXRlciArIFwifVwiO1xuXG4gIGZ1bmN0aW9uIHRvU2hlZXQoYmxvY2spIHtcbiAgICBpZiAoYmxvY2spIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGluc2VydFJ1bGUoYmxvY2sgKyBcIn1cIik7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBydWxlU2hlZXQoY29udGV4dCwgY29udGVudCwgc2VsZWN0b3JzLCBwYXJlbnRzLCBsaW5lLCBjb2x1bW4sIGxlbmd0aCwgbnMsIGRlcHRoLCBhdCkge1xuICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgLy8gcHJvcGVydHlcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gQGltcG9ydFxuICAgICAgICBpZiAoZGVwdGggPT09IDAgJiYgY29udGVudC5jaGFyQ29kZUF0KDApID09PSA2NCkgcmV0dXJuIGluc2VydFJ1bGUoY29udGVudCArIFwiO1wiKSwgJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2VsZWN0b3JcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBpZiAobnMgPT09IDApIHJldHVybiBjb250ZW50ICsgZGVsaW1pdGVyO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGF0LXJ1bGVcblxuICAgICAgY2FzZSAzOlxuICAgICAgICBzd2l0Y2ggKG5zKSB7XG4gICAgICAgICAgLy8gQGZvbnQtZmFjZSwgQHBhZ2VcbiAgICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHJldHVybiBpbnNlcnRSdWxlKHNlbGVjdG9yc1swXSArIGNvbnRlbnQpLCAnJztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29udGVudCArIChhdCA9PT0gMCA/IGRlbGltaXRlciA6ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIC0yOlxuICAgICAgICBjb250ZW50LnNwbGl0KG5lZWRsZSkuZm9yRWFjaCh0b1NoZWV0KTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBDT01NRU5UX1JFR0VYID0gL15cXHMqXFwvXFwvLiokL2dtO1xuZnVuY3Rpb24gY3JlYXRlU3R5bGlzSW5zdGFuY2UoX3RlbXApIHtcbiAgdmFyIF9yZWYgPSBfdGVtcCA9PT0gdm9pZCAwID8gRU1QVFlfT0JKRUNUIDogX3RlbXAsXG4gICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyBFTVBUWV9PQkpFQ1QgOiBfcmVmJG9wdGlvbnMsXG4gICAgICBfcmVmJHBsdWdpbnMgPSBfcmVmLnBsdWdpbnMsXG4gICAgICBwbHVnaW5zID0gX3JlZiRwbHVnaW5zID09PSB2b2lkIDAgPyBFTVBUWV9BUlJBWSA6IF9yZWYkcGx1Z2lucztcblxuICB2YXIgc3R5bGlzID0gbmV3IFN0eWxpcyhvcHRpb25zKTsgLy8gV3JhcCBgaW5zZXJ0UnVsZVBsdWdpbiB0byBidWlsZCBhIGxpc3Qgb2YgcnVsZXMsXG4gIC8vIGFuZCB0aGVuIG1ha2Ugb3VyIG93biBwbHVnaW4gdG8gcmV0dXJuIHRoZSBydWxlcy4gVGhpc1xuICAvLyBtYWtlcyBpdCBlYXNpZXIgdG8gaG9vayBpbnRvIHRoZSBleGlzdGluZyBTU1IgYXJjaGl0ZWN0dXJlXG5cbiAgdmFyIHBhcnNpbmdSdWxlcyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblxuICB2YXIgcmV0dXJuUnVsZXNQbHVnaW4gPSBmdW5jdGlvbiByZXR1cm5SdWxlc1BsdWdpbihjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IC0yKSB7XG4gICAgICB2YXIgcGFyc2VkUnVsZXMgPSBwYXJzaW5nUnVsZXM7XG4gICAgICBwYXJzaW5nUnVsZXMgPSBbXTtcbiAgICAgIHJldHVybiBwYXJzZWRSdWxlcztcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhcnNlUnVsZXNQbHVnaW4gPSBpbnNlcnRSdWxlUGx1Z2luKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcGFyc2luZ1J1bGVzLnB1c2gocnVsZSk7XG4gIH0pO1xuXG4gIHZhciBfY29tcG9uZW50SWQ7XG5cbiAgdmFyIF9zZWxlY3RvcjtcblxuICB2YXIgX3NlbGVjdG9yUmVnZXhwO1xuXG4gIHZhciBzZWxmUmVmZXJlbmNlUmVwbGFjZXIgPSBmdW5jdGlvbiBzZWxmUmVmZXJlbmNlUmVwbGFjZXIobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gICAgaWYgKCAvLyB0aGUgZmlyc3Qgc2VsZi1yZWYgaXMgYWx3YXlzIHVudG91Y2hlZFxuICAgIG9mZnNldCA+IDAgJiYgLy8gdGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBzZWxmLXJlZnMgdG8gZG8gYSByZXBsYWNlbWVudCAoLmIgPiAuYilcbiAgICBzdHJpbmcuc2xpY2UoMCwgb2Zmc2V0KS5pbmRleE9mKF9zZWxlY3RvcikgIT09IC0xICYmIC8vIG5vIGNvbnNlY3V0aXZlIHNlbGYgcmVmcyAoLmIuYik7IHRoYXQgaXMgYSBwcmVjZWRlbmNlIGJvb3N0IGFuZCB0cmVhdGVkIGRpZmZlcmVudGx5XG4gICAgc3RyaW5nLnNsaWNlKG9mZnNldCAtIF9zZWxlY3Rvci5sZW5ndGgsIG9mZnNldCkgIT09IF9zZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIFwiLlwiICsgX2NvbXBvbmVudElkO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbiAgLyoqXG4gICAqIFdoZW4gd3JpdGluZyBhIHN0eWxlIGxpa2VcbiAgICpcbiAgICogJiArICYge1xuICAgKiAgIGNvbG9yOiByZWQ7XG4gICAqIH1cbiAgICpcbiAgICogVGhlIHNlY29uZCBhbXBlcnNhbmQgc2hvdWxkIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBzdGF0aWMgY29tcG9uZW50IGNsYXNzLiBzdHlsaXNcbiAgICogaGFzIG5vIGtub3dsZWRnZSBvZiBzdGF0aWMgY2xhc3Mgc28gd2UgaGF2ZSB0byBpbnRlbGxpZ2VudGx5IHJlcGxhY2UgdGhlIGJhc2Ugc2VsZWN0b3IuXG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS90aHlzdWx0YW4vc3R5bGlzLmpzI3BsdWdpbnMgPC0gbW9yZSBpbmZvIGFib3V0IHRoZSBjb250ZXh0IHBoYXNlIHZhbHVlc1xuICAgKiBcIjJcIiBtZWFucyB0aGlzIHBsdWdpbiBpcyB0YWtpbmcgZWZmZWN0IGF0IHRoZSB2ZXJ5IGVuZCBhZnRlciBhbGwgb3RoZXIgcHJvY2Vzc2luZyBpcyBjb21wbGV0ZVxuICAgKi9cblxuXG4gIHZhciBzZWxmUmVmZXJlbmNlUmVwbGFjZW1lbnRQbHVnaW4gPSBmdW5jdGlvbiBzZWxmUmVmZXJlbmNlUmVwbGFjZW1lbnRQbHVnaW4oY29udGV4dCwgXywgc2VsZWN0b3JzKSB7XG4gICAgaWYgKGNvbnRleHQgPT09IDIgJiYgc2VsZWN0b3JzLmxlbmd0aCAmJiBzZWxlY3RvcnNbMF0ubGFzdEluZGV4T2YoX3NlbGVjdG9yKSA+IDApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgc2VsZWN0b3JzWzBdID0gc2VsZWN0b3JzWzBdLnJlcGxhY2UoX3NlbGVjdG9yUmVnZXhwLCBzZWxmUmVmZXJlbmNlUmVwbGFjZXIpO1xuICAgIH1cbiAgfTtcblxuICBzdHlsaXMudXNlKFtdLmNvbmNhdChwbHVnaW5zLCBbc2VsZlJlZmVyZW5jZVJlcGxhY2VtZW50UGx1Z2luLCBwYXJzZVJ1bGVzUGx1Z2luLCByZXR1cm5SdWxlc1BsdWdpbl0pKTtcblxuICBmdW5jdGlvbiBzdHJpbmdpZnlSdWxlcyhjc3MsIHNlbGVjdG9yLCBwcmVmaXgsIGNvbXBvbmVudElkKSB7XG4gICAgaWYgKGNvbXBvbmVudElkID09PSB2b2lkIDApIHtcbiAgICAgIGNvbXBvbmVudElkID0gJyYnO1xuICAgIH1cblxuICAgIHZhciBmbGF0Q1NTID0gY3NzLnJlcGxhY2UoQ09NTUVOVF9SRUdFWCwgJycpO1xuICAgIHZhciBjc3NTdHIgPSBzZWxlY3RvciAmJiBwcmVmaXggPyBwcmVmaXggKyBcIiBcIiArIHNlbGVjdG9yICsgXCIgeyBcIiArIGZsYXRDU1MgKyBcIiB9XCIgOiBmbGF0Q1NTOyAvLyBzdHlsaXMgaGFzIG5vIGNvbmNlcHQgb2Ygc3RhdGUgdG8gYmUgcGFzc2VkIHRvIHBsdWdpbnNcbiAgICAvLyBidXQgc2luY2UgSlMgaXMgc2luZ2xlPXRocmVhZGVkLCB3ZSBjYW4gcmVseSBvbiB0aGF0IHRvIGVuc3VyZVxuICAgIC8vIHRoZXNlIHByb3BlcnRpZXMgc3RheSBpbiBzeW5jIHdpdGggdGhlIGN1cnJlbnQgc3R5bGlzIHJ1blxuXG4gICAgX2NvbXBvbmVudElkID0gY29tcG9uZW50SWQ7XG4gICAgX3NlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgX3NlbGVjdG9yUmVnZXhwID0gbmV3IFJlZ0V4cChcIlxcXFxcIiArIF9zZWxlY3RvciArIFwiXFxcXGJcIiwgJ2cnKTtcbiAgICByZXR1cm4gc3R5bGlzKHByZWZpeCB8fCAhc2VsZWN0b3IgPyAnJyA6IHNlbGVjdG9yLCBjc3NTdHIpO1xuICB9XG5cbiAgc3RyaW5naWZ5UnVsZXMuaGFzaCA9IHBsdWdpbnMubGVuZ3RoID8gcGx1Z2lucy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGx1Z2luKSB7XG4gICAgaWYgKCFwbHVnaW4ubmFtZSkge1xuICAgICAgdGhyb3dTdHlsZWRDb21wb25lbnRzRXJyb3IoMTUpO1xuICAgIH1cblxuICAgIHJldHVybiBwaGFzaChhY2MsIHBsdWdpbi5uYW1lKTtcbiAgfSwgU0VFRCkudG9TdHJpbmcoKSA6ICcnO1xuICByZXR1cm4gc3RyaW5naWZ5UnVsZXM7XG59XG5cbi8vIFxudmFyIFN0eWxlU2hlZXRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xudmFyIFN0eWxlU2hlZXRDb25zdW1lciA9IFN0eWxlU2hlZXRDb250ZXh0LkNvbnN1bWVyO1xudmFyIFN0eWxpc0NvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KCk7XG52YXIgU3R5bGlzQ29uc3VtZXIgPSBTdHlsaXNDb250ZXh0LkNvbnN1bWVyO1xudmFyIG1hc3RlclNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoKTtcbnZhciBtYXN0ZXJTdHlsaXMgPSBjcmVhdGVTdHlsaXNJbnN0YW5jZSgpO1xuZnVuY3Rpb24gdXNlU3R5bGVTaGVldCgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoU3R5bGVTaGVldENvbnRleHQpIHx8IG1hc3RlclNoZWV0O1xufVxuZnVuY3Rpb24gdXNlU3R5bGlzKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChTdHlsaXNDb250ZXh0KSB8fCBtYXN0ZXJTdHlsaXM7XG59XG5mdW5jdGlvbiBTdHlsZVNoZWV0TWFuYWdlcihwcm9wcykge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUocHJvcHMuc3R5bGlzUGx1Z2lucyksXG4gICAgICBwbHVnaW5zID0gX3VzZVN0YXRlWzBdLFxuICAgICAgc2V0UGx1Z2lucyA9IF91c2VTdGF0ZVsxXTtcblxuICB2YXIgY29udGV4dFN0eWxlU2hlZXQgPSB1c2VTdHlsZVNoZWV0KCk7XG4gIHZhciBzdHlsZVNoZWV0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0ID0gY29udGV4dFN0eWxlU2hlZXQ7XG5cbiAgICBpZiAocHJvcHMuc2hlZXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgc2hlZXQgPSBwcm9wcy5zaGVldDtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnRhcmdldCkge1xuICAgICAgc2hlZXQgPSBzaGVldC5yZWNvbnN0cnVjdFdpdGhPcHRpb25zKHtcbiAgICAgICAgdGFyZ2V0OiBwcm9wcy50YXJnZXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kaXNhYmxlQ1NTT01JbmplY3Rpb24pIHtcbiAgICAgIHNoZWV0ID0gc2hlZXQucmVjb25zdHJ1Y3RXaXRoT3B0aW9ucyh7XG4gICAgICAgIHVzZUNTU09NSW5qZWN0aW9uOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoZWV0O1xuICB9LCBbcHJvcHMuZGlzYWJsZUNTU09NSW5qZWN0aW9uLCBwcm9wcy5zaGVldCwgcHJvcHMudGFyZ2V0XSk7XG4gIHZhciBzdHlsaXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY3JlYXRlU3R5bGlzSW5zdGFuY2Uoe1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICBwcmVmaXg6ICFwcm9wcy5kaXNhYmxlVmVuZG9yUHJlZml4ZXNcbiAgICAgIH0sXG4gICAgICBwbHVnaW5zOiBwbHVnaW5zXG4gICAgfSk7XG4gIH0sIFtwcm9wcy5kaXNhYmxlVmVuZG9yUHJlZml4ZXMsIHBsdWdpbnNdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXNoYWxsb3dlcXVhbChwbHVnaW5zLCBwcm9wcy5zdHlsaXNQbHVnaW5zKSkgc2V0UGx1Z2lucyhwcm9wcy5zdHlsaXNQbHVnaW5zKTtcbiAgfSwgW3Byb3BzLnN0eWxpc1BsdWdpbnNdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlU2hlZXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHN0eWxlU2hlZXRcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGlzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzdHlsaXNcbiAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IFJlYWN0LkNoaWxkcmVuLm9ubHkocHJvcHMuY2hpbGRyZW4pIDogcHJvcHMuY2hpbGRyZW4pKTtcbn1cblxuLy8gXG5cbnZhciBLZXlmcmFtZXMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBLZXlmcmFtZXMobmFtZSwgc3RyaW5naWZ5QXJncykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmluamVjdCA9IGZ1bmN0aW9uIChzdHlsZVNoZWV0KSB7XG4gICAgICBpZiAoIXN0eWxlU2hlZXQuaGFzTmFtZUZvcklkKF90aGlzLmlkLCBfdGhpcy5uYW1lKSkge1xuICAgICAgICBzdHlsZVNoZWV0Lmluc2VydFJ1bGVzKF90aGlzLmlkLCBfdGhpcy5uYW1lLCBtYXN0ZXJTdHlsaXMuYXBwbHkodm9pZCAwLCBfdGhpcy5zdHJpbmdpZnlBcmdzKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhyb3dTdHlsZWRDb21wb25lbnRzRXJyb3IoMTIsIFN0cmluZyhfdGhpcy5uYW1lKSk7XG4gICAgfTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5pZCA9IFwic2Mta2V5ZnJhbWVzLVwiICsgbmFtZTtcbiAgICB0aGlzLnN0cmluZ2lmeUFyZ3MgPSBzdHJpbmdpZnlBcmdzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEtleWZyYW1lcy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldE5hbWUgPSBmdW5jdGlvbiBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH07XG5cbiAgcmV0dXJuIEtleWZyYW1lcztcbn0oKTtcblxuLy8gXG5cbi8qKlxuICogaW5saW5lZCB2ZXJzaW9uIG9mXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL21hc3Rlci9wYWNrYWdlcy9mYmpzL3NyYy9jb3JlL2h5cGhlbmF0ZVN0eWxlTmFtZS5qc1xuICovXG52YXIgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHVwcGVyY2FzZVBhdHRlcm4sICctJDEnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UobXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG4vLyBcblxuZnVuY3Rpb24gYWRkVW5pdElmTmVlZGVkKG5hbWUsIHZhbHVlKSB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbWlsYWphY2svZXNsaW50LXBsdWdpbi1mbG93dHlwZS1lcnJvcnMvaXNzdWVzLzEzM1xuICAvLyAkRmxvd0ZpeE1lXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwICYmICEobmFtZSBpbiB1bml0bGVzcykpIHtcbiAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7IC8vIFByZXN1bWVzIGltcGxpY2l0ICdweCcgc3VmZml4IGZvciB1bml0bGVzcyBudW1iZXJzXG4gIH1cblxuICByZXR1cm4gU3RyaW5nKHZhbHVlKS50cmltKCk7XG59XG5cbi8vIFxuLyoqXG4gKiBJdCdzIGZhbHNpc2ggbm90IGZhbHN5IGJlY2F1c2UgMCBpcyBhbGxvd2VkLlxuICovXG5cbnZhciBpc0ZhbHNpc2ggPSBmdW5jdGlvbiBpc0ZhbHNpc2goY2h1bmspIHtcbiAgcmV0dXJuIGNodW5rID09PSB1bmRlZmluZWQgfHwgY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IGZhbHNlIHx8IGNodW5rID09PSAnJztcbn07XG5cbnZhciBvYmpUb0Nzc0FycmF5ID0gZnVuY3Rpb24gb2JqVG9Dc3NBcnJheShvYmosIHByZXZLZXkpIHtcbiAgdmFyIHJ1bGVzID0gW107XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWlzRmFsc2lzaChvYmpba2V5XSkpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgICBydWxlcy5wdXNoLmFwcGx5KHJ1bGVzLCBvYmpUb0Nzc0FycmF5KG9ialtrZXldLCBrZXkpKTtcbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKG9ialtrZXldKSkge1xuICAgICAgICBydWxlcy5wdXNoKGh5cGhlbmF0ZVN0eWxlTmFtZShrZXkpICsgXCI6XCIsIG9ialtrZXldLCAnOycpO1xuICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICB9XG5cbiAgICAgIHJ1bGVzLnB1c2goaHlwaGVuYXRlU3R5bGVOYW1lKGtleSkgKyBcIjogXCIgKyBhZGRVbml0SWZOZWVkZWQoa2V5LCBvYmpba2V5XSkgKyBcIjtcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9KTtcbiAgcmV0dXJuIHByZXZLZXkgPyBbcHJldktleSArIFwiIHtcIl0uY29uY2F0KHJ1bGVzLCBbJ30nXSkgOiBydWxlcztcbn07XG5mdW5jdGlvbiBmbGF0dGVuKGNodW5rLCBleGVjdXRpb25Db250ZXh0LCBzdHlsZVNoZWV0KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNodW5rKSkge1xuICAgIHZhciBydWxlU2V0ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2h1bmsubGVuZ3RoLCByZXN1bHQ7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgcmVzdWx0ID0gZmxhdHRlbihjaHVua1tpXSwgZXhlY3V0aW9uQ29udGV4dCwgc3R5bGVTaGVldCk7XG4gICAgICBpZiAocmVzdWx0ID09PSAnJykgY29udGludWU7ZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSBydWxlU2V0LnB1c2guYXBwbHkocnVsZVNldCwgcmVzdWx0KTtlbHNlIHJ1bGVTZXQucHVzaChyZXN1bHQpO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlU2V0O1xuICB9XG5cbiAgaWYgKGlzRmFsc2lzaChjaHVuaykpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgLyogSGFuZGxlIG90aGVyIGNvbXBvbmVudHMgKi9cblxuXG4gIGlmIChpc1N0eWxlZENvbXBvbmVudChjaHVuaykpIHtcbiAgICByZXR1cm4gXCIuXCIgKyBjaHVuay5zdHlsZWRDb21wb25lbnRJZDtcbiAgfVxuICAvKiBFaXRoZXIgZXhlY3V0ZSBvciBkZWZlciB0aGUgZnVuY3Rpb24gKi9cblxuXG4gIGlmIChpc0Z1bmN0aW9uKGNodW5rKSkge1xuICAgIGlmIChpc1N0YXRlbGVzc0Z1bmN0aW9uKGNodW5rKSAmJiBleGVjdXRpb25Db250ZXh0KSB7XG4gICAgICB2YXIgX3Jlc3VsdCA9IGNodW5rKGV4ZWN1dGlvbkNvbnRleHQpO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0VsZW1lbnQoX3Jlc3VsdCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGdldENvbXBvbmVudE5hbWUoY2h1bmspICsgXCIgaXMgbm90IGEgc3R5bGVkIGNvbXBvbmVudCBhbmQgY2Fubm90IGJlIHJlZmVycmVkIHRvIHZpYSBjb21wb25lbnQgc2VsZWN0b3IuIFNlZSBodHRwczovL3d3dy5zdHlsZWQtY29tcG9uZW50cy5jb20vZG9jcy9hZHZhbmNlZCNyZWZlcnJpbmctdG8tb3RoZXItY29tcG9uZW50cyBmb3IgbW9yZSBkZXRhaWxzLlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsYXR0ZW4oX3Jlc3VsdCwgZXhlY3V0aW9uQ29udGV4dCwgc3R5bGVTaGVldCk7XG4gICAgfSBlbHNlIHJldHVybiBjaHVuaztcbiAgfVxuXG4gIGlmIChjaHVuayBpbnN0YW5jZW9mIEtleWZyYW1lcykge1xuICAgIGlmIChzdHlsZVNoZWV0KSB7XG4gICAgICBjaHVuay5pbmplY3Qoc3R5bGVTaGVldCk7XG4gICAgICByZXR1cm4gY2h1bmsuZ2V0TmFtZSgpO1xuICAgIH0gZWxzZSByZXR1cm4gY2h1bms7XG4gIH1cbiAgLyogSGFuZGxlIG9iamVjdHMgKi9cblxuXG4gIHJldHVybiBpc1BsYWluT2JqZWN0KGNodW5rKSA/IG9ialRvQ3NzQXJyYXkoY2h1bmspIDogY2h1bmsudG9TdHJpbmcoKTtcbn1cblxuLy8gXG5mdW5jdGlvbiBjc3Moc3R5bGVzKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBpbnRlcnBvbGF0aW9ucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgaW50ZXJwb2xhdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGlzRnVuY3Rpb24oc3R5bGVzKSB8fCBpc1BsYWluT2JqZWN0KHN0eWxlcykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIGZsYXR0ZW4oaW50ZXJsZWF2ZShFTVBUWV9BUlJBWSwgW3N0eWxlc10uY29uY2F0KGludGVycG9sYXRpb25zKSkpO1xuICB9XG5cbiAgaWYgKGludGVycG9sYXRpb25zLmxlbmd0aCA9PT0gMCAmJiBzdHlsZXMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBzdHlsZXNbMF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfSAvLyAkRmxvd0ZpeE1lXG5cblxuICByZXR1cm4gZmxhdHRlbihpbnRlcmxlYXZlKHN0eWxlcywgaW50ZXJwb2xhdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0V2l0aE9wdGlvbnMoY29tcG9uZW50Q29uc3RydWN0b3IsIHRhZywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IEVNUFRZX09CSkVDVDtcbiAgfVxuXG4gIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHRhZykpIHtcbiAgICByZXR1cm4gdGhyb3dTdHlsZWRDb21wb25lbnRzRXJyb3IoMSwgU3RyaW5nKHRhZykpO1xuICB9XG4gIC8qIFRoaXMgaXMgY2FsbGFibGUgZGlyZWN0bHkgYXMgYSB0ZW1wbGF0ZSBmdW5jdGlvbiAqL1xuICAvLyAkRmxvd0ZpeE1lOiBOb3QgdHlwZWQgdG8gYXZvaWQgZGVzdHJ1Y3R1cmluZyBhcmd1bWVudHNcblxuXG4gIHZhciB0ZW1wbGF0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gdGVtcGxhdGVGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29tcG9uZW50Q29uc3RydWN0b3IodGFnLCBvcHRpb25zLCBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpKTtcbiAgfTtcbiAgLyogSWYgY29uZmlnIG1ldGhvZHMgYXJlIGNhbGxlZCwgd3JhcCB1cCBhIG5ldyB0ZW1wbGF0ZSBmdW5jdGlvbiBhbmQgbWVyZ2Ugb3B0aW9ucyAqL1xuXG5cbiAgdGVtcGxhdGVGdW5jdGlvbi53aXRoQ29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiBjb25zdHJ1Y3RXaXRoT3B0aW9ucyhjb21wb25lbnRDb25zdHJ1Y3RvciwgdGFnLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywge30sIGNvbmZpZykpO1xuICB9O1xuICAvKiBNb2RpZnkvaW5qZWN0IG5ldyBwcm9wcyBhdCBydW50aW1lICovXG5cblxuICB0ZW1wbGF0ZUZ1bmN0aW9uLmF0dHJzID0gZnVuY3Rpb24gKGF0dHJzKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdFdpdGhPcHRpb25zKGNvbXBvbmVudENvbnN0cnVjdG9yLCB0YWcsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICBhdHRyczogQXJyYXkucHJvdG90eXBlLmNvbmNhdChvcHRpb25zLmF0dHJzLCBhdHRycykuZmlsdGVyKEJvb2xlYW4pXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZUZ1bmN0aW9uO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4vKipcbiAgbWl4aW4tZGVlcDsgaHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvbWl4aW4tZGVlcFxuICBJbmxpbmVkIHN1Y2ggdGhhdCBpdCB3aWxsIGJlIGNvbnNpc3RlbnRseSB0cmFuc3BpbGVkIHRvIGFuIElFLWNvbXBhdGlibGUgc3ludGF4LlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBKb24gU2NobGlua2VydC5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAgVEhFIFNPRlRXQVJFLlxuKi9cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsKTtcbn07XG5cbnZhciBpc1ZhbGlkS2V5ID0gZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcbiAgcmV0dXJuIGtleSAhPT0gJ19fcHJvdG9fXycgJiYga2V5ICE9PSAnY29uc3RydWN0b3InICYmIGtleSAhPT0gJ3Byb3RvdHlwZSc7XG59O1xuXG5mdW5jdGlvbiBtaXhpbih0YXJnZXQsIHZhbCwga2V5KSB7XG4gIHZhciBvYmogPSB0YXJnZXRba2V5XTtcblxuICBpZiAoaXNPYmplY3QodmFsKSAmJiBpc09iamVjdChvYmopKSB7XG4gICAgbWl4aW5EZWVwKG9iaiwgdmFsKTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtaXhpbkRlZXAodGFyZ2V0KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGZvciAodmFyIF9pID0gMCwgX3Jlc3QgPSByZXN0OyBfaSA8IF9yZXN0Lmxlbmd0aDsgX2krKykge1xuICAgIHZhciBvYmogPSBfcmVzdFtfaV07XG5cbiAgICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoaXNWYWxpZEtleShrZXkpKSB7XG4gICAgICAgICAgbWl4aW4odGFyZ2V0LCBvYmpba2V5XSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8vIFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG52YXIgQURfUkVQTEFDRVJfUiA9IC8oYSkoZCkvZ2k7XG4vKiBUaGlzIGlzIHRoZSBcImNhcGFjaXR5XCIgb2Ygb3VyIGFscGhhYmV0IGkuZS4gMngyNiBmb3IgYWxsIGxldHRlcnMgcGx1cyB0aGVpciBjYXBpdGFsaXNlZFxuICogY291bnRlcnBhcnRzICovXG5cbnZhciBjaGFyc0xlbmd0aCA9IDUyO1xuLyogc3RhcnQgYXQgNzUgZm9yICdhJyB1bnRpbCAneicgKDI1KSBhbmQgdGhlbiBzdGFydCBhdCA2NSBmb3IgY2FwaXRhbGlzZWQgbGV0dGVycyAqL1xuXG52YXIgZ2V0QWxwaGFiZXRpY0NoYXIgPSBmdW5jdGlvbiBnZXRBbHBoYWJldGljQ2hhcihjb2RlKSB7XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUgKyAoY29kZSA+IDI1ID8gMzkgOiA5NykpO1xufTtcbi8qIGlucHV0IGEgbnVtYmVyLCB1c3VhbGx5IGEgaGFzaCBhbmQgY29udmVydCBpdCB0byBiYXNlLTUyICovXG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVBbHBoYWJldGljTmFtZShjb2RlKSB7XG4gIHZhciBuYW1lID0gJyc7XG4gIHZhciB4O1xuICAvKiBnZXQgYSBjaGFyIGFuZCBkaXZpZGUgYnkgYWxwaGFiZXQtbGVuZ3RoICovXG5cbiAgZm9yICh4ID0gTWF0aC5hYnMoY29kZSk7IHggPiBjaGFyc0xlbmd0aDsgeCA9IHggLyBjaGFyc0xlbmd0aCB8IDApIHtcbiAgICBuYW1lID0gZ2V0QWxwaGFiZXRpY0NoYXIoeCAlIGNoYXJzTGVuZ3RoKSArIG5hbWU7XG4gIH1cblxuICByZXR1cm4gKGdldEFscGhhYmV0aWNDaGFyKHggJSBjaGFyc0xlbmd0aCkgKyBuYW1lKS5yZXBsYWNlKEFEX1JFUExBQ0VSX1IsICckMS0kMicpO1xufVxuXG4vLyBcbmZ1bmN0aW9uIGlzU3RhdGljUnVsZXMocnVsZXMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBydWxlID0gcnVsZXNbaV07XG5cbiAgICBpZiAoaXNGdW5jdGlvbihydWxlKSAmJiAhaXNTdHlsZWRDb21wb25lbnQocnVsZSkpIHtcbiAgICAgIC8vIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCB0byBiZSBzdGF0aWMgaWYgdGhleSdyZSBqdXN0IGJlaW5nXG4gICAgICAvLyB1c2VkIHRvIGdldCB0aGUgY2xhc3NuYW1lIG9mIGEgbmVzdGVkIHN0eWxlZCBjb21wb25lbnRcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gXG4vKlxuIENvbXBvbmVudFN0eWxlIGlzIGFsbCB0aGUgQ1NTLXNwZWNpZmljIHN0dWZmLCBub3RcbiB0aGUgUmVhY3Qtc3BlY2lmaWMgc3R1ZmYuXG4gKi9cblxudmFyIENvbXBvbmVudFN0eWxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50U3R5bGUocnVsZXMsIGNvbXBvbmVudElkKSB7XG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xuICAgIHRoaXMuc3RhdGljUnVsZXNJZCA9ICcnO1xuICAgIHRoaXMuaXNTdGF0aWMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nICYmIGlzU3RhdGljUnVsZXMocnVsZXMpO1xuICAgIHRoaXMuY29tcG9uZW50SWQgPSBjb21wb25lbnRJZDtcbiAgICB0aGlzLmJhc2VIYXNoID0gaGFzaChjb21wb25lbnRJZCk7IC8vIE5PVEU6IFRoaXMgcmVnaXN0ZXJzIHRoZSBjb21wb25lbnRJZCwgd2hpY2ggZW5zdXJlcyBhIGNvbnNpc3RlbnQgb3JkZXJcbiAgICAvLyBmb3IgdGhpcyBjb21wb25lbnQncyBzdHlsZXMgY29tcGFyZWQgdG8gb3RoZXJzXG5cbiAgICBTdHlsZVNoZWV0LnJlZ2lzdGVySWQoY29tcG9uZW50SWQpO1xuICB9XG4gIC8qXG4gICAqIEZsYXR0ZW5zIGEgcnVsZSBzZXQgaW50byB2YWxpZCBDU1NcbiAgICogSGFzaGVzIGl0LCB3cmFwcyB0aGUgd2hvbGUgY2h1bmsgaW4gYSAuaGFzaDEyMzQge31cbiAgICogUmV0dXJucyB0aGUgaGFzaCB0byBiZSBpbmplY3RlZCBvbiByZW5kZXIoKVxuICAgKiAqL1xuXG5cbiAgdmFyIF9wcm90byA9IENvbXBvbmVudFN0eWxlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMgPSBmdW5jdGlvbiBnZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhleGVjdXRpb25Db250ZXh0LCBzdHlsZVNoZWV0LCBzdHlsaXMpIHtcbiAgICB2YXIgY29tcG9uZW50SWQgPSB0aGlzLmNvbXBvbmVudElkOyAvLyBmb3JjZSBkeW5hbWljIGNsYXNzbmFtZXMgaWYgdXNlci1zdXBwbGllZCBzdHlsaXMgcGx1Z2lucyBhcmUgaW4gdXNlXG5cbiAgICBpZiAodGhpcy5pc1N0YXRpYyAmJiAhc3R5bGlzLmhhc2gpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRpY1J1bGVzSWQgJiYgc3R5bGVTaGVldC5oYXNOYW1lRm9ySWQoY29tcG9uZW50SWQsIHRoaXMuc3RhdGljUnVsZXNJZCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGljUnVsZXNJZDtcbiAgICAgIH1cblxuICAgICAgdmFyIGNzc1N0YXRpYyA9IGZsYXR0ZW4odGhpcy5ydWxlcywgZXhlY3V0aW9uQ29udGV4dCwgc3R5bGVTaGVldCkuam9pbignJyk7XG4gICAgICB2YXIgbmFtZSA9IGdlbmVyYXRlQWxwaGFiZXRpY05hbWUocGhhc2godGhpcy5iYXNlSGFzaCwgY3NzU3RhdGljLmxlbmd0aCkgPj4+IDApO1xuXG4gICAgICBpZiAoIXN0eWxlU2hlZXQuaGFzTmFtZUZvcklkKGNvbXBvbmVudElkLCBuYW1lKSkge1xuICAgICAgICB2YXIgY3NzU3RhdGljRm9ybWF0dGVkID0gc3R5bGlzKGNzc1N0YXRpYywgXCIuXCIgKyBuYW1lLCB1bmRlZmluZWQsIGNvbXBvbmVudElkKTtcbiAgICAgICAgc3R5bGVTaGVldC5pbnNlcnRSdWxlcyhjb21wb25lbnRJZCwgbmFtZSwgY3NzU3RhdGljRm9ybWF0dGVkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0aWNSdWxlc0lkID0gbmFtZTtcbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbGVuZ3RoID0gdGhpcy5ydWxlcy5sZW5ndGg7XG4gICAgICB2YXIgZHluYW1pY0hhc2ggPSBwaGFzaCh0aGlzLmJhc2VIYXNoLCBzdHlsaXMuaGFzaCk7XG4gICAgICB2YXIgY3NzID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnRSdWxlID0gdGhpcy5ydWxlc1tpXTtcblxuICAgICAgICBpZiAodHlwZW9mIHBhcnRSdWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNzcyArPSBwYXJ0UnVsZTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgZHluYW1pY0hhc2ggPSBwaGFzaChkeW5hbWljSGFzaCwgcGFydFJ1bGUgKyBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcGFydENodW5rID0gZmxhdHRlbihwYXJ0UnVsZSwgZXhlY3V0aW9uQ29udGV4dCwgc3R5bGVTaGVldCk7XG4gICAgICAgICAgdmFyIHBhcnRTdHJpbmcgPSBBcnJheS5pc0FycmF5KHBhcnRDaHVuaykgPyBwYXJ0Q2h1bmsuam9pbignJykgOiBwYXJ0Q2h1bms7XG4gICAgICAgICAgZHluYW1pY0hhc2ggPSBwaGFzaChkeW5hbWljSGFzaCwgcGFydFN0cmluZyArIGkpO1xuICAgICAgICAgIGNzcyArPSBwYXJ0U3RyaW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBfbmFtZSA9IGdlbmVyYXRlQWxwaGFiZXRpY05hbWUoZHluYW1pY0hhc2ggPj4+IDApO1xuXG4gICAgICBpZiAoIXN0eWxlU2hlZXQuaGFzTmFtZUZvcklkKGNvbXBvbmVudElkLCBfbmFtZSkpIHtcbiAgICAgICAgdmFyIGNzc0Zvcm1hdHRlZCA9IHN0eWxpcyhjc3MsIFwiLlwiICsgX25hbWUsIHVuZGVmaW5lZCwgY29tcG9uZW50SWQpO1xuICAgICAgICBzdHlsZVNoZWV0Lmluc2VydFJ1bGVzKGNvbXBvbmVudElkLCBfbmFtZSwgY3NzRm9ybWF0dGVkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9uYW1lO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ29tcG9uZW50U3R5bGU7XG59KCk7XG5cbi8vIFxudmFyIExJTUlUID0gMjAwO1xudmFyIGNyZWF0ZVdhcm5Ub29NYW55Q2xhc3NlcyA9IChmdW5jdGlvbiAoZGlzcGxheU5hbWUsIGNvbXBvbmVudElkKSB7XG4gIHZhciBnZW5lcmF0ZWRDbGFzc2VzID0ge307XG4gIHZhciB3YXJuaW5nU2VlbiA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmICghd2FybmluZ1NlZW4pIHtcbiAgICAgIGdlbmVyYXRlZENsYXNzZXNbY2xhc3NOYW1lXSA9IHRydWU7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhnZW5lcmF0ZWRDbGFzc2VzKS5sZW5ndGggPj0gTElNSVQpIHtcbiAgICAgICAgLy8gVW5hYmxlIHRvIGZpbmQgbGF0ZXN0UnVsZSBpbiB0ZXN0IGVudmlyb25tZW50LlxuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUsIHByZWZlci10ZW1wbGF0ZSAqL1xuICAgICAgICB2YXIgcGFyc2VkSWRTdHJpbmcgPSBjb21wb25lbnRJZCA/IFwiIHdpdGggdGhlIGlkIG9mIFxcXCJcIiArIGNvbXBvbmVudElkICsgXCJcXFwiXCIgOiAnJztcbiAgICAgICAgY29uc29sZS53YXJuKFwiT3ZlciBcIiArIExJTUlUICsgXCIgY2xhc3NlcyB3ZXJlIGdlbmVyYXRlZCBmb3IgY29tcG9uZW50IFwiICsgZGlzcGxheU5hbWUgKyBwYXJzZWRJZFN0cmluZyArIFwiLlxcblwiICsgJ0NvbnNpZGVyIHVzaW5nIHRoZSBhdHRycyBtZXRob2QsIHRvZ2V0aGVyIHdpdGggYSBzdHlsZSBvYmplY3QgZm9yIGZyZXF1ZW50bHkgY2hhbmdlZCBzdHlsZXMuXFxuJyArICdFeGFtcGxlOlxcbicgKyAnICBjb25zdCBDb21wb25lbnQgPSBzdHlsZWQuZGl2LmF0dHJzKHByb3BzID0+ICh7XFxuJyArICcgICAgc3R5bGU6IHtcXG4nICsgJyAgICAgIGJhY2tncm91bmQ6IHByb3BzLmJhY2tncm91bmQsXFxuJyArICcgICAgfSxcXG4nICsgJyAgfSkpYHdpZHRoOiAxMDAlO2BcXG5cXG4nICsgJyAgPENvbXBvbmVudCAvPicpO1xuICAgICAgICB3YXJuaW5nU2VlbiA9IHRydWU7XG4gICAgICAgIGdlbmVyYXRlZENsYXNzZXMgPSB7fTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59KTtcblxuLy8gXG52YXIgaW52YWxpZEhvb2tDYWxsUmUgPSAvaW52YWxpZCBob29rIGNhbGwvaTtcbnZhciBzZWVuID0gbmV3IFNldCgpO1xudmFyIGNoZWNrRHluYW1pY0NyZWF0aW9uID0gZnVuY3Rpb24gY2hlY2tEeW5hbWljQ3JlYXRpb24oZGlzcGxheU5hbWUsIGNvbXBvbmVudElkKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIHBhcnNlZElkU3RyaW5nID0gY29tcG9uZW50SWQgPyBcIiB3aXRoIHRoZSBpZCBvZiBcXFwiXCIgKyBjb21wb25lbnRJZCArIFwiXFxcIlwiIDogJyc7XG4gICAgdmFyIG1lc3NhZ2UgPSBcIlRoZSBjb21wb25lbnQgXCIgKyBkaXNwbGF5TmFtZSArIHBhcnNlZElkU3RyaW5nICsgXCIgaGFzIGJlZW4gY3JlYXRlZCBkeW5hbWljYWxseS5cXG5cIiArICdZb3UgbWF5IHNlZSB0aGlzIHdhcm5pbmcgYmVjYXVzZSB5b3VcXCd2ZSBjYWxsZWQgc3R5bGVkIGluc2lkZSBhbm90aGVyIGNvbXBvbmVudC5cXG4nICsgJ1RvIHJlc29sdmUgdGhpcyBvbmx5IGNyZWF0ZSBuZXcgU3R5bGVkQ29tcG9uZW50cyBvdXRzaWRlIG9mIGFueSByZW5kZXIgbWV0aG9kIGFuZCBmdW5jdGlvbiBjb21wb25lbnQuJztcblxuICAgIHRyeSB7XG4gICAgICAvLyBXZSBwdXJwb3NlZnVsbHkgY2FsbCBgdXNlUmVmYCBvdXRzaWRlIG9mIGEgY29tcG9uZW50IGFuZCBleHBlY3QgaXQgdG8gdGhyb3dcbiAgICAgIC8vIElmIGl0IGRvZXNuJ3QsIHRoZW4gd2UncmUgaW5zaWRlIGFub3RoZXIgY29tcG9uZW50LlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgICB1c2VSZWYoKTtcblxuICAgICAgaWYgKCFzZWVuLmhhcyhtZXNzYWdlKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgIHNlZW4uYWRkKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUaGUgZXJyb3IgaGVyZSBpcyBleHBlY3RlZCwgc2luY2Ugd2UncmUgZXhwZWN0aW5nIGFueXRoaW5nIHRoYXQgdXNlcyBgY2hlY2tEeW5hbWljQ3JlYXRpb25gIHRvXG4gICAgICAvLyBiZSBjYWxsZWQgb3V0c2lkZSBvZiBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICAgIGlmIChpbnZhbGlkSG9va0NhbGxSZS50ZXN0KGVycm9yLm1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IHJlc2V0cyBgd2FybmluZ1NlZW5gIGlmIHdlIGhhZCB0aGlzIGVycm9yIGhhcHBlbiBpbnRlcm1pdHRlbnRseVxuICAgICAgICBzZWVuW1wiZGVsZXRlXCJdKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLy8gXG52YXIgZGV0ZXJtaW5lVGhlbWUgPSAoZnVuY3Rpb24gKHByb3BzLCBwcm92aWRlZFRoZW1lLCBkZWZhdWx0UHJvcHMpIHtcbiAgaWYgKGRlZmF1bHRQcm9wcyA9PT0gdm9pZCAwKSB7XG4gICAgZGVmYXVsdFByb3BzID0gRU1QVFlfT0JKRUNUO1xuICB9XG5cbiAgcmV0dXJuIHByb3BzLnRoZW1lICE9PSBkZWZhdWx0UHJvcHMudGhlbWUgJiYgcHJvcHMudGhlbWUgfHwgcHJvdmlkZWRUaGVtZSB8fCBkZWZhdWx0UHJvcHMudGhlbWU7XG59KTtcblxuLy8gXG52YXIgZXNjYXBlUmVnZXggPSAvW1tcXF0uIyokPjwrfj18XjooKSxcIidgLV0rL2c7XG52YXIgZGFzaGVzQXRFbmRzID0gLyheLXwtJCkvZztcbi8qKlxuICogVE9ETzogRXhwbG9yZSB1c2luZyBDU1MuZXNjYXBlIHdoZW4gaXQgYmVjb21lcyBtb3JlIGF2YWlsYWJsZVxuICogaW4gZXZlcmdyZWVuIGJyb3dzZXJzLlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShzdHIpIHtcbiAgcmV0dXJuIHN0ciAvLyBSZXBsYWNlIGFsbCBwb3NzaWJsZSBDU1Mgc2VsZWN0b3JzXG4gIC5yZXBsYWNlKGVzY2FwZVJlZ2V4LCAnLScpIC8vIFJlbW92ZSBleHRyYW5lb3VzIGh5cGhlbnMgYXQgdGhlIHN0YXJ0IGFuZCBlbmRcbiAgLnJlcGxhY2UoZGFzaGVzQXRFbmRzLCAnJyk7XG59XG5cbi8vIFxuZnVuY3Rpb24gaXNUYWcodGFyZ2V0KSB7XG4gIHJldHVybiB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJyAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHRhcmdldC5jaGFyQXQoMCkgPT09IHRhcmdldC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSA6IHRydWUpO1xufVxuXG4vLyBcbmZ1bmN0aW9uIGdlbmVyYXRlRGlzcGxheU5hbWUodGFyZ2V0KSB7XG4gIC8vICRGbG93Rml4TWVcbiAgcmV0dXJuIGlzVGFnKHRhcmdldCkgPyBcInN0eWxlZC5cIiArIHRhcmdldCA6IFwiU3R5bGVkKFwiICsgZ2V0Q29tcG9uZW50TmFtZSh0YXJnZXQpICsgXCIpXCI7XG59XG5cbi8vIFxudmFyIGdlbmVyYXRlQ29tcG9uZW50SWQgPSAoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gZ2VuZXJhdGVBbHBoYWJldGljTmFtZShoYXNoKHN0cikgPj4+IDApO1xufSk7XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGpvaW5pbmcgc3RyaW5ncyB0byBmb3JtIGNsYXNzTmFtZSBjaGFpbnNcbiAqL1xuZnVuY3Rpb24gam9pblN0cmluZ3MoYSwgYikge1xuICByZXR1cm4gYSAmJiBiID8gYSArIFwiIFwiICsgYiA6IGEgfHwgYjtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbnZhciBUaGVtZUNvbnN1bWVyID0gVGhlbWVDb250ZXh0LkNvbnN1bWVyO1xuXG5mdW5jdGlvbiBtZXJnZVRoZW1lKHRoZW1lLCBvdXRlclRoZW1lKSB7XG4gIGlmICghdGhlbWUpIHtcbiAgICByZXR1cm4gdGhyb3dTdHlsZWRDb21wb25lbnRzRXJyb3IoMTQpO1xuICB9XG5cbiAgaWYgKGlzRnVuY3Rpb24odGhlbWUpKSB7XG4gICAgdmFyIG1lcmdlZFRoZW1lID0gdGhlbWUob3V0ZXJUaGVtZSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAobWVyZ2VkVGhlbWUgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShtZXJnZWRUaGVtZSkgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JykpIHtcbiAgICAgIHJldHVybiB0aHJvd1N0eWxlZENvbXBvbmVudHNFcnJvcig3KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZSkgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0aHJvd1N0eWxlZENvbXBvbmVudHNFcnJvcig4KTtcbiAgfVxuXG4gIHJldHVybiBvdXRlclRoZW1lID8gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIHt9LCB0aGVtZSkgOiB0aGVtZTtcbn1cbi8qKlxuICogUHJvdmlkZSBhIHRoZW1lIHRvIGFuIGVudGlyZSByZWFjdCBjb21wb25lbnQgdHJlZSB2aWEgY29udGV4dFxuICovXG5cblxuZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgb3V0ZXJUaGVtZSA9IHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgdmFyIHRoZW1lQ29udGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtZXJnZVRoZW1lKHByb3BzLnRoZW1lLCBvdXRlclRoZW1lKTtcbiAgfSwgW3Byb3BzLnRoZW1lLCBvdXRlclRoZW1lXSk7XG5cbiAgaWYgKCFwcm9wcy5jaGlsZHJlbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZUNvbnRleHRcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufVxuXG4vKiBnbG9iYWwgJENhbGwgKi9cblxudmFyIGlkZW50aWZpZXJzID0ge307XG4vKiBXZSBkZXBlbmQgb24gY29tcG9uZW50cyBoYXZpbmcgdW5pcXVlIElEcyAqL1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUlkKGRpc3BsYXlOYW1lLCBwYXJlbnRDb21wb25lbnRJZCkge1xuICB2YXIgbmFtZSA9IHR5cGVvZiBkaXNwbGF5TmFtZSAhPT0gJ3N0cmluZycgPyAnc2MnIDogZXNjYXBlKGRpc3BsYXlOYW1lKTsgLy8gRW5zdXJlIHRoYXQgbm8gZGlzcGxheU5hbWUgY2FuIGxlYWQgdG8gZHVwbGljYXRlIGNvbXBvbmVudElkc1xuXG4gIGlkZW50aWZpZXJzW25hbWVdID0gKGlkZW50aWZpZXJzW25hbWVdIHx8IDApICsgMTtcbiAgdmFyIGNvbXBvbmVudElkID0gbmFtZSArIFwiLVwiICsgZ2VuZXJhdGVDb21wb25lbnRJZChuYW1lICsgaWRlbnRpZmllcnNbbmFtZV0pO1xuICByZXR1cm4gcGFyZW50Q29tcG9uZW50SWQgPyBwYXJlbnRDb21wb25lbnRJZCArIFwiLVwiICsgY29tcG9uZW50SWQgOiBjb21wb25lbnRJZDtcbn1cblxuZnVuY3Rpb24gdXNlUmVzb2x2ZWRBdHRycyh0aGVtZSwgcHJvcHMsIGF0dHJzKSB7XG4gIGlmICh0aGVtZSA9PT0gdm9pZCAwKSB7XG4gICAgdGhlbWUgPSBFTVBUWV9PQkpFQ1Q7XG4gIH1cblxuICAvLyBOT1RFOiBjYW4ndCBtZW1vaXplIHRoaXNcbiAgLy8gcmV0dXJucyBbY29udGV4dCwgcmVzb2x2ZWRBdHRyc11cbiAgLy8gd2hlcmUgcmVzb2x2ZWRBdHRycyBpcyBvbmx5IHRoZSB0aGluZ3MgaW5qZWN0ZWQgYnkgdGhlIGF0dHJzIHRoZW1zZWx2ZXNcbiAgdmFyIGNvbnRleHQgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB0aGVtZTogdGhlbWVcbiAgfSk7XG5cbiAgdmFyIHJlc29sdmVkQXR0cnMgPSB7fTtcbiAgYXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0ckRlZikge1xuICAgIHZhciByZXNvbHZlZEF0dHJEZWYgPSBhdHRyRGVmO1xuICAgIHZhciBrZXk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihyZXNvbHZlZEF0dHJEZWYpKSB7XG4gICAgICByZXNvbHZlZEF0dHJEZWYgPSByZXNvbHZlZEF0dHJEZWYoY29udGV4dCk7XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlIGd1YXJkLWZvci1pbiAqL1xuXG5cbiAgICBmb3IgKGtleSBpbiByZXNvbHZlZEF0dHJEZWYpIHtcbiAgICAgIGNvbnRleHRba2V5XSA9IHJlc29sdmVkQXR0cnNba2V5XSA9IGtleSA9PT0gJ2NsYXNzTmFtZScgPyBqb2luU3RyaW5ncyhyZXNvbHZlZEF0dHJzW2tleV0sIHJlc29sdmVkQXR0ckRlZltrZXldKSA6IHJlc29sdmVkQXR0ckRlZltrZXldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGd1YXJkLWZvci1pbiAqL1xuXG4gIH0pO1xuICByZXR1cm4gW2NvbnRleHQsIHJlc29sdmVkQXR0cnNdO1xufVxuXG5mdW5jdGlvbiB1c2VJbmplY3RlZFN0eWxlKGNvbXBvbmVudFN0eWxlLCBoYXNBdHRycywgcmVzb2x2ZWRBdHRycywgd2FyblRvb01hbnlDbGFzc2VzKSB7XG4gIHZhciBzdHlsZVNoZWV0ID0gdXNlU3R5bGVTaGVldCgpO1xuICB2YXIgc3R5bGlzID0gdXNlU3R5bGlzKCk7IC8vIHN0YXRpY2FsbHkgc3R5bGVkLWNvbXBvbmVudHMgZG9uJ3QgbmVlZCB0byBidWlsZCBhbiBleGVjdXRpb24gY29udGV4dCBvYmplY3QsXG4gIC8vIGFuZCBzaG91bGRuJ3QgYmUgaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIGNsYXNzIG5hbWVzXG5cbiAgdmFyIGlzU3RhdGljID0gY29tcG9uZW50U3R5bGUuaXNTdGF0aWMgJiYgIWhhc0F0dHJzO1xuICB2YXIgY2xhc3NOYW1lID0gaXNTdGF0aWMgPyBjb21wb25lbnRTdHlsZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhFTVBUWV9PQkpFQ1QsIHN0eWxlU2hlZXQsIHN0eWxpcykgOiBjb21wb25lbnRTdHlsZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhyZXNvbHZlZEF0dHJzLCBzdHlsZVNoZWV0LCBzdHlsaXMpO1xuICB1c2VEZWJ1Z1ZhbHVlKGNsYXNzTmFtZSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzU3RhdGljICYmIHdhcm5Ub29NYW55Q2xhc3Nlcykge1xuICAgIHdhcm5Ub29NYW55Q2xhc3NlcyhjbGFzc05hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZnVuY3Rpb24gdXNlU3R5bGVkQ29tcG9uZW50SW1wbChmb3J3YXJkZWRDb21wb25lbnQsIHByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgdmFyIGNvbXBvbmVudEF0dHJzID0gZm9yd2FyZGVkQ29tcG9uZW50LmF0dHJzLFxuICAgICAgY29tcG9uZW50U3R5bGUgPSBmb3J3YXJkZWRDb21wb25lbnQuY29tcG9uZW50U3R5bGUsXG4gICAgICBkZWZhdWx0UHJvcHMgPSBmb3J3YXJkZWRDb21wb25lbnQuZGVmYXVsdFByb3BzLFxuICAgICAgZm9sZGVkQ29tcG9uZW50SWRzID0gZm9yd2FyZGVkQ29tcG9uZW50LmZvbGRlZENvbXBvbmVudElkcyxcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wID0gZm9yd2FyZGVkQ29tcG9uZW50LnNob3VsZEZvcndhcmRQcm9wLFxuICAgICAgc3R5bGVkQ29tcG9uZW50SWQgPSBmb3J3YXJkZWRDb21wb25lbnQuc3R5bGVkQ29tcG9uZW50SWQsXG4gICAgICB0YXJnZXQgPSBmb3J3YXJkZWRDb21wb25lbnQudGFyZ2V0O1xuICB1c2VEZWJ1Z1ZhbHVlKHN0eWxlZENvbXBvbmVudElkKTsgLy8gTk9URTogdGhlIG5vbi1ob29rcyB2ZXJzaW9uIG9ubHkgc3Vic2NyaWJlcyB0byB0aGlzIHdoZW4gIWNvbXBvbmVudFN0eWxlLmlzU3RhdGljLFxuICAvLyBidXQgdGhhdCdkIGJlIGFnYWluc3QgdGhlIHJ1bGVzLW9mLWhvb2tzLiBXZSBjb3VsZCBiZSBuYXVnaHR5IGFuZCBkbyBpdCBhbnl3YXkgYXMgaXRcbiAgLy8gc2hvdWxkIGJlIGFuIGltbXV0YWJsZSB2YWx1ZSwgYnV0IGJlaGF2ZSBmb3Igbm93LlxuXG4gIHZhciB0aGVtZSA9IGRldGVybWluZVRoZW1lKHByb3BzLCB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCksIGRlZmF1bHRQcm9wcyk7XG5cbiAgdmFyIF91c2VSZXNvbHZlZEF0dHJzID0gdXNlUmVzb2x2ZWRBdHRycyh0aGVtZSB8fCBFTVBUWV9PQkpFQ1QsIHByb3BzLCBjb21wb25lbnRBdHRycyksXG4gICAgICBjb250ZXh0ID0gX3VzZVJlc29sdmVkQXR0cnNbMF0sXG4gICAgICBhdHRycyA9IF91c2VSZXNvbHZlZEF0dHJzWzFdO1xuXG4gIHZhciBnZW5lcmF0ZWRDbGFzc05hbWUgPSB1c2VJbmplY3RlZFN0eWxlKGNvbXBvbmVudFN0eWxlLCBjb21wb25lbnRBdHRycy5sZW5ndGggPiAwLCBjb250ZXh0LCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gZm9yd2FyZGVkQ29tcG9uZW50Lndhcm5Ub29NYW55Q2xhc3NlcyA6IHVuZGVmaW5lZCk7XG4gIHZhciByZWZUb0ZvcndhcmQgPSBmb3J3YXJkZWRSZWY7XG4gIHZhciBlbGVtZW50VG9CZUNyZWF0ZWQgPSBhdHRycy4kYXMgfHwgcHJvcHMuJGFzIHx8IGF0dHJzLmFzIHx8IHByb3BzLmFzIHx8IHRhcmdldDtcbiAgdmFyIGlzVGFyZ2V0VGFnID0gaXNUYWcoZWxlbWVudFRvQmVDcmVhdGVkKTtcbiAgdmFyIGNvbXB1dGVkUHJvcHMgPSBhdHRycyAhPT0gcHJvcHMgPyBfZXh0ZW5kcyh7fSwgcHJvcHMsIHt9LCBhdHRycykgOiBwcm9wcztcbiAgdmFyIHByb3BGaWx0ZXJGbiA9IHNob3VsZEZvcndhcmRQcm9wIHx8IGlzVGFyZ2V0VGFnICYmIHZhbGlkQXR0cjtcbiAgdmFyIHByb3BzRm9yRWxlbWVudCA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluXG5cbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkUHJvcHMpIHtcbiAgICBpZiAoa2V5WzBdID09PSAnJCcgfHwga2V5ID09PSAnYXMnKSBjb250aW51ZTtlbHNlIGlmIChrZXkgPT09ICdmb3J3YXJkZWRBcycpIHtcbiAgICAgIHByb3BzRm9yRWxlbWVudC5hcyA9IGNvbXB1dGVkUHJvcHNba2V5XTtcbiAgICB9IGVsc2UgaWYgKCFwcm9wRmlsdGVyRm4gfHwgcHJvcEZpbHRlckZuKGtleSwgdmFsaWRBdHRyKSkge1xuICAgICAgLy8gRG9uJ3QgcGFzcyB0aHJvdWdoIG5vbiBIVE1MIHRhZ3MgdGhyb3VnaCB0byBIVE1MIGVsZW1lbnRzXG4gICAgICBwcm9wc0ZvckVsZW1lbnRba2V5XSA9IGNvbXB1dGVkUHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJvcHMuc3R5bGUgJiYgYXR0cnMuc3R5bGUgIT09IHByb3BzLnN0eWxlKSB7XG4gICAgcHJvcHNGb3JFbGVtZW50LnN0eWxlID0gX2V4dGVuZHMoe30sIHByb3BzLnN0eWxlLCB7fSwgYXR0cnMuc3R5bGUpO1xuICB9XG5cbiAgcHJvcHNGb3JFbGVtZW50LmNsYXNzTmFtZSA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQoZm9sZGVkQ29tcG9uZW50SWRzLCBzdHlsZWRDb21wb25lbnRJZCwgZ2VuZXJhdGVkQ2xhc3NOYW1lICE9PSBzdHlsZWRDb21wb25lbnRJZCA/IGdlbmVyYXRlZENsYXNzTmFtZSA6IG51bGwsIHByb3BzLmNsYXNzTmFtZSwgYXR0cnMuY2xhc3NOYW1lKS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICBwcm9wc0ZvckVsZW1lbnQucmVmID0gcmVmVG9Gb3J3YXJkO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudChlbGVtZW50VG9CZUNyZWF0ZWQsIHByb3BzRm9yRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlZENvbXBvbmVudCh0YXJnZXQsIG9wdGlvbnMsIHJ1bGVzKSB7XG4gIHZhciBpc1RhcmdldFN0eWxlZENvbXAgPSBpc1N0eWxlZENvbXBvbmVudCh0YXJnZXQpO1xuICB2YXIgaXNDb21wb3NpdGVDb21wb25lbnQgPSAhaXNUYWcodGFyZ2V0KTtcbiAgdmFyIF9vcHRpb25zJGRpc3BsYXlOYW1lID0gb3B0aW9ucy5kaXNwbGF5TmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lID0gX29wdGlvbnMkZGlzcGxheU5hbWUgPT09IHZvaWQgMCA/IGdlbmVyYXRlRGlzcGxheU5hbWUodGFyZ2V0KSA6IF9vcHRpb25zJGRpc3BsYXlOYW1lLFxuICAgICAgX29wdGlvbnMkY29tcG9uZW50SWQgPSBvcHRpb25zLmNvbXBvbmVudElkLFxuICAgICAgY29tcG9uZW50SWQgPSBfb3B0aW9ucyRjb21wb25lbnRJZCA9PT0gdm9pZCAwID8gZ2VuZXJhdGVJZChvcHRpb25zLmRpc3BsYXlOYW1lLCBvcHRpb25zLnBhcmVudENvbXBvbmVudElkKSA6IF9vcHRpb25zJGNvbXBvbmVudElkLFxuICAgICAgX29wdGlvbnMkYXR0cnMgPSBvcHRpb25zLmF0dHJzLFxuICAgICAgYXR0cnMgPSBfb3B0aW9ucyRhdHRycyA9PT0gdm9pZCAwID8gRU1QVFlfQVJSQVkgOiBfb3B0aW9ucyRhdHRycztcbiAgdmFyIHN0eWxlZENvbXBvbmVudElkID0gb3B0aW9ucy5kaXNwbGF5TmFtZSAmJiBvcHRpb25zLmNvbXBvbmVudElkID8gZXNjYXBlKG9wdGlvbnMuZGlzcGxheU5hbWUpICsgXCItXCIgKyBvcHRpb25zLmNvbXBvbmVudElkIDogb3B0aW9ucy5jb21wb25lbnRJZCB8fCBjb21wb25lbnRJZDsgLy8gZm9sZCB0aGUgdW5kZXJseWluZyBTdHlsZWRDb21wb25lbnQgYXR0cnMgdXAgKGltcGxpY2l0IGV4dGVuZClcblxuICB2YXIgZmluYWxBdHRycyA9IC8vICRGbG93Rml4TWVcbiAgaXNUYXJnZXRTdHlsZWRDb21wICYmIHRhcmdldC5hdHRycyA/IEFycmF5LnByb3RvdHlwZS5jb25jYXQodGFyZ2V0LmF0dHJzLCBhdHRycykuZmlsdGVyKEJvb2xlYW4pIDogYXR0cnM7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuXG4gIHZhciBzaG91bGRGb3J3YXJkUHJvcCA9IG9wdGlvbnMuc2hvdWxkRm9yd2FyZFByb3A7IC8vICRGbG93Rml4TWVcblxuICBpZiAoaXNUYXJnZXRTdHlsZWRDb21wICYmIHRhcmdldC5zaG91bGRGb3J3YXJkUHJvcCkge1xuICAgIGlmIChzaG91bGRGb3J3YXJkUHJvcCkge1xuICAgICAgLy8gY29tcG9zZSBuZXN0ZWQgc2hvdWxkRm9yd2FyZFByb3AgY2FsbHNcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wID0gZnVuY3Rpb24gc2hvdWxkRm9yd2FyZFByb3AocHJvcCwgZmlsdGVyRm4pIHtcbiAgICAgICAgcmV0dXJuICgvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgdGFyZ2V0LnNob3VsZEZvcndhcmRQcm9wKHByb3AsIGZpbHRlckZuKSAmJiBvcHRpb25zLnNob3VsZEZvcndhcmRQcm9wKHByb3AsIGZpbHRlckZuKVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhcmdldC5zaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tcG9uZW50U3R5bGUgPSBuZXcgQ29tcG9uZW50U3R5bGUoaXNUYXJnZXRTdHlsZWRDb21wID8gLy8gZm9sZCB0aGUgdW5kZXJseWluZyBTdHlsZWRDb21wb25lbnQgcnVsZXMgdXAgKGltcGxpY2l0IGV4dGVuZClcbiAgLy8gJEZsb3dGaXhNZVxuICB0YXJnZXQuY29tcG9uZW50U3R5bGUucnVsZXMuY29uY2F0KHJ1bGVzKSA6IHJ1bGVzLCBzdHlsZWRDb21wb25lbnRJZCk7XG4gIC8qKlxuICAgKiBmb3J3YXJkUmVmIGNyZWF0ZXMgYSBuZXcgaW50ZXJpbSBjb21wb25lbnQsIHdoaWNoIHdlJ2xsIHRha2UgYWR2YW50YWdlIG9mXG4gICAqIGluc3RlYWQgb2YgZXh0ZW5kaW5nIFBhcmVudENvbXBvbmVudCB0byBjcmVhdGUgX2Fub3RoZXJfIGludGVyaW0gY2xhc3NcbiAgICovXG5cbiAgdmFyIFdyYXBwZWRTdHlsZWRDb21wb25lbnQ7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuXG4gIHZhciBmb3J3YXJkUmVmID0gZnVuY3Rpb24gZm9yd2FyZFJlZihwcm9wcywgcmVmKSB7XG4gICAgcmV0dXJuIHVzZVN0eWxlZENvbXBvbmVudEltcGwoV3JhcHBlZFN0eWxlZENvbXBvbmVudCwgcHJvcHMsIHJlZik7XG4gIH07XG5cbiAgZm9yd2FyZFJlZi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lOyAvLyAkRmxvd0ZpeE1lIHRoaXMgaXMgYSBmb3JjZWQgY2FzdCB0byBtZXJnZSBpdCBTdHlsZWRDb21wb25lbnRXcmFwcGVyUHJvcGVydGllc1xuXG4gIFdyYXBwZWRTdHlsZWRDb21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKGZvcndhcmRSZWYpO1xuICBXcmFwcGVkU3R5bGVkQ29tcG9uZW50LmF0dHJzID0gZmluYWxBdHRycztcbiAgV3JhcHBlZFN0eWxlZENvbXBvbmVudC5jb21wb25lbnRTdHlsZSA9IGNvbXBvbmVudFN0eWxlO1xuICBXcmFwcGVkU3R5bGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gIFdyYXBwZWRTdHlsZWRDb21wb25lbnQuc2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDsgLy8gdGhpcyBzdGF0aWMgaXMgdXNlZCB0byBwcmVzZXJ2ZSB0aGUgY2FzY2FkZSBvZiBzdGF0aWMgY2xhc3NlcyBmb3IgY29tcG9uZW50IHNlbGVjdG9yXG4gIC8vIHB1cnBvc2VzOyB0aGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHdpdGggdXNhZ2Ugb2YgdGhlIGNzcyBwcm9wXG5cbiAgV3JhcHBlZFN0eWxlZENvbXBvbmVudC5mb2xkZWRDb21wb25lbnRJZHMgPSBpc1RhcmdldFN0eWxlZENvbXAgPyAvLyAkRmxvd0ZpeE1lXG4gIEFycmF5LnByb3RvdHlwZS5jb25jYXQodGFyZ2V0LmZvbGRlZENvbXBvbmVudElkcywgdGFyZ2V0LnN0eWxlZENvbXBvbmVudElkKSA6IEVNUFRZX0FSUkFZO1xuICBXcmFwcGVkU3R5bGVkQ29tcG9uZW50LnN0eWxlZENvbXBvbmVudElkID0gc3R5bGVkQ29tcG9uZW50SWQ7IC8vIGZvbGQgdGhlIHVuZGVybHlpbmcgU3R5bGVkQ29tcG9uZW50IHRhcmdldCB1cCBzaW5jZSB3ZSBmb2xkZWQgdGhlIHN0eWxlc1xuXG4gIFdyYXBwZWRTdHlsZWRDb21wb25lbnQudGFyZ2V0ID0gaXNUYXJnZXRTdHlsZWRDb21wID8gLy8gJEZsb3dGaXhNZVxuICB0YXJnZXQudGFyZ2V0IDogdGFyZ2V0OyAvLyAkRmxvd0ZpeE1lXG5cbiAgV3JhcHBlZFN0eWxlZENvbXBvbmVudC53aXRoQ29tcG9uZW50ID0gZnVuY3Rpb24gd2l0aENvbXBvbmVudCh0YWcpIHtcbiAgICB2YXIgcHJldmlvdXNDb21wb25lbnRJZCA9IG9wdGlvbnMuY29tcG9uZW50SWQsXG4gICAgICAgIG9wdGlvbnNUb0NvcHkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBbXCJjb21wb25lbnRJZFwiXSk7XG5cbiAgICB2YXIgbmV3Q29tcG9uZW50SWQgPSBwcmV2aW91c0NvbXBvbmVudElkICYmIHByZXZpb3VzQ29tcG9uZW50SWQgKyBcIi1cIiArIChpc1RhZyh0YWcpID8gdGFnIDogZXNjYXBlKGdldENvbXBvbmVudE5hbWUodGFnKSkpO1xuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgb3B0aW9uc1RvQ29weSwge1xuICAgICAgYXR0cnM6IGZpbmFsQXR0cnMsXG4gICAgICBjb21wb25lbnRJZDogbmV3Q29tcG9uZW50SWRcbiAgICB9KTtcblxuICAgIHJldHVybiBjcmVhdGVTdHlsZWRDb21wb25lbnQodGFnLCBuZXdPcHRpb25zLCBydWxlcyk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcmFwcGVkU3R5bGVkQ29tcG9uZW50LCAnZGVmYXVsdFByb3BzJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZvbGRlZERlZmF1bHRQcm9wcztcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KG9iaikge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgdGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzID0gaXNUYXJnZXRTdHlsZWRDb21wID8gbWl4aW5EZWVwKHt9LCB0YXJnZXQuZGVmYXVsdFByb3BzLCBvYmopIDogb2JqO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjaGVja0R5bmFtaWNDcmVhdGlvbihkaXNwbGF5TmFtZSwgc3R5bGVkQ29tcG9uZW50SWQpO1xuICAgIFdyYXBwZWRTdHlsZWRDb21wb25lbnQud2FyblRvb01hbnlDbGFzc2VzID0gY3JlYXRlV2FyblRvb01hbnlDbGFzc2VzKGRpc3BsYXlOYW1lLCBzdHlsZWRDb21wb25lbnRJZCk7XG4gIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgV3JhcHBlZFN0eWxlZENvbXBvbmVudC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCIuXCIgKyBXcmFwcGVkU3R5bGVkQ29tcG9uZW50LnN0eWxlZENvbXBvbmVudElkO1xuICB9O1xuXG4gIGlmIChpc0NvbXBvc2l0ZUNvbXBvbmVudCkge1xuICAgIGhvaXN0KFdyYXBwZWRTdHlsZWRDb21wb25lbnQsIHRhcmdldCwge1xuICAgICAgLy8gYWxsIFNDLXNwZWNpZmljIHRoaW5ncyBzaG91bGQgbm90IGJlIGhvaXN0ZWRcbiAgICAgIGF0dHJzOiB0cnVlLFxuICAgICAgY29tcG9uZW50U3R5bGU6IHRydWUsXG4gICAgICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgICAgIGZvbGRlZENvbXBvbmVudElkczogdHJ1ZSxcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiB0cnVlLFxuICAgICAgc2VsZjogdHJ1ZSxcbiAgICAgIHN0eWxlZENvbXBvbmVudElkOiB0cnVlLFxuICAgICAgdGFyZ2V0OiB0cnVlLFxuICAgICAgd2l0aENvbXBvbmVudDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFdyYXBwZWRTdHlsZWRDb21wb25lbnQ7XG59XG5cbi8vIFxuLy8gVGhhbmtzIHRvIFJlYWN0RE9NRmFjdG9yaWVzIGZvciB0aGlzIGhhbmR5IGxpc3QhXG52YXIgZG9tRWxlbWVudHMgPSBbJ2EnLCAnYWJicicsICdhZGRyZXNzJywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdhdWRpbycsICdiJywgJ2Jhc2UnLCAnYmRpJywgJ2JkbycsICdiaWcnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYW52YXMnLCAnY2FwdGlvbicsICdjaXRlJywgJ2NvZGUnLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RhdGEnLCAnZGF0YWxpc3QnLCAnZGQnLCAnZGVsJywgJ2RldGFpbHMnLCAnZGZuJywgJ2RpYWxvZycsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW0nLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaScsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lucycsICdrYmQnLCAna2V5Z2VuJywgJ2xhYmVsJywgJ2xlZ2VuZCcsICdsaScsICdsaW5rJywgJ21haW4nLCAnbWFwJywgJ21hcmsnLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbWV0ZXInLCAnbmF2JywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdvcHRncm91cCcsICdvcHRpb24nLCAnb3V0cHV0JywgJ3AnLCAncGFyYW0nLCAncGljdHVyZScsICdwcmUnLCAncHJvZ3Jlc3MnLCAncScsICdycCcsICdydCcsICdydWJ5JywgJ3MnLCAnc2FtcCcsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc21hbGwnLCAnc291cmNlJywgJ3NwYW4nLCAnc3Ryb25nJywgJ3N0eWxlJywgJ3N1YicsICdzdW1tYXJ5JywgJ3N1cCcsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aW1lJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3UnLCAndWwnLCAndmFyJywgJ3ZpZGVvJywgJ3dicicsIC8vIFNWR1xuJ2NpcmNsZScsICdjbGlwUGF0aCcsICdkZWZzJywgJ2VsbGlwc2UnLCAnZm9yZWlnbk9iamVjdCcsICdnJywgJ2ltYWdlJywgJ2xpbmUnLCAnbGluZWFyR3JhZGllbnQnLCAnbWFya2VyJywgJ21hc2snLCAncGF0aCcsICdwYXR0ZXJuJywgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAncmFkaWFsR3JhZGllbnQnLCAncmVjdCcsICdzdG9wJywgJ3N2ZycsICd0ZXh0JywgJ3RzcGFuJ107XG5cbi8vIFxuXG52YXIgc3R5bGVkID0gZnVuY3Rpb24gc3R5bGVkKHRhZykge1xuICByZXR1cm4gY29uc3RydWN0V2l0aE9wdGlvbnMoY3JlYXRlU3R5bGVkQ29tcG9uZW50LCB0YWcpO1xufTsgLy8gU2hvcnRoYW5kcyBmb3IgYWxsIHZhbGlkIEhUTUwgRWxlbWVudHNcblxuXG5kb21FbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkb21FbGVtZW50KSB7XG4gIHN0eWxlZFtkb21FbGVtZW50XSA9IHN0eWxlZChkb21FbGVtZW50KTtcbn0pO1xuXG4vLyBcblxudmFyIEdsb2JhbFN0eWxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gR2xvYmFsU3R5bGUocnVsZXMsIGNvbXBvbmVudElkKSB7XG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xuICAgIHRoaXMuY29tcG9uZW50SWQgPSBjb21wb25lbnRJZDtcbiAgICB0aGlzLmlzU3RhdGljID0gaXNTdGF0aWNSdWxlcyhydWxlcyk7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gR2xvYmFsU3R5bGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5jcmVhdGVTdHlsZXMgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZXMoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQsIHN0eWxlU2hlZXQsIHN0eWxpcykge1xuICAgIHZhciBmbGF0Q1NTID0gZmxhdHRlbih0aGlzLnJ1bGVzLCBleGVjdXRpb25Db250ZXh0LCBzdHlsZVNoZWV0KTtcbiAgICB2YXIgY3NzID0gc3R5bGlzKGZsYXRDU1Muam9pbignJyksICcnKTtcbiAgICB2YXIgaWQgPSB0aGlzLmNvbXBvbmVudElkICsgaW5zdGFuY2U7IC8vIE5PVEU6IFdlIHVzZSB0aGUgaWQgYXMgYSBuYW1lIGFzIHdlbGwsIHNpbmNlIHRoZXNlIHJ1bGVzIG5ldmVyIGNoYW5nZVxuXG4gICAgc3R5bGVTaGVldC5pbnNlcnRSdWxlcyhpZCwgaWQsIGNzcyk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVN0eWxlcyA9IGZ1bmN0aW9uIHJlbW92ZVN0eWxlcyhpbnN0YW5jZSwgc3R5bGVTaGVldCkge1xuICAgIHN0eWxlU2hlZXQuY2xlYXJSdWxlcyh0aGlzLmNvbXBvbmVudElkICsgaW5zdGFuY2UpO1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXJTdHlsZXMgPSBmdW5jdGlvbiByZW5kZXJTdHlsZXMoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQsIHN0eWxlU2hlZXQsIHN0eWxpcykge1xuICAgIFN0eWxlU2hlZXQucmVnaXN0ZXJJZCh0aGlzLmNvbXBvbmVudElkICsgaW5zdGFuY2UpOyAvLyBOT1RFOiBSZW1vdmUgb2xkIHN0eWxlcywgdGhlbiBpbmplY3QgdGhlIG5ldyBvbmVzXG5cbiAgICB0aGlzLnJlbW92ZVN0eWxlcyhpbnN0YW5jZSwgc3R5bGVTaGVldCk7XG4gICAgdGhpcy5jcmVhdGVTdHlsZXMoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQsIHN0eWxlU2hlZXQsIHN0eWxpcyk7XG4gIH07XG5cbiAgcmV0dXJuIEdsb2JhbFN0eWxlO1xufSgpO1xuXG5mdW5jdGlvbiBjcmVhdGVHbG9iYWxTdHlsZShzdHJpbmdzKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBpbnRlcnBvbGF0aW9ucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgaW50ZXJwb2xhdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIHJ1bGVzID0gY3NzLmFwcGx5KHZvaWQgMCwgW3N0cmluZ3NdLmNvbmNhdChpbnRlcnBvbGF0aW9ucykpO1xuICB2YXIgc3R5bGVkQ29tcG9uZW50SWQgPSBcInNjLWdsb2JhbC1cIiArIGdlbmVyYXRlQ29tcG9uZW50SWQoSlNPTi5zdHJpbmdpZnkocnVsZXMpKTtcbiAgdmFyIGdsb2JhbFN0eWxlID0gbmV3IEdsb2JhbFN0eWxlKHJ1bGVzLCBzdHlsZWRDb21wb25lbnRJZCk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjaGVja0R5bmFtaWNDcmVhdGlvbihzdHlsZWRDb21wb25lbnRJZCk7XG4gIH1cblxuICBmdW5jdGlvbiBHbG9iYWxTdHlsZUNvbXBvbmVudChwcm9wcykge1xuICAgIHZhciBzdHlsZVNoZWV0ID0gdXNlU3R5bGVTaGVldCgpO1xuICAgIHZhciBzdHlsaXMgPSB1c2VTdHlsaXMoKTtcbiAgICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gICAgdmFyIGluc3RhbmNlUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gICAgaWYgKGluc3RhbmNlUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIGluc3RhbmNlUmVmLmN1cnJlbnQgPSBzdHlsZVNoZWV0LmFsbG9jYXRlR1NJbnN0YW5jZShzdHlsZWRDb21wb25lbnRJZCk7XG4gICAgfVxuXG4gICAgdmFyIGluc3RhbmNlID0gaW5zdGFuY2VSZWYuY3VycmVudDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIFJlYWN0LkNoaWxkcmVuLmNvdW50KHByb3BzLmNoaWxkcmVuKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlRoZSBnbG9iYWwgc3R5bGUgY29tcG9uZW50IFwiICsgc3R5bGVkQ29tcG9uZW50SWQgKyBcIiB3YXMgZ2l2ZW4gY2hpbGQgSlNYLiBjcmVhdGVHbG9iYWxTdHlsZSBkb2VzIG5vdCByZW5kZXIgY2hpbGRyZW4uXCIpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHJ1bGVzLnNvbWUoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgcnVsZSA9PT0gJ3N0cmluZycgJiYgcnVsZS5pbmRleE9mKCdAaW1wb3J0JykgIT09IC0xO1xuICAgIH0pKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJQbGVhc2UgZG8gbm90IHVzZSBAaW1wb3J0IENTUyBzeW50YXggaW4gY3JlYXRlR2xvYmFsU3R5bGUgYXQgdGhpcyB0aW1lLCBhcyB0aGUgQ1NTT00gQVBJcyB3ZSB1c2UgaW4gcHJvZHVjdGlvbiBkbyBub3QgaGFuZGxlIGl0IHdlbGwuIEluc3RlYWQsIHdlIHJlY29tbWVuZCB1c2luZyBhIGxpYnJhcnkgc3VjaCBhcyByZWFjdC1oZWxtZXQgdG8gaW5qZWN0IGEgdHlwaWNhbCA8bGluaz4gbWV0YSB0YWcgdG8gdGhlIHN0eWxlc2hlZXQsIG9yIHNpbXBseSBlbWJlZGRpbmcgaXQgbWFudWFsbHkgaW4geW91ciBpbmRleC5odG1sIDxoZWFkPiBzZWN0aW9uIGZvciBhIHNpbXBsZXIgYXBwLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsU3R5bGUuaXNTdGF0aWMpIHtcbiAgICAgIGdsb2JhbFN0eWxlLnJlbmRlclN0eWxlcyhpbnN0YW5jZSwgU1RBVElDX0VYRUNVVElPTl9DT05URVhULCBzdHlsZVNoZWV0LCBzdHlsaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29udGV4dCA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICB0aGVtZTogZGV0ZXJtaW5lVGhlbWUocHJvcHMsIHRoZW1lLCBHbG9iYWxTdHlsZUNvbXBvbmVudC5kZWZhdWx0UHJvcHMpXG4gICAgICB9KTtcblxuICAgICAgZ2xvYmFsU3R5bGUucmVuZGVyU3R5bGVzKGluc3RhbmNlLCBjb250ZXh0LCBzdHlsZVNoZWV0LCBzdHlsaXMpO1xuICAgIH1cblxuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGUucmVtb3ZlU3R5bGVzKGluc3RhbmNlLCBzdHlsZVNoZWV0KTtcbiAgICAgIH07XG4gICAgfSwgRU1QVFlfQVJSQVkpO1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBSZWFjdC5tZW1vKEdsb2JhbFN0eWxlQ29tcG9uZW50KTtcbn1cblxuLy8gXG5mdW5jdGlvbiBrZXlmcmFtZXMoc3RyaW5ncykge1xuICAvKiBXYXJuaW5nIGlmIHlvdSd2ZSB1c2VkIGtleWZyYW1lcyBvbiBSZWFjdCBOYXRpdmUgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybignYGtleWZyYW1lc2AgY2Fubm90IGJlIHVzZWQgb24gUmVhY3ROYXRpdmUsIG9ubHkgb24gdGhlIHdlYi4gVG8gZG8gYW5pbWF0aW9uIGluIFJlYWN0TmF0aXZlIHBsZWFzZSB1c2UgQW5pbWF0ZWQuJyk7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgaW50ZXJwb2xhdGlvbnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGludGVycG9sYXRpb25zW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBydWxlcyA9IGNzcy5hcHBseSh2b2lkIDAsIFtzdHJpbmdzXS5jb25jYXQoaW50ZXJwb2xhdGlvbnMpKS5qb2luKCcnKTtcbiAgdmFyIG5hbWUgPSBnZW5lcmF0ZUNvbXBvbmVudElkKHJ1bGVzKTtcbiAgcmV0dXJuIG5ldyBLZXlmcmFtZXMobmFtZSwgW3J1bGVzLCBuYW1lLCAnQGtleWZyYW1lcyddKTtcbn1cblxudmFyIFNlcnZlclN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXJ2ZXJTdHlsZVNoZWV0KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9lbWl0U2hlZXRDU1MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY3NzID0gX3RoaXMuaW5zdGFuY2UudG9TdHJpbmcoKTtcblxuICAgICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcbiAgICAgIHZhciBhdHRycyA9IFtub25jZSAmJiBcIm5vbmNlPVxcXCJcIiArIG5vbmNlICsgXCJcXFwiXCIsIFNDX0FUVFIgKyBcIj1cXFwidHJ1ZVxcXCJcIiwgU0NfQVRUUl9WRVJTSU9OICsgXCI9XFxcIlwiICsgU0NfVkVSU0lPTiArIFwiXFxcIlwiXTtcbiAgICAgIHZhciBodG1sQXR0ciA9IGF0dHJzLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gICAgICByZXR1cm4gXCI8c3R5bGUgXCIgKyBodG1sQXR0ciArIFwiPlwiICsgY3NzICsgXCI8L3N0eWxlPlwiO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFN0eWxlVGFncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRocm93U3R5bGVkQ29tcG9uZW50c0Vycm9yKDIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuX2VtaXRTaGVldENTUygpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFN0eWxlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfcHJvcHM7XG5cbiAgICAgIGlmIChfdGhpcy5zZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRocm93U3R5bGVkQ29tcG9uZW50c0Vycm9yKDIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcHMgPSAoX3Byb3BzID0ge30sIF9wcm9wc1tTQ19BVFRSXSA9ICcnLCBfcHJvcHNbU0NfQVRUUl9WRVJTSU9OXSA9IFNDX1ZFUlNJT04sIF9wcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgICAgX19odG1sOiBfdGhpcy5pbnN0YW5jZS50b1N0cmluZygpXG4gICAgICB9LCBfcHJvcHMpO1xuICAgICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcblxuICAgICAgaWYgKG5vbmNlKSB7XG4gICAgICAgIHByb3BzLm5vbmNlID0gbm9uY2U7XG4gICAgICB9IC8vIHY0IHJldHVybmVkIGFuIGFycmF5IGZvciB0aGlzIGZuLCBzbyB3ZSdsbCBkbyB0aGUgc2FtZSBmb3IgdjUgZm9yIGJhY2t3YXJkIGNvbXBhdFxuXG5cbiAgICAgIHJldHVybiBbLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAga2V5OiBcInNjLTAtMFwiXG4gICAgICB9KSldO1xuICAgIH07XG5cbiAgICB0aGlzLnNlYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZWFsZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IFN0eWxlU2hlZXQoe1xuICAgICAgaXNTZXJ2ZXI6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLnNlYWxlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNlcnZlclN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb2xsZWN0U3R5bGVzID0gZnVuY3Rpb24gY29sbGVjdFN0eWxlcyhjaGlsZHJlbikge1xuICAgIGlmICh0aGlzLnNlYWxlZCkge1xuICAgICAgcmV0dXJuIHRocm93U3R5bGVkQ29tcG9uZW50c0Vycm9yKDIpO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZVNoZWV0TWFuYWdlciwge1xuICAgICAgc2hlZXQ6IHRoaXMuaW5zdGFuY2VcbiAgICB9LCBjaGlsZHJlbik7XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIF9wcm90by5pbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW0gPSBmdW5jdGlvbiBpbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW0oaW5wdXQpIHtcbiAgICB7XG4gICAgICByZXR1cm4gdGhyb3dTdHlsZWRDb21wb25lbnRzRXJyb3IoMyk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTZXJ2ZXJTdHlsZVNoZWV0O1xufSgpO1xuXG4vLyBleHBvcnQgZGVmYXVsdCA8Q29uZmlnOiB7IHRoZW1lPzogYW55IH0sIEluc3RhbmNlPihcbi8vICBDb21wb25lbnQ6IEFic3RyYWN0Q29tcG9uZW50PENvbmZpZywgSW5zdGFuY2U+XG4vLyApOiBBYnN0cmFjdENvbXBvbmVudDwkRGlmZjxDb25maWcsIHsgdGhlbWU/OiBhbnkgfT4gJiB7IHRoZW1lPzogYW55IH0sIEluc3RhbmNlPlxuLy9cbi8vIGJ1dCB0aGUgb2xkIGJ1aWxkIHN5c3RlbSB0b29saW5nIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3ludGF4XG5cbnZhciB3aXRoVGhlbWUgPSAoZnVuY3Rpb24gKENvbXBvbmVudCkge1xuICAvLyAkRmxvd0ZpeE1lIFRoaXMgc2hvdWxkIGJlIFJlYWN0LmZvcndhcmRSZWY8Q29uZmlnLCBJbnN0YW5jZT5cbiAgdmFyIFdpdGhUaGVtZSA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7IC8vICRGbG93Rml4TWUgZGVmYXVsdFByb3BzIGlzbid0IGRlY2xhcmVkIHNvIGl0IGNhbiBiZSBpbmZlcnJhYmxlXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcbiAgICB2YXIgdGhlbWVQcm9wID0gZGV0ZXJtaW5lVGhlbWUocHJvcHMsIHRoZW1lLCBkZWZhdWx0UHJvcHMpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdGhlbWVQcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJbd2l0aFRoZW1lXSBZb3UgYXJlIG5vdCB1c2luZyBhIFRoZW1lUHJvdmlkZXIgbm9yIHBhc3NpbmcgYSB0aGVtZSBwcm9wIG9yIGEgdGhlbWUgaW4gZGVmYXVsdFByb3BzIGluIGNvbXBvbmVudCBjbGFzcyBcXFwiXCIgKyBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICB0aGVtZTogdGhlbWVQcm9wLFxuICAgICAgcmVmOiByZWZcbiAgICB9KSk7XG4gIH0pO1xuICBob2lzdChXaXRoVGhlbWUsIENvbXBvbmVudCk7XG4gIFdpdGhUaGVtZS5kaXNwbGF5TmFtZSA9IFwiV2l0aFRoZW1lKFwiICsgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpICsgXCIpXCI7XG4gIHJldHVybiBXaXRoVGhlbWU7XG59KTtcblxuLy8gXG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxuLy8gXG52YXIgX19QUklWQVRFX18gPSB7XG4gIFN0eWxlU2hlZXQ6IFN0eWxlU2hlZXQsXG4gIG1hc3RlclNoZWV0OiBtYXN0ZXJTaGVldFxufTtcblxuLy8gXG4vKiBEZWZpbmUgYnVuZGxlIHZlcnNpb24gZm9yIGV4cG9ydCAqL1xuXG52YXIgdmVyc2lvbiA9IFwiNS4xLjBcIjtcbi8qIFdhcm5pbmcgaWYgeW91J3ZlIGltcG9ydGVkIHRoaXMgZmlsZSBvbiBSZWFjdCBOYXRpdmUgKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS53YXJuKFwiSXQgbG9va3MgbGlrZSB5b3UndmUgaW1wb3J0ZWQgJ3N0eWxlZC1jb21wb25lbnRzJyBvbiBSZWFjdCBOYXRpdmUuXFxuXCIgKyBcIlBlcmhhcHMgeW91J3JlIGxvb2tpbmcgdG8gaW1wb3J0ICdzdHlsZWQtY29tcG9uZW50cy9uYXRpdmUnP1xcblwiICsgJ1JlYWQgbW9yZSBhYm91dCB0aGlzIGF0IGh0dHBzOi8vd3d3LnN0eWxlZC1jb21wb25lbnRzLmNvbS9kb2NzL2Jhc2ljcyNyZWFjdC1uYXRpdmUnKTtcbn1cbi8qIFdhcm5pbmcgaWYgdGhlcmUgYXJlIHNldmVyYWwgaW5zdGFuY2VzIG9mIHN0eWxlZC1jb21wb25lbnRzICovXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3dbJ19fc3R5bGVkLWNvbXBvbmVudHMtaW5pdF9fJ10gPSB3aW5kb3dbJ19fc3R5bGVkLWNvbXBvbmVudHMtaW5pdF9fJ10gfHwgMDtcblxuICBpZiAod2luZG93WydfX3N0eWxlZC1jb21wb25lbnRzLWluaXRfXyddID09PSAxKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oXCJJdCBsb29rcyBsaWtlIHRoZXJlIGFyZSBzZXZlcmFsIGluc3RhbmNlcyBvZiAnc3R5bGVkLWNvbXBvbmVudHMnIGluaXRpYWxpemVkIGluIHRoaXMgYXBwbGljYXRpb24uIFwiICsgJ1RoaXMgbWF5IGNhdXNlIGR5bmFtaWMgc3R5bGVzIG5vdCByZW5kZXJpbmcgcHJvcGVybHksIGVycm9ycyBoYXBwZW5pbmcgZHVyaW5nIHJlaHlkcmF0aW9uIHByb2Nlc3MsICcgKyAnbWlzc2luZyB0aGVtZSBwcm9wLCBhbmQgbWFrZXMgeW91ciBhcHBsaWNhdGlvbiBiaWdnZXIgd2l0aG91dCBhIGdvb2QgcmVhc29uLlxcblxcbicgKyAnU2VlIGh0dHBzOi8vcy1jLnNoLzJCQVh6ZWQgZm9yIG1vcmUgaW5mby4nKTtcbiAgfVxuXG4gIHdpbmRvd1snX19zdHlsZWQtY29tcG9uZW50cy1pbml0X18nXSArPSAxO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7XG5leHBvcnQgeyBTZXJ2ZXJTdHlsZVNoZWV0LCBTdHlsZVNoZWV0Q29uc3VtZXIsIFN0eWxlU2hlZXRDb250ZXh0LCBTdHlsZVNoZWV0TWFuYWdlciwgVGhlbWVDb25zdW1lciwgVGhlbWVDb250ZXh0LCBUaGVtZVByb3ZpZGVyLCBfX1BSSVZBVEVfXywgY3JlYXRlR2xvYmFsU3R5bGUsIGNzcywgaXNTdHlsZWRDb21wb25lbnQsIGtleWZyYW1lcywgdXNlVGhlbWUsIHZlcnNpb24sIHdpdGhUaGVtZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVkLWNvbXBvbmVudHMuYnJvd3Nlci5lc20uanMubWFwXG4iLCIvL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCLCBjb21wYXJlLCBjb21wYXJlQ29udGV4dCkge1xuICB2YXIgcmV0ID0gY29tcGFyZSA/IGNvbXBhcmUuY2FsbChjb21wYXJlQ29udGV4dCwgb2JqQSwgb2JqQikgOiB2b2lkIDA7XG5cbiAgaWYgKHJldCAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuICEhcmV0O1xuICB9XG5cbiAgaWYgKG9iakEgPT09IG9iakIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gXCJvYmplY3RcIiB8fCAhb2JqQSB8fCB0eXBlb2Ygb2JqQiAhPT0gXCJvYmplY3RcIiB8fCAhb2JqQikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgYkhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKG9iakIpO1xuXG4gIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcbiAgICB2YXIga2V5ID0ga2V5c0FbaWR4XTtcblxuICAgIGlmICghYkhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVBID0gb2JqQVtrZXldO1xuICAgIHZhciB2YWx1ZUIgPSBvYmpCW2tleV07XG5cbiAgICByZXQgPSBjb21wYXJlID8gY29tcGFyZS5jYWxsKGNvbXBhcmVDb250ZXh0LCB2YWx1ZUEsIHZhbHVlQiwga2V5KSA6IHZvaWQgMDtcblxuICAgIGlmIChyZXQgPT09IGZhbHNlIHx8IChyZXQgPT09IHZvaWQgMCAmJiB2YWx1ZUEgIT09IHZhbHVlQikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJmdW5jdGlvbiBzdHlsaXNfbWluIChXKSB7XG4gIGZ1bmN0aW9uIE0oZCwgYywgZSwgaCwgYSkge1xuICAgIGZvciAodmFyIG0gPSAwLCBiID0gMCwgdiA9IDAsIG4gPSAwLCBxLCBnLCB4ID0gMCwgSyA9IDAsIGssIHUgPSBrID0gcSA9IDAsIGwgPSAwLCByID0gMCwgSSA9IDAsIHQgPSAwLCBCID0gZS5sZW5ndGgsIEogPSBCIC0gMSwgeSwgZiA9ICcnLCBwID0gJycsIEYgPSAnJywgRyA9ICcnLCBDOyBsIDwgQjspIHtcbiAgICAgIGcgPSBlLmNoYXJDb2RlQXQobCk7XG4gICAgICBsID09PSBKICYmIDAgIT09IGIgKyBuICsgdiArIG0gJiYgKDAgIT09IGIgJiYgKGcgPSA0NyA9PT0gYiA/IDEwIDogNDcpLCBuID0gdiA9IG0gPSAwLCBCKyssIEorKyk7XG5cbiAgICAgIGlmICgwID09PSBiICsgbiArIHYgKyBtKSB7XG4gICAgICAgIGlmIChsID09PSBKICYmICgwIDwgciAmJiAoZiA9IGYucmVwbGFjZShOLCAnJykpLCAwIDwgZi50cmltKCkubGVuZ3RoKSkge1xuICAgICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGYgKz0gZS5jaGFyQXQobCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZyA9IDU5O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgY2FzZSAxMjM6XG4gICAgICAgICAgICBmID0gZi50cmltKCk7XG4gICAgICAgICAgICBxID0gZi5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgayA9IDE7XG5cbiAgICAgICAgICAgIGZvciAodCA9ICsrbDsgbCA8IEI7KSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoZyA9IGUuY2hhckNvZGVBdChsKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICAgICAgICAgIGstLTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZyA9IGUuY2hhckNvZGVBdChsICsgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBsICsgMTsgdSA8IEo7ICsrdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUuY2hhckNvZGVBdCh1KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoNDIgPT09IGcgJiYgNDIgPT09IGUuY2hhckNvZGVBdCh1IC0gMSkgJiYgbCArIDIgIT09IHUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHUgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoNDcgPT09IGcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHUgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgICAgICAgIGcrKztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICBnKys7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICBmb3IgKDsgbCsrIDwgSiAmJiBlLmNoYXJDb2RlQXQobCkgIT09IGc7KSB7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICgwID09PSBrKSBicmVhaztcbiAgICAgICAgICAgICAgbCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBrID0gZS5zdWJzdHJpbmcodCwgbCk7XG4gICAgICAgICAgICAwID09PSBxICYmIChxID0gKGYgPSBmLnJlcGxhY2UoY2EsICcnKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHEpIHtcbiAgICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgICAwIDwgciAmJiAoZiA9IGYucmVwbGFjZShOLCAnJykpO1xuICAgICAgICAgICAgICAgIGcgPSBmLmNoYXJDb2RlQXQoMSk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICAgICAgICAgIHIgPSBjO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgciA9IE87XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgayA9IE0oYywgciwgaywgZywgYSArIDEpO1xuICAgICAgICAgICAgICAgIHQgPSBrLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAwIDwgQSAmJiAociA9IFgoTywgZiwgSSksIEMgPSBIKDMsIGssIHIsIGMsIEQsIHosIHQsIGcsIGEsIGgpLCBmID0gci5qb2luKCcnKSwgdm9pZCAwICE9PSBDICYmIDAgPT09ICh0ID0gKGsgPSBDLnRyaW0oKSkubGVuZ3RoKSAmJiAoZyA9IDAsIGsgPSAnJykpO1xuICAgICAgICAgICAgICAgIGlmICgwIDwgdCkgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYucmVwbGFjZShkYSwgZWEpO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgayA9IGYgKyAneycgKyBrICsgJ30nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgICAgICAgICAgICAgIGYgPSBmLnJlcGxhY2UoZmEsICckMSAkMicpO1xuICAgICAgICAgICAgICAgICAgICBrID0gZiArICd7JyArIGsgKyAnfSc7XG4gICAgICAgICAgICAgICAgICAgIGsgPSAxID09PSB3IHx8IDIgPT09IHcgJiYgTCgnQCcgKyBrLCAzKSA/ICdALXdlYmtpdC0nICsgayArICdAJyArIGsgOiAnQCcgKyBrO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgayA9IGYgKyBrLCAxMTIgPT09IGggJiYgKGsgPSAocCArPSBrLCAnJykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBrID0gJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBrID0gTShjLCBYKGMsIGYsIEkpLCBrLCBoLCBhICsgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEYgKz0gaztcbiAgICAgICAgICAgIGsgPSBJID0gciA9IHUgPSBxID0gMDtcbiAgICAgICAgICAgIGYgPSAnJztcbiAgICAgICAgICAgIGcgPSBlLmNoYXJDb2RlQXQoKytsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIGYgPSAoMCA8IHIgPyBmLnJlcGxhY2UoTiwgJycpIDogZikudHJpbSgpO1xuICAgICAgICAgICAgaWYgKDEgPCAodCA9IGYubGVuZ3RoKSkgc3dpdGNoICgwID09PSB1ICYmIChxID0gZi5jaGFyQ29kZUF0KDApLCA0NSA9PT0gcSB8fCA5NiA8IHEgJiYgMTIzID4gcSkgJiYgKHQgPSAoZiA9IGYucmVwbGFjZSgnICcsICc6JykpLmxlbmd0aCksIDAgPCBBICYmIHZvaWQgMCAhPT0gKEMgPSBIKDEsIGYsIGMsIGQsIEQsIHosIHAubGVuZ3RoLCBoLCBhLCBoKSkgJiYgMCA9PT0gKHQgPSAoZiA9IEMudHJpbSgpKS5sZW5ndGgpICYmIChmID0gJ1xceDAwXFx4MDAnKSwgcSA9IGYuY2hhckNvZGVBdCgwKSwgZyA9IGYuY2hhckNvZGVBdCgxKSwgcSkge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgICBpZiAoMTA1ID09PSBnIHx8IDk5ID09PSBnKSB7XG4gICAgICAgICAgICAgICAgICBHICs9IGYgKyBlLmNoYXJBdChsKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIDU4ICE9PSBmLmNoYXJDb2RlQXQodCAtIDEpICYmIChwICs9IFAoZiwgcSwgZywgZi5jaGFyQ29kZUF0KDIpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBJID0gciA9IHUgPSBxID0gMDtcbiAgICAgICAgICAgIGYgPSAnJztcbiAgICAgICAgICAgIGcgPSBlLmNoYXJDb2RlQXQoKytsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICA0NyA9PT0gYiA/IGIgPSAwIDogMCA9PT0gMSArIHEgJiYgMTA3ICE9PSBoICYmIDAgPCBmLmxlbmd0aCAmJiAociA9IDEsIGYgKz0gJ1xceDAwJyk7XG4gICAgICAgICAgMCA8IEEgKiBZICYmIEgoMCwgZiwgYywgZCwgRCwgeiwgcC5sZW5ndGgsIGgsIGEsIGgpO1xuICAgICAgICAgIHogPSAxO1xuICAgICAgICAgIEQrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU5OlxuICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICBpZiAoMCA9PT0gYiArIG4gKyB2ICsgbSkge1xuICAgICAgICAgICAgeisrO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgeisrO1xuICAgICAgICAgIHkgPSBlLmNoYXJBdChsKTtcblxuICAgICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IG4gKyBtICsgYikgc3dpdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICAgICAgeSA9ICcnO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgMzIgIT09IGcgJiYgKHkgPSAnICcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHkgPSAnXFxcXDAnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgeSA9ICdcXFxcZic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICB5ID0gJ1xcXFx2JztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgbSAmJiAociA9IEkgPSAxLCB5ID0gJ1xcZicgKyB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gbiArIGIgKyBtICsgRSAmJiAwIDwgdSkgc3dpdGNoIChsIC0gdSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgIDExMiA9PT0geCAmJiA1OCA9PT0gZS5jaGFyQ29kZUF0KGwgLSAzKSAmJiAoRSA9IHgpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgMTExID09PSBLICYmIChFID0gSyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgbSAmJiAodSA9IGwpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgMCA9PT0gYiArIHYgKyBuICsgbSAmJiAociA9IDEsIHkgKz0gJ1xccicpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgIDAgPT09IGIgJiYgKG4gPSBuID09PSBnID8gMCA6IDAgPT09IG4gPyBnIDogbik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIHYgJiYgbSsrO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5MzpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyB2ICYmIG0tLTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgbSAmJiB2LS07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gbiArIGIgKyBtKSB7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IHEpIHN3aXRjaCAoMiAqIHggKyAzICogSykge1xuICAgICAgICAgICAgICAgICAgY2FzZSA1MzM6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBxID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdisrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgIDAgPT09IGIgKyB2ICsgbiArIG0gKyB1ICsgayAmJiAoayA9IDEpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgIGlmICghKDAgPCBuICsgbSArIHYpKSBzd2l0Y2ggKGIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKDIgKiBnICsgMyAqIGUuY2hhckNvZGVBdChsICsgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMzU6XG4gICAgICAgICAgICAgICAgICAgICAgYiA9IDQ3O1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjIwOlxuICAgICAgICAgICAgICAgICAgICAgIHQgPSBsLCBiID0gNDI7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgICAgICAgIDQ3ID09PSBnICYmIDQyID09PSB4ICYmIHQgKyAyICE9PSBsICYmICgzMyA9PT0gZS5jaGFyQ29kZUF0KHQgKyAyKSAmJiAocCArPSBlLnN1YnN0cmluZyh0LCBsICsgMSkpLCB5ID0gJycsIGIgPSAwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIDAgPT09IGIgJiYgKGYgKz0geSk7XG4gICAgICB9XG5cbiAgICAgIEsgPSB4O1xuICAgICAgeCA9IGc7XG4gICAgICBsKys7XG4gICAgfVxuXG4gICAgdCA9IHAubGVuZ3RoO1xuXG4gICAgaWYgKDAgPCB0KSB7XG4gICAgICByID0gYztcbiAgICAgIGlmICgwIDwgQSAmJiAoQyA9IEgoMiwgcCwgciwgZCwgRCwgeiwgdCwgaCwgYSwgaCksIHZvaWQgMCAhPT0gQyAmJiAwID09PSAocCA9IEMpLmxlbmd0aCkpIHJldHVybiBHICsgcCArIEY7XG4gICAgICBwID0gci5qb2luKCcsJykgKyAneycgKyBwICsgJ30nO1xuXG4gICAgICBpZiAoMCAhPT0gdyAqIEUpIHtcbiAgICAgICAgMiAhPT0gdyB8fCBMKHAsIDIpIHx8IChFID0gMCk7XG5cbiAgICAgICAgc3dpdGNoIChFKSB7XG4gICAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgICBwID0gcC5yZXBsYWNlKGhhLCAnOi1tb3otJDEnKSArIHA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTEyOlxuICAgICAgICAgICAgcCA9IHAucmVwbGFjZShRLCAnOjotd2Via2l0LWlucHV0LSQxJykgKyBwLnJlcGxhY2UoUSwgJzo6LW1vei0kMScpICsgcC5yZXBsYWNlKFEsICc6LW1zLWlucHV0LSQxJykgKyBwO1xuICAgICAgICB9XG5cbiAgICAgICAgRSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEcgKyBwICsgRjtcbiAgfVxuXG4gIGZ1bmN0aW9uIFgoZCwgYywgZSkge1xuICAgIHZhciBoID0gYy50cmltKCkuc3BsaXQoaWEpO1xuICAgIGMgPSBoO1xuICAgIHZhciBhID0gaC5sZW5ndGgsXG4gICAgICAgIG0gPSBkLmxlbmd0aDtcblxuICAgIHN3aXRjaCAobSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgICB2YXIgYiA9IDA7XG5cbiAgICAgICAgZm9yIChkID0gMCA9PT0gbSA/ICcnIDogZFswXSArICcgJzsgYiA8IGE7ICsrYikge1xuICAgICAgICAgIGNbYl0gPSBaKGQsIGNbYl0sIGUpLnRyaW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgdiA9IGIgPSAwO1xuXG4gICAgICAgIGZvciAoYyA9IFtdOyBiIDwgYTsgKytiKSB7XG4gICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBtOyArK24pIHtcbiAgICAgICAgICAgIGNbdisrXSA9IFooZFtuXSArICcgJywgaFtiXSwgZSkudHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIGM7XG4gIH1cblxuICBmdW5jdGlvbiBaKGQsIGMsIGUpIHtcbiAgICB2YXIgaCA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAzMyA+IGggJiYgKGggPSAoYyA9IGMudHJpbSgpKS5jaGFyQ29kZUF0KDApKTtcblxuICAgIHN3aXRjaCAoaCkge1xuICAgICAgY2FzZSAzODpcbiAgICAgICAgcmV0dXJuIGMucmVwbGFjZShGLCAnJDEnICsgZC50cmltKCkpO1xuXG4gICAgICBjYXNlIDU4OlxuICAgICAgICByZXR1cm4gZC50cmltKCkgKyBjLnJlcGxhY2UoRiwgJyQxJyArIGQudHJpbSgpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKDAgPCAxICogZSAmJiAwIDwgYy5pbmRleE9mKCdcXGYnKSkgcmV0dXJuIGMucmVwbGFjZShGLCAoNTggPT09IGQuY2hhckNvZGVBdCgwKSA/ICcnIDogJyQxJykgKyBkLnRyaW0oKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGQgKyBjO1xuICB9XG5cbiAgZnVuY3Rpb24gUChkLCBjLCBlLCBoKSB7XG4gICAgdmFyIGEgPSBkICsgJzsnLFxuICAgICAgICBtID0gMiAqIGMgKyAzICogZSArIDQgKiBoO1xuXG4gICAgaWYgKDk0NCA9PT0gbSkge1xuICAgICAgZCA9IGEuaW5kZXhPZignOicsIDkpICsgMTtcbiAgICAgIHZhciBiID0gYS5zdWJzdHJpbmcoZCwgYS5sZW5ndGggLSAxKS50cmltKCk7XG4gICAgICBiID0gYS5zdWJzdHJpbmcoMCwgZCkudHJpbSgpICsgYiArICc7JztcbiAgICAgIHJldHVybiAxID09PSB3IHx8IDIgPT09IHcgJiYgTChiLCAxKSA/ICctd2Via2l0LScgKyBiICsgYiA6IGI7XG4gICAgfVxuXG4gICAgaWYgKDAgPT09IHcgfHwgMiA9PT0gdyAmJiAhTChhLCAxKSkgcmV0dXJuIGE7XG5cbiAgICBzd2l0Y2ggKG0pIHtcbiAgICAgIGNhc2UgMTAxNTpcbiAgICAgICAgcmV0dXJuIDk3ID09PSBhLmNoYXJDb2RlQXQoMTApID8gJy13ZWJraXQtJyArIGEgKyBhIDogYTtcblxuICAgICAgY2FzZSA5NTE6XG4gICAgICAgIHJldHVybiAxMTYgPT09IGEuY2hhckNvZGVBdCgzKSA/ICctd2Via2l0LScgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgOTYzOlxuICAgICAgICByZXR1cm4gMTEwID09PSBhLmNoYXJDb2RlQXQoNSkgPyAnLXdlYmtpdC0nICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDEwMDk6XG4gICAgICAgIGlmICgxMDAgIT09IGEuY2hhckNvZGVBdCg0KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTY5OlxuICAgICAgY2FzZSA5NDI6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgOTc4OlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1vei0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgMTAxOTpcbiAgICAgIGNhc2UgOTgzOlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1vei0nICsgYSArICctbXMtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDg4MzpcbiAgICAgICAgaWYgKDQ1ID09PSBhLmNoYXJDb2RlQXQoOCkpIHJldHVybiAnLXdlYmtpdC0nICsgYSArIGE7XG4gICAgICAgIGlmICgwIDwgYS5pbmRleE9mKCdpbWFnZS1zZXQoJywgMTEpKSByZXR1cm4gYS5yZXBsYWNlKGphLCAnJDEtd2Via2l0LSQyJykgKyBhO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA5MzI6XG4gICAgICAgIGlmICg0NSA9PT0gYS5jaGFyQ29kZUF0KDQpKSBzd2l0Y2ggKGEuY2hhckNvZGVBdCg1KSkge1xuICAgICAgICAgIGNhc2UgMTAzOlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LWJveC0nICsgYS5yZXBsYWNlKCctZ3JvdycsICcnKSArICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYS5yZXBsYWNlKCdncm93JywgJ3Bvc2l0aXZlJykgKyBhO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhLnJlcGxhY2UoJ3NocmluaycsICduZWdhdGl2ZScpICsgYTtcblxuICAgICAgICAgIGNhc2UgOTg6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhLnJlcGxhY2UoJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyBhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDk2NDpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LScgKyBhICsgYTtcblxuICAgICAgY2FzZSAxMDIzOlxuICAgICAgICBpZiAoOTkgIT09IGEuY2hhckNvZGVBdCg4KSkgYnJlYWs7XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZyhhLmluZGV4T2YoJzonLCAxNSkpLnJlcGxhY2UoJ2ZsZXgtJywgJycpLnJlcGxhY2UoJ3NwYWNlLWJldHdlZW4nLCAnanVzdGlmeScpO1xuICAgICAgICByZXR1cm4gJy13ZWJraXQtYm94LXBhY2snICsgYiArICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LXBhY2snICsgYiArIGE7XG5cbiAgICAgIGNhc2UgMTAwNTpcbiAgICAgICAgcmV0dXJuIGthLnRlc3QoYSkgPyBhLnJlcGxhY2UoYWEsICc6LXdlYmtpdC0nKSArIGEucmVwbGFjZShhYSwgJzotbW96LScpICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgMWUzOlxuICAgICAgICBiID0gYS5zdWJzdHJpbmcoMTMpLnRyaW0oKTtcbiAgICAgICAgYyA9IGIuaW5kZXhPZignLScpICsgMTtcblxuICAgICAgICBzd2l0Y2ggKGIuY2hhckNvZGVBdCgwKSArIGIuY2hhckNvZGVBdChjKSkge1xuICAgICAgICAgIGNhc2UgMjI2OlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShHLCAndGInKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMzI6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKEcsICd0Yi1ybCcpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIyMDpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoRywgJ2xyJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGIgKyBhO1xuXG4gICAgICBjYXNlIDEwMTc6XG4gICAgICAgIGlmICgtMSA9PT0gYS5pbmRleE9mKCdzdGlja3knLCA5KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTc1OlxuICAgICAgICBjID0gKGEgPSBkKS5sZW5ndGggLSAxMDtcbiAgICAgICAgYiA9ICgzMyA9PT0gYS5jaGFyQ29kZUF0KGMpID8gYS5zdWJzdHJpbmcoMCwgYykgOiBhKS5zdWJzdHJpbmcoZC5pbmRleE9mKCc6JywgNykgKyAxKS50cmltKCk7XG5cbiAgICAgICAgc3dpdGNoIChtID0gYi5jaGFyQ29kZUF0KDApICsgKGIuY2hhckNvZGVBdCg3KSB8IDApKSB7XG4gICAgICAgICAgY2FzZSAyMDM6XG4gICAgICAgICAgICBpZiAoMTExID4gYi5jaGFyQ29kZUF0KDgpKSBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgYSA9IGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgYikgKyAnOycgKyBhO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIwNzpcbiAgICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICAgIGEgPSBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArICgxMDIgPCBtID8gJ2lubGluZS0nIDogJycpICsgJ2JveCcpICsgJzsnICsgYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyBiKSArICc7JyArIGEucmVwbGFjZShiLCAnLW1zLScgKyBiICsgJ2JveCcpICsgJzsnICsgYTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhICsgJzsnO1xuXG4gICAgICBjYXNlIDkzODpcbiAgICAgICAgaWYgKDQ1ID09PSBhLmNoYXJDb2RlQXQoNSkpIHN3aXRjaCAoYS5jaGFyQ29kZUF0KDYpKSB7XG4gICAgICAgICAgY2FzZSAxMDU6XG4gICAgICAgICAgICByZXR1cm4gYiA9IGEucmVwbGFjZSgnLWl0ZW1zJywgJycpLCAnLXdlYmtpdC0nICsgYSArICctd2Via2l0LWJveC0nICsgYiArICctbXMtZmxleC0nICsgYiArIGE7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC1pdGVtLScgKyBhLnJlcGxhY2UoYmEsICcnKSArIGE7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LWxpbmUtcGFjaycgKyBhLnJlcGxhY2UoJ2FsaWduLWNvbnRlbnQnLCAnJykucmVwbGFjZShiYSwgJycpICsgYTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA5NzM6XG4gICAgICBjYXNlIDk4OTpcbiAgICAgICAgaWYgKDQ1ICE9PSBhLmNoYXJDb2RlQXQoMykgfHwgMTIyID09PSBhLmNoYXJDb2RlQXQoNCkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDkzMTpcbiAgICAgIGNhc2UgOTUzOlxuICAgICAgICBpZiAoITAgPT09IGxhLnRlc3QoZCkpIHJldHVybiAxMTUgPT09IChiID0gZC5zdWJzdHJpbmcoZC5pbmRleE9mKCc6JykgKyAxKSkuY2hhckNvZGVBdCgwKSA/IFAoZC5yZXBsYWNlKCdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGMsIGUsIGgpLnJlcGxhY2UoJzpmaWxsLWF2YWlsYWJsZScsICc6c3RyZXRjaCcpIDogYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyBiKSArIGEucmVwbGFjZShiLCAnLW1vei0nICsgYi5yZXBsYWNlKCdmaWxsLScsICcnKSkgKyBhO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA5NjI6XG4gICAgICAgIGlmIChhID0gJy13ZWJraXQtJyArIGEgKyAoMTAyID09PSBhLmNoYXJDb2RlQXQoNSkgPyAnLW1zLScgKyBhIDogJycpICsgYSwgMjExID09PSBlICsgaCAmJiAxMDUgPT09IGEuY2hhckNvZGVBdCgxMykgJiYgMCA8IGEuaW5kZXhPZigndHJhbnNmb3JtJywgMTApKSByZXR1cm4gYS5zdWJzdHJpbmcoMCwgYS5pbmRleE9mKCc7JywgMjcpICsgMSkucmVwbGFjZShtYSwgJyQxLXdlYmtpdC0kMicpICsgYTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEwoZCwgYykge1xuICAgIHZhciBlID0gZC5pbmRleE9mKDEgPT09IGMgPyAnOicgOiAneycpLFxuICAgICAgICBoID0gZC5zdWJzdHJpbmcoMCwgMyAhPT0gYyA/IGUgOiAxMCk7XG4gICAgZSA9IGQuc3Vic3RyaW5nKGUgKyAxLCBkLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBSKDIgIT09IGMgPyBoIDogaC5yZXBsYWNlKG5hLCAnJDEnKSwgZSwgYyk7XG4gIH1cblxuICBmdW5jdGlvbiBlYShkLCBjKSB7XG4gICAgdmFyIGUgPSBQKGMsIGMuY2hhckNvZGVBdCgwKSwgYy5jaGFyQ29kZUF0KDEpLCBjLmNoYXJDb2RlQXQoMikpO1xuICAgIHJldHVybiBlICE9PSBjICsgJzsnID8gZS5yZXBsYWNlKG9hLCAnIG9yICgkMSknKS5zdWJzdHJpbmcoNCkgOiAnKCcgKyBjICsgJyknO1xuICB9XG5cbiAgZnVuY3Rpb24gSChkLCBjLCBlLCBoLCBhLCBtLCBiLCB2LCBuLCBxKSB7XG4gICAgZm9yICh2YXIgZyA9IDAsIHggPSBjLCB3OyBnIDwgQTsgKytnKSB7XG4gICAgICBzd2l0Y2ggKHcgPSBTW2ddLmNhbGwoQiwgZCwgeCwgZSwgaCwgYSwgbSwgYiwgdiwgbiwgcSkpIHtcbiAgICAgICAgY2FzZSB2b2lkIDA6XG4gICAgICAgIGNhc2UgITE6XG4gICAgICAgIGNhc2UgITA6XG4gICAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHggPSB3O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh4ICE9PSBjKSByZXR1cm4geDtcbiAgfVxuXG4gIGZ1bmN0aW9uIFQoZCkge1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSB2b2lkIDA6XG4gICAgICBjYXNlIG51bGw6XG4gICAgICAgIEEgPSBTLmxlbmd0aCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGQpIFNbQSsrXSA9IGQ7ZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiBkKSBmb3IgKHZhciBjID0gMCwgZSA9IGQubGVuZ3RoOyBjIDwgZTsgKytjKSB7XG4gICAgICAgICAgVChkW2NdKTtcbiAgICAgICAgfSBlbHNlIFkgPSAhIWQgfCAwO1xuICAgIH1cblxuICAgIHJldHVybiBUO1xuICB9XG5cbiAgZnVuY3Rpb24gVShkKSB7XG4gICAgZCA9IGQucHJlZml4O1xuICAgIHZvaWQgMCAhPT0gZCAmJiAoUiA9IG51bGwsIGQgPyAnZnVuY3Rpb24nICE9PSB0eXBlb2YgZCA/IHcgPSAxIDogKHcgPSAyLCBSID0gZCkgOiB3ID0gMCk7XG4gICAgcmV0dXJuIFU7XG4gIH1cblxuICBmdW5jdGlvbiBCKGQsIGMpIHtcbiAgICB2YXIgZSA9IGQ7XG4gICAgMzMgPiBlLmNoYXJDb2RlQXQoMCkgJiYgKGUgPSBlLnRyaW0oKSk7XG4gICAgViA9IGU7XG4gICAgZSA9IFtWXTtcblxuICAgIGlmICgwIDwgQSkge1xuICAgICAgdmFyIGggPSBIKC0xLCBjLCBlLCBlLCBELCB6LCAwLCAwLCAwLCAwKTtcbiAgICAgIHZvaWQgMCAhPT0gaCAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIGggJiYgKGMgPSBoKTtcbiAgICB9XG5cbiAgICB2YXIgYSA9IE0oTywgZSwgYywgMCwgMCk7XG4gICAgMCA8IEEgJiYgKGggPSBIKC0yLCBhLCBlLCBlLCBELCB6LCBhLmxlbmd0aCwgMCwgMCwgMCksIHZvaWQgMCAhPT0gaCAmJiAoYSA9IGgpKTtcbiAgICBWID0gJyc7XG4gICAgRSA9IDA7XG4gICAgeiA9IEQgPSAxO1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGNhID0gL15cXDArL2csXG4gICAgICBOID0gL1tcXDBcXHJcXGZdL2csXG4gICAgICBhYSA9IC86ICovZyxcbiAgICAgIGthID0gL3pvb3xncmEvLFxuICAgICAgbWEgPSAvKFssOiBdKSh0cmFuc2Zvcm0pL2csXG4gICAgICBpYSA9IC8sXFxyKz8vZyxcbiAgICAgIEYgPSAvKFtcXHRcXHJcXG4gXSkqXFxmPyYvZyxcbiAgICAgIGZhID0gL0Aoa1xcdyspXFxzKihcXFMqKVxccyovLFxuICAgICAgUSA9IC86OihwbGFjZSkvZyxcbiAgICAgIGhhID0gLzoocmVhZC1vbmx5KS9nLFxuICAgICAgRyA9IC9bc3ZoXVxcdystW3RibHJdezJ9LyxcbiAgICAgIGRhID0gL1xcKFxccyooLiopXFxzKlxcKS9nLFxuICAgICAgb2EgPSAvKFtcXHNcXFNdKj8pOy9nLFxuICAgICAgYmEgPSAvLXNlbGZ8ZmxleC0vZyxcbiAgICAgIG5hID0gL1teXSo/KDpbcnBdW2VsXWFbXFx3LV0rKVteXSovLFxuICAgICAgbGEgPSAvc3RyZXRjaHw6XFxzKlxcdytcXC0oPzpjb250ZXxhdmFpbCkvLFxuICAgICAgamEgPSAvKFteLV0pKGltYWdlLXNldFxcKCkvLFxuICAgICAgeiA9IDEsXG4gICAgICBEID0gMSxcbiAgICAgIEUgPSAwLFxuICAgICAgdyA9IDEsXG4gICAgICBPID0gW10sXG4gICAgICBTID0gW10sXG4gICAgICBBID0gMCxcbiAgICAgIFIgPSBudWxsLFxuICAgICAgWSA9IDAsXG4gICAgICBWID0gJyc7XG4gIEIudXNlID0gVDtcbiAgQi5zZXQgPSBVO1xuICB2b2lkIDAgIT09IFcgJiYgVShXKTtcbiAgcmV0dXJuIEI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxpc19taW47XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pdGxlc3NLZXlzO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVhY3RJbnN0YVN0b3JpZXNQcm9wcywgR2xvYmFsQ3R4IH0gZnJvbSAnLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IENvbnRhaW5lciBmcm9tICcuL2NvbXBvbmVudHMvQ29udGFpbmVyJ1xuaW1wb3J0IEdsb2JhbENvbnRleHQgZnJvbSAnLi9jb250ZXh0L0dsb2JhbCdcblxuY29uc3QgUmVhY3RJbnN0YVN0b3JpZXMgPSBmdW5jdGlvbiAocHJvcHM6IFJlYWN0SW5zdGFTdG9yaWVzUHJvcHMpIHtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBwcm9wcy5zdG9yaWVzLmZvckVhY2goKHMsIGkpID0+IHtcbiAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXVxuICAgICAgICAgICAgY29uc3QgdXJsID0gdHlwZW9mIHMgPT09ICdvYmplY3QnICYmIHMudXJsICYmIChzLnR5cGUgPT09ICdpbWFnZScgfHwgIXMudHlwZSkgPyBzLnVybCA6ICh0eXBlb2YgcyA9PT0gJ3N0cmluZycgPyBzIDogbnVsbClcbiAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICBpbWFnZXNbaV0gPSBuZXcgSW1hZ2UoKVxuICAgICAgICAgICAgICAgIGltYWdlc1tpXS5zcmMgPSB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LCBbcHJvcHMuc3Rvcmllc10pXG5cbiAgICBsZXQgY29udGV4dDogR2xvYmFsQ3R4ID0ge1xuICAgICAgICBzdG9yaWVzOiBwcm9wcy5zdG9yaWVzLm1hcChzID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHJldHVybiB7IHVybDogcyB9XG4gICAgICAgICAgICBlbHNlIHJldHVybiBzXG4gICAgICAgIH0pLFxuICAgICAgICB3aWR0aDogcHJvcHMud2lkdGgsXG4gICAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICAgICAgICBsb2FkZXI6IHByb3BzLmxvYWRlcixcbiAgICAgICAgaGVhZGVyOiBwcm9wcy5oZWFkZXIsXG4gICAgICAgIHN0b3J5U3R5bGVzOiBwcm9wcy5zdG9yeVN0eWxlcyxcbiAgICAgICAgbG9vcDogcHJvcHMubG9vcCxcbiAgICAgICAgZGVmYXVsdEludGVydmFsOiBwcm9wcy5kZWZhdWx0SW50ZXJ2YWwsXG4gICAgICAgIGlzUGF1c2VkOiBwcm9wcy5pc1BhdXNlZCxcbiAgICAgICAgY3VycmVudEluZGV4OiBwcm9wcy5jdXJyZW50SW5kZXgsXG4gICAgICAgIG9uU3RvcnlTdGFydDogcHJvcHMub25TdG9yeVN0YXJ0LFxuICAgICAgICBvblN0b3J5RW5kOiBwcm9wcy5vblN0b3J5RW5kLFxuICAgICAgICBvbkFsbFN0b3JpZXNFbmQ6IHByb3BzLm9uQWxsU3Rvcmllc0VuZFxuICAgIH1cbiAgICByZXR1cm4gPEdsb2JhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAgICA8Q29udGFpbmVyIC8+XG4gICAgPC9HbG9iYWxDb250ZXh0LlByb3ZpZGVyPlxufVxuXG5SZWFjdEluc3RhU3Rvcmllcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgd2lkdGg6IDM2MCxcbiAgICBoZWlnaHQ6IDY0MCxcbiAgICBkZWZhdWx0SW50ZXJ2YWw6IDQwMDBcbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVhY3RJbnN0YVN0b3JpZXMiLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgR2xvYmFsQ29udGV4dCBmcm9tICcuLy4uL2NvbnRleHQvR2xvYmFsJ1xuaW1wb3J0IFByb2dyZXNzQ29udGV4dCBmcm9tICcuLy4uL2NvbnRleHQvUHJvZ3Jlc3MnXG5pbXBvcnQgU3RvcnkgZnJvbSAnLi9TdG9yeSdcbmltcG9ydCBQcm9ncmVzc0FycmF5IGZyb20gJy4vUHJvZ3Jlc3NBcnJheSdcbmltcG9ydCB7IEdsb2JhbEN0eCB9IGZyb20gJy4vLi4vaW50ZXJmYWNlcydcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFtjdXJyZW50SWQsIHNldEN1cnJlbnRJZF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG4gICAgY29uc3QgW3BhdXNlLCBzZXRQYXVzZV0gPSB1c2VTdGF0ZTxib29sZWFuPih0cnVlKVxuICAgIGNvbnN0IFtjb3VudCwgc2V0Q291bnRdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuICAgIGNvbnN0IFtidWZmZXJBY3Rpb24sIHNldEJ1ZmZlckFjdGlvbl0gPSB1c2VTdGF0ZTxib29sZWFuPih0cnVlKVxuICAgIGNvbnN0IFt2aWRlb0R1cmF0aW9uLCBzZXRWaWRlb0R1cmF0aW9uXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuICAgIGxldCBtb3VzZWRvd25JZCA9IHVzZVJlZjxhbnk+KClcbiAgICBsZXQgYW5pbWF0aW9uRnJhbWVJZCA9IHVzZVJlZjxudW1iZXI+KClcblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGVmYXVsdEludGVydmFsLCBzdG9yaWVzLCBsb29wLCBjdXJyZW50SW5kZXgsIGlzUGF1c2VkLCBvblN0b3J5U3RhcnQsIG9uU3RvcnlFbmQsIG9uQWxsU3Rvcmllc0VuZCB9ID0gdXNlQ29udGV4dDxHbG9iYWxDdHg+KEdsb2JhbENvbnRleHQpXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIXBhdXNlKSB7XG4gICAgICAgICAgICBhbmltYXRpb25GcmFtZUlkLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaW5jcmVtZW50Q291bnQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lSWQuY3VycmVudClcbiAgICAgICAgfVxuICAgIH0sIFtjdXJyZW50SWQsIHBhdXNlXSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldENvdW50KDApXG4gICAgfSwgW2N1cnJlbnRJZCwgc3Rvcmllc10pXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gMCAmJiBjdXJyZW50SW5kZXggPCBzdG9yaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNldEN1cnJlbnRJZChjdXJyZW50SW5kZXgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0luZGV4IG91dCBvZiBib3VuZHMuIEN1cnJlbnQgaW5kZXggd2FzIHNldCB0byB2YWx1ZSBtb3JlIHRoYW4gdGhlIGxlbmd0aCBvZiBzdG9yaWVzIGFycmF5LicsIGN1cnJlbnRJbmRleClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtjdXJyZW50SW5kZXhdKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpc1BhdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBzZXRQYXVzZShpc1BhdXNlZClcbiAgICAgICAgfVxuICAgIH0sIFtpc1BhdXNlZF0pXG5cblxuICAgIGNvbnN0IGluY3JlbWVudENvdW50ID0gKCkgPT4ge1xuICAgICAgICBzZXRDb3VudCgoY291bnQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSBzdG9yeVN0YXJ0Q2FsbGJhY2soKVxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBnZXRDdXJyZW50SW50ZXJ2YWwoKVxuICAgICAgICAgICAgaWYgKGNvdW50IDwgMTAwKSB7XG4gICAgICAgICAgICAgLy8gICBhbmltYXRpb25GcmFtZUlkLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaW5jcmVtZW50Q291bnQpXG4gICAgICAgICAgICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntyZXNvbHZlKCl9LDEwKVxuICAgICAgICAgICAgICAgIH0pLnRoZW4oaW5jcmVtZW50Q291bnQpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0b3J5RW5kQ2FsbGJhY2soKVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SWQgPT09IHN0b3JpZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhbGxTdG9yaWVzRW5kQ2FsbGJhY2soKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3VudCArICgxMDAgLyAoKGludGVydmFsIC8gMTApLyoqIDYwIEZQUyDrnbzqs6Ag6rOg7KCV7ZWcIOqzhOyCsOyeheuLiOuLpC4gKi8pKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHN0b3J5U3RhcnRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgb25TdG9yeVN0YXJ0ICYmIG9uU3RvcnlTdGFydChjdXJyZW50SWQsIHN0b3JpZXNbY3VycmVudElkXSlcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yeUVuZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBvblN0b3J5RW5kICYmIG9uU3RvcnlFbmQoY3VycmVudElkLCBzdG9yaWVzW2N1cnJlbnRJZF0pXG4gICAgfVxuXG4gICAgY29uc3QgYWxsU3Rvcmllc0VuZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBvbkFsbFN0b3JpZXNFbmQgJiYgb25BbGxTdG9yaWVzRW5kKClcbiAgICB9XG5cbiAgICBjb25zdCBnZXRDdXJyZW50SW50ZXJ2YWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzdG9yaWVzW2N1cnJlbnRJZF0udHlwZSA9PT0gJ3ZpZGVvJykgcmV0dXJuIHZpZGVvRHVyYXRpb25cbiAgICAgICAgaWYgKHR5cGVvZiBzdG9yaWVzW2N1cnJlbnRJZF0uZHVyYXRpb24gPT09ICdudW1iZXInKSByZXR1cm4gc3Rvcmllc1tjdXJyZW50SWRdLmR1cmF0aW9uXG4gICAgICAgIHJldHVybiBkZWZhdWx0SW50ZXJ2YWxcbiAgICB9XG5cbiAgICBjb25zdCB0b2dnbGVTdGF0ZSA9IChhY3Rpb246IHN0cmluZyxpbmRleCA/OiBudW1iZXIsIGJ1ZmZlckFjdGlvbj86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgc2V0UGF1c2UoYWN0aW9uID09PSAncGF1c2UnKVxuICAgICAgICBpZihhY3Rpb24gPT09ICdwYXVzZScpe1xuICAgICAgICAgICAgc2V0UGF1c2UodHJ1ZSlcbiAgICAgICAgfWVsc2UgaWYoYWN0aW9uID09PSAncGxheScpe1xuICAgICAgICAgICAgc2V0UGF1c2UoZmFsc2UpXG4gICAgICAgIH1lbHNlIGlmKGFjdGlvbiA9PSAncHJldicpe1xuICAgICAgICAgICAgcHJldmlvdXMoKVxuICAgICAgICB9ZWxzZSBpZihhY3Rpb24gPT0gJ25leHQnKXtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICB9ZWxzZSBpZihhY3Rpb24gPT0gJ3NldGNvdW50Jyl7XG4gICAgICAgICAgICBzZXRDb3VudChpbmRleClcbiAgICAgICAgfVxuICAgICAgICBzZXRCdWZmZXJBY3Rpb24oISFidWZmZXJBY3Rpb24pXG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50SWQgPiAwKSB7XG4gICAgICAgICAgICBzZXRDdXJyZW50SWQoY3VycmVudElkIC0gMSlcbiAgICAgICAgICAgIHNldENvdW50KDApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICBpZiAobG9vcCkge1xuICAgICAgICAgICAgdXBkYXRlTmV4dFN0b3J5SWRGb3JMb29wKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZU5leHRTdG9yeUlkKClcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVOZXh0U3RvcnlJZEZvckxvb3AgPSAoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRJZCgoY3VycmVudElkICsgMSkgJSBzdG9yaWVzLmxlbmd0aClcbiAgICAgICAgc2V0Q291bnQoMClcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVOZXh0U3RvcnlJZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRJZCA8IHN0b3JpZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgc2V0Q3VycmVudElkKGN1cnJlbnRJZCArIDEpXG4gICAgICAgICAgICBzZXRDb3VudCgwKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGVib3VuY2VQYXVzZSA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50IHwgUmVhY3QuVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgbW91c2Vkb3duSWQuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRvZ2dsZVN0YXRlKCdwYXVzZScpXG4gICAgICAgIH0sIDIwMClcbiAgICB9XG5cbiAgICBjb25zdCBtb3VzZVVwID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQgfCBSZWFjdC5Ub3VjaEV2ZW50LCB0eXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG1vdXNlZG93bklkLmN1cnJlbnQgJiYgY2xlYXJUaW1lb3V0KG1vdXNlZG93bklkLmN1cnJlbnQpXG4gICAgICAgIGlmIChwYXVzZSkge1xuICAgICAgICAgICAgdG9nZ2xlU3RhdGUoJ3BsYXknKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHlwZSA9PT0gJ25leHQnID8gbmV4dCgpIDogcHJldmlvdXMoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0VmlkZW9EdXJhdGlvbiA9IChkdXJhdGlvbjogbnVtYmVyKSA9PiB7XG4gICAgICAgIHNldFZpZGVvRHVyYXRpb24oZHVyYXRpb24gKiAxMDAwKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3R5bGVzLmNvbnRhaW5lciwgLi4ueyB3aWR0aCwgaGVpZ2h0IH0gfX0+XG4gICAgICAgICAgICA8UHJvZ3Jlc3NDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7XG4gICAgICAgICAgICAgICAgYnVmZmVyQWN0aW9uOiBidWZmZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgdmlkZW9EdXJhdGlvbjogdmlkZW9EdXJhdGlvbixcbiAgICAgICAgICAgICAgICBudW1BcnJheTogc3Rvcmllcy5tYXAoKF8sIGkpID0+IGkpLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTdG9yeTogc3Rvcmllc1tjdXJyZW50SWRdLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRJZCxcbiAgICAgICAgICAgICAgICBjb3VudCxcbiAgICAgICAgICAgICAgICBwYXVzZVxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPFByb2dyZXNzQXJyYXkgLz5cbiAgICAgICAgICAgIDwvUHJvZ3Jlc3NDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgPFN0b3J5XG4gICAgICAgICAgICAgICAgYWN0aW9uPXt0b2dnbGVTdGF0ZX1cbiAgICAgICAgICAgICAgICBidWZmZXJBY3Rpb249e2J1ZmZlckFjdGlvbn1cbiAgICAgICAgICAgICAgICBwbGF5U3RhdGU9e3BhdXNlfVxuICAgICAgICAgICAgICAgIHN0b3J5PXtzdG9yaWVzW2N1cnJlbnRJZF19XG4gICAgICAgICAgICAgICAgZ2V0VmlkZW9EdXJhdGlvbj17Z2V0VmlkZW9EdXJhdGlvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgIHsvKiogIDxkaXYgc3R5bGU9e3N0eWxlcy5vdmVybGF5fT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAnNTAlJywgekluZGV4OiA5OTkgfX0gb25Ub3VjaFN0YXJ0PXtkZWJvdW5jZVBhdXNlfSBvblRvdWNoRW5kPXtlID0+IG1vdXNlVXAoZSwgJ3ByZXZpb3VzJyl9IG9uTW91c2VEb3duPXtkZWJvdW5jZVBhdXNlfSBvbk1vdXNlVXA9eyhlKSA9PiBtb3VzZVVwKGUsICdwcmV2aW91cycpfSAvPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6ICc1MCUnLCB6SW5kZXg6IDk5OSB9fSBvblRvdWNoU3RhcnQ9e2RlYm91bmNlUGF1c2V9IG9uVG91Y2hFbmQ9e2UgPT4gbW91c2VVcChlLCAnbmV4dCcpfSBvbk1vdXNlRG93bj17ZGVib3VuY2VQYXVzZX0gb25Nb3VzZVVwPXsoZSkgPT4gbW91c2VVcChlLCAnbmV4dCcpfSAvPlxuICAgICAgICAgICAgPC9kaXY+ICovfVxuICAgICAgICA8L2Rpdj5cbiAgICApXG59XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgICBjb250YWluZXI6IHtcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgYmFja2dyb3VuZDogJyMxMTEnLFxuICAgICAgICBmbGV4IDogXCIxIDAgYXV0b1wiLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICAgIH0sXG4gICAgb3ZlcmxheToge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgaGVpZ2h0OiAnaW5oZXJpdCcsXG4gICAgICAgIHdpZHRoOiAnaW5oZXJpdCcsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4J1xuICAgIH1cbn0iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ29udGV4dCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdG9yeVByb3BzLCBHbG9iYWxDdHggfSBmcm9tIFwiLi8uLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgSGVhZGVyIGZyb20gXCIuL0hlYWRlclwiO1xuaW1wb3J0IFNlZU1vcmUgZnJvbSBcIi4vU2VlTW9yZVwiO1xuaW1wb3J0IGdsb2JhbFN0eWxlIGZyb20gJy4vLi4vc3R5bGVzLmNzcydcbmltcG9ydCBHbG9iYWxDb250ZXh0IGZyb20gXCIuLy4uL2NvbnRleHQvR2xvYmFsXCI7XG5cbmNvbnN0IFN0b3J5ID0gKHByb3BzOiBTdG9yeVByb3BzKSA9PiB7XG5cdGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cdGNvbnN0IFtzaG93TW9yZSwgc2V0U2hvd01vcmVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbG9hZGVyLCBoZWFkZXIsIHN0b3J5U3R5bGVzIH0gPSB1c2VDb250ZXh0PEdsb2JhbEN0eD4oXG5cdFx0R2xvYmFsQ29udGV4dFxuXHQpO1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2hvd01vcmUoZmFsc2UpXG5cdFx0aWYgKHR5cGVvZiBwcm9wcy5zdG9yeSA9PT0gJ29iamVjdCcgJiYgcHJvcHMuc3RvcnkuY29udGVudCkge1xuXHRcdFx0c2V0TG9hZGVkKHRydWUpXG5cdFx0XHRwcm9wcy5hY3Rpb24oJ3BhdXNlJywgdHJ1ZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0TG9hZGVkKGZhbHNlKVxuXHRcdFx0cHJvcHMuYWN0aW9uKFwicGF1c2VcIiwgdHJ1ZSk7XG5cdFx0XHR2aWQuY3VycmVudCAmJlxuXHRcdFx0XHR2aWQuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwid2FpdGluZ1wiLCAoKSA9PiB7XG5cdFx0XHRcdFx0cHJvcHMuYWN0aW9uKFwicGF1c2VcIiwgdHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0dmlkLmN1cnJlbnQgJiZcblx0XHRcdFx0dmlkLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBsYXlpbmdcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdHByb3BzLmFjdGlvbihcInBsYXlcIiwgdHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSwgW3Byb3BzLnN0b3J5XSk7XG5cblx0bGV0IHZpZCA9IHVzZVJlZjxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1x0XG5cdFx0aWYgKHZpZC5jdXJyZW50KSB7XG5cdFx0XHRpZiAocHJvcHMucGxheVN0YXRlKSB7XG5cdFx0XHRcdHZpZC5jdXJyZW50LnBhdXNlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcblx0XHRcdFx0dmlkLmN1cnJlbnQucGxheSgpLmNhdGNoKGUgPT4gY29uc29sZS5sb2coZSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgW3Byb3BzLnBsYXlTdGF0ZV0pO1xuXG5cdGNvbnN0IHRvZ2dsZU1vcmUgPSAoc2hvdzogYm9vbGVhbikgPT4ge1xuXHRcdHNldFNob3dNb3JlKHNob3cpXG5cdFx0cHJvcHMuYWN0aW9uKHNob3cgPyAncGF1c2UnIDogJ3BsYXknKVxuXHR9O1xuXG5cdGNvbnN0IGltYWdlTG9hZGVkID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRMb2FkZWQodHJ1ZSk7XG5cdFx0XHRwcm9wcy5hY3Rpb24oXCJwbGF5XCIsIHRydWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbnNvbGUubG9nKGUpO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCB2aWRlb0xvYWRlZCA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0cHJvcHMuZ2V0VmlkZW9EdXJhdGlvbih2aWQuY3VycmVudC5kdXJhdGlvbik7XG5cdFx0XHR2aWQuY3VycmVudCAmJlxuXHRcdFx0XHR2aWQuY3VycmVudFxuXHRcdFx0XHRcdC5wbGF5KClcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpbWFnZUxvYWRlZCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGUgPT4ge1xuXHRcdFx0XHRcdFx0cHJvcHMuYWN0aW9uKFwicGF1c2VcIik7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlKTtcblx0XHRcdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhlKTtcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgZ2V0U3RvcnlDb250ZW50ID0gKCkgPT4ge1xuXHRcdGxldCBJbm5lckNvbnRlbnQgPSB0eXBlb2YgcHJvcHMuc3RvcnkgPT09IFwib2JqZWN0XCIgJiYgcHJvcHMuc3RvcnkuY29udGVudFxuXHRcdGlmIChJbm5lckNvbnRlbnQpIHtcblx0XHRcdHJldHVybiA8SW5uZXJDb250ZW50IGFjdGlvbj17cHJvcHMuYWN0aW9ufSBpc1BhdXNlZD17cHJvcHMucGxheVN0YXRlfSAvPlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgc291cmNlID1cblx0XHRcdFx0dHlwZW9mIHByb3BzLnN0b3J5ID09PSBcIm9iamVjdFwiID8gcHJvcHMuc3RvcnkudXJsIDogcHJvcHMuc3Rvcnk7XG5cdFx0XHRsZXQgc3RvcnlDb250ZW50U3R5bGVzID1cblx0XHRcdFx0KHR5cGVvZiBwcm9wcy5zdG9yeSA9PT0gXCJvYmplY3RcIiAmJiBwcm9wcy5zdG9yeS5zdHlsZXMpIHx8XG5cdFx0XHRcdHN0b3J5U3R5bGVzIHx8XG5cdFx0XHRcdHN0eWxlcy5zdG9yeUNvbnRlbnQ7XG5cdFx0XHRsZXQgdHlwZSA9XG5cdFx0XHRcdHR5cGVvZiBwcm9wcy5zdG9yeSA9PT0gXCJvYmplY3RcIiAmJiBwcm9wcy5zdG9yeS50eXBlID09PSBcInZpZGVvXCJcblx0XHRcdFx0XHQ/IFwidmlkZW9cIlxuXHRcdFx0XHRcdDogXCJpbWFnZVwiO1xuXHRcdFx0cmV0dXJuIHR5cGUgPT09IFwiaW1hZ2VcIiA/IChcblx0XHRcdFx0PGltZyBzdHlsZT17c3RvcnlDb250ZW50U3R5bGVzfSBzcmM9e3NvdXJjZX0gb25Mb2FkPXtpbWFnZUxvYWRlZH0gLz5cblx0XHRcdCkgOiB0eXBlID09PSBcInZpZGVvXCIgPyAoXG5cdFx0XHRcdDx2aWRlb1xuXHRcdFx0XHRcdHJlZj17dmlkfVxuXHRcdFx0XHRcdHN0eWxlPXtzdG9yeUNvbnRlbnRTdHlsZXN9XG5cdFx0XHRcdFx0c3JjPXtzb3VyY2V9XG5cdFx0XHRcdFx0Y29udHJvbHM9e2ZhbHNlfVxuXHRcdFx0XHRcdG9uTG9hZGVkRGF0YT17dmlkZW9Mb2FkZWR9XG5cdFx0XHRcdFx0YXV0b1BsYXlcblx0XHRcdFx0XHRwbGF5c0lubGluZVxuXHRcdFx0XHQvPlxuXHRcdFx0KSA6IG51bGw7XG5cdFx0fVxuXHR9O1xuXG5cdGxldCBpc0hlYWRlciA9IHR5cGVvZiBwcm9wcy5zdG9yeSA9PT0gXCJvYmplY3RcIiAmJiBwcm9wcy5zdG9yeS5oZWFkZXI7XG5cdHJldHVybiAoXG5cdFx0PGRpdiBzdHlsZT17eyAuLi5zdHlsZXMuc3RvcnksIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfX0+XG5cdFx0XHR7Z2V0U3RvcnlDb250ZW50KCl9XG5cdFx0XHR7aXNIZWFkZXIgJiYgKFxuXHRcdFx0XHQ8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIGxlZnQ6IDEyLCB0b3A6IDIwLCB6SW5kZXg6IDE5IH19PlxuXHRcdFx0XHRcdHt0eXBlb2YgcHJvcHMuc3RvcnkgPT09IFwib2JqZWN0XCIgPyAoXG5cdFx0XHRcdFx0XHRoZWFkZXIgPyAoXG5cdFx0XHRcdFx0XHRcdGhlYWRlcihwcm9wcy5zdG9yeS5oZWFkZXIpXG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHRcdDxIZWFkZXJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRpbmc9e3Byb3BzLnN0b3J5LmhlYWRlci5oZWFkaW5nfVxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViaGVhZGluZz17cHJvcHMuc3RvcnkuaGVhZGVyLnN1YmhlYWRpbmd9XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9maWxlSW1hZ2U9e3Byb3BzLnN0b3J5LmhlYWRlci5wcm9maWxlSW1hZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCkgOiBudWxsfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0XHR7IWxvYWRlZCAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBoZWlnaHQsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuXHRcdFx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdGJhY2tncm91bmQ6IFwicmdiYSgwLCAwLCAwLCAwLjkpXCIsXG5cdFx0XHRcdFx0XHR6SW5kZXg6IDksXG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuXHRcdFx0XHRcdFx0YWxpZ25JdGVtczogXCJjZW50ZXJcIixcblx0XHRcdFx0XHRcdGNvbG9yOiBcIiNjY2NcIlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bG9hZGVyIHx8IDxkaXYgY2xhc3NOYW1lPXtnbG9iYWxTdHlsZS5zcGlubmVyfSAvPn1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdFx0e3R5cGVvZiBwcm9wcy5zdG9yeSA9PT0gXCJvYmplY3RcIiAmJiBwcm9wcy5zdG9yeS5zZWVNb3JlICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuXHRcdFx0XHRcdFx0bWFyZ2luOiBcImF1dG9cIixcblx0XHRcdFx0XHRcdGJvdHRvbTogc2hvd01vcmUgPyAndW5zZXQnIDogMCxcblx0XHRcdFx0XHRcdHpJbmRleDogOTk5OSxcblx0XHRcdFx0XHRcdHdpZHRoOiBcIjEwMCVcIixcblx0XHRcdFx0XHRcdGhlaWdodDogc2hvd01vcmUgPyAnMTAwJScgOiAnYXV0bydcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PFNlZU1vcmVcblx0XHRcdFx0XHRcdGFjdGlvbj17cHJvcHMuYWN0aW9ufVxuXHRcdFx0XHRcdFx0dG9nZ2xlTW9yZT17dG9nZ2xlTW9yZX1cblx0XHRcdFx0XHRcdHNob3dDb250ZW50PXtzaG93TW9yZX1cblx0XHRcdFx0XHRcdHNlZU1vcmVDb250ZW50PXtwcm9wcy5zdG9yeS5zZWVNb3JlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0c3Rvcnk6IHtcblx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuXHRcdG92ZXJmbG93OiBcImhpZGRlblwiXG5cdH0sXG5cdHN0b3J5Q29udGVudDoge1xuXHRcdHdpZHRoOiBcImF1dG9cIixcblx0XHRtYXhXaWR0aDogXCIxMDAlXCIsXG5cdFx0bWF4SGVpZ2h0OiBcIjEwMCVcIixcblx0XHRtYXJnaW46IFwiYXV0b1wiXG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFN0b3J5O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSGVhZGVyUHJvcHMgfSBmcm9tICcuLy4uL2ludGVyZmFjZXMnXG5cbmNvbnN0IEhlYWRlciA9ICh7IHByb2ZpbGVJbWFnZSwgaGVhZGluZywgc3ViaGVhZGluZyB9OiBIZWFkZXJQcm9wcykgPT5cbiAgICA8ZGl2IHN0eWxlPXtzdHlsZXMubWFpbn0+XG4gICAgICAgIHtwcm9maWxlSW1hZ2UgJiYgPGltZyBzdHlsZT17c3R5bGVzLmltZ30gc3JjPXtwcm9maWxlSW1hZ2V9IC8+fVxuICAgICAgICA8c3BhbiBzdHlsZT17c3R5bGVzLnRleHR9PlxuICAgICAgICAgICAgPHAgc3R5bGU9e3N0eWxlcy5oZWFkaW5nfT57aGVhZGluZ308L3A+XG4gICAgICAgICAgICA8cCBzdHlsZT17c3R5bGVzLnN1YmhlYWRpbmd9PntzdWJoZWFkaW5nfTwvcD5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG5jb25zdCBzdHlsZXMgPSB7XG4gICAgbWFpbjoge1xuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInXG4gICAgfSxcbiAgICBpbWc6IHtcbiAgICAgICAgd2lkdGg6IDQwLFxuICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDQwLFxuICAgICAgICBtYXJnaW5SaWdodDogMTAsXG4gICAgICAgIGZpbHRlcjogJ2Ryb3Atc2hhZG93KDAgMHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuNSkpJyxcbiAgICAgICAgYm9yZGVyOiAnMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSdcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgZmlsdGVyOiAnZHJvcC1zaGFkb3coMCAwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC45KSknXG4gICAgfSxcbiAgICBoZWFkaW5nOiB7XG4gICAgICAgIGZvbnRTaXplOiAnMXJlbScsXG4gICAgICAgIGNvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpJyxcbiAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICBtYXJnaW5Cb3R0b206IDJcbiAgICB9LFxuICAgIHN1YmhlYWRpbmc6IHtcbiAgICAgICAgZm9udFNpemU6ICcwLjZyZW0nLFxuICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC44KScsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2VlTW9yZVByb3BzIH0gZnJvbSAnLi8uLi9pbnRlcmZhY2VzJ1xuLy8gaW1wb3J0IHVwIGZyb20gJy4vLi4vdXAucG5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZWVNb3JlKHByb3BzOiBTZWVNb3JlUHJvcHMpIHtcbiAgICBjb25zdCBTZWVNb3JlQ29udGVudCA9IHByb3BzLnNlZU1vcmVDb250ZW50XG4gICAgcmV0dXJuIChcbiAgICAgICAgcHJvcHMuc2hvd0NvbnRlbnRcbiAgICAgICAgICAgID8gPGRpdiBzdHlsZT17c3R5bGVzLnNlZU1vcmVFeHBhbmRlZH0+XG4gICAgICAgICAgICAgICAgPFNlZU1vcmVDb250ZW50IGNsb3NlPXsoKSA9PiBwcm9wcy50b2dnbGVNb3JlKGZhbHNlKX0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgOiA8ZGl2IG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy50b2dnbGVNb3JlKHRydWUpXG4gICAgICAgICAgICB9fSBzdHlsZT17c3R5bGVzLnNlZU1vcmV9PlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXtzdHlsZXMuc2VlTW9yZUljb259PuKMgzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17c3R5bGVzLnNlZU1vcmVUZXh0fT5TZWUgbW9yZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgIClcbn1cblxuY29uc3Qgc3R5bGVzOiBhbnkgPSB7XG4gICAgc2VlTW9yZToge1xuICAgICAgICBoZWlnaHQ6IFwiMTB2aFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcImxpbmVhci1ncmFkaWVudChyZ2JhKDAsIDAsIDAsIDApLCByZ2JhKDAsIDAsIDAsIDAuMikpXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGp1c3RpZnlDb250ZW50OiBcImZsZXgtZW5kXCIsXG4gICAgICAgIGJvdHRvbTogMFxuICAgIH0sXG4gICAgc2VlTW9yZUV4cGFuZGVkOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgekluZGV4OiA5OTk5OVxuICAgIH0sXG4gICAgc2VlTW9yZVRleHQ6IHtcbiAgICAgICAgY29sb3I6IFwid2hpdGVcIixcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBsZXR0ZXJTcGFjaW5nOiBcIjAuMWVtXCIsXG4gICAgICAgIG1hcmdpbkJvdHRvbTogXCIyLjJ2aFwiLFxuICAgICAgICB0ZXh0VHJhbnNmb3JtOiBcImNhcGl0YWxpemVcIixcbiAgICAgICAgb3BhY2l0eTogXCIxXCIsXG4gICAgICAgIGZvbnRTaXplOiBcIjAuOGVtXCIsXG4gICAgICAgIHRyYW5zaXRpb246IFwib3BhY2l0eSAzMDBtcyBlYXNlLWluLW91dFwiXG4gICAgfSxcbiAgICBzZWVNb3JlSWNvbjoge1xuICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGxldHRlclNwYWNpbmc6IFwiMC4yZW1cIixcbiAgICAgICAgbWFyZ2luQm90dG9tOiBcIjAuNHZoXCIsXG4gICAgICAgIG9wYWNpdHk6IFwiMVwiLFxuICAgICAgICBmaWx0ZXI6IFwiZHJvcC1zaGFkb3coMCAwIDVweCBibGFjaylcIixcbiAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJjYXBpdGFsaXplXCIsXG4gICAgICAgIHRyYW5zaXRpb246IFwib3BhY2l0eSAzMDBtcyBlYXNlLWluLW91dFwiXG4gICAgfSxcbiAgICBzZWVNb3JlQ2xvc2U6IHtcbiAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgZmlsdGVyOiBcImRyb3Atc2hhZG93KDAgM3B4IDJweCAjY2NjKVwiLFxuICAgICAgICByaWdodDogXCIwLjVyZW1cIixcbiAgICAgICAgdG9wOiBcIjAuNXJlbVwiLFxuICAgICAgICBmb250U2l6ZTogXCIxLjVyZW1cIixcbiAgICAgICAgb3BhY2l0eTogXCIwLjdcIixcbiAgICAgICAgcGFkZGluZzogXCIxcmVtXCJcbiAgICB9XG59IiwidmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvQHRlYW1zdXBlcmNlbGwvdHlwaW5ncy1mb3ItY3NzLW1vZHVsZXMtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS01LTIhLi9zdHlsZXMuY3NzXCIpO1xuXG5pZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbn1cblxudmFyIG9wdGlvbnMgPSB7fVxuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZiAoY29udGVudC5sb2NhbHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbn1cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpKGZhbHNlKTtcbi8vIE1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLl8xQ0s3RkhWd2hpT251Q2laSndpUHExIHtcXG5cXHR3aWR0aDogNDBweDtcXG5cXHRoZWlnaHQ6IDQwcHg7XFxuXFx0bWFyZ2luOiAxMDBweCBhdXRvO1xcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuXFxuXFx0Ym9yZGVyLXJhZGl1czogMTAwJTtcXG5cXHQtd2Via2l0LWFuaW1hdGlvbjogXzFoRVEyVnpJa1RpWi05alpvTEkzSkMgMXMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XFxuXFx0YW5pbWF0aW9uOiBfMWhFUTJWeklrVGlaLTlqWm9MSTNKQyAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIF8xaEVRMlZ6SWtUaVotOWpab0xJM0pDIHtcXG5cXHQwJSB7XFxuXFx0XFx0LXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcblxcdH1cXG5cXHQxMDAlIHtcXG5cXHRcXHQtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XFxuXFx0XFx0b3BhY2l0eTogMDtcXG5cXHR9XFxufVxcblxcbkBrZXlmcmFtZXMgXzFoRVEyVnpJa1RpWi05alpvTEkzSkMge1xcblxcdDAlIHtcXG5cXHRcXHQtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XFxuXFx0XFx0dHJhbnNmb3JtOiBzY2FsZSgwKTtcXG5cXHR9XFxuXFx0MTAwJSB7XFxuXFx0XFx0LXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xcblxcdFxcdHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuXFx0XFx0b3BhY2l0eTogMDtcXG5cXHR9XFxufVxcblwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5leHBvcnRzLmxvY2FscyA9IHtcblx0XCJzcGlubmVyXCI6IFwiXzFDSzdGSFZ3aGlPbnVDaVpKd2lQcTFcIixcblx0XCJzay1zY2FsZW91dFwiOiBcIl8xaEVRMlZ6SWtUaVotOWpab0xJM0pDXCJcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHVzZVNvdXJjZU1hcCkge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCJ7XCIpLmNvbmNhdChjb250ZW50LCBcIn1cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oJycpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsICcnXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICB2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXG4gICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vZHVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IG1vZHVsZXNbX2ldOyAvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxlXG4gICAgICAvLyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCAxMDAlIHBlcmZlY3QgZm9yIHdlaXJkIG1lZGlhIHF1ZXJ5IGNvbWJpbmF0aW9uc1xuICAgICAgLy8gd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuICAgICAgLy8gSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXG4gICAgICBpZiAoaXRlbVswXSA9PSBudWxsIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGlmIChtZWRpYVF1ZXJ5ICYmICFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBcIihcIi5jb25jYXQoaXRlbVsyXSwgXCIpIGFuZCAoXCIpLmNvbmNhdChtZWRpYVF1ZXJ5LCBcIilcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTtcblxuZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdIHx8ICcnOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcblxuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCkuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufSAvLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5cblxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG4gIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgcmV0dXJuIFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhciBpc09sZElFID0gZnVuY3Rpb24gaXNPbGRJRSgpIHtcbiAgdmFyIG1lbW87XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSgpIHtcbiAgICBpZiAodHlwZW9mIG1lbW8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuICAgICAgLy8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuICAgICAgLy8gVGVzdHMgZm9yIGV4aXN0ZW5jZSBvZiBzdGFuZGFyZCBnbG9iYWxzIGlzIHRvIGFsbG93IHN0eWxlLWxvYWRlclxuICAgICAgLy8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcbiAgICAgIG1lbW8gPSBCb29sZWFuKHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn0oKTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uIGdldFRhcmdldCgpIHtcbiAgdmFyIG1lbW8gPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lbW9yaXplKHRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpOyAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXG4gICAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtb1t0YXJnZXRdO1xuICB9O1xufSgpO1xuXG5mdW5jdGlvbiBsaXN0VG9TdHlsZXMobGlzdCwgb3B0aW9ucykge1xuICB2YXIgc3R5bGVzID0gW107XG4gIHZhciBuZXdTdHlsZXMgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNzcyA9IGl0ZW1bMV07XG4gICAgdmFyIG1lZGlhID0gaXRlbVsyXTtcbiAgICB2YXIgc291cmNlTWFwID0gaXRlbVszXTtcbiAgICB2YXIgcGFydCA9IHtcbiAgICAgIGNzczogY3NzLFxuICAgICAgbWVkaWE6IG1lZGlhLFxuICAgICAgc291cmNlTWFwOiBzb3VyY2VNYXBcbiAgICB9O1xuXG4gICAgaWYgKCFuZXdTdHlsZXNbaWRdKSB7XG4gICAgICBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIHBhcnRzOiBbcGFydF1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20oc3R5bGVzLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV07XG4gICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF07XG4gICAgdmFyIGogPSAwO1xuXG4gICAgaWYgKGRvbVN0eWxlKSB7XG4gICAgICBkb21TdHlsZS5yZWZzKys7XG5cbiAgICAgIGZvciAoOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7XG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICByZWZzOiAxLFxuICAgICAgICBwYXJ0czogcGFydHNcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmF0dHJpYnV0ZXMubm9uY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJyA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICAgIGlmIChub25jZSkge1xuICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMob3B0aW9ucy5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoa2V5LCBvcHRpb25zLmF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zLmluc2VydChzdHlsZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhcmdldCA9IGdldFRhcmdldChvcHRpb25zLmluc2VydCB8fCAnaGVhZCcpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxudmFyIHJlcGxhY2VUZXh0ID0gZnVuY3Rpb24gcmVwbGFjZVRleHQoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2UoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuICB9O1xufSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLmNzczsgLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnKHN0eWxlLCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3M7XG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYTtcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgYnRvYSkge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGUuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXIgc2luZ2xldG9uQ291bnRlciA9IDA7XG5cbmZ1bmN0aW9uIGFkZFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgc3R5bGU7XG4gIHZhciB1cGRhdGU7XG4gIHZhciByZW1vdmU7XG5cbiAgaWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG4gICAgc3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSk7XG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZSA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlKG9iaik7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZShuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ29iamVjdCcgPyBvcHRpb25zLmF0dHJpYnV0ZXMgOiB7fTsgLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4gIC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcblxuICBpZiAoIW9wdGlvbnMuc2luZ2xldG9uICYmIHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICB2YXIgbWF5UmVtb3ZlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV07XG4gICAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuICAgICAgaWYgKGRvbVN0eWxlKSB7XG4gICAgICAgIGRvbVN0eWxlLnJlZnMtLTtcbiAgICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICB2YXIgbmV3U3R5bGVzID0gbGlzdFRvU3R5bGVzKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgICAgYWRkU3R5bGVzVG9Eb20obmV3U3R5bGVzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbWF5UmVtb3ZlLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9kb21TdHlsZSA9IG1heVJlbW92ZVtfaV07XG5cbiAgICAgIGlmIChfZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9kb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIF9kb21TdHlsZS5wYXJ0c1tqXSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW19kb21TdHlsZS5pZF07XG4gICAgICB9XG4gICAgfVxuICB9O1xufTsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb2dyZXNzIGZyb20gJy4vUHJvZ3Jlc3MnXG5pbXBvcnQgeyBQcm9ncmVzc0NvbnRleHQgfSBmcm9tICcuLy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgUHJvZ3Jlc3NDdHggZnJvbSAnLi8uLi9jb250ZXh0L1Byb2dyZXNzJ1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cydcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAgIGNvbnN0IHsgbnVtQXJyYXksIGN1cnJlbnRJZCB9ID0gdXNlQ29udGV4dDxQcm9ncmVzc0NvbnRleHQ+KFByb2dyZXNzQ3R4KVxuICAgIHJldHVybiAoXG4gICAgICAgIDxDb250YWluZXI+XG4gICAgICAgICAgICB7bnVtQXJyYXkubWFwKGkgPT5cbiAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD17MSAvIG51bUFycmF5Lmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPXtpID09PSBjdXJyZW50SWQgPyAxIDogKGkgPCBjdXJyZW50SWQgPyAyIDogMCl9XG4gICAgICAgICAgICAgICAgLz4pfVxuICAgICAgICA8L0NvbnRhaW5lcj5cbiAgICApXG59XG5cbmNvbnN0IENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gICAgICAgIGRpc3BsYXkgOiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LUNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgbWF4LVdpZHRoOiAxMDAlO1xuICAgICAgICBmbGV4LVdyYXA6IHJvdztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB3aWR0aDogNDQlO1xuICAgICAgICBwYWRkaW5nOiA1O1xuICAgICAgICBwYWRkaW5nLVRvcDogNztcbiAgICAgICAgYWxpZ24tU2VsZjogY2VudGVyO1xuICAgICAgICB6LUluZGV4OiA5OTtcbiAgICAgICAgLypmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMXB4IDhweCAjMjIyKTsqL1xuICAgICAgICBib3R0b20gOiAxLjRyZW07XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgd2lkdGg6IDg1JTtcbiAgICAgICAgYm90dG9tIDogMC42NXJlbTtcbiAgICAgICAgfVxuYCBcblxuLypjb25zdCBzdHlsZXMgPSB7XG4gICAgcHJvZ3Jlc3NBcnI6IHtcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGZsZXhXcmFwOiAncm93JyxcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIHdpZHRoOiAnNDQlJyxcbiAgICAgICAgcGFkZGluZzogNSxcbiAgICAgICAgcGFkZGluZ1RvcDogNyxcbiAgICAgICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICAgICAgekluZGV4OiA5OSxcbiAgICAgICAgZmlsdGVyOiAnZHJvcC1zaGFkb3coMCAxcHggOHB4ICMyMjIpJyxcbiAgICAgICAgYm90dG9tIDogJzAuOHJlbSdcbiAgICB9XG59Ki8iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUHJvZ3Jlc3NQcm9wcywgUHJvZ3Jlc3NDb250ZXh0IH0gZnJvbSAnLi8uLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IFByb2dyZXNzV3JhcHBlciBmcm9tICcuL1Byb2dyZXNzV3JhcHBlcidcbmltcG9ydCBQcm9ncmVzc0N0eCBmcm9tICcuLy4uL2NvbnRleHQvUHJvZ3Jlc3MnXG5cbmV4cG9ydCBkZWZhdWx0IChwcm9wczogUHJvZ3Jlc3NQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgYnVmZmVyQWN0aW9uLCBjb3VudCwgcGF1c2UgfSA9IHVzZUNvbnRleHQ8UHJvZ3Jlc3NDb250ZXh0PihQcm9ncmVzc0N0eClcblxuICAgIGNvbnN0IGdldFByb2dyZXNzU3R5bGUgPSAoeyBhY3RpdmUgfSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGFjdGl2ZSkge1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiAnMTAwJScgfVxuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRyYW5zZm9ybTogYHNjYWxlWCgke2NvdW50IC8gMTAwfSlgIH1cbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICByZXR1cm4geyB3aWR0aDogMCB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiAwIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGFjdGl2ZSB9ID0gcHJvcHNcbiAgICByZXR1cm4gKFxuICAgICAgICA8UHJvZ3Jlc3NXcmFwcGVyIHdpZHRoPXt3aWR0aH0gcGF1c2U9e3BhdXNlfSBidWZmZXJBY3Rpb249e2J1ZmZlckFjdGlvbn0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4uZ2V0UHJvZ3Jlc3NTdHlsZSh7IGFjdGl2ZSB9KSwgLi4uc3R5bGVzLmlubmVyIH19IC8+XG4gICAgICAgIDwvUHJvZ3Jlc3NXcmFwcGVyPlxuICAgIClcbn1cblxuY29uc3Qgc3R5bGVzOiBhbnkgPSB7XG4gICAgaW5uZXI6IHtcbiAgICAgICAgYmFja2dyb3VuZDogJyNmZmYnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnY2VudGVyIGxlZnQnLFxuXG4gICAgICAgIFdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgIE1vekJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgIG1zQmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcblxuICAgICAgICBXZWJraXRQZXJzcGVjdGl2ZTogMTAwMCxcbiAgICAgICAgTW96UGVyc3BlY3RpdmU6IDEwMDAsXG4gICAgICAgIG1zUGVyc3BlY3RpdmU6IDEwMDAsXG4gICAgICAgIHBlcnNwZWN0aXZlOiAxMDAwXG4gICAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgUHJvZ3Jlc3NXcmFwcGVyUHJvcHMgfSBmcm9tIFwiLi8uLi9pbnRlcmZhY2VzXCJcbmltcG9ydCBzdHlsZWQgZnJvbSBcInN0eWxlZC1jb21wb25lbnRzXCJcblxuY29uc3QgUHJvZ3Jlc3NXcmFwcGVyID0gKHByb3BzOiBQcm9ncmVzc1dyYXBwZXJQcm9wcykgPT4gKFxuICA8UGd3cmFwcGVyIHN0eWxlPXt7Li4uZ2V0UHJvZ3Jlc3NXcmFwcGVyU3R5bGUocHJvcHMpfX0+e3Byb3BzLmNoaWxkcmVufTwvUGd3cmFwcGVyPlxuKVxuXG5jb25zdCBnZXRQcm9ncmVzc1dyYXBwZXJTdHlsZSA9ICh7IHdpZHRoLCBwYXVzZSwgYnVmZmVyQWN0aW9uIH0pID0+ICh7XG4gIHdpZHRoOiBgJHt3aWR0aCAqIDEwMH0lYCxcbiAgb3BhY2l0eTogcGF1c2UgJiYgIWJ1ZmZlckFjdGlvbiA/IDEgOiAxLFxufSlcblxuY29uc3QgUGd3cmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgICBoZWlnaHQ6IDRweDtcbiAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgIGhlaWdodDogMnB4O1xuICAgIH1cbiAgICBtYXgtV2lkdGg6ICcxMDAlJztcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMzgpO1xuICAgIG1hcmdpbjogNHB4O1xuICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDQwMG1zIGVhc2UtaW4tb3V0JztcbmBcblxuZXhwb3J0IGRlZmF1bHQgUHJvZ3Jlc3NXcmFwcGVyXG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMC4yXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtcbnZhciBiPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsYz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLGQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGU9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsZj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxnPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LGg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksaz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLGw9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxtPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxuPWI/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLHA9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMscT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOlxuNjAxMjAscj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LHQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNix2PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7ZnVuY3Rpb24geShhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgaDpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiB1fX1jYXNlIHQ6Y2FzZSByOmNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIHooYSl7cmV0dXJuIHkoYSk9PT1tfVxuZXhwb3J0cy50eXBlT2Y9eTtleHBvcnRzLkFzeW5jTW9kZT1sO2V4cG9ydHMuQ29uY3VycmVudE1vZGU9bTtleHBvcnRzLkNvbnRleHRDb25zdW1lcj1rO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWg7ZXhwb3J0cy5FbGVtZW50PWM7ZXhwb3J0cy5Gb3J3YXJkUmVmPW47ZXhwb3J0cy5GcmFnbWVudD1lO2V4cG9ydHMuTGF6eT10O2V4cG9ydHMuTWVtbz1yO2V4cG9ydHMuUG9ydGFsPWQ7ZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT12fHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXgpfTtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpfHx5KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPXo7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1ofTtcbmV4cG9ydHMuaXNFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJmEuJCR0eXBlb2Y9PT1jfTtleHBvcnRzLmlzRm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PW59O2V4cG9ydHMuaXNGcmFnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWV9O2V4cG9ydHMuaXNMYXp5PWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09dH07ZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1wfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=