/* ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. *****************************************************************************/ function aa(b){return b&&b.__esModule&&Object.prototype.hasOwnProperty.call(b,"default")?b["default"]:b}function ba(b,a){return a={exports:{}},b(a,a.exports),a.exports} var ca=ba(function(b){!function(a,c){b.exports=c()}(window,function(){return function(a){function b(c){if(d[c])return d[c].exports;var e=d[c]={i:c,l:!1,exports:{}};return a[c].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var d={};return b.m=a,b.c=d,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{enumerable:!0,get:d})},b.r=function(a){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"});Object.defineProperty(a,"__esModule",{value:!0})}, b.t=function(a,c){if((1&c&&(a=b(a)),8&c)||4&c&&"object"==typeof a&&a&&a.__esModule)return a;var d=Object.create(null);if(b.r(d),Object.defineProperty(d,"default",{enumerable:!0,value:a}),2&c&&"string"!=typeof a)for(var e in a)b.d(d,e,function(b){return a[b]}.bind(null,e));return d},b.n=function(a){var c=a&&a.__esModule?function(){return a.default}:function(){return a};return b.d(c,"a",c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p="",b(b.s=33)}([function(a,b,d){Object.defineProperty(b, "__esModule",{value:!0});a=d(14);b.IBufferService=a.createDecorator("BufferService");b.ICoreMouseService=a.createDecorator("CoreMouseService");b.ICoreService=a.createDecorator("CoreService");b.IDirtyRowService=a.createDecorator("DirtyRowService");b.IInstantiationService=a.createDecorator("InstantiationService");b.ILogService=a.createDecorator("LogService");b.IOptionsService=a.createDecorator("OptionsService")},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});a=function(){function a(){this._listeners= [];this._disposed=!1}return Object.defineProperty(a.prototype,"event",{get:function(){var a=this;return this._event||(this._event=function(b){return a._listeners.push(b),{dispose:function(){if(!a._disposed)for(var c=0;c>22},b.prototype.getChars=function(){return 2097152&this.content?this.combinedData:2097151&this.content?f.stringFromCodePoint(2097151&this.content):""},b.prototype.getCode=function(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content},b.prototype.setFromCharData=function(a){this.fg=a[h.CHAR_DATA_ATTR_INDEX];this.bg=0;var b=!1;if(2=c){var d=a[h.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=d&&57343>=d?this.content=1024*(c-55296)+d-56320+65536|a[h.CHAR_DATA_WIDTH_INDEX]<<22:b=!0}else b=!0}else this.content=a[h.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|a[h.CHAR_DATA_WIDTH_INDEX]<<22;b&&(this.combinedData=a[h.CHAR_DATA_CHAR_INDEX],this.content=2097152|a[h.CHAR_DATA_WIDTH_INDEX]<<22)},b.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}, b}(d(6).AttributeData);b.CellData=a},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});a=function(){function a(){this.bg=this.fg=0}return a.toColorRGB=function(a){return[a>>>16&255,a>>>8&255,255&a]},a.fromColorRGB=function(a){return(255&a[0])<<16|(255&a[1])<<8|255&a[2]},a.prototype.clone=function(){var b=new a;return b.fg=this.fg,b.bg=this.bg,b},a.prototype.isInverse=function(){return 67108864&this.fg},a.prototype.isBold=function(){return 134217728&this.fg},a.prototype.isUnderline=function(){return 268435456& this.fg},a.prototype.isBlink=function(){return 536870912&this.fg},a.prototype.isInvisible=function(){return 1073741824&this.fg},a.prototype.isItalic=function(){return 67108864&this.bg},a.prototype.isDim=function(){return 134217728&this.bg},a.prototype.getFgColorMode=function(){return 50331648&this.fg},a.prototype.getBgColorMode=function(){return 50331648&this.bg},a.prototype.isFgRGB=function(){return 50331648==(50331648&this.fg)},a.prototype.isBgRGB=function(){return 50331648==(50331648&this.bg)}, a.prototype.isFgPalette=function(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)},a.prototype.isBgPalette=function(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)},a.prototype.isFgDefault=function(){return 0==(50331648&this.fg)},a.prototype.isBgDefault=function(){return 0==(50331648&this.bg)},a.prototype.getFgColor=function(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}},a.prototype.getBgColor= function(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}},a}();b.AttributeData=a},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});b.addDisposableDomListener=function(a,b,c,f){return a.addEventListener(b,c,f),{dispose:function(){c&&a.removeEventListener(b,c,f)}}}},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});b.stringFromCodePoint=function(a){return 65535>10))+String.fromCharCode(a%1024+56320)):String.fromCharCode(a)};b.utf32ToString=function(a,b,c){void 0===b&&(b=0);void 0===c&&(c=a.length);for(var d="";b>10))+String.fromCharCode(e%1024+56320)):d+=String.fromCharCode(e)}return d};a=function(){function a(){this._interim=0}return a.prototype.clear=function(){this._interim=0},a.prototype.decode=function(a,b){var c=a.length;if(!c)return 0;var d=0,e=0;for(this._interim&&(56320<=(q= a.charCodeAt(e++))&&57343>=q?b[d++]=1024*(this._interim-55296)+q-56320+65536:(b[d++]=this._interim,b[d++]=q),this._interim=0);e=g){if(++e>=c)return this._interim=g,d;var q;56320<=(q=a.charCodeAt(e))&&57343>=q?b[d++]=1024*(g-55296)+q-56320+65536:(b[d++]=g,b[d++]=q)}else b[d++]=g}return d},a}();b.StringToUtf32=a;a=function(){function a(){this.interim=new Uint8Array(3)}return a.prototype.clear=function(){this.interim.fill(0)},a.prototype.decode=function(a, b){var c=a.length;if(!c)return 0;var d,e,g,q,t=0,v=0,l=0;if(this.interim[0]){var n=!1,y=this.interim[0];y&=192==(224&y)?31:224==(240&y)?15:7;for(var B=0,O;(O=63&this.interim[++B])&&4>B;)y<<=6,y|=O;for(var X=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,M=X-B;l=c)return 0;if(128!=(192&(O=a[l++]))){l--;n=!0;break}this.interim[B++]=O;y<<=6;y|=63&O}n||(2===X?128>y?l--:b[t++]=y:3===X?2048>y||55296<=y&&57343>=y||(b[t++]=y):65536>y||1114111(d=a[l++]))b[t++]=d;else if(192==(224&d)){if(l>=c)return this.interim[0]=d,t;128!=(192&(e=a[l++]))?l--:128>(v=(31&d)<<6|63&e)?l--:b[t++]=v}else if(224==(240&d)){if(l>=c)return this.interim[0]=d,t;if(128!=(192&(e=a[l++])))l--;else{if(l>=c)return this.interim[0]=d,this.interim[1]=e,t;128!=(192&(g=a[l++]))?l--:2048>(v=(15&d)<<12|(63&e)<<6|63&g)||55296<=v&&57343>=v|| (b[t++]=v)}}else if(240==(248&d)){if(l>=c)return this.interim[0]=d,t;if(128!=(192&(e=a[l++])))l--;else{if(l>=c)return this.interim[0]=d,this.interim[1]=e,t;if(128!=(192&(g=a[l++])))l--;else{if(l>=c)return this.interim[0]=d,this.interim[1]=e,this.interim[2]=g,t;128!=(192&(q=a[l++]))?l--:65536>(v=(7&d)<<18|(63&e)<<12|(63&g)<<6|63&q)||1114111a.length?"0"+a:a}function e(a,b,d,e){return void 0!==e?"#"+c(a)+c(b)+c(d)+c(e):"#"+c(a)+c(b)+c(d)}function g(a,b,c,d){return void 0===d&&(d=255),(a<<24|b<<16|c<<8|d)>>>0}function f(a){return[a>>24&255,a>>16&255,a>>8&255,255&a]}function h(a){return k(a>>16&255,a>>8&255,255&a)}function k(a,b,c){a/=255;b/=255;c/=255;return.2126*(.03928>=a?a/12.92:Math.pow((a+.055)/1.055,2.4))+.7152*(.03928>=b?b/12.92:Math.pow((b+.055)/1.055,2.4))+.0722*(.03928>= c?c/12.92:Math.pow((c+.055)/1.055,2.4))}function r(a,b){return a>8),e=h(b>>8);if(r(d,e)>24&255,e=a>>16&255;a=a>>8&255;var g=b>>24&255,f=b>>16&255;b=b>>8&255;for(var l=r(k(g,b,f),k(d,e,a));l>>0}function l(a,b,c){var d=a>>24&255,e=a>>16&255;a=a>>8&255;var g=b>>24&255,f=b>>16&255;b=b>>8&255;for(var l=r(k(g,b,f),k(d,e,a));lg||255>f||255>b);)g=Math.min(255,g+Math.ceil(.1*(255-g))),f=Math.min(255,f+Math.ceil(.1*(255-f))),l=r(k(g,b=Math.min(255,b+Math.ceil(.1*(255-b))),f),k(d,e,a));return(g<<24|f<<16|b<<8|255)>>>0}Object.defineProperty(b,"__esModule",{value:!0});b.blend=function(a,b){var c=(255&b.rgba)/255;if(1===c)return{css:b.css,rgba:b.rgba};var d=a.rgba>>24& 255,f=a.rgba>>16&255;a=a.rgba>>8&255;d+=Math.round(((b.rgba>>24&255)-d)*c);f+=Math.round(((b.rgba>>16&255)-f)*c);b=a+Math.round(((b.rgba>>8&255)-a)*c);return{css:e(d,f,b),rgba:g(d,f,b)}};b.fromCss=function(a){return{css:a,rgba:(parseInt(a.slice(1),16)<<8|255)>>>0}};b.toPaddedHex=c;b.toCss=e;b.toRgba=g;b.fromRgba=f;b.opaque=function(a){a=(255|a.rgba)>>>0;var b=f(a);return{css:e(b[0],b[1],b[2]),rgba:a}};b.rgbRelativeLuminance=h;b.rgbRelativeLuminance2=k;b.contrastRatio=r;b.rgbaToColor=q;b.ensureContrastRatioRgba= t;b.ensureContrastRatio=function(a,b,c){if(a=t(a.rgba,b.rgba,c))return q(a>>24&255,a>>16&255,a>>8&255)};b.reduceLuminance=v;b.increaseLuminance=l},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});var c=(a="undefined"==typeof navigator)?"node":navigator.userAgent;a=a?"node":navigator.platform;b.isFirefox=!!~c.indexOf("Firefox");b.isSafari=/^((?!chrome|android).)*safari/i.test(c);c=0<=["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(a);b.isMac=c;b.isIpad="iPad"===a;b.isIphone="iPhone"=== a;c=0<=["Windows","Win16","Win32","WinCE"].indexOf(a);b.isWindows=c;b.isLinux=0<=a.indexOf("Linux")},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});(function(a){a.NUL="\x00";a.SOH="\u0001";a.STX="\u0002";a.ETX="\u0003";a.EOT="\u0004";a.ENQ="\u0005";a.ACK="\u0006";a.BEL="\u0007";a.BS="\b";a.HT="\t";a.LF="\n";a.VT="\v";a.FF="\f";a.CR="\r";a.SO="\u000e";a.SI="\u000f";a.DLE="\u0010";a.DC1="\u0011";a.DC2="\u0012";a.DC3="\u0013";a.DC4="\u0014";a.NAK="\u0015";a.SYN="\u0016";a.ETB="\u0017"; a.CAN="\u0018";a.EM="\u0019";a.SUB="\u001a";a.ESC="\u001b";a.FS="\u001c";a.GS="\u001d";a.RS="\u001e";a.US="\u001f";a.SP=" ";a.DEL="\u007f"})(b.C0||(b.C0={}));(function(a){a.PAD="\u0080";a.HOP="\u0081";a.BPH="\u0082";a.NBH="\u0083";a.IND="\u0084";a.NEL="\u0085";a.SSA="\u0086";a.ESA="\u0087";a.HTS="\u0088";a.HTJ="\u0089";a.VTS="\u008a";a.PLD="\u008b";a.PLU="\u008c";a.RI="\u008d";a.SS2="\u008e";a.SS3="\u008f";a.DCS="\u0090";a.PU1="\u0091";a.PU2="\u0092";a.STS="\u0093";a.CCH="\u0094";a.MW="\u0095";a.SPA= "\u0096";a.EPA="\u0097";a.SOS="\u0098";a.SGCI="\u0099";a.SCI="\u009a";a.CSI="\u009b";a.ST="\u009c";a.OSC="\u009d";a.PM="\u009e";a.APC="\u009f"})(b.C1||(b.C1={}))},function(a,b,d){Object.defineProperty(b,"__esModule",{value:!0});var c=d(3),g=d(9),f=d(24),h=d(6),k=d(27),r=d(10);a=function(){function a(a,b,c,d,e,g,f,k){this._container=a;this._alpha=d;this._colors=e;this._rendererId=g;this._bufferService=f;this._optionsService=k;this._scaledCharTop=this._scaledCharLeft=this._scaledCellHeight=this._scaledCellWidth= this._scaledCharHeight=this._scaledCharWidth=0;this._currentGlyphIdentifier={chars:"",code:0,bg:0,fg:0,bold:!1,dim:!1,italic:!1};this._canvas=document.createElement("canvas");this._canvas.classList.add("xterm-"+b+"-layer");this._canvas.style.zIndex=c.toString();this._initCanvas();this._container.appendChild(this._canvas)}return a.prototype.dispose=function(){var a;this._container.removeChild(this._canvas);null===(a=this._charAtlas)||void 0===a||a.dispose()},a.prototype._initCanvas=function(){this._ctx= k.throwIfFalsy(this._canvas.getContext("2d",{alpha:this._alpha}));this._alpha||this._clearAll()},a.prototype.onOptionsChanged=function(){},a.prototype.onBlur=function(){},a.prototype.onFocus=function(){},a.prototype.onCursorMove=function(){},a.prototype.onGridChanged=function(){},a.prototype.onSelectionChanged=function(){},a.prototype.setColors=function(a){this._refreshCharAtlas(a)},a.prototype._setTransparency=function(a){if(a!==this._alpha){var b=this._canvas;this._alpha=a;this._canvas=this._canvas.cloneNode(); this._initCanvas();this._container.replaceChild(this._canvas,b);this._refreshCharAtlas(this._colors);this.onGridChanged(0,this._bufferService.rows-1)}},a.prototype._refreshCharAtlas=function(a){0>=this._scaledCharWidth&&0>=this._scaledCharHeight||(this._charAtlas=f.acquireCharAtlas(this._optionsService.options,this._rendererId,a,this._scaledCharWidth,this._scaledCharHeight),this._charAtlas.warmUp())},a.prototype.resize=function(a){this._scaledCellWidth=a.scaledCellWidth;this._scaledCellHeight=a.scaledCellHeight; this._scaledCharWidth=a.scaledCharWidth;this._scaledCharHeight=a.scaledCharHeight;this._scaledCharLeft=a.scaledCharLeft;this._scaledCharTop=a.scaledCharTop;this._canvas.width=a.scaledCanvasWidth;this._canvas.height=a.scaledCanvasHeight;this._canvas.style.width=a.canvasWidth+"px";this._canvas.style.height=a.canvasHeight+"px";this._alpha||this._clearAll();this._refreshCharAtlas(this._colors)},a.prototype._fillCells=function(a,b,c,d){this._ctx.fillRect(a*this._scaledCellWidth,b*this._scaledCellHeight, c*this._scaledCellWidth,d*this._scaledCellHeight)},a.prototype._fillBottomLineAtCells=function(a,b,c){void 0===c&&(c=1);this._ctx.fillRect(a*this._scaledCellWidth,(b+1)*this._scaledCellHeight-window.devicePixelRatio-1,c*this._scaledCellWidth,window.devicePixelRatio)},a.prototype._fillLeftLineAtCell=function(a,b){this._ctx.fillRect(a*this._scaledCellWidth,b*this._scaledCellHeight,window.devicePixelRatio,this._scaledCellHeight)},a.prototype._strokeRectAtCell=function(a,b,c,d){this._ctx.lineWidth=window.devicePixelRatio; this._ctx.strokeRect(a*this._scaledCellWidth+window.devicePixelRatio/2,b*this._scaledCellHeight+window.devicePixelRatio/2,c*this._scaledCellWidth-window.devicePixelRatio,d*this._scaledCellHeight-window.devicePixelRatio)},a.prototype._clearAll=function(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))},a.prototype._clearCells=function(a,b,c,d){this._alpha?this._ctx.clearRect(a* this._scaledCellWidth,b*this._scaledCellHeight,c*this._scaledCellWidth,d*this._scaledCellHeight):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(a*this._scaledCellWidth,b*this._scaledCellHeight,c*this._scaledCellWidth,d*this._scaledCellHeight))},a.prototype._fillCharTrueColor=function(a,b,c){this._ctx.font=this._getFont(!1,!1);this._ctx.textBaseline="middle";this._clipRow(c);this._ctx.fillText(a.getChars(),b*this._scaledCellWidth+this._scaledCharLeft,c*this._scaledCellHeight+this._scaledCharTop+ this._scaledCharHeight/2)},a.prototype._drawChars=function(a,b,d){var e,f,l=this._getContrastColor(a);l||a.isFgRGB()||a.isBgRGB()?this._drawUncachedChars(a,b,d,l):(a.isInverse()?(e=a.isBgDefault()?g.INVERTED_DEFAULT_COLOR:a.getBgColor(),f=a.isFgDefault()?g.INVERTED_DEFAULT_COLOR:a.getFgColor()):(f=a.isBgDefault()?c.DEFAULT_COLOR:a.getBgColor(),e=a.isFgDefault()?c.DEFAULT_COLOR:a.getFgColor()),e+=this._optionsService.options.drawBoldTextInBrightColors&&a.isBold()&&8>e?8:0,this._currentGlyphIdentifier.chars= a.getChars()||c.WHITESPACE_CELL_CHAR,this._currentGlyphIdentifier.code=a.getCode()||c.WHITESPACE_CELL_CODE,this._currentGlyphIdentifier.bg=f,this._currentGlyphIdentifier.fg=e,this._currentGlyphIdentifier.bold=!!a.isBold(),this._currentGlyphIdentifier.dim=!!a.isDim(),this._currentGlyphIdentifier.italic=!!a.isItalic(),this._charAtlas&&this._charAtlas.draw(this._ctx,this._currentGlyphIdentifier,b*this._scaledCellWidth+this._scaledCharLeft,d*this._scaledCellHeight+this._scaledCharTop)||this._drawUncachedChars(a, b,d))},a.prototype._drawUncachedChars=function(a,b,c,d){(this._ctx.save(),this._ctx.font=this._getFont(!!a.isBold(),!!a.isItalic()),this._ctx.textBaseline="middle",a.isInverse())?d?this._ctx.fillStyle=d.css:a.isBgDefault()?this._ctx.fillStyle=r.opaque(this._colors.background).css:a.isBgRGB()?this._ctx.fillStyle="rgb("+h.AttributeData.toColorRGB(a.getBgColor()).join(",")+")":(d=a.getBgColor(),this._optionsService.options.drawBoldTextInBrightColors&&a.isBold()&&8>d&&(d+=8),this._ctx.fillStyle=this._colors.ansi[d].css): d?this._ctx.fillStyle=d.css:a.isFgDefault()?this._ctx.fillStyle=this._colors.foreground.css:a.isFgRGB()?this._ctx.fillStyle="rgb("+h.AttributeData.toColorRGB(a.getFgColor()).join(",")+")":(d=a.getFgColor(),this._optionsService.options.drawBoldTextInBrightColors&&a.isBold()&&8>d&&(d+=8),this._ctx.fillStyle=this._colors.ansi[d].css);this._clipRow(c);a.isDim()&&(this._ctx.globalAlpha=g.DIM_OPACITY);this._ctx.fillText(a.getChars(),b*this._scaledCellWidth+this._scaledCharLeft,c*this._scaledCellHeight+ this._scaledCharTop+this._scaledCharHeight/2);this._ctx.restore()},a.prototype._clipRow=function(a){this._ctx.beginPath();this._ctx.rect(0,a*this._scaledCellHeight,this._bufferService.cols*this._scaledCellWidth,this._scaledCellHeight);this._ctx.clip()},a.prototype._getFont=function(a,b){return(b?"italic":"")+" "+(a?this._optionsService.options.fontWeightBold:this._optionsService.options.fontWeight)+" "+this._optionsService.options.fontSize*window.devicePixelRatio+"px "+this._optionsService.options.fontFamily}, a.prototype._getContrastColor=function(a){if(1!==this._optionsService.options.minimumContrastRatio){var b=this._colors.contrastCache.getColor(a.bg,a.fg);if(void 0!==b)return b||void 0;b=a.getFgColor();var c=a.getFgColorMode(),d=a.getBgColor(),e=a.getBgColorMode(),g=!!a.isInverse(),f=!!a.isInverse();if(g){var k=b;b=d;d=k;k=c;c=e;e=k}d=this._resolveBackgroundRgba(e,d,g);b=this._resolveForegroundRgba(c,b,g,f);if(b=r.ensureContrastRatioRgba(d,b,this._optionsService.options.minimumContrastRatio))return b= {css:r.toCss(b>>24&255,b>>16&255,b>>8&255),rgba:b},this._colors.contrastCache.setColor(a.bg,a.fg,b),b;this._colors.contrastCache.setColor(a.bg,a.fg,null)}},a.prototype._resolveBackgroundRgba=function(a,b,c){switch(a){case 16777216:case 33554432:return this._colors.ansi[b].rgba;case 50331648:return b<<8;default:return c?this._colors.foreground.rgba:this._colors.background.rgba}},a.prototype._resolveForegroundRgba=function(a,b,c,d){switch(a){case 16777216:case 33554432:return this._optionsService.options.drawBoldTextInBrightColors&& d&&8>b&&(b+=8),this._colors.ansi[b].rgba;case 50331648:return b<<8;default:return c?this._colors.background.rgba:this._colors.foreground.rgba}},a}();b.BaseRenderLayer=a},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});b.serviceRegistry=new Map;b.getServiceDependencies=function(a){return a.di$dependencies||[]};b.createDecorator=function(a){function c(a,b,d){if(3!==arguments.length)throw Error("@IServiceName-decorator can only be used to decorate a parameter");var e=c;a.di$target===a? a.di$dependencies.push({id:e,index:d}):(a.di$dependencies=[{id:e,index:d}],a.di$target=a)}return b.serviceRegistry.has(a)?b.serviceRegistry.get(a):(c.toString=function(){return a},b.serviceRegistry.set(a,c),c)}},function(a,b){function c(a,b,c,d){if(void 0===c&&(c=0),void 0===d&&(d=a.length),c>=a.length)return a;c=(a.length+c)%a.length;for(d=d>=a.length?a.length:(a.length+d)%a.length;c>22,2097152&b?this._combined[a].charCodeAt(this._combined[a].length-1):d]},a.prototype.set=function(a,b){this._data[3*a+1]=b[g.CHAR_DATA_ATTR_INDEX];1>22},a.prototype.hasWidth=function(a){return 12582912&this._data[3*a]},a.prototype.getFg=function(a){return this._data[3*a+1]},a.prototype.getBg=function(a){return this._data[3*a+2]},a.prototype.hasContent=function(a){return 4194303&this._data[3*a]},a.prototype.getCodePoint=function(a){var b=this._data[3*a];return 2097152&b?this._combined[a].charCodeAt(this._combined[a].length-1):2097151&b},a.prototype.isCombined= function(a){return 2097152&this._data[3*a]},a.prototype.getString=function(a){var b=this._data[3*a];return 2097152&b?this._combined[a]:2097151&b?c.stringFromCodePoint(2097151&b):""},a.prototype.loadCell=function(a,b){var c=3*a;return b.content=this._data[c+0],b.fg=this._data[c+1],b.bg=this._data[c+2],2097152&b.content&&(b.combinedData=this._combined[a]),b},a.prototype.setCell=function(a,b){2097152&b.content&&(this._combined[a]=b.combinedData);this._data[3*a]=b.content;this._data[3*a+1]=b.fg;this._data[3* a+2]=b.bg},a.prototype.setCellFromCodePoint=function(a,b,c,d,e){this._data[3*a]=b|c<<22;this._data[3*a+1]=d;this._data[3*a+2]=e},a.prototype.addCodepointToCell=function(a,b){var d=this._data[3*a];2097152&d?this._combined[a]+=c.stringFromCodePoint(b):(2097151&d?(this._combined[a]=c.stringFromCodePoint(2097151&d)+c.stringFromCodePoint(b),d&=-2097152,d|=2097152):d=b|4194304,this._data[3*a]=d)},a.prototype.insertCells=function(a,b,c){if(a%=this.length,bthis.length){var c=new Uint32Array(3*a);this.length&&(3*a=a&&delete this._combined[d]}else this._data=new Uint32Array(0),this._combined={};this.length=a}},a.prototype.fill=function(a){this._combined= {};for(var b=0;b>22);return 0},a.prototype.copyCellsFrom=function(a,b,c,d,e){var g=a._data;if(e)for(var f=d-1;0<=f;f--)for(e=0;3>e;e++)this._data[3*(c+f)+e]=g[3*(b+f)+e];else for(f=0;fe;e++)this._data[3*(c+f)+e]=g[3*(b+f)+e];d=Object.keys(a._combined);for(e=0;e=b&&(this._combined[g-b+c]=a._combined[g])},a.prototype.translateToString=function(a,b,d){void 0===a&&(a=!1); void 0===b&&(b=0);void 0===d&&(d=this.length);a&&(d=Math.min(d,this.getTrimmedLength()));for(a="";b>22||1}return a},a}();b.BufferLine=a},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});b.promptLabel="Terminal input";b.tooMuchOutput="Too much output to announce, navigate to rows manually to read"},function(a,b){Object.defineProperty(b,"__esModule",{value:!0}); b.CHARSETS={};b.DEFAULT_CHARSET=b.CHARSETS.B;b.CHARSETS[0]={"`":"\u25c6",a:"\u2592",b:"\t",c:"\f",d:"\r",e:"\n",f:"\u00b0",g:"\u00b1",h:"\u2424",i:"\v",j:"\u2518",k:"\u2510",l:"\u250c",m:"\u2514",n:"\u253c",o:"\u23ba",p:"\u23bb",q:"\u2500",r:"\u23bc",s:"\u23bd",t:"\u251c",u:"\u2524",v:"\u2534",w:"\u252c",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03c0","|":"\u2260","}":"\u00a3","~":"\u00b7"};b.CHARSETS.A={"#":"\u00a3"};b.CHARSETS.B=null;b.CHARSETS[4]={"#":"\u00a3","@":"\u00be","[":"ij","\\":"\u00bd", "]":"|","{":"\u00a8","|":"f","}":"\u00bc","~":"\u00b4"};b.CHARSETS.C=b.CHARSETS[5]={"[":"\u00c4","\\":"\u00d6","]":"\u00c5","^":"\u00dc","`":"\u00e9","{":"\u00e4","|":"\u00f6","}":"\u00e5","~":"\u00fc"};b.CHARSETS.R={"#":"\u00a3","@":"\u00e0","[":"\u00b0","\\":"\u00e7","]":"\u00a7","{":"\u00e9","|":"\u00f9","}":"\u00e8","~":"\u00a8"};b.CHARSETS.Q={"@":"\u00e0","[":"\u00e2","\\":"\u00e7","]":"\u00ea","^":"\u00ee","`":"\u00f4","{":"\u00e9","|":"\u00f9","}":"\u00e8","~":"\u00fb"};b.CHARSETS.K={"@":"\u00a7", "[":"\u00c4","\\":"\u00d6","]":"\u00dc","{":"\u00e4","|":"\u00f6","}":"\u00fc","~":"\u00df"};b.CHARSETS.Y={"#":"\u00a3","@":"\u00a7","[":"\u00b0","\\":"\u00e7","]":"\u00e9","`":"\u00f9","{":"\u00e0","|":"\u00f2","}":"\u00e8","~":"\u00ec"};b.CHARSETS.E=b.CHARSETS[6]={"@":"\u00c4","[":"\u00c6","\\":"\u00d8","]":"\u00c5","^":"\u00dc","`":"\u00e4","{":"\u00e6","|":"\u00f8","}":"\u00e5","~":"\u00fc"};b.CHARSETS.Z={"#":"\u00a3","@":"\u00a7","[":"\u00a1","\\":"\u00d1","]":"\u00bf","{":"\u00b0","|":"\u00f1", "}":"\u00e7"};b.CHARSETS.H=b.CHARSETS[7]={"@":"\u00c9","[":"\u00c4","\\":"\u00d6","]":"\u00c5","^":"\u00dc","`":"\u00e9","{":"\u00e4","|":"\u00f6","}":"\u00e5","~":"\u00fc"};b.CHARSETS["="]={"#":"\u00f9","@":"\u00e0","[":"\u00e9","\\":"\u00e7","]":"\u00ea","^":"\u00ee",_:"\u00e8","`":"\u00f4","{":"\u00e4","|":"\u00f6","}":"\u00fc","~":"\u00fb"}},function(a,b,d){Object.defineProperty(b,"__esModule",{value:!0});var c=d(15);b.wcwidth=function(a){var b=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471, 1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881, 2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448, 4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]], d=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],e=0|a.control,g=new Uint8Array(65536);c.fill(g,1);g[0]=a.nul;c.fill(g,a.control,1,32);c.fill(g,a.control,127,160);c.fill(g,2,4352,4448);g[9001]=2;g[9002]=2;c.fill(g,2,11904,42192);g[12351]=1;c.fill(g,2,44032,55204);c.fill(g,2,63744,64256);c.fill(g,2,65040,65050);c.fill(g,2,65072,65136);c.fill(g,2,65280, 65377);c.fill(g,2,65504,65511);for(a=0;aa)a=0|e;else if(127>a)a=1;else if(65536>a)a=g[a];else{a:{var b=a;var c,f=0,q=d.length-1;if(!(bd[q][1]))for(;q>=f;)if(b>d[c=f+q>>1][1])f=c+1;else{if(!(b=a||196608<=a&&262141>=a?2:1}return a}}({nul:0,control:0});b.getStringCellWidth=function(a){for(var c=0,d=a.length,e=0;e= g){if(++e>=d)return c+b.wcwidth(g);var q=a.charCodeAt(e);56320<=q&&57343>=q?g=1024*(g-55296)+q-56320+65536:c+=b.wcwidth(q)}c+=b.wcwidth(g)}return c}},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});a=function(){function a(a,b){if(void 0===a&&(a=32),void 0===b&&(b=32),this.maxLength=a,this.maxSubParamsLength=b,256>8,d=255&this._subParamsIdx[b];0=this.maxLength)this._rejectDigits=!0;else{if(-1>a)throw Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength;this.params[this.length++]=2147483647=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(-1>a)throw Error("values lesser than -1 are not allowed"); this._subParams[this._subParamsLength++]=2147483647>8)},a.prototype.getSubParams=function(a){var b=this._subParamsIdx[a]>>8;a=255&this._subParamsIdx[a];return 0>8,d=255&this._subParamsIdx[b];0d||57c.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},a.prototype.end=function(a){var b;return this._hitLimit?b=!1:a&&(b=this._handler(this._data)),this._data="",this._hitLimit=!1,b},a}();b.OscHandler= a},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});b.PAYLOAD_LIMIT=1E7},function(a,b,d){Object.defineProperty(b,"__esModule",{value:!0});var c=d(8),g=d(20),f=d(22),h=[];a=function(){function a(){this._handlers=Object.create(null);this._active=h;this._ident=0;this._handlerFb=function(){}}return a.prototype.dispose=function(){this._handlers=Object.create(null);this._handlerFb=function(){}},a.prototype.addHandler=function(a,b){void 0===this._handlers[a]&&(this._handlers[a]=[]);var c=this._handlers[a]; return c.push(b),{dispose:function(){var a=c.indexOf(b);-1!==a&&c.splice(a,1)}}},a.prototype.setHandler=function(a,b){this._handlers[a]=[b]},a.prototype.clearHandler=function(a){this._handlers[a]&&delete this._handlers[a]},a.prototype.setHandlerFallback=function(a){this._handlerFb=a},a.prototype.reset=function(){this._active.length&&this.unhook(!1);this._active=h;this._ident=0},a.prototype.hook=function(a,b){if(this.reset(),this._ident=a,this._active=this._handlers[a]||h,this._active.length)for(a= this._active.length-1;0<=a;a--)this._active[a].hook(b);else this._handlerFb(this._ident,"HOOK",b)},a.prototype.put=function(a,b,d){if(this._active.length)for(var e=this._active.length-1;0<=e;e--)this._active[e].put(a,b,d);else this._handlerFb(this._ident,"PUT",c.utf32ToString(a,b,d))},a.prototype.unhook=function(a){if(this._active.length){for(var b=this._active.length-1;0<=b&&!1===this._active[b].unhook(a);b--);for(b--;0<=b;b--)this._active[b].unhook(!1)}else this._handlerFb(this._ident,"UNHOOK", a);this._active=h;this._ident=0},a}();b.DcsParser=a;a=function(){function a(a){this._handler=a;this._data="";this._hitLimit=!1}return a.prototype.hook=function(a){this._params=a.clone();this._data="";this._hitLimit=!1},a.prototype.put=function(a,b,d){this._hitLimit||(this._data+=c.utf32ToString(a,b,d),this._data.length>f.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},a.prototype.unhook=function(a){var b;return this._hitLimit?b=!1:a&&(b=this._handler(this._data,this._params?this._params:new g.Params)), this._params=void 0,this._data="",this._hitLimit=!1,b},a}();b.DcsHandler=a},function(a,b,d){Object.defineProperty(b,"__esModule",{value:!0});var c=d(25),g=d(43),f=[];b.acquireCharAtlas=function(a,b,d,e,t){a=c.generateConfig(e,t,a,d);for(d=0;dd;d++){var e=b[d/36%6|0],g=b[d/6%6|0],f=b[d%6];a.push({css:c.toCss(e,g, f),rgba:c.toRgba(e,g,f)})}for(d=0;24>d;d++)b=8+10*d,a.push({css:c.toCss(b,b,b),rgba:c.toRgba(b,b,b)});return a}();a=function(){function a(a,d){this.allowTransparency=d;a=a.createElement("canvas");a.width=1;a.height=1;a=a.getContext("2d");if(!a)throw Error("Could not get rendering context");this._ctx=a;this._ctx.globalCompositeOperation="copy";this._litmusColor=this._ctx.createLinearGradient(0,0,1,1);this._contrastCache=new g.ColorContrastCache;this.colors={foreground:f,background:h,cursor:k,cursorAccent:r, selection:q,selectionOpaque:c.blend(h,q),ansi:b.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache}}return a.prototype.onOptionsChange=function(a){"minimumContrastRatio"===a&&this._contrastCache.clear()},a.prototype.setTheme=function(a){void 0===a&&(a={});this.colors.foreground=this._parseColor(a.foreground,f);this.colors.background=this._parseColor(a.background,h);this.colors.cursor=this._parseColor(a.cursor,k,!0);this.colors.cursorAccent=this._parseColor(a.cursorAccent,r,!0);this.colors.selection= this._parseColor(a.selection,q,!0);this.colors.selectionOpaque=c.blend(this.colors.background,this.colors.selection);this.colors.ansi[0]=this._parseColor(a.black,b.DEFAULT_ANSI_COLORS[0]);this.colors.ansi[1]=this._parseColor(a.red,b.DEFAULT_ANSI_COLORS[1]);this.colors.ansi[2]=this._parseColor(a.green,b.DEFAULT_ANSI_COLORS[2]);this.colors.ansi[3]=this._parseColor(a.yellow,b.DEFAULT_ANSI_COLORS[3]);this.colors.ansi[4]=this._parseColor(a.blue,b.DEFAULT_ANSI_COLORS[4]);this.colors.ansi[5]=this._parseColor(a.magenta, b.DEFAULT_ANSI_COLORS[5]);this.colors.ansi[6]=this._parseColor(a.cyan,b.DEFAULT_ANSI_COLORS[6]);this.colors.ansi[7]=this._parseColor(a.white,b.DEFAULT_ANSI_COLORS[7]);this.colors.ansi[8]=this._parseColor(a.brightBlack,b.DEFAULT_ANSI_COLORS[8]);this.colors.ansi[9]=this._parseColor(a.brightRed,b.DEFAULT_ANSI_COLORS[9]);this.colors.ansi[10]=this._parseColor(a.brightGreen,b.DEFAULT_ANSI_COLORS[10]);this.colors.ansi[11]=this._parseColor(a.brightYellow,b.DEFAULT_ANSI_COLORS[11]);this.colors.ansi[12]=this._parseColor(a.brightBlue, b.DEFAULT_ANSI_COLORS[12]);this.colors.ansi[13]=this._parseColor(a.brightMagenta,b.DEFAULT_ANSI_COLORS[13]);this.colors.ansi[14]=this._parseColor(a.brightCyan,b.DEFAULT_ANSI_COLORS[14]);this.colors.ansi[15]=this._parseColor(a.brightWhite,b.DEFAULT_ANSI_COLORS[15]);this._contrastCache.clear()},a.prototype._parseColor=function(a,b,d){if(void 0===d&&(d=this.allowTransparency),void 0===a)return b;if(this._ctx.fillStyle=this._litmusColor,this._ctx.fillStyle=a,"string"!=typeof this._ctx.fillStyle)return console.warn("Color: "+ a+" is invalid using fallback "+b.css),b;this._ctx.fillRect(0,0,1,1);var e=this._ctx.getImageData(0,0,1,1).data;if(255!==e[3]){if(!d)return console.warn("Color: "+a+" is using transparency, but allowTransparency is false. Using fallback "+b.css+"."),b;if(5===a.length){e=parseInt(a.substr(1),16);a=16*(e>>12&15);b=16*(e>>8&15);d=16*(e>>4&15);e=16*(15&e);var g=c.toRgba(a,b,d,e)}else a=(g=parseInt(a.substr(1),16))>>24&255,b=g>>16&255,d=g>>8&255,e=255&g;return{rgba:g,css:c.toCss(a,b,d,e)}}return{css:a, rgba:c.toRgba(e[0],e[1],e[2],e[3])}},a}();b.ColorManager=a},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});b.throwIfFalsy=function(a){if(!a)throw Error("value must not be falsy");return a}},function(a,b,d){var c,g=this&&this.__extends||(c=function(a,b){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,b)},function(a,b){function d(){this.constructor=a}c(a,b);a.prototype=null=== b?Object.create(b):(d.prototype=b.prototype,new d)});Object.defineProperty(b,"__esModule",{value:!0});a=d(6);var f=d(3),h=d(5);d=function(a){function b(b,c,d){var e=a.call(this)||this;return e.content=0,e.fg=b.fg,e.bg=b.bg,e.combinedData=c,e._width=d,e}return g(b,a),b.prototype.isCombined=function(){return 2097152},b.prototype.getWidth=function(){return this._width},b.prototype.getChars=function(){return this.combinedData},b.prototype.getCode=function(){return 2097151},b.prototype.setFromCharData= function(){throw Error("not implemented");},b.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},b}(a.AttributeData);b.JoinedCellData=d;d=function(){function a(a){this._bufferService=a;this._characterJoiners=[];this._nextCharacterJoinerId=0;this._workCell=new h.CellData}return a.prototype.registerCharacterJoiner=function(a){a={id:this._nextCharacterJoinerId++,handler:a};return this._characterJoiners.push(a),a.id},a.prototype.deregisterCharacterJoiner= function(a){for(var b=0;b=b?a[e]:a[e]?f(a[e],b-1):a[e];return c}},function(a,b,d){Object.defineProperty(b, "__esModule",{value:!0});var c=d(34),g=d(17),f=d(78);a=function(){function a(a){this._core=new c.Terminal(a);this._addonManager=new f.AddonManager}return Object.defineProperty(a.prototype,"onCursorMove",{get:function(){return this._core.onCursorMove},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onLineFeed",{get:function(){return this._core.onLineFeed},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onSelectionChange",{get:function(){return this._core.onSelectionChange}, enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onData",{get:function(){return this._core.onData},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onBinary",{get:function(){return this._core.onBinary},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onTitleChange",{get:function(){return this._core.onTitleChange},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onScroll",{get:function(){return this._core.onScroll},enumerable:!0, configurable:!0}),Object.defineProperty(a.prototype,"onKey",{get:function(){return this._core.onKey},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onRender",{get:function(){return this._core.onRender},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onResize",{get:function(){return this._core.onResize},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"element",{get:function(){return this._core.element},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype, "parser",{get:function(){return this._parser||(this._parser=new q(this._core)),this._parser},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"textarea",{get:function(){return this._core.textarea},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"rows",{get:function(){return this._core.rows},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"cols",{get:function(){return this._core.cols},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype, "buffer",{get:function(){return new h(this._core.buffer)},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"markers",{get:function(){return this._core.markers},enumerable:!0,configurable:!0}),a.prototype.blur=function(){this._core.blur()},a.prototype.focus=function(){this._core.focus()},a.prototype.resize=function(a,b){this._verifyIntegers(a,b);this._core.resize(a,b)},a.prototype.open=function(a){this._core.open(a)},a.prototype.attachCustomKeyEventHandler=function(a){this._core.attachCustomKeyEventHandler(a)}, a.prototype.registerLinkMatcher=function(a,b,c){return this._core.registerLinkMatcher(a,b,c)},a.prototype.deregisterLinkMatcher=function(a){this._core.deregisterLinkMatcher(a)},a.prototype.registerCharacterJoiner=function(a){return this._core.registerCharacterJoiner(a)},a.prototype.deregisterCharacterJoiner=function(a){this._core.deregisterCharacterJoiner(a)},a.prototype.addMarker=function(a){return this._verifyIntegers(a),this._core.addMarker(a)},a.prototype.hasSelection=function(){return this._core.hasSelection()}, a.prototype.select=function(a,b,c){this._verifyIntegers(a,b,c);this._core.select(a,b,c)},a.prototype.getSelection=function(){return this._core.getSelection()},a.prototype.getSelectionPosition=function(){return this._core.getSelectionPosition()},a.prototype.clearSelection=function(){this._core.clearSelection()},a.prototype.selectAll=function(){this._core.selectAll()},a.prototype.selectLines=function(a,b){this._verifyIntegers(a,b);this._core.selectLines(a,b)},a.prototype.dispose=function(){this._addonManager.dispose(); this._core.dispose()},a.prototype.scrollLines=function(a){this._verifyIntegers(a);this._core.scrollLines(a)},a.prototype.scrollPages=function(a){this._verifyIntegers(a);this._core.scrollPages(a)},a.prototype.scrollToTop=function(){this._core.scrollToTop()},a.prototype.scrollToBottom=function(){this._core.scrollToBottom()},a.prototype.scrollToLine=function(a){this._verifyIntegers(a);this._core.scrollToLine(a)},a.prototype.clear=function(){this._core.clear()},a.prototype.write=function(a,b){this._core.write(a, b)},a.prototype.writeUtf8=function(a,b){this._core.write(a,b)},a.prototype.writeln=function(a,b){this._core.write(a);this._core.write("\r\n",b)},a.prototype.paste=function(a){this._core.paste(a)},a.prototype.getOption=function(a){return this._core.optionsService.getOption(a)},a.prototype.setOption=function(a,b){this._core.optionsService.setOption(a,b)},a.prototype.refresh=function(a,b){this._verifyIntegers(a,b);this._core.refresh(a,b)},a.prototype.reset=function(){this._core.reset()},a.prototype.loadAddon= function(a){return this._addonManager.loadAddon(this,a)},Object.defineProperty(a,"strings",{get:function(){return g},enumerable:!0,configurable:!0}),a.prototype._verifyIntegers=function(){for(var a=[],b=0;ba||a>=this._line.length))return new r(this._line,a)},a.prototype.translateToString=function(a,b,c){return this._line.translateToString(a,b,c)},a}(),r=function(){function a(a,b){this._line=a;this._x=b}return Object.defineProperty(a.prototype, "char",{get:function(){return this._line.getString(this._x)},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"width",{get:function(){return this._line.getWidth(this._x)},enumerable:!0,configurable:!0}),a}(),q=function(){function a(a){this._core=a}return a.prototype.addCsiHandler=function(a,b){return this._core.addCsiHandler(a,function(a){return b(a.toArray())})},a.prototype.addDcsHandler=function(a,b){return this._core.addDcsHandler(a,function(a,c){return b(a,c.toArray())})},a.prototype.addEscHandler= function(a,b){return this._core.addEscHandler(a,b)},a.prototype.addOscHandler=function(a,b){return this._core.addOscHandler(a,b)},a}()},function(a,b,d){var c,g=this&&this.__extends||(c=function(a,b){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,b)},function(a,b){function d(){this.constructor=a}c(a,b);a.prototype=null===b?Object.create(b):(d.prototype=b.prototype,new d)});Object.defineProperty(b, "__esModule",{value:!0});var f=d(35),h=d(36),k=d(37),r=d(12),q=d(38),t=d(40),v=d(50),l=d(51),n=d(11),y=d(7),B=d(17),O=d(54),X=d(55),M=d(56),ha=d(57),R=d(59),C=d(1),H=d(16),qa=d(60),V=d(26),ra=d(61),I=d(0),sa=d(62),ta=d(4),ja=d(63),Fa=d(64);a=d(2);var Sa=d(70),xa=d(71),ma=d(72),P=d(73),ya=d(74),ua=d(75),J=d(76),G=d(77),da="undefined"!=typeof window?window.document:null;d=function(a){function b(b){void 0===b&&(b={});var c=a.call(this)||this;return c.browser=n,c.mouseEvents=0,c._keyDownHandled=!1,c._blankLine= null,c._onCursorMove=new C.EventEmitter,c._onData=new C.EventEmitter,c._onBinary=new C.EventEmitter,c._onKey=new C.EventEmitter,c._onLineFeed=new C.EventEmitter,c._onRender=new C.EventEmitter,c._onResize=new C.EventEmitter,c._onScroll=new C.EventEmitter,c._onSelectionChange=new C.EventEmitter,c._onTitleChange=new C.EventEmitter,c._onFocus=new C.EventEmitter,c._onBlur=new C.EventEmitter,c.onA11yCharEmitter=new C.EventEmitter,c.onA11yTabEmitter=new C.EventEmitter,c._instantiationService=new ya.InstantiationService, c.optionsService=new sa.OptionsService(b),c._instantiationService.setService(I.IOptionsService,c.optionsService),c._bufferService=c._instantiationService.createInstance(Fa.BufferService),c._instantiationService.setService(I.IBufferService,c._bufferService),c._logService=c._instantiationService.createInstance(ma.LogService),c._instantiationService.setService(I.ILogService,c._logService),c._coreService=c._instantiationService.createInstance(xa.CoreService,function(){return c.scrollToBottom()}),c._instantiationService.setService(I.ICoreService, c._coreService),c._coreService.onData(function(a){return c._onData.fire(a)}),c._coreService.onBinary(function(a){return c._onBinary.fire(a)}),c._coreMouseService=c._instantiationService.createInstance(ua.CoreMouseService),c._instantiationService.setService(I.ICoreMouseService,c._coreMouseService),c._dirtyRowService=c._instantiationService.createInstance(P.DirtyRowService),c._instantiationService.setService(I.IDirtyRowService,c._dirtyRowService),c._setupOptionsListeners(),c._setup(),c._writeBuffer= new J.WriteBuffer(function(a){return c._inputHandler.parse(a)}),c}return g(b,a),Object.defineProperty(b.prototype,"options",{get:function(){return this.optionsService.options},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"cols",{get:function(){return this._bufferService.cols},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"rows",{get:function(){return this._bufferService.rows},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onCursorMove", {get:function(){return this._onCursorMove.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onData",{get:function(){return this._onData.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onBinary",{get:function(){return this._onBinary.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onKey",{get:function(){return this._onKey.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event}, enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onRender",{get:function(){return this._onRender.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onResize",{get:function(){return this._onResize.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onSelectionChange",{get:function(){return this._onSelectionChange.event}, enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onTitleChange",{get:function(){return this._onTitleChange.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onFocus",{get:function(){return this._onFocus.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onBlur",{get:function(){return this._onBlur.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onA11yChar",{get:function(){return this.onA11yCharEmitter.event}, enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onA11yTab",{get:function(){return this.onA11yTabEmitter.event},enumerable:!0,configurable:!0}),b.prototype.dispose=function(){var b,c,d,e;this._isDisposed||(a.prototype.dispose.call(this),null===(b=this._windowsMode)||void 0===b||b.dispose(),this._windowsMode=void 0,null===(c=this._renderService)||void 0===c||c.dispose(),this._customKeyEventHandler=null,this.write=function(){},null===(e=null===(d=this.element)||void 0===d?void 0:d.parentNode)|| void 0===e||e.removeChild(this.element))},b.prototype._setup=function(){var a=this;this._parent=da?da.body:null;this._customKeyEventHandler=null;this.insertMode=this.originMode=this.applicationKeypad=!1;this.wraparoundMode=!0;this.bracketedPasteMode=!1;this.gcharset=this.charset=null;this.glevel=0;this.charsets=[null];this.curAttrData=H.DEFAULT_ATTR_DATA.clone();this._eraseAttrData=H.DEFAULT_ATTR_DATA.clone();this.params=[];this.currentParam=0;this._userScrolling=!1;this._inputHandler=new q.InputHandler(this, this._bufferService,this._coreService,this._dirtyRowService,this._logService,this.optionsService,this._coreMouseService);this._inputHandler.onCursorMove(function(){return a._onCursorMove.fire()});this._inputHandler.onLineFeed(function(){return a._onLineFeed.fire()});this.register(this._inputHandler);this.linkifier=this.linkifier||new v.Linkifier(this._bufferService,this._logService);this.options.windowsMode&&this._enableWindowsMode()},b.prototype._enableWindowsMode=function(){this._windowsMode||(this._windowsMode= this.onLineFeed(qa.handleWindowsModeLineFeed.bind(null,this._bufferService)))},Object.defineProperty(b.prototype,"buffer",{get:function(){return this.buffers.active},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"buffers",{get:function(){return this._bufferService.buffers},enumerable:!0,configurable:!0}),b.prototype.eraseAttrData=function(){return this._eraseAttrData.bg&=-67108864,this._eraseAttrData.bg|=67108863&this.curAttrData.bg,this._eraseAttrData},b.prototype.focus=function(){this.textarea&& this.textarea.focus({preventScroll:!0})},b.prototype._setupOptionsListeners=function(){var a=this;this.optionsService.onOptionChange(function(b){var c,d,e,g,f;switch(b){case "fontFamily":case "fontSize":null===(c=a._renderService)||void 0===c||c.clear();null===(d=a._charSizeService)||void 0===d||d.measure();break;case "drawBoldTextInBrightColors":case "letterSpacing":case "lineHeight":case "fontWeight":case "fontWeightBold":case "minimumContrastRatio":a._renderService&&(a._renderService.clear(),a._renderService.onResize(a.cols, a.rows),a.refresh(0,a.rows-1));break;case "rendererType":a._renderService&&(a._renderService.setRenderer(a._createRenderer()),a._renderService.onResize(a.cols,a.rows));break;case "scrollback":a.buffers.resize(a.cols,a.rows);null===(e=a.viewport)||void 0===e||e.syncScrollArea();break;case "screenReaderMode":a.optionsService.options.screenReaderMode?!a._accessibilityManager&&a._renderService&&(a._accessibilityManager=new M.AccessibilityManager(a,a._renderService)):(null===(g=a._accessibilityManager)|| void 0===g||g.dispose(),a._accessibilityManager=null);break;case "tabStopWidth":a.buffers.setupTabStops();break;case "theme":a._setTheme(a.optionsService.options.theme);break;case "windowsMode":a.optionsService.options.windowsMode?a._enableWindowsMode():(null===(f=a._windowsMode)||void 0===f||f.dispose(),a._windowsMode=void 0)}})},b.prototype._onTextAreaFocus=function(a){this.sendFocus&&this._coreService.triggerDataEvent(r.C0.ESC+"[I");this.updateCursorStyle(a);this.element.classList.add("focus"); this.showCursor();this._onFocus.fire()},b.prototype.blur=function(){return this.textarea.blur()},b.prototype._onTextAreaBlur=function(){this.textarea.value="";this.refresh(this.buffer.y,this.buffer.y);this.sendFocus&&this._coreService.triggerDataEvent(r.C0.ESC+"[O");this.element.classList.remove("focus");this._onBlur.fire()},b.prototype._initGlobal=function(){function a(a){return k.handlePasteEvent(a,b.textarea,b.bracketedPasteMode,b._coreService)}var b=this;this._bindKeys();this.register(y.addDisposableDomListener(this.element, "copy",function(a){b.hasSelection()&&k.copyHandler(a,b._selectionService)}));this.register(y.addDisposableDomListener(this.textarea,"paste",a));this.register(y.addDisposableDomListener(this.element,"paste",a));n.isFirefox?this.register(y.addDisposableDomListener(this.element,"mousedown",function(a){2===a.button&&k.rightClickHandler(a,b.textarea,b.screenElement,b._selectionService,b.options.rightClickSelectsWord)})):this.register(y.addDisposableDomListener(this.element,"contextmenu",function(a){k.rightClickHandler(a, b.textarea,b.screenElement,b._selectionService,b.options.rightClickSelectsWord)}));n.isLinux&&this.register(y.addDisposableDomListener(this.element,"auxclick",function(a){1===a.button&&k.moveTextAreaUnderMouseCursor(a,b.textarea,b.screenElement)}))},b.prototype._bindKeys=function(){var a=this;this.register(y.addDisposableDomListener(this.textarea,"keyup",function(b){return a._keyUp(b)},!0));this.register(y.addDisposableDomListener(this.textarea,"keydown",function(b){return a._keyDown(b)},!0));this.register(y.addDisposableDomListener(this.textarea, "keypress",function(b){return a._keyPress(b)},!0));this.register(y.addDisposableDomListener(this.textarea,"compositionstart",function(){return a._compositionHelper.compositionstart()}));this.register(y.addDisposableDomListener(this.textarea,"compositionupdate",function(b){return a._compositionHelper.compositionupdate(b)}));this.register(y.addDisposableDomListener(this.textarea,"compositionend",function(){return a._compositionHelper.compositionend()}));this.register(this.onRender(function(){return a._compositionHelper.updateCompositionElements()})); this.register(this.onRender(function(b){return a._queueLinkification(b.start,b.end)}))},b.prototype.open=function(a){var b=this;if(this._parent=a||this._parent,!this._parent)throw Error("Terminal requires a parent element.");da.body.contains(a)||this._logService.warn("Terminal.open was called on an element that was not attached to the DOM");this._document=this._parent.ownerDocument;this.element=this._document.createElement("div");this.element.dir="ltr";this.element.classList.add("terminal");this.element.classList.add("xterm"); this.element.setAttribute("tabindex","0");this._parent.appendChild(this.element);a=da.createDocumentFragment();this._viewportElement=da.createElement("div");this._viewportElement.classList.add("xterm-viewport");a.appendChild(this._viewportElement);this._viewportScrollArea=da.createElement("div");this._viewportScrollArea.classList.add("xterm-scroll-area");this._viewportElement.appendChild(this._viewportScrollArea);this.screenElement=da.createElement("div");this.screenElement.classList.add("xterm-screen"); this._helperContainer=da.createElement("div");this._helperContainer.classList.add("xterm-helpers");this.screenElement.appendChild(this._helperContainer);a.appendChild(this.screenElement);this.textarea=da.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea");this.textarea.setAttribute("aria-label",B.promptLabel);this.textarea.setAttribute("aria-multiline","false");this.textarea.setAttribute("autocorrect","off");this.textarea.setAttribute("autocapitalize","off");this.textarea.setAttribute("spellcheck", "false");this.textarea.tabIndex=0;this.register(y.addDisposableDomListener(this.textarea,"focus",function(a){return b._onTextAreaFocus(a)}));this.register(y.addDisposableDomListener(this.textarea,"blur",function(){return b._onTextAreaBlur()}));this._helperContainer.appendChild(this.textarea);var c=this._instantiationService.createInstance(G.CoreBrowserService,this.textarea);this._instantiationService.setService(ta.ICoreBrowserService,c);this._charSizeService=this._instantiationService.createInstance(ja.CharSizeService, this._document,this._helperContainer);this._instantiationService.setService(ta.ICharSizeService,this._charSizeService);this._compositionView=da.createElement("div");this._compositionView.classList.add("composition-view");this._compositionHelper=this._instantiationService.createInstance(f.CompositionHelper,this.textarea,this._compositionView);this._helperContainer.appendChild(this._compositionView);this.element.appendChild(a);this._theme=this.options.theme||this._theme;this.options.theme=void 0;this._colorManager= new V.ColorManager(da,this.options.allowTransparency);this.optionsService.onOptionChange(function(a){return b._colorManager.onOptionsChange(a)});this._colorManager.setTheme(this._theme);a=this._createRenderer();this._renderService=this._instantiationService.createInstance(ra.RenderService,a,this.rows,this.screenElement);this._instantiationService.setService(ta.IRenderService,this._renderService);this._renderService.onRender(function(a){return b._onRender.fire(a)});this.onResize(function(a){return b._renderService.resize(a.cols, a.rows)});this._soundService=this._instantiationService.createInstance(O.SoundService);this._instantiationService.setService(ta.ISoundService,this._soundService);this._mouseService=this._instantiationService.createInstance(Sa.MouseService);this._instantiationService.setService(ta.IMouseService,this._mouseService);this.viewport=this._instantiationService.createInstance(h.Viewport,function(a,c){return b.scrollLines(a,c)},this._viewportElement,this._viewportScrollArea);this.viewport.onThemeChange(this._colorManager.colors); this.register(this.viewport);this.register(this.onCursorMove(function(){return b._renderService.onCursorMove()}));this.register(this.onResize(function(){return b._renderService.onResize(b.cols,b.rows)}));this.register(this.onBlur(function(){return b._renderService.onBlur()}));this.register(this.onFocus(function(){return b._renderService.onFocus()}));this.register(this._renderService.onDimensionsChange(function(){return b.viewport.syncScrollArea()}));this._selectionService=this._instantiationService.createInstance(l.SelectionService, function(a,c){return b.scrollLines(a,c)},this.element,this.screenElement);this._instantiationService.setService(ta.ISelectionService,this._selectionService);this.register(this._selectionService.onSelectionChange(function(){return b._onSelectionChange.fire()}));this.register(this._selectionService.onRedrawRequest(function(a){return b._renderService.onSelectionChanged(a.start,a.end,a.columnSelectMode)}));this.register(this._selectionService.onLinuxMouseSelection(function(a){b.textarea.value=a;b.textarea.focus(); b.textarea.select()}));this.register(this.onScroll(function(){b.viewport.syncScrollArea();b._selectionService.refresh()}));this.register(y.addDisposableDomListener(this._viewportElement,"scroll",function(){return b._selectionService.refresh()}));this._mouseZoneManager=this._instantiationService.createInstance(X.MouseZoneManager,this.element,this.screenElement);this.register(this._mouseZoneManager);this.register(this.onScroll(function(){return b._mouseZoneManager.clearAll()}));this.linkifier.attachToDom(this.element, this._mouseZoneManager);this.register(y.addDisposableDomListener(this.element,"mousedown",function(a){return b._selectionService.onMouseDown(a)}));this.mouseEvents?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):this._selectionService.enable();this.options.screenReaderMode&&(this._accessibilityManager=new M.AccessibilityManager(this,this._renderService));this._charSizeService.measure();this.refresh(0,this.rows-1);this._initGlobal();this.bindMouse()},b.prototype._createRenderer= function(){switch(this.options.rendererType){case "canvas":return this._instantiationService.createInstance(t.Renderer,this._colorManager.colors,this.screenElement,this.linkifier);case "dom":return this._instantiationService.createInstance(ha.DomRenderer,this._colorManager.colors,this.element,this.screenElement,this._viewportElement,this.linkifier);default:throw Error('Unrecognized rendererType "'+this.options.rendererType+'"');}},b.prototype._setTheme=function(a){var b,c,d;this._theme=a;null===(b= this._colorManager)||void 0===b||b.setTheme(a);null===(c=this._renderService)||void 0===c||c.setColors(this._colorManager.colors);null===(d=this.viewport)||void 0===d||d.onThemeChange(this._colorManager.colors)},b.prototype.bindMouse=function(){function a(a){a.buttons||e(a)}function b(a){a.buttons&&e(a)}function c(a){return e(a),a.preventDefault(),g.cancel(a)}function d(a){return e(a),a.buttons||(g._document.removeEventListener("mouseup",q),h&&g._document.removeEventListener("mousemove",h)),g.cancel(a)} function e(a){var b,c;if(!(b=f._mouseService.getRawByteCoords(a,f.screenElement,f.cols,f.rows)))return!1;switch(a.overrideType||a.type){case "mousemove":var d=32;void 0===a.buttons?(c=3,void 0!==a.button&&(c=3>a.button?a.button:3)):c=1&a.buttons?0:4&a.buttons?1:2&a.buttons?2:3;break;case "mouseup":d=0;c=3>a.button?a.button:3;break;case "mousedown":d=1;c=3>a.button?a.button:3;break;case "wheel":0!==a.deltaY&&(d=0>a.deltaY?0:1);c=4;break;default:return!1}return!(void 0===d||void 0===c||4a.deltaY?"A":"B");for(var c="",d=0;da){if(0===this.buffer.ydisp)return;this._userScrolling=!0}else a+this.buffer.ydisp>=this.buffer.ybase&&(this._userScrolling= !1);var c=this.buffer.ydisp;this.buffer.ydisp=Math.max(Math.min(this.buffer.ydisp+a,this.buffer.ybase),0);c!==this.buffer.ydisp&&(b||this._onScroll.fire(this.buffer.ydisp),this.refresh(0,this.rows-1))},b.prototype.scrollPages=function(a){this.scrollLines(a*(this.rows-1))},b.prototype.scrollToTop=function(){this.scrollLines(-this.buffer.ydisp)},b.prototype.scrollToBottom=function(){this.scrollLines(this.buffer.ybase-this.buffer.ydisp)},b.prototype.scrollToLine=function(a){a-=this.buffer.ydisp;0!== a&&this.scrollLines(a)},b.prototype.paste=function(a){k.paste(a,this.textarea,this.bracketedPasteMode,this._coreService)},b.prototype.attachCustomKeyEventHandler=function(a){this._customKeyEventHandler=a},b.prototype.addEscHandler=function(a,b){return this._inputHandler.addEscHandler(a,b)},b.prototype.addDcsHandler=function(a,b){return this._inputHandler.addDcsHandler(a,b)},b.prototype.addCsiHandler=function(a,b){return this._inputHandler.addCsiHandler(a,b)},b.prototype.addOscHandler=function(a,b){return this._inputHandler.addOscHandler(a, b)},b.prototype.registerLinkMatcher=function(a,b,c){a=this.linkifier.registerLinkMatcher(a,b,c);return this.refresh(0,this.rows-1),a},b.prototype.deregisterLinkMatcher=function(a){this.linkifier.deregisterLinkMatcher(a)&&this.refresh(0,this.rows-1)},b.prototype.registerCharacterJoiner=function(a){a=this._renderService.registerCharacterJoiner(a);return this.refresh(0,this.rows-1),a},b.prototype.deregisterCharacterJoiner=function(a){this._renderService.deregisterCharacterJoiner(a)&&this.refresh(0,this.rows- 1)},Object.defineProperty(b.prototype,"markers",{get:function(){return this.buffer.markers},enumerable:!0,configurable:!0}),b.prototype.addMarker=function(a){if(this.buffer===this.buffers.normal)return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+a)},b.prototype.hasSelection=function(){return!!this._selectionService&&this._selectionService.hasSelection},b.prototype.select=function(a,b,c){this._selectionService.setSelection(a,b,c)},b.prototype.getSelection=function(){return this._selectionService? this._selectionService.selectionText:""},b.prototype.getSelectionPosition=function(){if(this._selectionService.hasSelection)return{startColumn:this._selectionService.selectionStart[0],startRow:this._selectionService.selectionStart[1],endColumn:this._selectionService.selectionEnd[0],endRow:this._selectionService.selectionEnd[1]}},b.prototype.clearSelection=function(){var a;null===(a=this._selectionService)||void 0===a||a.clearSelection()},b.prototype.selectAll=function(){var a;null===(a=this._selectionService)|| void 0===a||a.selectAll()},b.prototype.selectLines=function(a,b){var c;null===(c=this._selectionService)||void 0===c||c.selectLines(a,b)},b.prototype._keyDown=function(a){if(this._keyDownHandled=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(a))return!1;if(!this._compositionHelper.keydown(a))return this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;var b=R.evaluateKeyboardEvent(a,this._coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta); if(this.updateCursorStyle(a),3===b.type||2===b.type){var c=this.rows-1;return this.scrollLines(2===b.type?-c:c),this.cancel(a,!0)}return 1===b.type&&this.selectAll(),!!this._isThirdLevelShift(this.browser,a)||(b.cancel&&this.cancel(a,!0),!b.key||(b.key!==r.C0.ETX&&b.key!==r.C0.CR||(this.textarea.value=""),this._onKey.fire({key:b.key,domEvent:a}),this.showCursor(),this._coreService.triggerDataEvent(b.key,!0),this.optionsService.options.screenReaderMode?void(this._keyDownHandled=!0):this.cancel(a,!0)))}, b.prototype._isThirdLevelShift=function(a,b){a=a.isMac&&!this.options.macOptionIsMeta&&b.altKey&&!b.ctrlKey&&!b.metaKey||a.isWindows&&b.altKey&&b.ctrlKey&&!b.metaKey;return"keypress"===b.type?a:a&&(!b.keyCode||47g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a, b,c,d);else for(var q=a.length-1;0<=q;q--)(e=a[q])&&(f=(3>g?e(f):3g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var l=a.length-1;0<=l;l--)(e=a[l])&&(f=(3>g?e(f):3b&&0!==this._viewportElement.scrollTop||0",final:"c"},function(a){return n.sendDeviceAttributesSecondary(a)});n._parser.setCsiHandler({final:"d"},function(a){return n.linePosAbsolute(a)});n._parser.setCsiHandler({final:"e"},function(a){return n.vPositionRelative(a)});n._parser.setCsiHandler({final:"f"},function(a){return n.hVPosition(a)});n._parser.setCsiHandler({final:"g"},function(a){return n.tabClear(a)});n._parser.setCsiHandler({final:"h"}, function(a){return n.setMode(a)});n._parser.setCsiHandler({prefix:"?",final:"h"},function(a){return n.setModePrivate(a)});n._parser.setCsiHandler({final:"l"},function(a){return n.resetMode(a)});n._parser.setCsiHandler({prefix:"?",final:"l"},function(a){return n.resetModePrivate(a)});n._parser.setCsiHandler({final:"m"},function(a){return n.charAttributes(a)});n._parser.setCsiHandler({final:"n"},function(a){return n.deviceStatus(a)});n._parser.setCsiHandler({prefix:"?",final:"n"},function(a){return n.deviceStatusPrivate(a)}); n._parser.setCsiHandler({intermediates:"!",final:"p"},function(a){return n.softReset(a)});n._parser.setCsiHandler({intermediates:" ",final:"q"},function(a){return n.setCursorStyle(a)});n._parser.setCsiHandler({final:"r"},function(a){return n.setScrollRegion(a)});n._parser.setCsiHandler({final:"s"},function(a){return n.saveCursor(a)});n._parser.setCsiHandler({final:"u"},function(a){return n.restoreCursor(a)});n._parser.setCsiHandler({intermediates:"'",final:"}"},function(a){return n.insertColumns(a)}); n._parser.setCsiHandler({intermediates:"'",final:"~"},function(a){return n.deleteColumns(a)});n._parser.setExecuteHandler(f.C0.BEL,function(){return n.bell()});n._parser.setExecuteHandler(f.C0.LF,function(){return n.lineFeed()});n._parser.setExecuteHandler(f.C0.VT,function(){return n.lineFeed()});n._parser.setExecuteHandler(f.C0.FF,function(){return n.lineFeed()});n._parser.setExecuteHandler(f.C0.CR,function(){return n.carriageReturn()});n._parser.setExecuteHandler(f.C0.BS,function(){return n.backspace()}); n._parser.setExecuteHandler(f.C0.HT,function(){return n.tab()});n._parser.setExecuteHandler(f.C0.SO,function(){return n.shiftOut()});n._parser.setExecuteHandler(f.C0.SI,function(){return n.shiftIn()});n._parser.setExecuteHandler(f.C1.IND,function(){return n.index()});n._parser.setExecuteHandler(f.C1.NEL,function(){return n.nextLine()});n._parser.setExecuteHandler(f.C1.HTS,function(){return n.tabSet()});n._parser.setOscHandler(0,new O.OscHandler(function(a){return n.setTitle(a)}));n._parser.setOscHandler(2, new O.OscHandler(function(a){return n.setTitle(a)}));n._parser.setEscHandler({final:"7"},function(){return n.saveCursor()});n._parser.setEscHandler({final:"8"},function(){return n.restoreCursor()});n._parser.setEscHandler({final:"D"},function(){return n.index()});n._parser.setEscHandler({final:"E"},function(){return n.nextLine()});n._parser.setEscHandler({final:"H"},function(){return n.tabSet()});n._parser.setEscHandler({final:"M"},function(){return n.reverseIndex()});n._parser.setEscHandler({final:"="}, function(){return n.keypadApplicationMode()});n._parser.setEscHandler({final:">"},function(){return n.keypadNumericMode()});n._parser.setEscHandler({final:"c"},function(){return n.reset()});n._parser.setEscHandler({final:"n"},function(){return n.setgLevel(2)});n._parser.setEscHandler({final:"o"},function(){return n.setgLevel(3)});n._parser.setEscHandler({final:"|"},function(){return n.setgLevel(3)});n._parser.setEscHandler({final:"}"},function(){return n.setgLevel(2)});n._parser.setEscHandler({final:"~"}, function(){return n.setgLevel(1)});n._parser.setEscHandler({intermediates:"%",final:"@"},function(){return n.selectDefaultCharset()});n._parser.setEscHandler({intermediates:"%",final:"G"},function(){return n.selectDefaultCharset()});var H=this,qa;for(qa in h.CHARSETS)B(qa);return n._parser.setEscHandler({intermediates:"#",final:"8"},function(){return n.screenAlignmentPattern()}),n._parser.setErrorHandler(function(a){return n._logService.error("Parsing error: ",a),a}),n._parser.setDcsHandler({intermediates:"$", final:"q"},new ha(n._bufferService,n._coreService,n._logService,n._optionsService)),n}return g(b,a),Object.defineProperty(b.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!0,configurable:!0}),b.prototype.dispose=function(){a.prototype.dispose.call(this)}, b.prototype.parse=function(a){var b=this._bufferService.buffer,c=b.x,d=b.y;if(this._logService.debug("parsing data",a),this._parseBuffer.lengththis._parseBuffer.length&&(this._parseBuffer=new Uint32Array(Math.min(a.length,131072))),this._dirtyRowService.clearRange(),131072d&&g){var B=g[String.fromCharCode(d)];B&&(d=B.charCodeAt(0))}if(f&&this._terminal.onA11yCharEmitter.fire(t.stringFromCodePoint(d)),b||!e.x){if(e.x+b-1>=l)if(q)e.x=0,e.y++,e.y===e.scrollBottom+1?(e.y--,this._terminal.scroll(!0)):(e.y>=this._bufferService.rows&&(e.y=this._bufferService.rows- 1),e.lines.get(e.y).isWrapped=!0),r=e.lines.get(e.y+e.ybase);else if(e.x=l-1,2===b)continue;if(h&&(r.insertCells(e.x,b,e.getNullCell(v)),2===r.getWidth(l-1)&&r.setCellFromCodePoint(l-1,n.NULL_CELL_CODE,n.NULL_CELL_WIDTH,v.fg,v.bg)),r.setCellFromCodePoint(e.x++,d,b,v.fg,v.bg),0=this._bufferService.rows&&(a.y=this._bufferService.rows-1);a.x>=this._bufferService.cols&&a.x--;this._dirtyRowService.markDirty(a.y);this._onLineFeed.fire()},b.prototype.carriageReturn= function(){this._bufferService.buffer.x=0},b.prototype.backspace=function(){this._restrictCursor();0=this._bufferService.cols)){var a=this._bufferService.buffer.x;this._bufferService.buffer.x=this._bufferService.buffer.nextStop();this._optionsService.options.screenReaderMode&&this._terminal.onA11yTabEmitter.fire(this._bufferService.buffer.x-a)}},b.prototype.shiftOut=function(){this._terminal.setgLevel(1)}, b.prototype.shiftIn=function(){this._terminal.setgLevel(0)},b.prototype._restrictCursor=function(){this._bufferService.buffer.x=Math.min(this._bufferService.cols-1,Math.max(0,this._bufferService.buffer.x));this._bufferService.buffer.y=this._terminal.originMode?Math.min(this._bufferService.buffer.scrollBottom,Math.max(this._bufferService.buffer.scrollTop,this._bufferService.buffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._bufferService.buffer.y));this._dirtyRowService.markDirty(this._bufferService.buffer.y)}, b.prototype._setCursor=function(a,b){this._dirtyRowService.markDirty(this._bufferService.buffer.y);this._terminal.originMode?(this._bufferService.buffer.x=a,this._bufferService.buffer.y=this._bufferService.buffer.scrollTop+b):(this._bufferService.buffer.x=a,this._bufferService.buffer.y=b);this._restrictCursor();this._dirtyRowService.markDirty(this._bufferService.buffer.y)},b.prototype._moveCursor=function(a,b){this._restrictCursor();this._setCursor(this._bufferService.buffer.x+a,this._bufferService.buffer.y+ b)},b.prototype.cursorUp=function(a){var b=this._bufferService.buffer.y-this._bufferService.buffer.scrollTop;0<=b?this._moveCursor(0,-Math.min(b,a.params[0]||1)):this._moveCursor(0,-(a.params[0]||1))},b.prototype.cursorDown=function(a){var b=this._bufferService.buffer.scrollBottom-this._bufferService.buffer.y;0<=b?this._moveCursor(0,Math.min(b,a.params[0]||1)):this._moveCursor(0,a.params[0]||1)},b.prototype.cursorForward=function(a){this._moveCursor(a.params[0]||1,0)},b.prototype.cursorBackward=function(a){this._moveCursor(-(a.params[0]|| 1),0)},b.prototype.cursorNextLine=function(a){this.cursorDown(a);this._bufferService.buffer.x=0},b.prototype.cursorPrecedingLine=function(a){this.cursorUp(a);this._bufferService.buffer.x=0},b.prototype.cursorCharAbsolute=function(a){this._setCursor((a.params[0]||1)-1,this._bufferService.buffer.y)},b.prototype.cursorPosition=function(a){this._setCursor(2<=a.length?(a.params[1]||1)-1:0,(a.params[0]||1)-1)},b.prototype.charPosAbsolute=function(a){this._setCursor((a.params[0]||1)-1,this._bufferService.buffer.y)}, b.prototype.hPositionRelative=function(a){this._moveCursor(a.params[0]||1,0)},b.prototype.linePosAbsolute=function(a){this._setCursor(this._bufferService.buffer.x,(a.params[0]||1)-1)},b.prototype.vPositionRelative=function(a){this._moveCursor(0,a.params[0]||1)},b.prototype.hVPosition=function(a){this.cursorPosition(a)},b.prototype.tabClear=function(a){a=a.params[0];0===a?delete this._bufferService.buffer.tabs[this._bufferService.buffer.x]:3===a&&(this._bufferService.buffer.tabs={})},b.prototype.cursorForwardTab= function(a){if(!(this._bufferService.buffer.x>=this._bufferService.cols))for(a=a.params[0]||1;a--;)this._bufferService.buffer.x=this._bufferService.buffer.nextStop()},b.prototype.cursorBackwardTab=function(a){if(!(this._bufferService.buffer.x>=this._bufferService.cols)){a=a.params[0]||1;for(var b=this._bufferService.buffer;a--;)b.x=b.prevStop()}},b.prototype._eraseInBufferLine=function(a,b,c,d){void 0===d&&(d=!1);a=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+a);a.replaceCells(b, c,this._bufferService.buffer.getNullCell(this._terminal.eraseAttrData()));d&&(a.isWrapped=!1)},b.prototype._resetBufferLine=function(a){a=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+a);a.fill(this._bufferService.buffer.getNullCell(this._terminal.eraseAttrData()));a.isWrapped=!1},b.prototype.eraseInDisplay=function(a){switch(this._restrictCursor(),a.params[0]){case 0:a=this._bufferService.buffer.y;this._dirtyRowService.markDirty(a);for(this._eraseInBufferLine(a++,this._bufferService.buffer.x, this._bufferService.cols,0===this._bufferService.buffer.x);a=this._bufferService.cols&&(this._bufferService.buffer.lines.get(a+1).isWrapped=!1);a--;)this._resetBufferLine(a);this._dirtyRowService.markDirty(0);break;case 2:a=this._bufferService.rows; for(this._dirtyRowService.markDirty(a-1);a--;)this._resetBufferLine(a);this._dirtyRowService.markDirty(0);break;case 3:a=this._bufferService.buffer.lines.length-this._bufferService.rows,0b.scrollBottom||b.yb.scrollBottom||b.yb.scrollBottom||b.yb.scrollBottom||b.yb.scrollBottom||b.yb.scrollBottom||b.y0;276;0c"):this._terminal.is("rxvt-unicode")?this._coreService.triggerDataEvent(f.C0.ESC+"[>85;95;0c"):this._terminal.is("linux")?this._coreService.triggerDataEvent(a.params[0]+"c"):this._terminal.is("screen")&& this._coreService.triggerDataEvent(f.C0.ESC+"[>83;40003;0c"))},b.prototype.setMode=function(a){for(var b=0;b=b?(d.fg&=-50331904,d.fg=d.fg|16777216|b-30):40<=b&&47>=b?(d.bg&=-50331904,d.bg=d.bg|16777216|b-40):90<=b&&97>=b?(d.fg&=-50331904,d.fg=d.fg|16777224|b-90):100<=b&&107>=b?(d.bg&= -50331904,d.bg=d.bg|16777224|b-100):0===b?(d.fg=v.DEFAULT_ATTR_DATA.fg,d.bg=v.DEFAULT_ATTR_DATA.bg):1===b?d.fg|=134217728:3===b?d.bg|=67108864:4===b?d.fg|=268435456:5===b?d.fg|=536870912:7===b?d.fg|=67108864:8===b?d.fg|=1073741824:2===b?d.bg|=134217728:22===b?(d.fg&=-134217729,d.bg&=-134217729):23===b?d.bg&=-67108865:24===b?d.fg&=-268435457:25===b?d.fg&=-536870913:27===b?d.fg&=-67108865:28===b?d.fg&=-1073741825:39===b?(d.fg&=-67108864,d.fg|=16777215&v.DEFAULT_ATTR_DATA.fg):49===b?(d.bg&=-67108864, d.bg|=16777215&v.DEFAULT_ATTR_DATA.bg):38===b||48===b?e+=this._extractColor(a,e,d):100===b?(d.fg&=-67108864,d.fg|=16777215&v.DEFAULT_ATTR_DATA.fg,d.bg&=-67108864,d.bg|=16777215&v.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",b)},b.prototype.deviceStatus=function(a){switch(a.params[0]){case 5:this._coreService.triggerDataEvent(f.C0.ESC+"[0n");break;case 6:this._coreService.triggerDataEvent(f.C0.ESC+"["+(this._bufferService.buffer.y+1)+";"+(this._bufferService.buffer.x+1)+ "R")}},b.prototype.deviceStatusPrivate=function(a){switch(a.params[0]){case 6:this._coreService.triggerDataEvent(f.C0.ESC+"[?"+(this._bufferService.buffer.y+1)+";"+(this._bufferService.buffer.x+1)+"R")}},b.prototype.softReset=function(){this._coreService.isCursorHidden=!1;this._terminal.insertMode=!1;this._terminal.originMode=!1;this._terminal.wraparoundMode=!0;this._terminal.applicationKeypad=!1;this._terminal.viewport&&this._terminal.viewport.syncScrollArea();this._coreService.decPrivateModes.applicationCursorKeys= !1;this._bufferService.buffer.scrollTop=0;this._bufferService.buffer.scrollBottom=this._bufferService.rows-1;this._terminal.curAttrData=v.DEFAULT_ATTR_DATA.clone();this._bufferService.buffer.x=this._bufferService.buffer.y=0;this._terminal.charset=null;this._terminal.glevel=0;this._terminal.charsets=[null]},b.prototype.setCursorStyle=function(a){a=a.params[0]||1;switch(a){case 1:case 2:this._optionsService.options.cursorStyle="block";break;case 3:case 4:this._optionsService.options.cursorStyle="underline"; break;case 5:case 6:this._optionsService.options.cursorStyle="bar"}this._optionsService.options.cursorBlink=1==a%2},b.prototype.setScrollRegion=function(a){var b,c=a.params[0]||1;(2>a.length||(b=a.params[1])>this._bufferService.rows||0===b)&&(b=this._bufferService.rows);b>c&&(this._bufferService.buffer.scrollTop=c-1,this._bufferService.buffer.scrollBottom=b-1,this._setCursor(0,0))},b.prototype.saveCursor=function(){this._bufferService.buffer.savedX=this._bufferService.buffer.x;this._bufferService.buffer.savedY= this._bufferService.buffer.ybase+this._bufferService.buffer.y;this._bufferService.buffer.savedCurAttrData.fg=this._terminal.curAttrData.fg;this._bufferService.buffer.savedCurAttrData.bg=this._terminal.curAttrData.bg;this._bufferService.buffer.savedCharset=this._terminal.charset},b.prototype.restoreCursor=function(){this._bufferService.buffer.x=this._bufferService.buffer.savedX||0;this._bufferService.buffer.y=Math.max(this._bufferService.buffer.savedY-this._bufferService.buffer.ybase,0);this._terminal.curAttrData.fg= this._bufferService.buffer.savedCurAttrData.fg;this._terminal.curAttrData.bg=this._bufferService.buffer.savedCurAttrData.bg;this._terminal.charset=this._savedCharset;this._bufferService.buffer.savedCharset&&(this._terminal.charset=this._bufferService.buffer.savedCharset);this._restrictCursor()},b.prototype.setTitle=function(a){this._terminal.handleTitle(a)},b.prototype.nextLine=function(){this._bufferService.buffer.x=0;this.index()},b.prototype.keypadApplicationMode=function(){this._logService.debug("Serial port requested application keypad."); this._terminal.applicationKeypad=!0;this._terminal.viewport&&this._terminal.viewport.syncScrollArea()},b.prototype.keypadNumericMode=function(){this._logService.debug("Switching back to normal keypad.");this._terminal.applicationKeypad=!1;this._terminal.viewport&&this._terminal.viewport.syncScrollArea()},b.prototype.selectDefaultCharset=function(){this._terminal.setgLevel(0);this._terminal.setgCharset(0,h.DEFAULT_CHARSET)},b.prototype.selectCharset=function(a){2===a.length?"/"!==a[0]&&this._terminal.setgCharset(M[a[0]], h.CHARSETS[a[1]]||h.DEFAULT_CHARSET):this.selectDefaultCharset()},b.prototype.index=function(){this._restrictCursor();var a=this._bufferService.buffer;this._bufferService.buffer.y++;a.y===a.scrollBottom+1?(a.y--,this._terminal.scroll()):a.y>=this._bufferService.rows&&(a.y=this._bufferService.rows-1);this._restrictCursor()},b.prototype.tabSet=function(){this._bufferService.buffer.tabs[this._bufferService.buffer.x]=!0},b.prototype.reverseIndex=function(){this._restrictCursor();var a=this._bufferService.buffer; a.y===a.scrollTop?(a.lines.shiftElements(a.y+a.ybase,a.scrollBottom-a.scrollTop,1),a.lines.set(a.y+a.ybase,a.getBlankLine(this._terminal.eraseAttrData())),this._dirtyRowService.markRangeDirty(a.scrollTop,a.scrollBottom)):(a.y--,this._restrictCursor())},b.prototype.reset=function(){this._parser.reset();this._terminal.reset()},b.prototype.setgLevel=function(a){this._terminal.setgLevel(a)},b.prototype.screenAlignmentPattern=function(){var a=new y.CellData;a.content=4194373;a.fg=this._terminal.curAttrData.fg; a.bg=this._terminal.curAttrData.bg;var b=this._bufferService.buffer;this._setCursor(0,0);for(var c=0;cc||63e||47a||a>b[1])throw Error("final must be in range "+b[0]+" .. "+b[1]);return c<<=8,c|a},c.prototype.identToString=function(a){for(var b=[];a;)b.push(String.fromCharCode(255&a)),a>>=8;return b.reverse().join("")},c.prototype.dispose=function(){this._csiHandlers=Object.create(null);this._executeHandlers=Object.create(null);this._escHandlers=Object.create(null);this._oscParser.dispose();this._dcsParser.dispose()}, c.prototype.setPrintHandler=function(a){this._printHandler=a},c.prototype.clearPrintHandler=function(){this._printHandler=this._printHandlerFb},c.prototype.addEscHandler=function(a,b){a=this._identifier(a,[48,126]);void 0===this._escHandlers[a]&&(this._escHandlers[a]=[]);var c=this._escHandlers[a];return c.push(b),{dispose:function(){var a=c.indexOf(b);-1!==a&&c.splice(a,1)}}},c.prototype.setEscHandler=function(a,b){this._escHandlers[this._identifier(a,[48,126])]=[b]},c.prototype.clearEscHandler= function(a){this._escHandlers[this._identifier(a,[48,126])]&&delete this._escHandlers[this._identifier(a,[48,126])]},c.prototype.setEscHandlerFallback=function(a){this._escHandlerFb=a},c.prototype.setExecuteHandler=function(a,b){this._executeHandlers[a.charCodeAt(0)]=b},c.prototype.clearExecuteHandler=function(a){this._executeHandlers[a.charCodeAt(0)]&&delete this._executeHandlers[a.charCodeAt(0)]},c.prototype.setExecuteHandlerFallback=function(a){this._executeHandlerFb=a},c.prototype.addCsiHandler= function(a,b){a=this._identifier(a);void 0===this._csiHandlers[a]&&(this._csiHandlers[a]=[]);var c=this._csiHandlers[a];return c.push(b),{dispose:function(){var a=c.indexOf(b);-1!==a&&c.splice(a,1)}}},c.prototype.setCsiHandler=function(a,b){this._csiHandlers[this._identifier(a)]=[b]},c.prototype.clearCsiHandler=function(a){this._csiHandlers[this._identifier(a)]&&delete this._csiHandlers[this._identifier(a)]},c.prototype.setCsiHandlerFallback=function(a){this._csiHandlerFb=a},c.prototype.addDcsHandler= function(a,b){return this._dcsParser.addHandler(this._identifier(a),b)},c.prototype.setDcsHandler=function(a,b){this._dcsParser.setHandler(this._identifier(a),b)},c.prototype.clearDcsHandler=function(a){this._dcsParser.clearHandler(this._identifier(a))},c.prototype.setDcsHandlerFallback=function(a){this._dcsParser.setHandlerFallback(a)},c.prototype.addOscHandler=function(a,b){return this._oscParser.addHandler(a,b)},c.prototype.setOscHandler=function(a,b){this._oscParser.setHandler(a,b)},c.prototype.clearOscHandler= function(a){this._oscParser.clearHandler(a)},c.prototype.setOscHandlerFallback=function(a){this._oscParser.setHandlerFallback(a)},c.prototype.setErrorHandler=function(a){this._errorHandler=a},c.prototype.clearErrorHandler=function(){this._errorHandler=this._errorHandlerFb},c.prototype.reset=function(){this.currentState=this.initialState;this._oscParser.reset();this._dcsParser.reset();this._params.reset();this._params.addParam(0);this.precedingCodepoint=this._collect=0},c.prototype.parse=function(a, b){for(var c=0,d,e=this.currentState,g=this._oscParser,f=this._dcsParser,q=this._collect,l=this._params,h=this.TRANSITIONS.table,k=0;k(c=a[k])?c:160)])>>4){case 2:for(e=k+1;;++e){if(e>=b||32>(c=a[e])||126c){this._printHandler(a,k,e);k=e-1;break}if(++e>=b||32>(c=a[e])||126c){this._printHandler(a,k,e);k=e-1;break}if(++e>=b||32>(c=a[e])||126c){this._printHandler(a,k,e);k=e-1;break}if(++e>=b||32>(c=a[e])||126c){this._printHandler(a,k,e);k= e-1;break}}break;case 3:this._executeHandlers[c]?this._executeHandlers[c]():this._executeHandlerFb(c);this.precedingCodepoint=0;break;case 1:if(this._errorHandler({position:k,code:c,currentState:e,collect:q,params:l,abort:!1}).abort)return;break;case 7:for(var r=(e=this._csiHandlers[q<<8|c])?e.length-1:-1;0<=r&&!1===e[r](l);r--);0>r&&this._csiHandlerFb(q<<8|c,l);this.precedingCodepoint=0;break;case 8:do switch(c){case 59:l.addParam(0);break;case 58:l.addSubParam(-1);break;default:l.addDigit(c-48)}while(++k< b&&47<(c=a[k])&&60>c);k--;break;case 9:q<<=8;q|=c;break;case 10:for(r=(e=this._escHandlers[q<<8|c])?e.length-1:-1;0<=r&&!1===e[r]();r--);0>r&&this._escHandlerFb(q<<8|c);this.precedingCodepoint=0;break;case 11:l.reset();l.addParam(0);q=0;break;case 12:f.hook(q<<8|c,l);break;case 13:for(e=k+1;;++e)if(e>=b||24===(c=a[e])||26===c||27===c||127c){f.put(a,k,e);k=e-1;break}break;case 14:f.unhook(24!==c&&26!==c);27===c&&(d|=1);l.reset();l.addParam(0);this.precedingCodepoint=q=0;break;case 4:g.start(); break;case 5:for(e=k+1;;e++)if(e>=b||32>(c=a[e])||127=c){g.put(a,k,e);k=e-1;break}break;case 6:g.end(24!==c&&26!==c),27===c&&(d|=1),l.reset(),l.addParam(0),this.precedingCodepoint=q=0}e=15&d}this._collect=q;this.currentState=e},c}(a.Disposable);b.EscapeSequenceParser=d},function(a,b,d){var c,g=this&&this.__extends||(c=function(a,b){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a, b)},function(a,b){function d(){this.constructor=a}c(a,b);a.prototype=null===b?Object.create(b):(d.prototype=b.prototype,new d)}),f=this&&this.__decorate||function(a,b,c,d){var e,g=arguments.length,f=3>g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var q=a.length-1;0<=q;q--)(e=a[q])&&(f=(3>g?e(f):3e&&(e+=8);c._ctx.fillStyle= c._colors.ansi[e].css}else a.isFgDefault()?c._ctx.fillStyle=c._colors.foreground.css:a.isFgRGB()?c._ctx.fillStyle="rgb("+h.AttributeData.toColorRGB(a.getFgColor()).join(",")+")":(e=a.getFgColor(),c._optionsService.options.drawBoldTextInBrightColors&&a.isBold()&&8>e&&(e+=8),c._ctx.fillStyle=c._colors.ansi[e].css);c._fillBottomLineAtCells(b,d,a.getWidth());c._ctx.restore()}})},b.prototype.onGridChanged=function(a,b){0!==this._state.cache.length&&(this._charAtlas&&this._charAtlas.beginFrame(),this._clearCells(0, a,this._bufferService.cols,b-a+1),this._drawBackground(a,b),this._drawForeground(a,b))},b.prototype.onOptionsChanged=function(){this._setTransparency(this._optionsService.options.allowTransparency)},b.prototype._isOverlapping=function(a){if(1!==a.getWidth()||256>a.getCode())return!1;a=a.getChars();if(this._characterOverlapCache.hasOwnProperty(a))return this._characterOverlapCache[a];this._ctx.save();this._ctx.font=this._characterFont;var b=Math.floor(this._ctx.measureText(a).width)>this._characterWidth; return this._ctx.restore(),this._characterOverlapCache[a]=b,b},b}(a.BaseRenderLayer);b.TextRenderLayer=d},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});a=function(){function a(){this.cache=[]}return a.prototype.resize=function(a,b){for(var c=0;cthis._drawToCacheCount?(f=this._cacheMap.sizea.code}, b.prototype._toCoordinateX=function(a){return a%this._width*this._config.scaledCharWidth},b.prototype._toCoordinateY=function(a){return Math.floor(a/this._width)*this._config.scaledCharHeight},b.prototype._drawFromCache=function(a,b,c,d){if(!b.isEmpty){var e=this._toCoordinateX(b.index),g=this._toCoordinateY(b.index);a.drawImage(b.inBitmap?this._bitmap:this._cacheCanvas,e,g,this._config.scaledCharWidth,this._config.scaledCharHeight,c,d,this._config.scaledCharWidth,this._config.scaledCharHeight)}}, b.prototype._getColorFromAnsiIndex=function(a){return aa.bg?this._getColorFromAnsiIndex(a.bg):this._config.colors.background},b.prototype._getForegroundColor=function(a){return a.fg===h.INVERTED_DEFAULT_COLOR?v.opaque(this._config.colors.background):256>a.fg?this._getColorFromAnsiIndex(a.fg): this._config.colors.foreground},b.prototype._drawToCache=function(a,b){this._drawToCacheCount++;this._tmpCtx.save();var c=this._getBackgroundColor(a);this._tmpCtx.globalCompositeOperation="copy";this._tmpCtx.fillStyle=c.css;this._tmpCtx.fillRect(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight);this._tmpCtx.globalCompositeOperation="source-over";this._tmpCtx.font=(a.italic?"italic":"")+" "+(a.bold?this._config.fontWeightBold:this._config.fontWeight)+" "+this._config.fontSize*this._config.devicePixelRatio+ "px "+this._config.fontFamily;this._tmpCtx.textBaseline="middle";this._tmpCtx.fillStyle=this._getForegroundColor(a).css;a.dim&&(this._tmpCtx.globalAlpha=h.DIM_OPACITY);this._tmpCtx.fillText(a.chars,0,this._config.scaledCharHeight/2);this._tmpCtx.restore();a=this._tmpCtx.getImageData(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight);var d=!1;if(!this._config.allowTransparency){d=!0;var e=c.rgba>>>24,g=c.rgba>>>16&255;c=c.rgba>>>8&255;for(var f=0;f=this.capacity)c=this._head,this._unlinkNode(c),delete this._map[c.key],c.key=a,c.value=b,this._map[a]=c;else{var d=this._nodePool;0=this._bufferService.rows||0>f||((this._ctx.fillStyle=this._colors.selection.css,c)?(d=a[0],this._fillCells(d,g,b[0]-d,f-g+1)):(d=d===g?a[0]:0,this._fillCells(d,g,(g===f?b[0]:this._bufferService.cols)-d,1),(this._fillCells(0,g+1,this._bufferService.cols,Math.max(f-g-1,0)),g!==f)&&this._fillCells(0,f,e===f?b[0]:this._bufferService.cols,1)),this._state.start= [a[0],a[1]],this._state.end=[b[0],b[1]],this._state.columnSelectMode=c,this._state.ydisp=this._bufferService.buffer.ydisp)}else this._clearState()},b.prototype._didStateChange=function(a,b,c,d){return!this._areCoordinatesEqual(a,this._state.start)||!this._areCoordinatesEqual(b,this._state.end)||c!==this._state.columnSelectMode||d!==this._state.ydisp},b.prototype._areCoordinatesEqual=function(a,b){return!(!a||!b)&&a[0]===b[0]&&a[1]===b[1]},b}(d(13).BaseRenderLayer);b.SelectionRenderLayer=a},function(a, b,d){var c,g=this&&this.__extends||(c=function(a,b){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,b)},function(a,b){function d(){this.constructor=a}c(a,b);a.prototype=null===b?Object.create(b):(d.prototype=b.prototype,new d)});Object.defineProperty(b,"__esModule",{value:!0});a=d(13);var f=d(5);d=function(a){function b(b,c,d,e,g,h,k,r,X){b=a.call(this,b,"cursor",c,!0,d,e,h,k)||this;return b._onRequestRefreshRowsEvent= g,b.bufferService=h,b.optionsService=k,b._coreService=r,b._coreBrowserService=X,b._cell=new f.CellData,b._state={x:0,y:0,isFocused:!1,style:"",width:0},b._cursorRenderers={bar:b._renderBarCursor.bind(b),block:b._renderBlockCursor.bind(b),underline:b._renderUnderlineCursor.bind(b)},b}return g(b,a),b.prototype.resize=function(b){a.prototype.resize.call(this,b);this._state={x:0,y:0,isFocused:!1,style:"",width:0}},b.prototype.reset=function(){this._clearCursor();this._cursorBlinkStateManager&&(this._cursorBlinkStateManager.dispose(), this._cursorBlinkStateManager=void 0,this.onOptionsChanged())},b.prototype.onBlur=function(){this._cursorBlinkStateManager&&this._cursorBlinkStateManager.pause();this._onRequestRefreshRowsEvent.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},b.prototype.onFocus=function(){this._cursorBlinkStateManager?this._cursorBlinkStateManager.resume():this._onRequestRefreshRowsEvent.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},b.prototype.onOptionsChanged= function(){var a,b=this;this._optionsService.options.cursorBlink?this._cursorBlinkStateManager||(this._cursorBlinkStateManager=new h(this._coreBrowserService.isFocused,function(){b._render(!0)})):(null===(a=this._cursorBlinkStateManager)||void 0===a||a.dispose(),this._cursorBlinkStateManager=void 0);this._onRequestRefreshRowsEvent.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},b.prototype.onCursorMove=function(){this._cursorBlinkStateManager&&this._cursorBlinkStateManager.restartBlinkAnimation()}, b.prototype.onGridChanged=function(){!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isPaused?this._render(!1):this._cursorBlinkStateManager.restartBlinkAnimation()},b.prototype._render=function(){if(this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden){var a=this._bufferService.buffer.ybase+this._bufferService.buffer.y,b=a-this._bufferService.buffer.ydisp;if(0>b||b>=this._bufferService.rows)this._clearCursor();else if(this._bufferService.buffer.lines.get(a).loadCell(this._bufferService.buffer.x, this._cell),void 0!==this._cell.content){if(!this._coreBrowserService.isFocused)return this._clearCursor(),this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,a=this._optionsService.options.cursorStyle,a&&"block"!==a?this._cursorRenderers[a](this._bufferService.buffer.x,b,this._cell):this._renderBlurCursor(this._bufferService.buffer.x,b,this._cell),this._ctx.restore(),this._state.x=this._bufferService.buffer.x,this._state.y=b,this._state.isFocused=!1,this._state.style=a,void(this._state.width= this._cell.getWidth());if(!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isCursorVisible){if(this._state){if(this._state.x===this._bufferService.buffer.x&&this._state.y===b&&this._state.isFocused===this._coreBrowserService.isFocused&&this._state.style===this._optionsService.options.cursorStyle&&this._state.width===this._cell.getWidth())return;this._clearCursor()}this._ctx.save();this._cursorRenderers[this._optionsService.options.cursorStyle||"block"](this._bufferService.buffer.x,b, this._cell);this._ctx.restore();this._state.x=this._bufferService.buffer.x;this._state.y=b;this._state.isFocused=!1;this._state.style=this._optionsService.options.cursorStyle;this._state.width=this._cell.getWidth()}else this._clearCursor()}}else this._clearCursor()},b.prototype._clearCursor=function(){this._state&&(this._clearCells(this._state.x,this._state.y,this._state.width,1),this._state={x:0,y:0,isFocused:!1,style:"",width:0})},b.prototype._renderBarCursor=function(a,b){this._ctx.save();this._ctx.fillStyle= this._colors.cursor.css;this._fillLeftLineAtCell(a,b);this._ctx.restore()},b.prototype._renderBlockCursor=function(a,b,c){this._ctx.save();this._ctx.fillStyle=this._colors.cursor.css;this._fillCells(a,b,c.getWidth(),1);this._ctx.fillStyle=this._colors.cursorAccent.css;this._fillCharTrueColor(c,a,b);this._ctx.restore()},b.prototype._renderUnderlineCursor=function(a,b){this._ctx.save();this._ctx.fillStyle=this._colors.cursor.css;this._fillBottomLineAtCells(a,b);this._ctx.restore()},b.prototype._renderBlurCursor= function(a,b,c){this._ctx.save();this._ctx.strokeStyle=this._colors.cursor.css;this._strokeRectAtCell(a,b,c.getWidth(),1);this._ctx.restore()},b}(a.BaseRenderLayer);b.CursorRenderLayer=d;var h=function(){function a(a,b){this._renderCallback=b;this.isCursorVisible=!0;a&&this._restartInterval()}return Object.defineProperty(a.prototype,"isPaused",{get:function(){return!(this._blinkStartTimeout||this._blinkInterval)},enumerable:!0,configurable:!0}),a.prototype.dispose=function(){this._blinkInterval&& (window.clearInterval(this._blinkInterval),this._blinkInterval=void 0);this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0);this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},a.prototype.restartBlinkAnimation=function(){var a=this;this.isPaused||(this._animationTimeRestarted=Date.now(),this.isCursorVisible=!0,this._animationFrame||(this._animationFrame=window.requestAnimationFrame(function(){a._renderCallback(); a._animationFrame=void 0})))},a.prototype._restartInterval=function(a){var b=this;void 0===a&&(a=600);this._blinkInterval&&window.clearInterval(this._blinkInterval);this._blinkStartTimeout=setTimeout(function(){if(b._animationTimeRestarted){var a=600-(Date.now()-b._animationTimeRestarted);if(b._animationTimeRestarted=void 0,0=a.lines.length)){var c=Math.ceil(2E3/this._bufferService.cols);for(a=this._bufferService.buffer.iterator(!1,b,a.ydisp+Math.min(this._rowsToLinkify.end,this._bufferService.rows)+1,c,c);a.hasNext();)for(b=a.next(),c=0;ch)return"break";var l=q._bufferService.buffer.stringIndexToBufferIndex(a,h);if(0>l[0])return"break";var k=q._bufferService.buffer.lines.get(l[0]);if(!k)return"break";var r=(k=k.getFg(l[1]))?k>>9&511:void 0;c.validationCallback?c.validationCallback(d,function(a){g._rowsTimeoutId||a&&g._addLink(l[1],l[0]-g._bufferService.buffer.ydisp,d,c,r)}):q._addLink(l[1],l[0]-q._bufferService.buffer.ydisp,d,c,r)}for(var e,g=this,f=new RegExp(c.regex.source, (c.regex.flags||"")+"g"),h=-1,q=this;null!==(e=f.exec(b))&&"break"!==d(););},a.prototype._addLink=function(a,b,d,e,f){var l=this;if(this._mouseZoneManager&&this._element){var h=g.getStringCellWidth(d),q=a%this._bufferService.cols,k=b+Math.floor(a/this._bufferService.cols),r=(q+h)%this._bufferService.cols,t=k+Math.floor((q+h)/this._bufferService.cols);0===r&&(r=this._bufferService.cols,t--);this._mouseZoneManager.add(new c(q+1,k+1,r+1,t+1,function(a){if(e.handler)return e.handler(a,d);window.open(d, "_blank")},function(){l._onLinkHover.fire(l._createLinkHoverEvent(q,k,r,t,f));l._element.classList.add("xterm-cursor-pointer")},function(a){l._onLinkTooltip.fire(l._createLinkHoverEvent(q,k,r,t,f));e.hoverTooltipCallback&&e.hoverTooltipCallback(a,d,{start:{x:q,y:k},end:{x:r,y:t}})},function(){l._onLinkLeave.fire(l._createLinkHoverEvent(q,k,r,t,f));l._element.classList.remove("xterm-cursor-pointer");e.hoverLeaveCallback&&e.hoverLeaveCallback()},function(a){return!e.willLinkActivate||e.willLinkActivate(a, d)}))}},a.prototype._createLinkHoverEvent=function(a,b,c,d,e){return{x1:a,y1:b,x2:c,y2:d,cols:this._bufferService.cols,fg:e}},a._timeBeforeLatency=200,a}();b.Linkifier=a;b.MouseZone=c},function(a,b,d){var c=this&&this.__decorate||function(a,b,c,d){var e,g=arguments.length,f=3>g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var l=a.length-1;0<=l;l--)(e=a[l])&&(f=(3>g?e(f):3b[1]&&a[1]=b[0]&&a[0]=b[0]},a.prototype.selectWordAtCursor=function(a){(a=this._getMouseBufferCoords(a))&&(this._selectWordAt(a,!1),this._model.selectionEnd=void 0,this.refresh(!0))},a.prototype.selectAll=function(){this._model.isSelectAllActive=!0;this.refresh();this._onSelectionChange.fire()},a.prototype.selectLines=function(a,b){this._model.clearSelection();a=Math.max(a,0);b=Math.min(b,this._bufferService.buffer.lines.length-1);this._model.selectionStart=[0,a];this._model.selectionEnd= [this._bufferService.cols,b];this.refresh();this._onSelectionChange.fire()},a.prototype._onTrim=function(a){this._model.onTrim(a)&&this.refresh()},a.prototype._getMouseBufferCoords=function(a){if(a=this._mouseService.getCoords(a,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0))return a[0]--,a[1]--,a[1]+=this._bufferService.buffer.ydisp,a},a.prototype._getMouseEventScrollAmount=function(a){a=v.getCoordsRelativeToElement(a,this._screenElement)[1];var b=this._bufferService.rows* Math.ceil(this._charSizeService.height*this._optionsService.options.lineHeight);return 0<=a&&a<=b?0:(a>b&&(a-=b),a=Math.min(Math.max(a,-50),50),(a/=50)/Math.abs(a)+Math.round(14*a))},a.prototype.shouldForceSelection=function(a){return f.isMac?a.altKey&&this._optionsService.options.macOptionClickForcesSelection:a.shiftKey},a.prototype.onMouseDown=function(a){if(this._mouseDownTimeStamp=a.timeStamp,(2!==a.button||!this.hasSelection)&&0===a.button){if(!this._enabled){if(!this.shouldForceSelection(a))return; a.stopPropagation()}a.preventDefault();this._dragScrollAmount=0;this._enabled&&a.shiftKey?this._onIncrementalClick(a):1===a.detail?this._onSingleClick(a):2===a.detail?this._onDoubleClick(a):3===a.detail&&this._onTripleClick(a);this._addMouseDownListeners();this.refresh(!0)}},a.prototype._addMouseDownListeners=function(){var a=this;this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup", this._mouseUpListener));this._dragScrollIntervalTimer=window.setInterval(function(){return a._dragScroll()},50)},a.prototype._removeMouseDownListeners=function(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener));clearInterval(this._dragScrollIntervalTimer);this._dragScrollIntervalTimer=void 0},a.prototype._onIncrementalClick=function(a){this._model.selectionStart&& (this._model.selectionEnd=this._getMouseBufferCoords(a))},a.prototype._onSingleClick=function(a){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(a)?3:0,this._model.selectionStart=this._getMouseBufferCoords(a),this._model.selectionStart)this._model.selectionEnd=void 0,(a=this._bufferService.buffer.lines.get(this._model.selectionStart[1]))&&a.length!==this._model.selectionStart[0]&&0===a.hasWidth(this._model.selectionStart[0])&& this._model.selectionStart[0]++},a.prototype._onDoubleClick=function(a){(a=this._getMouseBufferCoords(a))&&(this._activeSelectionMode=1,this._selectWordAt(a,!0))},a.prototype._onTripleClick=function(a){(a=this._getMouseBufferCoords(a))&&(this._activeSelectionMode=2,this._selectLineAt(a[1]))},a.prototype.shouldColumnSelect=function(a){return a.altKey&&!(f.isMac&&this._optionsService.options.macOptionClickForcesSelection)},a.prototype._onMouseMove=function(a){if(a.stopImmediatePropagation(),this._model.selectionStart){var b= this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;(this._model.selectionEnd=this._getMouseBufferCoords(a),this._model.selectionEnd)?(2===this._activeSelectionMode?this._model.selectionEnd[1]this._dragScrollAmount&&(this._model.selectionEnd[0]=0)),a=this._bufferService.buffer,this._model.selectionEnd[1]=this.selectionText.length&&500>b)?a.altKey&&this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp&&(a=this._mouseService.getCoords(a,this._element,this._bufferService.cols,this._bufferService.rows,!1))&&void 0!==a[0]&&void 0!==a[1]&&(a=l.moveToCellSequence(a[0]-1,a[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys),this._coreService.triggerDataEvent(a,!0)):this.hasSelection&&this._onSelectionChange.fire()}, a.prototype._onBufferActivate=function(a){var b=this;this.clearSelection();this._trimListener.dispose();this._trimListener=a.activeBuffer.lines.onTrim(function(a){return b._onTrim(a)})},a.prototype._convertViewportColToCharacterIndex=function(a,b){for(var c=b[0],d=0;b[0]>=d;d++){var e=a.loadCell(d,this._workCell).getChars().length;0===this._workCell.getWidth()?c--:1=this._bufferService.cols)){var e=this._bufferService.buffer,g=e.lines.get(a[1]);if(g){var f=e.translateBufferLineToString(a[1],!1),l=this._convertViewportColToCharacterIndex(g,a),h=l,q=a[0]-l,k=0,r=0,n=0,t=0;if(" "===f.charAt(l)){for(;0b.start;)b.start+=this._bufferService.cols,a[1]--;this._model.selectionStart=[b.start,a[1]];this._model.selectionStartLength=b.length}},a.prototype._selectToWordAt=function(a){var b=this._getWordAt(a,!0);if(b){for(a=a[1];0>b.start;)b.start+=this._bufferService.cols,a--;if(!this._model.areSelectionValuesReversed())for(;b.start+b.length> this._bufferService.cols;)b.length-=this._bufferService.cols,a++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?b.start:b.start+b.length,a]}},a.prototype._isCharWordSeparator=function(a){return 0!==a.getWidth()&&0<=this._optionsService.options.wordSeparator.indexOf(a.getChars())},a.prototype._selectLineAt=function(a){a=this._bufferService.buffer.getWrappedRangeForLine(a);this._model.selectionStart=[0,a.first];this._model.selectionEnd=[this._bufferService.cols,a.last];this._model.selectionStartLength= 0},a=c([g(3,q.ICharSizeService),g(4,t.IBufferService),g(5,t.ICoreService),g(6,q.IMouseService),g(7,t.IOptionsService)],a)}();b.SelectionService=a},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});a=function(){function a(a){this._bufferService=a;this.isSelectAllActive=!1;this.selectionStartLength=0}return a.prototype.clearSelection=function(){this.selectionEnd=this.selectionStart=void 0;this.isSelectAllActive=!1;this.selectionStartLength=0},Object.defineProperty(a.prototype,"finalSelectionStart", {get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"finalSelectionEnd",{get:function(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){var a=this.selectionStart[0]+this.selectionStartLength; return a>this._bufferService.cols?[a%this._bufferService.cols,this.selectionStart[1]+Math.floor(a/this._bufferService.cols)]:[a,this.selectionStart[1]]}return this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd}},enumerable:!0,configurable:!0}),a.prototype.areSelectionValuesReversed=function(){var a=this.selectionStart,b=this.selectionEnd;return!(!a||!b)&&(a[1]> b[1]||a[1]===b[1]&&a[0]>b[0])},a.prototype.onTrim=function(a){return this.selectionStart&&(this.selectionStart[1]-=a),this.selectionEnd&&(this.selectionEnd[1]-=a),this.selectionEnd&&0>this.selectionEnd[1]?(this.clearSelection(),!0):(this.selectionStart&&0>this.selectionStart[1]&&(this.selectionStart[1]=0),!1)},a}();b.SelectionModel=a},function(a,b,d){function c(a,b,c,d){var e=a-g(c,a),f=b-g(c,b);e=Math.abs(e-f);f=0;for(var l=a-g(c,a),h=b-g(c,b),q=0;qb?"A":"B")?-1:1)*q);n&&n.isWrapped&&f++}return r(e-f,k(a>b?"A":"B",d))}function g(a,b){for(var c=0,d=a.buffer.lines.get(b),e=d&&d.isWrapped;e&&0<=b&&b=d&&lg.cols-1?(l+=g.buffer.translateBufferLineToString(b,!1,a,f),f=0,a=0,b++):!e&&0>f&&(l+=g.buffer.translateBufferLineToString(b, !1,0,a+1),a=f=g.cols-1,b--);return l+g.buffer.translateBufferLineToString(b,!1,a,f)}function k(a,b){return q.C0.ESC+(b?"O":"[")+a}function r(a,b){a=Math.floor(a);for(var c="",d=0;dg?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var l=a.length-1;0<=l;l--)(e=a[l])&&(f=(3>g?e(f):3a&&d.y1<=b+1||d.y2>a&&d.y2<=b+1||d.y1b+1)&&(this._currentZone&&this._currentZone===d&&(this._currentZone.leaveCallback(),this._currentZone=void 0),this._zones.splice(c--,1))}0===this._zones.length&&this._deactivate()}}, b.prototype._activate=function(){this._areZonesActive||(this._areZonesActive=!0,this._element.addEventListener("mousemove",this._mouseMoveListener),this._element.addEventListener("mouseleave",this._mouseLeaveListener),this._element.addEventListener("click",this._clickListener))},b.prototype._deactivate=function(){this._areZonesActive&&(this._areZonesActive=!1,this._element.removeEventListener("mousemove",this._mouseMoveListener),this._element.removeEventListener("mouseleave",this._mouseLeaveListener), this._element.removeEventListener("click",this._clickListener))},b.prototype._onMouseMove=function(a){this._lastHoverCoords[0]===a.pageX&&this._lastHoverCoords[1]===a.pageY||(this._onHover(a),this._lastHoverCoords=[a.pageX,a.pageY])},b.prototype._onHover=function(a){var b=this,c=this._findZoneEventAt(a);c!==this._currentZone&&(this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout)),c&&(this._currentZone=c,c.hoverCallback&& c.hoverCallback(a),this._tooltipTimeout=setTimeout(function(){return b._onTooltip(a)},500)))},b.prototype._onTooltip=function(a){this._tooltipTimeout=void 0;var b=this._findZoneEventAt(a);b&&b.tooltipCallback&&b.tooltipCallback(a)},b.prototype._onMouseDown=function(a){var b;(this._initialSelectionLength=this._getSelectionLength(),this._areZonesActive)&&(null===(b=this._findZoneEventAt(a))||void 0===b?0:b.willLinkActivate(a))&&(a.preventDefault(),a.stopImmediatePropagation())},b.prototype._onMouseLeave= function(){this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout))},b.prototype._onClick=function(a){var b=this._findZoneEventAt(a),c=this._getSelectionLength();b&&c===this._initialSelectionLength&&(b.clickCallback(a),a.preventDefault(),a.stopImmediatePropagation())},b.prototype._getSelectionLength=function(){var a=this._selectionService.selectionText;return a?a.length:0},b.prototype._findZoneEventAt=function(a){var b= this._mouseService.getCoords(a,this._screenElement,this._bufferService.cols,this._bufferService.rows);if(b){a=b[0];b=b[1];for(var c=0;c=d.x1&&a=d.x1||b===d.y2&&ad.y1&&ba;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener);this._refreshRowsDimensions()},b.prototype._createAccessibilityTreeNode=function(){var a=document.createElement("div");return a.setAttribute("role","listitem"),a.tabIndex=-1,this._refreshRowDimensions(a),a},b.prototype._onTab=function(a){for(var b=0;bthis._liveRegionLineCount&&(0g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3b;)this._rowContainer.removeChild(this._rowElements.pop())},b.prototype.onResize=function(a,b){this._refreshRowElements(a,b);this._updateDimensions()},b.prototype.onCharSizeChanged=function(){this._updateDimensions()},b.prototype.onBlur=function(){this._rowContainer.classList.remove("xterm-focus")}, b.prototype.onFocus=function(){this._rowContainer.classList.add("xterm-focus")},b.prototype.onSelectionChanged=function(a,b,c){for(;this._selectionContainer.children.length;)this._selectionContainer.removeChild(this._selectionContainer.children[0]);if(a&&b){var d=a[1]-this._bufferService.buffer.ydisp,e=b[1]-this._bufferService.buffer.ydisp,g=Math.max(d,0),f=Math.min(e,this._bufferService.rows-1);if(!(g>=this._bufferService.rows||0>f)){var h=document.createDocumentFragment();c?h.appendChild(this._createSelectionElement(g, a[0],b[0],f-g+1)):(h.appendChild(this._createSelectionElement(g,d===g?a[0]:0,g===f?b[0]:this._bufferService.cols)),(h.appendChild(this._createSelectionElement(g+1,0,this._bufferService.cols,f-g-1)),g!==f)&&h.appendChild(this._createSelectionElement(f,0,e===f?b[0]:this._bufferService.cols)));this._selectionContainer.appendChild(h)}}},b.prototype._createSelectionElement=function(a,b,c,d){void 0===d&&(d=1);var e=document.createElement("div");return e.style.height=d*this.dimensions.actualCellHeight+"px", e.style.top=a*this.dimensions.actualCellHeight+"px",e.style.left=b*this.dimensions.actualCellWidth+"px",e.style.width=this.dimensions.actualCellWidth*(c-b)+"px",e},b.prototype.onCursorMove=function(){},b.prototype.onOptionsChanged=function(){this._updateDimensions();this._injectCss()},b.prototype.clear=function(){this._rowElements.forEach(function(a){return a.innerHTML=""})},b.prototype.renderRows=function(a,b){for(var c=this._bufferService.buffer.ybase+this._bufferService.buffer.y,d=this._bufferService.buffer.x, e=this._optionsService.options.cursorBlink;a<=b;a++){var g=this._rowElements[a];g.innerHTML="";var f=a+this._bufferService.buffer.ydisp,h=this._bufferService.buffer.lines.get(f);g.appendChild(this._rowFactory.createRow(h,f===c,this._optionsService.options.cursorStyle,d,e,this.dimensions.actualCellWidth,this._bufferService.cols))}},Object.defineProperty(b.prototype,"_terminalSelector",{get:function(){return".xterm-dom-renderer-owner-"+this._terminalClass},enumerable:!0,configurable:!0}),b.prototype.registerCharacterJoiner= function(){return-1},b.prototype.deregisterCharacterJoiner=function(){return!1},b.prototype._onLinkHover=function(a){this._setCellUnderline(a.x1,a.x2,a.y1,a.y2,a.cols,!0)},b.prototype._onLinkLeave=function(a){this._setCellUnderline(a.x1,a.x2,a.y1,a.y2,a.cols,!1)},b.prototype._setCellUnderline=function(a,b,c,d,e,g){for(;a!==b||c!==d;){var f=this._rowElements[c];if(!f)break;(f=f.children[a])&&(f.style.textDecoration=g?"underline":"none");++a>=e&&(a=0,c++)}},b=f([h(5,q.ICharSizeService),h(6,t.IOptionsService), h(7,t.IBufferService)],b)}(a.Disposable);b.DomRenderer=d},function(a,b,d){function c(a,b,c){for(;a.lengtht&&this._optionsService.options.drawBoldTextInBrightColors&&(t+=8);this._applyMinimumContrast(n,this._colors.background, this._colors.ansi[t])||n.classList.add("xterm-fg-"+t);break;case 50331648:v=k.rgbaToColor(t>>16&255,t>>8&255,255&t);this._applyMinimumContrast(n,this._colors.background,v)||this._addStyle(n,"color:#"+c(t.toString(16),"0",6));break;default:this._applyMinimumContrast(n,this._colors.background,this._colors.foreground)||qa&&n.classList.add("xterm-fg-"+g.INVERTED_DEFAULT_COLOR)}switch(H){case 16777216:case 33554432:n.classList.add("xterm-bg-"+C);break;case 50331648:this._addStyle(n,"background-color:#"+ c(C.toString(16),"0",6));break;default:qa&&n.classList.add("xterm-bg-"+g.INVERTED_DEFAULT_COLOR)}l.appendChild(n)}}return l},a.prototype._applyMinimumContrast=function(a,b,c){if(1===this._optionsService.options.minimumContrastRatio)return!1;var d=this._colors.contrastCache.getColor(this._workCell.bg,this._workCell.fg);return void 0===d&&(d=k.ensureContrastRatio(b,c,this._optionsService.options.minimumContrastRatio),this._colors.contrastCache.setColor(this._workCell.bg,this._workCell.fg,null!=d?d: null)),!!d&&(this._addStyle(a,"color:"+d.css),!0)},a.prototype._addStyle=function(a,b){a.setAttribute("style",""+(a.getAttribute("style")||"")+b+";")},a}();b.DomRendererRowFactory=a},function(a,b,d){Object.defineProperty(b,"__esModule",{value:!0});var c=d(12),g={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"], 220:["\\","|"],221:["]","}"],222:["'",'"']};b.evaluateKeyboardEvent=function(a,b,d,e){var f={type:0,cancel:!1,key:void 0},h=(a.shiftKey?1:0)|(a.altKey?2:0)|(a.ctrlKey?4:0)|(a.metaKey?8:0);switch(a.keyCode){case 0:"UIKeyInputUpArrow"===a.key?f.key=b?c.C0.ESC+"OA":c.C0.ESC+"[A":"UIKeyInputLeftArrow"===a.key?f.key=b?c.C0.ESC+"OD":c.C0.ESC+"[D":"UIKeyInputRightArrow"===a.key?f.key=b?c.C0.ESC+"OC":c.C0.ESC+"[C":"UIKeyInputDownArrow"===a.key&&(f.key=b?c.C0.ESC+"OB":c.C0.ESC+"[B");break;case 8:if(a.shiftKey){f.key= c.C0.BS;break}if(a.altKey){f.key=c.C0.ESC+c.C0.DEL;break}f.key=c.C0.DEL;break;case 9:if(a.shiftKey){f.key=c.C0.ESC+"[Z";break}f.key=c.C0.HT;f.cancel=!0;break;case 13:f.key=c.C0.CR;f.cancel=!0;break;case 27:f.key=c.C0.ESC;f.cancel=!0;break;case 37:if(a.metaKey)break;h?(f.key=c.C0.ESC+"[1;"+(h+1)+"D",f.key===c.C0.ESC+"[1;3D"&&(f.key=c.C0.ESC+(d?"b":"[1;5D"))):f.key=b?c.C0.ESC+"OD":c.C0.ESC+"[D";break;case 39:if(a.metaKey)break;h?(f.key=c.C0.ESC+"[1;"+(h+1)+"C",f.key===c.C0.ESC+"[1;3C"&&(f.key=c.C0.ESC+ (d?"f":"[1;5C"))):f.key=b?c.C0.ESC+"OC":c.C0.ESC+"[C";break;case 38:if(a.metaKey)break;h?(f.key=c.C0.ESC+"[1;"+(h+1)+"A",d||f.key!==c.C0.ESC+"[1;3A"||(f.key=c.C0.ESC+"[1;5A")):f.key=b?c.C0.ESC+"OA":c.C0.ESC+"[A";break;case 40:if(a.metaKey)break;h?(f.key=c.C0.ESC+"[1;"+(h+1)+"B",d||f.key!==c.C0.ESC+"[1;3B"||(f.key=c.C0.ESC+"[1;5B")):f.key=b?c.C0.ESC+"OB":c.C0.ESC+"[B";break;case 45:a.shiftKey||a.ctrlKey||(f.key=c.C0.ESC+"[2~");break;case 46:f.key=h?c.C0.ESC+"[3;"+(h+1)+"~":c.C0.ESC+"[3~";break;case 36:f.key= h?c.C0.ESC+"[1;"+(h+1)+"H":b?c.C0.ESC+"OH":c.C0.ESC+"[H";break;case 35:f.key=h?c.C0.ESC+"[1;"+(h+1)+"F":b?c.C0.ESC+"OF":c.C0.ESC+"[F";break;case 33:a.shiftKey?f.type=2:f.key=c.C0.ESC+"[5~";break;case 34:a.shiftKey?f.type=3:f.key=c.C0.ESC+"[6~";break;case 112:f.key=h?c.C0.ESC+"[1;"+(h+1)+"P":c.C0.ESC+"OP";break;case 113:f.key=h?c.C0.ESC+"[1;"+(h+1)+"Q":c.C0.ESC+"OQ";break;case 114:f.key=h?c.C0.ESC+"[1;"+(h+1)+"R":c.C0.ESC+"OR";break;case 115:f.key=h?c.C0.ESC+"[1;"+(h+1)+"S":c.C0.ESC+"OS";break;case 116:f.key= h?c.C0.ESC+"[15;"+(h+1)+"~":c.C0.ESC+"[15~";break;case 117:f.key=h?c.C0.ESC+"[17;"+(h+1)+"~":c.C0.ESC+"[17~";break;case 118:f.key=h?c.C0.ESC+"[18;"+(h+1)+"~":c.C0.ESC+"[18~";break;case 119:f.key=h?c.C0.ESC+"[19;"+(h+1)+"~":c.C0.ESC+"[19~";break;case 120:f.key=h?c.C0.ESC+"[20;"+(h+1)+"~":c.C0.ESC+"[20~";break;case 121:f.key=h?c.C0.ESC+"[21;"+(h+1)+"~":c.C0.ESC+"[21~";break;case 122:f.key=h?c.C0.ESC+"[23;"+(h+1)+"~":c.C0.ESC+"[23~";break;case 123:f.key=h?c.C0.ESC+"[24;"+(h+1)+"~":c.C0.ESC+"[24~";break; default:!a.ctrlKey||a.shiftKey||a.altKey||a.metaKey?d&&!e||!a.altKey||a.metaKey?d&&!a.altKey&&!a.ctrlKey&&a.metaKey?65===a.keyCode&&(f.type=1):a.key&&!a.ctrlKey&&!a.altKey&&!a.metaKey&&48<=a.keyCode&&1===a.key.length?f.key=a.key:a.key&&a.ctrlKey&&"_"===a.key&&(f.key=c.C0.US):(b=(b=g[a.keyCode])&&b[a.shiftKey?1:0])?f.key=c.C0.ESC+b:65<=a.keyCode&&90>=a.keyCode&&(f.key=c.C0.ESC+String.fromCharCode(a.ctrlKey?a.keyCode-64:a.keyCode+32)):65<=a.keyCode&&90>=a.keyCode?f.key=String.fromCharCode(a.keyCode- 64):32===a.keyCode?f.key=c.C0.NUL:51<=a.keyCode&&55>=a.keyCode?f.key=String.fromCharCode(a.keyCode-51+27):56===a.keyCode?f.key=c.C0.DEL:219===a.keyCode?f.key=c.C0.ESC:220===a.keyCode?f.key=c.C0.FS:221===a.keyCode&&(f.key=c.C0.GS)}return f}},function(a,b,d){Object.defineProperty(b,"__esModule",{value:!0});var c=d(3);b.handleWindowsModeLineFeed=function(a){var b,d=null===(b=a.buffer.lines.get(a.buffer.ybase+a.buffer.y-1))||void 0===b?void 0:b.get(a.cols-1);(a=a.buffer.lines.get(a.buffer.ybase+a.buffer.y))&& d&&(a.isWrapped=d[c.CHAR_DATA_CODE_INDEX]!==c.NULL_CELL_CODE&&d[c.CHAR_DATA_CODE_INDEX]!==c.WHITESPACE_CELL_CODE)}},function(a,b,d){var c,g=this&&this.__extends||(c=function(a,b){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,b)},function(a,b){function d(){this.constructor=a}c(a,b);a.prototype=null===b?Object.create(b):(d.prototype=b.prototype,new d)}),f=this&&this.__decorate||function(a, b,c,d){var e,g=arguments.length,f=3>g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3c)throw Error(a+" cannot be less than 1, value: "+c);break;case "minimumContrastRatio":c=Math.max(1,Math.min(21,Math.round(10*c)/10));case "scrollback":if(0>(c=Math.min(c,4294967295)))throw Error(a+" cannot be less than 0, value: "+c);break;case "fastScrollSensitivity":case "scrollSensitivity":if(0>=c)throw Error(a+" cannot be less than or equal to 0, value: "+c);}return c},a.prototype.getOption=function(a){if(!(a in b.DEFAULT_OPTIONS))throw Error('No option with key "'+ a+'"');return this.options[a]},a}();b.OptionsService=d},function(a,b,d){var c=this&&this.__decorate||function(a,b,c,d){var e,g=arguments.length,f=3>g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3 this._rows},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"isCursorInViewport",{get:function(){var a=this.ybase+this.y-this.ydisp;return 0<=a&&ab.MAX_BUFFER_SIZE?b.MAX_BUFFER_SIZE:a},a.prototype.fillViewportRows=function(a){if(0===this.lines.length){void 0===a&&(a=g.DEFAULT_ATTR_DATA);for(var b=this._rows;b--;)this.lines.push(this.getBlankLine(a))}}, a.prototype.clear=function(){this.x=this.y=this.ybase=this.ydisp=0;this.lines=new c.CircularList(this._getCorrectBufferLength(this._rows));this.scrollTop=0;this.scrollBottom=this._rows-1;this.setupTabStops()},a.prototype.resize=function(a,b){var c=this.getNullCell(g.DEFAULT_ATTR_DATA),d=this._getCorrectBufferLength(b);if(d>this.lines.maxLength&&(this.lines.maxLength=d),0b;f--)this.lines.length>b+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));da))for(e=0;ethis._cols?this._reflowLarger(a,b):this._reflowSmaller(a,b))},a.prototype._reflowLarger=function(a,b){var c=k.reflowLargerGetLinesToRemove(this.lines,this._cols,a,this.ybase+this.y,this.getNullCell(g.DEFAULT_ATTR_DATA));0=f&&hf+r){for(n=t.newLines.length-1;0<=n;n--)this.lines.set(h--,t.newLines[n]);h++;a.push({index:f+1,amount:t.newLines.length});r+=t.newLines.length;t=d[++l]}else this.lines.set(h, c[f--]);d=0;for(h=a.length-1;0<=h;h--)a[h].index+=d,this.lines.onInsertEmitter.fire(a[h]),d+=a[h].amount;e=Math.max(0,b+e-this.lines.maxLength);0b)return[a,g];a++}return[a,0]},a.prototype.translateBufferLineToString= function(a,b,c,d){void 0===c&&(c=0);return(a=this.lines.get(a))?a.translateToString(b,c,d):""},a.prototype.getWrappedRangeForLine=function(a){for(var b=a;0=this._cols?this._cols-1:0>a?0:a},a.prototype.nextStop=function(a){for(null==a&&(a=this.x);!this.tabs[++a]&&a=this._cols?this._cols-1:0>a?0:a},a.prototype.addMarker=function(a){var b=this,c=new r.Marker(a);return this.markers.push(c),c.register(this.lines.onTrim(function(a){c.line-=a;0>c.line&&c.dispose()})),c.register(this.lines.onInsert(function(a){c.line>=a.index&&(c.line+=a.amount)})),c.register(this.lines.onDelete(function(a){c.line>= a.index&&c.linea.index&&(c.line-=a.amount)})),c.register(c.onDispose(function(){return b._removeMarker(c)})),c},a.prototype._removeMarker=function(a){this.markers.splice(this.markers.indexOf(a),1)},a.prototype.iterator=function(a,b,c,d,e){return new t(this,a,b,c,d,e)},a}();b.Buffer=a;var t=function(){function a(a,b,c,d,e,g){void 0===c&&(c=0);void 0===d&&(d=a.lines.length);void 0===e&&(e=0);void 0===g&&(g=0);this._buffer=a;this._trimRight=b;this._startIndex=c; this._endIndex=d;this._startOverscan=e;this._endOverscan=g;0>this._startIndex&&(this._startIndex=0);this._endIndex>this._buffer.lines.length&&(this._endIndex=this._buffer.lines.length);this._current=this._startIndex}return a.prototype.hasNext=function(){return this._currentthis._endIndex+this._endOverscan&& (a.last=this._endIndex+this._endOverscan);a.first=Math.max(a.first,0);a.last=Math.min(a.last,this._buffer.lines.length);for(var b="",c=a.first;c<=a.last;++c)b+=this._buffer.translateBufferLineToString(c,this._trimRight);return this._current=a.last+1,{range:a,content:b}},a}();b.BufferStringIterator=t},function(a,b,d){Object.defineProperty(b,"__esModule",{value:!0});var c=d(1);a=function(){function a(a){this._maxLength=a;this.onDeleteEmitter=new c.EventEmitter;this.onInsertEmitter=new c.EventEmitter; this.onTrimEmitter=new c.EventEmitter;this._array=Array(this._maxLength);this._length=this._startIndex=0}return Object.defineProperty(a.prototype,"onDelete",{get:function(){return this.onDeleteEmitter.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onInsert",{get:function(){return this.onInsertEmitter.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onTrim",{get:function(){return this.onTrimEmitter.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype, "maxLength",{get:function(){return this._maxLength},set:function(a){if(this._maxLength!==a){for(var b=Array(a),c=0;cthis._length)for(var b=this._length;b=a;d--)this._array[this._getCyclicIndex(d+c.length)]=this._array[this._getCyclicIndex(d)];for(d=0;dthis._maxLength?(c=this._length+c.length-this._maxLength,this._startIndex+=c,this._length=this._maxLength,this.onTrimEmitter.fire(c)):this._length+=c.length},a.prototype.trimStart=function(a){a>this._length&&(a=this._length);this._startIndex+=a;this._length-=a;this.onTrimEmitter.fire(a)},a.prototype.shiftElements= function(a,b,c){if(!(0>=b)){if(0>a||a>=this._length)throw Error("start argument out of range");if(0>a+c)throw Error("Cannot shift elements in list beyond index 0");if(0this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(d=0;d=g&&hf||0===l[n].getTrimmedLength());n--)v++;0v&&(f-=v,q++);(v=2===a[q].getWidth(f-1))&&f--;v=v?d-1:d;e.push(v);t+= v}return e};b.getWrappedLineTrimmedLength=c},function(a,b,d){var c,g=this&&this.__extends||(c=function(a,b){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,b)},function(a,b){function d(){this.constructor=a}c(a,b);a.prototype=null===b?Object.create(b):(d.prototype=b.prototype,new d)});Object.defineProperty(b,"__esModule",{value:!0});var f=d(1);a=function(a){function b(c){var d=a.call(this)|| this;return d.line=c,d._id=b._nextId++,d.isDisposed=!1,d._onDispose=new f.EventEmitter,d}return g(b,a),Object.defineProperty(b.prototype,"id",{get:function(){return this._id},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onDispose",{get:function(){return this._onDispose.event},enumerable:!0,configurable:!0}),b.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire())},b._nextId=1,b}(d(2).Disposable);b.Marker=a},function(a,b,d){var c= this&&this.__decorate||function(a,b,c,d){var e,g=arguments.length,f=3>g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"== typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3g?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"== typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3this._end&&(this._end=a)},a.prototype.markRangeDirty=function(a,b){if(a>b){var c=a;a=b;b=c}athis._end&&(this._end=b)},a.prototype.markAllDirty=function(){this.markRangeDirty(0,this._bufferService.rows- 1)},a=c([g(0,f.IBufferService)],a)}();b.DirtyRowService=a},function(a,b,d){var c=this&&this.__spreadArrays||function(){for(var a=0,b=0,c=arguments.length;bg?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(a, b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(f=(3>g?e(f):3a.col||a.col>=this._bufferService.cols||0>a.row||a.row>=this._bufferService.rows||4===a.button&&32===a.action||3===a.button&&32!==a.action||4!==a.button&&(2===a.action||3===a.action)||(a.col++,a.row++,32===a.action&&this._lastEvent&&this._compareEvents(this._lastEvent,a))||!this._protocols[this._activeProtocol].restrict(a))return!1;var b=this._encodings[this._activeEncoding](a); return b&&("DEFAULT"===this._activeEncoding?this._coreService.triggerBinaryEvent(b):this._coreService.triggerDataEvent(b,!0)),this._lastEvent=a,!0},a.prototype.explainEvents=function(a){return{DOWN:!!(1&a),UP:!!(2&a),DRAG:!!(4&a),MOVE:!!(8&a),WHEEL:!!(16&a)}},a.prototype._compareEvents=function(a,b){return a.col===b.col&&a.row===b.row&&a.button===b.button&&a.action===b.action&&a.ctrl===b.ctrl&&a.alt===b.alt&&a.shift===b.shift},a=g([f(0,h.IBufferService),f(1,h.ICoreService)],a)}();b.CoreMouseService= a},function(a,b){Object.defineProperty(b,"__esModule",{value:!0});a=function(){function a(a){this._action=a;this._writeBuffer=[];this._callbacks=[];this._bufferOffset=this._pendingData=0}return a.prototype.writeSync=function(a){if(this._writeBuffer.length){for(var b=this._bufferOffset;bthis._bufferOffset;){var c=this._writeBuffer[this._bufferOffset],d=this._callbacks[this._bufferOffset];if(this._bufferOffset++, this._action(c),this._pendingData-=c.length,d&&d(),12<=Date.now()-b)break}this._writeBuffer.length>this._bufferOffset?(50h[0]&&c[1]=b.length&&(b=void 0);return{value:b&&b[c++],done:!b}}}} function Ba(b,a){var c="function"===typeof Symbol&&b[Symbol.iterator];if(!c)return b;b=c.call(b);var d,e=[];try{for(;(void 0===a||0b;++b)Ma[b]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[b],Na["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(b)]=b;Na[45]=62;Na[95]=63} function Ra(b,a,c){for(var d=[],e=a;e>18&63]+Ma[a>>12&63]+Ma[a>>6&63]+Ma[a&63]);return d.join("")}function Ta(b){Pa||Qa();for(var a=b.length,c=a%3,d="",e=[],g=0,f=a-c;gf?f:g+16383));1===c?(b=b[a-1],d+=Ma[b>>2],d+=Ma[b<<4&63],d+="=="):2===c&&(b=(b[a-2]<<8)+b[a-1],d+=Ma[b>>10],d+=Ma[b>>4&63],d+=Ma[b<<2&63],d+="=");e.push(d);return e.join("")} function Ua(b,a,c,d,e){var g=8*e-d-1,f=(1<>1,k=-7;e=c?e-1:0;var r=c?-1:1,q=b[a+e];e+=r;c=q&(1<<-k)-1;q>>=-k;for(k+=g;0>=-k;for(k+=d;0>1,q=23===e?Math.pow(2,-24)-Math.pow(2,-77):0;g=d?0:g-1;var t=d?1:-1,v=0>a||0===a&&0>1/a?1:0;a=Math.abs(a);for(isNaN(a)||Infinity===a?(a=isNaN(a)?1:0,d=k):(d=Math.floor(Math.log(a)/Math.LN2),1>a*(f=Math.pow(2,-d))&&(d--,f*=2),a=1<=d+r?a+q/f:a+q*Math.pow(2,1-r),2<=a*f&&(d++,f/=2),d+r>=k?(a=0,d=k):1<=d+r?(a=(a*f-1)*Math.pow(2,e),d+=r):(a=a*Math.pow(2,r-1)*Math.pow(2,e),d=0));8<=e;b[c+g]=a&255,g+=t,a/=256,e-=8);d=d<c||a.byteLengthb)throw new RangeError('"size" argument must not be negative');}A.alloc=function(b,a,c){kb(b);return b=0>=b?bb(null,b):void 0!==a?"string"===typeof c?bb(null,b).fill(a,c):bb(null,b).fill(a):bb(null,b)};function cb(b,a){kb(a);b=bb(b,0>a?0:lb(a)|0);if(!A.TYPED_ARRAY_SUPPORT)for(var c=0;ca.length?0:lb(a.length)|0;b=bb(b,c);for(var d=0;d=(A.TYPED_ARRAY_SUPPORT?2147483647:1073741823))throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+(A.TYPED_ARRAY_SUPPORT?2147483647:1073741823).toString(16)+" bytes");return b|0}A.isBuffer=nb;function mb(b){return!(null==b||!b._isBuffer)} A.compare=function(b,a){if(!mb(b)||!mb(a))throw new TypeError("Arguments must be Buffers");if(b===a)return 0;for(var c=b.length,d=a.length,e=0,g=Math.min(c,d);e>>1;case "base64":return pb(b).length; default:if(d)return ob(b).length;a=(""+a).toLowerCase();d=!0}}A.byteLength=fb; function rb(b,a,c){var d=!1;if(void 0===a||0>a)a=0;if(a>this.length)return"";if(void 0===c||c>this.length)c=this.length;if(0>=c)return"";c>>>=0;a>>>=0;if(c<=a)return"";for(b||(b="utf8");;)switch(b){case "hex":b=a;a=c;c=this.length;if(!b||0>b)b=0;if(!a||0>a||a>c)a=c;d="";for(c=b;cd?"0"+d.toString(16):d.toString(16),d=b+d;return d;case "utf8":case "utf-8":return sb(this,a,c);case "ascii":b="";for(c=Math.min(this.length,c);a"}; A.prototype.compare=function(b,a,c,d,e){if(!mb(b))throw new TypeError("Argument must be a Buffer");void 0===a&&(a=0);void 0===c&&(c=b?b.length:0);void 0===d&&(d=0);void 0===e&&(e=this.length);if(0>a||c>b.length||0>d||e>this.length)throw new RangeError("out of range index");if(d>=e&&a>=c)return 0;if(d>=e)return-1;if(a>=c)return 1;a>>>=0;c>>>=0;d>>>=0;e>>>=0;if(this===b)return 0;var g=e-d,f=c-a,h=Math.min(g,f);d=this.slice(d,e);b=b.slice(a,c);for(a=0;ac&&(c=-2147483648);c=+c;isNaN(c)&&(c=e?0:b.length-1);0>c&&(c=b.length+c);if(c>=b.length){if(e)return-1;c=b.length-1}else if(0>c)if(e)c=0;else return-1;"string"===typeof a&&(a=A.from(a,d));if(mb(a))return 0===a.length?-1:vb(b,a,c,d,e);if("number"===typeof a)return a&=255,A.TYPED_ARRAY_SUPPORT&&"function"===typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(b,a,c): Uint8Array.prototype.lastIndexOf.call(b,a,c):vb(b,[a],c,d,e);throw new TypeError("val must be string, number or Buffer");} function vb(b,a,c,d,e){function g(a,b){return 1===f?a[b]:a.readUInt16BE(b*f)}var f=1,h=b.length,k=a.length;if(void 0!==d&&(d=String(d).toLowerCase(),"ucs2"===d||"ucs-2"===d||"utf16le"===d||"utf-16le"===d)){if(2>b.length||2>a.length)return-1;f=2;h/=2;k/=2;c/=2}if(e)for(d=-1;ch&&(c=h-k);0<=c;c--){h=!0;for(d=0;de)c=e;if(0c||0>a)||a>this.length)throw new RangeError("Attempt to write outside buffer bounds");d||(d="utf8");for(e=!1;;)switch(d){case "hex":a:{a= Number(a)||0;d=this.length-a;c?(c=Number(c),c>d&&(c=d)):c=d;d=b.length;if(0!==d%2)throw new TypeError("Invalid hex string");c>d/2&&(c=d/2);for(d=0;d(e-=2));++f){var h=d.charCodeAt(f);b=h>>8;h%=256;g.push(h);g.push(b)}return wb(g,this,a,c);default:if(e)throw new TypeError("Unknown encoding: "+d);d=(""+d).toLowerCase();e=!0}};A.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}}; function sb(b,a,c){c=Math.min(b.length,c);for(var d=[];ae&&(g=e);break;case 2:var h=b[a+1];128===(h&192)&&(e=(e&31)<<6|h&63,127e||57343e&&(g= e))}null===g?(g=65533,f=1):65535>>10&1023|55296),g=56320|g&1023);d.push(g);a+=f}b=d.length;if(b<=yb)d=String.fromCharCode.apply(String,d);else{c="";for(a=0;ab?(b+=c,0>b&&(b=0)):b>c&&(b=c);0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c);ab)throw new RangeError("offset is not uint");if(b+a>c)throw new RangeError("Trying to access beyond buffer length");} A.prototype.readUIntLE=function(b,a,c){b|=0;a|=0;c||D(b,a,this.length);c=this[b];for(var d=1,e=0;++e=128*d&&(c-=Math.pow(2,8*a));return c}; A.prototype.readIntBE=function(b,a,c){b|=0;a|=0;c||D(b,a,this.length);c=a;for(var d=1,e=this[b+--c];0=128*d&&(e-=Math.pow(2,8*a));return e};A.prototype.readInt8=function(b,a){a||D(b,1,this.length);return this[b]&128?-1*(255-this[b]+1):this[b]};A.prototype.readInt16LE=function(b,a){a||D(b,2,this.length);b=this[b]|this[b+1]<<8;return b&32768?b|4294901760:b}; A.prototype.readInt16BE=function(b,a){a||D(b,2,this.length);b=this[b+1]|this[b]<<8;return b&32768?b|4294901760:b};A.prototype.readInt32LE=function(b,a){a||D(b,4,this.length);return this[b]|this[b+1]<<8|this[b+2]<<16|this[b+3]<<24};A.prototype.readInt32BE=function(b,a){a||D(b,4,this.length);return this[b]<<24|this[b+1]<<16|this[b+2]<<8|this[b+3]};A.prototype.readFloatLE=function(b,a){a||D(b,4,this.length);return Ua(this,b,!0,23,4)}; A.prototype.readFloatBE=function(b,a){a||D(b,4,this.length);return Ua(this,b,!1,23,4)};A.prototype.readDoubleLE=function(b,a){a||D(b,8,this.length);return Ua(this,b,!0,52,8)};A.prototype.readDoubleBE=function(b,a){a||D(b,8,this.length);return Ua(this,b,!1,52,8)};function zb(b,a,c,d,e,g){if(!mb(b))throw new TypeError('"buffer" argument must be a Buffer instance');if(a>e||ab.length)throw new RangeError("Index out of range");} A.prototype.writeUIntLE=function(b,a,c,d){b=+b;a|=0;c|=0;d||zb(this,b,a,c,Math.pow(2,8*c)-1,0);d=1;var e=0;for(this[a]=b&255;++ea&&(a=65535+a+1);for(var e=0,g=Math.min(b.length-c,2);e>>8*(d?e:1-e)}A.prototype.writeUInt16LE=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,2,65535,0);A.TYPED_ARRAY_SUPPORT?(this[a]=b&255,this[a+1]=b>>>8):Ab(this,b,a,!0);return a+2};A.prototype.writeUInt16BE=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,2,65535,0);A.TYPED_ARRAY_SUPPORT?(this[a]=b>>>8,this[a+1]=b&255):Ab(this,b,a,!1);return a+2}; function Bb(b,a,c,d){0>a&&(a=4294967295+a+1);for(var e=0,g=Math.min(b.length-c,4);e>>8*(d?e:3-e)&255}A.prototype.writeUInt32LE=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,4,4294967295,0);A.TYPED_ARRAY_SUPPORT?(this[a+3]=b>>>24,this[a+2]=b>>>16,this[a+1]=b>>>8,this[a]=b&255):Bb(this,b,a,!0);return a+4}; A.prototype.writeUInt32BE=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,4,4294967295,0);A.TYPED_ARRAY_SUPPORT?(this[a]=b>>>24,this[a+1]=b>>>16,this[a+2]=b>>>8,this[a+3]=b&255):Bb(this,b,a,!1);return a+4};A.prototype.writeIntLE=function(b,a,c,d){b=+b;a|=0;d||(d=Math.pow(2,8*c-1),zb(this,b,a,c,d-1,-d));d=0;var e=1,g=0;for(this[a]=b&255;++db&&0===g&&0!==this[a+d-1]&&(g=1),this[a+d]=(b/e>>0)-g&255;return a+c}; A.prototype.writeIntBE=function(b,a,c,d){b=+b;a|=0;d||(d=Math.pow(2,8*c-1),zb(this,b,a,c,d-1,-d));d=c-1;var e=1,g=0;for(this[a+d]=b&255;0<=--d&&(e*=256);)0>b&&0===g&&0!==this[a+d+1]&&(g=1),this[a+d]=(b/e>>0)-g&255;return a+c};A.prototype.writeInt8=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,1,127,-128);A.TYPED_ARRAY_SUPPORT||(b=Math.floor(b));0>b&&(b=255+b+1);this[a]=b&255;return a+1}; A.prototype.writeInt16LE=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,2,32767,-32768);A.TYPED_ARRAY_SUPPORT?(this[a]=b&255,this[a+1]=b>>>8):Ab(this,b,a,!0);return a+2};A.prototype.writeInt16BE=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,2,32767,-32768);A.TYPED_ARRAY_SUPPORT?(this[a]=b>>>8,this[a+1]=b&255):Ab(this,b,a,!1);return a+2}; A.prototype.writeInt32LE=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,4,2147483647,-2147483648);A.TYPED_ARRAY_SUPPORT?(this[a]=b&255,this[a+1]=b>>>8,this[a+2]=b>>>16,this[a+3]=b>>>24):Bb(this,b,a,!0);return a+4};A.prototype.writeInt32BE=function(b,a,c){b=+b;a|=0;c||zb(this,b,a,4,2147483647,-2147483648);0>b&&(b=4294967295+b+1);A.TYPED_ARRAY_SUPPORT?(this[a]=b>>>24,this[a+1]=b>>>16,this[a+2]=b>>>8,this[a+3]=b&255):Bb(this,b,a,!1);return a+4}; function Cb(b,a,c,d){if(c+d>b.length)throw new RangeError("Index out of range");if(0>c)throw new RangeError("Index out of range");}A.prototype.writeFloatLE=function(b,a,c){c||Cb(this,b,a,4);Va(this,b,a,!0,23,4);return a+4};A.prototype.writeFloatBE=function(b,a,c){c||Cb(this,b,a,4);Va(this,b,a,!1,23,4);return a+4};A.prototype.writeDoubleLE=function(b,a,c){c||Cb(this,b,a,8);Va(this,b,a,!0,52,8);return a+8};A.prototype.writeDoubleBE=function(b,a,c){c||Cb(this,b,a,8);Va(this,b,a,!1,52,8);return a+8}; A.prototype.copy=function(b,a,c,d){c||(c=0);d||0===d||(d=this.length);a>=b.length&&(a=b.length);a||(a=0);0a)throw new RangeError("targetStart out of bounds");if(0>c||c>=this.length)throw new RangeError("sourceStart out of bounds");if(0>d)throw new RangeError("sourceEnd out of bounds");d>this.length&&(d=this.length);b.length-ae|| !A.TYPED_ARRAY_SUPPORT)for(d=0;de&&(b=e)}if(void 0!==d&&"string"!==typeof d)throw new TypeError("encoding must be a string");if("string"===typeof d&&!A.isEncoding(d))throw new TypeError("Unknown encoding: "+d);}else"number"===typeof b&&(b&=255);if(0>a||this.length>>= 0;c=void 0===c?this.length:c>>>0;b||(b=0);if("number"===typeof b)for(d=a;dc){if(!e){if(56319c){-1<(a-=3)&&g.push(239,191,189);e=c;continue}c=(e-55296<<10|c-56320)+65536}else e&&-1<(a-=3)&&g.push(239,191,189);e=null;if(128>c){if(0>--a)break;g.push(c)}else if(2048>c){if(0>(a-=2))break;g.push(c>>6|192,c&63|128)}else if(65536>c){if(0>(a-=3))break; g.push(c>>12|224,c>>6&63|128,c&63|128)}else if(1114112>c){if(0>(a-=4))break;g.push(c>>18|240,c>>12&63|128,c>>6&63|128,c&63|128)}else throw Error("Invalid code point");}return g}function xb(b){for(var a=[],c=0;cb.length)b="";else for(;0!==b.length%4;)b+="=";Pa||Qa();var a=b.length;if(0>16&255;d[g++]=f>>8&255;d[g++]=f&255}2===c?(f=Na[b.charCodeAt(a)]<<2|Na[b.charCodeAt(a+ 1)]>>4,d[g++]=f&255):1===c&&(f=Na[b.charCodeAt(a)]<<10|Na[b.charCodeAt(a+1)]<<4|Na[b.charCodeAt(a+2)]>>2,d[g++]=f>>8&255,d[g++]=f&255);return d}function wb(b,a,c,d){for(var e=0;e=a.length||e>=b.length);++e)a[e+c]=b[e];return e}function nb(b){return null!=b&&(!!b._isBuffer||Eb(b)||"function"===typeof b.readFloatLE&&"function"===typeof b.slice&&Eb(b.slice(0,0)))}function Eb(b){return!!b.constructor&&"function"===typeof b.constructor.isBuffer&&b.constructor.isBuffer(b)} var Fb=Object.freeze({__proto__:null,INSPECT_MAX_BYTES:50,kMaxLength:ab,Buffer:A,SlowBuffer:function(b){+b!=b&&(b=0);return A.alloc(+b)},isBuffer:nb}),E=Ea(function(b,a){function c(a){for(var b=[],c=1;ca&&(c--,a+=1E9));return[c,a]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-ac)/1E3}},cc="function"===typeof Object.create?function(b,a){b.super_=a;b.prototype=Object.create(a.prototype,{constructor:{value:b,enumerable:!1,writable:!0,configurable:!0}})}:function(b,a){function c(){}b.super_=a;c.prototype=a.prototype;b.prototype=new c;b.prototype.constructor=b},fc=/%[sdj%]/g; function gc(b){if(!hc(b)){for(var a=[],c=0;c=e)return a;switch(a){case "%s":return String(d[c++]);case "%d":return Number(d[c++]);case "%j":try{return JSON.stringify(d[c++])}catch(h){return"[Circular]"}default:return a}});for(var g=d[c];cc)return Kc(a)?b.stylize(RegExp.prototype.toString.call(a),"regexp"):b.stylize("[Object]","special");b.seen.push(a);e=f? Nc(b,a,c,g,e):e.map(function(d){return Oc(b,a,c,g,d,f)});b.seen.pop();return Wc(e,d,h)}function Hc(b,a){if(lc(a))return b.stylize("undefined","undefined");if(hc(a))return a="'"+JSON.stringify(a).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'",b.stylize(a,"string");if(Xc(a))return b.stylize(""+a,"number");if(xc(a))return b.stylize(""+a,"boolean");if(null===a)return b.stylize("null","null")}function Jc(b){return"["+Error.prototype.toString.call(b)+"]"} function Nc(b,a,c,d,e){for(var g=[],f=0,h=a.length;fb.seen.indexOf(a.value)?(h=null===c?Ec(b,a.value,null):Ec(b,a.value,c-1),-1b?"0"+b.toString(10):b.toString(10)}var kd="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "); function ld(){var b=new Date,a=[jd(b.getHours()),jd(b.getMinutes()),jd(b.getSeconds())].join(":");return[b.getDate(),kd[b.getMonth()],a].join(" ")}function yc(b,a){if(!a||!jc(a))return b;for(var c=Object.keys(a),d=c.length;d--;)b[c[d]]=a[c[d]];return b} var md={inherits:cc,_extend:yc,log:function(){console.log("%s - %s",ld(),gc.apply(null,arguments))},isBuffer:function(b){return nb(b)},isPrimitive:id,isFunction:Gc,isError:Ic,isDate:Lc,isObject:jc,isRegExp:Kc,isUndefined:lc,isSymbol:function(b){return"symbol"===typeof b},isString:hc,isNumber:Xc,isNullOrUndefined:function(b){return null==b},isNull:function(b){return null===b},isBoolean:xc,isArray:Mc,inspect:ic,deprecate:kc,format:gc,debuglog:oc}; function nd(b,a){if(b===a)return 0;for(var c=b.length,d=a.length,e=0,g=Math.min(c,d);e 0 and < 65536");e("ERR_SOCKET_BAD_TYPE","Bad socket type specified. Valid types are: udp4, udp6"); e("ERR_SOCKET_CANNOT_SEND","Unable to send data");e("ERR_SOCKET_CLOSED","Socket is closed");e("ERR_SOCKET_DGRAM_NOT_RUNNING","Not running");e("ERR_STDERR_CLOSE","process.stderr cannot be closed");e("ERR_STDOUT_CLOSE","process.stdout cannot be closed");e("ERR_STREAM_WRAP","Stream has StringDecoder set or is in objectMode");e("ERR_TLS_CERT_ALTNAME_INVALID","Hostname/IP does not match certificate's altnames: %s");e("ERR_TLS_DH_PARAM_SIZE",function(a){return"DH parameter size "+a+" is less than 2048"}); e("ERR_TLS_HANDSHAKE_TIMEOUT","TLS handshake timeout");e("ERR_TLS_RENEGOTIATION_FAILED","Failed to renegotiate");e("ERR_TLS_REQUIRED_SERVER_NAME",'"servername" is required parameter for Server.addContext');e("ERR_TLS_SESSION_ATTACK","TSL session renegotiation attack detected");e("ERR_TRANSFORM_ALREADY_TRANSFORMING","Calling transform done when still transforming");e("ERR_TRANSFORM_WITH_LENGTH_0","Calling transform done when writableState.length != 0");e("ERR_UNKNOWN_ENCODING","Unknown encoding: %s"); e("ERR_UNKNOWN_SIGNAL","Unknown signal: %s");e("ERR_UNKNOWN_STDIN_TYPE","Unknown stdin file type");e("ERR_UNKNOWN_STREAM_TYPE","Unknown stream file type");e("ERR_V8BREAKITERATOR","Full ICU data not installed. See https://github.com/nodejs/node/wiki/Intl")});Da(Ud); var Vd=Ea(function(b,a){Object.defineProperty(a,"__esModule",{value:!0});a.ENCODING_UTF8="utf8";a.assertEncoding=function(a){if(a&&!E.Buffer.isEncoding(a))throw new Ud.TypeError("ERR_INVALID_OPT_VALUE_ENCODING",a);};a.strToEncoding=function(b,d){return d&&d!==a.ENCODING_UTF8?"buffer"===d?new E.Buffer(b):(new E.Buffer(b)).toString(d):b}});Da(Vd); var Wd=Ea(function(b,a){Object.defineProperty(a,"__esModule",{value:!0});var c=z.constants.S_IFMT,d=z.constants.S_IFDIR,e=z.constants.S_IFREG,g=z.constants.S_IFBLK,f=z.constants.S_IFCHR,h=z.constants.S_IFLNK,k=z.constants.S_IFIFO,r=z.constants.S_IFSOCK;b=function(){function a(){this.name="";this.mode=0}a.build=function(b,c){var d=new a,e=b.getNode().mode;d.name=Vd.strToEncoding(b.getName(),c);d.mode=e;return d};a.prototype._checkModeProperty=function(a){return(this.mode&c)===a};a.prototype.isDirectory= function(){return this._checkModeProperty(d)};a.prototype.isFile=function(){return this._checkModeProperty(e)};a.prototype.isBlockDevice=function(){return this._checkModeProperty(g)};a.prototype.isCharacterDevice=function(){return this._checkModeProperty(f)};a.prototype.isSymbolicLink=function(){return this._checkModeProperty(h)};a.prototype.isFIFO=function(){return this._checkModeProperty(k)};a.prototype.isSocket=function(){return this._checkModeProperty(r)};return a}();a.Dirent=b;a.default=b}); Da(Wd);function Xd(b,a){for(var c=0,d=b.length-1;0<=d;d--){var e=b[d];"."===e?b.splice(d,1):".."===e?(b.splice(d,1),c++):c&&(b.splice(d,1),c--)}if(a)for(;c--;c)b.unshift("..");return b}var Yd=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; function Zd(){for(var b="",a=!1,c=arguments.length-1;-1<=c&&!a;c--){var d=0<=c?arguments[c]:"/";if("string"!==typeof d)throw new TypeError("Arguments to path.resolve must be strings");d&&(b=d+"/"+b,a="/"===d.charAt(0))}b=Xd($d(b.split("/"),function(a){return!!a}),!a).join("/");return(a?"/":"")+b||"."}function ae(b){var a=be(b),c="/"===ce(b,-1);(b=Xd($d(b.split("/"),function(a){return!!a}),!a).join("/"))||a||(b=".");b&&c&&(b+="/");return(a?"/":"")+b}function be(b){return"/"===b.charAt(0)} function de(b,a){function c(a){for(var b=0;bc?[]:a.slice(b,c-b+1)}b=Zd(b).substr(1);a=Zd(a).substr(1);b=c(b.split("/"));a=c(a.split("/"));for(var d=Math.min(b.length,a.length),e=d,g=0;ga&&(a=b.length+a);return b.substr(a,c)},fe=Ea(function(b,a){Object.defineProperty(a,"__esModule",{value:!0});b="function"===typeof setImmediate?setImmediate.bind(x):setTimeout.bind(x);a.default=b});Da(fe); var ge=Ea(function(b,a){function c(){var a=bc||{};a.getuid||(a.getuid=function(){return 0});a.getgid||(a.getgid=function(){return 0});a.cwd||(a.cwd=function(){return"/"});a.nextTick||(a.nextTick=fe.default);a.emitWarning||(a.emitWarning=function(a,b){console.warn(""+b+(b?": ":"")+a)});a.env||(a.env={});return a}Object.defineProperty(a,"__esModule",{value:!0});a.createProcess=c;a.default=c()});Da(ge);function he(){}he.prototype=Object.create(null);function L(){L.init.call(this)}L.EventEmitter=L; L.usingDomains=!1;L.prototype.domain=void 0;L.prototype._events=void 0;L.prototype._maxListeners=void 0;L.defaultMaxListeners=10;L.init=function(){this.domain=null;this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new he,this._eventsCount=0);this._maxListeners=this._maxListeners||void 0};L.prototype.setMaxListeners=function(b){if("number"!==typeof b||0>b||isNaN(b))throw new TypeError('"n" argument must be a positive number');this._maxListeners=b;return this}; L.prototype.getMaxListeners=function(){return void 0===this._maxListeners?L.defaultMaxListeners:this._maxListeners}; L.prototype.emit=function(b){var a,c,d="error"===b;if(a=this._events)d=d&&null==a.error;else if(!d)return!1;var e=this.domain;if(d){a=arguments[1];if(e)a||(a=Error('Uncaught, unspecified "error" event')),a.domainEmitter=this,a.domain=e,a.domainThrown=!1,e.emit("error",a);else{if(a instanceof Error)throw a;e=Error('Uncaught, unspecified "error" event. ('+a+")");e.context=a;throw e;}return!1}e=a[b];if(!e)return!1;a="function"===typeof e;var g=arguments.length;switch(g){case 1:if(a)e.call(this);else for(a= e.length,e=ie(e,a),d=0;dc&&(g.warned=!0,c=Error("Possible EventEmitter memory leak detected. "+g.length+ " "+a+" listeners added. Use emitter.setMaxListeners() to increase limit"),c.name="MaxListenersExceededWarning",c.emitter=b,c.type=a,c.count=g.length,"function"===typeof console.warn?console.warn(c):console.log(c))):(e[a]=c,++b._eventsCount);return b}L.prototype.addListener=function(b,a){return je(this,b,a,!1)};L.prototype.on=L.prototype.addListener;L.prototype.prependListener=function(b,a){return je(this,b,a,!0)}; function ke(b,a,c){function d(){b.removeListener(a,d);e||(e=!0,c.apply(b,arguments))}var e=!1;d.listener=c;return d}L.prototype.once=function(b,a){if("function"!==typeof a)throw new TypeError('"listener" argument must be a function');this.on(b,ke(this,b,a));return this};L.prototype.prependOnceListener=function(b,a){if("function"!==typeof a)throw new TypeError('"listener" argument must be a function');this.prependListener(b,ke(this,b,a));return this}; L.prototype.removeListener=function(b,a){var c;if("function"!==typeof a)throw new TypeError('"listener" argument must be a function');var d=this._events;if(!d)return this;var e=d[b];if(!e)return this;if(e===a||e.listener&&e.listener===a)0===--this._eventsCount?this._events=new he:(delete d[b],d.removeListener&&this.emit("removeListener",b,e.listener||a));else if("function"!==typeof e){var g=-1;for(c=e.length;0 g)return this;if(1===e.length){e[0]=void 0;if(0===--this._eventsCount)return this._events=new he,this;delete d[b]}else{c=g+1;for(var h=e.length;cthis.buf.length){var e=E.bufferAllocUnsafe(d+c);this.buf.copy(e,0,0,this.buf.length);this.buf=e}a.copy(this.buf,d,b,b+c);this.touch();return c};b.prototype.read= function(a,b,c,d){void 0===b&&(b=0);void 0===c&&(c=a.byteLength);void 0===d&&(d=0);this.buf||(this.buf=E.bufferAllocUnsafe(0));c>a.byteLength&&(c=a.byteLength);c+d>this.buf.length&&(c=this.buf.length-d);this.buf.copy(a,b,d,d+c);return c};b.prototype.truncate=function(a){void 0===a&&(a=0);if(a)if(this.buf||(this.buf=E.bufferAllocUnsafe(0)),a<=this.buf.length)this.buf=this.buf.slice(0,a);else{var b=E.bufferAllocUnsafe(0);this.buf.copy(b);b.fill(0,a)}else this.buf=E.bufferAllocUnsafe(0);this.touch()}; b.prototype.chmod=function(a){this.perm=a;this.mode=this.mode&-512|a;this.touch()};b.prototype.chown=function(a,b){this.uid=a;this.gid=b;this.touch()};b.prototype.touch=function(){this.mtime=new Date;this.emit("change",this)};b.prototype.canRead=function(a,b){void 0===a&&(a=ge.default.getuid());void 0===b&&(b=ge.default.getgid());return this.perm&4||b===this.gid&&this.perm&32||a===this.uid&&this.perm&256?!0:!1};b.prototype.canWrite=function(a,b){void 0===a&&(a=ge.default.getuid());void 0===b&&(b= ge.default.getgid());return this.perm&2||b===this.gid&&this.perm&16||a===this.uid&&this.perm&128?!0:!1};b.prototype.del=function(){this.emit("delete",this)};b.prototype.toJSON=function(){return{ino:this.ino,uid:this.uid,gid:this.gid,atime:this.atime.getTime(),mtime:this.mtime.getTime(),ctime:this.ctime.getTime(),perm:this.perm,mode:this.mode,nlink:this.nlink,symlink:this.symlink,data:this.getString()}};return b}(L.EventEmitter);a.Node=b;b=function(b){function d(a,c,d){var e=b.call(this)||this;e.children= {};e.steps=[];e.ino=0;e.length=0;e.vol=a;e.parent=c;e.steps=c?c.steps.concat([d]):[d];return e}c(d,b);d.prototype.setNode=function(a){this.node=a;this.ino=a.ino};d.prototype.getNode=function(){return this.node};d.prototype.createChild=function(a,b){void 0===b&&(b=this.vol.createNode());var c=new d(this.vol,this,a);c.setNode(b);b.isDirectory();this.setChild(a,c);return c};d.prototype.setChild=function(a,b){void 0===b&&(b=new d(this.vol,this,a));this.children[a]=b;b.parent=this;this.length++;this.emit("child:add", b,this);return b};d.prototype.deleteChild=function(a){delete this.children[a.getName()];this.length--;this.emit("child:delete",a,this)};d.prototype.getChild=function(a){if(Object.hasOwnProperty.call(this.children,a))return this.children[a]};d.prototype.getPath=function(){return this.steps.join(a.SEP)};d.prototype.getName=function(){return this.steps[this.steps.length-1]};d.prototype.walk=function(a,b,c){void 0===b&&(b=a.length);void 0===c&&(c=0);if(c>=a.length||c>=b)return this;var d=this.getChild(a[c]); return d?d.walk(a,b,c+1):null};d.prototype.toJSON=function(){return{steps:this.steps,ino:this.ino,children:Object.keys(this.children)}};return d}(L.EventEmitter);a.Link=b;b=function(){function a(a,b,c,d){this.position=0;this.link=a;this.node=b;this.flags=c;this.fd=d}a.prototype.getString=function(){return this.node.getString()};a.prototype.setString=function(a){this.node.setString(a)};a.prototype.getBuffer=function(){return this.node.getBuffer()};a.prototype.setBuffer=function(a){this.node.setBuffer(a)}; a.prototype.getSize=function(){return this.node.getSize()};a.prototype.truncate=function(a){this.node.truncate(a)};a.prototype.seekTo=function(a){this.position=a};a.prototype.stats=function(){return Ka.default.build(this.node)};a.prototype.write=function(a,b,c,d){void 0===b&&(b=0);void 0===c&&(c=a.length);"number"!==typeof d&&(d=this.position);this.flags&h&&(d=this.getSize());a=this.node.write(a,b,c,d);this.position=d+a;return a};a.prototype.read=function(a,b,c,d){void 0===b&&(b=0);void 0===c&&(c= a.byteLength);"number"!==typeof d&&(d=this.position);a=this.node.read(a,b,c,d);this.position=d+a;return a};a.prototype.chmod=function(a){this.node.chmod(a)};a.prototype.chown=function(a,b){this.node.chown(a,b)};return a}();a.File=b});Da(me);var pe=me.Node,qe=Ea(function(b,a){Object.defineProperty(a,"__esModule",{value:!0});a.default=function(a,b,e){var c=setTimeout.apply(null,arguments);c&&"object"===typeof c&&"function"===typeof c.unref&&c.unref();return c}});Da(qe); function re(){this.tail=this.head=null;this.length=0}re.prototype.push=function(b){b={data:b,next:null};0>>0);for(var a=this.head,c=0;a;)a.data.copy(b,c),c+=a.data.length,a=a.next;return b}; var se=A.isEncoding||function(b){switch(b&&b.toLowerCase()){case "hex":case "utf8":case "utf-8":case "ascii":case "binary":case "base64":case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":case "raw":return!0;default:return!1}}; function te(b){this.encoding=(b||"utf8").toLowerCase().replace(/[-_]/,"");if(b&&!se(b))throw Error("Unknown encoding: "+b);switch(this.encoding){case "utf8":this.surrogateSize=3;break;case "ucs2":case "utf16le":this.surrogateSize=2;this.detectIncompleteChar=ue;break;case "base64":this.surrogateSize=3;this.detectIncompleteChar=Ee;break;default:this.write=Fe;return}this.charBuffer=new A(6);this.charLength=this.charReceived=0} te.prototype.write=function(b){for(var a="";this.charLength;){a=b.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:b.length;b.copy(this.charBuffer,this.charReceived,0,a);this.charReceived+=a;if(this.charReceived=c)this.charLength+=this.surrogateSize,a="";else{this.charReceived=this.charLength=0;if(0===b.length)return a; break}}this.detectIncompleteChar(b);var d=b.length;this.charLength&&(b.copy(this.charBuffer,0,b.length-this.charReceived,d),d-=this.charReceived);a+=b.toString(this.encoding,0,d);d=a.length-1;c=a.charCodeAt(d);return 55296<=c&&56319>=c?(c=this.surrogateSize,this.charLength+=c,this.charReceived+=c,this.charBuffer.copy(this.charBuffer,c,0,c),b.copy(this.charBuffer,0,0,c),a.substring(0,d)):a}; te.prototype.detectIncompleteChar=function(b){for(var a=3<=b.length?3:b.length;0>5){this.charLength=2;break}if(2>=a&&14==c>>4){this.charLength=3;break}if(3>=a&&30==c>>3){this.charLength=4;break}}this.charReceived=a};te.prototype.end=function(b){var a="";b&&b.length&&(a=this.write(b));this.charReceived&&(b=this.encoding,a+=this.charBuffer.slice(0,this.charReceived).toString(b));return a};function Fe(b){return b.toString(this.encoding)} function ue(b){this.charLength=(this.charReceived=b.length%2)?2:0}function Ee(b){this.charLength=(this.charReceived=b.length%3)?3:0}N.ReadableState=Ge;var Q=oc("stream");cc(N,L);function He(b,a,c){if("function"===typeof b.prependListener)return b.prependListener(a,c);if(b._events&&b._events[a])Array.isArray(b._events[a])?b._events[a].unshift(c):b._events[a]=[c,b._events[a]];else b.on(a,c)} function Ge(b,a){b=b||{};this.objectMode=!!b.objectMode;a instanceof Ie&&(this.objectMode=this.objectMode||!!b.readableObjectMode);a=b.highWaterMark;var c=this.objectMode?16:16384;this.highWaterMark=a||0===a?a:c;this.highWaterMark=~~this.highWaterMark;this.buffer=new re;this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=null;this.reading=this.endEmitted=this.ended=!1;this.sync=!0;this.resumeScheduled=this.readableListening=this.emittedReadable=this.needReadable=!1;this.defaultEncoding=b.defaultEncoding|| "utf8";this.ranOut=!1;this.awaitDrain=0;this.readingMore=!1;this.encoding=this.decoder=null;b.encoding&&(this.decoder=new te(b.encoding),this.encoding=b.encoding)}function N(b){if(!(this instanceof N))return new N(b);this._readableState=new Ge(b,this);this.readable=!0;b&&"function"===typeof b.read&&(this._read=b.read);L.call(this)} N.prototype.push=function(b,a){var c=this._readableState;c.objectMode||"string"!==typeof b||(a=a||c.defaultEncoding,a!==c.encoding&&(b=A.from(b,a),a=""));return Je(this,c,b,a,!1)};N.prototype.unshift=function(b){return Je(this,this._readableState,b,"",!0)};N.prototype.isPaused=function(){return!1===this._readableState.flowing}; function Je(b,a,c,d,e){var g=c,f=null;nb(g)||"string"===typeof g||null===g||void 0===g||a.objectMode||(f=new TypeError("Invalid non-string/buffer chunk"));if(g=f)b.emit("error",g);else if(null===c)a.reading=!1,a.ended||(a.decoder&&(c=a.decoder.end())&&c.length&&(a.buffer.push(c),a.length+=a.objectMode?1:c.length),a.ended=!0,Ke(b));else if(a.objectMode||c&&0=b||0===a.length&&a.ended)return 0;if(a.objectMode)return 1;if(b!==b)return a.flowing&&a.length?a.buffer.head.data.length:a.length;if(b>a.highWaterMark){var c=b;8388608<=c?c=8388608:(c--,c|=c>>>1,c|=c>>>2,c|=c>>>4,c|=c>>>8,c|=c>>>16,c++);a.highWaterMark=c}return b<=a.length?b:a.ended?a.length:(a.needReadable=!0,0)} N.prototype.read=function(b){Q("read",b);b=parseInt(b,10);var a=this._readableState,c=b;0!==b&&(a.emittedReadable=!1);if(0===b&&a.needReadable&&(a.length>=a.highWaterMark||a.ended))return Q("read: emitReadable",a.length,a.ended),0===a.length&&a.ended?Ne(this):Ke(this),null;b=Me(b,a);if(0===b&&a.ended)return 0===a.length&&Ne(this),null;var d=a.needReadable;Q("need readable",d);if(0===a.length||a.length-b=a.length)c=a.decoder?a.buffer.join(""):1===a.buffer.length?a.buffer.head.data:a.buffer.concat(a.length),a.buffer.clear();else{c=a.buffer;a=a.decoder;if(bg.length?g.length:b;e=f===g.length?e+g:e+g.slice(0, b);b-=f;if(0===b){f===g.length?(++d,c.head=a.next?a.next:c.tail=null):(c.head=a,a.data=g.slice(f));break}++d}c.length-=d;c=e}else{a=A.allocUnsafe(b);d=c.head;e=1;d.data.copy(a);for(b-=d.data.length;d=d.next;){g=d.data;f=b>g.length?g.length:b;g.copy(a,a.length-b,0,f);b-=f;if(0===b){f===g.length?(++e,c.head=d.next?d.next:c.tail=null):(c.head=d,d.data=g.slice(f));break}++e}c.length-=e;c=a}a=c}c=a}return c} function Ne(b){var a=b._readableState;if(0arguments.length?b:sf.apply(null,[b].concat(rf.call(arguments,2)))}},uf=Ea(function(b,a){function c(a,b,c){void 0===c&&(c=function(a){return a});return function(){for(var e=[],f=0;f= 0x80 (not a basic code point)","invalid-input":"Invalid input"},yf=Math.floor,zf=String.fromCharCode; function Af(b,a){var c=b.split("@"),d="";1b)-((0!=a)<<5)} function Cf(b){return Af(b,function(a){if(vf.test(a)){var b,d=[],e=[],g=0;for(b=a.length;g=f&&gq&&d.push(zf(q))}for((g=b=d.length)&&d.push("-");g=e&&qyf((2147483647-k)/v))throw new RangeError(xf.overflow); k+=(t-e)*v;e=t;for(f=0;f=r+26?26:t-r;if(l>1;for(k+=yf(k/r);455a&&(d=a);for(a=0;a"` \r\n\t'.split("")),Tf=["'"].concat(Sf),Uf=["%","/","?",";","#"].concat(Tf),Vf=["/","?","#"],Wf=255,Xf=/^[+a-z0-9A-Z_-]{0,63}$/,Yf=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Zf={javascript:!0,"javascript:":!0},$f={javascript:!0,"javascript:":!0},ag={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0}; function Jf(b,a,c){if(b&&jc(b)&&b instanceof Nf)return b;var d=new Nf;d.parse(b,a,c);return d}Nf.prototype.parse=function(b,a,c){return bg(this,b,a,c)}; function bg(b,a,c,d){if(!hc(a))throw new TypeError("Parameter 'url' must be a string, not "+typeof a);var e=a.indexOf("?");e=-1!==e&&eWf?"":b.hostname.toLowerCase();f||(b.hostname=Cf(b.hostname));d=b.port?":"+b.port:"";b.host=(b.hostname||"")+d; b.href+=b.host;f&&(b.hostname=b.hostname.substr(1,b.hostname.length-2),"/"!==e[0]&&(e="/"+e))}if(!Zf[g])for(d=0,a=Tf.length;dg.length&&g.unshift("");a.pathname=g.join("/")}a.search=b.search;a.query=b.query;a.host=b.host||"";a.auth=b.auth;a.hostname=b.hostname||b.host;a.port=b.port;if(a.pathname||a.search)a.path=(a.pathname||"")+(a.search||"");a.slashes= a.slashes||b.slashes;a.href=a.format();return a}c=a.pathname&&"/"===a.pathname.charAt(0);var f=b.host||b.pathname&&"/"===b.pathname.charAt(0),h=c=f||c||a.host&&b.pathname;d=a.pathname&&a.pathname.split("/")||[];e=a.protocol&&!ag[a.protocol];g=b.pathname&&b.pathname.split("/")||[];e&&(a.hostname="",a.port=null,a.host&&(""===d[0]?d[0]=a.host:d.unshift(a.host)),a.host="",b.protocol&&(b.hostname=null,b.port=null,b.host&&(""===g[0]?g[0]=b.host:g.unshift(b.host)),b.host=null),c=c&&(""===g[0]||""===d[0])); if(f)a.host=b.host||""===b.host?b.host:a.host,a.hostname=b.hostname||""===b.hostname?b.hostname:a.hostname,a.search=b.search,a.query=b.query,d=g;else if(g.length)d||(d=[]),d.pop(),d=d.concat(g),a.search=b.search,a.query=b.query;else if(null!=b.search){e&&(a.hostname=a.host=d.shift(),e=a.host&&0d)d=b;else{for(;c(b,d);)d--;d=b.substr(0,d+1)}return d.replace(/^([a-zA-Z]+:|\.\/)/,"")}return a}Object.defineProperty(a,"__esModule",{value:!0});a.unixify=d;a.correctPath=function(a){return d(a.replace(/^\\\\\?\\.:\\/, "\\"))};var e="win32"===bc.platform});Da(eg); var fg=Ea(function(b,a){function c(a,b){void 0===b&&(b=ge.default.cwd());return Fa(b,a)}function d(a,b){return"function"===typeof a?[e(),a]:[e(a),t(b)]}function e(a){void 0===a&&(a={});return ja({},Sb,a)}function g(a){return"number"===typeof a?ja({},Qc,{mode:a}):ja({},Qc,a)}function f(a,b,c,d){void 0===b&&(b="");void 0===c&&(c="");void 0===d&&(d="");var e="";c&&(e=" '"+c+"'");d&&(e+=" -> '"+d+"'");switch(a){case "ENOENT":return"ENOENT: no such file or directory, "+b+e;case "EBADF":return"EBADF: bad file descriptor, "+ b+e;case "EINVAL":return"EINVAL: invalid argument, "+b+e;case "EPERM":return"EPERM: operation not permitted, "+b+e;case "EPROTO":return"EPROTO: protocol error, "+b+e;case "EEXIST":return"EEXIST: file already exists, "+b+e;case "ENOTDIR":return"ENOTDIR: not a directory, "+b+e;case "EISDIR":return"EISDIR: illegal operation on a directory, "+b+e;case "EACCES":return"EACCES: permission denied, "+b+e;case "ENOTEMPTY":return"ENOTEMPTY: directory not empty, "+b+e;case "EMFILE":return"EMFILE: too many open files, "+ b+e;case "ENOSYS":return"ENOSYS: function not implemented, "+b+e;default:return a+": error occurred, "+b+e}}function h(a,b,c,d,e){void 0===b&&(b="");void 0===c&&(c="");void 0===d&&(d="");void 0===e&&(e=Error);b=new e(f(a,b,c,d));b.code=a;return b}function k(a){if("number"===typeof a)return a;if("string"===typeof a){var b=Ia[a];if("undefined"!==typeof b)return b}throw new Ud.TypeError("ERR_INVALID_OPT_VALUE","flags",a);}function r(a,b){if(b){var c=typeof b;switch(c){case "string":a=ja({},a,{encoding:b}); break;case "object":a=ja({},a,b);break;default:throw TypeError("Expected options to be either an object or a string, but got "+c+" instead");}}else return a;"buffer"!==a.encoding&&Vd.assertEncoding(a.encoding);return a}function q(a){return function(b){return r(a,b)}}function t(a){if("function"!==typeof a)throw TypeError(za.CB);return a}function v(a){return function(b,c){return"function"===typeof b?[a(),b]:[a(b),t(c)]}}function l(a){if("string"!==typeof a&&!E.Buffer.isBuffer(a)){try{if(!(a instanceof Of.URL))throw new TypeError(za.PATH_STR);}catch(hb){throw new TypeError(za.PATH_STR);}if(""!==a.hostname)throw new Ud.TypeError("ERR_INVALID_FILE_URL_HOST",ge.default.platform);a=a.pathname;for(var b=0;b>>0!==a)throw TypeError(za.FD);}function R(a){if("string"===typeof a&&+a==a)return+a;if(a instanceof Date)return a.getTime()/1E3;if(isFinite(a))return 0>a?Date.now()/1E3:a;throw Error("Cannot parse time: "+a);}function C(a){if("number"!==typeof a)throw TypeError(za.UID);}function H(a){if("number"!==typeof a)throw TypeError(za.GID);}function qa(a){a.emit("stop")}function V(a,b,c){if(!(this instanceof V))return new V(a,b,c);this._vol= a;c=ja({},r(c,{}));void 0===c.highWaterMark&&(c.highWaterMark=65536);qf.Readable.call(this,c);this.path=l(b);this.fd=void 0===c.fd?null:c.fd;this.flags=void 0===c.flags?"r":c.flags;this.mode=void 0===c.mode?438:c.mode;this.start=c.start;this.end=c.end;this.autoClose=void 0===c.autoClose?!0:c.autoClose;this.pos=void 0;this.bytesRead=0;if(void 0!==this.start){if("number"!==typeof this.start)throw new TypeError('"start" option must be a Number');if(void 0===this.end)this.end=Infinity;else if("number"!== typeof this.end)throw new TypeError('"end" option must be a Number');if(this.start>this.end)throw Error('"start" option must be <= "end" option');this.pos=this.start}"number"!==typeof this.fd&&this.open();this.on("end",function(){this.autoClose&&this.destroy&&this.destroy()})}function ra(){this.close()}function I(a,b,c){if(!(this instanceof I))return new I(a,b,c);this._vol=a;c=ja({},r(c,{}));qf.Writable.call(this,c);this.path=l(b);this.fd=void 0===c.fd?null:c.fd;this.flags=void 0===c.flags?"w":c.flags; this.mode=void 0===c.mode?438:c.mode;this.start=c.start;this.autoClose=void 0===c.autoClose?!0:!!c.autoClose;this.pos=void 0;this.bytesWritten=0;if(void 0!==this.start){if("number"!==typeof this.start)throw new TypeError('"start" option must be a Number');if(0>this.start)throw Error('"start" must be >= zero');this.pos=this.start}c.encoding&&this.setDefaultEncoding(c.encoding);"number"!==typeof this.fd&&this.open();this.once("finish",function(){this.autoClose&&this.close()})}var sa=x&&x.__extends|| function(){function a(b,c){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])};return a(b,c)}return function(b,c){function d(){this.constructor=b}a(b,c);b.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)}}(),ta=x&&x.__spreadArrays||function(){for(var a=0,b=0,c=arguments.length;b>>0!==a)throw TypeError(za.FD);a=this.getFileByFd(a);if(!a)throw h("EBADF",b);return a};a.prototype.getNodeByIdOrCreate=function(a,b,c){if("number"===typeof a){a=this.getFileByFd(a);if(!a)throw Error("File nto found");return a.node}var d=y(a),e=this.getLink(d);if(e)return e.getNode();if(b&P&&(b=this.getLinkParent(d)))return e=this.createLink(b,d[d.length-1],!1,c), e.getNode();throw h("ENOENT","getNodeByIdOrCreate",l(a));};a.prototype.wrapAsync=function(a,b,c){var d=this;t(c);fe.default(function(){try{c(null,a.apply(d,b))}catch(Ya){c(Ya)}})};a.prototype._toJSON=function(a,b,c){var d;void 0===a&&(a=this.root);void 0===b&&(b={});var e=!0,f=a.children;a.getNode().isFile()&&(f=(d={},d[a.getName()]=a.parent.getChild(a.getName()),d),a=a.parent);for(var g in f){e=!1;f=a.getChild(g);if(!f)throw Error("_toJSON: unexpected undefined");d=f.getNode();d.isFile()?(f=f.getPath(), c&&(f=qb(c,f)),b[f]=d.getString()):d.isDirectory()&&this._toJSON(f,b,c)}a=a.getPath();c&&(a=qb(c,a));a&&e&&(b[a]=null);return b};a.prototype.toJSON=function(a,b,c){void 0===b&&(b={});void 0===c&&(c=!1);var d=[];if(a){a instanceof Array||(a=[a]);for(var e=0;e=this.maxFiles)throw h("EMFILE","open",a.getPath());var d=a;c&&(d=this.resolveSymlinks(a));if(!d)throw h("ENOENT","open",a.getPath());c=d.getNode();if(c.isDirectory()){if((b&(Sa|ma|xa))!==Sa)throw h("EISDIR","open",a.getPath());}else if(b&da)throw h("ENOTDIR","open",a.getPath());if(!(b&xa||c.canRead()))throw h("EACCES","open",a.getPath());a=new this.props.File(a,c,b,this.newFdNumber());this.fds[a.fd]=a;this.openFiles++;b&ua&&a.truncate();return a};a.prototype.openFile=function(a, b,c,d){void 0===d&&(d=!0);var e=n(a),f=d?this.getResolvedLink(e):this.getLink(e);if(!f&&b&P){var g=this.getResolvedLink(e.slice(0,e.length-1));if(!g)throw h("ENOENT","open",ia+e.join(ia));b&P&&"number"===typeof c&&(f=this.createLink(g,e[e.length-1],!1,c))}if(f)return this.openLink(f,b,d);throw h("ENOENT","open",a);};a.prototype.openBase=function(a,b,c,d){void 0===d&&(d=!0);b=this.openFile(a,b,c,d);if(!b)throw h("ENOENT","open",a);return b.fd};a.prototype.openSync=function(a,b,c){void 0===c&&(c=438); c=M(c);a=l(a);b=k(b);return this.openBase(a,b,c)};a.prototype.open=function(a,b,c,d){var e=c;"function"===typeof c&&(e=438,d=c);c=M(e||438);a=l(a);b=k(b);this.wrapAsync(this.openBase,[a,b,c],d)};a.prototype.closeFile=function(a){this.fds[a.fd]&&(this.openFiles--,delete this.fds[a.fd],this.releasedFds.push(a.fd))};a.prototype.closeSync=function(a){ha(a);a=this.getFileByFdOrThrow(a,"close");this.closeFile(a)};a.prototype.close=function(a,b){ha(a);this.wrapAsync(this.closeSync,[a],b)};a.prototype.openFileOrGetById= function(a,b,c){if("number"===typeof a){a=this.fds[a];if(!a)throw h("ENOENT");return a}return this.openFile(l(a),b,c)};a.prototype.readBase=function(a,b,c,d,e){return this.getFileByFdOrThrow(a).read(b,Number(c),Number(d),e)};a.prototype.readSync=function(a,b,c,d,e){ha(a);return this.readBase(a,b,c,d,e)};a.prototype.read=function(a,b,c,d,e,f){var g=this;t(f);if(0===d)return ge.default.nextTick(function(){f&&f(null,0,b)});fe.default(function(){try{var h=g.readBase(a,b,c,d,e);f(null,h,b)}catch(Tc){f(Tc)}})}; a.prototype.readFileBase=function(a,b,c){var d="number"===typeof a&&a>>>0===a;if(!d){var e=l(a);e=n(e);if((e=this.getResolvedLink(e))&&e.getNode().isDirectory())throw h("EISDIR","open",e.getPath());a=this.openSync(a,b)}try{var f=O(this.getFileByFdOrThrow(a).getBuffer(),c)}finally{d||this.closeSync(a)}return f};a.prototype.readFileSync=function(a,b){b=Ga(b);var c=k(b.flag);return this.readFileBase(a,c,b.encoding)};a.prototype.readFile=function(a,b,c){c=v(Ga)(b,c);b=c[0];c=c[1];var d=k(b.flag);this.wrapAsync(this.readFileBase, [a,d,b.encoding],c)};a.prototype.writeBase=function(a,b,c,d,e){return this.getFileByFdOrThrow(a,"write").write(b,c,d,e)};a.prototype.writeSync=function(a,b,c,d,e){ha(a);var f="string"!==typeof b;if(f){var g=(c||0)|0,h=d;c=e}else var k=d;b=B(b,k);f?"undefined"===typeof h&&(h=b.length):(g=0,h=b.length);return this.writeBase(a,b,g,h,c)};a.prototype.write=function(a,b,c,d,e,f){var g=this;ha(a);var h=typeof b,k=typeof c,l=typeof d,p=typeof e;if("string"!==h)if("function"===k)var n=c;else if("function"=== l){var q=c|0;n=d}else if("function"===p){q=c|0;var gb=d;n=e}else{q=c|0;gb=d;var Xa=e;n=f}else if("function"===k)n=c;else if("function"===l)Xa=c,n=d;else if("function"===p){Xa=c;var r=d;n=e}var hb=B(b,r);"string"!==h?"undefined"===typeof gb&&(gb=hb.length):(q=0,gb=hb.length);var C=t(n);fe.default(function(){try{var c=g.writeBase(a,hb,q,gb,Xa);"string"!==h?C(null,c,hb):C(null,c,b)}catch(oe){C(oe)}})};a.prototype.writeFileBase=function(a,b,c,d){var e="number"===typeof a;a=e?a:this.openBase(l(a),c,d); d=0;var f=b.length;c=c&J?void 0:0;try{for(;0=a.nlink&&this.deleteNode(a)};a.prototype.unlinkSync=function(a){a=l(a);this.unlinkBase(a)};a.prototype.unlink=function(a,b){a=l(a);this.wrapAsync(this.unlinkBase,[a],b)};a.prototype.symlinkBase=function(a,b){var c=n(b),d=this.getLinkParent(c);if(!d)throw h("ENOENT","symlink",a,b);c=c[c.length-1];if(d.getChild(c))throw h("EEXIST","symlink",a,b);b=d.createChild(c);b.getNode().makeSymlink(n(a));return b};a.prototype.symlinkSync=function(a,b){a=l(a);b=l(b);this.symlinkBase(a,b)};a.prototype.symlink= function(a,b,c,d){c=t("function"===typeof c?c:d);a=l(a);b=l(b);this.wrapAsync(this.symlinkBase,[a,b],c)};a.prototype.realpathBase=function(a,b){var c=n(a);c=this.getResolvedLink(c);if(!c)throw h("ENOENT","realpath",a);return Vd.strToEncoding(c.getPath(),b)};a.prototype.realpathSync=function(a,b){return this.realpathBase(l(a),Cc(b).encoding)};a.prototype.realpath=function(a,b,c){c=Hd(b,c);b=c[0];c=c[1];a=l(a);this.wrapAsync(this.realpathBase,[a,b.encoding],c)};a.prototype.lstatBase=function(a,b){void 0=== b&&(b=!1);var c=this.getLink(n(a));if(!c)throw h("ENOENT","lstat",a);return Ka.default.build(c.getNode(),b)};a.prototype.lstatSync=function(a,b){return this.lstatBase(l(a),e(b).bigint)};a.prototype.lstat=function(a,b,c){c=d(b,c);b=c[0];c=c[1];this.wrapAsync(this.lstatBase,[l(a),b.bigint],c)};a.prototype.statBase=function(a,b){void 0===b&&(b=!1);var c=this.getResolvedLink(n(a));if(!c)throw h("ENOENT","stat",a);return Ka.default.build(c.getNode(),b)};a.prototype.statSync=function(a,b){return this.statBase(l(a), e(b).bigint)};a.prototype.stat=function(a,b,c){c=d(b,c);b=c[0];c=c[1];this.wrapAsync(this.statBase,[l(a),b.bigint],c)};a.prototype.fstatBase=function(a,b){void 0===b&&(b=!1);a=this.getFileByFd(a);if(!a)throw h("EBADF","fstat");return Ka.default.build(a.node,b)};a.prototype.fstatSync=function(a,b){return this.fstatBase(a,e(b).bigint)};a.prototype.fstat=function(a,b,c){b=d(b,c);this.wrapAsync(this.fstatBase,[a,b[0].bigint],b[1])};a.prototype.renameBase=function(a,b){var c=this.getLink(n(a));if(!c)throw h("ENOENT", "rename",a,b);var d=n(b),e=this.getLinkParent(d);if(!e)throw h("ENOENT","rename",a,b);(a=c.parent)&&a.deleteChild(c);c.steps=ta(e.steps,[d[d.length-1]]);e.setChild(c.getName(),c)};a.prototype.renameSync=function(a,b){a=l(a);b=l(b);this.renameBase(a,b)};a.prototype.rename=function(a,b,c){a=l(a);b=l(b);this.wrapAsync(this.renameBase,[a,b],c)};a.prototype.existsBase=function(a){return!!this.statBase(a)};a.prototype.existsSync=function(a){try{return this.existsBase(l(a))}catch(Xa){return!1}};a.prototype.exists= function(a,b){var c=this,d=l(a);if("function"!==typeof b)throw Error(za.CB);fe.default(function(){try{b(c.existsBase(d))}catch(Ya){b(!1)}})};a.prototype.accessBase=function(a){this.getLinkOrThrow(a,"access")};a.prototype.accessSync=function(a,b){void 0===b&&(b=Hb);a=l(a);this.accessBase(a,b|0)};a.prototype.access=function(a,b,c){var d=Hb;"function"!==typeof b&&(d=b|0,b=t(c));a=l(a);this.wrapAsync(this.accessBase,[a,d],b)};a.prototype.appendFileSync=function(a,b,c){void 0===c&&(c=ec);c=Ac(c);c.flag&& a>>>0!==a||(c.flag="a");this.writeFileSync(a,b,c)};a.prototype.appendFile=function(a,b,c,d){d=Gd(c,d);c=d[0];d=d[1];c.flag&&a>>>0!==a||(c.flag="a");this.writeFile(a,b,c,d)};a.prototype.readdirBase=function(a,b){var c=n(a);c=this.getResolvedLink(c);if(!c)throw h("ENOENT","readdir",a);if(!c.getNode().isDirectory())throw h("ENOTDIR","scandir",a);if(b.withFileTypes){var d=[];for(e in c.children)(a=c.getChild(e))&&d.push(Wd.default.build(a,b.encoding));p||"buffer"===b.encoding||d.sort(function(a,b){return a.name< b.name?-1:a.name>b.name?1:0});return d}var e=[];for(d in c.children)e.push(Vd.strToEncoding(d,b.encoding));p||"buffer"===b.encoding||e.sort();return e};a.prototype.readdirSync=function(a,b){b=rc(b);a=l(a);return this.readdirBase(a,b)};a.prototype.readdir=function(a,b,c){c=ne(b,c);b=c[0];c=c[1];a=l(a);this.wrapAsync(this.readdirBase,[a,b],c)};a.prototype.readlinkBase=function(a,b){var c=this.getLinkOrThrow(a,"readlink").getNode();if(!c.isSymlink())throw h("EINVAL","readlink",a);a=ia+c.symlink.join(ia); return Vd.strToEncoding(a,b)};a.prototype.readlinkSync=function(a,b){b=u(b);a=l(a);return this.readlinkBase(a,b.encoding)};a.prototype.readlink=function(a,b,c){c=Dc(b,c);b=c[0];c=c[1];a=l(a);this.wrapAsync(this.readlinkBase,[a,b.encoding],c)};a.prototype.fsyncBase=function(a){this.getFileByFdOrThrow(a,"fsync")};a.prototype.fsyncSync=function(a){this.fsyncBase(a)};a.prototype.fsync=function(a,b){this.wrapAsync(this.fsyncBase,[a],b)};a.prototype.fdatasyncBase=function(a){this.getFileByFdOrThrow(a,"fdatasync")}; a.prototype.fdatasyncSync=function(a){this.fdatasyncBase(a)};a.prototype.fdatasync=function(a,b){this.wrapAsync(this.fdatasyncBase,[a],b)};a.prototype.ftruncateBase=function(a,b){this.getFileByFdOrThrow(a,"ftruncate").truncate(b)};a.prototype.ftruncateSync=function(a,b){this.ftruncateBase(a,b)};a.prototype.ftruncate=function(a,b,c){var d="number"===typeof b?b:0;b=t("number"===typeof b?c:b);this.wrapAsync(this.ftruncateBase,[a,d],b)};a.prototype.truncateBase=function(a,b){a=this.openSync(a,"r+");try{this.ftruncateSync(a, b)}finally{this.closeSync(a)}};a.prototype.truncateSync=function(a,b){if(a>>>0===a)return this.ftruncateSync(a,b);this.truncateBase(a,b)};a.prototype.truncate=function(a,b,c){var d="number"===typeof b?b:0;b=t("number"===typeof b?c:b);if(a>>>0===a)return this.ftruncate(a,d,b);this.wrapAsync(this.truncateBase,[a,d],b)};a.prototype.futimesBase=function(a,b,c){a=this.getFileByFdOrThrow(a,"futimes").node;a.atime=new Date(1E3*b);a.mtime=new Date(1E3*c)};a.prototype.futimesSync=function(a,b,c){this.futimesBase(a, R(b),R(c))};a.prototype.futimes=function(a,b,c,d){this.wrapAsync(this.futimesBase,[a,R(b),R(c)],d)};a.prototype.utimesBase=function(a,b,c){a=this.openSync(a,"r+");try{this.futimesBase(a,b,c)}finally{this.closeSync(a)}};a.prototype.utimesSync=function(a,b,c){this.utimesBase(l(a),R(b),R(c))};a.prototype.utimes=function(a,b,c,d){this.wrapAsync(this.utimesBase,[l(a),R(b),R(c)],d)};a.prototype.mkdirBase=function(a,b){var c=n(a);if(!c.length)throw h("EISDIR","mkdir",a);var d=this.getLinkParentAsDirOrThrow(a, "mkdir");c=c[c.length-1];if(d.getChild(c))throw h("EEXIST","mkdir",a);d.createChild(c,this.createNode(!0,b))};a.prototype.mkdirpBase=function(a,b){a=n(a);for(var c=this.root,d=0;dthis.prev.mtimeMs||a.nlink!==this.prev.nlink?!0:!1};b.prototype.start=function(a,b,c){void 0===b&&(b=!0);void 0===c&&(c=5007);this.filename= l(a);this.setTimeout=b?setTimeout:qe.default;this.interval=c;this.prev=this.vol.statSync(this.filename);this.loop()};b.prototype.stop=function(){clearTimeout(this.timeoutRef);ge.default.nextTick(qa,this)};return b}(L.EventEmitter);a.StatWatcher=sc;var Z;md.inherits(V,qf.Readable);a.ReadStream=V;V.prototype.open=function(){var a=this;this._vol.open(this.path,this.flags,this.mode,function(b,c){b?(a.autoClose&&a.destroy&&a.destroy(),a.emit("error",b)):(a.fd=c,a.emit("open",c),a.read())})};V.prototype._read= function(a){if("number"!==typeof this.fd)return this.once("open",function(){this._read(a)});if(!this.destroyed){if(!Z||128>Z.length-Z.used)Z=E.bufferAllocUnsafe(this._readableState.highWaterMark),Z.used=0;var b=Z,c=Math.min(Z.length-Z.used,a),d=Z.used;void 0!==this.pos&&(c=Math.min(this.end-this.pos+1,c));if(0>=c)return this.push(null);var e=this;this._vol.read(this.fd,Z,Z.used,c,this.pos,function(a,c){a?(e.autoClose&&e.destroy&&e.destroy(),e.emit("error",a)):(a=null,0h[0]&&c[1]c&&(e=0,d+=1));return{row:d,col:e}} for(var wg=function(){function b(a){this._firstInit=!0;this.xterm=a;this._termSize={cols:this.xterm.cols,rows:this.xterm.rows};this._input=this._continuationPromptPrefix=this._promptPrefix="";this._cursor=0}b.prototype._getAsyncRead=function(){var a=this,b,d;return{promise:new Promise(function(c,g){b=function(b){a._promptPrefix="";a._continuationPromptPrefix="";c(b)};d=g}),resolve:b,reject:d}};b.prototype.read=function(a,b){void 0===b&&(b="> ");0a.length&&(this._cursor=a.length);var e=this.applyPromptOffset(a,this._cursor);b=vg(c,c.length,this._termSize.cols).row+1;e=vg(c,e,this._termSize.cols);c=e.col;b=b-e.row-1;this.xterm.write("\r");for(e=0;e< b;++e)this.xterm.write("\u001b[F");for(e=0;ea&&(a=0);a>this._input.length&&(a=this._input.length);this._writeCursorPosition(a)};b.prototype.setCursorDirectly=function(a){this._writeCursorPosition(a)};b.prototype._writeCursorPosition=function(a){var b=this.applyPrompts(this._input);vg(b,b.length,this._termSize.cols);var d=this.applyPromptOffset(this._input,this._cursor),e=vg(b,d,this._termSize.cols);d=e.col;e=e.row; var g=this.applyPromptOffset(this._input,a);g=vg(b,g,this._termSize.cols);b=g.col;g=g.row;if(g>e)for(var f=e;fd)for(f=d;fDg;Dg++)Cg+=(Math.pow(16,8)*Math.random()).toString(16);function Eg(b,a,c){b=Fg(b,a,c);return"function"!==typeof a?b:b.reduce(function(a,b){if("object"===typeof b)return a.concat(b);b=b.split(RegExp("("+Cg+".*?"+Cg+")","g"));return 1===b.length?a.concat(b[0]):a.concat(b.filter(Boolean).map(function(a){return RegExp("^"+Cg).test(a)?JSON.parse(a.split(Cg)[1]):a}))},[])} function Fg(b,a,c){var d=b.match(/((?:\|\||\&\&|;;|\|\&|\<\(|>>|>\&|[&;()|<>]))|((\\['"|&;()<> \t]|[^\s'"|&;()<> \t])+|"((\\"|[^"])*?)"|'((\\'|[^'])*?)')*/g).filter(Boolean),e=!1;if(!d)return[];a||(a={});c||(c={});return d.map(function(b,f){function g(){l+=1;if("{"===b.charAt(l)){l+=1;if("}"===b.charAt(l))throw Error("Bad substitution: "+b.substr(l-2,3));var c=b.indexOf("}",l);if(0>c)throw Error("Bad substitution: "+b.substr(l));var d=b.substr(l,c-l);l=c}else/[*@#?$!_\-]/.test(b.charAt(l))?(d=b.charAt(l), l+=1):(c=b.substr(l).match(/[^\w\d_]/))?(d=b.substr(l,c.index),l+=c.index-1):(d=b.substr(l),l=b.length);c=d;d="function"===typeof a?a(c):a[c];void 0===d&&""!=c?d="":void 0===d&&(d="$");c="object"===typeof d?""+Cg+JSON.stringify(d)+Cg:""+d;return c}if(!e){if(/^(?:\|\||\&\&|;;|\|\&|\<\(|>>|>\&|[&;()|<>])$/.test(b))return{op:b};for(var k=c.escape||"\\",r=!1,q=!1,t="",v=!1,l=0,n=b.length;l>|>\&|[&;()|<>])$/.test(y))return{op:b};if(/^#$/.test(y))return e=!0,t.length?[t,{comment:b.slice(l+1)+d.slice(f+1).join(" ")}]:[{comment:b.slice(l+1)+d.slice(f+1).join(" ")}];y===k?q=!0:t="$"===y?t+g():t+y}}return v?{op:"glob",pattern:t}:t}}).reduce(function(a,b){return void 0===b?a:a.concat(b)},[])} function Gg(b,a){void 0===a&&(a=!0);var c,d=[],e=/\w+/g;for(c=e.exec(b);c;)a?d.push(c.index):d.push(c.index+c[0].length),c=e.exec(b);return d}function Hg(b,a){b=Gg(b,!0).reverse().find(function(b){return ba});return void 0===c?b.length:c} function Jg(b){return""===b.trim()?!1:0!==(b.match(/'/g)||[]).length%2||0!==(b.match(/"/g)||[]).length%2||""===b.split(/(\|\||\||&&)/g).pop().trim()||b.endsWith("\\")&&!b.endsWith("\\\\")?!0:!1}function Kg(b){return null!==b.match(/[^\\][ \t]$/m)}function Lg(b){return""===b.trim()||Kg(b)?"":Eg(b).pop()||""} function Mg(b,a){var c=Eg(a),d=c.length-1,e=c[d]||"";""===a.trim()?(d=0,e=""):Kg(a)&&(d+=1,e="");return b.reduce(function(a,b){try{var e=b(d,c);return a.concat(e)}catch(k){return console.error("Auto-complete error:",k),a}},[]).filter(function(a){return a.startsWith(e)})} var Ng=function(){function b(a){this.size=a;this.entries=[];this.cursor=0}b.prototype.push=function(a){""!==a.trim()&&a!==this.entries[this.entries.length-1]&&(this.entries.push(a),this.entries.length>this.size&&this.entries.pop(),this.cursor=this.entries.length)};b.prototype.includes=function(a){return this.entries.includes(a)};b.prototype.rewind=function(){this.cursor=this.entries.length};b.prototype.getPrevious=function(){var a=Math.max(0,this.cursor-1);this.cursor=a;return this.entries[a]};b.prototype.getNext= function(){var a=Math.min(this.entries.length,this.cursor+1);this.cursor=a;return this.entries[a]};return b}(); let Og=Symbol("Comlink.proxy"),Pg=Symbol("Comlink.endpoint"),Qg=Symbol("Comlink.releaseProxy"),Rg=new WeakSet,zh=new Map([["proxy",{canHandle:b=>b&&b[Og],serialize(b){const {port1:a,port2:c}=new MessageChannel;Sg(b,a);return[c,[c]]},deserialize:b=>{b.start();return yh(b,[],void 0)}}],["throw",{canHandle:b=>Rg.has(b),serialize(b){const a=b instanceof Error;let c=b;a&&(c={isError:a,message:b.message,stack:b.stack});return[c,[]]},deserialize(b){if(b.isError)throw Object.assign(Error(),b);throw b;}}]]); function Sg(b,a=self){a.addEventListener("message",function e(d){if(d&&d.data){var {id:g,type:f,path:h}=Object.assign({path:[]},d.data),k=(d.data.argumentList||[]).map(Ah);try{let a=h.slice(0,-1).reduce((a,b)=>a[b],b),e=h.reduce((a,b)=>a[b],b);switch(f){case 0:var r=e;break;case 1:a[h.slice(-1)[0]]=Ah(d.data.value);r=!0;break;case 2:r=e.apply(a,k);break;case 3:{let a=new e(...k);r=Bh(a)}break;case 4:{let {port1:a,port2:d}=new MessageChannel;Sg(b,d);r=Ch(a,[a])}break;case 5:r=void 0}}catch(q){r=q, Rg.add(q)}Promise.resolve(r).catch(a=>{Rg.add(a);return a}).then(b=>{let [d,h]=Dh(b);a.postMessage(Object.assign(Object.assign({},d),{id:g}),h);5===f&&(a.removeEventListener("message",e),"MessagePort"===a.constructor.name&&a.close())})}});a.start&&a.start()}function Eh(b){if(b)throw Error("Proxy has been released and is not useable");} function yh(b,a=[],c=function(){}){let d=!1,e=new Proxy(c,{get(c,f){Eh(d);if(f===Qg)return()=>Fh(b,{type:5,path:a.map(a=>a.toString())}).then(()=>{"MessagePort"===b.constructor.name&&b.close();d=!0});if("then"===f){if(0===a.length)return{then:()=>e};c=Fh(b,{type:0,path:a.map(a=>a.toString())}).then(Ah);return c.then.bind(c)}return yh(b,[...a,f])},set(c,e,h){Eh(d);const [f,g]=Dh(h);return Fh(b,{type:1,path:[...a,e].map(a=>a.toString()),value:f},g).then(Ah)},apply(c,e,h){Eh(d);c=a[a.length-1];if(c=== Pg)return Fh(b,{type:4}).then(Ah);if("bind"===c)return yh(b,a.slice(0,-1));const [f,g]=Gh(h);return Fh(b,{type:2,path:a.map(a=>a.toString()),argumentList:f},g).then(Ah)},construct(c,e){Eh(d);const [f,g]=Gh(e);return Fh(b,{type:3,path:a.map(a=>a.toString()),argumentList:f},g).then(Ah)}});return e}function Gh(b){b=b.map(Dh);return[b.map(a=>a[0]),Array.prototype.concat.apply([],b.map(a=>a[1]))]}let Hh=new WeakMap;function Ch(b,a){Hh.set(b,a);return b} function Bh(b){return Object.assign(b,{[Og]:!0})}function Dh(b){for(let [a,c]of zh)if(c.canHandle(b)){let [d,e]=c.serialize(b);return[{type:3,name:a,value:d},e]}return[{type:0,value:b},Hh.get(b)||[]]}function Ah(b){switch(b.type){case 3:return zh.get(b.name).deserialize(b.value);case 0:return b.value}} function Fh(b,a,c){return new Promise(d=>{let e=Ih();b.addEventListener("message",function h(a){a.data&&a.data.id&&a.data.id===e&&(b.removeEventListener("message",h),d(a.data))});b.start&&b.start();b.postMessage(Object.assign({id:e},a),c)})}function Ih(){return Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}var Jh=Array.isArray||function(b){return"[object Array]"==Object.prototype.toString.call(b)}; function Kh(b,a){if(b.map)return b.map(a);for(var c=[],d=0;da&&(uc=0,ve={line:1,column:1,seenCR:!1});var b=ve,d;for(d=uc;dZc&&(Zc=m,we=[]),we.push(a))}function r(){var a,b;var c=m;var d=[];var e=m;var g=[];for(a=G();a!==p;)g.push(a),a=G();if(g!==p)if(a=q(),a!==p){var h=[];for(b=G();b!==p;)h.push(b),b=G();h!==p?e=g=[g,a,h]:(m=e,e=u)}else m=e,e=u;else m=e,e=u;if(e!==p)for(;e!==p;){d.push(e);e=m;g=[];for(a=G();a!==p;)g.push(a),a=G();if(g!==p)if(a=q(),a!==p){h=[];for(b=G();b!==p;)h.push(b),b=G();h!==p?e=g=[g,a,h]:(m=e,e=u)}else m=e,e=u;else m=e,e=u}else d=u;d!==p&&(F=c, d=f(d));return d}function q(){var a,b;w++;var c=m;var d=t();if(d!==p){var e=[];var f=m;var h=[];for(a=J();a!==p;)h.push(a),a=J();if(h!==p)if(a=v(),a!==p){var l=[];for(b=G();b!==p;)l.push(b),b=G();l!==p?(b=t(),b!==p?f=h=[h,a,l,b]:(m=f,f=u)):(m=f,f=u)}else m=f,f=u;else m=f,f=u;for(;f!==p;){e.push(f);f=m;h=[];for(a=J();a!==p;)h.push(a),a=J();if(h!==p)if(a=v(),a!==p){l=[];for(b=G();b!==p;)l.push(b),b=G();l!==p?(b=t(),b!==p?f=h=[h,a,l,b]:(m=f,f=u)):(m=f,f=u)}else m=f,f=u;else m=f,f=u}if(e!==p){f=m;h=[]; for(a=J();a!==p;)h.push(a),a=J();h!==p?(a=v(),a!==p?f=h=[h,a]:(m=f,f=u)):(m=f,f=u);f===p&&(f=Ga);f!==p?(F=c,c=d=g(d,e)):(m=c,c=u)}else m=c,c=u}else m=c,c=u;w--;c===p&&0===w&&k(Dc);return c}function t(){var a=m;var b=l();if(b===p&&(b=B(),b===p)){var d;var e=m;c.substr(m,5)===Sb?(b=Sb,m+=5):(b=p,0===w&&k(Rc));b===p&&(c.substr(m,5)===Ub?(b=Ub,m+=5):(b=p,0===w&&k(sc)));if(b!==p){var f=[];var g=G();if(g!==p)for(;g!==p;)f.push(g),g=G();else f=u;if(f!==p)if(g=y(),g!==p){f=[];for(d=G();d!==p;)f.push(d),d= G();f!==p?(c.substr(m,2)===Z?(d=Z,m+=2):(d=p,0===w&&k(tc)),d!==p?(f=G(),f!==p?(f=r(),f!==p?(c.substr(m,4)===Pc?(d=Pc,m+=4):(d=p,0===w&&k(gb)),d!==p?(F=e,e=b={type:b+"-loop",test:g,body:f}):(m=e,e=u)):(m=e,e=u)):(m=e,e=u)):(m=e,e=u)):(m=e,e=u)}else m=e,e=u;else m=e,e=u}else m=e,e=u;b=e;if(b===p){e=m;c.substr(m,2)===Xa?(b=Xa,m+=2):(b=p,0===w&&k(hb));if(b!==p){g=[];b=G();if(b!==p)for(;b!==p;)g.push(b),b=G();else g=u;if(g!==p)if(b=r(),b!==p)if(c.substr(m,4)===Tb?(g=Tb,m+=4):(g=p,0===w&&k(Ya)),g!==p){f= [];g=G();if(g!==p)for(;g!==p;)f.push(g),g=G();else f=u;if(f!==p)if(g=r(),g!==p){f=[];for(d=n();d!==p;)f.push(d),d=n();if(f!==p){d=m;if(c.substr(m,4)===ib){var h=ib;m+=4}else h=p,0===w&&k(xg);if(h!==p){var q=r();q!==p?d=h=[h,q]:(m=d,d=u)}else m=d,d=u;d===p&&(d=Ga);d!==p?(c.substr(m,2)===Sc?(h=Sc,m+=2):(h=p,0===w&&k(Tc)),h!==p?(F=e,e=b={type:"ifElse",test:b,body:g,elifBlocks:f.length?f:null,elseBody:d?d[1]:null}):(m=e,e=u)):(m=e,e=u)}else m=e,e=u}else m=e,e=u;else m=e,e=u}else m=e,e=u;else m=e,e=u; else m=e,e=u}else m=e,e=u;b=e}}if(b!==p){e=m;g=[];for(f=J();f!==p;)g.push(f),f=J();if(g!==p){f=m;c.substr(m,2)===dc?(d=dc,m+=2):(d=p,0===w&&k(Bc));d===p&&(c.substr(m,2)===ec?(d=ec,m+=2):(d=p,0===w&&k(Ac)));if(d!==p){h=[];for(q=G();q!==p;)h.push(q),q=G();h!==p?(q=t(),q!==p?(F=f,f=d=[d,q]):(m=f,f=u)):(m=f,f=u)}else m=f,f=u;f!==p?e=g=[g,f]:(m=e,e=u)}else m=e,e=u;e===p&&(e=Ga);e!==p?(F=a,a=b,"undefined"!==typeof e&&e?(e=e[1],a.control=e[0],a.next=e[1]):(a.control=";",a.next=null)):(m=a,a=u)}else m=a, a=u;return a}function v(){var a=m;if(38===c.charCodeAt(m)){var b=Gd;m++}else b=p,0===w&&k(Cc);b===p&&(59===c.charCodeAt(m)?(b=Hd,m++):(b=p,0===w&&k(Qc)),b===p&&(10===c.charCodeAt(m)?(b=qc,m++):(b=p,0===w&&k(rc))));b!==p&&(F=a,b="\n"==b?";":b);return b}function l(){w++;var a=m;var b=[];var d=m;var f=B();f===p&&(f=ya());if(f!==p){var g=[];var h=J();if(h!==p)for(;h!==p;)g.push(h),h=J();else g=u;g!==p?d=f=[f,g]:(m=d,d=u)}else m=d,d=u;for(;d!==p;)if(b.push(d),d=m,f=B(),f===p&&(f=ya()),f!==p){g=[];h=J(); if(h!==p)for(;h!==p;)g.push(h),h=J();else g=u;g!==p?d=f=[f,g]:(m=d,d=u)}else m=d,d=u;if(b!==p)if(d=O(),d===p&&(d=X()),d!==p){f=[];g=m;h=[];var n=J();if(n!==p)for(;n!==p;)h.push(n),n=J();else h=u;h!==p?(n=ya(),n===p&&(n=M()),n!==p?g=h=[h,n]:(m=g,g=u)):(m=g,g=u);for(;g!==p;){f.push(g);g=m;h=[];n=J();if(n!==p)for(;n!==p;)h.push(n),n=J();else h=u;h!==p?(n=ya(),n===p&&(n=M()),n!==p?g=h=[h,n]:(m=g,g=u)):(m=g,g=u)}if(f!==p){g=m;h=[];for(n=J();n!==p;)h.push(n),n=J();if(h!==p){var q;n=m;if(124===c.charCodeAt(m)){var r= Wj;m++}else r=p,0===w&&k(Xj);if(r!==p){r=[];for(q=G();q!==p;)r.push(q),q=G();r!==p?(q=l(),q!==p?(F=n,n=r={type:"pipe",command:q}):(m=n,n=u)):(m=n,n=u)}else m=n,n=u;n!==p?g=h=[h,n]:(m=g,g=u)}else m=g,g=u;g===p&&(g=Ga);g!==p?(F=a,a=b=e(b,d,f,g)):(m=a,a=u)}else m=a,a=u}else m=a,a=u;else m=a,a=u;w--;a===p&&0===w&&k(ne);return a}function n(){var a=m;if(c.substr(m,4)===Uc){var b=Uc;m+=4}else b=p,0===w&&k(yg);if(b!==p){var d=[];b=G();if(b!==p)for(;b!==p;)d.push(b),b=G();else d=u;if(d!==p)if(b=y(),b!==p)if(c.substr(m, 4)===Tb?(d=Tb,m+=4):(d=p,0===w&&k(Ya)),d!==p){d=[];var e=G();if(e!==p)for(;e!==p;)d.push(e),e=G();else d=u;d!==p?(e=r(),e!==p?(F=a,a=b={type:"ifElse",test:b,body:e}):(m=a,a=u)):(m=a,a=u)}else m=a,a=u;else m=a,a=u;else m=a,a=u}else m=a,a=u;return a}function y(){var a=m;var b=r();b!==p&&(F=a);return b}function B(){var a=m;var b=Sa();if(b!==p){if(61===c.charCodeAt(m)){var d=Cj;m++}else d=p,0===w&&k(Dj);d!==p?(d=M(),d!==p?(F=a,a=b={type:"variableAssignment",name:b,value:d}):(m=a,a=u)):(m=a,a=u)}else m= a,a=u;return a}function O(){var a;w++;var b=a=m;w++;var c=ya();w--;c===p?b=Ha:(m=b,b=u);if(b!==p)if(c=m,w++,b=da(),w--,b===p?c=Ha:(m=c,c=u),c!==p)if(b=m,w++,c=B(),w--,c===p?b=Ha:(m=b,b=u),b!==p){c=m;b=[];var d=H();d===p&&(d=ha(),d===p&&(d=Fa(),d===p&&(d=xa(),d===p&&(d=ma(),d===p&&(d=ra(),d===p&&(d=I()))))));if(d!==p)for(;d!==p;)b.push(d),d=H(),d===p&&(d=ha(),d===p&&(d=Fa(),d===p&&(d=xa(),d===p&&(d=ma(),d===p&&(d=ra(),d===p&&(d=I()))))));else b=u;b!==p&&(F=c,b=ia(b));c=b;c===p&&(c=X());c!==p?(F=a, a=c):(m=a,a=u)}else m=a,a=u;else m=a,a=u;else m=a,a=u;w--;a===p&&0===w&&k(Ej);return a}function X(){if(91===c.charCodeAt(m)){var a=zg;m++}else a=p,0===w&&k(Ag);a===p&&(c.substr(m,2)===Vc?(a=Vc,m+=2):(a=p,0===w&&k(Bg)));return a}function M(){w++;var a=O();if(a===p){a=m;if(Yj.test(c.charAt(m))){var b=c.charAt(m);m++}else b=p,0===w&&k(Zj);if(b!==p){if(40===c.charCodeAt(m)){var d=Ug;m++}else d=p,0===w&&k(Vg);if(d!==p)if(d=q(),d!==p){if(41===c.charCodeAt(m)){var e=Wg;m++}else e=p,0===w&&k(Xg);e!==p?(F= a,a=b={type:"processSubstitution",readWrite:b,commands:d}):(m=a,a=u)}else m=a,a=u;else m=a,a=u}else m=a,a=u}w--;a===p&&0===w&&k(oe);return a}function ha(){var a=m;var b=[];var c=R();if(c!==p)for(;c!==p;)b.push(c),c=R();else b=u;b!==p&&(F=a,b=Hb(b));return b}function R(){var a=m;if(92===c.charCodeAt(m)){var b=Yg;m++}else b=p,0===w&&k(Zg);if(b!==p){var d=C();d!==p?(F=a,a=d):(m=a,a=u)}else m=a,a=u;a===p&&(b=a=m,w++,d=C(),w--,d===p?b=Ha:(m=b,b=u),b!==p?(c.length>m?(d=c.charAt(m),m++):(d=p,0===w&&k(Za)), d!==p?(F=a,a=d):(m=a,a=u)):(m=a,a=u));return a}function C(){if(ak.test(c.charAt(m))){var a=c.charAt(m);m++}else a=p,0===w&&k(bk);return a}function H(){var a;var b=m;var d=[];for(a=R();a!==p;)d.push(a),a=R();if(d!==p){a=[];42===c.charCodeAt(m)?(d=$g,m++):(d=p,0===w&&k(ah));d===p&&(63===c.charCodeAt(m)?(d=xe,m++):(d=p,0===w&&k(ye)),d===p&&(d=qa(),d===p&&(d=V())));if(d!==p)for(;d!==p;)a.push(d),42===c.charCodeAt(m)?(d=$g,m++):(d=p,0===w&&k(ah)),d===p&&(63===c.charCodeAt(m)?(d=xe,m++):(d=p,0===w&&k(ye)), d===p&&(d=qa(),d===p&&(d=V())));else a=u;if(a!==p){d=[];for(a=R();a!==p;)d.push(a),a=R();d!==p?(F=b,b=d={type:"glob",value:c.substring(F,m)}):(m=b,b=u)}else m=b,b=u}else m=b,b=u;return b}function qa(){var a;var b=a=m;if(91===c.charCodeAt(m)){var d=zg;m++}else d=p,0===w&&k(Ag);if(d!==p){var e=m;w++;if(45===c.charCodeAt(m)){var f=$c;m++}else f=p,0===w&&k(ad);w--;f===p?e=Ha:(m=e,e=u);if(e!==p)if(c.length>m?(f=c.charAt(m),m++):(f=p,0===w&&k(Za)),f!==p){if(45===c.charCodeAt(m)){var g=$c;m++}else g=p,0=== w&&k(ad);if(g!==p){var h=m;w++;if(45===c.charCodeAt(m)){var l=$c;m++}else l=p,0===w&&k(ad);w--;l===p?h=Ha:(m=h,h=u);if(h!==p)if(c.length>m?(l=c.charAt(m),m++):(l=p,0===w&&k(Za)),l!==p){if(93===c.charCodeAt(m)){var n=ck;m++}else n=p,0===w&&k(dk);n!==p?b=d=[d,e,f,g,h,l,n]:(m=b,b=u)}else m=b,b=u;else m=b,b=u}else m=b,b=u}else m=b,b=u;else m=b,b=u}else m=b,b=u;b!==p&&(b=c.substring(a,m));return b}function V(){var a;var b=a=m;if(c.length>m){var d=c.charAt(m);m++}else d=p,0===w&&k(Za);d===p&&(d=Ga);if(d!== p){var e=m;w++;if(36===c.charCodeAt(m)){var f=ze;m++}else f=p,0===w&&k(Ae);w--;f===p?e=Ha:(m=e,e=u);e!==p?b=d=[d,e]:(m=b,b=u)}else m=b,b=u;if(b!==p)if(123===c.charCodeAt(m)?(d=ek,m++):(d=p,0===w&&k(fk)),d!==p){e=[];f=R();if(f!==p)for(;f!==p;)e.push(f),f=R();else e=u;e!==p?(125===c.charCodeAt(m)?(f=bh,m++):(f=p,0===w&&k(ch)),f!==p?a=b=[b,d,e,f]:(m=a,a=u)):(m=a,a=u)}else m=a,a=u;else m=a,a=u;return a}function ra(){var a=m;if(39===c.charCodeAt(m)){var b=Be;m++}else b=p,0===w&&k(Ce);if(b!==p){b=m;var d= [];if(dh.test(c.charAt(m))){var e=c.charAt(m);m++}else e=p,0===w&&k(eh);for(;e!==p;)d.push(e),dh.test(c.charAt(m))?(e=c.charAt(m),m++):(e=p,0===w&&k(eh));d!==p&&(d=c.substring(b,m));b=d;b!==p?(39===c.charCodeAt(m)?(d=Be,m++):(d=p,0===w&&k(Ce)),d!==p?(F=a,a=b=Hb(b)):(m=a,a=u)):(m=a,a=u)}else m=a,a=u;return a}function I(){var a=m;if(34===c.charCodeAt(m)){var b=bd;m++}else b=p,0===w&&k(cd);if(b!==p){b=[];var e=ja();if(e===p){e=[];var f=sa();if(f!==p)for(;f!==p;)e.push(f),f=sa();else e=u}for(;e!==p;)if(b.push(e), e=ja(),e===p)if(e=[],f=sa(),f!==p)for(;f!==p;)e.push(f),f=sa();else e=u;b!==p?(34===c.charCodeAt(m)?(e=bd,m++):(e=p,0===w&&k(cd)),e!==p?(F=a,a=b=d(b)):(m=a,a=u)):(m=a,a=u)}else m=a,a=u;return a}function sa(){var a=m;if(92===c.charCodeAt(m)){var b=Yg;m++}else b=p,0===w&&k(Zg);if(b!==p){var d=ta();d!==p?(F=a,a=d):(m=a,a=u)}else m=a,a=u;a===p&&(a=m,c.substr(m,2)===dd?(b=dd,m+=2):(b=p,0===w&&k(fh)),b!==p&&(F=a,b="\\"),a=b,a===p&&(b=a=m,w++,d=ta(),w--,d===p?b=Ha:(m=b,b=u),b!==p?(c.length>m?(d=c.charAt(m), m++):(d=p,0===w&&k(Za)),d!==p?(F=a,a=d):(m=a,a=u)):(m=a,a=u)));return a}function ta(){if(34===c.charCodeAt(m)){var a=bd;m++}else a=p,0===w&&k(cd);a===p&&(36===c.charCodeAt(m)?(a=ze,m++):(a=p,0===w&&k(Ae)),a===p&&(96===c.charCodeAt(m)?(a=vc,m++):(a=p,0===w&&k(wc))));return a}function ja(){var a=ma();a===p&&(a=Fa(),a===p&&(a=xa()));return a}function Fa(){var a=m;if(36===c.charCodeAt(m)){var b=ze;m++}else b=p,0===w&&k(Ae);b!==p?(b=Sa(),b===p&&(63===c.charCodeAt(m)?(b=xe,m++):(b=p,0===w&&k(ye))),b!== p?(F=a,a=b={type:"variable",name:b}):(m=a,a=u)):(m=a,a=u);return a}function Sa(){var a=m;var b=[];if(gh.test(c.charAt(m))){var d=c.charAt(m);m++}else d=p,0===w&&k(hh);if(d!==p)for(;d!==p;)b.push(d),gh.test(c.charAt(m))?(d=c.charAt(m),m++):(d=p,0===w&&k(hh));else b=u;b!==p&&(F=a,b=c.substring(F,m));return b}function xa(){var a=m;if(c.substr(m,2)===ed){var b=ed;m+=2}else b=p,0===w&&k(ih);if(b!==p){b=[];if(jh.test(c.charAt(m))){var d=c.charAt(m);m++}else d=p,0===w&&k(kh);for(;d!==p;)b.push(d),jh.test(c.charAt(m))? (d=c.charAt(m),m++):(d=p,0===w&&k(kh));b!==p?(125===c.charCodeAt(m)?(d=bh,m++):(d=p,0===w&&k(ch)),d!==p?(F=a,a=b={type:"variableSubstitution",expression:b.join("")}):(m=a,a=u)):(m=a,a=u)}else m=a,a=u;return a}function ma(){var b=m;if(c.substr(m,2)===fd){var d=fd;m+=2}else d=p,0===w&&k(lh);if(d!==p)if(d=q(),d!==p){if(41===c.charCodeAt(m)){var e=Wg;m++}else e=p,0===w&&k(Xg);e!==p?(F=b,b=d={type:"commandSubstitution",commands:d}):(m=b,b=u)}else m=b,b=u;else m=b,b=u;if(b===p)if(b=m,96===c.charCodeAt(m)? (d=vc,m++):(d=p,0===w&&k(wc)),d!==p){d=[];e=P();if(e!==p)for(;e!==p;)d.push(e),e=P();else d=u;d!==p?(96===c.charCodeAt(m)?(e=vc,m++):(e=p,0===w&&k(wc)),e!==p?(F=b,b=d={type:"commandSubstitution",commands:a(d.join(""))}):(m=b,b=u)):(m=b,b=u)}else m=b,b=u;return b}function P(){var a=m;if(c.substr(m,2)===mh){var b=mh;m+=2}else b=p,0===w&&k(gk);b!==p&&(F=a,b="`");a=b;if(a===p&&(a=m,c.substr(m,2)===dd?(b=dd,m+=2):(b=p,0===w&&k(fh)),b!==p&&(F=a,b="\\"),a=b,a===p)){b=a=m;w++;if(96===c.charCodeAt(m)){var d= vc;m++}else d=p,0===w&&k(wc);w--;d===p?b=Ha:(m=b,b=u);b!==p?(c.length>m?(d=c.charAt(m),m++):(d=p,0===w&&k(Za)),d!==p?(F=a,a=d):(m=a,a=u)):(m=a,a=u)}return a}function ya(){var a=m;var b=ua();b===p&&(b=Ga);if(b!==p){if(c.substr(m,2)===gd){var d=gd;m+=2}else d=p,0===w&&k(nh);d===p&&(c.substr(m,2)===hd?(d=hd,m+=2):(d=p,0===w&&k(oh)));if(d!==p){var e=ua();if(e!==p){if(45===c.charCodeAt(m)){var f=$c;m++}else f=p,0===w&&k(ad);f!==p?(F=a,a=b,null==a&&(a="<"==d[0]?0:1),a=b={type:"moveFd",fd:a,op:d,dest:e}): (m=a,a=u)}else m=a,a=u}else m=a,a=u}else m=a,a=u;d=a;if(d===p){a=m;b=ua();b===p&&(b=Ga);if(b!==p)if(c.substr(m,2)===gd?(d=gd,m+=2):(d=p,0===w&&k(nh)),d===p&&(c.substr(m,2)===hd?(d=hd,m+=2):(d=p,0===w&&k(oh))),d!==p){f=[];for(e=J();e!==p;)f.push(e),e=J();f!==p?(e=ua(),e!==p?(F=a,a=b,null==a&&(a="<"==d[0]?0:1),a=b={type:"duplicateFd",srcFd:a,op:d,destFd:e}):(m=a,a=u)):(m=a,a=u)}else m=a,a=u;else m=a,a=u;d=a;if(d===p)if(d=m,e=ua(),e===p&&(e=Ga),e!==p)if(60===c.charCodeAt(m)?(a=hk,m++):(a=p,0===w&&k(ik)), a===p&&(62===c.charCodeAt(m)?(a=jk,m++):(a=p,0===w&&k(kk)),a===p&&(c.substr(m,2)===ph?(a=ph,m+=2):(a=p,0===w&&k(lk)),a===p&&(c.substr(m,2)===qh?(a=qh,m+=2):(a=p,0===w&&k(mk)),a===p&&(c.substr(m,2)===rh?(a=rh,m+=2):(a=p,0===w&&k(nk)),a===p&&(c.substr(m,3)===sh?(a=sh,m+=3):(a=p,0===w&&k(ok))))))),a!==p){f=[];for(b=J();b!==p;)f.push(b),b=J();f!==p?(b=M(),b!==p?(F=d,d=e,null==d&&(d="<"==a[0]?0:1),d=e={type:"redirectFd",fd:d,op:a,filename:b}):(m=d,d=u)):(m=d,d=u)}else m=d,d=u;else m=d,d=u}return d}function ua(){var a= m;var b=[];if(th.test(c.charAt(m))){var d=c.charAt(m);m++}else d=p,0===w&&k(uh);if(d!==p)for(;d!==p;)b.push(d),th.test(c.charAt(m))?(d=c.charAt(m),m++):(d=p,0===w&&k(uh));else b=u;b!==p&&(F=a,b=parseInt(b.join(""),10));return b}function J(){if(32===c.charCodeAt(m)){var a=pk;m++}else a=p,0===w&&k(qk);a===p&&(9===c.charCodeAt(m)?(a=rk,m++):(a=p,0===w&&k(sk)));return a}function G(){var a=J();a===p&&(10===c.charCodeAt(m)?(a=qc,m++):(a=p,0===w&&k(rc)));return a}function da(){var a=m;if(c.substr(m,5)=== Sb){var b=Sb;m+=5}else b=p,0===w&&k(Rc);b===p&&(c.substr(m,5)===Ub?(b=Ub,m+=5):(b=p,0===w&&k(sc)),b===p&&(c.substr(m,3)===vh?(b=vh,m+=3):(b=p,0===w&&k(tk)),b===p&&(c.substr(m,4)===Pc?(b=Pc,m+=4):(b=p,0===w&&k(gb)),b===p&&(c.substr(m,2)===Z?(b=Z,m+=2):(b=p,0===w&&k(tc)),b===p&&(c.substr(m,4)===wh?(b=wh,m+=4):(b=p,0===w&&k(uk)),b===p&&(c.substr(m,4)===xh?(b=xh,m+=4):(b=p,0===w&&k(vk)),b===p&&(c.substr(m,2)===Xa?(b=Xa,m+=2):(b=p,0===w&&k(hb)),b===p&&(c.substr(m,4)===Tb?(b=Tb,m+=4):(b=p,0===w&&k(Ya)), b===p&&(c.substr(m,4)===ib?(b=ib,m+=4):(b=p,0===w&&k(xg)),b===p&&(c.substr(m,4)===Uc?(b=Uc,m+=4):(b=p,0===w&&k(yg)),b===p&&(c.substr(m,2)===Sc?(b=Sc,m+=2):(b=p,0===w&&k(Tc)),b===p&&(c.substr(m,2)===Vc?(b=Vc,m+=2):(b=p,0===w&&k(Bg))))))))))))));if(b!==p){var d=[];var e=G();if(e!==p)for(;e!==p;)d.push(e),e=G();else d=u;d===p&&(d=m,w++,c.length>m?(e=c.charAt(m),m++):(e=p,0===w&&k(Za)),w--,e===p?d=Ha:(m=d,d=u));d!==p?a=b=[b,d]:(m=a,a=u)}else m=a,a=u;return a}function Hb(a){return{type:"literal",value:Tg(a)? a.join(""):a}}function Ed(a){return a[0]}function Fd(a){return a[1]}function ia(a){for(var b=[a[0]],c=a.length,d=a[0],e,f=1;fm){var e=c.charAt(m); m++}else e=p,0===w&&k(Za);for(;e!==p;)d.push(e),c.length>m?(e=c.charAt(m),m++):(e=p,0===w&&k(Za));d!==p?a=b=[b,d]:(m=a,a=u)}else m=a,a=u;return a}},Ia=r,u=p,Dc={type:"other",description:"a list of statements"},Ga=null,dc="&&",Bc={type:"literal",value:"&&",description:'"&&"'},ec="||",Ac={type:"literal",value:"||",description:'"||"'},Gd="&",Cc={type:"literal",value:"&",description:'"&"'},Hd=";",Qc={type:"literal",value:";",description:'";"'},qc="\n",rc={type:"literal",value:"\n",description:'"\\n"'}, ne={type:"other",description:"a single command"},Sb="while",Rc={type:"literal",value:"while",description:'"while"'},Ub="until",sc={type:"literal",value:"until",description:'"until"'},Z="do",tc={type:"literal",value:"do",description:'"do"'},Pc="done",gb={type:"literal",value:"done",description:'"done"'},Xa="if",hb={type:"literal",value:"if",description:'"if"'},Tb="then",Ya={type:"literal",value:"then",description:'"then"'},ib="else",xg={type:"literal",value:"else",description:'"else"'},Sc="fi",Tc= {type:"literal",value:"fi",description:'"fi"'},Uc="elif",yg={type:"literal",value:"elif",description:'"elif"'},Cj="=",Dj={type:"literal",value:"=",description:'"="'},Ej={type:"other",description:"command name"},Ha=void 0,zg="[",Ag={type:"literal",value:"[",description:'"["'},Vc="[[",Bg={type:"literal",value:"[[",description:'"[["'},oe={type:"other",description:"command argument"},Yg="\\",Zg={type:"literal",value:"\\",description:'"\\\\"'},Za={type:"any",description:"any character"},ak=/^[$"';&<>\n()[*?|` ]/, bk={type:"class",value:"[$\"';&<>\\n()[*?|` ]",description:"[$\"';&<>\\n()[*?|` ]"},$g="*",ah={type:"literal",value:"*",description:'"*"'},xe="?",ye={type:"literal",value:"?",description:'"?"'},$c="-",ad={type:"literal",value:"-",description:'"-"'},ck="]",dk={type:"literal",value:"]",description:'"]"'},ze="$",Ae={type:"literal",value:"$",description:'"$"'},ek="{",fk={type:"literal",value:"{",description:'"{"'},bh="}",ch={type:"literal",value:"}",description:'"}"'},Be="'",Ce={type:"literal",value:"'", description:'"\'"'},dh=/^[^']/,eh={type:"class",value:"[^']",description:"[^']"},bd='"',cd={type:"literal",value:'"',description:'"\\""'},dd="\\\\",fh={type:"literal",value:"\\\\",description:'"\\\\\\\\"'},vc="`",wc={type:"literal",value:"`",description:'"`"'},gh=/^[a-zA-Z0-9_]/,hh={type:"class",value:"[a-zA-Z0-9_]",description:"[a-zA-Z0-9_]"},ed="${",ih={type:"literal",value:"${",description:'"${"'},jh=/^[^}]/,kh={type:"class",value:"[^}]",description:"[^}]"},fd="$(",lh={type:"literal",value:"$(", description:'"$("'},Wg=")",Xg={type:"literal",value:")",description:'")"'},mh="\\`",gk={type:"literal",value:"\\`",description:'"\\\\`"'},Yj=/^[<>]/,Zj={type:"class",value:"[<>]",description:"[<>]"},Ug="(",Vg={type:"literal",value:"(",description:'"("'},Wj="|",Xj={type:"literal",value:"|",description:'"|"'},gd="<&",nh={type:"literal",value:"<&",description:'"<&"'},hd=">&",oh={type:"literal",value:">&",description:'">&"'},hk="<",ik={type:"literal",value:"<",description:'"<"'},jk=">",kk={type:"literal", value:">",description:'">"'},ph=">|",lk={type:"literal",value:">|",description:'">|"'},qh="&>",mk={type:"literal",value:"&>",description:'"&>"'},rh=">>",nk={type:"literal",value:">>",description:'">>"'},sh="&>>",ok={type:"literal",value:"&>>",description:'"&>>"'},th=/^[0-9]/,uh={type:"class",value:"[0-9]",description:"[0-9]"},pk=" ",qk={type:"literal",value:" ",description:'" "'},rk="\t",sk={type:"literal",value:"\t",description:'"\\t"'},vh="for",tk={type:"literal",value:"for",description:'"for"'}, wh="case",uk={type:"literal",value:"case",description:'"case"'},xh="esac",vk={type:"literal",value:"esac",description:'"esac"'},m=0,F=0,uc=0,ve={line:1,column:1,seenCR:!1},Zc=0,we=[],w=0;if("startRule"in qb){if(!(qb.startRule in za))throw Error("Can't start parsing from rule \""+qb.startRule+'".');Ia=za[qb.startRule]}var Tg=Jh,Yc=Kh;var De=Ia();if(De!==p&&m===c.length)return De;De!==p&&mb.description?1:0});b=b.length&&(b=void 0);return{value:b&&b[c++],done:!b}}}} function Uh(b,a){var c="function"===typeof Symbol&&b[Symbol.iterator];if(!c)return b;b=c.call(b);var d,e=[];try{for(;(void 0===a||0b;++b)Zh[b]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[b],$h["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(b)]=b;$h[45]=62;$h[95]=63} function di(b,a,c){for(var d=[],e=a;e>18&63]+Zh[a>>12&63]+Zh[a>>6&63]+Zh[a&63]);return d.join("")}function ei(b){bi||ci();for(var a=b.length,c=a%3,d="",e=[],g=0,f=a-c;gf?f:g+16383));1===c?(b=b[a-1],d+=Zh[b>>2],d+=Zh[b<<4&63],d+="=="):2===c&&(b=(b[a-2]<<8)+b[a-1],d+=Zh[b>>10],d+=Zh[b>>4&63],d+=Zh[b<<2&63],d+="=");e.push(d);return e.join("")} function fi(b,a,c,d,e){var g=8*e-d-1,f=(1<>1,k=-7;e=c?e-1:0;var r=c?-1:1,q=b[a+e];e+=r;c=q&(1<<-k)-1;q>>=-k;for(k+=g;0>=-k;for(k+=d;0>1,q=23===e?Math.pow(2,-24)-Math.pow(2,-77):0;g=d?0:g-1;var t=d?1:-1,v=0>a||0===a&&0>1/a?1:0;a=Math.abs(a);for(isNaN(a)||Infinity===a?(a=isNaN(a)?1:0,d=k):(d=Math.floor(Math.log(a)/Math.LN2),1>a*(f=Math.pow(2,-d))&&(d--,f*=2),a=1<=d+r?a+q/f:a+q*Math.pow(2,1-r),2<=a*f&&(d++,f/=2),d+r>=k?(a=0,d=k):1<=d+r?(a=(a*f-1)*Math.pow(2,e),d+=r):(a=a*Math.pow(2,r-1)*Math.pow(2,e),d=0));8<=e;b[c+g]=a&255,g+=t,a/=256,e-=8);d=d<c||a.byteLengthb)throw new RangeError('"size" argument must not be negative');}T.alloc=function(b,a,c){qi(b);return b=0>=b?ki(null,b):void 0!==a?"string"===typeof c?ki(null,b).fill(a,c):ki(null,b).fill(a):ki(null,b)};function li(b,a){qi(a);b=ki(b,0>a?0:ri(a)|0);if(!T.TYPED_ARRAY_SUPPORT)for(var c=0;ca.length?0:ri(a.length)|0;b=ki(b,c);for(var d=0;d=(T.TYPED_ARRAY_SUPPORT?2147483647:1073741823))throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+(T.TYPED_ARRAY_SUPPORT?2147483647:1073741823).toString(16)+" bytes");return b|0}T.isBuffer=ti;function si(b){return!(null==b||!b._isBuffer)} T.compare=function(b,a){if(!si(b)||!si(a))throw new TypeError("Arguments must be Buffers");if(b===a)return 0;for(var c=b.length,d=a.length,e=0,g=Math.min(c,d);e>>1;case "base64":return vi(b).length; default:if(d)return ui(b).length;a=(""+a).toLowerCase();d=!0}}T.byteLength=oi; function wi(b,a,c){var d=!1;if(void 0===a||0>a)a=0;if(a>this.length)return"";if(void 0===c||c>this.length)c=this.length;if(0>=c)return"";c>>>=0;a>>>=0;if(c<=a)return"";for(b||(b="utf8");;)switch(b){case "hex":b=a;a=c;c=this.length;if(!b||0>b)b=0;if(!a||0>a||a>c)a=c;d="";for(c=b;cd?"0"+d.toString(16):d.toString(16),d=b+d;return d;case "utf8":case "utf-8":return xi(this,a,c);case "ascii":b="";for(c=Math.min(this.length,c);a"}; T.prototype.compare=function(b,a,c,d,e){if(!si(b))throw new TypeError("Argument must be a Buffer");void 0===a&&(a=0);void 0===c&&(c=b?b.length:0);void 0===d&&(d=0);void 0===e&&(e=this.length);if(0>a||c>b.length||0>d||e>this.length)throw new RangeError("out of range index");if(d>=e&&a>=c)return 0;if(d>=e)return-1;if(a>=c)return 1;a>>>=0;c>>>=0;d>>>=0;e>>>=0;if(this===b)return 0;var g=e-d,f=c-a,h=Math.min(g,f);d=this.slice(d,e);b=b.slice(a,c);for(a=0;ac&&(c=-2147483648);c=+c;isNaN(c)&&(c=e?0:b.length-1);0>c&&(c=b.length+c);if(c>=b.length){if(e)return-1;c=b.length-1}else if(0>c)if(e)c=0;else return-1;"string"===typeof a&&(a=T.from(a,d));if(si(a))return 0===a.length?-1:Ai(b,a,c,d,e);if("number"===typeof a)return a&=255,T.TYPED_ARRAY_SUPPORT&&"function"===typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(b,a,c): Uint8Array.prototype.lastIndexOf.call(b,a,c):Ai(b,[a],c,d,e);throw new TypeError("val must be string, number or Buffer");} function Ai(b,a,c,d,e){function g(a,b){return 1===f?a[b]:a.readUInt16BE(b*f)}var f=1,h=b.length,k=a.length;if(void 0!==d&&(d=String(d).toLowerCase(),"ucs2"===d||"ucs-2"===d||"utf16le"===d||"utf-16le"===d)){if(2>b.length||2>a.length)return-1;f=2;h/=2;k/=2;c/=2}if(e)for(d=-1;ch&&(c=h-k);0<=c;c--){h=!0;for(d=0;de)c=e;if(0c||0>a)||a>this.length)throw new RangeError("Attempt to write outside buffer bounds");d||(d="utf8");for(e=!1;;)switch(d){case "hex":a:{a= Number(a)||0;d=this.length-a;c?(c=Number(c),c>d&&(c=d)):c=d;d=b.length;if(0!==d%2)throw new TypeError("Invalid hex string");c>d/2&&(c=d/2);for(d=0;d(e-=2));++f){var h=d.charCodeAt(f);b=h>>8;h%=256;g.push(h);g.push(b)}return Bi(g,this,a,c);default:if(e)throw new TypeError("Unknown encoding: "+d);d=(""+d).toLowerCase();e=!0}};T.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}}; function xi(b,a,c){c=Math.min(b.length,c);for(var d=[];ae&&(g=e);break;case 2:var h=b[a+1];128===(h&192)&&(e=(e&31)<<6|h&63,127e||57343e&&(g= e))}null===g?(g=65533,f=1):65535>>10&1023|55296),g=56320|g&1023);d.push(g);a+=f}b=d.length;if(b<=Di)d=String.fromCharCode.apply(String,d);else{c="";for(a=0;ab?(b+=c,0>b&&(b=0)):b>c&&(b=c);0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c);ab)throw new RangeError("offset is not uint");if(b+a>c)throw new RangeError("Trying to access beyond buffer length");} T.prototype.readUIntLE=function(b,a,c){b|=0;a|=0;c||Ei(b,a,this.length);c=this[b];for(var d=1,e=0;++e=128*d&&(c-=Math.pow(2,8*a));return c};T.prototype.readIntBE=function(b,a,c){b|=0;a|=0;c||Ei(b,a,this.length);c=a;for(var d=1,e=this[b+--c];0=128*d&&(e-=Math.pow(2,8*a));return e};T.prototype.readInt8=function(b,a){a||Ei(b,1,this.length);return this[b]&128?-1*(255-this[b]+1):this[b]}; T.prototype.readInt16LE=function(b,a){a||Ei(b,2,this.length);b=this[b]|this[b+1]<<8;return b&32768?b|4294901760:b};T.prototype.readInt16BE=function(b,a){a||Ei(b,2,this.length);b=this[b+1]|this[b]<<8;return b&32768?b|4294901760:b};T.prototype.readInt32LE=function(b,a){a||Ei(b,4,this.length);return this[b]|this[b+1]<<8|this[b+2]<<16|this[b+3]<<24};T.prototype.readInt32BE=function(b,a){a||Ei(b,4,this.length);return this[b]<<24|this[b+1]<<16|this[b+2]<<8|this[b+3]}; T.prototype.readFloatLE=function(b,a){a||Ei(b,4,this.length);return fi(this,b,!0,23,4)};T.prototype.readFloatBE=function(b,a){a||Ei(b,4,this.length);return fi(this,b,!1,23,4)};T.prototype.readDoubleLE=function(b,a){a||Ei(b,8,this.length);return fi(this,b,!0,52,8)};T.prototype.readDoubleBE=function(b,a){a||Ei(b,8,this.length);return fi(this,b,!1,52,8)}; function Fi(b,a,c,d,e,g){if(!si(b))throw new TypeError('"buffer" argument must be a Buffer instance');if(a>e||ab.length)throw new RangeError("Index out of range");}T.prototype.writeUIntLE=function(b,a,c,d){b=+b;a|=0;c|=0;d||Fi(this,b,a,c,Math.pow(2,8*c)-1,0);d=1;var e=0;for(this[a]=b&255;++ea&&(a=65535+a+1);for(var e=0,g=Math.min(b.length-c,2);e>>8*(d?e:1-e)} T.prototype.writeUInt16LE=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,2,65535,0);T.TYPED_ARRAY_SUPPORT?(this[a]=b&255,this[a+1]=b>>>8):Gi(this,b,a,!0);return a+2};T.prototype.writeUInt16BE=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,2,65535,0);T.TYPED_ARRAY_SUPPORT?(this[a]=b>>>8,this[a+1]=b&255):Gi(this,b,a,!1);return a+2};function Hi(b,a,c,d){0>a&&(a=4294967295+a+1);for(var e=0,g=Math.min(b.length-c,4);e>>8*(d?e:3-e)&255} T.prototype.writeUInt32LE=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,4,4294967295,0);T.TYPED_ARRAY_SUPPORT?(this[a+3]=b>>>24,this[a+2]=b>>>16,this[a+1]=b>>>8,this[a]=b&255):Hi(this,b,a,!0);return a+4};T.prototype.writeUInt32BE=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,4,4294967295,0);T.TYPED_ARRAY_SUPPORT?(this[a]=b>>>24,this[a+1]=b>>>16,this[a+2]=b>>>8,this[a+3]=b&255):Hi(this,b,a,!1);return a+4}; T.prototype.writeIntLE=function(b,a,c,d){b=+b;a|=0;d||(d=Math.pow(2,8*c-1),Fi(this,b,a,c,d-1,-d));d=0;var e=1,g=0;for(this[a]=b&255;++db&&0===g&&0!==this[a+d-1]&&(g=1),this[a+d]=(b/e>>0)-g&255;return a+c};T.prototype.writeIntBE=function(b,a,c,d){b=+b;a|=0;d||(d=Math.pow(2,8*c-1),Fi(this,b,a,c,d-1,-d));d=c-1;var e=1,g=0;for(this[a+d]=b&255;0<=--d&&(e*=256);)0>b&&0===g&&0!==this[a+d+1]&&(g=1),this[a+d]=(b/e>>0)-g&255;return a+c}; T.prototype.writeInt8=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,1,127,-128);T.TYPED_ARRAY_SUPPORT||(b=Math.floor(b));0>b&&(b=255+b+1);this[a]=b&255;return a+1};T.prototype.writeInt16LE=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,2,32767,-32768);T.TYPED_ARRAY_SUPPORT?(this[a]=b&255,this[a+1]=b>>>8):Gi(this,b,a,!0);return a+2};T.prototype.writeInt16BE=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,2,32767,-32768);T.TYPED_ARRAY_SUPPORT?(this[a]=b>>>8,this[a+1]=b&255):Gi(this,b,a,!1);return a+2}; T.prototype.writeInt32LE=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,4,2147483647,-2147483648);T.TYPED_ARRAY_SUPPORT?(this[a]=b&255,this[a+1]=b>>>8,this[a+2]=b>>>16,this[a+3]=b>>>24):Hi(this,b,a,!0);return a+4};T.prototype.writeInt32BE=function(b,a,c){b=+b;a|=0;c||Fi(this,b,a,4,2147483647,-2147483648);0>b&&(b=4294967295+b+1);T.TYPED_ARRAY_SUPPORT?(this[a]=b>>>24,this[a+1]=b>>>16,this[a+2]=b>>>8,this[a+3]=b&255):Hi(this,b,a,!1);return a+4}; function Ii(b,a,c,d){if(c+d>b.length)throw new RangeError("Index out of range");if(0>c)throw new RangeError("Index out of range");}T.prototype.writeFloatLE=function(b,a,c){c||Ii(this,b,a,4);gi(this,b,a,!0,23,4);return a+4};T.prototype.writeFloatBE=function(b,a,c){c||Ii(this,b,a,4);gi(this,b,a,!1,23,4);return a+4};T.prototype.writeDoubleLE=function(b,a,c){c||Ii(this,b,a,8);gi(this,b,a,!0,52,8);return a+8};T.prototype.writeDoubleBE=function(b,a,c){c||Ii(this,b,a,8);gi(this,b,a,!1,52,8);return a+8}; T.prototype.copy=function(b,a,c,d){c||(c=0);d||0===d||(d=this.length);a>=b.length&&(a=b.length);a||(a=0);0a)throw new RangeError("targetStart out of bounds");if(0>c||c>=this.length)throw new RangeError("sourceStart out of bounds");if(0>d)throw new RangeError("sourceEnd out of bounds");d>this.length&&(d=this.length);b.length-ae|| !T.TYPED_ARRAY_SUPPORT)for(d=0;de&&(b=e)}if(void 0!==d&&"string"!==typeof d)throw new TypeError("encoding must be a string");if("string"===typeof d&&!T.isEncoding(d))throw new TypeError("Unknown encoding: "+d);}else"number"===typeof b&&(b&=255);if(0>a||this.length>>= 0;c=void 0===c?this.length:c>>>0;b||(b=0);if("number"===typeof b)for(d=a;dc){if(!e){if(56319c){-1<(a-=3)&&g.push(239,191,189);e=c;continue}c=(e-55296<<10|c-56320)+65536}else e&&-1<(a-=3)&&g.push(239,191,189);e=null;if(128>c){if(0>--a)break;g.push(c)}else if(2048>c){if(0>(a-=2))break;g.push(c>>6|192,c&63|128)}else if(65536>c){if(0>(a-=3))break; g.push(c>>12|224,c>>6&63|128,c&63|128)}else if(1114112>c){if(0>(a-=4))break;g.push(c>>18|240,c>>12&63|128,c>>6&63|128,c&63|128)}else throw Error("Invalid code point");}return g}function Ci(b){for(var a=[],c=0;cb.length)b="";else for(;0!==b.length%4;)b+="=";bi||ci();var a=b.length;if(0>16&255;d[g++]=f>>8&255;d[g++]=f&255}2===c?(f=$h[b.charCodeAt(a)]<<2|$h[b.charCodeAt(a+ 1)]>>4,d[g++]=f&255):1===c&&(f=$h[b.charCodeAt(a)]<<10|$h[b.charCodeAt(a+1)]<<4|$h[b.charCodeAt(a+2)]>>2,d[g++]=f>>8&255,d[g++]=f&255);return d}function Bi(b,a,c,d){for(var e=0;e=a.length||e>=b.length);++e)a[e+c]=b[e];return e}function ti(b){return null!=b&&(!!b._isBuffer||Ki(b)||"function"===typeof b.readFloatLE&&"function"===typeof b.slice&&Ki(b.slice(0,0)))}function Ki(b){return!!b.constructor&&"function"===typeof b.constructor.isBuffer&&b.constructor.isBuffer(b)} var Li=Object.freeze({__proto__:null,INSPECT_MAX_BYTES:50,kMaxLength:ji,Buffer:T,SlowBuffer:function(b){+b!=b&&(b=0);return T.alloc(+b)},isBuffer:ti}),U=T,Mi="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof window?window:"undefined"!==typeof pa?pa:"undefined"!==typeof self?self:{};function Ni(b,a){return a={exports:{}},b(a,a.exports),a.exports}function Oi(){throw Error("setTimeout has not been defined");}function Pi(){throw Error("clearTimeout has not been defined");}var Qi=Oi,Ri=Pi; "function"===typeof Yh.setTimeout&&(Qi=setTimeout);"function"===typeof Yh.clearTimeout&&(Ri=clearTimeout);function Si(b){if(Qi===setTimeout)return setTimeout(b,0);if((Qi===Oi||!Qi)&&setTimeout)return Qi=setTimeout,setTimeout(b,0);try{return Qi(b,0)}catch(a){try{return Qi.call(null,b,0)}catch(c){return Qi.call(this,b,0)}}} function Ti(b){if(Ri===clearTimeout)return clearTimeout(b);if((Ri===Pi||!Ri)&&clearTimeout)return Ri=clearTimeout,clearTimeout(b);try{return Ri(b)}catch(a){try{return Ri.call(null,b)}catch(c){return Ri.call(this,b)}}}var Ui=[],Vi=!1,Wi,Xi=-1;function Yi(){Vi&&Wi&&(Vi=!1,Wi.length?Ui=Wi.concat(Ui):Xi=-1,Ui.length&&Zi())}function Zi(){if(!Vi){var b=Si(Yi);Vi=!0;for(var a=Ui.length;a;){Wi=Ui;for(Ui=[];++Xia&&(c--,a+=1E9));return[c,a]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-ej)/1E3}},gj=Ni(function(b,a){function c(a,b){for(var c in a)b[c]=a[c]}function d(a,b,c){return e(a,b,c)}var e=Li.Buffer;e.from&&e.alloc&&e.allocUnsafe&&e.allocUnsafeSlow?b.exports=Li:(c(Li,a),a.Buffer=d);d.prototype=Object.create(e.prototype);c(e,d);d.from=function(a,b,c){if("number"===typeof a)throw new TypeError("Argument must not be a number"); return e(a,b,c)};d.alloc=function(a,b,c){if("number"!==typeof a)throw new TypeError("Argument must be a number");a=e(a);void 0!==b?"string"===typeof c?a.fill(b,c):a.fill(b):a.fill(0);return a};d.allocUnsafe=function(a){if("number"!==typeof a)throw new TypeError("Argument must be a number");return e(a)};d.allocUnsafeSlow=function(a){if("number"!==typeof a)throw new TypeError("Argument must be a number");return Li.SlowBuffer(a)}}),hj=Ni(function(b,a){function c(){throw Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11"); }function d(a,b){if("number"!==typeof a||a!==a)throw new TypeError("offset must be a number");if(a>t||0>a)throw new TypeError("offset must be a uint32");if(a>r||a>b)throw new RangeError("offset out of range");}function e(a,b,c){if("number"!==typeof a||a!==a)throw new TypeError("size must be a number");if(a>t||0>a)throw new TypeError("size must be a uint32");if(a+b>c||a>r)throw new RangeError("buffer too small");}function g(a,b,c,g){if(!(k.isBuffer(a)||a instanceof Mi.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); if("function"===typeof b)g=b,b=0,c=a.length;else if("function"===typeof c)g=c,c=a.length-b;else if("function"!==typeof g)throw new TypeError('"cb" argument must be a function');d(b,a.length);e(c,b,a.length);return f(a,b,c,g)}function f(a,b,c,d){b=new Uint8Array(a.buffer,b,c);q.getRandomValues(b);if(d)$i(function(){d(null,a)});else return a}function h(a,b,c){"undefined"===typeof b&&(b=0);if(!(k.isBuffer(a)||a instanceof Mi.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); d(b,a.length);void 0===c&&(c=a.length-b);e(c,b,a.length);return f(a,b,c)}var k=gj.Buffer,r=gj.kMaxLength,q=Mi.crypto||Mi.msCrypto,t=Math.pow(2,32)-1;q&&q.getRandomValues?(a.randomFill=g,a.randomFillSync=h):(a.randomFill=c,a.randomFillSync=c)}),ij=Ni(function(b){b.exports=hj}).randomFillSync,jj=Math.floor(.001*(Date.now()-performance.now()));function kj(b){if("string"!==typeof b)throw new TypeError("Path must be a string. Received "+JSON.stringify(b));} function lj(b,a){for(var c="",d=0,e=-1,g=0,f,h=0;h<=b.length;++h){if(hc.length||2!==d||46!==c.charCodeAt(c.length-1)||46!==c.charCodeAt(c.length-2))if(2h){if(47=== a.charCodeAt(g+r))return a.slice(g+r+1);if(0===r)return a.slice(g+r)}else e>h&&(47===b.charCodeAt(c+r)?k=r:0===r&&(k=0));break}var q=b.charCodeAt(c+r),t=a.charCodeAt(g+r);if(q!==t)break;else 47===q&&(k=r)}e="";for(r=c+k+1;r<=d;++r)if(r===d||47===b.charCodeAt(r))e=0===e.length?e+"..":e+"/..";if(0=e;--r)if(c=b.charCodeAt(r),47===c){if(!k){f=r+1;break}}else-1===h&&(k=!1,h=r+1),46=== c?-1===g?g=r:1!==q&&(q=1):-1!==g&&(q=-1);-1===g||-1===h||0===q||1===q&&g===h-1&&g===f+1?-1!==h&&(a.base=0===f&&d?a.name=b.slice(1,h):a.name=b.slice(f,h)):(0===f&&d?(a.name=b.slice(1,g),a.base=b.slice(1,h)):(a.name=b.slice(f,g),a.base=b.slice(f,h)),a.ext=b.slice(g,h));0a&&(c--,a+=1E9));return[c,a]}),exit:function(b){throw new pj(b);},kill:function(b){throw new qj(b);},randomFillSync:ij,isTTY:function(){return!0},path:oj,fs:null},W,sj=S(1),tj=S(2),uj=S(4),vj=S(8),wj=S(16),xj=S(32),yj=S(64),zj=S(128),Aj=S(256),Bj=S(512),Fj=S(1024),Gj=S(2048),Hj=S(4096),Ij=S(8192),Jj=S(16384),Kj=S(32768),Lj=S(65536),Mj=S(131072),Nj=S(262144),Oj=S(524288),Pj=S(1048576), Qj=S(2097152),Rj=S(4194304),Sj=S(8388608),Tj=S(16777216),Uj=S(33554432),Vj=S(67108864),wk=S(134217728),xk=S(268435456),yk=sj|tj|uj|vj|wj|xj|yj|zj|Aj|Bj|Fj|Gj|Hj|Ij|Jj|Kj|Lj|Mj|Nj|Oj|Pj|Qj|Sj|Rj|Tj|Vj|Uj|wk|xk,zk=sj|tj|uj|vj|wj|xj|yj|zj|Aj|Qj|Rj|Sj|wk,Ak=S(0),Bk=vj|wj|zj|Bj|Fj|Gj|Hj|Ij|Jj|Kj|Lj|Mj|Nj|Oj|Pj|Qj|Sj|Tj|Vj|Uj|wk,Ck=Bk|zk,Dk=tj|vj|yj|Qj|wk|xk,Ek=tj|vj|yj|Qj|wk,Fk=S(0),Gk={E2BIG:1,EACCES:2,EADDRINUSE:3,EADDRNOTAVAIL:4,EAFNOSUPPORT:5,EALREADY:7,EAGAIN:6,EBADF:8,EBADMSG:9,EBUSY:10,ECANCELED:11, ECHILD:12,ECONNABORTED:13,ECONNREFUSED:14,ECONNRESET:15,EDEADLOCK:16,EDESTADDRREQ:17,EDOM:18,EDQUOT:19,EEXIST:20,EFAULT:21,EFBIG:22,EHOSTDOWN:23,EHOSTUNREACH:23,EIDRM:24,EILSEQ:25,EINPROGRESS:26,EINTR:27,EINVAL:28,EIO:29,EISCONN:30,EISDIR:31,ELOOP:32,EMFILE:33,EMLINK:34,EMSGSIZE:35,EMULTIHOP:36,ENAMETOOLONG:37,ENETDOWN:38,ENETRESET:39,ENETUNREACH:40,ENFILE:41,ENOBUFS:42,ENODEV:43,ENOENT:44,ENOEXEC:45,ENOLCK:46,ENOLINK:47,ENOMEM:48,ENOMSG:49,ENOPROTOOPT:50,ENOSPC:51,ENOSYS:52,ENOTCONN:53,ENOTDIR:54, ENOTEMPTY:55,ENOTRECOVERABLE:56,ENOTSOCK:57,ENOTTY:59,ENXIO:60,EOVERFLOW:61,EOWNERDEAD:62,EPERM:63,EPIPE:64,EPROTO:65,EPROTONOSUPPORT:66,EPROTOTYPE:67,ERANGE:68,EROFS:69,ESPIPE:70,ESRCH:71,ESTALE:72,ETIMEDOUT:73,ETXTBSY:74,EXDEV:75},Hk=(W={},W[6]="SIGHUP",W[8]="SIGINT",W[11]="SIGQUIT",W[7]="SIGILL",W[15]="SIGTRAP",W[0]="SIGABRT",W[2]="SIGBUS",W[5]="SIGFPE",W[9]="SIGKILL",W[20]="SIGUSR1",W[12]="SIGSEGV",W[21]="SIGUSR2",W[10]="SIGPIPE",W[1]="SIGALRM",W[14]="SIGTERM",W[3]="SIGCHLD",W[4]="SIGCONT",W[13]= "SIGSTOP",W[16]="SIGTSTP",W[17]="SIGTTIN",W[18]="SIGTTOU",W[19]="SIGURG",W[23]="SIGXCPU",W[24]="SIGXFSZ",W[22]="SIGVTALRM",W),Ik=sj|tj|wj|zj|Qj|wk,Jk=sj|yj|wj|zj|Qj|wk;function Kk(b){var a=Math.trunc(b);b=S(Math.round(1E6*(b-a)));return S(a)*S(1E6)+b}function Lk(b){"number"===typeof b&&(b=Math.trunc(b));b=S(b);return Number(b/S(1E6))} function Y(b){return function(){for(var a=[],c=0;ca.rights.base||(a.rights.inheriting|c)>a.rights.inheriting)return 63;a.rights.base= b;a.rights.inheriting=c;return 0}),fd_filestat_get:Y(function(a,b){a=d(a,Qj);var c=t.fstatSync(a.real);f.refreshMemory();f.view.setBigUint64(b,S(c.dev),!0);b+=8;f.view.setBigUint64(b,S(c.ino),!0);b+=8;f.view.setUint8(b,a.filetype);b+=8;f.view.setBigUint64(b,S(c.nlink),!0);b+=8;f.view.setBigUint64(b,S(c.size),!0);b+=8;f.view.setBigUint64(b,Kk(c.atimeMs),!0);b+=8;f.view.setBigUint64(b,Kk(c.mtimeMs),!0);f.view.setBigUint64(b+8,Kk(c.ctimeMs),!0);return 0}),fd_filestat_set_size:Y(function(a,b){a=d(a,Rj); t.ftruncateSync(a.real,Number(b));return 0}),fd_filestat_set_times:Y(function(a,c,e,f){a=d(a,Sj);var g=t.fstatSync(a.real),h=g.atime;g=g.mtime;var k=Lk(b(0));if(3===(f&3)||12===(f&12))return 28;1===(f&1)?h=Lk(c):2===(f&2)&&(h=k);4===(f&4)?g=Lk(e):8===(f&8)&&(g=k);t.futimesSync(a.real,new Date(h),new Date(g));return 0}),fd_prestat_get:Y(function(a,b){a=d(a,S(0));if(!a.path)return 28;f.refreshMemory();f.view.setUint8(b,0);f.view.setUint32(b+4,U.byteLength(a.fakePath),!0);return 0}),fd_prestat_dir_name:Y(function(a, b,c){a=d(a,S(0));if(!a.path)return 28;f.refreshMemory();U.from(f.memory.buffer).write(a.fakePath,b,c,"utf8");return 0}),fd_pwrite:Y(function(a,b,c,g,h){var k=d(a,yj|uj),l=0;e(b,c).forEach(function(a){for(var b=0;bc)break;f.view.setBigUint64(b,S(e+1),!0);b+=8;if(b-k>c)break;var q=t.statSync(v.resolve(a.path,l.name));f.view.setBigUint64(b,S(q.ino),!0);b+=8;if(b-k>c)break;f.view.setUint32(b,n,!0);b+=4;if(b-k>c)break;switch(!0){case q.isBlockDevice():q=1;break;case q.isCharacterDevice():q=2;break;case q.isDirectory():q=3;break;case q.isFIFO():q=6;break;case q.isFile():q=4;break;case q.isSocket():q= 6;break;case q.isSymbolicLink():q=7;break;default:q=0}f.view.setUint8(b,q);b+=1;b+=3;if(b+n>=k+c)break;U.from(f.memory.buffer).write(l.name,b);b+=n}f.view.setUint32(g,Math.min(b-k,c),!0);return 0}),fd_renumber:Y(function(a,b){d(a,S(0));d(b,S(0));t.closeSync(f.FD_MAP.get(a).real);f.FD_MAP.set(a,f.FD_MAP.get(b));f.FD_MAP.delete(b);return 0}),fd_seek:Y(function(a,b,c,e){a=d(a,uj);f.refreshMemory();switch(c){case 1:a.offset=(a.offset?a.offset:S(0))+S(b);break;case 2:c=t.fstatSync(a.real).size;a.offset= S(c)+S(b);break;case 0:a.offset=S(b)}f.view.setBigUint64(e,a.offset,!0);return 0}),fd_tell:Y(function(a,b){a=d(a,xj);f.refreshMemory();a.offset||(a.offset=S(0));f.view.setBigUint64(b,a.offset,!0);return 0}),fd_sync:Y(function(a){a=d(a,wj);t.fsyncSync(a.real);return 0}),path_create_directory:Y(function(a,b,c){a=d(a,Bj);if(!a.path)return 28;f.refreshMemory();b=U.from(f.memory.buffer,b,c).toString();t.mkdirSync(v.resolve(a.path,b));return 0}),path_filestat_get:Y(function(a,b,c,e,g){a=d(a,Nj);if(!a.path)return 28; f.refreshMemory();c=U.from(f.memory.buffer,c,e).toString();c=t.statSync(v.resolve(a.path,c));f.view.setBigUint64(g,S(c.dev),!0);g+=8;f.view.setBigUint64(g,S(c.ino),!0);g+=8;f.view.setUint8(g,Ok(f,void 0,c).filetype);g+=8;f.view.setBigUint64(g,S(c.nlink),!0);g+=8;f.view.setBigUint64(g,S(c.size),!0);g+=8;f.view.setBigUint64(g,Kk(c.atimeMs),!0);g+=8;f.view.setBigUint64(g,Kk(c.mtimeMs),!0);f.view.setBigUint64(g+8,Kk(c.ctimeMs),!0);return 0}),path_filestat_set_times:Y(function(a,c,e,g,h,k,l){a=d(a,Pj); if(!a.path)return 28;f.refreshMemory();var n=t.fstatSync(a.real);c=n.atime;n=n.mtime;var q=Lk(b(0));if(3===(l&3)||12===(l&12))return 28;1===(l&1)?c=Lk(h):2===(l&2)&&(c=q);4===(l&4)?n=Lk(k):8===(l&8)&&(n=q);e=U.from(f.memory.buffer,e,g).toString();t.utimesSync(v.resolve(a.path,e),new Date(c),new Date(n));return 0}),path_link:Y(function(a,b,c,e,g,h,k){a=d(a,Gj);g=d(g,Hj);if(!a.path||!g.path)return 28;f.refreshMemory();c=U.from(f.memory.buffer,c,e).toString();h=U.from(f.memory.buffer,h,k).toString(); t.linkSync(v.resolve(a.path,c),v.resolve(g.path,h));return 0}),path_open:Y(function(a,b,c,e,g,h,k,l,n){b=d(a,Ij);h=S(h);k=S(k);a=(h&(tj|Jj))!==S(0);var q=(h&(sj|yj|Aj|Rj))!==S(0);if(q&&a)var r=t.constants.O_RDWR;else a?r=t.constants.O_RDONLY:q&&(r=t.constants.O_WRONLY);a=h|Ij;h|=k;0!==(g&1)&&(r|=t.constants.O_CREAT,a|=Fj);0!==(g&2)&&(r|=t.constants.O_DIRECTORY);0!==(g&4)&&(r|=t.constants.O_EXCL);0!==(g&8)&&(r|=t.constants.O_TRUNC,a|=Oj);0!==(l&1)&&(r|=t.constants.O_APPEND);0!==(l&2)&&(r=t.constants.O_DSYNC? r|t.constants.O_DSYNC:r|t.constants.O_SYNC,h|=sj);0!==(l&4)&&(r|=t.constants.O_NONBLOCK);0!==(l&8)&&(r=t.constants.O_RSYNC?r|t.constants.O_RSYNC:r|t.constants.O_SYNC,h|=wj);0!==(l&16)&&(r|=t.constants.O_SYNC,h|=wj);q&&0===(r&(t.constants.O_APPEND|t.constants.O_TRUNC))&&(h|=uj);f.refreshMemory();c=U.from(f.memory.buffer,c,e).toString();c=v.resolve(b.path,c);if(v.relative(b.path,c).startsWith(".."))return 76;try{var y=t.realpathSync(c);if(v.relative(b.path,y).startsWith(".."))return 76}catch(P){if("ENOENT"=== P.code)y=c;else throw P;}try{var C=t.statSync(y).isDirectory()}catch(P){}r=!q&&C?t.openSync(y,t.constants.O_RDONLY):t.openSync(y,r);C=Vh(f.FD_MAP.keys()).reverse()[0]+1;f.FD_MAP.set(C,{real:r,filetype:void 0,rights:{base:a,inheriting:h},path:y});Nk(f,C);f.view.setUint32(n,C,!0);return 0}),path_readlink:Y(function(a,b,c,e,g,h){a=d(a,Kj);if(!a.path)return 28;f.refreshMemory();b=U.from(f.memory.buffer,b,c).toString();b=v.resolve(a.path,b);b=t.readlinkSync(b);e=U.from(f.memory.buffer).write(b,e,g);f.view.setUint32(h, e,!0);return 0}),path_remove_directory:Y(function(a,b,c){a=d(a,Uj);if(!a.path)return 28;f.refreshMemory();b=U.from(f.memory.buffer,b,c).toString();t.rmdirSync(v.resolve(a.path,b));return 0}),path_rename:Y(function(a,b,c,e,g,h){a=d(a,Lj);e=d(e,Mj);if(!a.path||!e.path)return 28;f.refreshMemory();b=U.from(f.memory.buffer,b,c).toString();g=U.from(f.memory.buffer,g,h).toString();t.renameSync(v.resolve(a.path,b),v.resolve(e.path,g));return 0}),path_symlink:Y(function(a,b,c,e,g){c=d(c,Tj);if(!c.path)return 28; f.refreshMemory();a=U.from(f.memory.buffer,a,b).toString();e=U.from(f.memory.buffer,e,g).toString();t.symlinkSync(a,v.resolve(c.path,e));return 0}),path_unlink_file:Y(function(a,b,c){a=d(a,Vj);if(!a.path)return 28;f.refreshMemory();b=U.from(f.memory.buffer,b,c).toString();t.unlinkSync(v.resolve(a.path,b));return 0}),poll_oneoff:function(a,c,d,e){var g=0,h=0;f.refreshMemory();for(var k=0;kh?n:h);f.view.setBigUint64(c,l,!0);c+=8;f.view.setUint16(c,t,!0);c+=2;f.view.setUint8(c,0);c+=1;c+=5;g+=1;break;case 1:case 2:a+=3;f.view.getUint32(a,!0);a+=4;f.view.setBigUint64(c,l,!0);c+=8;f.view.setUint16(c,52,!0);c+=2;f.view.setUint8(c,n);c+=1;c+=5;g+=1;break;default:return 28}}for(f.view.setUint32(e, g,!0);q.hrtime() "+e);return e}catch(I){throw console.log("Catched error: "+I),I;}}})}b.prototype.refreshMemory=function(){this.view&&0!==this.view.buffer.byteLength||(this.view=new Xh(this.memory.buffer))};b.prototype.setMemory=function(a){this.memory=a};b.prototype.start=function(a){a=a.exports;if(null===a||"object"!==typeof a)throw Error("instance.exports must be an Object. Received "+ a+".");var b=a.memory;if(!(b instanceof WebAssembly.Memory))throw Error("instance.exports.memory must be a WebAssembly.Memory. Recceived "+b+".");this.setMemory(b);a._start&&a._start()};b.prototype.getImportNamespace=function(a){var b,d=null;try{for(var e=Th(WebAssembly.Module.imports(a)),g=e.next();!g.done;g=e.next()){var f=g.value;if("function"===f.kind&&f.module.startsWith("wasi_"))if(!d)d=f.module;else if(d!==f.module)throw Error("Multiple namespaces detected.");}}catch(k){var h={error:k}}finally{try{g&& !g.done&&(b=e.return)&&b.call(e)}finally{if(h)throw h.error;}}return d};b.prototype.getImports=function(a){switch(this.getImportNamespace(a)){case "wasi_unstable":return{wasi_unstable:this.wasiImport};case "wasi_snapshot_preview1":return{wasi_snapshot_preview1:this.wasiImport};default:throw Error("Can't detect a WASI namespace for the WebAssembly Module");}};b.defaultBindings=rj;return b}(),Qk=function(){function b(a){this.options=a}b.prototype.run=function(){return rg(this,void 0,void 0,function(){return sg(this, function(){throw Error("run not implemented by the Command subclass");})})};return b}(),Rk=function(b){function a(a){var c=b.call(this,a)||this;if(!a.module)throw Error("Did not find a WebAssembly.Module for the WASI Command");return c}pg(a,b);a.prototype.run=function(a){return rg(this,void 0,void 0,function(){var b,c,g,f;return sg(this,function(d){switch(d.label){case 0:return b={preopens:qg({".":".","/":"/"},this.options.preopens||{}),env:this.options.env,args:this.options.args,bindings:qg(qg({}, Pk.defaultBindings),{fs:a.fs})},c=new Pk(b),g=this.options.module,[4,WebAssembly.instantiate(g,qg({},c.getImports(g)))];case 1:return f=d.sent(),c.start(f),[2]}})})};return a}(Qk),Sk=function(b){function a(a){var c=b.call(this,a)||this;if(!a.callback)throw Error("The Command Options provided are not for a Callback Command");c.callback=a.callback;return c}pg(a,b);a.prototype.run=function(a){return rg(this,void 0,void 0,function(){var b;return sg(this,function(c){switch(c.label){case 0:return[4,Promise.resolve(this.callback(this.options, a))];case 1:return b=c.sent(),"string"==typeof b&&a.fs.writeFileSync("/dev/stdout",(new TextEncoder).encode(b+"\n")),[2]}})})};return a}(Qk),Tk=function(){function b(a,b,d,e,g,f,h,k,r){var c=this;this.stdinPrompt="";this.commandOptions=a;this.wasmFs=new mg;this.wasmFs.fromJSON(b);this.originalWasmFsJson=b;this.ioDevices=new Qh(this.wasmFs);this.ioDeviceWindow=f;this.ioDevices.setWindowSizeCallback(function(){var a=c.ioDevices.getWindowSize();c.ioDeviceWindow.resize(a[0],a[1])});this.ioDevices.setBufferIndexDisplayCallback(function(){var a= c.ioDevices.getFrameBuffer();c.ioDeviceWindow.drawRgbaArrayToFrameBuffer(a)});this.ioDevices.setInputCallback(function(){if(c.sharedIoDeviceInput){c.ioDeviceWindow.getInputBuffer();Atomics.wait(c.sharedIoDeviceInput,0,-1);var a=c.sharedIoDeviceInput[0];c.sharedIoDeviceInput[0]=-1;if(0<~]))/g, ""):"";return a.length};b.prototype.stdinRead=function(a){if(0!==this.readStdinCounter%2)return this.readStdinCounter++,0;if(this.pipedStdin){var b=this.pipedStdin;this.pipedStdin="";this.readStdinCounter++}else if(this.sharedStdin&&this.startStdinReadCallback){this.startStdinReadCallback();Atomics.wait(this.sharedStdin,0,-1);b=this.sharedStdin[0];this.sharedStdin[0]=-1;for(var d=new Uint8Array(b),e=0;e\n html, body {\n width: 100%;\n height: 100%;\n }\n\n body {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n margin: 0px;\n margin-left: auto;\n margin-right: auto;\n }\n\n #io-device-framebuffer {\n\n width: 100%;\n height: auto;\n\n /* Will Keep pixel art looking good */\n image-rendering: pixelated;\n image-rendering: -moz-crisp-edges;\n image-rendering: crisp-edges;\n }\n \n \n ';this.popupWindow.document.head.innerHTML="\n Wasmer Experimental Framebuffer\n ";this.popupCanvas=this.popupWindow.document.querySelector("#io-device-framebuffer");this.popupCanvasContext=this.popupCanvas.getContext("2d");this.popupImageData=this.popupCanvasContext.getImageData(0,0,a,b);this.popupWindow.document.addEventListener("keydown",this._eventListenerKeydown.bind(this));this.popupWindow.document.addEventListener("keyup",this._eventListenerKeyup.bind(this)); this.popupWindow.document.addEventListener("mousemove",this._eventListenerMousemove.bind(this));this.popupWindow.document.addEventListener("click",this._eventListenerClick.bind(this))};b.prototype._append32BitIntToByteArray=function(a,b){for(var c=0;4>c;c++){var e=a;e&=255<<8*c;e>>=8*c;b.push(e)}};b.prototype._eventListenerKeydown=function(a){a.preventDefault();this.popupKeyCodes.includes(a.keyCode)||this.popupKeyCodes.push(a.keyCode)};b.prototype._eventListenerKeyup=function(a){a.preventDefault(); a=this.popupKeyCodes.indexOf(a.keyCode);-1=d&&a.x<=e&&(h=a.x-d);a.y>=g&&a.y<=f&&(k=a.y-g);if(void 0!==h&&void 0!==k)return{x:this.popupCanvas.width/b.width*h,y:this.popupCanvas.height/b.height*k}}};return b}();function Vk(b){return b&&("[object Function]"===Object.prototype.toString.call(b)||"function"===typeof b||b instanceof Function)} var Wk,Xk=function(){function b(a,b,d,e,g){this.wasmTerminalConfig=a;this.commandString=b;this.commandStartReadCallback=d;this.commandEndCallback=e;g&&(this.wasmTty=g);this.commandOptionsForProcessesToRun=[];this.spawnedProcessObjects=[];this.spawnedProcesses=0;this.pipedStdinDataForNextProcess=new Uint8Array;this.isRunning=!1;this.supportsSharedArrayBuffer=this.wasmTerminalConfig.processWorkerUrl&&window.SharedArrayBuffer&&window.Atomics}b.prototype.runCommand=function(){return rg(this,void 0,void 0, function(){var a,b,d;return sg(this,function(c){switch(c.label){case 0:a=Mh(this.commandString),c.label=1;case 1:c.trys.push([1,3,,4]);if(1this.spawnedProcesses&&2>this.spawnedProcessObjects.length&&aa+1&&(d=void 0!==this.commandOptionsForProcessesToRun[a+1].callback),this.supportsSharedArrayBuffer&&!d&&this._tryToSpawnProcess(a+1),[2]}})})};b.prototype._spawnProcessAsWorker=function(a){return rg(this,void 0,void 0,function(){var b,d,e,g,f,h,k,r,q,t;return sg(this,function(c){switch(c.label){case 0:if(!this.wasmTerminalConfig.processWorkerUrl)throw Error("Terminal Config missing the Process Worker URL"); b=this.wasmTerminalConfig.processWorkerUrl;b="data:application/javascript;base64,LyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCiAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCiAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULgoKICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwogICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJ3VzZSBzdHJpY3QnOyhmdW5jdGlvbigpe2Z1bmN0aW9uIG1jKGMsYT1zZWxmKXthLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZCl7aWYoZCYmZC5kYXRhKXt2YXIge2lkOmYsdHlwZTpnLHBhdGg6aH09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZC5kYXRhKSxrPShkLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEZhKTt0cnl7bGV0IGE9aC5zbGljZSgwLC0xKS5yZWR1Y2UoKGEsYyk9PmFbY10sYyksZT1oLnJlZHVjZSgoYSxjKT0+YVtjXSxjKTtzd2l0Y2goZyl7Y2FzZSAwOnZhciB0PWU7YnJlYWs7Y2FzZSAxOmFbaC5zbGljZSgtMSlbMF1dPUZhKGQuZGF0YS52YWx1ZSk7dD0hMDticmVhaztjYXNlIDI6dD1lLmFwcGx5KGEsayk7YnJlYWs7Y2FzZSAzOntsZXQgYT1uZXcgZSguLi5rKTt0PU9iamVjdC5hc3NpZ24oYSx7W3ZkXTohMH0pfWJyZWFrO2Nhc2UgNDp7bGV0IHtwb3J0MTphLHBvcnQyOmR9PW5ldyBNZXNzYWdlQ2hhbm5lbDttYyhjLGQpO3Q9CkNmKGEsW2FdKX1icmVhaztjYXNlIDU6dD12b2lkIDB9fWNhdGNoKHEpe3Q9cSxuYy5hZGQocSl9UHJvbWlzZS5yZXNvbHZlKHQpLmNhdGNoKGE9PntuYy5hZGQoYSk7cmV0dXJuIGF9KS50aGVuKGM9PntsZXQgW2QsaF09b2MoYyk7YS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZCkse2lkOmZ9KSxoKTs1PT09ZyYmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksIk1lc3NhZ2VQb3J0Ij09PWEuY29uc3RydWN0b3IubmFtZSYmYS5jbG9zZSgpKX0pfX0pO2Euc3RhcnQmJmEuc3RhcnQoKX1mdW5jdGlvbiBEYihjKXtpZihjKXRocm93IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKTt9ZnVuY3Rpb24gcGMoYyxhPVtdLGI9ZnVuY3Rpb24oKXt9KXtsZXQgZD0hMSxlPW5ldyBQcm94eShiLHtnZXQoYixnKXtEYihkKTtpZihnPT09RGYpcmV0dXJuKCk9PlRhKGMse3R5cGU6NSxwYXRoOmEubWFwKGE9PgphLnRvU3RyaW5nKCkpfSkudGhlbigoKT0+eyJNZXNzYWdlUG9ydCI9PT1jLmNvbnN0cnVjdG9yLm5hbWUmJmMuY2xvc2UoKTtkPSEwfSk7aWYoInRoZW4iPT09Zyl7aWYoMD09PWEubGVuZ3RoKXJldHVybnt0aGVuOigpPT5lfTtiPVRhKGMse3R5cGU6MCxwYXRoOmEubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKEZhKTtyZXR1cm4gYi50aGVuLmJpbmQoYil9cmV0dXJuIHBjKGMsWy4uLmEsZ10pfSxzZXQoYixlLGgpe0RiKGQpO2NvbnN0IFtmLGddPW9jKGgpO3JldHVybiBUYShjLHt0eXBlOjEscGF0aDpbLi4uYSxlXS5tYXAoYT0+YS50b1N0cmluZygpKSx2YWx1ZTpmfSxnKS50aGVuKEZhKX0sYXBwbHkoYixlLGgpe0RiKGQpO2I9YVthLmxlbmd0aC0xXTtpZihiPT09RWYpcmV0dXJuIFRhKGMse3R5cGU6NH0pLnRoZW4oRmEpO2lmKCJiaW5kIj09PWIpcmV0dXJuIHBjKGMsYS5zbGljZSgwLC0xKSk7Y29uc3QgW2YsZ109d2QoaCk7cmV0dXJuIFRhKGMse3R5cGU6MixwYXRoOmEubWFwKGE9PgphLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpmfSxnKS50aGVuKEZhKX0sY29uc3RydWN0KGIsZSl7RGIoZCk7Y29uc3QgW2YsZ109d2QoZSk7cmV0dXJuIFRhKGMse3R5cGU6MyxwYXRoOmEubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OmZ9LGcpLnRoZW4oRmEpfX0pO3JldHVybiBlfWZ1bmN0aW9uIHdkKGMpe2M9Yy5tYXAob2MpO3JldHVybltjLm1hcChhPT5hWzBdKSxBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGMubWFwKGE9PmFbMV0pKV19ZnVuY3Rpb24gQ2YoYyxhKXt4ZC5zZXQoYyxhKTtyZXR1cm4gY31mdW5jdGlvbiBvYyhjKXtmb3IobGV0IFthLGJdb2YgeWQpaWYoYi5jYW5IYW5kbGUoYykpe2xldCBbZCxlXT1iLnNlcmlhbGl6ZShjKTtyZXR1cm5be3R5cGU6MyxuYW1lOmEsdmFsdWU6ZH0sZV19cmV0dXJuW3t0eXBlOjAsdmFsdWU6Y30seGQuZ2V0KGMpfHxbXV19ZnVuY3Rpb24gRmEoYyl7c3dpdGNoKGMudHlwZSl7Y2FzZSAzOnJldHVybiB5ZC5nZXQoYy5uYW1lKS5kZXNlcmlhbGl6ZShjLnZhbHVlKTsKY2FzZSAwOnJldHVybiBjLnZhbHVlfX1mdW5jdGlvbiBUYShjLGEsYil7cmV0dXJuIG5ldyBQcm9taXNlKGQ9PntsZXQgZT1GZigpO2MuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaChhKXthLmRhdGEmJmEuZGF0YS5pZCYmYS5kYXRhLmlkPT09ZSYmKGMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaCksZChhLmRhdGEpKX0pO2Muc3RhcnQmJmMuc3RhcnQoKTtjLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmV9LGEpLGIpfSl9ZnVuY3Rpb24gRmYoKXtyZXR1cm4gQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gemQoYyxhKXtmdW5jdGlvbiBiKCl7dGhpcy5jb25zdHJ1Y3Rvcj1jfXFjKGMsYSk7Yy5wcm90b3R5cGU9bnVsbD09PWE/T2JqZWN0LmNyZWF0ZShhKTooYi5wcm90b3R5cGU9YS5wcm90b3R5cGUsCm5ldyBiKX1mdW5jdGlvbiBFYihjLGEsYixkKXtyZXR1cm4gbmV3IChifHwoYj1Qcm9taXNlKSkoZnVuY3Rpb24oZSxmKXtmdW5jdGlvbiBnKGEpe3RyeXtrKGQubmV4dChhKSl9Y2F0Y2gocSl7ZihxKX19ZnVuY3Rpb24gaChhKXt0cnl7ayhkWyJ0aHJvdyJdKGEpKX1jYXRjaChxKXtmKHEpfX1mdW5jdGlvbiBrKGEpe2EuZG9uZT9lKGEudmFsdWUpOihuZXcgYihmdW5jdGlvbihjKXtjKGEudmFsdWUpfSkpLnRoZW4oZyxoKX1rKChkPWQuYXBwbHkoYyxhfHxbXSkpLm5leHQoKSl9KX1mdW5jdGlvbiBGYihjLGEpe2Z1bmN0aW9uIGIoYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBkKFthLGNdKX19ZnVuY3Rpb24gZChiKXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2U7KXRyeXtpZihmPTEsZyYmKGg9YlswXSYyP2dbInJldHVybiJdOmJbMF0/Z1sidGhyb3ciXXx8KChoPWdbInJldHVybiJdKSYmaC5jYWxsKGcpLAowKTpnLm5leHQpJiYhKGg9aC5jYWxsKGcsYlsxXSkpLmRvbmUpcmV0dXJuIGg7aWYoZz0wLGgpYj1bYlswXSYyLGgudmFsdWVdO3N3aXRjaChiWzBdKXtjYXNlIDA6Y2FzZSAxOmg9YjticmVhaztjYXNlIDQ6cmV0dXJuIGUubGFiZWwrKyx7dmFsdWU6YlsxXSxkb25lOiExfTtjYXNlIDU6ZS5sYWJlbCsrO2c9YlsxXTtiPVswXTtjb250aW51ZTtjYXNlIDc6Yj1lLm9wcy5wb3AoKTtlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKGg9ZS50cnlzLGg9MDxoLmxlbmd0aCYmaFtoLmxlbmd0aC0xXSkmJig2PT09YlswXXx8Mj09PWJbMF0pKXtlPTA7Y29udGludWV9aWYoMz09PWJbMF0mJighaHx8YlsxXT5oWzBdJiZiWzFdPGhbM10pKWUubGFiZWw9YlsxXTtlbHNlIGlmKDY9PT1iWzBdJiZlLmxhYmVsPGhbMV0pZS5sYWJlbD1oWzFdLGg9YjtlbHNlIGlmKGgmJmUubGFiZWw8aFsyXSllLmxhYmVsPWhbMl0sZS5vcHMucHVzaChiKTtlbHNle2hbMl0mJmUub3BzLnBvcCgpO2UudHJ5cy5wb3AoKTsKY29udGludWV9fWI9YS5jYWxsKGMsZSl9Y2F0Y2gocSl7Yj1bNixxXSxnPTB9ZmluYWxseXtmPWg9MH1pZihiWzBdJjUpdGhyb3cgYlsxXTtyZXR1cm57dmFsdWU6YlswXT9iWzFdOnZvaWQgMCxkb25lOiEwfX12YXIgZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoaFswXSYxKXRocm93IGhbMV07cmV0dXJuIGhbMV19LHRyeXM6W10sb3BzOltdfSxmLGcsaCxrO3JldHVybiBrPXtuZXh0OmIoMCksInRocm93IjpiKDEpLCJyZXR1cm4iOmIoMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoa1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxrfWZ1bmN0aW9uIEdmKGMsYSxiLGQpe3JldHVybiBuZXcgKGJ8fChiPVByb21pc2UpKShmdW5jdGlvbihlLGYpe2Z1bmN0aW9uIGcoYSl7dHJ5e2soZC5uZXh0KGEpKX1jYXRjaChxKXtmKHEpfX1mdW5jdGlvbiBoKGEpe3RyeXtrKGRbInRocm93Il0oYSkpfWNhdGNoKHEpe2YocSl9fWZ1bmN0aW9uIGsoYSl7YS5kb25lPwplKGEudmFsdWUpOihuZXcgYihmdW5jdGlvbihjKXtjKGEudmFsdWUpfSkpLnRoZW4oZyxoKX1rKChkPWQuYXBwbHkoYyxhfHxbXSkpLm5leHQoKSl9KX1mdW5jdGlvbiBIZihjLGEpe2Z1bmN0aW9uIGIoYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBkKFthLGNdKX19ZnVuY3Rpb24gZChiKXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2U7KXRyeXtpZihmPTEsZyYmKGg9YlswXSYyP2dbInJldHVybiJdOmJbMF0/Z1sidGhyb3ciXXx8KChoPWdbInJldHVybiJdKSYmaC5jYWxsKGcpLDApOmcubmV4dCkmJiEoaD1oLmNhbGwoZyxiWzFdKSkuZG9uZSlyZXR1cm4gaDtpZihnPTAsaCliPVtiWzBdJjIsaC52YWx1ZV07c3dpdGNoKGJbMF0pe2Nhc2UgMDpjYXNlIDE6aD1iO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5sYWJlbCsrLHt2YWx1ZTpiWzFdLGRvbmU6ITF9O2Nhc2UgNTplLmxhYmVsKys7Zz1iWzFdO2I9WzBdOwpjb250aW51ZTtjYXNlIDc6Yj1lLm9wcy5wb3AoKTtlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKGg9ZS50cnlzLGg9MDxoLmxlbmd0aCYmaFtoLmxlbmd0aC0xXSkmJig2PT09YlswXXx8Mj09PWJbMF0pKXtlPTA7Y29udGludWV9aWYoMz09PWJbMF0mJighaHx8YlsxXT5oWzBdJiZiWzFdPGhbM10pKWUubGFiZWw9YlsxXTtlbHNlIGlmKDY9PT1iWzBdJiZlLmxhYmVsPGhbMV0pZS5sYWJlbD1oWzFdLGg9YjtlbHNlIGlmKGgmJmUubGFiZWw8aFsyXSllLmxhYmVsPWhbMl0sZS5vcHMucHVzaChiKTtlbHNle2hbMl0mJmUub3BzLnBvcCgpO2UudHJ5cy5wb3AoKTtjb250aW51ZX19Yj1hLmNhbGwoYyxlKX1jYXRjaChxKXtiPVs2LHFdLGc9MH1maW5hbGx5e2Y9aD0wfWlmKGJbMF0mNSl0aHJvdyBiWzFdO3JldHVybnt2YWx1ZTpiWzBdP2JbMV06dm9pZCAwLGRvbmU6ITB9fXZhciBlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihoWzBdJjEpdGhyb3cgaFsxXTtyZXR1cm4gaFsxXX0sCnRyeXM6W10sb3BzOltdfSxmLGcsaCxrO3JldHVybiBrPXtuZXh0OmIoMCksInRocm93IjpiKDEpLCJyZXR1cm4iOmIoMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoa1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxrfWZ1bmN0aW9uIHJjKGMpe3ZhciBhPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZjW1N5bWJvbC5pdGVyYXRvcl0sYj0wO3JldHVybiBhP2EuY2FsbChjKTp7bmV4dDpmdW5jdGlvbigpe2MmJmI+PWMubGVuZ3RoJiYoYz12b2lkIDApO3JldHVybnt2YWx1ZTpjJiZjW2IrK10sZG9uZTohY319fX1mdW5jdGlvbiBJZihjLGEpe3ZhciBiPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZjW1N5bWJvbC5pdGVyYXRvcl07aWYoIWIpcmV0dXJuIGM7Yz1iLmNhbGwoYyk7dmFyIGQsZT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09YXx8MDxhLS0pJiYhKGQ9Yy5uZXh0KCkpLmRvbmU7KWUucHVzaChkLnZhbHVlKX1jYXRjaChnKXt2YXIgZj0Ke2Vycm9yOmd9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihiPWNbInJldHVybiJdKSYmYi5jYWxsKGMpfWZpbmFsbHl7aWYoZil0aHJvdyBmLmVycm9yO319cmV0dXJuIGV9ZnVuY3Rpb24gSmYoKXtmb3IodmFyIGM9W10sYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspYz1jLmNvbmNhdChJZihhcmd1bWVudHNbYV0pKTtyZXR1cm4gY31mdW5jdGlvbiBRKGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCJkZWZhdWx0Iik/Y1siZGVmYXVsdCJdOmN9ZnVuY3Rpb24gSyhjLGEpe3JldHVybiBhPXtleHBvcnRzOnt9fSxjKGEsYS5leHBvcnRzKSxhLmV4cG9ydHN9ZnVuY3Rpb24gQWQoKXtzYz0hMDtmb3IodmFyIGM9MDs2ND5jOysrYylSW2NdPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIltjXSxIWyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5jaGFyQ29kZUF0KGMpXT0KYztIWzQ1XT02MjtIWzk1XT02M31mdW5jdGlvbiBLZihjLGEsYil7Zm9yKHZhciBkPVtdLGU9YTtlPGI7ZSs9MylhPShjW2VdPDwxNikrKGNbZSsxXTw8OCkrY1tlKzJdLGQucHVzaChSW2E+PjE4JjYzXStSW2E+PjEyJjYzXStSW2E+PjYmNjNdK1JbYSY2M10pO3JldHVybiBkLmpvaW4oIiIpfWZ1bmN0aW9uIEJkKGMpe3NjfHxBZCgpO2Zvcih2YXIgYT1jLmxlbmd0aCxiPWElMyxkPSIiLGU9W10sZj0wLGc9YS1iO2Y8ZztmKz0xNjM4MyllLnB1c2goS2YoYyxmLGYrMTYzODM+Zz9nOmYrMTYzODMpKTsxPT09Yj8oYz1jW2EtMV0sZCs9UltjPj4yXSxkKz1SW2M8PDQmNjNdLGQrPSI9PSIpOjI9PT1iJiYoYz0oY1thLTJdPDw4KStjW2EtMV0sZCs9UltjPj4xMF0sZCs9UltjPj40JjYzXSxkKz1SW2M8PDImNjNdLGQrPSI9Iik7ZS5wdXNoKGQpO3JldHVybiBlLmpvaW4oIiIpfWZ1bmN0aW9uIEdiKGMsYSxiLGQsZSl7dmFyIGY9OCplLWQtMSxnPSgxPDxmKS0xLGg9Zz4+MSxrPS03O2U9CmI/ZS0xOjA7dmFyIHQ9Yj8tMToxLHE9Y1thK2VdO2UrPXQ7Yj1xJigxPDwtayktMTtxPj49LWs7Zm9yKGsrPWY7MDxrO2I9MjU2KmIrY1thK2VdLGUrPXQsay09OCk7Zj1iJigxPDwtayktMTtiPj49LWs7Zm9yKGsrPWQ7MDxrO2Y9MjU2KmYrY1thK2VdLGUrPXQsay09OCk7aWYoMD09PWIpYj0xLWg7ZWxzZXtpZihiPT09ZylyZXR1cm4gZj9OYU46SW5maW5pdHkqKHE/LTE6MSk7Zis9TWF0aC5wb3coMixkKTtiLT1ofXJldHVybihxPy0xOjEpKmYqTWF0aC5wb3coMixiLWQpfWZ1bmN0aW9uIEhiKGMsYSxiLGQsZSxmKXt2YXIgZyxoPTgqZi1lLTEsaz0oMTw8aCktMSx0PWs+PjEscT0yMz09PWU/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowO2Y9ZD8wOmYtMTt2YXIgQT1kPzE6LTEscj0wPmF8fDA9PT1hJiYwPjEvYT8xOjA7YT1NYXRoLmFicyhhKTtmb3IoaXNOYU4oYSl8fEluZmluaXR5PT09YT8oYT1pc05hTihhKT8xOjAsZD1rKTooZD1NYXRoLmZsb29yKE1hdGgubG9nKGEpLwpNYXRoLkxOMiksMT5hKihnPU1hdGgucG93KDIsLWQpKSYmKGQtLSxnKj0yKSxhPTE8PWQrdD9hK3EvZzphK3EqTWF0aC5wb3coMiwxLXQpLDI8PWEqZyYmKGQrKyxnLz0yKSxkK3Q+PWs/KGE9MCxkPWspOjE8PWQrdD8oYT0oYSpnLTEpKk1hdGgucG93KDIsZSksZCs9dCk6KGE9YSpNYXRoLnBvdygyLHQtMSkqTWF0aC5wb3coMixlKSxkPTApKTs4PD1lO2NbYitmXT1hJjI1NSxmKz1BLGEvPTI1NixlLT04KTtkPWQ8PGV8YTtmb3IoaCs9ZTswPGg7Y1tiK2ZdPWQmMjU1LGYrPUEsZC89MjU2LGgtPTgpO2NbYitmLUFdfD0xMjgqcn1mdW5jdGlvbiBqYShjLGEpe2lmKChsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzKTxhKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8oYz1uZXcgVWludDhBcnJheShhKSxjLl9fcHJvdG9fXz1sLnByb3RvdHlwZSk6KG51bGw9PT1jJiYoYz0KbmV3IGwoYSkpLGMubGVuZ3RoPWEpO3JldHVybiBjfWZ1bmN0aW9uIGwoYyxhLGIpe2lmKCEobC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgbCkpcmV0dXJuIG5ldyBsKGMsYSxiKTtpZigibnVtYmVyIj09PXR5cGVvZiBjKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXRocm93IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiB0Yyh0aGlzLGMpfXJldHVybiBDZCh0aGlzLGMsYSxiKX1mdW5jdGlvbiBDZChjLGEsYixkKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmYSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXthLmJ5dGVMZW5ndGg7aWYoMD5ifHxhLmJ5dGVMZW5ndGg8Yil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpOwppZihhLmJ5dGVMZW5ndGg8YisoZHx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTthPXZvaWQgMD09PWImJnZvaWQgMD09PWQ/bmV3IFVpbnQ4QXJyYXkoYSk6dm9pZCAwPT09ZD9uZXcgVWludDhBcnJheShhLGIpOm5ldyBVaW50OEFycmF5KGEsYixkKTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGM9YSxjLl9fcHJvdG9fXz1sLnByb3RvdHlwZSk6Yz11YyhjLGEpO3JldHVybiBjfWlmKCJzdHJpbmciPT09dHlwZW9mIGEpe2Q9YztjPWI7aWYoInN0cmluZyIhPT10eXBlb2YgY3x8IiI9PT1jKWM9InV0ZjgiO2lmKCFsLmlzRW5jb2RpbmcoYykpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7Yj1EZChhLGMpfDA7ZD1qYShkLGIpO2E9ZC53cml0ZShhLGMpO2EhPT1iJiYoZD1kLnNsaWNlKDAsYSkpO3JldHVybiBkfXJldHVybiBMZihjLGEpfWZ1bmN0aW9uIEVkKGMpe2lmKCJudW1iZXIiIT09CnR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoMD5jKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKTt9ZnVuY3Rpb24gdGMoYyxhKXtFZChhKTtjPWphKGMsMD5hPzA6dmMoYSl8MCk7aWYoIWwuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIGI9MDtiPGE7KytiKWNbYl09MDtyZXR1cm4gY31mdW5jdGlvbiB1YyhjLGEpe3ZhciBiPTA+YS5sZW5ndGg/MDp2YyhhLmxlbmd0aCl8MDtjPWphKGMsYik7Zm9yKHZhciBkPTA7ZDxiO2QrPTEpY1tkXT1hW2RdJjI1NTtyZXR1cm4gY31mdW5jdGlvbiBMZihjLGEpe2lmKFcoYSkpe3ZhciBiPXZjKGEubGVuZ3RoKXwwO2M9amEoYyxiKTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGM7YS5jb3B5KGMsMCwwLGIpO3JldHVybiBjfWlmKGEpe2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZhLmJ1ZmZlciBpbnN0YW5jZW9mCkFycmF5QnVmZmVyfHwibGVuZ3RoImluIGEpcmV0dXJuKGI9Im51bWJlciIhPT10eXBlb2YgYS5sZW5ndGgpfHwoYj1hLmxlbmd0aCxiPWIhPT1iKSxiP2phKGMsMCk6dWMoYyxhKTtpZigiQnVmZmVyIj09PWEudHlwZSYmRmQoYS5kYXRhKSlyZXR1cm4gdWMoYyxhLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKTt9ZnVuY3Rpb24gdmMoYyl7aWYoYz49KGwuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjMpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IisobC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyMykudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gY3wwfWZ1bmN0aW9uIFcoYyl7cmV0dXJuIShudWxsPT0KY3x8IWMuX2lzQnVmZmVyKX1mdW5jdGlvbiBEZChjLGEpe2lmKFcoYykpcmV0dXJuIGMubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhjKXx8YyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gYy5ieXRlTGVuZ3RoOyJzdHJpbmciIT09dHlwZW9mIGMmJihjPSIiK2MpO3ZhciBiPWMubGVuZ3RoO2lmKDA9PT1iKXJldHVybiAwO2Zvcih2YXIgZD0hMTs7KXN3aXRjaChhKXtjYXNlICJhc2NpaSI6Y2FzZSAibGF0aW4xIjpjYXNlICJiaW5hcnkiOnJldHVybiBiO2Nhc2UgInV0ZjgiOmNhc2UgInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gSWIoYykubGVuZ3RoO2Nhc2UgInVjczIiOmNhc2UgInVjcy0yIjpjYXNlICJ1dGYxNmxlIjpjYXNlICJ1dGYtMTZsZSI6cmV0dXJuIDIqYjtjYXNlICJoZXgiOnJldHVybiBiPj4+MTtjYXNlICJiYXNlNjQiOnJldHVybiBHZChjKS5sZW5ndGg7CmRlZmF1bHQ6aWYoZClyZXR1cm4gSWIoYykubGVuZ3RoO2E9KCIiK2EpLnRvTG93ZXJDYXNlKCk7ZD0hMH19ZnVuY3Rpb24gTWYoYyxhLGIpe3ZhciBkPSExO2lmKHZvaWQgMD09PWF8fDA+YSlhPTA7aWYoYT50aGlzLmxlbmd0aClyZXR1cm4iIjtpZih2b2lkIDA9PT1ifHxiPnRoaXMubGVuZ3RoKWI9dGhpcy5sZW5ndGg7aWYoMD49YilyZXR1cm4iIjtiPj4+PTA7YT4+Pj0wO2lmKGI8PWEpcmV0dXJuIiI7Zm9yKGN8fChjPSJ1dGY4Iik7Oylzd2l0Y2goYyl7Y2FzZSAiaGV4IjpjPWE7YT1iO2I9dGhpcy5sZW5ndGg7aWYoIWN8fDA+YyljPTA7aWYoIWF8fDA+YXx8YT5iKWE9YjtkPSIiO2ZvcihiPWM7YjxhOysrYiljPWQsZD10aGlzW2JdLGQ9MTY+ZD8iMCIrZC50b1N0cmluZygxNik6ZC50b1N0cmluZygxNiksZD1jK2Q7cmV0dXJuIGQ7Y2FzZSAidXRmOCI6Y2FzZSAidXRmLTgiOnJldHVybiBIZCh0aGlzLGEsYik7Y2FzZSAiYXNjaWkiOmM9IiI7Zm9yKGI9TWF0aC5taW4odGhpcy5sZW5ndGgsCmIpO2E8YjsrK2EpYys9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzW2FdJjEyNyk7cmV0dXJuIGM7Y2FzZSAibGF0aW4xIjpjYXNlICJiaW5hcnkiOmM9IiI7Zm9yKGI9TWF0aC5taW4odGhpcy5sZW5ndGgsYik7YTxiOysrYSljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXNbYV0pO3JldHVybiBjO2Nhc2UgImJhc2U2NCI6cmV0dXJuIGE9MD09PWEmJmI9PT10aGlzLmxlbmd0aD9CZCh0aGlzKTpCZCh0aGlzLnNsaWNlKGEsYikpLGE7Y2FzZSAidWNzMiI6Y2FzZSAidWNzLTIiOmNhc2UgInV0ZjE2bGUiOmNhc2UgInV0Zi0xNmxlIjphPXRoaXMuc2xpY2UoYSxiKTtiPSIiO2ZvcihjPTA7YzxhLmxlbmd0aDtjKz0yKWIrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtjXSsyNTYqYVtjKzFdKTtyZXR1cm4gYjtkZWZhdWx0OmlmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitjKTtjPShjKyIiKS50b0xvd2VyQ2FzZSgpO2Q9ITB9fWZ1bmN0aW9uIEdhKGMsYSxiKXt2YXIgZD0KY1thXTtjW2FdPWNbYl07Y1tiXT1kfWZ1bmN0aW9uIElkKGMsYSxiLGQsZSl7aWYoMD09PWMubGVuZ3RoKXJldHVybi0xOyJzdHJpbmciPT09dHlwZW9mIGI/KGQ9YixiPTApOjIxNDc0ODM2NDc8Yj9iPTIxNDc0ODM2NDc6LTIxNDc0ODM2NDg+YiYmKGI9LTIxNDc0ODM2NDgpO2I9K2I7aXNOYU4oYikmJihiPWU/MDpjLmxlbmd0aC0xKTswPmImJihiPWMubGVuZ3RoK2IpO2lmKGI+PWMubGVuZ3RoKXtpZihlKXJldHVybi0xO2I9Yy5sZW5ndGgtMX1lbHNlIGlmKDA+YilpZihlKWI9MDtlbHNlIHJldHVybi0xOyJzdHJpbmciPT09dHlwZW9mIGEmJihhPWwuZnJvbShhLGQpKTtpZihXKGEpKXJldHVybiAwPT09YS5sZW5ndGg/LTE6SmQoYyxhLGIsZCxlKTtpZigibnVtYmVyIj09PXR5cGVvZiBhKXJldHVybiBhJj0yNTUsbC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/ZT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYywKYSxiKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGMsYSxiKTpKZChjLFthXSxiLGQsZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIik7fWZ1bmN0aW9uIEpkKGMsYSxiLGQsZSl7ZnVuY3Rpb24gZihhLGMpe3JldHVybiAxPT09Zz9hW2NdOmEucmVhZFVJbnQxNkJFKGMqZyl9dmFyIGc9MSxoPWMubGVuZ3RoLGs9YS5sZW5ndGg7aWYodm9pZCAwIT09ZCYmKGQ9U3RyaW5nKGQpLnRvTG93ZXJDYXNlKCksInVjczIiPT09ZHx8InVjcy0yIj09PWR8fCJ1dGYxNmxlIj09PWR8fCJ1dGYtMTZsZSI9PT1kKSl7aWYoMj5jLmxlbmd0aHx8Mj5hLmxlbmd0aClyZXR1cm4tMTtnPTI7aC89MjtrLz0yO2IvPTJ9aWYoZSlmb3IoZD0tMTtiPGg7YisrKWlmKGYoYyxiKT09PWYoYSwtMT09PWQ/MDpiLWQpKXtpZigtMT09PWQmJihkPWIpLGItZCsxPT09aylyZXR1cm4gZCpnfWVsc2UtMSE9PWQmJihiLT1iLWQpLGQ9Ci0xO2Vsc2UgZm9yKGIraz5oJiYoYj1oLWspOzA8PWI7Yi0tKXtoPSEwO2ZvcihkPTA7ZDxrO2QrKylpZihmKGMsYitkKSE9PWYoYSxkKSl7aD0hMTticmVha31pZihoKXJldHVybiBifXJldHVybi0xfWZ1bmN0aW9uIEhkKGMsYSxiKXtiPU1hdGgubWluKGMubGVuZ3RoLGIpO2Zvcih2YXIgZD1bXTthPGI7KXt2YXIgZT1jW2FdLGY9bnVsbCxnPTIzOTxlPzQ6MjIzPGU/MzoxOTE8ZT8yOjE7aWYoYStnPD1iKXN3aXRjaChnKXtjYXNlIDE6MTI4PmUmJihmPWUpO2JyZWFrO2Nhc2UgMjp2YXIgaD1jW2ErMV07MTI4PT09KGgmMTkyKSYmKGU9KGUmMzEpPDw2fGgmNjMsMTI3PGUmJihmPWUpKTticmVhaztjYXNlIDM6aD1jW2ErMV07dmFyIGs9Y1thKzJdOzEyOD09PShoJjE5MikmJjEyOD09PShrJjE5MikmJihlPShlJjE1KTw8MTJ8KGgmNjMpPDw2fGsmNjMsMjA0NzxlJiYoNTUyOTY+ZXx8NTczNDM8ZSkmJihmPWUpKTticmVhaztjYXNlIDQ6aD1jW2ErMV07az1jW2ErMl07dmFyIHQ9Y1thKwozXTsxMjg9PT0oaCYxOTIpJiYxMjg9PT0oayYxOTIpJiYxMjg9PT0odCYxOTIpJiYoZT0oZSYxNSk8PDE4fChoJjYzKTw8MTJ8KGsmNjMpPDw2fHQmNjMsNjU1MzU8ZSYmMTExNDExMj5lJiYoZj1lKSl9bnVsbD09PWY/KGY9NjU1MzMsZz0xKTo2NTUzNTxmJiYoZi09NjU1MzYsZC5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfGYmMTAyMyk7ZC5wdXNoKGYpO2ErPWd9Yz1kLmxlbmd0aDtpZihjPD1LZClkPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGQpO2Vsc2V7Yj0iIjtmb3IoYT0wO2E8YzspYis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZC5zbGljZShhLGErPUtkKSk7ZD1ifXJldHVybiBkfWZ1bmN0aW9uIEQoYyxhLGIpe2lmKDAhPT1jJTF8fDA+Yyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoYythPmIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKTsKfWZ1bmN0aW9uIFQoYyxhLGIsZCxlLGYpe2lmKCFXKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihhPmV8fGE8Zil0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoYitkPmMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTt9ZnVuY3Rpb24gSmIoYyxhLGIsZCl7MD5hJiYoYT02NTUzNSthKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYy5sZW5ndGgtYiwyKTtlPGY7KytlKWNbYitlXT0oYSYyNTU8PDgqKGQ/ZToxLWUpKT4+PjgqKGQ/ZToxLWUpfWZ1bmN0aW9uIEtiKGMsYSxiLGQpezA+YSYmKGE9NDI5NDk2NzI5NSthKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYy5sZW5ndGgtYiw0KTtlPGY7KytlKWNbYitlXT1hPj4+OCooZD9lOjMtZSkmMjU1fWZ1bmN0aW9uIExiKGMsYSxiLGQpe2lmKGIrCmQ+Yy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKDA+Yil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7fWZ1bmN0aW9uIEliKGMsYSl7YT1hfHxJbmZpbml0eTtmb3IodmFyIGIsZD1jLmxlbmd0aCxlPW51bGwsZj1bXSxnPTA7ZzxkOysrZyl7Yj1jLmNoYXJDb2RlQXQoZyk7aWYoNTUyOTU8YiYmNTczNDQ+Yil7aWYoIWUpe2lmKDU2MzE5PGIpey0xPChhLT0zKSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lbHNlIGlmKGcrMT09PWQpey0xPChhLT0zKSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lPWI7Y29udGludWV9aWYoNTYzMjA+Yil7LTE8KGEtPTMpJiZmLnB1c2goMjM5LDE5MSwxODkpO2U9Yjtjb250aW51ZX1iPShlLTU1Mjk2PDwxMHxiLTU2MzIwKSs2NTUzNn1lbHNlIGUmJi0xPChhLT0zKSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtlPW51bGw7aWYoMTI4PmIpe2lmKDA+LS1hKWJyZWFrOwpmLnB1c2goYil9ZWxzZSBpZigyMDQ4PmIpe2lmKDA+KGEtPTIpKWJyZWFrO2YucHVzaChiPj42fDE5MixiJjYzfDEyOCl9ZWxzZSBpZig2NTUzNj5iKXtpZigwPihhLT0zKSlicmVhaztmLnB1c2goYj4+MTJ8MjI0LGI+PjYmNjN8MTI4LGImNjN8MTI4KX1lbHNlIGlmKDExMTQxMTI+Yil7aWYoMD4oYS09NCkpYnJlYWs7Zi5wdXNoKGI+PjE4fDI0MCxiPj4xMiY2M3wxMjgsYj4+NiY2M3wxMjgsYiY2M3wxMjgpfWVsc2UgdGhyb3cgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO31yZXR1cm4gZn1mdW5jdGlvbiBMZChjKXtmb3IodmFyIGE9W10sYj0wO2I8Yy5sZW5ndGg7KytiKWEucHVzaChjLmNoYXJDb2RlQXQoYikmMjU1KTtyZXR1cm4gYX1mdW5jdGlvbiBHZChjKXtjPShjLnRyaW0/Yy50cmltKCk6Yy5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIikpLnJlcGxhY2UoTmYsIiIpO2lmKDI+Yy5sZW5ndGgpYz0iIjtlbHNlIGZvcig7MCE9PWMubGVuZ3RoJTQ7KWMrPSI9IjtzY3x8QWQoKTsKdmFyIGE9Yy5sZW5ndGg7aWYoMDxhJTQpdGhyb3cgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgYj0iPSI9PT1jW2EtMl0/MjoiPSI9PT1jW2EtMV0/MTowLGQ9bmV3IE9mKDMqYS80LWIpLGU9MDxiP2EtNDphLGY9MDtmb3IoYT0wO2E8ZTthKz00KXt2YXIgZz1IW2MuY2hhckNvZGVBdChhKV08PDE4fEhbYy5jaGFyQ29kZUF0KGErMSldPDwxMnxIW2MuY2hhckNvZGVBdChhKzIpXTw8NnxIW2MuY2hhckNvZGVBdChhKzMpXTtkW2YrK109Zz4+MTYmMjU1O2RbZisrXT1nPj44JjI1NTtkW2YrK109ZyYyNTV9Mj09PWI/KGc9SFtjLmNoYXJDb2RlQXQoYSldPDwyfEhbYy5jaGFyQ29kZUF0KGErMSldPj40LGRbZisrXT1nJjI1NSk6MT09PWImJihnPUhbYy5jaGFyQ29kZUF0KGEpXTw8MTB8SFtjLmNoYXJDb2RlQXQoYSsxKV08PDR8SFtjLmNoYXJDb2RlQXQoYSsyKV0+PjIsZFtmKytdPWc+PjgmMjU1LGRbZisrXT1nJjI1NSk7CnJldHVybiBkfWZ1bmN0aW9uIG5iKGMsYSxiLGQpe2Zvcih2YXIgZT0wO2U8ZCYmIShlK2I+PWEubGVuZ3RofHxlPj1jLmxlbmd0aCk7KytlKWFbZStiXT1jW2VdO3JldHVybiBlfWZ1bmN0aW9uIHBhKGMpe3JldHVybiBudWxsIT1jJiYoISFjLl9pc0J1ZmZlcnx8TWQoYyl8fCJmdW5jdGlvbiI9PT10eXBlb2YgYy5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09PXR5cGVvZiBjLnNsaWNlJiZNZChjLnNsaWNlKDAsMCkpKX1mdW5jdGlvbiBNZChjKXtyZXR1cm4hIWMuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PT10eXBlb2YgYy5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmYy5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihjKX1mdW5jdGlvbiBOZCgpe3Rocm93IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIik7fWZ1bmN0aW9uIE9kKCl7dGhyb3cgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpO31mdW5jdGlvbiBQZChjKXtpZih1YT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoYywKMCk7aWYoKHVhPT09TmR8fCF1YSkmJnNldFRpbWVvdXQpcmV0dXJuIHVhPXNldFRpbWVvdXQsc2V0VGltZW91dChjLDApO3RyeXtyZXR1cm4gdWEoYywwKX1jYXRjaChhKXt0cnl7cmV0dXJuIHVhLmNhbGwobnVsbCxjLDApfWNhdGNoKGIpe3JldHVybiB1YS5jYWxsKHRoaXMsYywwKX19fWZ1bmN0aW9uIFBmKGMpe2lmKHZhPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoYyk7aWYoKHZhPT09T2R8fCF2YSkmJmNsZWFyVGltZW91dClyZXR1cm4gdmE9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChjKTt0cnl7cmV0dXJuIHZhKGMpfWNhdGNoKGEpe3RyeXtyZXR1cm4gdmEuY2FsbChudWxsLGMpfWNhdGNoKGIpe3JldHVybiB2YS5jYWxsKHRoaXMsYyl9fX1mdW5jdGlvbiBRZigpe1VhJiZIYSYmKFVhPSExLEhhLmxlbmd0aD9rYT1IYS5jb25jYXQoa2EpOk1iPS0xLGthLmxlbmd0aCYmUWQoKSl9ZnVuY3Rpb24gUWQoKXtpZighVWEpe3ZhciBjPVBkKFFmKTtVYT0hMDtmb3IodmFyIGE9CmthLmxlbmd0aDthOyl7SGE9a2E7Zm9yKGthPVtdOysrTWI8YTspSGEmJkhhW01iXS5ydW4oKTtNYj0tMTthPWthLmxlbmd0aH1IYT1udWxsO1VhPSExO1BmKGMpfX1mdW5jdGlvbiBYKGMpe3ZhciBhPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgYj0xO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYVtiLTFdPWFyZ3VtZW50c1tiXTtrYS5wdXNoKG5ldyBSZChjLGEpKTsxIT09a2EubGVuZ3RofHxVYXx8UGQoUWQpfWZ1bmN0aW9uIFJkKGMsYSl7dGhpcy5mdW49Yzt0aGlzLmFycmF5PWF9ZnVuY3Rpb24gSWEoKXt9ZnVuY3Rpb24gd2MoYyl7aWYoIUphKGMpKXtmb3IodmFyIGE9W10sYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYS5wdXNoKGFhKGFyZ3VtZW50c1tiXSkpO3JldHVybiBhLmpvaW4oIiAiKX1iPTE7dmFyIGQ9YXJndW1lbnRzLGU9ZC5sZW5ndGg7YT1TdHJpbmcoYykucmVwbGFjZShSZixmdW5jdGlvbihhKXtpZigiJSUiPT09CmEpcmV0dXJuIiUiO2lmKGI+PWUpcmV0dXJuIGE7c3dpdGNoKGEpe2Nhc2UgIiVzIjpyZXR1cm4gU3RyaW5nKGRbYisrXSk7Y2FzZSAiJWQiOnJldHVybiBOdW1iZXIoZFtiKytdKTtjYXNlICIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShkW2IrK10pfWNhdGNoKGgpe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBhfX0pO2Zvcih2YXIgZj1kW2JdO2I8ZTtmPWRbKytiXSlhPW51bGwhPT1mJiZ3YShmKT9hKygiICIrYWEoZikpOmErKCIgIitmKTtyZXR1cm4gYX1mdW5jdGlvbiB4YyhjLGEpe2lmKGxhKEthLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiB4YyhjLGEpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1WYS5ub0RlcHJlY2F0aW9uKXJldHVybiBjO3ZhciBiPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFiKXtpZihWYS50aHJvd0RlcHJlY2F0aW9uKXRocm93IEVycm9yKGEpO1ZhLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShhKToKY29uc29sZS5lcnJvcihhKTtiPSEwfXJldHVybiBjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gU2QoYyl7bGEoeWMpJiYoeWM9VmEuZW52Lk5PREVfREVCVUd8fCIiKTtjPWMudG9VcHBlckNhc2UoKTtOYltjXXx8KChuZXcgUmVnRXhwKCJcXGIiK2MrIlxcYiIsImkiKSkudGVzdCh5Yyk/TmJbY109ZnVuY3Rpb24oKXt2YXIgYT13Yy5hcHBseShudWxsLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIixjLDAsYSl9Ok5iW2NdPWZ1bmN0aW9uKCl7fSk7cmV0dXJuIE5iW2NdfWZ1bmN0aW9uIGFhKGMsYSl7dmFyIGI9e3NlZW46W10sc3R5bGl6ZTpTZn07Mzw9YXJndW1lbnRzLmxlbmd0aCYmKGIuZGVwdGg9YXJndW1lbnRzWzJdKTs0PD1hcmd1bWVudHMubGVuZ3RoJiYoYi5jb2xvcnM9YXJndW1lbnRzWzNdKTt6YyhhKT9iLnNob3dIaWRkZW49YTphJiZUZChiLGEpO2xhKGIuc2hvd0hpZGRlbikmJihiLnNob3dIaWRkZW49ITEpO2xhKGIuZGVwdGgpJiYoYi5kZXB0aD0KMik7bGEoYi5jb2xvcnMpJiYoYi5jb2xvcnM9ITEpO2xhKGIuY3VzdG9tSW5zcGVjdCkmJihiLmN1c3RvbUluc3BlY3Q9ITApO2IuY29sb3JzJiYoYi5zdHlsaXplPVRmKTtyZXR1cm4gT2IoYixjLGIuZGVwdGgpfWZ1bmN0aW9uIFRmKGMsYSl7cmV0dXJuKGE9YWEuc3R5bGVzW2FdKT8iXHUwMDFiWyIrYWEuY29sb3JzW2FdWzBdKyJtIitjKyJcdTAwMWJbIithYS5jb2xvcnNbYV1bMV0rIm0iOmN9ZnVuY3Rpb24gU2YoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gVWYoYyl7dmFyIGE9e307Yy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2FbY109ITB9KTtyZXR1cm4gYX1mdW5jdGlvbiBPYihjLGEsYil7aWYoYy5jdXN0b21JbnNwZWN0JiZhJiZXYShhLmluc3BlY3QpJiZhLmluc3BlY3QhPT1hYSYmKCFhLmNvbnN0cnVjdG9yfHxhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PWEpKXt2YXIgZD1hLmluc3BlY3QoYixjKTtKYShkKXx8KGQ9T2IoYyxkLGIpKTtyZXR1cm4gZH1pZihkPVZmKGMsYSkpcmV0dXJuIGQ7CnZhciBlPU9iamVjdC5rZXlzKGEpLGY9VWYoZSk7Yy5zaG93SGlkZGVuJiYoZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKSk7aWYob2IoYSkmJigwPD1lLmluZGV4T2YoIm1lc3NhZ2UiKXx8MDw9ZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpKSlyZXR1cm4gQWMoYSk7aWYoMD09PWUubGVuZ3RoKXtpZihXYShhKSlyZXR1cm4gYy5zdHlsaXplKCJbRnVuY3Rpb24iKyhhLm5hbWU/IjogIithLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKFhhKGEpKXJldHVybiBjLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpLCJyZWdleHAiKTtpZihwYihhKSlyZXR1cm4gYy5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSksImRhdGUiKTtpZihvYihhKSlyZXR1cm4gQWMoYSl9ZD0iIjt2YXIgZz0hMSxoPVsieyIsIn0iXTtVZChhKSYmKGc9ITAsaD1bIlsiLCJdIl0pO1dhKGEpJiYoZD0iIFtGdW5jdGlvbiIrKGEubmFtZT8iOiAiK2EubmFtZToKIiIpKyJdIik7WGEoYSkmJihkPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkpO3BiKGEpJiYoZD0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChhKSk7b2IoYSkmJihkPSIgIitBYyhhKSk7aWYoMD09PWUubGVuZ3RoJiYoIWd8fDA9PWEubGVuZ3RoKSlyZXR1cm4gaFswXStkK2hbMV07aWYoMD5iKXJldHVybiBYYShhKT9jLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpLCJyZWdleHAiKTpjLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpO2Muc2Vlbi5wdXNoKGEpO2U9Zz9XZihjLGEsYixmLGUpOmUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBCYyhjLGEsYixmLGQsZyl9KTtjLnNlZW4ucG9wKCk7cmV0dXJuIFhmKGUsZCxoKX1mdW5jdGlvbiBWZihjLGEpe2lmKGxhKGEpKXJldHVybiBjLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKEphKGEpKXJldHVybiBhPSInIitKU09OLnN0cmluZ2lmeShhKS5yZXBsYWNlKC9eInwiJC9nLAoiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIixjLnN0eWxpemUoYSwic3RyaW5nIik7aWYoVmQoYSkpcmV0dXJuIGMuc3R5bGl6ZSgiIithLCJudW1iZXIiKTtpZih6YyhhKSlyZXR1cm4gYy5zdHlsaXplKCIiK2EsImJvb2xlYW4iKTtpZihudWxsPT09YSlyZXR1cm4gYy5zdHlsaXplKCJudWxsIiwibnVsbCIpfWZ1bmN0aW9uIEFjKGMpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSsiXSJ9ZnVuY3Rpb24gV2YoYyxhLGIsZCxlKXtmb3IodmFyIGY9W10sZz0wLGg9YS5sZW5ndGg7ZzxoOysrZylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxTdHJpbmcoZykpP2YucHVzaChCYyhjLGEsYixkLFN0cmluZyhnKSwhMCkpOmYucHVzaCgiIik7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UubWF0Y2goL15cZCskLyl8fGYucHVzaChCYyhjLGEsYixkLGUsITApKX0pO3JldHVybiBmfWZ1bmN0aW9uIEJjKGMsCmEsYixkLGUsZil7dmFyIGcsaDthPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxlKXx8e3ZhbHVlOmFbZV19O2EuZ2V0P2g9YS5zZXQ/Yy5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIik6Yy5zdHlsaXplKCJbR2V0dGVyXSIsInNwZWNpYWwiKTphLnNldCYmKGg9Yy5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsZSl8fChnPSJbIitlKyJdIik7aHx8KDA+Yy5zZWVuLmluZGV4T2YoYS52YWx1ZSk/KGg9bnVsbD09PWI/T2IoYyxhLnZhbHVlLG51bGwpOk9iKGMsYS52YWx1ZSxiLTEpLC0xPGguaW5kZXhPZigiXG4iKSYmKGg9Zj9oLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iICAiK2F9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK2guc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGEpe3JldHVybiIgICAiK2F9KS5qb2luKCJcbiIpKSk6aD1jLnN0eWxpemUoIltDaXJjdWxhcl0iLAoic3BlY2lhbCIpKTtpZihsYShnKSl7aWYoZiYmZS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gaDtnPUpTT04uc3RyaW5naWZ5KCIiK2UpO2cubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8oZz1nLnN1YnN0cigxLGcubGVuZ3RoLTIpLGc9Yy5zdHlsaXplKGcsIm5hbWUiKSk6KGc9Zy5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksZz1jLnN0eWxpemUoZywic3RyaW5nIikpfXJldHVybiBnKyI6ICIraH1mdW5jdGlvbiBYZihjLGEsYil7cmV0dXJuIDYwPGMucmVkdWNlKGZ1bmN0aW9uKGEsYyl7Yy5pbmRleE9mKCJcbiIpO3JldHVybiBhK2MucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApP2JbMF0rKCIiPT09YT8iIjphKyJcbiAiKSsiICIrYy5qb2luKCIsXG4gICIpKyIgIitiWzFdOmJbMF0rYSsiICIrYy5qb2luKCIsICIpKyIgIitiWzFdfWZ1bmN0aW9uIFVkKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpfQpmdW5jdGlvbiB6YyhjKXtyZXR1cm4iYm9vbGVhbiI9PT10eXBlb2YgY31mdW5jdGlvbiBWZChjKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBjfWZ1bmN0aW9uIEphKGMpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGN9ZnVuY3Rpb24gbGEoYyl7cmV0dXJuIHZvaWQgMD09PWN9ZnVuY3Rpb24gWGEoYyl7cmV0dXJuIHdhKGMpJiYiW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1mdW5jdGlvbiB3YShjKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBjJiZudWxsIT09Y31mdW5jdGlvbiBwYihjKXtyZXR1cm4gd2EoYykmJiJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1mdW5jdGlvbiBvYihjKXtyZXR1cm4gd2EoYykmJigiW29iamVjdCBFcnJvcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfHxjIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIFdhKGMpe3JldHVybiJmdW5jdGlvbiI9PT0KdHlwZW9mIGN9ZnVuY3Rpb24gQ2MoYyl7cmV0dXJuIG51bGw9PT1jfHwiYm9vbGVhbiI9PT10eXBlb2YgY3x8Im51bWJlciI9PT10eXBlb2YgY3x8InN0cmluZyI9PT10eXBlb2YgY3x8InN5bWJvbCI9PT10eXBlb2YgY3x8InVuZGVmaW5lZCI9PT10eXBlb2YgY31mdW5jdGlvbiBEYyhjKXtyZXR1cm4gMTA+Yz8iMCIrYy50b1N0cmluZygxMCk6Yy50b1N0cmluZygxMCl9ZnVuY3Rpb24gWWYoKXt2YXIgYz1uZXcgRGF0ZSxhPVtEYyhjLmdldEhvdXJzKCkpLERjKGMuZ2V0TWludXRlcygpKSxEYyhjLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bYy5nZXREYXRlKCksWmZbYy5nZXRNb250aCgpXSxhXS5qb2luKCIgIil9ZnVuY3Rpb24gVGQoYyxhKXtpZighYXx8IXdhKGEpKXJldHVybiBjO2Zvcih2YXIgYj1PYmplY3Qua2V5cyhhKSxkPWIubGVuZ3RoO2QtLTspY1tiW2RdXT1hW2JbZF1dO3JldHVybiBjfWZ1bmN0aW9uIFdkKGMsYSl7aWYoYz09PWEpcmV0dXJuIDA7Zm9yKHZhciBiPQpjLmxlbmd0aCxkPWEubGVuZ3RoLGU9MCxmPU1hdGgubWluKGIsZCk7ZTxmOysrZSlpZihjW2VdIT09YVtlXSl7Yj1jW2VdO2Q9YVtlXTticmVha31yZXR1cm4gYjxkPy0xOmQ8Yj8xOjB9ZnVuY3Rpb24gWGQoKXtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBFYz9FYzpFYz1mdW5jdGlvbigpe3JldHVybiJmb28iPT09ZnVuY3Rpb24oKXt9Lm5hbWV9KCl9ZnVuY3Rpb24gWWQoYyl7cmV0dXJuIHBhKGMpfHwiZnVuY3Rpb24iIT09dHlwZW9mIEthLkFycmF5QnVmZmVyPyExOiJmdW5jdGlvbiI9PT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhjKTpjP2MgaW5zdGFuY2VvZiBEYXRhVmlld3x8Yy5idWZmZXImJmMuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ITA6ITE6ITF9ZnVuY3Rpb24gRShjLGEpe2N8fFMoYywhMCxhLCI9PSIsRmMpfWZ1bmN0aW9uIFpkKGMpe2lmKFdhKGMpKXJldHVybiBYZCgpP2MubmFtZTooYz1jLnRvU3RyaW5nKCkubWF0Y2goJGYpKSYmCmNbMV19ZnVuY3Rpb24gR2MoYyl7dGhpcy5uYW1lPSJBc3NlcnRpb25FcnJvciI7dGhpcy5hY3R1YWw9Yy5hY3R1YWw7dGhpcy5leHBlY3RlZD1jLmV4cGVjdGVkO3RoaXMub3BlcmF0b3I9Yy5vcGVyYXRvcjtjLm1lc3NhZ2U/KHRoaXMubWVzc2FnZT1jLm1lc3NhZ2UsdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSExKToodGhpcy5tZXNzYWdlPSRkKGFlKHRoaXMuYWN0dWFsKSwxMjgpKyIgIit0aGlzLm9wZXJhdG9yKyIgIiskZChhZSh0aGlzLmV4cGVjdGVkKSwxMjgpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIGE9Yy5zdGFja1N0YXJ0RnVuY3Rpb258fFM7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxhKTooYz1FcnJvcigpLGMuc3RhY2smJihjPWMuc3RhY2ssYT1aZChhKSxhPWMuaW5kZXhPZigiXG4iK2EpLDA8PWEmJihhPWMuaW5kZXhPZigiXG4iLGErMSksYz1jLnN1YnN0cmluZyhhKzEpKSx0aGlzLnN0YWNrPWMpKX1mdW5jdGlvbiAkZChjLAphKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBjP2MubGVuZ3RoPGE/YzpjLnNsaWNlKDAsYSk6Y31mdW5jdGlvbiBhZShjKXtpZihYZCgpfHwhV2EoYykpcmV0dXJuIGFhKGMpO2M9WmQoYyk7cmV0dXJuIltGdW5jdGlvbiIrKGM/IjogIitjOiIiKSsiXSJ9ZnVuY3Rpb24gUyhjLGEsYixkLGUpe3Rocm93IG5ldyBHYyh7bWVzc2FnZTpiLGFjdHVhbDpjLGV4cGVjdGVkOmEsb3BlcmF0b3I6ZCxzdGFja1N0YXJ0RnVuY3Rpb246ZX0pO31mdW5jdGlvbiBGYyhjLGEpe2N8fFMoYywhMCxhLCI9PSIsRmMpfWZ1bmN0aW9uIGJlKGMsYSxiKXtjIT1hJiZTKGMsYSxiLCI9PSIsYmUpfWZ1bmN0aW9uIGNlKGMsYSxiKXtjPT1hJiZTKGMsYSxiLCIhPSIsY2UpfWZ1bmN0aW9uIGRlKGMsYSxiKXtZYShjLGEsITEpfHxTKGMsYSxiLCJkZWVwRXF1YWwiLGRlKX1mdW5jdGlvbiBlZShjLGEsYil7WWEoYyxhLCEwKXx8UyhjLGEsYiwiZGVlcFN0cmljdEVxdWFsIixlZSl9ZnVuY3Rpb24gWWEoYyxhLGIsCmQpe2lmKGM9PT1hKXJldHVybiEwO2lmKHBhKGMpJiZwYShhKSlyZXR1cm4gMD09PVdkKGMsYSk7aWYocGIoYykmJnBiKGEpKXJldHVybiBjLmdldFRpbWUoKT09PWEuZ2V0VGltZSgpO2lmKFhhKGMpJiZYYShhKSlyZXR1cm4gYy5zb3VyY2U9PT1hLnNvdXJjZSYmYy5nbG9iYWw9PT1hLmdsb2JhbCYmYy5tdWx0aWxpbmU9PT1hLm11bHRpbGluZSYmYy5sYXN0SW5kZXg9PT1hLmxhc3RJbmRleCYmYy5pZ25vcmVDYXNlPT09YS5pZ25vcmVDYXNlO2lmKG51bGwhPT1jJiYib2JqZWN0Ij09PXR5cGVvZiBjfHxudWxsIT09YSYmIm9iamVjdCI9PT10eXBlb2YgYSl7aWYoIVlkKGMpfHwhWWQoYSl8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKXx8YyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8YyBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSl7aWYocGEoYykhPT1wYShhKSlyZXR1cm4hMTtkPWR8fHthY3R1YWw6W10sCmV4cGVjdGVkOltdfTt2YXIgZT1kLmFjdHVhbC5pbmRleE9mKGMpO2lmKC0xIT09ZSYmZT09PWQuZXhwZWN0ZWQuaW5kZXhPZihhKSlyZXR1cm4hMDtkLmFjdHVhbC5wdXNoKGMpO2QuZXhwZWN0ZWQucHVzaChhKTtyZXR1cm4gYWcoYyxhLGIsZCl9cmV0dXJuIDA9PT1XZChuZXcgVWludDhBcnJheShjLmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoYS5idWZmZXIpKX1yZXR1cm4gYj9jPT09YTpjPT1hfWZ1bmN0aW9uIGFnKGMsYSxiLGQpe2lmKG51bGw9PT1jfHx2b2lkIDA9PT1jfHxudWxsPT09YXx8dm9pZCAwPT09YSlyZXR1cm4hMTtpZihDYyhjKXx8Q2MoYSkpcmV0dXJuIGM9PT1hO2lmKGImJk9iamVjdC5nZXRQcm90b3R5cGVPZihjKSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihhKSlyZXR1cm4hMTt2YXIgZT0iW29iamVjdCBBcmd1bWVudHNdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpLGY9IltvYmplY3QgQXJndW1lbnRzXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTsKaWYoZSYmIWZ8fCFlJiZmKXJldHVybiExO2lmKGUpcmV0dXJuIGM9ZmUuY2FsbChjKSxhPWZlLmNhbGwoYSksWWEoYyxhLGIpO2U9Z2UoYyk7dmFyIGc9Z2UoYSk7aWYoZS5sZW5ndGghPT1nLmxlbmd0aClyZXR1cm4hMTtlLnNvcnQoKTtnLnNvcnQoKTtmb3IoZj1lLmxlbmd0aC0xOzA8PWY7Zi0tKWlmKGVbZl0hPT1nW2ZdKXJldHVybiExO2ZvcihmPWUubGVuZ3RoLTE7MDw9ZjtmLS0paWYoZz1lW2ZdLCFZYShjW2ddLGFbZ10sYixkKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoZShjLGEsYil7WWEoYyxhLCExKSYmUyhjLGEsYiwibm90RGVlcEVxdWFsIixoZSl9ZnVuY3Rpb24gaWUoYyxhLGIpe1lhKGMsYSwhMCkmJlMoYyxhLGIsIm5vdERlZXBTdHJpY3RFcXVhbCIsaWUpfWZ1bmN0aW9uIGplKGMsYSxiKXtjIT09YSYmUyhjLGEsYiwiPT09IixqZSl9ZnVuY3Rpb24ga2UoYyxhLGIpe2M9PT1hJiZTKGMsYSxiLCIhPT0iLGtlKX1mdW5jdGlvbiBsZShjLGEpe2lmKCFjfHwhYSlyZXR1cm4hMTsKaWYoIltvYmplY3QgUmVnRXhwXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSlyZXR1cm4gYS50ZXN0KGMpO3RyeXtpZihjIGluc3RhbmNlb2YgYSlyZXR1cm4hMH1jYXRjaChiKXt9cmV0dXJuIEVycm9yLmlzUHJvdG90eXBlT2YoYSk/ITE6ITA9PT1hLmNhbGwoe30sYyl9ZnVuY3Rpb24gbWUoYyxhLGIsZCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PT10eXBlb2YgYiYmKGQ9YixiPW51bGwpO3RyeXthKCl9Y2F0Y2goaCl7dmFyIGU9aH1hPWU7ZD0oYiYmYi5uYW1lPyIgKCIrYi5uYW1lKyIpLiI6Ii4iKSsoZD8iICIrZDoiLiIpO2MmJiFhJiZTKGEsYiwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK2QpO2U9InN0cmluZyI9PT10eXBlb2YgZDt2YXIgZj0hYyYmb2IoYSksZz0hYyYmYSYmIWI7KGYmJmUmJmxlKGEsYil8fGcpJiZTKGEsCmIsIkdvdCB1bndhbnRlZCBleGNlcHRpb24iK2QpO2lmKGMmJmEmJmImJiFsZShhLGIpfHwhYyYmYSl0aHJvdyBhO31mdW5jdGlvbiBiZyhjLGEpe2Zvcih2YXIgYj0wLGQ9Yy5sZW5ndGgtMTswPD1kO2QtLSl7dmFyIGU9Y1tkXTsiLiI9PT1lP2Muc3BsaWNlKGQsMSk6Ii4uIj09PWU/KGMuc3BsaWNlKGQsMSksYisrKTpiJiYoYy5zcGxpY2UoZCwxKSxiLS0pfWlmKGEpZm9yKDtiLS07YiljLnVuc2hpZnQoIi4uIik7cmV0dXJuIGN9ZnVuY3Rpb24gSGMoKXtmb3IodmFyIGM9IiIsYT0hMSxiPWFyZ3VtZW50cy5sZW5ndGgtMTstMTw9YiYmIWE7Yi0tKXt2YXIgZD0wPD1iP2FyZ3VtZW50c1tiXToiLyI7aWYoInN0cmluZyIhPT10eXBlb2YgZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2QmJihjPWQrIi8iK2MsYT0iLyI9PT1kLmNoYXJBdCgwKSl9Yz1iZyhjZyhjLnNwbGl0KCIvIiksZnVuY3Rpb24oYSl7cmV0dXJuISFhfSksCiFhKS5qb2luKCIvIik7cmV0dXJuKGE/Ii8iOiIiKStjfHwiLiJ9ZnVuY3Rpb24gUGIoYyxhKXtmdW5jdGlvbiBiKGEpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGgmJiIiPT09YVtjXTtjKyspO2Zvcih2YXIgYj1hLmxlbmd0aC0xOzA8PWImJiIiPT09YVtiXTtiLS0pO3JldHVybiBjPmI/W106YS5zbGljZShjLGItYysxKX1jPUhjKGMpLnN1YnN0cigxKTthPUhjKGEpLnN1YnN0cigxKTtjPWIoYy5zcGxpdCgiLyIpKTthPWIoYS5zcGxpdCgiLyIpKTtmb3IodmFyIGQ9TWF0aC5taW4oYy5sZW5ndGgsYS5sZW5ndGgpLGU9ZCxmPTA7ZjxkO2YrKylpZihjW2ZdIT09YVtmXSl7ZT1mO2JyZWFrfWQ9W107Zm9yKGY9ZTtmPGMubGVuZ3RoO2YrKylkLnB1c2goIi4uIik7ZD1kLmNvbmNhdChhLnNsaWNlKGUpKTtyZXR1cm4gZC5qb2luKCIvIil9ZnVuY3Rpb24gY2coYyxhKXtpZihjLmZpbHRlcilyZXR1cm4gYy5maWx0ZXIoYSk7Zm9yKHZhciBiPVtdLGQ9MDtkPGMubGVuZ3RoO2QrKylhKGNbZF0sCmQsYykmJmIucHVzaChjW2RdKTtyZXR1cm4gYn1mdW5jdGlvbiBxYSgpe31mdW5jdGlvbiB4KCl7eC5pbml0LmNhbGwodGhpcyl9ZnVuY3Rpb24gbmUoYyxhLGIsZCl7dmFyIGU7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBiKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoZT1jLl9ldmVudHMpe2UubmV3TGlzdGVuZXImJihjLmVtaXQoIm5ld0xpc3RlbmVyIixhLGIubGlzdGVuZXI/Yi5saXN0ZW5lcjpiKSxlPWMuX2V2ZW50cyk7dmFyIGY9ZVthXX1lbHNlIGU9Yy5fZXZlbnRzPW5ldyBxYSxjLl9ldmVudHNDb3VudD0wO2Y/KCJmdW5jdGlvbiI9PT10eXBlb2YgZj9mPWVbYV09ZD9bYixmXTpbZixiXTpkP2YudW5zaGlmdChiKTpmLnB1c2goYiksZi53YXJuZWR8fChiPXZvaWQgMD09PWMuX21heExpc3RlbmVycz94LmRlZmF1bHRNYXhMaXN0ZW5lcnM6Yy5fbWF4TGlzdGVuZXJzKSYmMDxiJiZmLmxlbmd0aD5iJiYoZi53YXJuZWQ9CiEwLGI9RXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitmLmxlbmd0aCsiICIrYSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKSxiLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsYi5lbWl0dGVyPWMsYi50eXBlPWEsYi5jb3VudD1mLmxlbmd0aCwiZnVuY3Rpb24iPT09dHlwZW9mIGNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4oYik6Y29uc29sZS5sb2coYikpKTooZVthXT1iLCsrYy5fZXZlbnRzQ291bnQpO3JldHVybiBjfWZ1bmN0aW9uIG9lKGMsYSxiKXtmdW5jdGlvbiBkKCl7Yy5yZW1vdmVMaXN0ZW5lcihhLGQpO2V8fChlPSEwLGIuYXBwbHkoYyxhcmd1bWVudHMpKX12YXIgZT0hMTtkLmxpc3RlbmVyPWI7cmV0dXJuIGR9ZnVuY3Rpb24gcGUoYyl7dmFyIGE9dGhpcy5fZXZlbnRzO2lmKGEpe2M9YVtjXTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGMpcmV0dXJuIDE7CmlmKGMpcmV0dXJuIGMubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIHFiKGMsYSl7Zm9yKHZhciBiPUFycmF5KGEpO2EtLTspYlthXT1jW2FdO3JldHVybiBifWZ1bmN0aW9uIExhKCl7dGhpcy50YWlsPXRoaXMuaGVhZD1udWxsO3RoaXMubGVuZ3RoPTB9ZnVuY3Rpb24gcmIoYyl7dGhpcy5lbmNvZGluZz0oY3x8InV0ZjgiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX10vLCIiKTtpZihjJiYhZGcoYykpdGhyb3cgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYyk7c3dpdGNoKHRoaXMuZW5jb2Rpbmcpe2Nhc2UgInV0ZjgiOnRoaXMuc3Vycm9nYXRlU2l6ZT0zO2JyZWFrO2Nhc2UgInVjczIiOmNhc2UgInV0ZjE2bGUiOnRoaXMuc3Vycm9nYXRlU2l6ZT0yO3RoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXI9ZWc7YnJlYWs7Y2FzZSAiYmFzZTY0Ijp0aGlzLnN1cnJvZ2F0ZVNpemU9Mzt0aGlzLmRldGVjdEluY29tcGxldGVDaGFyPWZnO2JyZWFrO2RlZmF1bHQ6dGhpcy53cml0ZT1nZzsKcmV0dXJufXRoaXMuY2hhckJ1ZmZlcj1uZXcgbCg2KTt0aGlzLmNoYXJMZW5ndGg9dGhpcy5jaGFyUmVjZWl2ZWQ9MH1mdW5jdGlvbiBnZyhjKXtyZXR1cm4gYy50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBlZyhjKXt0aGlzLmNoYXJMZW5ndGg9KHRoaXMuY2hhclJlY2VpdmVkPWMubGVuZ3RoJTIpPzI6MH1mdW5jdGlvbiBmZyhjKXt0aGlzLmNoYXJMZW5ndGg9KHRoaXMuY2hhclJlY2VpdmVkPWMubGVuZ3RoJTMpPzM6MH1mdW5jdGlvbiBoZyhjLGEsYil7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBjLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gYy5wcmVwZW5kTGlzdGVuZXIoYSxiKTtpZihjLl9ldmVudHMmJmMuX2V2ZW50c1thXSlBcnJheS5pc0FycmF5KGMuX2V2ZW50c1thXSk/Yy5fZXZlbnRzW2FdLnVuc2hpZnQoYik6Yy5fZXZlbnRzW2FdPVtiLGMuX2V2ZW50c1thXV07ZWxzZSBjLm9uKGEsYil9ZnVuY3Rpb24gcWUoYyxhKXtjPWN8fHt9O3RoaXMub2JqZWN0TW9kZT0KISFjLm9iamVjdE1vZGU7YSBpbnN0YW5jZW9mIFUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWMucmVhZGFibGVPYmplY3RNb2RlKTthPWMuaGlnaFdhdGVyTWFyazt2YXIgYj10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPWF8fDA9PT1hP2E6Yjt0aGlzLmhpZ2hXYXRlck1hcms9fn50aGlzLmhpZ2hXYXRlck1hcms7dGhpcy5idWZmZXI9bmV3IExhO3RoaXMubGVuZ3RoPTA7dGhpcy5waXBlcz1udWxsO3RoaXMucGlwZXNDb3VudD0wO3RoaXMuZmxvd2luZz1udWxsO3RoaXMucmVhZGluZz10aGlzLmVuZEVtaXR0ZWQ9dGhpcy5lbmRlZD0hMTt0aGlzLnN5bmM9ITA7dGhpcy5yZXN1bWVTY2hlZHVsZWQ9dGhpcy5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmVtaXR0ZWRSZWFkYWJsZT10aGlzLm5lZWRSZWFkYWJsZT0hMTt0aGlzLmRlZmF1bHRFbmNvZGluZz1jLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiO3RoaXMucmFuT3V0PSExO3RoaXMuYXdhaXREcmFpbj0KMDt0aGlzLnJlYWRpbmdNb3JlPSExO3RoaXMuZW5jb2Rpbmc9dGhpcy5kZWNvZGVyPW51bGw7Yy5lbmNvZGluZyYmKHRoaXMuZGVjb2Rlcj1uZXcgcmIoYy5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1jLmVuY29kaW5nKX1mdW5jdGlvbiB5KGMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeShjKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBxZShjLHRoaXMpO3RoaXMucmVhZGFibGU9ITA7YyYmImZ1bmN0aW9uIj09PXR5cGVvZiBjLnJlYWQmJih0aGlzLl9yZWFkPWMucmVhZCk7eC5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJlKGMsYSxiLGQsZSl7dmFyIGY9YixnPW51bGw7cGEoZil8fCJzdHJpbmciPT09dHlwZW9mIGZ8fG51bGw9PT1mfHx2b2lkIDA9PT1mfHxhLm9iamVjdE1vZGV8fChnPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSk7aWYoZj1nKWMuZW1pdCgiZXJyb3IiLGYpO2Vsc2UgaWYobnVsbD09PWIpYS5yZWFkaW5nPQohMSxhLmVuZGVkfHwoYS5kZWNvZGVyJiYoYj1hLmRlY29kZXIuZW5kKCkpJiZiLmxlbmd0aCYmKGEuYnVmZmVyLnB1c2goYiksYS5sZW5ndGgrPWEub2JqZWN0TW9kZT8xOmIubGVuZ3RoKSxhLmVuZGVkPSEwLFFiKGMpKTtlbHNlIGlmKGEub2JqZWN0TW9kZXx8YiYmMDxiLmxlbmd0aClpZihhLmVuZGVkJiYhZSljLmVtaXQoImVycm9yIixFcnJvcigic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSk7ZWxzZSBpZihhLmVuZEVtaXR0ZWQmJmUpYy5lbWl0KCJlcnJvciIsRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpO2Vsc2V7aWYoYS5kZWNvZGVyJiYhZSYmIWQpe2I9YS5kZWNvZGVyLndyaXRlKGIpO3ZhciBoPSFhLm9iamVjdE1vZGUmJjA9PT1iLmxlbmd0aH1lfHwoYS5yZWFkaW5nPSExKTtofHwoYS5mbG93aW5nJiYwPT09YS5sZW5ndGgmJiFhLnN5bmM/KGMuZW1pdCgiZGF0YSIsYiksYy5yZWFkKDApKTooYS5sZW5ndGgrPWEub2JqZWN0TW9kZT8xOmIubGVuZ3RoLAplP2EuYnVmZmVyLnVuc2hpZnQoYik6YS5idWZmZXIucHVzaChiKSxhLm5lZWRSZWFkYWJsZSYmUWIoYykpKTthLnJlYWRpbmdNb3JlfHwoYS5yZWFkaW5nTW9yZT0hMCxYKGlnLGMsYSkpfWVsc2UgZXx8KGEucmVhZGluZz0hMSk7cmV0dXJuIWEuZW5kZWQmJihhLm5lZWRSZWFkYWJsZXx8YS5sZW5ndGg8YS5oaWdoV2F0ZXJNYXJrfHwwPT09YS5sZW5ndGgpfWZ1bmN0aW9uIHNlKGMsYSl7aWYoMD49Y3x8MD09PWEubGVuZ3RoJiZhLmVuZGVkKXJldHVybiAwO2lmKGEub2JqZWN0TW9kZSlyZXR1cm4gMTtpZihjIT09YylyZXR1cm4gYS5mbG93aW5nJiZhLmxlbmd0aD9hLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOmEubGVuZ3RoO2lmKGM+YS5oaWdoV2F0ZXJNYXJrKXt2YXIgYj1jOzgzODg2MDg8PWI/Yj04Mzg4NjA4OihiLS0sYnw9Yj4+PjEsYnw9Yj4+PjIsYnw9Yj4+PjQsYnw9Yj4+PjgsYnw9Yj4+PjE2LGIrKyk7YS5oaWdoV2F0ZXJNYXJrPWJ9cmV0dXJuIGM8PWEubGVuZ3RoP2M6CmEuZW5kZWQ/YS5sZW5ndGg6KGEubmVlZFJlYWRhYmxlPSEwLDApfWZ1bmN0aW9uIFFiKGMpe3ZhciBhPWMuX3JlYWRhYmxlU3RhdGU7YS5uZWVkUmVhZGFibGU9ITE7YS5lbWl0dGVkUmVhZGFibGV8fCh6KCJlbWl0UmVhZGFibGUiLGEuZmxvd2luZyksYS5lbWl0dGVkUmVhZGFibGU9ITAsYS5zeW5jP1godGUsYyk6dGUoYykpfWZ1bmN0aW9uIHRlKGMpe3ooImVtaXQgcmVhZGFibGUiKTtjLmVtaXQoInJlYWRhYmxlIik7SWMoYyl9ZnVuY3Rpb24gaWcoYyxhKXtmb3IodmFyIGI9YS5sZW5ndGg7IWEucmVhZGluZyYmIWEuZmxvd2luZyYmIWEuZW5kZWQmJmEubGVuZ3RoPGEuaGlnaFdhdGVyTWFyayYmKHooIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksYy5yZWFkKDApLGIhPT1hLmxlbmd0aCk7KWI9YS5sZW5ndGg7YS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBqZyhjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1jLl9yZWFkYWJsZVN0YXRlO3ooInBpcGVPbkRyYWluIixhLmF3YWl0RHJhaW4pOwphLmF3YWl0RHJhaW4mJmEuYXdhaXREcmFpbi0tOzA9PT1hLmF3YWl0RHJhaW4mJmMubGlzdGVuZXJzKCJkYXRhIikubGVuZ3RoJiYoYS5mbG93aW5nPSEwLEljKGMpKX19ZnVuY3Rpb24ga2coYyl7eigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIik7Yy5yZWFkKDApfWZ1bmN0aW9uIGxnKGMsYSl7YS5yZWFkaW5nfHwoeigicmVzdW1lIHJlYWQgMCIpLGMucmVhZCgwKSk7YS5yZXN1bWVTY2hlZHVsZWQ9ITE7YS5hd2FpdERyYWluPTA7Yy5lbWl0KCJyZXN1bWUiKTtJYyhjKTthLmZsb3dpbmcmJiFhLnJlYWRpbmcmJmMucmVhZCgwKX1mdW5jdGlvbiBJYyhjKXt2YXIgYT1jLl9yZWFkYWJsZVN0YXRlO2Zvcih6KCJmbG93IixhLmZsb3dpbmcpO2EuZmxvd2luZyYmbnVsbCE9PWMucmVhZCgpOyk7fWZ1bmN0aW9uIHVlKGMsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsO2lmKGEub2JqZWN0TW9kZSl2YXIgYj1hLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYoIWN8fGM+PWEubGVuZ3RoKWI9CmEuZGVjb2Rlcj9hLmJ1ZmZlci5qb2luKCIiKToxPT09YS5idWZmZXIubGVuZ3RoP2EuYnVmZmVyLmhlYWQuZGF0YTphLmJ1ZmZlci5jb25jYXQoYS5sZW5ndGgpLGEuYnVmZmVyLmNsZWFyKCk7ZWxzZXtiPWEuYnVmZmVyO2E9YS5kZWNvZGVyO2lmKGM8Yi5oZWFkLmRhdGEubGVuZ3RoKWE9Yi5oZWFkLmRhdGEuc2xpY2UoMCxjKSxiLmhlYWQuZGF0YT1iLmhlYWQuZGF0YS5zbGljZShjKTtlbHNle2lmKGM9PT1iLmhlYWQuZGF0YS5sZW5ndGgpYj1iLnNoaWZ0KCk7ZWxzZSBpZihhKXthPWIuaGVhZDt2YXIgZD0xLGU9YS5kYXRhO2ZvcihjLT1lLmxlbmd0aDthPWEubmV4dDspe3ZhciBmPWEuZGF0YSxnPWM+Zi5sZW5ndGg/Zi5sZW5ndGg6YztlPWc9PT1mLmxlbmd0aD9lK2Y6ZStmLnNsaWNlKDAsYyk7Yy09ZztpZigwPT09Yyl7Zz09PWYubGVuZ3RoPygrK2QsYi5oZWFkPWEubmV4dD9hLm5leHQ6Yi50YWlsPW51bGwpOihiLmhlYWQ9YSxhLmRhdGE9Zi5zbGljZShnKSk7YnJlYWt9KytkfWIubGVuZ3RoLT0KZDtiPWV9ZWxzZXthPWwuYWxsb2NVbnNhZmUoYyk7ZD1iLmhlYWQ7ZT0xO2QuZGF0YS5jb3B5KGEpO2ZvcihjLT1kLmRhdGEubGVuZ3RoO2Q9ZC5uZXh0Oyl7Zj1kLmRhdGE7Zz1jPmYubGVuZ3RoP2YubGVuZ3RoOmM7Zi5jb3B5KGEsYS5sZW5ndGgtYywwLGcpO2MtPWc7aWYoMD09PWMpe2c9PT1mLmxlbmd0aD8oKytlLGIuaGVhZD1kLm5leHQ/ZC5uZXh0OmIudGFpbD1udWxsKTooYi5oZWFkPWQsZC5kYXRhPWYuc2xpY2UoZykpO2JyZWFrfSsrZX1iLmxlbmd0aC09ZTtiPWF9YT1ifWI9YX1yZXR1cm4gYn1mdW5jdGlvbiBKYyhjKXt2YXIgYT1jLl9yZWFkYWJsZVN0YXRlO2lmKDA8YS5sZW5ndGgpdGhyb3cgRXJyb3IoJyJlbmRSZWFkYWJsZSgpIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO2EuZW5kRW1pdHRlZHx8KGEuZW5kZWQ9ITAsWChtZyxhLGMpKX1mdW5jdGlvbiBtZyhjLGEpe2MuZW5kRW1pdHRlZHx8MCE9PWMubGVuZ3RofHwoYy5lbmRFbWl0dGVkPSEwLGEucmVhZGFibGU9CiExLGEuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIG5nKGMsYSl7Zm9yKHZhciBiPTAsZD1jLmxlbmd0aDtiPGQ7YisrKWEoY1tiXSxiKX1mdW5jdGlvbiB2ZShjLGEpe2Zvcih2YXIgYj0wLGQ9Yy5sZW5ndGg7YjxkO2IrKylpZihjW2JdPT09YSlyZXR1cm4gYjtyZXR1cm4tMX1mdW5jdGlvbiBvZygpe31mdW5jdGlvbiBwZyhjLGEsYil7dGhpcy5jaHVuaz1jO3RoaXMuZW5jb2Rpbmc9YTt0aGlzLmNhbGxiYWNrPWI7dGhpcy5uZXh0PW51bGx9ZnVuY3Rpb24gS2MoYyxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnVmZmVyIix7Z2V0OnhjKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIpfSk7Yz1jfHx7fTt0aGlzLm9iamVjdE1vZGU9ISFjLm9iamVjdE1vZGU7YSBpbnN0YW5jZW9mIFUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwKISFjLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIGI9Yy5oaWdoV2F0ZXJNYXJrLGQ9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz1ifHwwPT09Yj9iOmQ7dGhpcy5oaWdoV2F0ZXJNYXJrPX5+dGhpcy5oaWdoV2F0ZXJNYXJrO3RoaXMuZmluaXNoZWQ9dGhpcy5lbmRlZD10aGlzLmVuZGluZz10aGlzLm5lZWREcmFpbj0hMTt0aGlzLmRlY29kZVN0cmluZ3M9ITEhPT1jLmRlY29kZVN0cmluZ3M7dGhpcy5kZWZhdWx0RW5jb2Rpbmc9Yy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Ijt0aGlzLmxlbmd0aD0wO3RoaXMud3JpdGluZz0hMTt0aGlzLmNvcmtlZD0wO3RoaXMuc3luYz0hMDt0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITE7dGhpcy5vbndyaXRlPWZ1bmN0aW9uKGMpe3ZhciBiPWEuX3dyaXRhYmxlU3RhdGUsZD1iLnN5bmMsZT1iLndyaXRlY2I7Yi53cml0aW5nPSExO2Iud3JpdGVjYj1udWxsO2IubGVuZ3RoLT1iLndyaXRlbGVuO2Iud3JpdGVsZW49MDtjPwooLS1iLnBlbmRpbmdjYixkP1goZSxjKTplKGMpLGEuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGEuZW1pdCgiZXJyb3IiLGMpKTooKGM9d2UoYikpfHxiLmNvcmtlZHx8Yi5idWZmZXJQcm9jZXNzaW5nfHwhYi5idWZmZXJlZFJlcXVlc3R8fHhlKGEsYiksZD9YKHllLGEsYixjLGUpOnllKGEsYixjLGUpKX07dGhpcy53cml0ZWNiPW51bGw7dGhpcy53cml0ZWxlbj0wO3RoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD10aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsO3RoaXMucGVuZGluZ2NiPTA7dGhpcy5lcnJvckVtaXR0ZWQ9dGhpcy5wcmVmaW5pc2hlZD0hMTt0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTA7dGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHplKHRoaXMpfWZ1bmN0aW9uIEwoYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgTHx8dGhpcyBpbnN0YW5jZW9mIFUpKXJldHVybiBuZXcgTChjKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBLYyhjLHRoaXMpO3RoaXMud3JpdGFibGU9CiEwO2MmJigiZnVuY3Rpb24iPT09dHlwZW9mIGMud3JpdGUmJih0aGlzLl93cml0ZT1jLndyaXRlKSwiZnVuY3Rpb24iPT09dHlwZW9mIGMud3JpdGV2JiYodGhpcy5fd3JpdGV2PWMud3JpdGV2KSk7eC5jYWxsKHRoaXMpfWZ1bmN0aW9uIExjKGMsYSxiLGQsZSxmLGcpe2Eud3JpdGVsZW49ZDthLndyaXRlY2I9ZzthLndyaXRpbmc9ITA7YS5zeW5jPSEwO2I/Yy5fd3JpdGV2KGUsYS5vbndyaXRlKTpjLl93cml0ZShlLGYsYS5vbndyaXRlKTthLnN5bmM9ITF9ZnVuY3Rpb24geWUoYyxhLGIsZCl7IWImJjA9PT1hLmxlbmd0aCYmYS5uZWVkRHJhaW4mJihhLm5lZWREcmFpbj0hMSxjLmVtaXQoImRyYWluIikpO2EucGVuZGluZ2NiLS07ZCgpO0FlKGMsYSl9ZnVuY3Rpb24geGUoYyxhKXthLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIGI9YS5idWZmZXJlZFJlcXVlc3Q7aWYoYy5fd3JpdGV2JiZiJiZiLm5leHQpe3ZhciBkPUFycmF5KGEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLGU9YS5jb3JrZWRSZXF1ZXN0c0ZyZWU7CmUuZW50cnk9Yjtmb3IodmFyIGY9MDtiOylkW2ZdPWIsYj1iLm5leHQsZis9MTtMYyhjLGEsITAsYS5sZW5ndGgsZCwiIixlLmZpbmlzaCk7YS5wZW5kaW5nY2IrKzthLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbDtlLm5leHQ/KGEuY29ya2VkUmVxdWVzdHNGcmVlPWUubmV4dCxlLm5leHQ9bnVsbCk6YS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHplKGEpfWVsc2V7Zm9yKDtiJiYoZD1iLmNodW5rLExjKGMsYSwhMSxhLm9iamVjdE1vZGU/MTpkLmxlbmd0aCxkLGIuZW5jb2RpbmcsYi5jYWxsYmFjayksYj1iLm5leHQsIWEud3JpdGluZyk7KTtudWxsPT09YiYmKGEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1hLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTA7YS5idWZmZXJlZFJlcXVlc3Q9YjthLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gd2UoYyl7cmV0dXJuIGMuZW5kaW5nJiYwPT09Yy5sZW5ndGgmJm51bGw9PT1jLmJ1ZmZlcmVkUmVxdWVzdCYmIWMuZmluaXNoZWQmJiFjLndyaXRpbmd9CmZ1bmN0aW9uIEFlKGMsYSl7dmFyIGI9d2UoYSk7YiYmKDA9PT1hLnBlbmRpbmdjYj8oYS5wcmVmaW5pc2hlZHx8KGEucHJlZmluaXNoZWQ9ITAsYy5lbWl0KCJwcmVmaW5pc2giKSksYS5maW5pc2hlZD0hMCxjLmVtaXQoImZpbmlzaCIpKTphLnByZWZpbmlzaGVkfHwoYS5wcmVmaW5pc2hlZD0hMCxjLmVtaXQoInByZWZpbmlzaCIpKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gemUoYyl7dmFyIGE9dGhpczt0aGlzLmVudHJ5PXRoaXMubmV4dD1udWxsO3RoaXMuZmluaXNoPWZ1bmN0aW9uKGIpe3ZhciBkPWEuZW50cnk7Zm9yKGEuZW50cnk9bnVsbDtkOyl7dmFyIGU9ZC5jYWxsYmFjaztjLnBlbmRpbmdjYi0tO2UoYik7ZD1kLm5leHR9Yy5jb3JrZWRSZXF1ZXN0c0ZyZWU/Yy5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1hOmMuY29ya2VkUmVxdWVzdHNGcmVlPWF9fWZ1bmN0aW9uIFUoYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgVSkpcmV0dXJuIG5ldyBVKGMpO3kuY2FsbCh0aGlzLGMpO0wuY2FsbCh0aGlzLApjKTtjJiYhMT09PWMucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKTtjJiYhMT09PWMud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKTt0aGlzLmFsbG93SGFsZk9wZW49ITA7YyYmITE9PT1jLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpO3RoaXMub25jZSgiZW5kIixxZyl9ZnVuY3Rpb24gcWcoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fFgocmcsdGhpcyl9ZnVuY3Rpb24gcmcoYyl7Yy5lbmQoKX1mdW5jdGlvbiBzZyhjKXt0aGlzLmFmdGVyVHJhbnNmb3JtPWZ1bmN0aW9uKGEsYil7dmFyIGQ9Yy5fdHJhbnNmb3JtU3RhdGU7ZC50cmFuc2Zvcm1pbmc9ITE7dmFyIGU9ZC53cml0ZWNiO2U/KGQud3JpdGVjaHVuaz1udWxsLGQud3JpdGVjYj1udWxsLG51bGwhPT1iJiZ2b2lkIDAhPT1iJiZjLnB1c2goYiksZShhKSxhPWMuX3JlYWRhYmxlU3RhdGUsYS5yZWFkaW5nPSExLChhLm5lZWRSZWFkYWJsZXx8YS5sZW5ndGg8CmEuaGlnaFdhdGVyTWFyaykmJmMuX3JlYWQoYS5oaWdoV2F0ZXJNYXJrKSxhPXZvaWQgMCk6YT1jLmVtaXQoImVycm9yIixFcnJvcigibm8gd3JpdGVjYiBpbiBUcmFuc2Zvcm0gY2xhc3MiKSk7cmV0dXJuIGF9O3RoaXMudHJhbnNmb3JtaW5nPXRoaXMubmVlZFRyYW5zZm9ybT0hMTt0aGlzLndyaXRlZW5jb2Rpbmc9dGhpcy53cml0ZWNodW5rPXRoaXMud3JpdGVjYj1udWxsfWZ1bmN0aW9uIGJhKGMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGJhKSlyZXR1cm4gbmV3IGJhKGMpO1UuY2FsbCh0aGlzLGMpO3RoaXMuX3RyYW5zZm9ybVN0YXRlPW5ldyBzZyh0aGlzKTt2YXIgYT10aGlzO3RoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwO3RoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMTtjJiYoImZ1bmN0aW9uIj09PXR5cGVvZiBjLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1jLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09PXR5cGVvZiBjLmZsdXNoJiYodGhpcy5fZmx1c2g9CmMuZmx1c2gpKTt0aGlzLm9uY2UoInByZWZpbmlzaCIsZnVuY3Rpb24oKXsiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKGMpe0JlKGEsYyl9KTpCZShhKX0pfWZ1bmN0aW9uIEJlKGMsYSl7aWYoYSlyZXR1cm4gYy5lbWl0KCJlcnJvciIsYSk7YT1jLl90cmFuc2Zvcm1TdGF0ZTtpZihjLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwIik7aWYoYS50cmFuc2Zvcm1pbmcpdGhyb3cgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gYy5wdXNoKG51bGwpfWZ1bmN0aW9uIHNiKGMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHNiKSlyZXR1cm4gbmV3IHNiKGMpO2JhLmNhbGwodGhpcyxjKX1mdW5jdGlvbiBjYSgpe3guY2FsbCh0aGlzKX1mdW5jdGlvbiB0ZyhjLGEpe3ZhciBiPWMuc3BsaXQoIkAiKSwKZD0iIjsxPGIubGVuZ3RoJiYoZD1iWzBdKyJAIixjPWJbMV0pO2M9Yy5yZXBsYWNlKHVnLCIuIik7Yz1jLnNwbGl0KCIuIik7Yj1jLmxlbmd0aDtmb3IodmFyIGU9W107Yi0tOyllW2JdPWEoY1tiXSk7YT1lLmpvaW4oIi4iKTtyZXR1cm4gZCthfWZ1bmN0aW9uIENlKGMsYSl7cmV0dXJuIGMrMjIrNzUqKDI2PmMpLSgoMCE9YSk8PDUpfWZ1bmN0aW9uIHZnKGMpe3JldHVybiB0ZyhjLGZ1bmN0aW9uKGEpe2lmKHdnLnRlc3QoYSkpe3ZhciBjLGQ9W10sZT1bXSxmPTA7Zm9yKGM9YS5sZW5ndGg7ZjxjOyl7dmFyIGc9YS5jaGFyQ29kZUF0KGYrKyk7aWYoNTUyOTY8PWcmJjU2MzE5Pj1nJiZmPGMpe3ZhciBoPWEuY2hhckNvZGVBdChmKyspOzU2MzIwPT0oaCY2NDUxMik/ZS5wdXNoKCgoZyYxMDIzKTw8MTApKyhoJjEwMjMpKzY1NTM2KTooZS5wdXNoKGcpLGYtLSl9ZWxzZSBlLnB1c2goZyl9YT1lO2g9YS5sZW5ndGg7ZT0xMjg7dmFyIGs9MCx0PTcyO2ZvcihnPTA7ZzxoOysrZyl7dmFyIHE9CmFbZ107MTI4PnEmJmQucHVzaChNYyhxKSl9Zm9yKChmPWM9ZC5sZW5ndGgpJiZkLnB1c2goIi0iKTtmPGg7KXt2YXIgQT0yMTQ3NDgzNjQ3O2ZvcihnPTA7ZzxoOysrZylxPWFbZ10scT49ZSYmcTxBJiYoQT1xKTt2YXIgcj1mKzE7aWYoQS1lPlphKCgyMTQ3NDgzNjQ3LWspL3IpKXRocm93IG5ldyBSYW5nZUVycm9yKERlLm92ZXJmbG93KTtrKz0oQS1lKSpyO2U9QTtmb3IoZz0wO2c8aDsrK2cpe3E9YVtnXTtpZihxPGUmJjIxNDc0ODM2NDc8KytrKXRocm93IG5ldyBSYW5nZUVycm9yKERlLm92ZXJmbG93KTtpZihxPT1lKXt2YXIgUD1rO2ZvcihBPTM2OztBKz0zNil7cT1BPD10PzE6QT49dCsyNj8yNjpBLXQ7aWYoUDxxKWJyZWFrO3ZhciBwPVAtcTtQPTM2LXE7ZC5wdXNoKE1jKENlKHErcCVQLDApKSk7UD1aYShwL1ApfWQucHVzaChNYyhDZShQLDApKSk7dD1yO0E9MDtrPWY9PWM/WmEoay83MDApOms+PjE7Zm9yKGsrPVphKGsvdCk7NDU1PGs7QSs9MzYpaz1aYShrLzM1KTt0PQpaYShBKzM2KmsvKGsrMzgpKTtrPTA7KytmfX0rK2s7KytlfWQ9InhuLS0iK2Quam9pbigiIil9ZWxzZSBkPWE7cmV0dXJuIGR9KX1mdW5jdGlvbiB0YihjKXtzd2l0Y2godHlwZW9mIGMpe2Nhc2UgInN0cmluZyI6cmV0dXJuIGM7Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIGM/InRydWUiOiJmYWxzZSI7Y2FzZSAibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUoYyk/YzoiIjtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiB4ZyhjLGEsYixkKXthPWF8fCImIjtiPWJ8fCI9IjtudWxsPT09YyYmKGM9dm9pZCAwKTtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBjP0VlKHlnKGMpLGZ1bmN0aW9uKGQpe3ZhciBlPWVuY29kZVVSSUNvbXBvbmVudCh0YihkKSkrYjtyZXR1cm4gRmUoY1tkXSk/RWUoY1tkXSxmdW5jdGlvbihhKXtyZXR1cm4gZStlbmNvZGVVUklDb21wb25lbnQodGIoYSkpfSkuam9pbihhKTplK2VuY29kZVVSSUNvbXBvbmVudCh0YihjW2RdKSl9KS5qb2luKGEpOmQ/ZW5jb2RlVVJJQ29tcG9uZW50KHRiKGQpKSsKYitlbmNvZGVVUklDb21wb25lbnQodGIoYykpOiIifWZ1bmN0aW9uIEVlKGMsYSl7aWYoYy5tYXApcmV0dXJuIGMubWFwKGEpO2Zvcih2YXIgYj1bXSxkPTA7ZDxjLmxlbmd0aDtkKyspYi5wdXNoKGEoY1tkXSxkKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gR2UoYyxhLGIsZCl7Yj1ifHwiPSI7dmFyIGU9e307aWYoInN0cmluZyIhPT10eXBlb2YgY3x8MD09PWMubGVuZ3RoKXJldHVybiBlO3ZhciBmPS9cKy9nO2M9Yy5zcGxpdChhfHwiJiIpO2E9MUUzO2QmJiJudW1iZXIiPT09dHlwZW9mIGQubWF4S2V5cyYmKGE9ZC5tYXhLZXlzKTtkPWMubGVuZ3RoOzA8YSYmZD5hJiYoZD1hKTtmb3IoYT0wO2E8ZDsrK2Epe3ZhciBnPWNbYV0ucmVwbGFjZShmLCIlMjAiKSxoPWcuaW5kZXhPZihiKTtpZigwPD1oKXt2YXIgaz1nLnN1YnN0cigwLGgpO2c9Zy5zdWJzdHIoaCsxKX1lbHNlIGs9ZyxnPSIiO2s9ZGVjb2RlVVJJQ29tcG9uZW50KGspO2c9ZGVjb2RlVVJJQ29tcG9uZW50KGcpO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLAprKT9GZShlW2tdKT9lW2tdLnB1c2goZyk6ZVtrXT1bZVtrXSxnXTplW2tdPWd9cmV0dXJuIGV9ZnVuY3Rpb24gZGEoKXt0aGlzLmhyZWY9dGhpcy5wYXRoPXRoaXMucGF0aG5hbWU9dGhpcy5xdWVyeT10aGlzLnNlYXJjaD10aGlzLmhhc2g9dGhpcy5ob3N0bmFtZT10aGlzLnBvcnQ9dGhpcy5ob3N0PXRoaXMuYXV0aD10aGlzLnNsYXNoZXM9dGhpcy5wcm90b2NvbD1udWxsfWZ1bmN0aW9uIFJiKGMsYSxiKXtpZihjJiZ3YShjKSYmYyBpbnN0YW5jZW9mIGRhKXJldHVybiBjO3ZhciBkPW5ldyBkYTtkLnBhcnNlKGMsYSxiKTtyZXR1cm4gZH1mdW5jdGlvbiBIZShjLGEsYixkKXtpZighSmEoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBhKTt2YXIgZT1hLmluZGV4T2YoIj8iKTtlPS0xIT09ZSYmZTxhLmluZGV4T2YoIiMiKT8iPyI6IiMiO2E9YS5zcGxpdChlKTthWzBdPWFbMF0ucmVwbGFjZSgvXFwvZywKIi8iKTthPWEuam9pbihlKTtlPWEudHJpbSgpO2lmKCFkJiYxPT09YS5zcGxpdCgiIyIpLmxlbmd0aCYmKGE9emcuZXhlYyhlKSkpcmV0dXJuIGMucGF0aD1lLGMuaHJlZj1lLGMucGF0aG5hbWU9YVsxXSxhWzJdPyhjLnNlYXJjaD1hWzJdLGMucXVlcnk9Yj9HZShjLnNlYXJjaC5zdWJzdHIoMSkpOmMuc2VhcmNoLnN1YnN0cigxKSk6YiYmKGMuc2VhcmNoPSIiLGMucXVlcnk9e30pLGM7aWYoYT1BZy5leGVjKGUpKXthPWFbMF07dmFyIGY9YS50b0xvd2VyQ2FzZSgpO2MucHJvdG9jb2w9ZjtlPWUuc3Vic3RyKGEubGVuZ3RoKX1pZihkfHxhfHxlLm1hdGNoKC9eXC9cL1teQFwvXStAW15AXC9dKy8pKXt2YXIgZz0iLy8iPT09ZS5zdWJzdHIoMCwyKTshZ3x8YSYmTmNbYV18fChlPWUuc3Vic3RyKDIpLGMuc2xhc2hlcz0hMCl9aWYoIU5jW2FdJiYoZ3x8YSYmISRhW2FdKSl7YT0tMTtmb3IoZD0wO2Q8SWUubGVuZ3RoO2QrKylnPWUuaW5kZXhPZihJZVtkXSksLTEhPT1nJiYoLTE9PT1hfHwKZzxhKSYmKGE9Zyk7Zz0tMT09PWE/ZS5sYXN0SW5kZXhPZigiQCIpOmUubGFzdEluZGV4T2YoIkAiLGEpOy0xIT09ZyYmKGQ9ZS5zbGljZSgwLGcpLGU9ZS5zbGljZShnKzEpLGMuYXV0aD1kZWNvZGVVUklDb21wb25lbnQoZCkpO2E9LTE7Zm9yKGQ9MDtkPEplLmxlbmd0aDtkKyspZz1lLmluZGV4T2YoSmVbZF0pLC0xIT09ZyYmKC0xPT09YXx8ZzxhKSYmKGE9Zyk7LTE9PT1hJiYoYT1lLmxlbmd0aCk7Yy5ob3N0PWUuc2xpY2UoMCxhKTtlPWUuc2xpY2UoYSk7S2UoYyk7Yy5ob3N0bmFtZT1jLmhvc3RuYW1lfHwiIjtnPSJbIj09PWMuaG9zdG5hbWVbMF0mJiJdIj09PWMuaG9zdG5hbWVbYy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIWcpe3ZhciBoPWMuaG9zdG5hbWUuc3BsaXQoL1wuLyk7ZD0wO2ZvcihhPWgubGVuZ3RoO2Q8YTtkKyspe3ZhciBrPWhbZF07aWYoayYmIWsubWF0Y2goTGUpKXtmb3IodmFyIHQ9IiIscT0wLEE9ay5sZW5ndGg7cTxBO3ErKyl0PTEyNzxrLmNoYXJDb2RlQXQocSk/CnQrIngiOnQra1txXTtpZighdC5tYXRjaChMZSkpe2E9aC5zbGljZSgwLGQpO2Q9aC5zbGljZShkKzEpO2lmKGs9ay5tYXRjaChCZykpYS5wdXNoKGtbMV0pLGQudW5zaGlmdChrWzJdKTtkLmxlbmd0aCYmKGU9Ii8iK2Quam9pbigiLiIpK2UpO2MuaG9zdG5hbWU9YS5qb2luKCIuIik7YnJlYWt9fX19Yy5ob3N0bmFtZT1jLmhvc3RuYW1lLmxlbmd0aD5DZz8iIjpjLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7Z3x8KGMuaG9zdG5hbWU9dmcoYy5ob3N0bmFtZSkpO2Q9Yy5wb3J0PyI6IitjLnBvcnQ6IiI7Yy5ob3N0PShjLmhvc3RuYW1lfHwiIikrZDtjLmhyZWYrPWMuaG9zdDtnJiYoYy5ob3N0bmFtZT1jLmhvc3RuYW1lLnN1YnN0cigxLGMuaG9zdG5hbWUubGVuZ3RoLTIpLCIvIiE9PWVbMF0mJihlPSIvIitlKSl9aWYoIURnW2ZdKWZvcihkPTAsYT1PYy5sZW5ndGg7ZDxhO2QrKylnPU9jW2RdLC0xIT09ZS5pbmRleE9mKGcpJiYoaz1lbmNvZGVVUklDb21wb25lbnQoZyksaz09PWcmJgooaz1lc2NhcGUoZykpLGU9ZS5zcGxpdChnKS5qb2luKGspKTtkPWUuaW5kZXhPZigiIyIpOy0xIT09ZCYmKGMuaGFzaD1lLnN1YnN0cihkKSxlPWUuc2xpY2UoMCxkKSk7ZD1lLmluZGV4T2YoIj8iKTstMSE9PWQ/KGMuc2VhcmNoPWUuc3Vic3RyKGQpLGMucXVlcnk9ZS5zdWJzdHIoZCsxKSxiJiYoYy5xdWVyeT1HZShjLnF1ZXJ5KSksZT1lLnNsaWNlKDAsZCkpOmImJihjLnNlYXJjaD0iIixjLnF1ZXJ5PXt9KTtlJiYoYy5wYXRobmFtZT1lKTskYVtmXSYmYy5ob3N0bmFtZSYmIWMucGF0aG5hbWUmJihjLnBhdGhuYW1lPSIvIik7aWYoYy5wYXRobmFtZXx8Yy5zZWFyY2gpZD1jLnBhdGhuYW1lfHwiIixjLnBhdGg9ZCsoYy5zZWFyY2h8fCIiKTtjLmhyZWY9UGMoYyk7cmV0dXJuIGN9ZnVuY3Rpb24gUGMoYyl7dmFyIGE9Yy5hdXRofHwiIjthJiYoYT1lbmNvZGVVUklDb21wb25lbnQoYSksYT1hLnJlcGxhY2UoLyUzQS9pLCI6IiksYSs9IkAiKTt2YXIgYj1jLnByb3RvY29sfHwiIiwKZD1jLnBhdGhuYW1lfHwiIixlPWMuaGFzaHx8IiIsZj0hMSxnPSIiO2MuaG9zdD9mPWErYy5ob3N0OmMuaG9zdG5hbWUmJihmPWErKC0xPT09Yy5ob3N0bmFtZS5pbmRleE9mKCI6Iik/Yy5ob3N0bmFtZToiWyIrdGhpcy5ob3N0bmFtZSsiXSIpLGMucG9ydCYmKGYrPSI6IitjLnBvcnQpKTtjLnF1ZXJ5JiZ3YShjLnF1ZXJ5KSYmT2JqZWN0LmtleXMoYy5xdWVyeSkubGVuZ3RoJiYoZz14ZyhjLnF1ZXJ5KSk7YT1jLnNlYXJjaHx8ZyYmIj8iK2d8fCIiO2ImJiI6IiE9PWIuc3Vic3RyKC0xKSYmKGIrPSI6Iik7Yy5zbGFzaGVzfHwoIWJ8fCRhW2JdKSYmITEhPT1mPyhmPSIvLyIrKGZ8fCIiKSxkJiYiLyIhPT1kLmNoYXJBdCgwKSYmKGQ9Ii8iK2QpKTpmfHwoZj0iIik7ZSYmIiMiIT09ZS5jaGFyQXQoMCkmJihlPSIjIitlKTthJiYiPyIhPT1hLmNoYXJBdCgwKSYmKGE9Ij8iK2EpO2Q9ZC5yZXBsYWNlKC9bPyNdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChhKX0pOwphPWEucmVwbGFjZSgiIyIsIiUyMyIpO3JldHVybiBiK2YrZCthK2V9ZnVuY3Rpb24gS2UoYyl7dmFyIGE9Yy5ob3N0LGI9RWcuZXhlYyhhKTtiJiYoYj1iWzBdLCI6IiE9PWImJihjLnBvcnQ9Yi5zdWJzdHIoMSkpLGE9YS5zdWJzdHIoMCxhLmxlbmd0aC1iLmxlbmd0aCkpO2EmJihjLmhvc3RuYW1lPWEpfWZ1bmN0aW9uIFFjKGMsYSl7UWM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsYyl7YS5fX3Byb3RvX189Y318fGZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBiIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShiKSYmKGFbYl09Y1tiXSl9O3JldHVybiBRYyhjLGEpfWZ1bmN0aW9uIFJjKGMsYSl7ZnVuY3Rpb24gYigpe3RoaXMuY29uc3RydWN0b3I9Y31RYyhjLGEpO2MucHJvdG90eXBlPW51bGw9PT1hP09iamVjdC5jcmVhdGUoYSk6KGIucHJvdG90eXBlPWEucHJvdG90eXBlLG5ldyBiKX1mdW5jdGlvbiBTYihjKXt2YXIgYT0KImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmNbU3ltYm9sLml0ZXJhdG9yXSxiPTA7cmV0dXJuIGE/YS5jYWxsKGMpOntuZXh0OmZ1bmN0aW9uKCl7YyYmYj49Yy5sZW5ndGgmJihjPXZvaWQgMCk7cmV0dXJue3ZhbHVlOmMmJmNbYisrXSxkb25lOiFjfX19fWZ1bmN0aW9uIFRiKGMsYSl7dmFyIGI9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmNbU3ltYm9sLml0ZXJhdG9yXTtpZighYilyZXR1cm4gYztjPWIuY2FsbChjKTt2YXIgZCxlPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1hfHwwPGEtLSkmJiEoZD1jLm5leHQoKSkuZG9uZTspZS5wdXNoKGQudmFsdWUpfWNhdGNoKGcpe3ZhciBmPXtlcnJvcjpnfX1maW5hbGx5e3RyeXtkJiYhZC5kb25lJiYoYj1jWyJyZXR1cm4iXSkmJmIuY2FsbChjKX1maW5hbGx5e2lmKGYpdGhyb3cgZi5lcnJvcjt9fXJldHVybiBlfWZ1bmN0aW9uIFViKCl7Zm9yKHZhciBjPVtdLGE9MDthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKWM9Yy5jb25jYXQoVGIoYXJndW1lbnRzW2FdKSk7CnJldHVybiBjfWZ1bmN0aW9uIE1lKCl7U2M9ITA7Zm9yKHZhciBjPTA7NjQ+YzsrK2MpZWFbY109IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iW2NdLE1bIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLmNoYXJDb2RlQXQoYyldPWM7TVs0NV09NjI7TVs5NV09NjN9ZnVuY3Rpb24gRmcoYyxhLGIpe2Zvcih2YXIgZD1bXSxlPWE7ZTxiO2UrPTMpYT0oY1tlXTw8MTYpKyhjW2UrMV08PDgpK2NbZSsyXSxkLnB1c2goZWFbYT4+MTgmNjNdK2VhW2E+PjEyJjYzXStlYVthPj42JjYzXStlYVthJjYzXSk7cmV0dXJuIGQuam9pbigiIil9ZnVuY3Rpb24gTmUoYyl7U2N8fE1lKCk7Zm9yKHZhciBhPWMubGVuZ3RoLGI9YSUzLGQ9IiIsZT1bXSxmPTAsZz1hLWI7ZjxnO2YrPTE2MzgzKWUucHVzaChGZyhjLGYsZisxNjM4Mz5nP2c6ZisxNjM4MykpOzE9PT0KYj8oYz1jW2EtMV0sZCs9ZWFbYz4+Ml0sZCs9ZWFbYzw8NCY2M10sZCs9Ij09Iik6Mj09PWImJihjPShjW2EtMl08PDgpK2NbYS0xXSxkKz1lYVtjPj4xMF0sZCs9ZWFbYz4+NCY2M10sZCs9ZWFbYzw8MiY2M10sZCs9Ij0iKTtlLnB1c2goZCk7cmV0dXJuIGUuam9pbigiIil9ZnVuY3Rpb24gVmIoYyxhLGIsZCxlKXt2YXIgZj04KmUtZC0xLGc9KDE8PGYpLTEsaD1nPj4xLGs9LTc7ZT1iP2UtMTowO3ZhciB0PWI/LTE6MSxxPWNbYStlXTtlKz10O2I9cSYoMTw8LWspLTE7cT4+PS1rO2ZvcihrKz1mOzA8aztiPTI1NipiK2NbYStlXSxlKz10LGstPTgpO2Y9YiYoMTw8LWspLTE7Yj4+PS1rO2ZvcihrKz1kOzA8aztmPTI1NipmK2NbYStlXSxlKz10LGstPTgpO2lmKDA9PT1iKWI9MS1oO2Vsc2V7aWYoYj09PWcpcmV0dXJuIGY/TmFOOkluZmluaXR5KihxPy0xOjEpO2YrPU1hdGgucG93KDIsZCk7Yi09aH1yZXR1cm4ocT8tMToxKSpmKk1hdGgucG93KDIsYi1kKX1mdW5jdGlvbiBXYihjLAphLGIsZCxlLGYpe3ZhciBnLGg9OCpmLWUtMSxrPSgxPDxoKS0xLHQ9az4+MSxxPTIzPT09ZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjA7Zj1kPzA6Zi0xO3ZhciBBPWQ/MTotMSxyPTA+YXx8MD09PWEmJjA+MS9hPzE6MDthPU1hdGguYWJzKGEpO2Zvcihpc05hTihhKXx8SW5maW5pdHk9PT1hPyhhPWlzTmFOKGEpPzE6MCxkPWspOihkPU1hdGguZmxvb3IoTWF0aC5sb2coYSkvTWF0aC5MTjIpLDE+YSooZz1NYXRoLnBvdygyLC1kKSkmJihkLS0sZyo9MiksYT0xPD1kK3Q/YStxL2c6YStxKk1hdGgucG93KDIsMS10KSwyPD1hKmcmJihkKyssZy89MiksZCt0Pj1rPyhhPTAsZD1rKToxPD1kK3Q/KGE9KGEqZy0xKSpNYXRoLnBvdygyLGUpLGQrPXQpOihhPWEqTWF0aC5wb3coMix0LTEpKk1hdGgucG93KDIsZSksZD0wKSk7ODw9ZTtjW2IrZl09YSYyNTUsZis9QSxhLz0yNTYsZS09OCk7ZD1kPDxlfGE7Zm9yKGgrPWU7MDxoO2NbYitmXT1kJjI1NSxmKz1BLGQvPTI1NiwKaC09OCk7Y1tiK2YtQV18PTEyOCpyfWZ1bmN0aW9uIG1hKGMsYSl7aWYoKG0uVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjMpPGEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7bS5UWVBFRF9BUlJBWV9TVVBQT1JUPyhjPW5ldyBVaW50OEFycmF5KGEpLGMuX19wcm90b19fPW0ucHJvdG90eXBlKToobnVsbD09PWMmJihjPW5ldyBtKGEpKSxjLmxlbmd0aD1hKTtyZXR1cm4gY31mdW5jdGlvbiBtKGMsYSxiKXtpZighKG0uVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIG0pKXJldHVybiBuZXcgbShjLGEsYik7aWYoIm51bWJlciI9PT10eXBlb2YgYyl7aWYoInN0cmluZyI9PT10eXBlb2YgYSl0aHJvdyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gVGModGhpcyxjKX1yZXR1cm4gT2UodGhpcyxjLAphLGIpfWZ1bmN0aW9uIE9lKGMsYSxiLGQpe2lmKCJudW1iZXIiPT09dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe2EuYnl0ZUxlbmd0aDtpZigwPmJ8fGEuYnl0ZUxlbmd0aDxiKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYoYS5ieXRlTGVuZ3RoPGIrKGR8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7YT12b2lkIDA9PT1iJiZ2b2lkIDA9PT1kP25ldyBVaW50OEFycmF5KGEpOnZvaWQgMD09PWQ/bmV3IFVpbnQ4QXJyYXkoYSxiKTpuZXcgVWludDhBcnJheShhLGIsZCk7bS5UWVBFRF9BUlJBWV9TVVBQT1JUPyhjPWEsYy5fX3Byb3RvX189bS5wcm90b3R5cGUpOmM9VWMoYyxhKTtyZXR1cm4gY31pZigic3RyaW5nIj09PQp0eXBlb2YgYSl7ZD1jO2M9YjtpZigic3RyaW5nIiE9PXR5cGVvZiBjfHwiIj09PWMpYz0idXRmOCI7aWYoIW0uaXNFbmNvZGluZyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTtiPVBlKGEsYyl8MDtkPW1hKGQsYik7YT1kLndyaXRlKGEsYyk7YSE9PWImJihkPWQuc2xpY2UoMCxhKSk7cmV0dXJuIGR9cmV0dXJuIEdnKGMsYSl9ZnVuY3Rpb24gUWUoYyl7aWYoIm51bWJlciIhPT10eXBlb2YgYyl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKDA+Yyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyk7fWZ1bmN0aW9uIFRjKGMsYSl7UWUoYSk7Yz1tYShjLDA+YT8wOlZjKGEpfDApO2lmKCFtLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBiPTA7YjxhOysrYiljW2JdPTA7cmV0dXJuIGN9ZnVuY3Rpb24gVWMoYywKYSl7dmFyIGI9MD5hLmxlbmd0aD8wOlZjKGEubGVuZ3RoKXwwO2M9bWEoYyxiKTtmb3IodmFyIGQ9MDtkPGI7ZCs9MSljW2RdPWFbZF0mMjU1O3JldHVybiBjfWZ1bmN0aW9uIEdnKGMsYSl7aWYoZmEoYSkpe3ZhciBiPVZjKGEubGVuZ3RoKXwwO2M9bWEoYyxiKTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGM7YS5jb3B5KGMsMCwwLGIpO3JldHVybiBjfWlmKGEpe2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZhLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIGEpcmV0dXJuKGI9Im51bWJlciIhPT10eXBlb2YgYS5sZW5ndGgpfHwoYj1hLmxlbmd0aCxiPWIhPT1iKSxiP21hKGMsMCk6VWMoYyxhKTtpZigiQnVmZmVyIj09PWEudHlwZSYmUmUoYS5kYXRhKSlyZXR1cm4gVWMoYyxhLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKTsKfWZ1bmN0aW9uIFZjKGMpe2lmKGM+PShtLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrKG0uVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjMpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIGN8MH1mdW5jdGlvbiBmYShjKXtyZXR1cm4hKG51bGw9PWN8fCFjLl9pc0J1ZmZlcil9ZnVuY3Rpb24gUGUoYyxhKXtpZihmYShjKSlyZXR1cm4gYy5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGMpfHxjIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBjLmJ5dGVMZW5ndGg7InN0cmluZyIhPT10eXBlb2YgYyYmKGM9IiIrYyk7dmFyIGI9Yy5sZW5ndGg7CmlmKDA9PT1iKXJldHVybiAwO2Zvcih2YXIgZD0hMTs7KXN3aXRjaChhKXtjYXNlICJhc2NpaSI6Y2FzZSAibGF0aW4xIjpjYXNlICJiaW5hcnkiOnJldHVybiBiO2Nhc2UgInV0ZjgiOmNhc2UgInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gWGIoYykubGVuZ3RoO2Nhc2UgInVjczIiOmNhc2UgInVjcy0yIjpjYXNlICJ1dGYxNmxlIjpjYXNlICJ1dGYtMTZsZSI6cmV0dXJuIDIqYjtjYXNlICJoZXgiOnJldHVybiBiPj4+MTtjYXNlICJiYXNlNjQiOnJldHVybiBTZShjKS5sZW5ndGg7ZGVmYXVsdDppZihkKXJldHVybiBYYihjKS5sZW5ndGg7YT0oIiIrYSkudG9Mb3dlckNhc2UoKTtkPSEwfX1mdW5jdGlvbiBIZyhjLGEsYil7dmFyIGQ9ITE7aWYodm9pZCAwPT09YXx8MD5hKWE9MDtpZihhPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKHZvaWQgMD09PWJ8fGI+dGhpcy5sZW5ndGgpYj10aGlzLmxlbmd0aDtpZigwPj1iKXJldHVybiIiO2I+Pj49MDthPj4+PTA7aWYoYjw9YSlyZXR1cm4iIjsKZm9yKGN8fChjPSJ1dGY4Iik7Oylzd2l0Y2goYyl7Y2FzZSAiaGV4IjpjPWE7YT1iO2I9dGhpcy5sZW5ndGg7aWYoIWN8fDA+YyljPTA7aWYoIWF8fDA+YXx8YT5iKWE9YjtkPSIiO2ZvcihiPWM7YjxhOysrYiljPWQsZD10aGlzW2JdLGQ9MTY+ZD8iMCIrZC50b1N0cmluZygxNik6ZC50b1N0cmluZygxNiksZD1jK2Q7cmV0dXJuIGQ7Y2FzZSAidXRmOCI6Y2FzZSAidXRmLTgiOnJldHVybiBUZSh0aGlzLGEsYik7Y2FzZSAiYXNjaWkiOmM9IiI7Zm9yKGI9TWF0aC5taW4odGhpcy5sZW5ndGgsYik7YTxiOysrYSljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXNbYV0mMTI3KTtyZXR1cm4gYztjYXNlICJsYXRpbjEiOmNhc2UgImJpbmFyeSI6Yz0iIjtmb3IoYj1NYXRoLm1pbih0aGlzLmxlbmd0aCxiKTthPGI7KythKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpc1thXSk7cmV0dXJuIGM7Y2FzZSAiYmFzZTY0IjpyZXR1cm4gYT0wPT09YSYmYj09PXRoaXMubGVuZ3RoP05lKHRoaXMpOgpOZSh0aGlzLnNsaWNlKGEsYikpLGE7Y2FzZSAidWNzMiI6Y2FzZSAidWNzLTIiOmNhc2UgInV0ZjE2bGUiOmNhc2UgInV0Zi0xNmxlIjphPXRoaXMuc2xpY2UoYSxiKTtiPSIiO2ZvcihjPTA7YzxhLmxlbmd0aDtjKz0yKWIrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtjXSsyNTYqYVtjKzFdKTtyZXR1cm4gYjtkZWZhdWx0OmlmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitjKTtjPShjKyIiKS50b0xvd2VyQ2FzZSgpO2Q9ITB9fWZ1bmN0aW9uIE1hKGMsYSxiKXt2YXIgZD1jW2FdO2NbYV09Y1tiXTtjW2JdPWR9ZnVuY3Rpb24gVWUoYyxhLGIsZCxlKXtpZigwPT09Yy5sZW5ndGgpcmV0dXJuLTE7InN0cmluZyI9PT10eXBlb2YgYj8oZD1iLGI9MCk6MjE0NzQ4MzY0NzxiP2I9MjE0NzQ4MzY0NzotMjE0NzQ4MzY0OD5iJiYoYj0tMjE0NzQ4MzY0OCk7Yj0rYjtpc05hTihiKSYmKGI9ZT8wOmMubGVuZ3RoLTEpOzA+YiYmKGI9Yy5sZW5ndGgrYik7aWYoYj49CmMubGVuZ3RoKXtpZihlKXJldHVybi0xO2I9Yy5sZW5ndGgtMX1lbHNlIGlmKDA+YilpZihlKWI9MDtlbHNlIHJldHVybi0xOyJzdHJpbmciPT09dHlwZW9mIGEmJihhPW0uZnJvbShhLGQpKTtpZihmYShhKSlyZXR1cm4gMD09PWEubGVuZ3RoPy0xOlZlKGMsYSxiLGQsZSk7aWYoIm51bWJlciI9PT10eXBlb2YgYSlyZXR1cm4gYSY9MjU1LG0uVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2U/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGMsYSxiKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGMsYSxiKTpWZShjLFthXSxiLGQsZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIik7fWZ1bmN0aW9uIFZlKGMsYSxiLGQsZSl7ZnVuY3Rpb24gZihhLGMpe3JldHVybiAxPT09Zz9hW2NdOmEucmVhZFVJbnQxNkJFKGMqCmcpfXZhciBnPTEsaD1jLmxlbmd0aCxrPWEubGVuZ3RoO2lmKHZvaWQgMCE9PWQmJihkPVN0cmluZyhkKS50b0xvd2VyQ2FzZSgpLCJ1Y3MyIj09PWR8fCJ1Y3MtMiI9PT1kfHwidXRmMTZsZSI9PT1kfHwidXRmLTE2bGUiPT09ZCkpe2lmKDI+Yy5sZW5ndGh8fDI+YS5sZW5ndGgpcmV0dXJuLTE7Zz0yO2gvPTI7ay89MjtiLz0yfWlmKGUpZm9yKGQ9LTE7YjxoO2IrKylpZihmKGMsYik9PT1mKGEsLTE9PT1kPzA6Yi1kKSl7aWYoLTE9PT1kJiYoZD1iKSxiLWQrMT09PWspcmV0dXJuIGQqZ31lbHNlLTEhPT1kJiYoYi09Yi1kKSxkPS0xO2Vsc2UgZm9yKGIraz5oJiYoYj1oLWspOzA8PWI7Yi0tKXtoPSEwO2ZvcihkPTA7ZDxrO2QrKylpZihmKGMsYitkKSE9PWYoYSxkKSl7aD0hMTticmVha31pZihoKXJldHVybiBifXJldHVybi0xfWZ1bmN0aW9uIFRlKGMsYSxiKXtiPU1hdGgubWluKGMubGVuZ3RoLGIpO2Zvcih2YXIgZD1bXTthPGI7KXt2YXIgZT1jW2FdLGY9bnVsbCxnPTIzOTxlPwo0OjIyMzxlPzM6MTkxPGU/MjoxO2lmKGErZzw9Yilzd2l0Y2goZyl7Y2FzZSAxOjEyOD5lJiYoZj1lKTticmVhaztjYXNlIDI6dmFyIGg9Y1thKzFdOzEyOD09PShoJjE5MikmJihlPShlJjMxKTw8NnxoJjYzLDEyNzxlJiYoZj1lKSk7YnJlYWs7Y2FzZSAzOmg9Y1thKzFdO3ZhciBrPWNbYSsyXTsxMjg9PT0oaCYxOTIpJiYxMjg9PT0oayYxOTIpJiYoZT0oZSYxNSk8PDEyfChoJjYzKTw8NnxrJjYzLDIwNDc8ZSYmKDU1Mjk2PmV8fDU3MzQzPGUpJiYoZj1lKSk7YnJlYWs7Y2FzZSA0Omg9Y1thKzFdO2s9Y1thKzJdO3ZhciB0PWNbYSszXTsxMjg9PT0oaCYxOTIpJiYxMjg9PT0oayYxOTIpJiYxMjg9PT0odCYxOTIpJiYoZT0oZSYxNSk8PDE4fChoJjYzKTw8MTJ8KGsmNjMpPDw2fHQmNjMsNjU1MzU8ZSYmMTExNDExMj5lJiYoZj1lKSl9bnVsbD09PWY/KGY9NjU1MzMsZz0xKTo2NTUzNTxmJiYoZi09NjU1MzYsZC5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfGYmMTAyMyk7CmQucHVzaChmKTthKz1nfWM9ZC5sZW5ndGg7aWYoYzw9V2UpZD1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxkKTtlbHNle2I9IiI7Zm9yKGE9MDthPGM7KWIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGQuc2xpY2UoYSxhKz1XZSkpO2Q9Yn1yZXR1cm4gZH1mdW5jdGlvbiBJKGMsYSxiKXtpZigwIT09YyUxfHwwPmMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGMrYT5iKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIik7fWZ1bmN0aW9uIFYoYyxhLGIsZCxlLGYpe2lmKCFmYShjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoYT5lfHxhPGYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKGIrZD5jLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7Cn1mdW5jdGlvbiBZYihjLGEsYixkKXswPmEmJihhPTY1NTM1K2ErMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihjLmxlbmd0aC1iLDIpO2U8ZjsrK2UpY1tiK2VdPShhJjI1NTw8OCooZD9lOjEtZSkpPj4+OCooZD9lOjEtZSl9ZnVuY3Rpb24gWmIoYyxhLGIsZCl7MD5hJiYoYT00Mjk0OTY3Mjk1K2ErMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihjLmxlbmd0aC1iLDQpO2U8ZjsrK2UpY1tiK2VdPWE+Pj44KihkP2U6My1lKSYyNTV9ZnVuY3Rpb24gJGIoYyxhLGIsZCl7aWYoYitkPmMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZigwPmIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO31mdW5jdGlvbiBYYihjLGEpe2E9YXx8SW5maW5pdHk7Zm9yKHZhciBiLGQ9Yy5sZW5ndGgsZT1udWxsLGY9W10sZz0wO2c8ZDsrK2cpe2I9Yy5jaGFyQ29kZUF0KGcpO2lmKDU1Mjk1PGImJjU3MzQ0PmIpe2lmKCFlKXtpZig1NjMxOTwKYil7LTE8KGEtPTMpJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWVsc2UgaWYoZysxPT09ZCl7LTE8KGEtPTMpJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWU9Yjtjb250aW51ZX1pZig1NjMyMD5iKXstMTwoYS09MykmJmYucHVzaCgyMzksMTkxLDE4OSk7ZT1iO2NvbnRpbnVlfWI9KGUtNTUyOTY8PDEwfGItNTYzMjApKzY1NTM2fWVsc2UgZSYmLTE8KGEtPTMpJiZmLnB1c2goMjM5LDE5MSwxODkpO2U9bnVsbDtpZigxMjg+Yil7aWYoMD4tLWEpYnJlYWs7Zi5wdXNoKGIpfWVsc2UgaWYoMjA0OD5iKXtpZigwPihhLT0yKSlicmVhaztmLnB1c2goYj4+NnwxOTIsYiY2M3wxMjgpfWVsc2UgaWYoNjU1MzY+Yil7aWYoMD4oYS09MykpYnJlYWs7Zi5wdXNoKGI+PjEyfDIyNCxiPj42JjYzfDEyOCxiJjYzfDEyOCl9ZWxzZSBpZigxMTE0MTEyPmIpe2lmKDA+KGEtPTQpKWJyZWFrO2YucHVzaChiPj4xOHwyNDAsYj4+MTImNjN8MTI4LGI+PjYmNjN8MTI4LGImNjN8MTI4KX1lbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTsKfXJldHVybiBmfWZ1bmN0aW9uIFhlKGMpe2Zvcih2YXIgYT1bXSxiPTA7YjxjLmxlbmd0aDsrK2IpYS5wdXNoKGMuY2hhckNvZGVBdChiKSYyNTUpO3JldHVybiBhfWZ1bmN0aW9uIFNlKGMpe2M9KGMudHJpbT9jLnRyaW0oKTpjLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKSkucmVwbGFjZShJZywiIik7aWYoMj5jLmxlbmd0aCljPSIiO2Vsc2UgZm9yKDswIT09Yy5sZW5ndGglNDspYys9Ij0iO1NjfHxNZSgpO3ZhciBhPWMubGVuZ3RoO2lmKDA8YSU0KXRocm93IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIGI9Ij0iPT09Y1thLTJdPzI6Ij0iPT09Y1thLTFdPzE6MCxkPW5ldyBKZygzKmEvNC1iKSxlPTA8Yj9hLTQ6YSxmPTA7Zm9yKGE9MDthPGU7YSs9NCl7dmFyIGc9TVtjLmNoYXJDb2RlQXQoYSldPDwxOHxNW2MuY2hhckNvZGVBdChhKzEpXTw8MTJ8TVtjLmNoYXJDb2RlQXQoYSsyKV08PDZ8TVtjLmNoYXJDb2RlQXQoYSsKMyldO2RbZisrXT1nPj4xNiYyNTU7ZFtmKytdPWc+PjgmMjU1O2RbZisrXT1nJjI1NX0yPT09Yj8oZz1NW2MuY2hhckNvZGVBdChhKV08PDJ8TVtjLmNoYXJDb2RlQXQoYSsxKV0+PjQsZFtmKytdPWcmMjU1KToxPT09YiYmKGc9TVtjLmNoYXJDb2RlQXQoYSldPDwxMHxNW2MuY2hhckNvZGVBdChhKzEpXTw8NHxNW2MuY2hhckNvZGVBdChhKzIpXT4+MixkW2YrK109Zz4+OCYyNTUsZFtmKytdPWcmMjU1KTtyZXR1cm4gZH1mdW5jdGlvbiB1YihjLGEsYixkKXtmb3IodmFyIGU9MDtlPGQmJiEoZStiPj1hLmxlbmd0aHx8ZT49Yy5sZW5ndGgpOysrZSlhW2UrYl09Y1tlXTtyZXR1cm4gZX1mdW5jdGlvbiBZZShjKXtyZXR1cm4gbnVsbCE9YyYmKCEhYy5faXNCdWZmZXJ8fFplKGMpfHwiZnVuY3Rpb24iPT09dHlwZW9mIGMucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PT10eXBlb2YgYy5zbGljZSYmWmUoYy5zbGljZSgwLDApKSl9ZnVuY3Rpb24gWmUoYyl7cmV0dXJuISFjLmNvbnN0cnVjdG9yJiYKImZ1bmN0aW9uIj09PXR5cGVvZiBjLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZjLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGMpfWZ1bmN0aW9uIFdjKGMsYSl7cmV0dXJuIGE9e2V4cG9ydHM6e319LGMoYSxhLmV4cG9ydHMpLGEuZXhwb3J0c31mdW5jdGlvbiAkZSgpe3Rocm93IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIik7fWZ1bmN0aW9uIGFmKCl7dGhyb3cgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpO31mdW5jdGlvbiBiZihjKXtpZihyYT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoYywwKTtpZigocmE9PT0kZXx8IXJhKSYmc2V0VGltZW91dClyZXR1cm4gcmE9c2V0VGltZW91dCxzZXRUaW1lb3V0KGMsMCk7dHJ5e3JldHVybiByYShjLDApfWNhdGNoKGEpe3RyeXtyZXR1cm4gcmEuY2FsbChudWxsLGMsMCl9Y2F0Y2goYil7cmV0dXJuIHJhLmNhbGwodGhpcyxjLDApfX19ZnVuY3Rpb24gS2coYyl7aWYoeWE9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChjKTsKaWYoKHlhPT09YWZ8fCF5YSkmJmNsZWFyVGltZW91dClyZXR1cm4geWE9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChjKTt0cnl7cmV0dXJuIHlhKGMpfWNhdGNoKGEpe3RyeXtyZXR1cm4geWEuY2FsbChudWxsLGMpfWNhdGNoKGIpe3JldHVybiB5YS5jYWxsKHRoaXMsYyl9fX1mdW5jdGlvbiBMZygpe2FiJiZOYSYmKGFiPSExLE5hLmxlbmd0aD9zYT1OYS5jb25jYXQoc2EpOmFjPS0xLHNhLmxlbmd0aCYmY2YoKSl9ZnVuY3Rpb24gY2YoKXtpZighYWIpe3ZhciBjPWJmKExnKTthYj0hMDtmb3IodmFyIGE9c2EubGVuZ3RoO2E7KXtOYT1zYTtmb3Ioc2E9W107KythYzxhOylOYSYmTmFbYWNdLnJ1bigpO2FjPS0xO2E9c2EubGVuZ3RofU5hPW51bGw7YWI9ITE7S2coYyl9fWZ1bmN0aW9uIGRmKGMpe3ZhciBhPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgYj0xO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYVtiLTFdPWFyZ3VtZW50c1tiXTsKc2EucHVzaChuZXcgZWYoYyxhKSk7MSE9PXNhLmxlbmd0aHx8YWJ8fGJmKGNmKX1mdW5jdGlvbiBlZihjLGEpe3RoaXMuZnVuPWM7dGhpcy5hcnJheT1hfWZ1bmN0aW9uIE9hKCl7fWZ1bmN0aW9uIGhhKGMpe2lmKCJzdHJpbmciIT09dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGMpKTt9ZnVuY3Rpb24gZmYoYyxhKXtmb3IodmFyIGI9IiIsZD0wLGU9LTEsZj0wLGcsaD0wO2g8PWMubGVuZ3RoOysraCl7aWYoaDxjLmxlbmd0aClnPWMuY2hhckNvZGVBdChoKTtlbHNlIGlmKDQ3PT09ZylicmVhaztlbHNlIGc9NDc7aWYoNDc9PT1nKXtpZihlIT09aC0xJiYxIT09ZilpZihlIT09aC0xJiYyPT09Zil7aWYoMj5iLmxlbmd0aHx8MiE9PWR8fDQ2IT09Yi5jaGFyQ29kZUF0KGIubGVuZ3RoLTEpfHw0NiE9PWIuY2hhckNvZGVBdChiLmxlbmd0aC0yKSlpZigyPGIubGVuZ3RoKXtpZihlPWIubGFzdEluZGV4T2YoIi8iKSwKZSE9PWIubGVuZ3RoLTEpey0xPT09ZT8oYj0iIixkPTApOihiPWIuc2xpY2UoMCxlKSxkPWIubGVuZ3RoLTEtYi5sYXN0SW5kZXhPZigiLyIpKTtlPWg7Zj0wO2NvbnRpbnVlfX1lbHNlIGlmKDI9PT1iLmxlbmd0aHx8MT09PWIubGVuZ3RoKXtiPSIiO2Q9MDtlPWg7Zj0wO2NvbnRpbnVlfWEmJihiPTA8Yi5sZW5ndGg/YisiLy4uIjoiLi4iLGQ9Mil9ZWxzZSBiPTA8Yi5sZW5ndGg/YisoIi8iK2Muc2xpY2UoZSsxLGgpKTpjLnNsaWNlKGUrMSxoKSxkPWgtZS0xO2U9aDtmPTB9ZWxzZSA0Nj09PWcmJi0xIT09Zj8rK2Y6Zj0tMX1yZXR1cm4gYn1mdW5jdGlvbiBQYShjKXt2YXIgYT1NYXRoLnRydW5jKGMpO2M9bihNYXRoLnJvdW5kKDFFNiooYy1hKSkpO3JldHVybiBuKGEpKm4oMUU2KStjfWZ1bmN0aW9uIGJiKGMpeyJudW1iZXIiPT09dHlwZW9mIGMmJihjPU1hdGgudHJ1bmMoYykpO2M9bihjKTtyZXR1cm4gTnVtYmVyKGMvbigxRTYpKX1mdW5jdGlvbiBCKGMpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgYT0KW10sYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYVtiXT1hcmd1bWVudHNbYl07dHJ5e3JldHVybiBjLmFwcGx5KHZvaWQgMCxVYihhKSl9Y2F0Y2goZCl7aWYoZCYmZC5jb2RlJiYic3RyaW5nIj09PXR5cGVvZiBkLmNvZGUpcmV0dXJuIE1nW2QuY29kZV18fDI4O2lmKGQgaW5zdGFuY2VvZiBYYylyZXR1cm4gZC5lcnJubzt0aHJvdyBkO319fWZ1bmN0aW9uIGdmKGMsYSl7dmFyIGI9Yy5GRF9NQVAuZ2V0KGEpO2lmKCFiKXRocm93IG5ldyBYYyg4KTtpZih2b2lkIDA9PT1iLmZpbGV0eXBlKXt2YXIgZD1jLmJpbmRpbmdzLmZzLmZzdGF0U3luYyhiLnJlYWwpO2M9aGYoYyxhLGQpO2E9Yy5yaWdodHNCYXNlO2Q9Yy5yaWdodHNJbmhlcml0aW5nO2IuZmlsZXR5cGU9Yy5maWxldHlwZTtiLnJpZ2h0c3x8KGIucmlnaHRzPXtiYXNlOmEsaW5oZXJpdGluZzpkfSl9cmV0dXJuIGJ9ZnVuY3Rpb24gaGYoYyxhLGIpe3N3aXRjaCghMCl7Y2FzZSBiLmlzQmxvY2tEZXZpY2UoKTpyZXR1cm57ZmlsZXR5cGU6MSwKcmlnaHRzQmFzZTpjYixyaWdodHNJbmhlcml0aW5nOmNifTtjYXNlIGIuaXNDaGFyYWN0ZXJEZXZpY2UoKTpyZXR1cm4gdm9pZCAwIT09YSYmYy5iaW5kaW5ncy5pc1RUWShhKT97ZmlsZXR5cGU6MixyaWdodHNCYXNlOk5nLHJpZ2h0c0luaGVyaXRpbmc6T2d9OntmaWxldHlwZToyLHJpZ2h0c0Jhc2U6Y2IscmlnaHRzSW5oZXJpdGluZzpjYn07Y2FzZSBiLmlzRGlyZWN0b3J5KCk6cmV0dXJue2ZpbGV0eXBlOjMscmlnaHRzQmFzZTpZYyxyaWdodHNJbmhlcml0aW5nOmpmfTtjYXNlIGIuaXNGSUZPKCk6cmV0dXJue2ZpbGV0eXBlOjYscmlnaHRzQmFzZTprZixyaWdodHNJbmhlcml0aW5nOmNifTtjYXNlIGIuaXNGaWxlKCk6cmV0dXJue2ZpbGV0eXBlOjQscmlnaHRzQmFzZTpsZixyaWdodHNJbmhlcml0aW5nOlBnfTtjYXNlIGIuaXNTb2NrZXQoKTpyZXR1cm57ZmlsZXR5cGU6NixyaWdodHNCYXNlOmtmLHJpZ2h0c0luaGVyaXRpbmc6Y2J9O2Nhc2UgYi5pc1N5bWJvbGljTGluaygpOnJldHVybntmaWxldHlwZTo3LApyaWdodHNCYXNlOm4oMCkscmlnaHRzSW5oZXJpdGluZzpuKDApfTtkZWZhdWx0OnJldHVybntmaWxldHlwZTowLHJpZ2h0c0Jhc2U6bigwKSxyaWdodHNJbmhlcml0aW5nOm4oMCl9fX1sZXQgdmQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksRWY9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksRGY9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLG5jPW5ldyBXZWFrU2V0LHlkPW5ldyBNYXAoW1sicHJveHkiLHtjYW5IYW5kbGU6Yz0+YyYmY1t2ZF0sc2VyaWFsaXplKGMpe2NvbnN0IHtwb3J0MTphLHBvcnQyOmJ9PW5ldyBNZXNzYWdlQ2hhbm5lbDttYyhjLGEpO3JldHVybltiLFtiXV19LGRlc2VyaWFsaXplOmM9PntjLnN0YXJ0KCk7cmV0dXJuIHBjKGMsW10sdm9pZCAwKX19XSxbInRocm93Iix7Y2FuSGFuZGxlOmM9Pm5jLmhhcyhjKSxzZXJpYWxpemUoYyl7Y29uc3QgYT1jIGluc3RhbmNlb2YgRXJyb3I7bGV0IGI9YzthJiYoYj17aXNFcnJvcjphLG1lc3NhZ2U6Yy5tZXNzYWdlLApzdGFjazpjLnN0YWNrfSk7cmV0dXJuW2IsW11dfSxkZXNlcmlhbGl6ZShjKXtpZihjLmlzRXJyb3IpdGhyb3cgT2JqZWN0LmFzc2lnbihFcnJvcigpLGMpO3Rocm93IGM7fX1dXSkseGQ9bmV3IFdlYWtNYXA7dmFyIHFjPWZ1bmN0aW9uKGMsYSl7cWM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsYyl7YS5fX3Byb3RvX189Y318fGZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBiIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShiKSYmKGFbYl09Y1tiXSl9O3JldHVybiBxYyhjLGEpfSxkYj1mdW5jdGlvbigpe2RiPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGMpe2Zvcih2YXIgYSxiPTEsZD1hcmd1bWVudHMubGVuZ3RoO2I8ZDtiKyspe2E9YXJndW1lbnRzW2JdO2Zvcih2YXIgZSBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGUpJiYoY1tlXT1hW2VdKX1yZXR1cm4gY307cmV0dXJuIGRiLmFwcGx5KHRoaXMsCmFyZ3VtZW50cyl9LG5hPSJ1bmRlZmluZWQiIT09dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sTj0idW5kZWZpbmVkIiE9PXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9PXR5cGVvZiBuYT9uYToidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmP3NlbGY6e30sdT1LKGZ1bmN0aW9uKGMsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2EuY29uc3RhbnRzPXtPX1JET05MWTowLE9fV1JPTkxZOjEsT19SRFdSOjIsU19JRk1UOjYxNDQwLFNfSUZSRUc6MzI3NjgsU19JRkRJUjoxNjM4NCxTX0lGQ0hSOjgxOTIsU19JRkJMSzoyNDU3NixTX0lGSUZPOjQwOTYsU19JRkxOSzo0MDk2MCxTX0lGU09DSzo0OTE1MixPX0NSRUFUOjY0LE9fRVhDTDoxMjgsCk9fTk9DVFRZOjI1NixPX1RSVU5DOjUxMixPX0FQUEVORDoxMDI0LE9fRElSRUNUT1JZOjY1NTM2LE9fTk9BVElNRToyNjIxNDQsT19OT0ZPTExPVzoxMzEwNzIsT19TWU5DOjEwNTI2NzIsT19ESVJFQ1Q6MTYzODQsT19OT05CTE9DSzoyMDQ4LFNfSVJXWFU6NDQ4LFNfSVJVU1I6MjU2LFNfSVdVU1I6MTI4LFNfSVhVU1I6NjQsU19JUldYRzo1NixTX0lSR1JQOjMyLFNfSVdHUlA6MTYsU19JWEdSUDo4LFNfSVJXWE86NyxTX0lST1RIOjQsU19JV09USDoyLFNfSVhPVEg6MSxGX09LOjAsUl9PSzo0LFdfT0s6MixYX09LOjEsVVZfRlNfU1lNTElOS19ESVI6MSxVVl9GU19TWU1MSU5LX0pVTkNUSU9OOjIsVVZfRlNfQ09QWUZJTEVfRVhDTDoxLFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkU6MixVVl9GU19DT1BZRklMRV9GSUNMT05FX0ZPUkNFOjQsQ09QWUZJTEVfRVhDTDoxLENPUFlGSUxFX0ZJQ0xPTkU6MixDT1BZRklMRV9GSUNMT05FX0ZPUkNFOjR9fSk7USh1KTt2YXIgUWc9SyhmdW5jdGlvbihjLAphKXthLmRlZmF1bHQ9ImZ1bmN0aW9uIj09PXR5cGVvZiBCaWdJbnQ/QmlnSW50OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkJpZ0ludCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIik7fX0pLGViPUsoZnVuY3Rpb24oYyxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGI9dS5jb25zdGFudHMuU19JRk1ULGQ9dS5jb25zdGFudHMuU19JRkRJUixlPXUuY29uc3RhbnRzLlNfSUZSRUcsZj11LmNvbnN0YW50cy5TX0lGQkxLLGc9dS5jb25zdGFudHMuU19JRkNIUixoPXUuY29uc3RhbnRzLlNfSUZMTkssaz11LmNvbnN0YW50cy5TX0lGSUZPLHQ9dS5jb25zdGFudHMuU19JRlNPQ0s7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt9YS5idWlsZD1mdW5jdGlvbihjLGIpe3ZvaWQgMD09PWImJihiPSExKTt2YXIgZD1uZXcgYSxlPWMuZ2lkLGY9Yy5hdGltZSxoPWMubXRpbWUsZz1jLmN0aW1lO2I9Yj9RZy5kZWZhdWx0OgpmdW5jdGlvbihhKXtyZXR1cm4gYX07ZC51aWQ9YihjLnVpZCk7ZC5naWQ9YihlKTtkLnJkZXY9YigwKTtkLmJsa3NpemU9Yig0MDk2KTtkLmlubz1iKGMuaW5vKTtkLnNpemU9YihjLmdldFNpemUoKSk7ZC5ibG9ja3M9YigxKTtkLmF0aW1lPWY7ZC5tdGltZT1oO2QuY3RpbWU9ZztkLmJpcnRodGltZT1nO2QuYXRpbWVNcz1iKGYuZ2V0VGltZSgpKTtkLm10aW1lTXM9YihoLmdldFRpbWUoKSk7ZT1iKGcuZ2V0VGltZSgpKTtkLmN0aW1lTXM9ZTtkLmJpcnRodGltZU1zPWU7ZC5kZXY9YigwKTtkLm1vZGU9YihjLm1vZGUpO2Qubmxpbms9YihjLm5saW5rKTtyZXR1cm4gZH07YS5wcm90b3R5cGUuX2NoZWNrTW9kZVByb3BlcnR5PWZ1bmN0aW9uKGEpe3JldHVybihOdW1iZXIodGhpcy5tb2RlKSZiKT09PWF9O2EucHJvdG90eXBlLmlzRGlyZWN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGQpfTthLnByb3RvdHlwZS5pc0ZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoZSl9OwphLnByb3RvdHlwZS5pc0Jsb2NrRGV2aWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGYpfTthLnByb3RvdHlwZS5pc0NoYXJhY3RlckRldmljZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShnKX07YS5wcm90b3R5cGUuaXNTeW1ib2xpY0xpbms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoaCl9O2EucHJvdG90eXBlLmlzRklGTz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShrKX07YS5wcm90b3R5cGUuaXNTb2NrZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkodCl9O3JldHVybiBhfSgpO2EuU3RhdHM9YzthLmRlZmF1bHQ9Y30pO1EoZWIpO3ZhciBLYT0idW5kZWZpbmVkIiE9PXR5cGVvZiBuYT9uYToidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxSPVtdLApIPVtdLE9mPSJ1bmRlZmluZWQiIT09dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxzYz0hMSxSZz17fS50b1N0cmluZyxGZD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihjKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1SZy5jYWxsKGMpfTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09S2EuVFlQRURfQVJSQVlfU1VQUE9SVD9LYS5UWVBFRF9BUlJBWV9TVVBQT1JUOiEwO3ZhciBTZz1sLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzO2wucG9vbFNpemU9ODE5MjtsLl9hdWdtZW50PWZ1bmN0aW9uKGMpe2MuX19wcm90b19fPWwucHJvdG90eXBlO3JldHVybiBjfTtsLmZyb209ZnVuY3Rpb24oYyxhLGIpe3JldHVybiBDZChudWxsLGMsYSxiKX07bC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYobC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGwuX19wcm90b19fPVVpbnQ4QXJyYXkpO2wuYWxsb2M9ZnVuY3Rpb24oYywKYSxiKXtFZChjKTtyZXR1cm4gYz0wPj1jP2phKG51bGwsYyk6dm9pZCAwIT09YT8ic3RyaW5nIj09PXR5cGVvZiBiP2phKG51bGwsYykuZmlsbChhLGIpOmphKG51bGwsYykuZmlsbChhKTpqYShudWxsLGMpfTtsLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGMpe3JldHVybiB0YyhudWxsLGMpfTtsLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihjKXtyZXR1cm4gdGMobnVsbCxjKX07bC5pc0J1ZmZlcj1wYTtsLmNvbXBhcmU9ZnVuY3Rpb24oYyxhKXtpZighVyhjKXx8IVcoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGM9PT1hKXJldHVybiAwO2Zvcih2YXIgYj1jLmxlbmd0aCxkPWEubGVuZ3RoLGU9MCxmPU1hdGgubWluKGIsZCk7ZTxmOysrZSlpZihjW2VdIT09YVtlXSl7Yj1jW2VdO2Q9YVtlXTticmVha31yZXR1cm4gYjxkPy0xOmQ8Yj8xOjB9O2wuaXNFbmNvZGluZz1mdW5jdGlvbihjKXtzd2l0Y2goU3RyaW5nKGMpLnRvTG93ZXJDYXNlKCkpe2Nhc2UgImhleCI6Y2FzZSAidXRmOCI6Y2FzZSAidXRmLTgiOmNhc2UgImFzY2lpIjpjYXNlICJsYXRpbjEiOmNhc2UgImJpbmFyeSI6Y2FzZSAiYmFzZTY0IjpjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOnJldHVybiEwOwpkZWZhdWx0OnJldHVybiExfX07bC5jb25jYXQ9ZnVuY3Rpb24oYyxhKXtpZighRmQoYykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1jLmxlbmd0aClyZXR1cm4gbC5hbGxvYygwKTt2YXIgYjtpZih2b2lkIDA9PT1hKWZvcihiPWE9MDtiPGMubGVuZ3RoOysrYilhKz1jW2JdLmxlbmd0aDthPWwuYWxsb2NVbnNhZmUoYSk7dmFyIGQ9MDtmb3IoYj0wO2I8Yy5sZW5ndGg7KytiKXt2YXIgZT1jW2JdO2lmKCFXKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtlLmNvcHkoYSxkKTtkKz1lLmxlbmd0aH1yZXR1cm4gYX07bC5ieXRlTGVuZ3RoPURkO2wucHJvdG90eXBlLl9pc0J1ZmZlcj0hMDtsLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmxlbmd0aDtpZigwIT09YyUyKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpOwpmb3IodmFyIGE9MDthPGM7YSs9MilHYSh0aGlzLGEsYSsxKTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5sZW5ndGg7aWYoMCE9PWMlNCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGE9MDthPGM7YSs9NClHYSh0aGlzLGEsYSszKSxHYSh0aGlzLGErMSxhKzIpO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmxlbmd0aDtpZigwIT09YyU4KXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgYT0wO2E8YzthKz04KUdhKHRoaXMsYSxhKzcpLEdhKHRoaXMsYSsxLGErNiksR2EodGhpcyxhKzIsYSs1KSxHYSh0aGlzLGErMyxhKzQpO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBjPQp0aGlzLmxlbmd0aHwwO3JldHVybiAwPT09Yz8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9IZCh0aGlzLDAsYyk6TWYuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtsLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYyl7aWYoIVcoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09Yz8hMDowPT09bC5jb21wYXJlKHRoaXMsYyl9O2wucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgYz0iIjswPHRoaXMubGVuZ3RoJiYoYz10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSw1MDx0aGlzLmxlbmd0aCYmKGMrPSIgLi4uICIpKTtyZXR1cm4iPEJ1ZmZlciAiK2MrIj4ifTtsLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGMsYSxiLGQsZSl7aWYoIVcoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3ZvaWQgMD09PWEmJihhPTApO3ZvaWQgMD09PQpiJiYoYj1jP2MubGVuZ3RoOjApO3ZvaWQgMD09PWQmJihkPTApO3ZvaWQgMD09PWUmJihlPXRoaXMubGVuZ3RoKTtpZigwPmF8fGI+Yy5sZW5ndGh8fDA+ZHx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoZD49ZSYmYT49YilyZXR1cm4gMDtpZihkPj1lKXJldHVybi0xO2lmKGE+PWIpcmV0dXJuIDE7YT4+Pj0wO2I+Pj49MDtkPj4+PTA7ZT4+Pj0wO2lmKHRoaXM9PT1jKXJldHVybiAwO3ZhciBmPWUtZCxnPWItYSxoPU1hdGgubWluKGYsZyk7ZD10aGlzLnNsaWNlKGQsZSk7Yz1jLnNsaWNlKGEsYik7Zm9yKGE9MDthPGg7KythKWlmKGRbYV0hPT1jW2FdKXtmPWRbYV07Zz1jW2FdO2JyZWFrfXJldHVybiBmPGc/LTE6ZzxmPzE6MH07bC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oYyxhLGIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGMsYSxiKX07bC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihjLGEsYil7cmV0dXJuIElkKHRoaXMsCmMsYSxiLCEwKX07bC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oYyxhLGIpe3JldHVybiBJZCh0aGlzLGMsYSxiLCExKX07bC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYyxhLGIsZCl7aWYodm9pZCAwPT09YSlkPSJ1dGY4IixiPXRoaXMubGVuZ3RoLGE9MDtlbHNlIGlmKHZvaWQgMD09PWImJiJzdHJpbmciPT09dHlwZW9mIGEpZD1hLGI9dGhpcy5sZW5ndGgsYT0wO2Vsc2UgaWYoaXNGaW5pdGUoYSkpYXw9MCxpc0Zpbml0ZShiKT8oYnw9MCx2b2lkIDA9PT1kJiYoZD0idXRmOCIpKTooZD1iLGI9dm9pZCAwKTtlbHNlIHRocm93IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3ZhciBlPXRoaXMubGVuZ3RoLWE7aWYodm9pZCAwPT09Ynx8Yj5lKWI9ZTtpZigwPGMubGVuZ3RoJiYoMD5ifHwwPmEpfHxhPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpOwpkfHwoZD0idXRmOCIpO2ZvcihlPSExOzspc3dpdGNoKGQpe2Nhc2UgImhleCI6YTp7YT1OdW1iZXIoYSl8fDA7ZD10aGlzLmxlbmd0aC1hO2I/KGI9TnVtYmVyKGIpLGI+ZCYmKGI9ZCkpOmI9ZDtkPWMubGVuZ3RoO2lmKDAhPT1kJTIpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7Yj5kLzImJihiPWQvMik7Zm9yKGQ9MDtkPGI7KytkKXtlPXBhcnNlSW50KGMuc3Vic3RyKDIqZCwyKSwxNik7aWYoaXNOYU4oZSkpe2M9ZDticmVhayBhfXRoaXNbYStkXT1lfWM9ZH1yZXR1cm4gYztjYXNlICJ1dGY4IjpjYXNlICJ1dGYtOCI6cmV0dXJuIG5iKEliKGMsdGhpcy5sZW5ndGgtYSksdGhpcyxhLGIpO2Nhc2UgImFzY2lpIjpyZXR1cm4gbmIoTGQoYyksdGhpcyxhLGIpO2Nhc2UgImxhdGluMSI6Y2FzZSAiYmluYXJ5IjpyZXR1cm4gbmIoTGQoYyksdGhpcyxhLGIpO2Nhc2UgImJhc2U2NCI6cmV0dXJuIG5iKEdkKGMpLHRoaXMsYSxiKTtjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOmQ9CmM7ZT10aGlzLmxlbmd0aC1hO2Zvcih2YXIgZj1bXSxnPTA7ZzxkLmxlbmd0aCYmISgwPihlLT0yKSk7KytnKXt2YXIgaD1kLmNoYXJDb2RlQXQoZyk7Yz1oPj44O2glPTI1NjtmLnB1c2goaCk7Zi5wdXNoKGMpfXJldHVybiBuYihmLHRoaXMsYSxiKTtkZWZhdWx0OmlmKGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitkKTtkPSgiIitkKS50b0xvd2VyQ2FzZSgpO2U9ITB9fTtsLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBLZD00MDk2O2wucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGMsYSl7dmFyIGI9dGhpcy5sZW5ndGg7Yz1+fmM7YT12b2lkIDA9PT1hP2I6fn5hOzA+Yz8oYys9YiwwPmMmJihjPTApKTpjPmImJihjPWIpOzA+YT8oYSs9YiwwPmEmJihhPTApKTphPmImJihhPWIpO2E8YyYmKGE9Yyk7aWYobC5UWVBFRF9BUlJBWV9TVVBQT1JUKWE9CnRoaXMuc3ViYXJyYXkoYyxhKSxhLl9fcHJvdG9fXz1sLnByb3RvdHlwZTtlbHNle2I9YS1jO2E9bmV3IGwoYix2b2lkIDApO2Zvcih2YXIgZD0wO2Q8YjsrK2QpYVtkXT10aGlzW2QrY119cmV0dXJuIGF9O2wucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYyxhLGIpe2N8PTA7YXw9MDtifHxEKGMsYSx0aGlzLmxlbmd0aCk7Yj10aGlzW2NdO2Zvcih2YXIgZD0xLGU9MDsrK2U8YSYmKGQqPTI1Nik7KWIrPXRoaXNbYytlXSpkO3JldHVybiBifTtsLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGMsYSxiKXtjfD0wO2F8PTA7Ynx8RChjLGEsdGhpcy5sZW5ndGgpO2I9dGhpc1tjKy0tYV07Zm9yKHZhciBkPTE7MDxhJiYoZCo9MjU2KTspYis9dGhpc1tjKy0tYV0qZDtyZXR1cm4gYn07bC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGMsYSl7YXx8RChjLDEsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdfTtsLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYywKYSl7YXx8RChjLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdfHRoaXNbYysxXTw8OH07bC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdPDw4fHRoaXNbYysxXX07bC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybih0aGlzW2NdfHRoaXNbYysxXTw8OHx0aGlzW2MrMl08PDE2KSsxNjc3NzIxNip0aGlzW2MrM119O2wucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihjLGEpe2F8fEQoYyw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gMTY3NzcyMTYqdGhpc1tjXSsodGhpc1tjKzFdPDwxNnx0aGlzW2MrMl08PDh8dGhpc1tjKzNdKX07bC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGMsYSxiKXtjfD0wO2F8PTA7Ynx8RChjLGEsdGhpcy5sZW5ndGgpO2I9dGhpc1tjXTtmb3IodmFyIGQ9MSxlPTA7KytlPGEmJihkKj0yNTYpOyliKz0KdGhpc1tjK2VdKmQ7Yj49MTI4KmQmJihiLT1NYXRoLnBvdygyLDgqYSkpO3JldHVybiBifTtsLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oYyxhLGIpe2N8PTA7YXw9MDtifHxEKGMsYSx0aGlzLmxlbmd0aCk7Yj1hO2Zvcih2YXIgZD0xLGU9dGhpc1tjKy0tYl07MDxiJiYoZCo9MjU2KTspZSs9dGhpc1tjKy0tYl0qZDtlPj0xMjgqZCYmKGUtPU1hdGgucG93KDIsOCphKSk7cmV0dXJuIGV9O2wucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGMsYSl7YXx8RChjLDEsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdJjEyOD8tMSooMjU1LXRoaXNbY10rMSk6dGhpc1tjXX07bC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYyxhKXthfHxEKGMsMix0aGlzLmxlbmd0aCk7Yz10aGlzW2NdfHRoaXNbYysxXTw8ODtyZXR1cm4gYyYzMjc2OD9jfDQyOTQ5MDE3NjA6Y307bC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYyxhKXthfHxEKGMsMix0aGlzLmxlbmd0aCk7CmM9dGhpc1tjKzFdfHRoaXNbY108PDg7cmV0dXJuIGMmMzI3Njg/Y3w0Mjk0OTAxNzYwOmN9O2wucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdfHRoaXNbYysxXTw8OHx0aGlzW2MrMl08PDE2fHRoaXNbYyszXTw8MjR9O2wucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdPDwyNHx0aGlzW2MrMV08PDE2fHRoaXNbYysyXTw8OHx0aGlzW2MrM119O2wucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybiBHYih0aGlzLGMsITAsMjMsNCl9O2wucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybiBHYih0aGlzLGMsITEsMjMsNCl9O2wucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihjLGEpe2F8fApEKGMsOCx0aGlzLmxlbmd0aCk7cmV0dXJuIEdiKHRoaXMsYywhMCw1Miw4KX07bC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDgsdGhpcy5sZW5ndGgpO3JldHVybiBHYih0aGlzLGMsITEsNTIsOCl9O2wucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGMsYSxiLGQpe2M9K2M7YXw9MDtifD0wO2R8fFQodGhpcyxjLGEsYixNYXRoLnBvdygyLDgqYiktMSwwKTtkPTE7dmFyIGU9MDtmb3IodGhpc1thXT1jJjI1NTsrK2U8YiYmKGQqPTI1Nik7KXRoaXNbYStlXT1jL2QmMjU1O3JldHVybiBhK2J9O2wucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGMsYSxiLGQpe2M9K2M7YXw9MDtifD0wO2R8fFQodGhpcyxjLGEsYixNYXRoLnBvdygyLDgqYiktMSwwKTtkPWItMTt2YXIgZT0xO2Zvcih0aGlzW2ErZF09YyYyNTU7MDw9LS1kJiYoZSo9MjU2KTspdGhpc1thK2RdPWMvZSYyNTU7cmV0dXJuIGErYn07bC5wcm90b3R5cGUud3JpdGVVSW50OD0KZnVuY3Rpb24oYyxhLGIpe2M9K2M7YXw9MDtifHxUKHRoaXMsYyxhLDEsMjU1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGM9TWF0aC5mbG9vcihjKSk7dGhpc1thXT1jJjI1NTtyZXR1cm4gYSsxfTtsLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGMsYSxiKXtjPStjO2F8PTA7Ynx8VCh0aGlzLGMsYSwyLDY1NTM1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1thXT1jJjI1NSx0aGlzW2ErMV09Yz4+PjgpOkpiKHRoaXMsYyxhLCEwKTtyZXR1cm4gYSsyfTtsLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGMsYSxiKXtjPStjO2F8PTA7Ynx8VCh0aGlzLGMsYSwyLDY1NTM1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1thXT1jPj4+OCx0aGlzW2ErMV09YyYyNTUpOkpiKHRoaXMsYyxhLCExKTtyZXR1cm4gYSsyfTtsLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGMsYSxiKXtjPStjO2F8PTA7Ynx8VCh0aGlzLGMsYSw0LAo0Mjk0OTY3Mjk1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1thKzNdPWM+Pj4yNCx0aGlzW2ErMl09Yz4+PjE2LHRoaXNbYSsxXT1jPj4+OCx0aGlzW2FdPWMmMjU1KTpLYih0aGlzLGMsYSwhMCk7cmV0dXJuIGErNH07bC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihjLGEsYil7Yz0rYzthfD0wO2J8fFQodGhpcyxjLGEsNCw0Mjk0OTY3Mjk1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1thXT1jPj4+MjQsdGhpc1thKzFdPWM+Pj4xNix0aGlzW2ErMl09Yz4+PjgsdGhpc1thKzNdPWMmMjU1KTpLYih0aGlzLGMsYSwhMSk7cmV0dXJuIGErNH07bC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihjLGEsYixkKXtjPStjO2F8PTA7ZHx8KGQ9TWF0aC5wb3coMiw4KmItMSksVCh0aGlzLGMsYSxiLGQtMSwtZCkpO2Q9MDt2YXIgZT0xLGY9MDtmb3IodGhpc1thXT1jJjI1NTsrK2Q8YiYmKGUqPTI1Nik7KTA+YyYmMD09PWYmJjAhPT10aGlzW2ErZC0KMV0mJihmPTEpLHRoaXNbYStkXT0oYy9lPj4wKS1mJjI1NTtyZXR1cm4gYStifTtsLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGMsYSxiLGQpe2M9K2M7YXw9MDtkfHwoZD1NYXRoLnBvdygyLDgqYi0xKSxUKHRoaXMsYyxhLGIsZC0xLC1kKSk7ZD1iLTE7dmFyIGU9MSxmPTA7Zm9yKHRoaXNbYStkXT1jJjI1NTswPD0tLWQmJihlKj0yNTYpOykwPmMmJjA9PT1mJiYwIT09dGhpc1thK2QrMV0mJihmPTEpLHRoaXNbYStkXT0oYy9lPj4wKS1mJjI1NTtyZXR1cm4gYStifTtsLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYyxhLGIpe2M9K2M7YXw9MDtifHxUKHRoaXMsYyxhLDEsMTI3LC0xMjgpO2wuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGM9TWF0aC5mbG9vcihjKSk7MD5jJiYoYz0yNTUrYysxKTt0aGlzW2FdPWMmMjU1O3JldHVybiBhKzF9O2wucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihjLGEsYil7Yz0rYzthfD0wO2J8fFQodGhpcyxjLGEsMiwzMjc2NywKLTMyNzY4KTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYV09YyYyNTUsdGhpc1thKzFdPWM+Pj44KTpKYih0aGlzLGMsYSwhMCk7cmV0dXJuIGErMn07bC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGMsYSxiKXtjPStjO2F8PTA7Ynx8VCh0aGlzLGMsYSwyLDMyNzY3LC0zMjc2OCk7bC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2FdPWM+Pj44LHRoaXNbYSsxXT1jJjI1NSk6SmIodGhpcyxjLGEsITEpO3JldHVybiBhKzJ9O2wucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihjLGEsYil7Yz0rYzthfD0wO2J8fFQodGhpcyxjLGEsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYV09YyYyNTUsdGhpc1thKzFdPWM+Pj44LHRoaXNbYSsyXT1jPj4+MTYsdGhpc1thKzNdPWM+Pj4yNCk6S2IodGhpcyxjLGEsITApO3JldHVybiBhKzR9O2wucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihjLGEsYil7Yz0KK2M7YXw9MDtifHxUKHRoaXMsYyxhLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCk7MD5jJiYoYz00Mjk0OTY3Mjk1K2MrMSk7bC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2FdPWM+Pj4yNCx0aGlzW2ErMV09Yz4+PjE2LHRoaXNbYSsyXT1jPj4+OCx0aGlzW2ErM109YyYyNTUpOktiKHRoaXMsYyxhLCExKTtyZXR1cm4gYSs0fTtsLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYyxhLGIpe2J8fExiKHRoaXMsYyxhLDQpO0hiKHRoaXMsYyxhLCEwLDIzLDQpO3JldHVybiBhKzR9O2wucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihjLGEsYil7Ynx8TGIodGhpcyxjLGEsNCk7SGIodGhpcyxjLGEsITEsMjMsNCk7cmV0dXJuIGErNH07bC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihjLGEsYil7Ynx8TGIodGhpcyxjLGEsOCk7SGIodGhpcyxjLGEsITAsNTIsOCk7cmV0dXJuIGErOH07bC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihjLAphLGIpe2J8fExiKHRoaXMsYyxhLDgpO0hiKHRoaXMsYyxhLCExLDUyLDgpO3JldHVybiBhKzh9O2wucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYyxhLGIsZCl7Ynx8KGI9MCk7ZHx8MD09PWR8fChkPXRoaXMubGVuZ3RoKTthPj1jLmxlbmd0aCYmKGE9Yy5sZW5ndGgpO2F8fChhPTApOzA8ZCYmZDxiJiYoZD1iKTtpZihkPT09Ynx8MD09PWMubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoMD5hKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoMD5ifHxiPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKDA+ZCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtkPnRoaXMubGVuZ3RoJiYoZD10aGlzLmxlbmd0aCk7Yy5sZW5ndGgtYTxkLWImJihkPWMubGVuZ3RoLWErYik7dmFyIGU9ZC1iO2lmKHRoaXM9PT1jJiZiPGEmJgphPGQpZm9yKGQ9ZS0xOzA8PWQ7LS1kKWNbZCthXT10aGlzW2QrYl07ZWxzZSBpZigxRTM+ZXx8IWwuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoZD0wO2Q8ZTsrK2QpY1tkK2FdPXRoaXNbZCtiXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGMsdGhpcy5zdWJhcnJheShiLGIrZSksYSk7cmV0dXJuIGV9O2wucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYyxhLGIsZCl7aWYoInN0cmluZyI9PT10eXBlb2YgYyl7InN0cmluZyI9PT10eXBlb2YgYT8oZD1hLGE9MCxiPXRoaXMubGVuZ3RoKToic3RyaW5nIj09PXR5cGVvZiBiJiYoZD1iLGI9dGhpcy5sZW5ndGgpO2lmKDE9PT1jLmxlbmd0aCl7dmFyIGU9Yy5jaGFyQ29kZUF0KDApOzI1Nj5lJiYoYz1lKX1pZih2b2lkIDAhPT1kJiYic3RyaW5nIiE9PXR5cGVvZiBkKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09PXR5cGVvZiBkJiYhbC5pc0VuY29kaW5nKGQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrCmQpO31lbHNlIm51bWJlciI9PT10eXBlb2YgYyYmKGMmPTI1NSk7aWYoMD5hfHx0aGlzLmxlbmd0aDxhfHx0aGlzLmxlbmd0aDxiKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihiPD1hKXJldHVybiB0aGlzO2E+Pj49MDtiPXZvaWQgMD09PWI/dGhpcy5sZW5ndGg6Yj4+PjA7Y3x8KGM9MCk7aWYoIm51bWJlciI9PT10eXBlb2YgYylmb3IoZD1hO2Q8YjsrK2QpdGhpc1tkXT1jO2Vsc2UgZm9yKGM9VyhjKT9jOkliKChuZXcgbChjLGQpKS50b1N0cmluZygpKSxlPWMubGVuZ3RoLGQ9MDtkPGItYTsrK2QpdGhpc1tkK2FdPWNbZCVlXTtyZXR1cm4gdGhpc307dmFyIE5mPS9bXitcLzAtOUEtWmEtei1fXS9nLHZiPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLElOU1BFQ1RfTUFYX0JZVEVTOjUwLGtNYXhMZW5ndGg6U2csQnVmZmVyOmwsU2xvd0J1ZmZlcjpmdW5jdGlvbihjKXsrYyE9YyYmKGM9MCk7cmV0dXJuIGwuYWxsb2MoK2MpfSxpc0J1ZmZlcjpwYX0pLApKPUsoZnVuY3Rpb24oYyxhKXtmdW5jdGlvbiBiKGEpe2Zvcih2YXIgYz1bXSxiPTE7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyljW2ItMV09YXJndW1lbnRzW2JdO3JldHVybiBuZXcgKHZiLkJ1ZmZlci5iaW5kLmFwcGx5KHZiLkJ1ZmZlcixkKFt2b2lkIDAsYV0sYykpKX12YXIgZD1OJiZOLl9fc3ByZWFkQXJyYXlzfHxmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGM9MCxiPWFyZ3VtZW50cy5sZW5ndGg7YzxiO2MrKylhKz1hcmd1bWVudHNbY10ubGVuZ3RoO2E9QXJyYXkoYSk7dmFyIGQ9MDtmb3IoYz0wO2M8YjtjKyspZm9yKHZhciBrPWFyZ3VtZW50c1tjXSx0PTAscT1rLmxlbmd0aDt0PHE7dCsrLGQrKylhW2RdPWtbdF07cmV0dXJuIGF9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTthLkJ1ZmZlcj12Yi5CdWZmZXI7YS5idWZmZXJBbGxvY1Vuc2FmZT12Yi5CdWZmZXIuYWxsb2NVbnNhZmV8fGI7YS5idWZmZXJGcm9tPXZiLkJ1ZmZlci5mcm9tfHwKYn0pO1EoSik7dmFyIHVhPU5kLHZhPU9kOyJmdW5jdGlvbiI9PT10eXBlb2YgS2Euc2V0VGltZW91dCYmKHVhPXNldFRpbWVvdXQpOyJmdW5jdGlvbiI9PT10eXBlb2YgS2EuY2xlYXJUaW1lb3V0JiYodmE9Y2xlYXJUaW1lb3V0KTt2YXIga2E9W10sVWE9ITEsSGEsTWI9LTE7UmQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBmYj1LYS5wZXJmb3JtYW5jZXx8e30sVGc9ZmIubm93fHxmYi5tb3pOb3d8fGZiLm1zTm93fHxmYi5vTm93fHxmYi53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LFVnPW5ldyBEYXRlLFZhPXtuZXh0VGljazpYLHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246SWEsYWRkTGlzdGVuZXI6SWEsb25jZTpJYSxvZmY6SWEscmVtb3ZlTGlzdGVuZXI6SWEscmVtb3ZlQWxsTGlzdGVuZXJzOklhLAplbWl0OklhLGJpbmRpbmc6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKTt9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIik7fSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oYyl7dmFyIGE9LjAwMSpUZy5jYWxsKGZiKSxiPU1hdGguZmxvb3IoYSk7YT1NYXRoLmZsb29yKGElMSoxRTkpO2MmJihiLT1jWzBdLGEtPWNbMV0sMD5hJiYoYi0tLGErPTFFOSkpO3JldHVybltiLGFdfSxwbGF0Zm9ybToiYnJvd3NlciIscmVsZWFzZTp7fSxjb25maWc6e30sdXB0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlLVVnKS8xRTN9fSx6YT0iZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oYyxhKXtjLnN1cGVyXz1hO2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUsCntjb25zdHJ1Y3Rvcjp7dmFsdWU6YyxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rpb24oYyxhKXtmdW5jdGlvbiBiKCl7fWMuc3VwZXJfPWE7Yi5wcm90b3R5cGU9YS5wcm90b3R5cGU7Yy5wcm90b3R5cGU9bmV3IGI7Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9Y30sUmY9LyVbc2RqJV0vZyxOYj17fSx5YzthYS5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19O2FhLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLCJib29sZWFuIjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLCJudWxsIjoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIsCnJlZ2V4cDoicmVkIn07dmFyIFpmPSJKYW4gRmViIE1hciBBcHIgTWF5IEp1biBKdWwgQXVnIFNlcCBPY3QgTm92IERlYyIuc3BsaXQoIiAiKSx3Yj17aW5oZXJpdHM6emEsX2V4dGVuZDpUZCxsb2c6ZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiJXMgLSAlcyIsWWYoKSx3Yy5hcHBseShudWxsLGFyZ3VtZW50cykpfSxpc0J1ZmZlcjpmdW5jdGlvbihjKXtyZXR1cm4gcGEoYyl9LGlzUHJpbWl0aXZlOkNjLGlzRnVuY3Rpb246V2EsaXNFcnJvcjpvYixpc0RhdGU6cGIsaXNPYmplY3Q6d2EsaXNSZWdFeHA6WGEsaXNVbmRlZmluZWQ6bGEsaXNTeW1ib2w6ZnVuY3Rpb24oYyl7cmV0dXJuInN5bWJvbCI9PT10eXBlb2YgY30saXNTdHJpbmc6SmEsaXNOdW1iZXI6VmQsaXNOdWxsT3JVbmRlZmluZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIG51bGw9PWN9LGlzTnVsbDpmdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09PWN9LGlzQm9vbGVhbjp6Yyxpc0FycmF5OlVkLGluc3BlY3Q6YWEsZGVwcmVjYXRlOnhjLApmb3JtYXQ6d2MsZGVidWdsb2c6U2R9LFZnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZ2U9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGMpe3ZhciBhPVtdLGI7Zm9yKGIgaW4gYylWZy5jYWxsKGMsYikmJmEucHVzaChiKTtyZXR1cm4gYX0sZmU9QXJyYXkucHJvdG90eXBlLnNsaWNlLEVjLCRmPS9ccypmdW5jdGlvblxzKyhbXlwoXHNdKilccyovO0UuQXNzZXJ0aW9uRXJyb3I9R2M7emEoR2MsRXJyb3IpO0UuZmFpbD1TO0Uub2s9RmM7RS5lcXVhbD1iZTtFLm5vdEVxdWFsPWNlO0UuZGVlcEVxdWFsPWRlO0UuZGVlcFN0cmljdEVxdWFsPWVlO0Uubm90RGVlcEVxdWFsPWhlO0Uubm90RGVlcFN0cmljdEVxdWFsPWllO0Uuc3RyaWN0RXF1YWw9amU7RS5ub3RTdHJpY3RFcXVhbD1rZTtFLnRocm93cz1mdW5jdGlvbihjLGEsYil7bWUoITAsYyxhLGIpfTtFLmRvZXNOb3RUaHJvdz1mdW5jdGlvbihjLGEsYil7bWUoITEsYyxhLGIpfTtFLmlmRXJyb3I9ZnVuY3Rpb24oYyl7aWYoYyl0aHJvdyBjOwp9O3ZhciB4Yj1LKGZ1bmN0aW9uKGMsYSl7ZnVuY3Rpb24gYihhKXtyZXR1cm4gZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhjKXtmb3IodmFyIGI9W10sZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspYltlLTFdPWFyZ3VtZW50c1tlXTtiPWEuY2FsbCh0aGlzLGQoYyxiKSl8fHRoaXM7Yi5jb2RlPWM7YltoXT1jO2IubmFtZT1hLnByb3RvdHlwZS5uYW1lKyIgWyIrYltoXSsiXSI7cmV0dXJuIGJ9ZyhjLGEpO3JldHVybiBjfShhKX1mdW5jdGlvbiBkKGEsYyl7RS5zdHJpY3RFcXVhbCh0eXBlb2YgYSwic3RyaW5nIik7dmFyIGI9a1thXTtFKGIsIkFuIGludmFsaWQgZXJyb3IgbWVzc2FnZSBrZXkgd2FzIHVzZWQ6ICIrYSsiLiIpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYilhPWI7ZWxzZXthPXdiLmZvcm1hdDtpZih2b2lkIDA9PT1jfHwwPT09Yy5sZW5ndGgpcmV0dXJuIGI7Yy51bnNoaWZ0KGIpfXJldHVybiBTdHJpbmcoYS5hcHBseShudWxsLGMpKX1mdW5jdGlvbiBlKGEsYyl7a1thXT0KImZ1bmN0aW9uIj09PXR5cGVvZiBjP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIGYoYSxjKXtFKGEsImV4cGVjdGVkIGlzIHJlcXVpcmVkIik7RSgic3RyaW5nIj09PXR5cGVvZiBjLCJ0aGluZyBpcyByZXF1aXJlZCIpO2lmKEFycmF5LmlzQXJyYXkoYSkpe3ZhciBiPWEubGVuZ3RoO0UoMDxiLCJBdCBsZWFzdCBvbmUgZXhwZWN0ZWQgdmFsdWUgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIik7YT1hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfSk7cmV0dXJuIDI8Yj8ib25lIG9mICIrYysiICIrYS5zbGljZSgwLGItMSkuam9pbigiLCAiKSsiLCBvciAiK2FbYi0xXToyPT09Yj8ib25lIG9mICIrYysiICIrYVswXSsiIG9yICIrYVsxXToib2YgIitjKyIgIithWzBdfXJldHVybiJvZiAiK2MrIiAiK1N0cmluZyhhKX12YXIgZz1OJiZOLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMsYil7YT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZgpBcnJheSYmZnVuY3Rpb24oYSxjKXthLl9fcHJvdG9fXz1jfXx8ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGIgaW4gYyljLmhhc093blByb3BlcnR5KGIpJiYoYVtiXT1jW2JdKX07cmV0dXJuIGEoYyxiKX1yZXR1cm4gZnVuY3Rpb24oYyxiKXtmdW5jdGlvbiBkKCl7dGhpcy5jb25zdHJ1Y3Rvcj1jfWEoYyxiKTtjLnByb3RvdHlwZT1udWxsPT09Yj9PYmplY3QuY3JlYXRlKGIpOihkLnByb3RvdHlwZT1iLnByb3RvdHlwZSxuZXcgZCl9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaD0idW5kZWZpbmVkIj09PXR5cGVvZiBTeW1ib2w/Il9rQ29kZSI6U3ltYm9sKCJjb2RlIiksaz17fTtjPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYil7aWYoIm9iamVjdCIhPT10eXBlb2YgYnx8bnVsbD09PWIpdGhyb3cgbmV3IGEuVHlwZUVycm9yKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsIm9wdGlvbnMiLCJvYmplY3QiKTt2YXIgZD1iLm1lc3NhZ2U/CmMuY2FsbCh0aGlzLGIubWVzc2FnZSl8fHRoaXM6Yy5jYWxsKHRoaXMsd2IuaW5zcGVjdChiLmFjdHVhbCkuc2xpY2UoMCwxMjgpKyIgIisoYi5vcGVyYXRvcisiICIrd2IuaW5zcGVjdChiLmV4cGVjdGVkKS5zbGljZSgwLDEyOCkpKXx8dGhpcztkLmdlbmVyYXRlZE1lc3NhZ2U9IWIubWVzc2FnZTtkLm5hbWU9IkFzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJUSU9OXSI7ZC5jb2RlPSJFUlJfQVNTRVJUSU9OIjtkLmFjdHVhbD1iLmFjdHVhbDtkLmV4cGVjdGVkPWIuZXhwZWN0ZWQ7ZC5vcGVyYXRvcj1iLm9wZXJhdG9yO2EuRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxiLnN0YWNrU3RhcnRGdW5jdGlvbik7cmV0dXJuIGR9ZyhiLGMpO3JldHVybiBifShOLkVycm9yKTthLkFzc2VydGlvbkVycm9yPWM7YS5tZXNzYWdlPWQ7YS5FPWU7YS5FcnJvcj1iKE4uRXJyb3IpO2EuVHlwZUVycm9yPWIoTi5UeXBlRXJyb3IpO2EuUmFuZ2VFcnJvcj1iKE4uUmFuZ2VFcnJvcik7ZSgiRVJSX0FSR19OT1RfSVRFUkFCTEUiLAoiJXMgbXVzdCBiZSBpdGVyYWJsZSIpO2UoIkVSUl9BU1NFUlRJT04iLCIlcyIpO2UoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8iQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiOiciJythKyciIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcyd9KTtlKCJFUlJfQ0hJTERfQ0xPU0VEX0JFRk9SRV9SRVBMWSIsIkNoaWxkIGNsb3NlZCBiZWZvcmUgcmVwbHkgcmVjZWl2ZWQiKTtlKCJFUlJfQ09OU09MRV9XUklUQUJMRV9TVFJFQU0iLCJDb25zb2xlIGV4cGVjdHMgYSB3cml0YWJsZSBzdHJlYW0gaW5zdGFuY2UgZm9yICVzIik7ZSgiRVJSX0NQVV9VU0FHRSIsIlVuYWJsZSB0byBvYnRhaW4gY3B1IHVzYWdlICVzIik7ZSgiRVJSX0ROU19TRVRfU0VSVkVSU19GQUlMRUQiLGZ1bmN0aW9uKGEsYyl7cmV0dXJuJ2MtYXJlcyBmYWlsZWQgdG8gc2V0IHNlcnZlcnM6ICInK2ErJyIgWycrYysiXSJ9KTtlKCJFUlJfRkFMU1lfVkFMVUVfUkVKRUNUSU9OIiwKIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggZmFsc3kgdmFsdWUiKTtlKCJFUlJfRU5DT0RJTkdfTk9UX1NVUFBPUlRFRCIsZnVuY3Rpb24oYSl7cmV0dXJuJ1RoZSAiJythKyciIGVuY29kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnfSk7ZSgiRVJSX0VOQ09ESU5HX0lOVkFMSURfRU5DT0RFRF9EQVRBIixmdW5jdGlvbihhKXtyZXR1cm4iVGhlIGVuY29kZWQgZGF0YSB3YXMgbm90IHZhbGlkIGZvciBlbmNvZGluZyAiK2F9KTtlKCJFUlJfSFRUUF9IRUFERVJTX1NFTlQiLCJDYW5ub3QgcmVuZGVyIGhlYWRlcnMgYWZ0ZXIgdGhleSBhcmUgc2VudCB0byB0aGUgY2xpZW50Iik7ZSgiRVJSX0hUVFBfSU5WQUxJRF9TVEFUVVNfQ09ERSIsIkludmFsaWQgc3RhdHVzIGNvZGU6ICVzIik7ZSgiRVJSX0hUVFBfVFJBSUxFUl9JTlZBTElEIiwiVHJhaWxlcnMgYXJlIGludmFsaWQgd2l0aCB0aGlzIHRyYW5zZmVyIGVuY29kaW5nIik7ZSgiRVJSX0lOREVYX09VVF9PRl9SQU5HRSIsIkluZGV4IG91dCBvZiByYW5nZSIpOwplKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oYSxjLGIpe0UoYSwibmFtZSBpcyByZXF1aXJlZCIpO2lmKGMuaW5jbHVkZXMoIm5vdCAiKSl7dmFyIGQ9Im11c3Qgbm90IGJlIjtjPWMuc3BsaXQoIm5vdCAiKVsxXX1lbHNlIGQ9Im11c3QgYmUiO2lmKEFycmF5LmlzQXJyYXkoYSkpZD0iVGhlICIrYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuJyInK2ErJyInfSkuam9pbigiLCAiKSsiIGFyZ3VtZW50cyAiK2QrIiAiK2YoYywidHlwZSIpO2Vsc2UgaWYoYS5pbmNsdWRlcygiIGFyZ3VtZW50IikpZD0iVGhlICIrYSsiICIrZCsiICIrZihjLCJ0eXBlIik7ZWxzZXt2YXIgZT1hLmluY2x1ZGVzKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2Q9J1RoZSAiJythKyciICcrZSsiICIrZCsiICIrZihjLCJ0eXBlIil9Mzw9YXJndW1lbnRzLmxlbmd0aCYmKGQrPSIuIFJlY2VpdmVkIHR5cGUgIisobnVsbCE9PWI/dHlwZW9mIGI6Im51bGwiKSk7cmV0dXJuIGR9KTtlKCJFUlJfSU5WQUxJRF9BUlJBWV9MRU5HVEgiLApmdW5jdGlvbihhLGMsYil7RS5zdHJpY3RFcXVhbCh0eXBlb2YgYiwibnVtYmVyIik7cmV0dXJuJ1RoZSBhcnJheSAiJythKyciIChsZW5ndGggJytiKyIpIG11c3QgYmUgb2YgbGVuZ3RoICIrYysiLiJ9KTtlKCJFUlJfSU5WQUxJRF9CVUZGRVJfU0laRSIsIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlcyIpO2UoIkVSUl9JTlZBTElEX0NBTExCQUNLIiwiQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZSgiRVJSX0lOVkFMSURfQ0hBUiIsIkludmFsaWQgY2hhcmFjdGVyIGluICVzIik7ZSgiRVJSX0lOVkFMSURfQ1VSU09SX1BPUyIsIkNhbm5vdCBzZXQgY3Vyc29yIHJvdyB3aXRob3V0IHNldHRpbmcgaXRzIGNvbHVtbiIpO2UoIkVSUl9JTlZBTElEX0ZEIiwnImZkIiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcjogJXMnKTtlKCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9IT1NUIiwnRmlsZSBVUkwgaG9zdCBtdXN0IGJlICJsb2NhbGhvc3QiIG9yIGVtcHR5IG9uICVzJyk7CmUoIkVSUl9JTlZBTElEX0ZJTEVfVVJMX1BBVEgiLCJGaWxlIFVSTCBwYXRoICVzIik7ZSgiRVJSX0lOVkFMSURfSEFORExFX1RZUEUiLCJUaGlzIGhhbmRsZSB0eXBlIGNhbm5vdCBiZSBzZW50Iik7ZSgiRVJSX0lOVkFMSURfSVBfQUREUkVTUyIsIkludmFsaWQgSVAgYWRkcmVzczogJXMiKTtlKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKGEsYyl7cmV0dXJuJ1RoZSB2YWx1ZSAiJytTdHJpbmcoYykrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK2ErJyInfSk7ZSgiRVJSX0lOVkFMSURfT1BUX1ZBTFVFX0VOQ09ESU5HIixmdW5jdGlvbihhKXtyZXR1cm4nVGhlIHZhbHVlICInK1N0cmluZyhhKSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gImVuY29kaW5nIid9KTtlKCJFUlJfSU5WQUxJRF9SRVBMX0VWQUxfQ09ORklHIiwnQ2Fubm90IHNwZWNpZnkgYm90aCAiYnJlYWtFdmFsT25TaWdpbnQiIGFuZCAiZXZhbCIgZm9yIFJFUEwnKTtlKCJFUlJfSU5WQUxJRF9TWU5DX0ZPUktfSU5QVVQiLAoiQXN5bmNocm9ub3VzIGZvcmtzIGRvIG5vdCBzdXBwb3J0IEJ1ZmZlciwgVWludDhBcnJheSBvciBzdHJpbmcgaW5wdXQ6ICVzIik7ZSgiRVJSX0lOVkFMSURfVEhJUyIsJ1ZhbHVlIG9mICJ0aGlzIiBtdXN0IGJlIG9mIHR5cGUgJXMnKTtlKCJFUlJfSU5WQUxJRF9UVVBMRSIsIiVzIG11c3QgYmUgYW4gaXRlcmFibGUgJXMgdHVwbGUiKTtlKCJFUlJfSU5WQUxJRF9VUkwiLCJJbnZhbGlkIFVSTDogJXMiKTtlKCJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FIixmdW5jdGlvbihhKXtyZXR1cm4iVGhlIFVSTCBtdXN0IGJlICIrZihhLCJzY2hlbWUiKX0pO2UoIkVSUl9JUENfQ0hBTk5FTF9DTE9TRUQiLCJDaGFubmVsIGNsb3NlZCIpO2UoIkVSUl9JUENfRElTQ09OTkVDVEVEIiwiSVBDIGNoYW5uZWwgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQiKTtlKCJFUlJfSVBDX09ORV9QSVBFIiwiQ2hpbGQgcHJvY2VzcyBjYW4gaGF2ZSBvbmx5IG9uZSBJUEMgcGlwZSIpO2UoIkVSUl9JUENfU1lOQ19GT1JLIiwKIklQQyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN5bmNocm9ub3VzIGZvcmtzIik7ZSgiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYVtjXT1hcmd1bWVudHNbY107RSgwPGEubGVuZ3RoLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO2M9IlRoZSAiO3ZhciBiPWEubGVuZ3RoO2E9YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuJyInK2ErJyInfSk7c3dpdGNoKGIpe2Nhc2UgMTpjKz1hWzBdKyIgYXJndW1lbnQiO2JyZWFrO2Nhc2UgMjpjKz1hWzBdKyIgYW5kICIrYVsxXSsiIGFyZ3VtZW50cyI7YnJlYWs7ZGVmYXVsdDpjKz1hLnNsaWNlKDAsYi0xKS5qb2luKCIsICIpLGMrPSIsIGFuZCAiK2FbYi0xXSsiIGFyZ3VtZW50cyJ9cmV0dXJuIGMrIiBtdXN0IGJlIHNwZWNpZmllZCJ9KTtlKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKTsKZSgiRVJSX05BUElfQ09OU19GVU5DVElPTiIsIkNvbnN0cnVjdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2UoIkVSUl9OQVBJX0NPTlNfUFJPVE9UWVBFX09CSkVDVCIsIkNvbnN0cnVjdG9yLnByb3RvdHlwZSBtdXN0IGJlIGFuIG9iamVjdCIpO2UoIkVSUl9OT19DUllQVE8iLCJOb2RlLmpzIGlzIG5vdCBjb21waWxlZCB3aXRoIE9wZW5TU0wgY3J5cHRvIHN1cHBvcnQiKTtlKCJFUlJfTk9fTE9OR0VSX1NVUFBPUlRFRCIsIiVzIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlKCJFUlJfUEFSU0VfSElTVE9SWV9EQVRBIiwiQ291bGQgbm90IHBhcnNlIGhpc3RvcnkgZGF0YSBpbiAlcyIpO2UoIkVSUl9TT0NLRVRfQUxSRUFEWV9CT1VORCIsIlNvY2tldCBpcyBhbHJlYWR5IGJvdW5kIik7ZSgiRVJSX1NPQ0tFVF9CQURfUE9SVCIsIlBvcnQgc2hvdWxkIGJlID4gMCBhbmQgPCA2NTUzNiIpO2UoIkVSUl9TT0NLRVRfQkFEX1RZUEUiLCJCYWQgc29ja2V0IHR5cGUgc3BlY2lmaWVkLiBWYWxpZCB0eXBlcyBhcmU6IHVkcDQsIHVkcDYiKTsKZSgiRVJSX1NPQ0tFVF9DQU5OT1RfU0VORCIsIlVuYWJsZSB0byBzZW5kIGRhdGEiKTtlKCJFUlJfU09DS0VUX0NMT1NFRCIsIlNvY2tldCBpcyBjbG9zZWQiKTtlKCJFUlJfU09DS0VUX0RHUkFNX05PVF9SVU5OSU5HIiwiTm90IHJ1bm5pbmciKTtlKCJFUlJfU1RERVJSX0NMT1NFIiwicHJvY2Vzcy5zdGRlcnIgY2Fubm90IGJlIGNsb3NlZCIpO2UoIkVSUl9TVERPVVRfQ0xPU0UiLCJwcm9jZXNzLnN0ZG91dCBjYW5ub3QgYmUgY2xvc2VkIik7ZSgiRVJSX1NUUkVBTV9XUkFQIiwiU3RyZWFtIGhhcyBTdHJpbmdEZWNvZGVyIHNldCBvciBpcyBpbiBvYmplY3RNb2RlIik7ZSgiRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCIsIkhvc3RuYW1lL0lQIGRvZXMgbm90IG1hdGNoIGNlcnRpZmljYXRlJ3MgYWx0bmFtZXM6ICVzIik7ZSgiRVJSX1RMU19ESF9QQVJBTV9TSVpFIixmdW5jdGlvbihhKXtyZXR1cm4iREggcGFyYW1ldGVyIHNpemUgIithKyIgaXMgbGVzcyB0aGFuIDIwNDgifSk7CmUoIkVSUl9UTFNfSEFORFNIQUtFX1RJTUVPVVQiLCJUTFMgaGFuZHNoYWtlIHRpbWVvdXQiKTtlKCJFUlJfVExTX1JFTkVHT1RJQVRJT05fRkFJTEVEIiwiRmFpbGVkIHRvIHJlbmVnb3RpYXRlIik7ZSgiRVJSX1RMU19SRVFVSVJFRF9TRVJWRVJfTkFNRSIsJyJzZXJ2ZXJuYW1lIiBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIFNlcnZlci5hZGRDb250ZXh0Jyk7ZSgiRVJSX1RMU19TRVNTSU9OX0FUVEFDSyIsIlRTTCBzZXNzaW9uIHJlbmVnb3RpYXRpb24gYXR0YWNrIGRldGVjdGVkIik7ZSgiRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyIsIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtlKCJFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAiLCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3JpdGFibGVTdGF0ZS5sZW5ndGggIT0gMCIpO2UoIkVSUl9VTktOT1dOX0VOQ09ESU5HIiwiVW5rbm93biBlbmNvZGluZzogJXMiKTsKZSgiRVJSX1VOS05PV05fU0lHTkFMIiwiVW5rbm93biBzaWduYWw6ICVzIik7ZSgiRVJSX1VOS05PV05fU1RESU5fVFlQRSIsIlVua25vd24gc3RkaW4gZmlsZSB0eXBlIik7ZSgiRVJSX1VOS05PV05fU1RSRUFNX1RZUEUiLCJVbmtub3duIHN0cmVhbSBmaWxlIHR5cGUiKTtlKCJFUlJfVjhCUkVBS0lURVJBVE9SIiwiRnVsbCBJQ1UgZGF0YSBub3QgaW5zdGFsbGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3dpa2kvSW50bCIpfSk7USh4Yik7dmFyIG9hPUsoZnVuY3Rpb24oYyxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7YS5FTkNPRElOR19VVEY4PSJ1dGY4IjthLmFzc2VydEVuY29kaW5nPWZ1bmN0aW9uKGEpe2lmKGEmJiFKLkJ1ZmZlci5pc0VuY29kaW5nKGEpKXRocm93IG5ldyB4Yi5UeXBlRXJyb3IoIkVSUl9JTlZBTElEX09QVF9WQUxVRV9FTkNPRElORyIsYSk7fTthLnN0clRvRW5jb2Rpbmc9ZnVuY3Rpb24oYywKZCl7cmV0dXJuIGQmJmQhPT1hLkVOQ09ESU5HX1VURjg/ImJ1ZmZlciI9PT1kP25ldyBKLkJ1ZmZlcihjKToobmV3IEouQnVmZmVyKGMpKS50b1N0cmluZyhkKTpjfX0pO1Eob2EpO3ZhciAkYz1LKGZ1bmN0aW9uKGMsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiPXUuY29uc3RhbnRzLlNfSUZNVCxkPXUuY29uc3RhbnRzLlNfSUZESVIsZT11LmNvbnN0YW50cy5TX0lGUkVHLGY9dS5jb25zdGFudHMuU19JRkJMSyxnPXUuY29uc3RhbnRzLlNfSUZDSFIsaD11LmNvbnN0YW50cy5TX0lGTE5LLGs9dS5jb25zdGFudHMuU19JRklGTyx0PXUuY29uc3RhbnRzLlNfSUZTT0NLO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5uYW1lPSIiO3RoaXMubW9kZT0wfWEuYnVpbGQ9ZnVuY3Rpb24oYyxiKXt2YXIgZD1uZXcgYSxlPWMuZ2V0Tm9kZSgpLm1vZGU7ZC5uYW1lPW9hLnN0clRvRW5jb2RpbmcoYy5nZXROYW1lKCksYik7ZC5tb2RlPQplO3JldHVybiBkfTthLnByb3RvdHlwZS5fY2hlY2tNb2RlUHJvcGVydHk9ZnVuY3Rpb24oYSl7cmV0dXJuKHRoaXMubW9kZSZiKT09PWF9O2EucHJvdG90eXBlLmlzRGlyZWN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGQpfTthLnByb3RvdHlwZS5pc0ZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoZSl9O2EucHJvdG90eXBlLmlzQmxvY2tEZXZpY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoZil9O2EucHJvdG90eXBlLmlzQ2hhcmFjdGVyRGV2aWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGcpfTthLnByb3RvdHlwZS5pc1N5bWJvbGljTGluaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShoKX07YS5wcm90b3R5cGUuaXNGSUZPPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGspfTsKYS5wcm90b3R5cGUuaXNTb2NrZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkodCl9O3JldHVybiBhfSgpO2EuRGlyZW50PWM7YS5kZWZhdWx0PWN9KTtRKCRjKTsiYWIiLnN1YnN0cigtMSk7dmFyIGdiPUsoZnVuY3Rpb24oYyxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Yz0iZnVuY3Rpb24iPT09dHlwZW9mIHNldEltbWVkaWF0ZT9zZXRJbW1lZGlhdGUuYmluZChOKTpzZXRUaW1lb3V0LmJpbmQoTik7YS5kZWZhdWx0PWN9KTtRKGdiKTt2YXIgWT1LKGZ1bmN0aW9uKGMsYSl7ZnVuY3Rpb24gYigpe3ZhciBhPVZhfHx7fTthLmdldHVpZHx8KGEuZ2V0dWlkPWZ1bmN0aW9uKCl7cmV0dXJuIDB9KTthLmdldGdpZHx8KGEuZ2V0Z2lkPWZ1bmN0aW9uKCl7cmV0dXJuIDB9KTthLmN3ZHx8KGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSk7YS5uZXh0VGlja3x8KGEubmV4dFRpY2s9Z2IuZGVmYXVsdCk7YS5lbWl0V2FybmluZ3x8CihhLmVtaXRXYXJuaW5nPWZ1bmN0aW9uKGEsYyl7Y29uc29sZS53YXJuKCIiK2MrKGM/IjogIjoiIikrYSl9KTthLmVudnx8KGEuZW52PXt9KTtyZXR1cm4gYX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7YS5jcmVhdGVQcm9jZXNzPWI7YS5kZWZhdWx0PWIoKX0pO1EoWSk7cWEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobnVsbCk7eC5FdmVudEVtaXR0ZXI9eDt4LnVzaW5nRG9tYWlucz0hMTt4LnByb3RvdHlwZS5kb21haW49dm9pZCAwO3gucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwO3gucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3guZGVmYXVsdE1heExpc3RlbmVycz0xMDt4LmluaXQ9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpbj1udWxsO3RoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9bmV3IHFhLHRoaXMuX2V2ZW50c0NvdW50PTApOwp0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9O3gucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihjKXtpZigibnVtYmVyIiE9PXR5cGVvZiBjfHwwPmN8fGlzTmFOKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJuIiBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7dGhpcy5fbWF4TGlzdGVuZXJzPWM7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9tYXhMaXN0ZW5lcnM/eC5kZWZhdWx0TWF4TGlzdGVuZXJzOnRoaXMuX21heExpc3RlbmVyc307eC5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihjKXt2YXIgYSxiLGQ9ImVycm9yIj09PWM7aWYoYT10aGlzLl9ldmVudHMpZD1kJiZudWxsPT1hLmVycm9yO2Vsc2UgaWYoIWQpcmV0dXJuITE7dmFyIGU9dGhpcy5kb21haW47aWYoZCl7YT1hcmd1bWVudHNbMV07aWYoZSlhfHwoYT1FcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkICJlcnJvciIgZXZlbnQnKSksCmEuZG9tYWluRW1pdHRlcj10aGlzLGEuZG9tYWluPWUsYS5kb21haW5UaHJvd249ITEsZS5lbWl0KCJlcnJvciIsYSk7ZWxzZXtpZihhIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgYTtlPUVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgImVycm9yIiBldmVudC4gKCcrYSsiKSIpO2UuY29udGV4dD1hO3Rocm93IGU7fXJldHVybiExfWU9YVtjXTtpZighZSlyZXR1cm4hMTthPSJmdW5jdGlvbiI9PT10eXBlb2YgZTt2YXIgZj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChmKXtjYXNlIDE6aWYoYSllLmNhbGwodGhpcyk7ZWxzZSBmb3IoYT1lLmxlbmd0aCxlPXFiKGUsYSksZD0wO2Q8YTsrK2QpZVtkXS5jYWxsKHRoaXMpO2JyZWFrO2Nhc2UgMjpkPWFyZ3VtZW50c1sxXTtpZihhKWUuY2FsbCh0aGlzLGQpO2Vsc2UgZm9yKGE9ZS5sZW5ndGgsZT1xYihlLGEpLGY9MDtmPGE7KytmKWVbZl0uY2FsbCh0aGlzLGQpO2JyZWFrO2Nhc2UgMzpkPWFyZ3VtZW50c1sxXTtmPWFyZ3VtZW50c1syXTsKaWYoYSllLmNhbGwodGhpcyxkLGYpO2Vsc2UgZm9yKGE9ZS5sZW5ndGgsZT1xYihlLGEpLGI9MDtiPGE7KytiKWVbYl0uY2FsbCh0aGlzLGQsZik7YnJlYWs7Y2FzZSA0OmQ9YXJndW1lbnRzWzFdO2Y9YXJndW1lbnRzWzJdO2I9YXJndW1lbnRzWzNdO2lmKGEpZS5jYWxsKHRoaXMsZCxmLGIpO2Vsc2V7YT1lLmxlbmd0aDtlPXFiKGUsYSk7Zm9yKHZhciBnPTA7ZzxhOysrZyllW2ddLmNhbGwodGhpcyxkLGYsYil9YnJlYWs7ZGVmYXVsdDpkPUFycmF5KGYtMSk7Zm9yKGI9MTtiPGY7YisrKWRbYi0xXT1hcmd1bWVudHNbYl07aWYoYSllLmFwcGx5KHRoaXMsZCk7ZWxzZSBmb3IoYT1lLmxlbmd0aCxlPXFiKGUsYSksZj0wO2Y8YTsrK2YpZVtmXS5hcHBseSh0aGlzLGQpfXJldHVybiEwfTt4LnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihjLGEpe3JldHVybiBuZSh0aGlzLGMsYSwhMSl9O3gucHJvdG90eXBlLm9uPXgucHJvdG90eXBlLmFkZExpc3RlbmVyO3gucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj0KZnVuY3Rpb24oYyxhKXtyZXR1cm4gbmUodGhpcyxjLGEsITApfTt4LnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGMsYSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dGhpcy5vbihjLG9lKHRoaXMsYyxhKSk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oYyxhKXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt0aGlzLnByZXBlbmRMaXN0ZW5lcihjLG9lKHRoaXMsYyxhKSk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGMsYSl7dmFyIGI7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CnZhciBkPXRoaXMuX2V2ZW50cztpZighZClyZXR1cm4gdGhpczt2YXIgZT1kW2NdO2lmKCFlKXJldHVybiB0aGlzO2lmKGU9PT1hfHxlLmxpc3RlbmVyJiZlLmxpc3RlbmVyPT09YSkwPT09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bmV3IHFhOihkZWxldGUgZFtjXSxkLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixjLGUubGlzdGVuZXJ8fGEpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl7dmFyIGY9LTE7Zm9yKGI9ZS5sZW5ndGg7MDxiLS07KWlmKGVbYl09PT1hfHxlW2JdLmxpc3RlbmVyJiZlW2JdLmxpc3RlbmVyPT09YSl7dmFyIGc9ZVtiXS5saXN0ZW5lcjtmPWI7YnJlYWt9aWYoMD5mKXJldHVybiB0aGlzO2lmKDE9PT1lLmxlbmd0aCl7ZVswXT12b2lkIDA7aWYoMD09PS0tdGhpcy5fZXZlbnRzQ291bnQpcmV0dXJuIHRoaXMuX2V2ZW50cz1uZXcgcWEsdGhpcztkZWxldGUgZFtjXX1lbHNle2I9ZisxO2Zvcih2YXIgaD0KZS5sZW5ndGg7YjxoO2YrPTEsYis9MSllW2ZdPWVbYl07ZS5wb3AoKX1kLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixjLGd8fGEpfXJldHVybiB0aGlzfTt4LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oYyl7dmFyIGE9dGhpcy5fZXZlbnRzO2lmKCFhKXJldHVybiB0aGlzO2lmKCFhLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPW5ldyBxYSx0aGlzLl9ldmVudHNDb3VudD0wKTphW2NdJiYoMD09PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPW5ldyBxYTpkZWxldGUgYVtjXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7YT1PYmplY3Qua2V5cyhhKTtmb3IodmFyIGI9MCxkO2I8YS5sZW5ndGg7KytiKWQ9YVtiXSwicmVtb3ZlTGlzdGVuZXIiIT09ZCYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZCk7dGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIik7CnRoaXMuX2V2ZW50cz1uZXcgcWE7dGhpcy5fZXZlbnRzQ291bnQ9MDtyZXR1cm4gdGhpc31hPWFbY107aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBhKXRoaXMucmVtb3ZlTGlzdGVuZXIoYyxhKTtlbHNlIGlmKGEpe2RvIHRoaXMucmVtb3ZlTGlzdGVuZXIoYyxhW2EubGVuZ3RoLTFdKTt3aGlsZShhWzBdKX1yZXR1cm4gdGhpc307eC5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGMpe3ZhciBhPXRoaXMuX2V2ZW50cztpZihhKWlmKGM9YVtjXSlpZigiZnVuY3Rpb24iPT09dHlwZW9mIGMpYz1bYy5saXN0ZW5lcnx8Y107ZWxzZXthPUFycmF5KGMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoOysrYilhW2JdPWNbYl0ubGlzdGVuZXJ8fGNbYl07Yz1hfWVsc2UgYz1bXTtlbHNlIGM9W107cmV0dXJuIGN9O3gubGlzdGVuZXJDb3VudD1mdW5jdGlvbihjLGEpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYy5saXN0ZW5lckNvdW50P2MubGlzdGVuZXJDb3VudChhKTpwZS5jYWxsKGMsCmEpfTt4LnByb3RvdHlwZS5saXN0ZW5lckNvdW50PXBlO3gucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLl9ldmVudHNDb3VudD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX07dmFyIHliPUsoZnVuY3Rpb24oYyxhKXt2YXIgYj1OJiZOLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMsYil7YT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oYSxjKXthLl9fcHJvdG9fXz1jfXx8ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGIgaW4gYyljLmhhc093blByb3BlcnR5KGIpJiYoYVtiXT1jW2JdKX07cmV0dXJuIGEoYyxiKX1yZXR1cm4gZnVuY3Rpb24oYyxiKXtmdW5jdGlvbiBkKCl7dGhpcy5jb25zdHJ1Y3Rvcj1jfWEoYyxiKTtjLnByb3RvdHlwZT1udWxsPT09Yj9PYmplY3QuY3JlYXRlKGIpOihkLnByb3RvdHlwZT1iLnByb3RvdHlwZSxuZXcgZCl9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLAoiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGQ9dS5jb25zdGFudHMuU19JRk1ULGU9dS5jb25zdGFudHMuU19JRkRJUixmPXUuY29uc3RhbnRzLlNfSUZSRUcsZz11LmNvbnN0YW50cy5TX0lGTE5LLGg9dS5jb25zdGFudHMuT19BUFBFTkQ7YS5TRVA9Ii8iO2M9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhjLGIpe3ZvaWQgMD09PWImJihiPTQzOCk7dmFyIGQ9YS5jYWxsKHRoaXMpfHx0aGlzO2QudWlkPVkuZGVmYXVsdC5nZXR1aWQoKTtkLmdpZD1ZLmRlZmF1bHQuZ2V0Z2lkKCk7ZC5hdGltZT1uZXcgRGF0ZTtkLm10aW1lPW5ldyBEYXRlO2QuY3RpbWU9bmV3IERhdGU7ZC5wZXJtPTQzODtkLm1vZGU9ZjtkLm5saW5rPTE7ZC5wZXJtPWI7ZC5tb2RlfD1iO2QuaW5vPWM7cmV0dXJuIGR9YihjLGEpO2MucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0idXRmOCIpO3JldHVybiB0aGlzLmdldEJ1ZmZlcigpLnRvU3RyaW5nKGEpfTtjLnByb3RvdHlwZS5zZXRTdHJpbmc9CmZ1bmN0aW9uKGEpe3RoaXMuYnVmPUouYnVmZmVyRnJvbShhLCJ1dGY4Iik7dGhpcy50b3VjaCgpfTtjLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXt0aGlzLmJ1Znx8dGhpcy5zZXRCdWZmZXIoSi5idWZmZXJBbGxvY1Vuc2FmZSgwKSk7cmV0dXJuIEouYnVmZmVyRnJvbSh0aGlzLmJ1Zil9O2MucHJvdG90eXBlLnNldEJ1ZmZlcj1mdW5jdGlvbihhKXt0aGlzLmJ1Zj1KLmJ1ZmZlckZyb20oYSk7dGhpcy50b3VjaCgpfTtjLnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmP3RoaXMuYnVmLmxlbmd0aDowfTtjLnByb3RvdHlwZS5zZXRNb2RlUHJvcGVydHk9ZnVuY3Rpb24oYSl7dGhpcy5tb2RlPXRoaXMubW9kZSZ+ZHxhfTtjLnByb3RvdHlwZS5zZXRJc0ZpbGU9ZnVuY3Rpb24oKXt0aGlzLnNldE1vZGVQcm9wZXJ0eShmKX07Yy5wcm90b3R5cGUuc2V0SXNEaXJlY3Rvcnk9ZnVuY3Rpb24oKXt0aGlzLnNldE1vZGVQcm9wZXJ0eShlKX07Yy5wcm90b3R5cGUuc2V0SXNTeW1saW5rPQpmdW5jdGlvbigpe3RoaXMuc2V0TW9kZVByb3BlcnR5KGcpfTtjLnByb3RvdHlwZS5pc0ZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5tb2RlJmQpPT09Zn07Yy5wcm90b3R5cGUuaXNEaXJlY3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5tb2RlJmQpPT09ZX07Yy5wcm90b3R5cGUuaXNTeW1saW5rPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubW9kZSZkKT09PWd9O2MucHJvdG90eXBlLm1ha2VTeW1saW5rPWZ1bmN0aW9uKGEpe3RoaXMuc3ltbGluaz1hO3RoaXMuc2V0SXNTeW1saW5rKCl9O2MucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYyxiLGQpe3ZvaWQgMD09PWMmJihjPTApO3ZvaWQgMD09PWImJihiPWEubGVuZ3RoKTt2b2lkIDA9PT1kJiYoZD0wKTt0aGlzLmJ1Znx8KHRoaXMuYnVmPUouYnVmZmVyQWxsb2NVbnNhZmUoMCkpO2lmKGQrYj50aGlzLmJ1Zi5sZW5ndGgpe3ZhciBlPUouYnVmZmVyQWxsb2NVbnNhZmUoZCtiKTt0aGlzLmJ1Zi5jb3B5KGUsMCwwLHRoaXMuYnVmLmxlbmd0aCk7CnRoaXMuYnVmPWV9YS5jb3B5KHRoaXMuYnVmLGQsYyxjK2IpO3RoaXMudG91Y2goKTtyZXR1cm4gYn07Yy5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihhLGMsYixkKXt2b2lkIDA9PT1jJiYoYz0wKTt2b2lkIDA9PT1iJiYoYj1hLmJ5dGVMZW5ndGgpO3ZvaWQgMD09PWQmJihkPTApO3RoaXMuYnVmfHwodGhpcy5idWY9Si5idWZmZXJBbGxvY1Vuc2FmZSgwKSk7Yj5hLmJ5dGVMZW5ndGgmJihiPWEuYnl0ZUxlbmd0aCk7YitkPnRoaXMuYnVmLmxlbmd0aCYmKGI9dGhpcy5idWYubGVuZ3RoLWQpO3RoaXMuYnVmLmNvcHkoYSxjLGQsZCtiKTtyZXR1cm4gYn07Yy5wcm90b3R5cGUudHJ1bmNhdGU9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9MCk7aWYoYSlpZih0aGlzLmJ1Znx8KHRoaXMuYnVmPUouYnVmZmVyQWxsb2NVbnNhZmUoMCkpLGE8PXRoaXMuYnVmLmxlbmd0aCl0aGlzLmJ1Zj10aGlzLmJ1Zi5zbGljZSgwLGEpO2Vsc2V7dmFyIGM9Si5idWZmZXJBbGxvY1Vuc2FmZSgwKTt0aGlzLmJ1Zi5jb3B5KGMpOwpjLmZpbGwoMCxhKX1lbHNlIHRoaXMuYnVmPUouYnVmZmVyQWxsb2NVbnNhZmUoMCk7dGhpcy50b3VjaCgpfTtjLnByb3RvdHlwZS5jaG1vZD1mdW5jdGlvbihhKXt0aGlzLnBlcm09YTt0aGlzLm1vZGU9dGhpcy5tb2RlJi01MTJ8YTt0aGlzLnRvdWNoKCl9O2MucHJvdG90eXBlLmNob3duPWZ1bmN0aW9uKGEsYyl7dGhpcy51aWQ9YTt0aGlzLmdpZD1jO3RoaXMudG91Y2goKX07Yy5wcm90b3R5cGUudG91Y2g9ZnVuY3Rpb24oKXt0aGlzLm10aW1lPW5ldyBEYXRlO3RoaXMuZW1pdCgiY2hhbmdlIix0aGlzKX07Yy5wcm90b3R5cGUuY2FuUmVhZD1mdW5jdGlvbihhLGMpe3ZvaWQgMD09PWEmJihhPVkuZGVmYXVsdC5nZXR1aWQoKSk7dm9pZCAwPT09YyYmKGM9WS5kZWZhdWx0LmdldGdpZCgpKTtyZXR1cm4gdGhpcy5wZXJtJjR8fGM9PT10aGlzLmdpZCYmdGhpcy5wZXJtJjMyfHxhPT09dGhpcy51aWQmJnRoaXMucGVybSYyNTY/ITA6ITF9O2MucHJvdG90eXBlLmNhbldyaXRlPWZ1bmN0aW9uKGEsCmMpe3ZvaWQgMD09PWEmJihhPVkuZGVmYXVsdC5nZXR1aWQoKSk7dm9pZCAwPT09YyYmKGM9WS5kZWZhdWx0LmdldGdpZCgpKTtyZXR1cm4gdGhpcy5wZXJtJjJ8fGM9PT10aGlzLmdpZCYmdGhpcy5wZXJtJjE2fHxhPT09dGhpcy51aWQmJnRoaXMucGVybSYxMjg/ITA6ITF9O2MucHJvdG90eXBlLmRlbD1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZGVsZXRlIix0aGlzKX07Yy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue2lubzp0aGlzLmlubyx1aWQ6dGhpcy51aWQsZ2lkOnRoaXMuZ2lkLGF0aW1lOnRoaXMuYXRpbWUuZ2V0VGltZSgpLG10aW1lOnRoaXMubXRpbWUuZ2V0VGltZSgpLGN0aW1lOnRoaXMuY3RpbWUuZ2V0VGltZSgpLHBlcm06dGhpcy5wZXJtLG1vZGU6dGhpcy5tb2RlLG5saW5rOnRoaXMubmxpbmssc3ltbGluazp0aGlzLnN5bWxpbmssZGF0YTp0aGlzLmdldFN0cmluZygpfX07cmV0dXJuIGN9KHguRXZlbnRFbWl0dGVyKTthLk5vZGU9YztjPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGQoYSwKYixkKXt2YXIgZT1jLmNhbGwodGhpcyl8fHRoaXM7ZS5jaGlsZHJlbj17fTtlLnN0ZXBzPVtdO2UuaW5vPTA7ZS5sZW5ndGg9MDtlLnZvbD1hO2UucGFyZW50PWI7ZS5zdGVwcz1iP2Iuc3RlcHMuY29uY2F0KFtkXSk6W2RdO3JldHVybiBlfWIoZCxjKTtkLnByb3RvdHlwZS5zZXROb2RlPWZ1bmN0aW9uKGEpe3RoaXMubm9kZT1hO3RoaXMuaW5vPWEuaW5vfTtkLnByb3RvdHlwZS5nZXROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZX07ZC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQ9ZnVuY3Rpb24oYSxjKXt2b2lkIDA9PT1jJiYoYz10aGlzLnZvbC5jcmVhdGVOb2RlKCkpO3ZhciBiPW5ldyBkKHRoaXMudm9sLHRoaXMsYSk7Yi5zZXROb2RlKGMpO2MuaXNEaXJlY3RvcnkoKTt0aGlzLnNldENoaWxkKGEsYik7cmV0dXJuIGJ9O2QucHJvdG90eXBlLnNldENoaWxkPWZ1bmN0aW9uKGEsYyl7dm9pZCAwPT09YyYmKGM9bmV3IGQodGhpcy52b2wsdGhpcyxhKSk7dGhpcy5jaGlsZHJlblthXT0KYztjLnBhcmVudD10aGlzO3RoaXMubGVuZ3RoKys7dGhpcy5lbWl0KCJjaGlsZDphZGQiLGMsdGhpcyk7cmV0dXJuIGN9O2QucHJvdG90eXBlLmRlbGV0ZUNoaWxkPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLmNoaWxkcmVuW2EuZ2V0TmFtZSgpXTt0aGlzLmxlbmd0aC0tO3RoaXMuZW1pdCgiY2hpbGQ6ZGVsZXRlIixhLHRoaXMpfTtkLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbihhKXtpZihPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNoaWxkcmVuLGEpKXJldHVybiB0aGlzLmNoaWxkcmVuW2FdfTtkLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RlcHMuam9pbihhLlNFUCl9O2QucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGVwc1t0aGlzLnN0ZXBzLmxlbmd0aC0xXX07ZC5wcm90b3R5cGUud2Fsaz1mdW5jdGlvbihhLGMsYil7dm9pZCAwPT09YyYmKGM9YS5sZW5ndGgpO3ZvaWQgMD09PWImJihiPTApOwppZihiPj1hLmxlbmd0aHx8Yj49YylyZXR1cm4gdGhpczt2YXIgZD10aGlzLmdldENoaWxkKGFbYl0pO3JldHVybiBkP2Qud2FsayhhLGMsYisxKTpudWxsfTtkLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57c3RlcHM6dGhpcy5zdGVwcyxpbm86dGhpcy5pbm8sY2hpbGRyZW46T2JqZWN0LmtleXModGhpcy5jaGlsZHJlbil9fTtyZXR1cm4gZH0oeC5FdmVudEVtaXR0ZXIpO2EuTGluaz1jO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYyxiLGQpe3RoaXMucG9zaXRpb249MDt0aGlzLmxpbms9YTt0aGlzLm5vZGU9Yzt0aGlzLmZsYWdzPWI7dGhpcy5mZD1kfWEucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuZ2V0U3RyaW5nKCl9O2EucHJvdG90eXBlLnNldFN0cmluZz1mdW5jdGlvbihhKXt0aGlzLm5vZGUuc2V0U3RyaW5nKGEpfTthLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmdldEJ1ZmZlcigpfTsKYS5wcm90b3R5cGUuc2V0QnVmZmVyPWZ1bmN0aW9uKGEpe3RoaXMubm9kZS5zZXRCdWZmZXIoYSl9O2EucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmdldFNpemUoKX07YS5wcm90b3R5cGUudHJ1bmNhdGU9ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLnRydW5jYXRlKGEpfTthLnByb3RvdHlwZS5zZWVrVG89ZnVuY3Rpb24oYSl7dGhpcy5wb3NpdGlvbj1hfTthLnByb3RvdHlwZS5zdGF0cz1mdW5jdGlvbigpe3JldHVybiBlYi5kZWZhdWx0LmJ1aWxkKHRoaXMubm9kZSl9O2EucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYyxiLGQpe3ZvaWQgMD09PWMmJihjPTApO3ZvaWQgMD09PWImJihiPWEubGVuZ3RoKTsibnVtYmVyIiE9PXR5cGVvZiBkJiYoZD10aGlzLnBvc2l0aW9uKTt0aGlzLmZsYWdzJmgmJihkPXRoaXMuZ2V0U2l6ZSgpKTthPXRoaXMubm9kZS53cml0ZShhLGMsYixkKTt0aGlzLnBvc2l0aW9uPWQrYTtyZXR1cm4gYX07YS5wcm90b3R5cGUucmVhZD0KZnVuY3Rpb24oYSxjLGIsZCl7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwPT09YiYmKGI9YS5ieXRlTGVuZ3RoKTsibnVtYmVyIiE9PXR5cGVvZiBkJiYoZD10aGlzLnBvc2l0aW9uKTthPXRoaXMubm9kZS5yZWFkKGEsYyxiLGQpO3RoaXMucG9zaXRpb249ZCthO3JldHVybiBhfTthLnByb3RvdHlwZS5jaG1vZD1mdW5jdGlvbihhKXt0aGlzLm5vZGUuY2htb2QoYSl9O2EucHJvdG90eXBlLmNob3duPWZ1bmN0aW9uKGEsYyl7dGhpcy5ub2RlLmNob3duKGEsYyl9O3JldHVybiBhfSgpO2EuRmlsZT1jfSk7USh5Yik7dmFyIFdnPXliLk5vZGUsbWY9SyhmdW5jdGlvbihjLGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTthLmRlZmF1bHQ9ZnVuY3Rpb24oYSxjLGUpe3ZhciBiPXNldFRpbWVvdXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2ImJiJvYmplY3QiPT09dHlwZW9mIGImJiJmdW5jdGlvbiI9PT10eXBlb2YgYi51bnJlZiYmYi51bnJlZigpOwpyZXR1cm4gYn19KTtRKG1mKTtMYS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihjKXtjPXtkYXRhOmMsbmV4dDpudWxsfTswPHRoaXMubGVuZ3RoP3RoaXMudGFpbC5uZXh0PWM6dGhpcy5oZWFkPWM7dGhpcy50YWlsPWM7Kyt0aGlzLmxlbmd0aH07TGEucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oYyl7Yz17ZGF0YTpjLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9Yyk7dGhpcy5oZWFkPWM7Kyt0aGlzLmxlbmd0aH07TGEucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgYz10aGlzLmhlYWQuZGF0YTt0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0Oy0tdGhpcy5sZW5ndGg7cmV0dXJuIGN9fTtMYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw7dGhpcy5sZW5ndGg9MH07TGEucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oYyl7aWYoMD09PQp0aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIGE9dGhpcy5oZWFkLGI9IiIrYS5kYXRhO2E9YS5uZXh0OyliKz1jK2EuZGF0YTtyZXR1cm4gYn07TGEucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihjKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIGwuYWxsb2MoMCk7aWYoMT09PXRoaXMubGVuZ3RoKXJldHVybiB0aGlzLmhlYWQuZGF0YTtjPWwuYWxsb2NVbnNhZmUoYz4+PjApO2Zvcih2YXIgYT10aGlzLmhlYWQsYj0wO2E7KWEuZGF0YS5jb3B5KGMsYiksYis9YS5kYXRhLmxlbmd0aCxhPWEubmV4dDtyZXR1cm4gY307dmFyIGRnPWwuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oYyl7c3dpdGNoKGMmJmMudG9Mb3dlckNhc2UoKSl7Y2FzZSAiaGV4IjpjYXNlICJ1dGY4IjpjYXNlICJ1dGYtOCI6Y2FzZSAiYXNjaWkiOmNhc2UgImJpbmFyeSI6Y2FzZSAiYmFzZTY0IjpjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOmNhc2UgInJhdyI6cmV0dXJuITA7CmRlZmF1bHQ6cmV0dXJuITF9fTtyYi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYyl7Zm9yKHZhciBhPSIiO3RoaXMuY2hhckxlbmd0aDspe2E9Yy5sZW5ndGg+PXRoaXMuY2hhckxlbmd0aC10aGlzLmNoYXJSZWNlaXZlZD90aGlzLmNoYXJMZW5ndGgtdGhpcy5jaGFyUmVjZWl2ZWQ6Yy5sZW5ndGg7Yy5jb3B5KHRoaXMuY2hhckJ1ZmZlcix0aGlzLmNoYXJSZWNlaXZlZCwwLGEpO3RoaXMuY2hhclJlY2VpdmVkKz1hO2lmKHRoaXMuY2hhclJlY2VpdmVkPHRoaXMuY2hhckxlbmd0aClyZXR1cm4iIjtjPWMuc2xpY2UoYSxjLmxlbmd0aCk7YT10aGlzLmNoYXJCdWZmZXIuc2xpY2UoMCx0aGlzLmNoYXJMZW5ndGgpLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO3ZhciBiPWEuY2hhckNvZGVBdChhLmxlbmd0aC0xKTtpZig1NTI5Njw9YiYmNTYzMTk+PWIpdGhpcy5jaGFyTGVuZ3RoKz10aGlzLnN1cnJvZ2F0ZVNpemUsYT0iIjtlbHNle3RoaXMuY2hhclJlY2VpdmVkPXRoaXMuY2hhckxlbmd0aD0KMDtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGE7YnJlYWt9fXRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXIoYyk7dmFyIGQ9Yy5sZW5ndGg7dGhpcy5jaGFyTGVuZ3RoJiYoYy5jb3B5KHRoaXMuY2hhckJ1ZmZlciwwLGMubGVuZ3RoLXRoaXMuY2hhclJlY2VpdmVkLGQpLGQtPXRoaXMuY2hhclJlY2VpdmVkKTthKz1jLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCxkKTtkPWEubGVuZ3RoLTE7Yj1hLmNoYXJDb2RlQXQoZCk7cmV0dXJuIDU1Mjk2PD1iJiY1NjMxOT49Yj8oYj10aGlzLnN1cnJvZ2F0ZVNpemUsdGhpcy5jaGFyTGVuZ3RoKz1iLHRoaXMuY2hhclJlY2VpdmVkKz1iLHRoaXMuY2hhckJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlcixiLDAsYiksYy5jb3B5KHRoaXMuY2hhckJ1ZmZlciwwLDAsYiksYS5zdWJzdHJpbmcoMCxkKSk6YX07cmIucHJvdG90eXBlLmRldGVjdEluY29tcGxldGVDaGFyPWZ1bmN0aW9uKGMpe2Zvcih2YXIgYT0zPD1jLmxlbmd0aD8zOmMubGVuZ3RoOzA8CmE7YS0tKXt2YXIgYj1jW2MubGVuZ3RoLWFdO2lmKDE9PWEmJjY9PWI+PjUpe3RoaXMuY2hhckxlbmd0aD0yO2JyZWFrfWlmKDI+PWEmJjE0PT1iPj40KXt0aGlzLmNoYXJMZW5ndGg9MzticmVha31pZigzPj1hJiYzMD09Yj4+Myl7dGhpcy5jaGFyTGVuZ3RoPTQ7YnJlYWt9fXRoaXMuY2hhclJlY2VpdmVkPWF9O3JiLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oYyl7dmFyIGE9IiI7YyYmYy5sZW5ndGgmJihhPXRoaXMud3JpdGUoYykpO3RoaXMuY2hhclJlY2VpdmVkJiYoYz10aGlzLmVuY29kaW5nLGErPXRoaXMuY2hhckJ1ZmZlci5zbGljZSgwLHRoaXMuY2hhclJlY2VpdmVkKS50b1N0cmluZyhjKSk7cmV0dXJuIGF9O3kuUmVhZGFibGVTdGF0ZT1xZTt2YXIgej1TZCgic3RyZWFtIik7emEoeSx4KTt5LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGMsYSl7dmFyIGI9dGhpcy5fcmVhZGFibGVTdGF0ZTtiLm9iamVjdE1vZGV8fCJzdHJpbmciIT09dHlwZW9mIGN8fChhPWF8fGIuZGVmYXVsdEVuY29kaW5nLAphIT09Yi5lbmNvZGluZyYmKGM9bC5mcm9tKGMsYSksYT0iIikpO3JldHVybiByZSh0aGlzLGIsYyxhLCExKX07eS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihjKXtyZXR1cm4gcmUodGhpcyx0aGlzLl9yZWFkYWJsZVN0YXRlLGMsIiIsITApfTt5LnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfTt5LnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihjKXt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IHJiKGMpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9YztyZXR1cm4gdGhpc307eS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihjKXt6KCJyZWFkIixjKTtjPXBhcnNlSW50KGMsMTApO3ZhciBhPXRoaXMuX3JlYWRhYmxlU3RhdGUsYj1jOzAhPT1jJiYoYS5lbWl0dGVkUmVhZGFibGU9ITEpO2lmKDA9PT1jJiZhLm5lZWRSZWFkYWJsZSYmKGEubGVuZ3RoPj1hLmhpZ2hXYXRlck1hcmt8fAphLmVuZGVkKSlyZXR1cm4geigicmVhZDogZW1pdFJlYWRhYmxlIixhLmxlbmd0aCxhLmVuZGVkKSwwPT09YS5sZW5ndGgmJmEuZW5kZWQ/SmModGhpcyk6UWIodGhpcyksbnVsbDtjPXNlKGMsYSk7aWYoMD09PWMmJmEuZW5kZWQpcmV0dXJuIDA9PT1hLmxlbmd0aCYmSmModGhpcyksbnVsbDt2YXIgZD1hLm5lZWRSZWFkYWJsZTt6KCJuZWVkIHJlYWRhYmxlIixkKTtpZigwPT09YS5sZW5ndGh8fGEubGVuZ3RoLWM8YS5oaWdoV2F0ZXJNYXJrKWQ9ITAseigibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGQpO2EuZW5kZWR8fGEucmVhZGluZz96KCJyZWFkaW5nIG9yIGVuZGVkIiwhMSk6ZCYmKHooImRvIHJlYWQiKSxhLnJlYWRpbmc9ITAsYS5zeW5jPSEwLDA9PT1hLmxlbmd0aCYmKGEubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKGEuaGlnaFdhdGVyTWFyayksYS5zeW5jPSExLGEucmVhZGluZ3x8KGM9c2UoYixhKSkpO2Q9MDxjP3VlKGMsYSk6bnVsbDtudWxsPT09ZD8oYS5uZWVkUmVhZGFibGU9CiEwLGM9MCk6YS5sZW5ndGgtPWM7MD09PWEubGVuZ3RoJiYoYS5lbmRlZHx8KGEubmVlZFJlYWRhYmxlPSEwKSxiIT09YyYmYS5lbmRlZCYmSmModGhpcykpO251bGwhPT1kJiZ0aGlzLmVtaXQoImRhdGEiLGQpO3JldHVybiBkfTt5LnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLEVycm9yKCJub3QgaW1wbGVtZW50ZWQiKSl9O3kucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oYyxhKXtmdW5jdGlvbiBiKGEpe3ooIm9udW5waXBlIik7YT09PXEmJmUoKX1mdW5jdGlvbiBkKCl7eigib25lbmQiKTtjLmVuZCgpfWZ1bmN0aW9uIGUoKXt6KCJjbGVhbnVwIik7Yy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGgpO2MucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsayk7Yy5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHIpO2MucmVtb3ZlTGlzdGVuZXIoImVycm9yIixnKTtjLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLGIpO3EucmVtb3ZlTGlzdGVuZXIoImVuZCIsZCk7cS5yZW1vdmVMaXN0ZW5lcigiZW5kIiwKZSk7cS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsZik7bT0hMDshbC5hd2FpdERyYWlufHxjLl93cml0YWJsZVN0YXRlJiYhYy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHIoKX1mdW5jdGlvbiBmKGEpe3ooIm9uZGF0YSIpO3A9ITE7ITEhPT1jLndyaXRlKGEpfHxwfHwoKDE9PT1sLnBpcGVzQ291bnQmJmwucGlwZXM9PT1jfHwxPGwucGlwZXNDb3VudCYmLTEhPT12ZShsLnBpcGVzLGMpKSYmIW0mJih6KCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLHEuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbikscS5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKysscD0hMCkscS5wYXVzZSgpKX1mdW5jdGlvbiBnKGEpe3ooIm9uZXJyb3IiLGEpO3QoKTtjLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsZyk7MD09PWMubGlzdGVuZXJzKCJlcnJvciIpLmxlbmd0aCYmYy5lbWl0KCJlcnJvciIsYSl9ZnVuY3Rpb24gaCgpe2MucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsayk7dCgpfWZ1bmN0aW9uIGsoKXt6KCJvbmZpbmlzaCIpOwpjLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaCk7dCgpfWZ1bmN0aW9uIHQoKXt6KCJ1bnBpcGUiKTtxLnVucGlwZShjKX12YXIgcT10aGlzLGw9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2gobC5waXBlc0NvdW50KXtjYXNlIDA6bC5waXBlcz1jO2JyZWFrO2Nhc2UgMTpsLnBpcGVzPVtsLnBpcGVzLGNdO2JyZWFrO2RlZmF1bHQ6bC5waXBlcy5wdXNoKGMpfWwucGlwZXNDb3VudCs9MTt6KCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLGwucGlwZXNDb3VudCxhKTthPWEmJiExPT09YS5lbmQ/ZTpkO2lmKGwuZW5kRW1pdHRlZClYKGEpO2Vsc2UgcS5vbmNlKCJlbmQiLGEpO2Mub24oInVucGlwZSIsYik7dmFyIHI9amcocSk7Yy5vbigiZHJhaW4iLHIpO3ZhciBtPSExLHA9ITE7cS5vbigiZGF0YSIsZik7aGcoYywiZXJyb3IiLGcpO2Mub25jZSgiY2xvc2UiLGgpO2Mub25jZSgiZmluaXNoIixrKTtjLmVtaXQoInBpcGUiLHEpO2wuZmxvd2luZ3x8KHooInBpcGUgcmVzdW1lIikscS5yZXN1bWUoKSk7CnJldHVybiBjfTt5LnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oYyl7dmFyIGE9dGhpcy5fcmVhZGFibGVTdGF0ZTtpZigwPT09YS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1hLnBpcGVzQ291bnQpe2lmKGMmJmMhPT1hLnBpcGVzKXJldHVybiB0aGlzO2N8fChjPWEucGlwZXMpO2EucGlwZXM9bnVsbDthLnBpcGVzQ291bnQ9MDthLmZsb3dpbmc9ITE7YyYmYy5lbWl0KCJ1bnBpcGUiLHRoaXMpO3JldHVybiB0aGlzfWlmKCFjKXtjPWEucGlwZXM7dmFyIGI9YS5waXBlc0NvdW50O2EucGlwZXM9bnVsbDthLnBpcGVzQ291bnQ9MDthLmZsb3dpbmc9ITE7Zm9yKGE9MDthPGI7YSsrKWNbYV0uZW1pdCgidW5waXBlIix0aGlzKTtyZXR1cm4gdGhpc31iPXZlKGEucGlwZXMsYyk7aWYoLTE9PT1iKXJldHVybiB0aGlzO2EucGlwZXMuc3BsaWNlKGIsMSk7LS1hLnBpcGVzQ291bnQ7MT09PWEucGlwZXNDb3VudCYmKGEucGlwZXM9YS5waXBlc1swXSk7Yy5lbWl0KCJ1bnBpcGUiLAp0aGlzKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUub249ZnVuY3Rpb24oYyxhKXthPXgucHJvdG90eXBlLm9uLmNhbGwodGhpcyxjLGEpOyJkYXRhIj09PWM/ITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk6InJlYWRhYmxlIj09PWMmJihjPXRoaXMuX3JlYWRhYmxlU3RhdGUsYy5lbmRFbWl0dGVkfHxjLnJlYWRhYmxlTGlzdGVuaW5nfHwoYy5yZWFkYWJsZUxpc3RlbmluZz1jLm5lZWRSZWFkYWJsZT0hMCxjLmVtaXR0ZWRSZWFkYWJsZT0hMSxjLnJlYWRpbmc/Yy5sZW5ndGgmJlFiKHRoaXMpOlgoa2csdGhpcykpKTtyZXR1cm4gYX07eS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9eS5wcm90b3R5cGUub247eS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fcmVhZGFibGVTdGF0ZTtjLmZsb3dpbmd8fCh6KCJyZXN1bWUiKSxjLmZsb3dpbmc9ITAsYy5yZXN1bWVTY2hlZHVsZWR8fChjLnJlc3VtZVNjaGVkdWxlZD0hMCxYKGxnLAp0aGlzLGMpKSk7cmV0dXJuIHRoaXN9O3kucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7eigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpOyExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoeigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihjKXt2YXIgYT10aGlzLl9yZWFkYWJsZVN0YXRlLGI9ITEsZD10aGlzO2Mub24oImVuZCIsZnVuY3Rpb24oKXt6KCJ3cmFwcGVkIGVuZCIpO2lmKGEuZGVjb2RlciYmIWEuZW5kZWQpe3ZhciBjPWEuZGVjb2Rlci5lbmQoKTtjJiZjLmxlbmd0aCYmZC5wdXNoKGMpfWQucHVzaChudWxsKX0pO2Mub24oImRhdGEiLGZ1bmN0aW9uKGUpe3ooIndyYXBwZWQgZGF0YSIpO2EuZGVjb2RlciYmKGU9YS5kZWNvZGVyLndyaXRlKGUpKTthLm9iamVjdE1vZGUmJihudWxsPT09CmV8fHZvaWQgMD09PWUpfHwhKGEub2JqZWN0TW9kZXx8ZSYmZS5sZW5ndGgpfHxkLnB1c2goZSl8fChiPSEwLGMucGF1c2UoKSl9KTtmb3IodmFyIGUgaW4gYyl2b2lkIDA9PT10aGlzW2VdJiYiZnVuY3Rpb24iPT09dHlwZW9mIGNbZV0mJih0aGlzW2VdPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjW2FdLmFwcGx5KGMsYXJndW1lbnRzKX19KGUpKTtuZyhbImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXSxmdW5jdGlvbihhKXtjLm9uKGEsZC5lbWl0LmJpbmQoZCxhKSl9KTtkLl9yZWFkPWZ1bmN0aW9uKGEpe3ooIndyYXBwZWQgX3JlYWQiLGEpO2ImJihiPSExLGMucmVzdW1lKCkpfTtyZXR1cm4gZH07eS5fZnJvbUxpc3Q9dWU7TC5Xcml0YWJsZVN0YXRlPUtjO3phKEwseCk7S2MucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYz10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxhPVtdO2M7KWEucHVzaChjKSxjPWMubmV4dDsKcmV0dXJuIGF9O0wucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX07TC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYyxhLGIpe3ZhciBkPXRoaXMuX3dyaXRhYmxlU3RhdGUsZT0hMTsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihiPWEsYT1udWxsKTtsLmlzQnVmZmVyKGMpP2E9ImJ1ZmZlciI6YXx8KGE9ZC5kZWZhdWx0RW5jb2RpbmcpOyJmdW5jdGlvbiIhPT10eXBlb2YgYiYmKGI9b2cpO2lmKGQuZW5kZWQpZD1iLGM9RXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpLHRoaXMuZW1pdCgiZXJyb3IiLGMpLFgoZCxjKTtlbHNle3ZhciBmPWIsZz0hMCxoPSExO251bGw9PT1jP2g9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKTpsLmlzQnVmZmVyKGMpfHwic3RyaW5nIj09PXR5cGVvZiBjfHx2b2lkIDA9PT1jfHxkLm9iamVjdE1vZGV8fChoPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSk7CmgmJih0aGlzLmVtaXQoImVycm9yIixoKSxYKGYsaCksZz0hMSk7ZyYmKGQucGVuZGluZ2NiKyssZT1hLGQub2JqZWN0TW9kZXx8ITE9PT1kLmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT09dHlwZW9mIGN8fChjPWwuZnJvbShjLGUpKSxsLmlzQnVmZmVyKGMpJiYoZT0iYnVmZmVyIiksZj1kLm9iamVjdE1vZGU/MTpjLmxlbmd0aCxkLmxlbmd0aCs9ZixhPWQubGVuZ3RoPGQuaGlnaFdhdGVyTWFyayxhfHwoZC5uZWVkRHJhaW49ITApLGQud3JpdGluZ3x8ZC5jb3JrZWQ/KGY9ZC5sYXN0QnVmZmVyZWRSZXF1ZXN0LGQubGFzdEJ1ZmZlcmVkUmVxdWVzdD1uZXcgcGcoYyxlLGIpLGY/Zi5uZXh0PWQubGFzdEJ1ZmZlcmVkUmVxdWVzdDpkLmJ1ZmZlcmVkUmVxdWVzdD1kLmxhc3RCdWZmZXJlZFJlcXVlc3QsZC5idWZmZXJlZFJlcXVlc3RDb3VudCs9MSk6TGModGhpcyxkLCExLGYsYyxlLGIpLGU9YSl9cmV0dXJuIGV9O0wucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfTsKTC5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fd3JpdGFibGVTdGF0ZTtjLmNvcmtlZCYmKGMuY29ya2VkLS0sYy53cml0aW5nfHxjLmNvcmtlZHx8Yy5maW5pc2hlZHx8Yy5idWZmZXJQcm9jZXNzaW5nfHwhYy5idWZmZXJlZFJlcXVlc3R8fHhlKHRoaXMsYykpfTtMLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oYyl7InN0cmluZyI9PT10eXBlb2YgYyYmKGM9Yy50b0xvd2VyQ2FzZSgpKTtpZighKC0xPCJoZXggdXRmOCB1dGYtOCBhc2NpaSBiaW5hcnkgYmFzZTY0IHVjczIgdWNzLTIgdXRmMTZsZSB1dGYtMTZsZSByYXciLnNwbGl0KCIgIikuaW5kZXhPZigoYysiIikudG9Mb3dlckNhc2UoKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYyk7dGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9YztyZXR1cm4gdGhpc307TC5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGMsYSxiKXtiKEVycm9yKCJub3QgaW1wbGVtZW50ZWQiKSl9OwpMLnByb3RvdHlwZS5fd3JpdGV2PW51bGw7TC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGMsYSxiKXt2YXIgZD10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PT10eXBlb2YgYz8oYj1jLGE9Yz1udWxsKToiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihiPWEsYT1udWxsKTtudWxsIT09YyYmdm9pZCAwIT09YyYmdGhpcy53cml0ZShjLGEpO2QuY29ya2VkJiYoZC5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKTtpZighZC5lbmRpbmcmJiFkLmZpbmlzaGVkKXtjPWI7ZC5lbmRpbmc9ITA7QWUodGhpcyxkKTtpZihjKWlmKGQuZmluaXNoZWQpWChjKTtlbHNlIHRoaXMub25jZSgiZmluaXNoIixjKTtkLmVuZGVkPSEwO3RoaXMud3JpdGFibGU9ITF9fTt6YShVLHkpO2Zvcih2YXIgbmY9T2JqZWN0LmtleXMoTC5wcm90b3R5cGUpLGFkPTA7YWQ8bmYubGVuZ3RoO2FkKyspe3ZhciBiZD1uZlthZF07VS5wcm90b3R5cGVbYmRdfHwoVS5wcm90b3R5cGVbYmRdPUwucHJvdG90eXBlW2JkXSl9emEoYmEsClUpO2JhLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGMsYSl7dGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMTtyZXR1cm4gVS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsYyxhKX07YmEucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7fTtiYS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGMsYSxiKXt2YXIgZD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtkLndyaXRlY2I9YjtkLndyaXRlY2h1bms9YztkLndyaXRlZW5jb2Rpbmc9YTtkLnRyYW5zZm9ybWluZ3x8KGM9dGhpcy5fcmVhZGFibGVTdGF0ZSwoZC5uZWVkVHJhbnNmb3JtfHxjLm5lZWRSZWFkYWJsZXx8Yy5sZW5ndGg8Yy5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChjLmhpZ2hXYXRlck1hcmspKX07YmEucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbCE9PWMud3JpdGVjaHVuayYmYy53cml0ZWNiJiYKIWMudHJhbnNmb3JtaW5nPyhjLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oYy53cml0ZWNodW5rLGMud3JpdGVlbmNvZGluZyxjLmFmdGVyVHJhbnNmb3JtKSk6Yy5uZWVkVHJhbnNmb3JtPSEwfTt6YShzYixiYSk7c2IucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oYyxhLGIpe2IobnVsbCxjKX07emEoY2EseCk7Y2EuUmVhZGFibGU9eTtjYS5Xcml0YWJsZT1MO2NhLkR1cGxleD1VO2NhLlRyYW5zZm9ybT1iYTtjYS5QYXNzVGhyb3VnaD1zYjtjYS5TdHJlYW09Y2E7Y2EucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oYyxhKXtmdW5jdGlvbiBiKGEpe2Mud3JpdGFibGUmJiExPT09Yy53cml0ZShhKSYmay5wYXVzZSYmay5wYXVzZSgpfWZ1bmN0aW9uIGQoKXtrLnJlYWRhYmxlJiZrLnJlc3VtZSYmay5yZXN1bWUoKX1mdW5jdGlvbiBlKCl7dHx8KHQ9ITAsYy5lbmQoKSl9ZnVuY3Rpb24gZigpe3R8fCh0PSEwLCJmdW5jdGlvbiI9PT10eXBlb2YgYy5kZXN0cm95JiZjLmRlc3Ryb3koKSl9CmZ1bmN0aW9uIGcoYSl7aCgpO2lmKDA9PT14Lmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBhO31mdW5jdGlvbiBoKCl7ay5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsYik7Yy5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLGQpO2sucmVtb3ZlTGlzdGVuZXIoImVuZCIsZSk7ay5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGYpO2sucmVtb3ZlTGlzdGVuZXIoImVycm9yIixnKTtjLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsZyk7ay5yZW1vdmVMaXN0ZW5lcigiZW5kIixoKTtrLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaCk7Yy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGgpfXZhciBrPXRoaXM7ay5vbigiZGF0YSIsYik7Yy5vbigiZHJhaW4iLGQpO2MuX2lzU3RkaW98fGEmJiExPT09YS5lbmR8fChrLm9uKCJlbmQiLGUpLGsub24oImNsb3NlIixmKSk7dmFyIHQ9ITE7ay5vbigiZXJyb3IiLGcpO2Mub24oImVycm9yIixnKTtrLm9uKCJlbmQiLGgpO2sub24oImNsb3NlIixoKTtjLm9uKCJjbG9zZSIsCmgpO2MuZW1pdCgicGlwZSIsayk7cmV0dXJuIGN9O3ZhciBYZz1BcnJheS5wcm90b3R5cGUuc2xpY2UsWWc9ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgZSBpbiBiKWFbZV09YltlXTtyZXR1cm4gMz5hcmd1bWVudHMubGVuZ3RoP2E6ZC5hcHBseShudWxsLFthXS5jb25jYXQoWGcuY2FsbChhcmd1bWVudHMsMikpKX0sb2Y9SyhmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiLGQpe3ZvaWQgMD09PWQmJihkPWZ1bmN0aW9uKGEpe3JldHVybiBhfSk7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPVtdLGg9MDtoPGFyZ3VtZW50cy5sZW5ndGg7aCsrKWZbaF09YXJndW1lbnRzW2hdO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihoLGcpe2FbYl0uYmluZChhKS5hcHBseSh2b2lkIDAsZShmLFtmdW5jdGlvbihhLGIpe3JldHVybiBhP2coYSk6aChkKGIpKX1dKSl9KX19dmFyIGU9TiYmTi5fX3NwcmVhZEFycmF5c3x8ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiPTAsZD1hcmd1bWVudHMubGVuZ3RoO2I8CmQ7YisrKWErPWFyZ3VtZW50c1tiXS5sZW5ndGg7YT1BcnJheShhKTt2YXIgZT0wO2ZvcihiPTA7YjxkO2IrKylmb3IodmFyIGY9YXJndW1lbnRzW2JdLGw9MCxyPWYubGVuZ3RoO2w8cjtsKyssZSsrKWFbZV09ZltsXTtyZXR1cm4gYX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe3RoaXMudm9sPWE7dGhpcy5mZD1ifWEucHJvdG90eXBlLmFwcGVuZEZpbGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZCh0aGlzLnZvbCwiYXBwZW5kRmlsZSIpKHRoaXMuZmQsYSxiKX07YS5wcm90b3R5cGUuY2htb2Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGQodGhpcy52b2wsImZjaG1vZCIpKHRoaXMuZmQsYSl9O2EucHJvdG90eXBlLmNob3duPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQodGhpcy52b2wsImZjaG93biIpKHRoaXMuZmQsYSxiKX07YS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gZCh0aGlzLnZvbCwKImNsb3NlIikodGhpcy5mZCl9O2EucHJvdG90eXBlLmRhdGFzeW5jPWZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcy52b2wsImZkYXRhc3luYyIpKHRoaXMuZmQpfTthLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBkKHRoaXMudm9sLCJyZWFkIixmdW5jdGlvbihiKXtyZXR1cm57Ynl0ZXNSZWFkOmIsYnVmZmVyOmF9fSkodGhpcy5mZCxhLGIsZSxmKX07YS5wcm90b3R5cGUucmVhZEZpbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQodGhpcy52b2wsInJlYWRGaWxlIikodGhpcy5mZCxhKX07YS5wcm90b3R5cGUuc3RhdD1mdW5jdGlvbihhKXtyZXR1cm4gZCh0aGlzLnZvbCwiZnN0YXQiKSh0aGlzLmZkLGEpfTthLnByb3RvdHlwZS5zeW5jPWZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcy52b2wsImZzeW5jIikodGhpcy5mZCl9O2EucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGEpe3JldHVybiBkKHRoaXMudm9sLCJmdHJ1bmNhdGUiKSh0aGlzLmZkLGEpfTthLnByb3RvdHlwZS51dGltZXM9CmZ1bmN0aW9uKGEsYil7cmV0dXJuIGQodGhpcy52b2wsImZ1dGltZXMiKSh0aGlzLmZkLGEsYil9O2EucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBkKHRoaXMudm9sLCJ3cml0ZSIsZnVuY3Rpb24oYil7cmV0dXJue2J5dGVzV3JpdHRlbjpiLGJ1ZmZlcjphfX0pKHRoaXMuZmQsYSxiLGUsZil9O2EucHJvdG90eXBlLndyaXRlRmlsZT1mdW5jdGlvbihhLGIpe3JldHVybiBkKHRoaXMudm9sLCJ3cml0ZUZpbGUiKSh0aGlzLmZkLGEsYil9O3JldHVybiBhfSgpO2IuRmlsZUhhbmRsZT1mO2IuZGVmYXVsdD1mdW5jdGlvbihhKXtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBQcm9taXNlP251bGw6e0ZpbGVIYW5kbGU6ZixhY2Nlc3M6ZnVuY3Rpb24oYixlKXtyZXR1cm4gZChhLCJhY2Nlc3MiKShiLGUpfSxhcHBlbmRGaWxlOmZ1bmN0aW9uKGIsZSxnKXtyZXR1cm4gZChhLCJhcHBlbmRGaWxlIikoYiBpbnN0YW5jZW9mIGY/Yi5mZDpiLGUsZyl9LGNobW9kOmZ1bmN0aW9uKGIsCmUpe3JldHVybiBkKGEsImNobW9kIikoYixlKX0sY2hvd246ZnVuY3Rpb24oYixlLGYpe3JldHVybiBkKGEsImNob3duIikoYixlLGYpfSxjb3B5RmlsZTpmdW5jdGlvbihiLGUsZil7cmV0dXJuIGQoYSwiY29weUZpbGUiKShiLGUsZil9LGxjaG1vZDpmdW5jdGlvbihiLGUpe3JldHVybiBkKGEsImxjaG1vZCIpKGIsZSl9LGxjaG93bjpmdW5jdGlvbihiLGUsZil7cmV0dXJuIGQoYSwibGNob3duIikoYixlLGYpfSxsaW5rOmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwibGluayIpKGIsZSl9LGxzdGF0OmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwibHN0YXQiKShiLGUpfSxta2RpcjpmdW5jdGlvbihiLGUpe3JldHVybiBkKGEsIm1rZGlyIikoYixlKX0sbWtkdGVtcDpmdW5jdGlvbihiLGUpe3JldHVybiBkKGEsIm1rZHRlbXAiKShiLGUpfSxvcGVuOmZ1bmN0aW9uKGIsZSxnKXtyZXR1cm4gZChhLCJvcGVuIixmdW5jdGlvbihiKXtyZXR1cm4gbmV3IGYoYSxiKX0pKGIsZSxnKX0scmVhZGRpcjpmdW5jdGlvbihiLAplKXtyZXR1cm4gZChhLCJyZWFkZGlyIikoYixlKX0scmVhZEZpbGU6ZnVuY3Rpb24oYixlKXtyZXR1cm4gZChhLCJyZWFkRmlsZSIpKGIgaW5zdGFuY2VvZiBmP2IuZmQ6YixlKX0scmVhZGxpbms6ZnVuY3Rpb24oYixlKXtyZXR1cm4gZChhLCJyZWFkbGluayIpKGIsZSl9LHJlYWxwYXRoOmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwicmVhbHBhdGgiKShiLGUpfSxyZW5hbWU6ZnVuY3Rpb24oYixlKXtyZXR1cm4gZChhLCJyZW5hbWUiKShiLGUpfSxybWRpcjpmdW5jdGlvbihiKXtyZXR1cm4gZChhLCJybWRpciIpKGIpfSxzdGF0OmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwic3RhdCIpKGIsZSl9LHN5bWxpbms6ZnVuY3Rpb24oYixlLGYpe3JldHVybiBkKGEsInN5bWxpbmsiKShiLGUsZil9LHRydW5jYXRlOmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwidHJ1bmNhdGUiKShiLGUpfSx1bmxpbms6ZnVuY3Rpb24oYil7cmV0dXJuIGQoYSwidW5saW5rIikoYil9LHV0aW1lczpmdW5jdGlvbihiLAplLGYpe3JldHVybiBkKGEsInV0aW1lcyIpKGIsZSxmKX0sd3JpdGVGaWxlOmZ1bmN0aW9uKGIsZSxnKXtyZXR1cm4gZChhLCJ3cml0ZUZpbGUiKShiIGluc3RhbmNlb2YgZj9iLmZkOmIsZSxnKX19fX0pO1Eob2YpO3ZhciB3Zz0vW15ceDIwLVx4N0VdLyx1Zz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csRGU9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFphPU1hdGguZmxvb3IsTWM9U3RyaW5nLmZyb21DaGFyQ29kZSxGZT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfSx5Zz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oYSl7dmFyIGI9W10sZDtmb3IoZCBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLApkKSYmYi5wdXNoKGQpO3JldHVybiBifSxaZz17cGFyc2U6UmIscmVzb2x2ZTpmdW5jdGlvbihhLGIpe3JldHVybiBSYihhLCExLCEwKS5yZXNvbHZlKGIpfSxyZXNvbHZlT2JqZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE/UmIoYSwhMSwhMCkucmVzb2x2ZU9iamVjdChiKTpifSxmb3JtYXQ6ZnVuY3Rpb24oYSl7SmEoYSkmJihhPUhlKHt9LGEpKTtyZXR1cm4gUGMoYSl9LFVybDpkYX0sQWc9L14oW2EtejAtOS4rLV0rOikvaSxFZz0vOlswLTldKiQvLHpnPS9eKFwvXC8/KD8hXC8pW15cP1xzXSopKFw/W15cc10qKT8kLywkZz0ie318XFxeYCIuc3BsaXQoIiIpLmNvbmNhdCgnPD4iYCBcclxuXHQnLnNwbGl0KCIiKSksT2M9WyInIl0uY29uY2F0KCRnKSxKZT1bIiUiLCIvIiwiPyIsIjsiLCIjIl0uY29uY2F0KE9jKSxJZT1bIi8iLCI/IiwiIyJdLENnPTI1NSxMZT0vXlsrYS16MC05QS1aXy1dezAsNjN9JC8sQmc9L14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLERnPXtqYXZhc2NyaXB0OiEwLAoiamF2YXNjcmlwdDoiOiEwfSxOYz17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSwkYT17aHR0cDohMCxodHRwczohMCxmdHA6ITAsZ29waGVyOiEwLGZpbGU6ITAsImh0dHA6IjohMCwiaHR0cHM6IjohMCwiZnRwOiI6ITAsImdvcGhlcjoiOiEwLCJmaWxlOiI6ITB9O2RhLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIEhlKHRoaXMsYSxiLGQpfTtkYS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIFBjKHRoaXMpfTtkYS5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KFJiKGEsITEsITApKS5mb3JtYXQoKX07ZGEucHJvdG90eXBlLnJlc29sdmVPYmplY3Q9ZnVuY3Rpb24oYSl7aWYoSmEoYSkpe3ZhciBiPW5ldyBkYTtiLnBhcnNlKGEsITEsITApO2E9Yn1iPW5ldyBkYTtmb3IodmFyIGQ9T2JqZWN0LmtleXModGhpcyksZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdO2JbZl09CnRoaXNbZl19Yi5oYXNoPWEuaGFzaDtpZigiIj09PWEuaHJlZilyZXR1cm4gYi5ocmVmPWIuZm9ybWF0KCksYjtpZihhLnNsYXNoZXMmJiFhLnByb3RvY29sKXtkPU9iamVjdC5rZXlzKGEpO2ZvcihlPTA7ZTxkLmxlbmd0aDtlKyspZj1kW2VdLCJwcm90b2NvbCIhPT1mJiYoYltmXT1hW2ZdKTskYVtiLnByb3RvY29sXSYmYi5ob3N0bmFtZSYmIWIucGF0aG5hbWUmJihiLnBhdGg9Yi5wYXRobmFtZT0iLyIpO2IuaHJlZj1iLmZvcm1hdCgpO3JldHVybiBifXZhciBnO2lmKGEucHJvdG9jb2wmJmEucHJvdG9jb2whPT1iLnByb3RvY29sKXtpZighJGFbYS5wcm90b2NvbF0pe2Q9T2JqZWN0LmtleXMoYSk7Zm9yKGU9MDtlPGQubGVuZ3RoO2UrKylmPWRbZV0sYltmXT1hW2ZdO2IuaHJlZj1iLmZvcm1hdCgpO3JldHVybiBifWIucHJvdG9jb2w9YS5wcm90b2NvbDtpZihhLmhvc3R8fE5jW2EucHJvdG9jb2xdKWIucGF0aG5hbWU9YS5wYXRobmFtZTtlbHNle2ZvcihnPShhLnBhdGhuYW1lfHwKIiIpLnNwbGl0KCIvIik7Zy5sZW5ndGgmJiEoYS5ob3N0PWcuc2hpZnQoKSk7KTthLmhvc3R8fChhLmhvc3Q9IiIpO2EuaG9zdG5hbWV8fChhLmhvc3RuYW1lPSIiKTsiIiE9PWdbMF0mJmcudW5zaGlmdCgiIik7Mj5nLmxlbmd0aCYmZy51bnNoaWZ0KCIiKTtiLnBhdGhuYW1lPWcuam9pbigiLyIpfWIuc2VhcmNoPWEuc2VhcmNoO2IucXVlcnk9YS5xdWVyeTtiLmhvc3Q9YS5ob3N0fHwiIjtiLmF1dGg9YS5hdXRoO2IuaG9zdG5hbWU9YS5ob3N0bmFtZXx8YS5ob3N0O2IucG9ydD1hLnBvcnQ7aWYoYi5wYXRobmFtZXx8Yi5zZWFyY2gpYi5wYXRoPShiLnBhdGhuYW1lfHwiIikrKGIuc2VhcmNofHwiIik7Yi5zbGFzaGVzPWIuc2xhc2hlc3x8YS5zbGFzaGVzO2IuaHJlZj1iLmZvcm1hdCgpO3JldHVybiBifWQ9Yi5wYXRobmFtZSYmIi8iPT09Yi5wYXRobmFtZS5jaGFyQXQoMCk7dmFyIGg9YS5ob3N0fHxhLnBhdGhuYW1lJiYiLyI9PT1hLnBhdGhuYW1lLmNoYXJBdCgwKSxrPWQ9aHx8CmR8fGIuaG9zdCYmYS5wYXRobmFtZTtlPWIucGF0aG5hbWUmJmIucGF0aG5hbWUuc3BsaXQoIi8iKXx8W107Zj1iLnByb3RvY29sJiYhJGFbYi5wcm90b2NvbF07Zz1hLnBhdGhuYW1lJiZhLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdO2YmJihiLmhvc3RuYW1lPSIiLGIucG9ydD1udWxsLGIuaG9zdCYmKCIiPT09ZVswXT9lWzBdPWIuaG9zdDplLnVuc2hpZnQoYi5ob3N0KSksYi5ob3N0PSIiLGEucHJvdG9jb2wmJihhLmhvc3RuYW1lPW51bGwsYS5wb3J0PW51bGwsYS5ob3N0JiYoIiI9PT1nWzBdP2dbMF09YS5ob3N0OmcudW5zaGlmdChhLmhvc3QpKSxhLmhvc3Q9bnVsbCksZD1kJiYoIiI9PT1nWzBdfHwiIj09PWVbMF0pKTtpZihoKWIuaG9zdD1hLmhvc3R8fCIiPT09YS5ob3N0P2EuaG9zdDpiLmhvc3QsYi5ob3N0bmFtZT1hLmhvc3RuYW1lfHwiIj09PWEuaG9zdG5hbWU/YS5ob3N0bmFtZTpiLmhvc3RuYW1lLGIuc2VhcmNoPWEuc2VhcmNoLGIucXVlcnk9YS5xdWVyeSxlPWc7ZWxzZSBpZihnLmxlbmd0aCllfHwKKGU9W10pLGUucG9wKCksZT1lLmNvbmNhdChnKSxiLnNlYXJjaD1hLnNlYXJjaCxiLnF1ZXJ5PWEucXVlcnk7ZWxzZSBpZihudWxsIT1hLnNlYXJjaCl7ZiYmKGIuaG9zdG5hbWU9Yi5ob3N0PWUuc2hpZnQoKSxmPWIuaG9zdCYmMDxiLmhvc3QuaW5kZXhPZigiQCIpP2IuaG9zdC5zcGxpdCgiQCIpOiExKSYmKGIuYXV0aD1mLnNoaWZ0KCksYi5ob3N0PWIuaG9zdG5hbWU9Zi5zaGlmdCgpKTtiLnNlYXJjaD1hLnNlYXJjaDtiLnF1ZXJ5PWEucXVlcnk7aWYobnVsbCE9PWIucGF0aG5hbWV8fG51bGwhPT1iLnNlYXJjaCliLnBhdGg9KGIucGF0aG5hbWU/Yi5wYXRobmFtZToiIikrKGIuc2VhcmNoP2Iuc2VhcmNoOiIiKTtiLmhyZWY9Yi5mb3JtYXQoKTtyZXR1cm4gYn1pZighZS5sZW5ndGgpcmV0dXJuIGIucGF0aG5hbWU9bnVsbCxiLnBhdGg9Yi5zZWFyY2g/Ii8iK2Iuc2VhcmNoOm51bGwsYi5ocmVmPWIuZm9ybWF0KCksYjtoPWUuc2xpY2UoLTEpWzBdO2c9KGIuaG9zdHx8YS5ob3N0fHwKMTxlLmxlbmd0aCkmJigiLiI9PT1ofHwiLi4iPT09aCl8fCIiPT09aDtmb3IodmFyIGw9MCxxPWUubGVuZ3RoOzA8PXE7cS0tKWg9ZVtxXSwiLiI9PT1oP2Uuc3BsaWNlKHEsMSk6Ii4uIj09PWg/KGUuc3BsaWNlKHEsMSksbCsrKTpsJiYoZS5zcGxpY2UocSwxKSxsLS0pO2lmKCFkJiYhaylmb3IoO2wtLTtsKWUudW5zaGlmdCgiLi4iKTshZHx8IiI9PT1lWzBdfHxlWzBdJiYiLyI9PT1lWzBdLmNoYXJBdCgwKXx8ZS51bnNoaWZ0KCIiKTtnJiYiLyIhPT1lLmpvaW4oIi8iKS5zdWJzdHIoLTEpJiZlLnB1c2goIiIpO2s9IiI9PT1lWzBdfHxlWzBdJiYiLyI9PT1lWzBdLmNoYXJBdCgwKTtmJiYoYi5ob3N0bmFtZT1iLmhvc3Q9az8iIjplLmxlbmd0aD9lLnNoaWZ0KCk6IiIsZj1iLmhvc3QmJjA8Yi5ob3N0LmluZGV4T2YoIkAiKT9iLmhvc3Quc3BsaXQoIkAiKTohMSkmJihiLmF1dGg9Zi5zaGlmdCgpLGIuaG9zdD1iLmhvc3RuYW1lPWYuc2hpZnQoKSk7KGR8fGIuaG9zdCYmZS5sZW5ndGgpJiYKIWsmJmUudW5zaGlmdCgiIik7ZS5sZW5ndGg/Yi5wYXRobmFtZT1lLmpvaW4oIi8iKTooYi5wYXRobmFtZT1udWxsLGIucGF0aD1udWxsKTtpZihudWxsIT09Yi5wYXRobmFtZXx8bnVsbCE9PWIuc2VhcmNoKWIucGF0aD0oYi5wYXRobmFtZT9iLnBhdGhuYW1lOiIiKSsoYi5zZWFyY2g/Yi5zZWFyY2g6IiIpO2IuYXV0aD1hLmF1dGh8fGIuYXV0aDtiLnNsYXNoZXM9Yi5zbGFzaGVzfHxhLnNsYXNoZXM7Yi5ocmVmPWIuZm9ybWF0KCk7cmV0dXJuIGJ9O2RhLnByb3RvdHlwZS5wYXJzZUhvc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gS2UodGhpcyl9O3ZhciBwZj1LKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZChhLGIpe2E9YVtiXTtyZXR1cm4gMDxiJiYoIi8iPT09YXx8ZiYmIlxcIj09PWEpfWZ1bmN0aW9uIGUoYSl7dmFyIGI9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiEwO2lmKGYpe3ZhciBlPWE7aWYoInN0cmluZyIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleHBlY3RlZCBhIHN0cmluZyIpOwplPWUucmVwbGFjZSgvW1xcXC9dKy9nLCIvIik7aWYoITEhPT1iKWlmKGI9ZSxlPWIubGVuZ3RoLTEsMj5lKWU9YjtlbHNle2Zvcig7ZChiLGUpOyllLS07ZT1iLnN1YnN0cigwLGUrMSl9cmV0dXJuIGUucmVwbGFjZSgvXihbYS16QS1aXSs6fFwuXC8pLywiIil9cmV0dXJuIGF9T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2IudW5peGlmeT1lO2IuY29ycmVjdFBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYS5yZXBsYWNlKC9eXFxcXFw/XFwuOlxcLywiXFwiKSl9O3ZhciBmPSJ3aW4zMiI9PT1WYS5wbGF0Zm9ybX0pO1EocGYpO3ZhciBRYT1LKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZChhLGIpe3ZvaWQgMD09PWImJihiPVkuZGVmYXVsdC5jd2QoKSk7cmV0dXJuIGFoKGIsYSl9ZnVuY3Rpb24gZShhLGIpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYT9bZigpLGFdOltmKGEpLHIoYildfWZ1bmN0aW9uIGYoYSl7dm9pZCAwPT09YSYmKGE9Cnt9KTtyZXR1cm4geGEoe30sdWEsYSl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhP3hhKHt9LGthLHttb2RlOmF9KTp4YSh7fSxrYSxhKX1mdW5jdGlvbiBoKGEsYixkLGUpe3ZvaWQgMD09PWImJihiPSIiKTt2b2lkIDA9PT1kJiYoZD0iIik7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciB2PSIiO2QmJih2PSIgJyIrZCsiJyIpO2UmJih2Kz0iIC0+ICciK2UrIiciKTtzd2l0Y2goYSl7Y2FzZSAiRU5PRU5UIjpyZXR1cm4iRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCAiK2IrdjtjYXNlICJFQkFERiI6cmV0dXJuIkVCQURGOiBiYWQgZmlsZSBkZXNjcmlwdG9yLCAiK2IrdjtjYXNlICJFSU5WQUwiOnJldHVybiJFSU5WQUw6IGludmFsaWQgYXJndW1lbnQsICIrYit2O2Nhc2UgIkVQRVJNIjpyZXR1cm4iRVBFUk06IG9wZXJhdGlvbiBub3QgcGVybWl0dGVkLCAiK2IrdjtjYXNlICJFUFJPVE8iOnJldHVybiJFUFJPVE86IHByb3RvY29sIGVycm9yLCAiKwpiK3Y7Y2FzZSAiRUVYSVNUIjpyZXR1cm4iRUVYSVNUOiBmaWxlIGFscmVhZHkgZXhpc3RzLCAiK2IrdjtjYXNlICJFTk9URElSIjpyZXR1cm4iRU5PVERJUjogbm90IGEgZGlyZWN0b3J5LCAiK2IrdjtjYXNlICJFSVNESVIiOnJldHVybiJFSVNESVI6IGlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5LCAiK2IrdjtjYXNlICJFQUNDRVMiOnJldHVybiJFQUNDRVM6IHBlcm1pc3Npb24gZGVuaWVkLCAiK2IrdjtjYXNlICJFTk9URU1QVFkiOnJldHVybiJFTk9URU1QVFk6IGRpcmVjdG9yeSBub3QgZW1wdHksICIrYit2O2Nhc2UgIkVNRklMRSI6cmV0dXJuIkVNRklMRTogdG9vIG1hbnkgb3BlbiBmaWxlcywgIitiK3Y7Y2FzZSAiRU5PU1lTIjpyZXR1cm4iRU5PU1lTOiBmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQsICIrYit2O2RlZmF1bHQ6cmV0dXJuIGErIjogZXJyb3Igb2NjdXJyZWQsICIrYit2fX1mdW5jdGlvbiBrKGEsYixkLGUsZil7dm9pZCAwPT09YiYmKGI9IiIpO3ZvaWQgMD09PQpkJiYoZD0iIik7dm9pZCAwPT09ZSYmKGU9IiIpO3ZvaWQgMD09PWYmJihmPUVycm9yKTtiPW5ldyBmKGgoYSxiLGQsZSkpO2IuY29kZT1hO3JldHVybiBifWZ1bmN0aW9uIGwoYSl7aWYoIm51bWJlciI9PT10eXBlb2YgYSlyZXR1cm4gYTtpZigic3RyaW5nIj09PXR5cGVvZiBhKXt2YXIgYj1SW2FdO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIGIpcmV0dXJuIGJ9dGhyb3cgbmV3IHhiLlR5cGVFcnJvcigiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIiwiZmxhZ3MiLGEpO31mdW5jdGlvbiBxKGEsYil7aWYoYil7dmFyIGQ9dHlwZW9mIGI7c3dpdGNoKGQpe2Nhc2UgInN0cmluZyI6YT14YSh7fSxhLHtlbmNvZGluZzpifSk7YnJlYWs7Y2FzZSAib2JqZWN0IjphPXhhKHt9LGEsYik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBUeXBlRXJyb3IoIkV4cGVjdGVkIG9wdGlvbnMgdG8gYmUgZWl0aGVyIGFuIG9iamVjdCBvciBhIHN0cmluZywgYnV0IGdvdCAiK2QrIiBpbnN0ZWFkIik7fX1lbHNlIHJldHVybiBhOwoiYnVmZmVyIiE9PWEuZW5jb2RpbmcmJm9hLmFzc2VydEVuY29kaW5nKGEuZW5jb2RpbmcpO3JldHVybiBhfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBxKGEsYil9fWZ1bmN0aW9uIHIoYSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IFR5cGVFcnJvcihNLkNCKTtyZXR1cm4gYX1mdW5jdGlvbiBQKGEpe3JldHVybiBmdW5jdGlvbihiLGQpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYj9bYSgpLGJdOlthKGIpLHIoZCldfX1mdW5jdGlvbiBwKGEpe2lmKCJzdHJpbmciIT09dHlwZW9mIGEmJiFKLkJ1ZmZlci5pc0J1ZmZlcihhKSl7dHJ5e2lmKCEoYSBpbnN0YW5jZW9mIFpnLlVSTCkpdGhyb3cgbmV3IFR5cGVFcnJvcihNLlBBVEhfU1RSKTt9Y2F0Y2goY2Qpe3Rocm93IG5ldyBUeXBlRXJyb3IoTS5QQVRIX1NUUik7fWlmKCIiIT09YS5ob3N0bmFtZSl0aHJvdyBuZXcgeGIuVHlwZUVycm9yKCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9IT1NUIiwKWS5kZWZhdWx0LnBsYXRmb3JtKTthPWEucGF0aG5hbWU7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIiUiPT09YVtiXSl7dmFyIGQ9YS5jb2RlUG9pbnRBdChiKzIpfDMyO2lmKCIyIj09PWFbYisxXSYmMTAyPT09ZCl0aHJvdyBuZXcgeGIuVHlwZUVycm9yKCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIIiwibXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVycyIpO31hPWRlY29kZVVSSUNvbXBvbmVudChhKX1hPVN0cmluZyhhKTtFKGEpO3JldHVybiBhfWZ1bmN0aW9uIG4oYSxiKXtyZXR1cm4oYT1kKGEsYikuc3Vic3RyKDEpKT9hLnNwbGl0KEgpOltdfWZ1bmN0aW9uIEIoYSl7cmV0dXJuIG4ocChhKSl9ZnVuY3Rpb24geihhLGIpe3ZvaWQgMD09PWImJihiPW9hLkVOQ09ESU5HX1VURjgpO3JldHVybiBKLkJ1ZmZlci5pc0J1ZmZlcihhKT9hOmEgaW5zdGFuY2VvZiBVaW50OEFycmF5P0ouYnVmZmVyRnJvbShhKTpKLmJ1ZmZlckZyb20oU3RyaW5nKGEpLGIpfQpmdW5jdGlvbiBDKGEsYil7cmV0dXJuIGImJiJidWZmZXIiIT09Yj9hLnRvU3RyaW5nKGIpOmF9ZnVuY3Rpb24gRShhLGIpe2lmKC0xIT09KCIiK2EpLmluZGV4T2YoIlx4MDAiKSl7YT1FcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nIHdpdGhvdXQgbnVsbCBieXRlcyIpO2EuY29kZT0iRU5PRU5UIjtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGIpdGhyb3cgYTtZLmRlZmF1bHQubmV4dFRpY2soYixhKTtyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiB5KGEsYil7YT0ibnVtYmVyIj09PXR5cGVvZiBhP2E6InN0cmluZyI9PT10eXBlb2YgYT9wYXJzZUludChhLDgpOmI/eShiKTp2b2lkIDA7aWYoIm51bWJlciIhPT10eXBlb2YgYXx8aXNOYU4oYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihNLk1PREVfSU5UKTtyZXR1cm4gYX1mdW5jdGlvbiBHKGEpe2lmKGE+Pj4wIT09YSl0aHJvdyBUeXBlRXJyb3IoTS5GRCk7fWZ1bmN0aW9uIEQoYSl7aWYoInN0cmluZyI9PT10eXBlb2YgYSYmK2E9PWEpcmV0dXJuK2E7CmlmKGEgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBhLmdldFRpbWUoKS8xRTM7aWYoaXNGaW5pdGUoYSkpcmV0dXJuIDA+YT9EYXRlLm5vdygpLzFFMzphO3Rocm93IEVycm9yKCJDYW5ub3QgcGFyc2UgdGltZTogIithKTt9ZnVuY3Rpb24gdyhhKXtpZigibnVtYmVyIiE9PXR5cGVvZiBhKXRocm93IFR5cGVFcnJvcihNLlVJRCk7fWZ1bmN0aW9uIEYoYSl7aWYoIm51bWJlciIhPT10eXBlb2YgYSl0aHJvdyBUeXBlRXJyb3IoTS5HSUQpO31mdW5jdGlvbiBiYyhhKXthLmVtaXQoInN0b3AiKX1mdW5jdGlvbiB0YShhLGIsZCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdGEpKXJldHVybiBuZXcgdGEoYSxiLGQpO3RoaXMuX3ZvbD1hO2Q9eGEoe30scShkLHt9KSk7dm9pZCAwPT09ZC5oaWdoV2F0ZXJNYXJrJiYoZC5oaWdoV2F0ZXJNYXJrPTY1NTM2KTtjYS5SZWFkYWJsZS5jYWxsKHRoaXMsZCk7dGhpcy5wYXRoPXAoYik7dGhpcy5mZD12b2lkIDA9PT1kLmZkP251bGw6ZC5mZDt0aGlzLmZsYWdzPQp2b2lkIDA9PT1kLmZsYWdzPyJyIjpkLmZsYWdzO3RoaXMubW9kZT12b2lkIDA9PT1kLm1vZGU/NDM4OmQubW9kZTt0aGlzLnN0YXJ0PWQuc3RhcnQ7dGhpcy5lbmQ9ZC5lbmQ7dGhpcy5hdXRvQ2xvc2U9dm9pZCAwPT09ZC5hdXRvQ2xvc2U/ITA6ZC5hdXRvQ2xvc2U7dGhpcy5wb3M9dm9pZCAwO3RoaXMuYnl0ZXNSZWFkPTA7aWYodm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBuZXcgVHlwZUVycm9yKCcic3RhcnQiIG9wdGlvbiBtdXN0IGJlIGEgTnVtYmVyJyk7aWYodm9pZCAwPT09dGhpcy5lbmQpdGhpcy5lbmQ9SW5maW5pdHk7ZWxzZSBpZigibnVtYmVyIiE9PXR5cGVvZiB0aGlzLmVuZCl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5kIiBvcHRpb24gbXVzdCBiZSBhIE51bWJlcicpO2lmKHRoaXMuc3RhcnQ+dGhpcy5lbmQpdGhyb3cgRXJyb3IoJyJzdGFydCIgb3B0aW9uIG11c3QgYmUgPD0gImVuZCIgb3B0aW9uJyk7dGhpcy5wb3M9CnRoaXMuc3RhcnR9Im51bWJlciIhPT10eXBlb2YgdGhpcy5mZCYmdGhpcy5vcGVuKCk7dGhpcy5vbigiZW5kIixmdW5jdGlvbigpe3RoaXMuYXV0b0Nsb3NlJiZ0aGlzLmRlc3Ryb3kmJnRoaXMuZGVzdHJveSgpfSl9ZnVuY3Rpb24gYmgoKXt0aGlzLmNsb3NlKCl9ZnVuY3Rpb24gWihhLGIsZCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWikpcmV0dXJuIG5ldyBaKGEsYixkKTt0aGlzLl92b2w9YTtkPXhhKHt9LHEoZCx7fSkpO2NhLldyaXRhYmxlLmNhbGwodGhpcyxkKTt0aGlzLnBhdGg9cChiKTt0aGlzLmZkPXZvaWQgMD09PWQuZmQ/bnVsbDpkLmZkO3RoaXMuZmxhZ3M9dm9pZCAwPT09ZC5mbGFncz8idyI6ZC5mbGFnczt0aGlzLm1vZGU9dm9pZCAwPT09ZC5tb2RlPzQzODpkLm1vZGU7dGhpcy5zdGFydD1kLnN0YXJ0O3RoaXMuYXV0b0Nsb3NlPXZvaWQgMD09PWQuYXV0b0Nsb3NlPyEwOiEhZC5hdXRvQ2xvc2U7dGhpcy5wb3M9dm9pZCAwO3RoaXMuYnl0ZXNXcml0dGVuPTA7aWYodm9pZCAwIT09CnRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT09dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgbmV3IFR5cGVFcnJvcignInN0YXJ0IiBvcHRpb24gbXVzdCBiZSBhIE51bWJlcicpO2lmKDA+dGhpcy5zdGFydCl0aHJvdyBFcnJvcignInN0YXJ0IiBtdXN0IGJlID49IHplcm8nKTt0aGlzLnBvcz10aGlzLnN0YXJ0fWQuZW5jb2RpbmcmJnRoaXMuc2V0RGVmYXVsdEVuY29kaW5nKGQuZW5jb2RpbmcpOyJudW1iZXIiIT09dHlwZW9mIHRoaXMuZmQmJnRoaXMub3BlbigpO3RoaXMub25jZSgiZmluaXNoIixmdW5jdGlvbigpe3RoaXMuYXV0b0Nsb3NlJiZ0aGlzLmNsb3NlKCl9KX12YXIgaGI9TiYmTi5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGQpe2E9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsYil7YS5fX3Byb3RvX189Yn18fGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShkKSYmCihhW2RdPWJbZF0pfTtyZXR1cm4gYShiLGQpfXJldHVybiBmdW5jdGlvbihiLGQpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbnN0cnVjdG9yPWJ9YShiLGQpO2IucHJvdG90eXBlPW51bGw9PT1kP09iamVjdC5jcmVhdGUoZCk6KGUucHJvdG90eXBlPWQucHJvdG90eXBlLG5ldyBlKX19KCksZmQ9TiYmTi5fX3NwcmVhZEFycmF5c3x8ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiPTAsZD1hcmd1bWVudHMubGVuZ3RoO2I8ZDtiKyspYSs9YXJndW1lbnRzW2JdLmxlbmd0aDthPUFycmF5KGEpO3ZhciBlPTA7Zm9yKGI9MDtiPGQ7YisrKWZvcih2YXIgZj1hcmd1bWVudHNbYl0saD0wLGc9Zi5sZW5ndGg7aDxnO2grKyxlKyspYVtlXT1mW2hdO3JldHVybiBhfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHhhPVlnLGFoPUhjLGNjPXUuY29uc3RhbnRzLk9fUkRPTkxZLGliPXUuY29uc3RhbnRzLk9fV1JPTkxZLEFhPXUuY29uc3RhbnRzLk9fUkRXUiwKTz11LmNvbnN0YW50cy5PX0NSRUFULEk9dS5jb25zdGFudHMuT19FWENMLEs9dS5jb25zdGFudHMuT19UUlVOQyxMPXUuY29uc3RhbnRzLk9fQVBQRU5ELFE9dS5jb25zdGFudHMuT19TWU5DLFQ9dS5jb25zdGFudHMuT19ESVJFQ1RPUlksUz11LmNvbnN0YW50cy5GX09LLFY9dS5jb25zdGFudHMuQ09QWUZJTEVfRVhDTCxYPXUuY29uc3RhbnRzLkNPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0UsSD0iLyIsVT0id2luMzIiPT09WS5kZWZhdWx0LnBsYXRmb3JtLE09e1BBVEhfU1RSOiJwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgQnVmZmVyIixGRDoiZmQgbXVzdCBiZSBhIGZpbGUgZGVzY3JpcHRvciIsTU9ERV9JTlQ6Im1vZGUgbXVzdCBiZSBhbiBpbnQiLENCOiJjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iLFVJRDoidWlkIG11c3QgYmUgYW4gdW5zaWduZWQgaW50IixHSUQ6ImdpZCBtdXN0IGJlIGFuIHVuc2lnbmVkIGludCIsTEVOOiJsZW4gbXVzdCBiZSBhbiBpbnRlZ2VyIixBVElNRToiYXRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyIiwKTVRJTUU6Im10aW1lIG11c3QgYmUgYW4gaW50ZWdlciIsUFJFRklYOiJmaWxlbmFtZSBwcmVmaXggaXMgcmVxdWlyZWQiLEJVRkZFUjoiYnVmZmVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyIG9yIFN0YXRpY0J1ZmZlciIsT0ZGU0VUOiJvZmZzZXQgbXVzdCBiZSBhbiBpbnRlZ2VyIixMRU5HVEg6Imxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIiLFBPU0lUSU9OOiJwb3NpdGlvbiBtdXN0IGJlIGFuIGludGVnZXIifSxSOyhmdW5jdGlvbihhKXthW2Eucj1jY109InIiO2FbYVsicisiXT1BYV09InIrIjthW2EucnM9Y2N8UV09InJzIjthW2Euc3I9YS5yc109InNyIjthW2FbInJzKyJdPUFhfFFdPSJycysiO2FbYVsic3IrIl09YVsicnMrIl1dPSJzcisiO2FbYS53PWlifE98S109InciO2FbYS53eD1pYnxPfEt8SV09Ind4IjthW2EueHc9YS53eF09Inh3IjthW2FbIncrIl09QWF8T3xLXT0idysiO2FbYVsid3grIl09QWF8T3xLfEldPSJ3eCsiO2FbYVsieHcrIl09YVsid3grIl1dPQoieHcrIjthW2EuYT1pYnxMfE9dPSJhIjthW2EuYXg9aWJ8THxPfEldPSJheCI7YVthLnhhPWEuYXhdPSJ4YSI7YVthWyJhKyJdPUFhfEx8T109ImErIjthW2FbImF4KyJdPUFhfEx8T3xJXT0iYXgrIjthW2FbInhhKyJdPWFbImF4KyJdXT0ieGErIn0pKFI9Yi5GTEFHU3x8KGIuRkxBR1M9e30pKTtiLmZsYWdzVG9OdW1iZXI9bDthPXtlbmNvZGluZzoidXRmOCJ9O3ZhciBXPW0oYSksYWE9UChXKSxiYT1tKHtmbGFnOiJyIn0pLGRhPXtlbmNvZGluZzoidXRmOCIsbW9kZTo0MzgsZmxhZzpSW1Iud119LGVhPW0oZGEpLGZhPXtlbmNvZGluZzoidXRmOCIsbW9kZTo0MzgsZmxhZzpSW1IuYV19LGhhPW0oZmEpLG5hPVAoaGEpLGphPW0oYSkscGE9UChqYSksa2E9e21vZGU6NTExLHJlY3Vyc2l2ZTohMX0sbGE9e3JlY3Vyc2l2ZTohMX0sbWE9bSh7ZW5jb2Rpbmc6InV0ZjgiLHdpdGhGaWxlVHlwZXM6ITF9KSxzYT1QKG1hKSx1YT17YmlnaW50OiExfTtiLnBhdGhUb0ZpbGVuYW1lPXA7aWYoVSl7dmFyIHZhPQpkLHdhPXBmLnVuaXhpZnk7ZD1mdW5jdGlvbihhLGIpe3JldHVybiB3YSh2YShhLGIpKX19Yi5maWxlbmFtZVRvU3RlcHM9bjtiLnBhdGhUb1N0ZXBzPUI7Yi5kYXRhVG9TdHI9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1vYS5FTkNPRElOR19VVEY4KTtyZXR1cm4gSi5CdWZmZXIuaXNCdWZmZXIoYSk/YS50b1N0cmluZyhiKTphIGluc3RhbmNlb2YgVWludDhBcnJheT9KLmJ1ZmZlckZyb20oYSkudG9TdHJpbmcoYik6U3RyaW5nKGEpfTtiLmRhdGFUb0J1ZmZlcj16O2IuYnVmZmVyVG9FbmNvZGluZz1DO2IudG9Vbml4VGltZXN0YW1wPUQ7YT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7dm9pZCAwPT09YSYmKGE9e30pO3RoaXMuaW5vPTA7dGhpcy5pbm9kZXM9e307dGhpcy5yZWxlYXNlZElub3M9W107dGhpcy5mZHM9e307dGhpcy5yZWxlYXNlZEZkcz1bXTt0aGlzLm1heEZpbGVzPTFFNDt0aGlzLm9wZW5GaWxlcz0wO3RoaXMucHJvbWlzZXNBcGk9b2YuZGVmYXVsdCh0aGlzKTsKdGhpcy5zdGF0V2F0Y2hlcnM9e307dGhpcy5wcm9wcz14YSh7Tm9kZTp5Yi5Ob2RlLExpbms6eWIuTGluayxGaWxlOnliLkZpbGV9LGEpO2E9dGhpcy5jcmVhdGVMaW5rKCk7YS5zZXROb2RlKHRoaXMuY3JlYXRlTm9kZSghMCkpO3ZhciBiPXRoaXM7dGhpcy5TdGF0V2F0Y2hlcj1mdW5jdGlvbihhKXtmdW5jdGlvbiBkKCl7cmV0dXJuIGEuY2FsbCh0aGlzLGIpfHx0aGlzfWhiKGQsYSk7cmV0dXJuIGR9KHFhKTt0aGlzLlJlYWRTdHJlYW09ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylkW2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gYS5hcHBseSh0aGlzLGZkKFtiXSxkKSl8fHRoaXN9aGIoZCxhKTtyZXR1cm4gZH0odGEpO3RoaXMuV3JpdGVTdHJlYW09ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylkW2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gYS5hcHBseSh0aGlzLApmZChbYl0sZCkpfHx0aGlzfWhiKGQsYSk7cmV0dXJuIGR9KFopO3RoaXMuRlNXYXRjaGVyPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGQoKXtyZXR1cm4gYS5jYWxsKHRoaXMsYil8fHRoaXN9aGIoZCxhKTtyZXR1cm4gZH0ocmEpO3RoaXMucm9vdD1hfWEuZnJvbUpTT049ZnVuY3Rpb24oYixkKXt2YXIgZT1uZXcgYTtlLmZyb21KU09OKGIsZCk7cmV0dXJuIGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwicHJvbWlzZXMiLHtnZXQ6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5wcm9taXNlc0FwaSl0aHJvdyBFcnJvcigiUHJvbWlzZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIik7cmV0dXJuIHRoaXMucHJvbWlzZXNBcGl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7YS5wcm90b3R5cGUuY3JlYXRlTGluaz1mdW5jdGlvbihhLGIsZCxlKXt2b2lkIDA9PT1kJiYoZD0hMSk7aWYoIWEpcmV0dXJuIG5ldyB0aGlzLnByb3BzLkxpbmsodGhpcywKbnVsbCwiIik7aWYoIWIpdGhyb3cgRXJyb3IoImNyZWF0ZUxpbms6IG5hbWUgY2Fubm90IGJlIGVtcHR5Iik7cmV0dXJuIGEuY3JlYXRlQ2hpbGQoYix0aGlzLmNyZWF0ZU5vZGUoZCxlKSl9O2EucHJvdG90eXBlLmRlbGV0ZUxpbms9ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnQ7cmV0dXJuIGI/KGIuZGVsZXRlQ2hpbGQoYSksITApOiExfTthLnByb3RvdHlwZS5uZXdJbm9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlbGVhc2VkSW5vcy5wb3AoKTtyZXR1cm4gYT9hOnRoaXMuaW5vPSh0aGlzLmlubysxKSU0Mjk0OTY3Mjk1fTthLnByb3RvdHlwZS5uZXdGZE51bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMucmVsZWFzZWRGZHMucG9wKCk7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgYj9iOmEuZmQtLX07YS5wcm90b3R5cGUuY3JlYXRlTm9kZT1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPSExKTtiPW5ldyB0aGlzLnByb3BzLk5vZGUodGhpcy5uZXdJbm9OdW1iZXIoKSwKYik7YSYmYi5zZXRJc0RpcmVjdG9yeSgpO3JldHVybiB0aGlzLmlub2Rlc1tiLmlub109Yn07YS5wcm90b3R5cGUuZ2V0Tm9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbm9kZXNbYV19O2EucHJvdG90eXBlLmRlbGV0ZU5vZGU9ZnVuY3Rpb24oYSl7YS5kZWwoKTtkZWxldGUgdGhpcy5pbm9kZXNbYS5pbm9dO3RoaXMucmVsZWFzZWRJbm9zLnB1c2goYS5pbm8pfTthLnByb3RvdHlwZS5nZW5SbmRTdHI9ZnVuY3Rpb24oKXt2YXIgYT0oTWF0aC5yYW5kb20oKSsxKS50b1N0cmluZygzNikuc3Vic3RyKDIsNik7cmV0dXJuIDY9PT1hLmxlbmd0aD9hOnRoaXMuZ2VuUm5kU3RyKCl9O2EucHJvdG90eXBlLmdldExpbms9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm9vdC53YWxrKGEpfTthLnByb3RvdHlwZS5nZXRMaW5rT3JUaHJvdz1mdW5jdGlvbihhLGIpe3ZhciBkPW4oYSk7ZD10aGlzLmdldExpbmsoZCk7aWYoIWQpdGhyb3cgaygiRU5PRU5UIixiLGEpO3JldHVybiBkfTthLnByb3RvdHlwZS5nZXRSZXNvbHZlZExpbms9CmZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PT10eXBlb2YgYT9uKGEpOmE7Zm9yKHZhciBiPXRoaXMucm9vdCxkPTA7ZDxhLmxlbmd0aDspe2I9Yi5nZXRDaGlsZChhW2RdKTtpZighYilyZXR1cm4gbnVsbDt2YXIgZT1iLmdldE5vZGUoKTtlLmlzU3ltbGluaygpPyhhPWUuc3ltbGluay5jb25jYXQoYS5zbGljZShkKzEpKSxiPXRoaXMucm9vdCxkPTApOmQrK31yZXR1cm4gYn07YS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRMaW5rT3JUaHJvdz1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZ2V0UmVzb2x2ZWRMaW5rKGEpO2lmKCFkKXRocm93IGsoIkVOT0VOVCIsYixhKTtyZXR1cm4gZH07YS5wcm90b3R5cGUucmVzb2x2ZVN5bWxpbmtzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdldFJlc29sdmVkTGluayhhLnN0ZXBzLnNsaWNlKDEpKX07YS5wcm90b3R5cGUuZ2V0TGlua0FzRGlyT3JUaHJvdz1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZ2V0TGlua09yVGhyb3coYSxiKTtpZighZC5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFTk9URElSIiwKYixhKTtyZXR1cm4gZH07YS5wcm90b3R5cGUuZ2V0TGlua1BhcmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb290LndhbGsoYSxhLmxlbmd0aC0xKX07YS5wcm90b3R5cGUuZ2V0TGlua1BhcmVudEFzRGlyT3JUaHJvdz1mdW5jdGlvbihhLGIpe2E9YSBpbnN0YW5jZW9mIEFycmF5P2E6bihhKTt2YXIgZD10aGlzLmdldExpbmtQYXJlbnQoYSk7aWYoIWQpdGhyb3cgaygiRU5PRU5UIixiLEgrYS5qb2luKEgpKTtpZighZC5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFTk9URElSIixiLEgrYS5qb2luKEgpKTtyZXR1cm4gZH07YS5wcm90b3R5cGUuZ2V0RmlsZUJ5RmQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmRzW1N0cmluZyhhKV19O2EucHJvdG90eXBlLmdldEZpbGVCeUZkT3JUaHJvdz1mdW5jdGlvbihhLGIpe2lmKGE+Pj4wIT09YSl0aHJvdyBUeXBlRXJyb3IoTS5GRCk7YT10aGlzLmdldEZpbGVCeUZkKGEpO2lmKCFhKXRocm93IGsoIkVCQURGIixiKTtyZXR1cm4gYX07CmEucHJvdG90eXBlLmdldE5vZGVCeUlkT3JDcmVhdGU9ZnVuY3Rpb24oYSxiLGQpe2lmKCJudW1iZXIiPT09dHlwZW9mIGEpe2E9dGhpcy5nZXRGaWxlQnlGZChhKTtpZighYSl0aHJvdyBFcnJvcigiRmlsZSBudG8gZm91bmQiKTtyZXR1cm4gYS5ub2RlfXZhciBlPUIoYSksZj10aGlzLmdldExpbmsoZSk7aWYoZilyZXR1cm4gZi5nZXROb2RlKCk7aWYoYiZPJiYoYj10aGlzLmdldExpbmtQYXJlbnQoZSkpKXJldHVybiBmPXRoaXMuY3JlYXRlTGluayhiLGVbZS5sZW5ndGgtMV0sITEsZCksZi5nZXROb2RlKCk7dGhyb3cgaygiRU5PRU5UIiwiZ2V0Tm9kZUJ5SWRPckNyZWF0ZSIscChhKSk7fTthLnByb3RvdHlwZS53cmFwQXN5bmM9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPXRoaXM7cihkKTtnYi5kZWZhdWx0KGZ1bmN0aW9uKCl7dHJ5e2QobnVsbCxhLmFwcGx5KGUsYikpfWNhdGNoKEFiKXtkKEFiKX19KX07YS5wcm90b3R5cGUuX3RvSlNPTj1mdW5jdGlvbihhLGIsZCl7dmFyIGU7dm9pZCAwPT09CmEmJihhPXRoaXMucm9vdCk7dm9pZCAwPT09YiYmKGI9e30pO3ZhciBmPSEwLHY9YS5jaGlsZHJlbjthLmdldE5vZGUoKS5pc0ZpbGUoKSYmKHY9KGU9e30sZVthLmdldE5hbWUoKV09YS5wYXJlbnQuZ2V0Q2hpbGQoYS5nZXROYW1lKCkpLGUpLGE9YS5wYXJlbnQpO2Zvcih2YXIgaCBpbiB2KXtmPSExO3Y9YS5nZXRDaGlsZChoKTtpZighdil0aHJvdyBFcnJvcigiX3RvSlNPTjogdW5leHBlY3RlZCB1bmRlZmluZWQiKTtlPXYuZ2V0Tm9kZSgpO2UuaXNGaWxlKCk/KHY9di5nZXRQYXRoKCksZCYmKHY9UGIoZCx2KSksYlt2XT1lLmdldFN0cmluZygpKTplLmlzRGlyZWN0b3J5KCkmJnRoaXMuX3RvSlNPTih2LGIsZCl9YT1hLmdldFBhdGgoKTtkJiYoYT1QYihkLGEpKTthJiZmJiYoYlthXT1udWxsKTtyZXR1cm4gYn07YS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEsYixkKXt2b2lkIDA9PT1iJiYoYj17fSk7dm9pZCAwPT09ZCYmKGQ9ITEpO3ZhciBlPVtdO2lmKGEpe2EgaW5zdGFuY2VvZgpBcnJheXx8KGE9W2FdKTtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIHY9cChhW2ZdKTsodj10aGlzLmdldFJlc29sdmVkTGluayh2KSkmJmUucHVzaCh2KX19ZWxzZSBlLnB1c2godGhpcy5yb290KTtpZighZS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGY9MDtmPGUubGVuZ3RoO2YrKyl2PWVbZl0sdGhpcy5fdG9KU09OKHYsYixkP3YuZ2V0UGF0aCgpOiIiKTtyZXR1cm4gYn07YS5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1ZLmRlZmF1bHQuY3dkKCkpO2Zvcih2YXIgZSBpbiBhKXt2YXIgZj1hW2VdO2lmKCJzdHJpbmciPT09dHlwZW9mIGYpe2U9ZChlLGIpO3ZhciB2PW4oZSk7MTx2Lmxlbmd0aCYmKHY9SCt2LnNsaWNlKDAsdi5sZW5ndGgtMSkuam9pbihIKSx0aGlzLm1rZGlycEJhc2Uodiw1MTEpKTt0aGlzLndyaXRlRmlsZVN5bmMoZSxmKX1lbHNlIHRoaXMubWtkaXJwQmFzZShlLDUxMSl9fTthLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuaW5vPQowO3RoaXMuaW5vZGVzPXt9O3RoaXMucmVsZWFzZWRJbm9zPVtdO3RoaXMuZmRzPXt9O3RoaXMucmVsZWFzZWRGZHM9W107dGhpcy5vcGVuRmlsZXM9MDt0aGlzLnJvb3Q9dGhpcy5jcmVhdGVMaW5rKCk7dGhpcy5yb290LnNldE5vZGUodGhpcy5jcmVhdGVOb2RlKCEwKSl9O2EucHJvdG90eXBlLm1vdW50U3luYz1mdW5jdGlvbihhLGIpe3RoaXMuZnJvbUpTT04oYixhKX07YS5wcm90b3R5cGUub3Blbkxpbms9ZnVuY3Rpb24oYSxiLGQpe3ZvaWQgMD09PWQmJihkPSEwKTtpZih0aGlzLm9wZW5GaWxlcz49dGhpcy5tYXhGaWxlcyl0aHJvdyBrKCJFTUZJTEUiLCJvcGVuIixhLmdldFBhdGgoKSk7dmFyIGU9YTtkJiYoZT10aGlzLnJlc29sdmVTeW1saW5rcyhhKSk7aWYoIWUpdGhyb3cgaygiRU5PRU5UIiwib3BlbiIsYS5nZXRQYXRoKCkpO2Q9ZS5nZXROb2RlKCk7aWYoZC5pc0RpcmVjdG9yeSgpKXtpZigoYiYoY2N8QWF8aWIpKSE9PWNjKXRocm93IGsoIkVJU0RJUiIsIm9wZW4iLGEuZ2V0UGF0aCgpKTsKfWVsc2UgaWYoYiZUKXRocm93IGsoIkVOT1RESVIiLCJvcGVuIixhLmdldFBhdGgoKSk7aWYoIShiJmlifHxkLmNhblJlYWQoKSkpdGhyb3cgaygiRUFDQ0VTIiwib3BlbiIsYS5nZXRQYXRoKCkpO2E9bmV3IHRoaXMucHJvcHMuRmlsZShhLGQsYix0aGlzLm5ld0ZkTnVtYmVyKCkpO3RoaXMuZmRzW2EuZmRdPWE7dGhpcy5vcGVuRmlsZXMrKztiJksmJmEudHJ1bmNhdGUoKTtyZXR1cm4gYX07YS5wcm90b3R5cGUub3BlbkZpbGU9ZnVuY3Rpb24oYSxiLGQsZSl7dm9pZCAwPT09ZSYmKGU9ITApO3ZhciBmPW4oYSksdj1lP3RoaXMuZ2V0UmVzb2x2ZWRMaW5rKGYpOnRoaXMuZ2V0TGluayhmKTtpZighdiYmYiZPKXt2YXIgaD10aGlzLmdldFJlc29sdmVkTGluayhmLnNsaWNlKDAsZi5sZW5ndGgtMSkpO2lmKCFoKXRocm93IGsoIkVOT0VOVCIsIm9wZW4iLEgrZi5qb2luKEgpKTtiJk8mJiJudW1iZXIiPT09dHlwZW9mIGQmJih2PXRoaXMuY3JlYXRlTGluayhoLGZbZi5sZW5ndGgtMV0sCiExLGQpKX1pZih2KXJldHVybiB0aGlzLm9wZW5MaW5rKHYsYixlKTt0aHJvdyBrKCJFTk9FTlQiLCJvcGVuIixhKTt9O2EucHJvdG90eXBlLm9wZW5CYXNlPWZ1bmN0aW9uKGEsYixkLGUpe3ZvaWQgMD09PWUmJihlPSEwKTtiPXRoaXMub3BlbkZpbGUoYSxiLGQsZSk7aWYoIWIpdGhyb3cgaygiRU5PRU5UIiwib3BlbiIsYSk7cmV0dXJuIGIuZmR9O2EucHJvdG90eXBlLm9wZW5TeW5jPWZ1bmN0aW9uKGEsYixkKXt2b2lkIDA9PT1kJiYoZD00MzgpO2Q9eShkKTthPXAoYSk7Yj1sKGIpO3JldHVybiB0aGlzLm9wZW5CYXNlKGEsYixkKX07YS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbihhLGIsZCxlKXt2YXIgZj1kOyJmdW5jdGlvbiI9PT10eXBlb2YgZCYmKGY9NDM4LGU9ZCk7ZD15KGZ8fDQzOCk7YT1wKGEpO2I9bChiKTt0aGlzLndyYXBBc3luYyh0aGlzLm9wZW5CYXNlLFthLGIsZF0sZSl9O2EucHJvdG90eXBlLmNsb3NlRmlsZT1mdW5jdGlvbihhKXt0aGlzLmZkc1thLmZkXSYmKHRoaXMub3BlbkZpbGVzLS0sCmRlbGV0ZSB0aGlzLmZkc1thLmZkXSx0aGlzLnJlbGVhc2VkRmRzLnB1c2goYS5mZCkpfTthLnByb3RvdHlwZS5jbG9zZVN5bmM9ZnVuY3Rpb24oYSl7RyhhKTthPXRoaXMuZ2V0RmlsZUJ5RmRPclRocm93KGEsImNsb3NlIik7dGhpcy5jbG9zZUZpbGUoYSl9O2EucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGEsYil7RyhhKTt0aGlzLndyYXBBc3luYyh0aGlzLmNsb3NlU3luYyxbYV0sYil9O2EucHJvdG90eXBlLm9wZW5GaWxlT3JHZXRCeUlkPWZ1bmN0aW9uKGEsYixkKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXthPXRoaXMuZmRzW2FdO2lmKCFhKXRocm93IGsoIkVOT0VOVCIpO3JldHVybiBhfXJldHVybiB0aGlzLm9wZW5GaWxlKHAoYSksYixkKX07YS5wcm90b3R5cGUucmVhZEJhc2U9ZnVuY3Rpb24oYSxiLGQsZSxmKXtyZXR1cm4gdGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSkucmVhZChiLE51bWJlcihkKSxOdW1iZXIoZSksZil9O2EucHJvdG90eXBlLnJlYWRTeW5jPWZ1bmN0aW9uKGEsCmIsZCxlLGYpe0coYSk7cmV0dXJuIHRoaXMucmVhZEJhc2UoYSxiLGQsZSxmKX07YS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihhLGIsZCxlLGYsaCl7dmFyIGc9dGhpcztyKGgpO2lmKDA9PT1lKXJldHVybiBZLmRlZmF1bHQubmV4dFRpY2soZnVuY3Rpb24oKXtoJiZoKG51bGwsMCxiKX0pO2diLmRlZmF1bHQoZnVuY3Rpb24oKXt0cnl7dmFyIHY9Zy5yZWFkQmFzZShhLGIsZCxlLGYpO2gobnVsbCx2LGIpfWNhdGNoKGNoKXtoKGNoKX19KX07YS5wcm90b3R5cGUucmVhZEZpbGVCYXNlPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT0ibnVtYmVyIj09PXR5cGVvZiBhJiZhPj4+MD09PWE7aWYoIWUpe3ZhciBmPXAoYSk7Zj1uKGYpO2lmKChmPXRoaXMuZ2V0UmVzb2x2ZWRMaW5rKGYpKSYmZi5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFSVNESVIiLCJvcGVuIixmLmdldFBhdGgoKSk7YT10aGlzLm9wZW5TeW5jKGEsYil9dHJ5e3ZhciBoPUModGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSkuZ2V0QnVmZmVyKCksCmQpfWZpbmFsbHl7ZXx8dGhpcy5jbG9zZVN5bmMoYSl9cmV0dXJuIGh9O2EucHJvdG90eXBlLnJlYWRGaWxlU3luYz1mdW5jdGlvbihhLGIpe2I9YmEoYik7dmFyIGQ9bChiLmZsYWcpO3JldHVybiB0aGlzLnJlYWRGaWxlQmFzZShhLGQsYi5lbmNvZGluZyl9O2EucHJvdG90eXBlLnJlYWRGaWxlPWZ1bmN0aW9uKGEsYixkKXtkPVAoYmEpKGIsZCk7Yj1kWzBdO2Q9ZFsxXTt2YXIgZT1sKGIuZmxhZyk7dGhpcy53cmFwQXN5bmModGhpcy5yZWFkRmlsZUJhc2UsW2EsZSxiLmVuY29kaW5nXSxkKX07YS5wcm90b3R5cGUud3JpdGVCYXNlPWZ1bmN0aW9uKGEsYixkLGUsZil7cmV0dXJuIHRoaXMuZ2V0RmlsZUJ5RmRPclRocm93KGEsIndyaXRlIikud3JpdGUoYixkLGUsZil9O2EucHJvdG90eXBlLndyaXRlU3luYz1mdW5jdGlvbihhLGIsZCxlLGYpe0coYSk7dmFyIGg9InN0cmluZyIhPT10eXBlb2YgYjtpZihoKXt2YXIgZz0oZHx8MCl8MCx2PWU7ZD1mfWVsc2UgdmFyIHpiPWU7Yj16KGIsCnpiKTtoPyJ1bmRlZmluZWQiPT09dHlwZW9mIHYmJih2PWIubGVuZ3RoKTooZz0wLHY9Yi5sZW5ndGgpO3JldHVybiB0aGlzLndyaXRlQmFzZShhLGIsZyx2LGQpfTthLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhLGIsZCxlLGYsaCl7dmFyIGc9dGhpcztHKGEpO3ZhciB2PXR5cGVvZiBiLHpiPXR5cGVvZiBkLGNkPXR5cGVvZiBlLGs9dHlwZW9mIGY7aWYoInN0cmluZyIhPT12KWlmKCJmdW5jdGlvbiI9PT16Yil2YXIgdz1kO2Vsc2UgaWYoImZ1bmN0aW9uIj09PWNkKXt2YXIgRj1kfDA7dz1lfWVsc2UgaWYoImZ1bmN0aW9uIj09PWspe0Y9ZHwwO3ZhciBsPWU7dz1mfWVsc2V7Rj1kfDA7bD1lO3ZhciBkZD1mO3c9aH1lbHNlIGlmKCJmdW5jdGlvbiI9PT16Yil3PWQ7ZWxzZSBpZigiZnVuY3Rpb24iPT09Y2QpZGQ9ZCx3PWU7ZWxzZSBpZigiZnVuY3Rpb24iPT09ayl7ZGQ9ZDt2YXIgcT1lO3c9Zn12YXIgcD16KGIscSk7InN0cmluZyIhPT12PyJ1bmRlZmluZWQiPT09dHlwZW9mIGwmJgoobD1wLmxlbmd0aCk6KEY9MCxsPXAubGVuZ3RoKTt2YXIgbT1yKHcpO2diLmRlZmF1bHQoZnVuY3Rpb24oKXt0cnl7dmFyIGQ9Zy53cml0ZUJhc2UoYSxwLEYsbCxkZCk7InN0cmluZyIhPT12P20obnVsbCxkLHApOm0obnVsbCxkLGIpfWNhdGNoKGRoKXttKGRoKX19KX07YS5wcm90b3R5cGUud3JpdGVGaWxlQmFzZT1mdW5jdGlvbihhLGIsZCxlKXt2YXIgZj0ibnVtYmVyIj09PXR5cGVvZiBhO2E9Zj9hOnRoaXMub3BlbkJhc2UocChhKSxkLGUpO2U9MDt2YXIgaD1iLmxlbmd0aDtkPWQmTD92b2lkIDA6MDt0cnl7Zm9yKDswPGg7KXt2YXIgZz10aGlzLndyaXRlU3luYyhhLGIsZSxoLGQpO2UrPWc7aC09Zzt2b2lkIDAhPT1kJiYoZCs9Zyl9fWZpbmFsbHl7Znx8dGhpcy5jbG9zZVN5bmMoYSl9fTthLnByb3RvdHlwZS53cml0ZUZpbGVTeW5jPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT1lYShkKTtkPWwoZS5mbGFnKTt2YXIgZj15KGUubW9kZSk7Yj16KGIsZS5lbmNvZGluZyk7dGhpcy53cml0ZUZpbGVCYXNlKGEsCmIsZCxmKX07YS5wcm90b3R5cGUud3JpdGVGaWxlPWZ1bmN0aW9uKGEsYixkLGUpe3ZhciBmPWQ7ImZ1bmN0aW9uIj09PXR5cGVvZiBkJiYoZj1kYSxlPWQpO2Q9cihlKTt2YXIgaD1lYShmKTtmPWwoaC5mbGFnKTtlPXkoaC5tb2RlKTtiPXooYixoLmVuY29kaW5nKTt0aGlzLndyYXBBc3luYyh0aGlzLndyaXRlRmlsZUJhc2UsW2EsYixmLGVdLGQpfTthLnByb3RvdHlwZS5saW5rQmFzZT1mdW5jdGlvbihhLGIpe3ZhciBkPW4oYSksZT10aGlzLmdldExpbmsoZCk7aWYoIWUpdGhyb3cgaygiRU5PRU5UIiwibGluayIsYSxiKTt2YXIgZj1uKGIpO2Q9dGhpcy5nZXRMaW5rUGFyZW50KGYpO2lmKCFkKXRocm93IGsoIkVOT0VOVCIsImxpbmsiLGEsYik7Zj1mW2YubGVuZ3RoLTFdO2lmKGQuZ2V0Q2hpbGQoZikpdGhyb3cgaygiRUVYSVNUIiwibGluayIsYSxiKTthPWUuZ2V0Tm9kZSgpO2EubmxpbmsrKztkLmNyZWF0ZUNoaWxkKGYsYSl9O2EucHJvdG90eXBlLmNvcHlGaWxlQmFzZT1mdW5jdGlvbihhLApiLGQpe3ZhciBlPXRoaXMucmVhZEZpbGVTeW5jKGEpO2lmKGQmViYmdGhpcy5leGlzdHNTeW5jKGIpKXRocm93IGsoIkVFWElTVCIsImNvcHlGaWxlIixhLGIpO2lmKGQmWCl0aHJvdyBrKCJFTk9TWVMiLCJjb3B5RmlsZSIsYSxiKTt0aGlzLndyaXRlRmlsZUJhc2UoYixlLFIudyw0MzgpfTthLnByb3RvdHlwZS5jb3B5RmlsZVN5bmM9ZnVuY3Rpb24oYSxiLGQpe2E9cChhKTtiPXAoYik7cmV0dXJuIHRoaXMuY29weUZpbGVCYXNlKGEsYiwoZHx8MCl8MCl9O2EucHJvdG90eXBlLmNvcHlGaWxlPWZ1bmN0aW9uKGEsYixkLGUpe2E9cChhKTtiPXAoYik7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBkKXZhciBmPTA7ZWxzZSBmPWQsZD1lO3IoZCk7dGhpcy53cmFwQXN5bmModGhpcy5jb3B5RmlsZUJhc2UsW2EsYixmXSxkKX07YS5wcm90b3R5cGUubGlua1N5bmM9ZnVuY3Rpb24oYSxiKXthPXAoYSk7Yj1wKGIpO3RoaXMubGlua0Jhc2UoYSxiKX07YS5wcm90b3R5cGUubGluaz1mdW5jdGlvbihhLApiLGQpe2E9cChhKTtiPXAoYik7dGhpcy53cmFwQXN5bmModGhpcy5saW5rQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUudW5saW5rQmFzZT1mdW5jdGlvbihhKXt2YXIgYj1uKGEpO2I9dGhpcy5nZXRMaW5rKGIpO2lmKCFiKXRocm93IGsoIkVOT0VOVCIsInVubGluayIsYSk7aWYoYi5sZW5ndGgpdGhyb3cgRXJyb3IoIkRpciBub3QgZW1wdHkuLi4iKTt0aGlzLmRlbGV0ZUxpbmsoYik7YT1iLmdldE5vZGUoKTthLm5saW5rLS07MD49YS5ubGluayYmdGhpcy5kZWxldGVOb2RlKGEpfTthLnByb3RvdHlwZS51bmxpbmtTeW5jPWZ1bmN0aW9uKGEpe2E9cChhKTt0aGlzLnVubGlua0Jhc2UoYSl9O2EucHJvdG90eXBlLnVubGluaz1mdW5jdGlvbihhLGIpe2E9cChhKTt0aGlzLndyYXBBc3luYyh0aGlzLnVubGlua0Jhc2UsW2FdLGIpfTthLnByb3RvdHlwZS5zeW1saW5rQmFzZT1mdW5jdGlvbihhLGIpe3ZhciBkPW4oYiksZT10aGlzLmdldExpbmtQYXJlbnQoZCk7aWYoIWUpdGhyb3cgaygiRU5PRU5UIiwKInN5bWxpbmsiLGEsYik7ZD1kW2QubGVuZ3RoLTFdO2lmKGUuZ2V0Q2hpbGQoZCkpdGhyb3cgaygiRUVYSVNUIiwic3ltbGluayIsYSxiKTtiPWUuY3JlYXRlQ2hpbGQoZCk7Yi5nZXROb2RlKCkubWFrZVN5bWxpbmsobihhKSk7cmV0dXJuIGJ9O2EucHJvdG90eXBlLnN5bWxpbmtTeW5jPWZ1bmN0aW9uKGEsYil7YT1wKGEpO2I9cChiKTt0aGlzLnN5bWxpbmtCYXNlKGEsYil9O2EucHJvdG90eXBlLnN5bWxpbms9ZnVuY3Rpb24oYSxiLGQsZSl7ZD1yKCJmdW5jdGlvbiI9PT10eXBlb2YgZD9kOmUpO2E9cChhKTtiPXAoYik7dGhpcy53cmFwQXN5bmModGhpcy5zeW1saW5rQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUucmVhbHBhdGhCYXNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9bihhKTtkPXRoaXMuZ2V0UmVzb2x2ZWRMaW5rKGQpO2lmKCFkKXRocm93IGsoIkVOT0VOVCIsInJlYWxwYXRoIixhKTtyZXR1cm4gb2Euc3RyVG9FbmNvZGluZyhkLmdldFBhdGgoKSxiKX07YS5wcm90b3R5cGUucmVhbHBhdGhTeW5jPQpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJlYWxwYXRoQmFzZShwKGEpLGphKGIpLmVuY29kaW5nKX07YS5wcm90b3R5cGUucmVhbHBhdGg9ZnVuY3Rpb24oYSxiLGQpe2Q9cGEoYixkKTtiPWRbMF07ZD1kWzFdO2E9cChhKTt0aGlzLndyYXBBc3luYyh0aGlzLnJlYWxwYXRoQmFzZSxbYSxiLmVuY29kaW5nXSxkKX07YS5wcm90b3R5cGUubHN0YXRCYXNlPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9ITEpO3ZhciBkPXRoaXMuZ2V0TGluayhuKGEpKTtpZighZCl0aHJvdyBrKCJFTk9FTlQiLCJsc3RhdCIsYSk7cmV0dXJuIGViLmRlZmF1bHQuYnVpbGQoZC5nZXROb2RlKCksYil9O2EucHJvdG90eXBlLmxzdGF0U3luYz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmxzdGF0QmFzZShwKGEpLGYoYikuYmlnaW50KX07YS5wcm90b3R5cGUubHN0YXQ9ZnVuY3Rpb24oYSxiLGQpe2Q9ZShiLGQpO2I9ZFswXTtkPWRbMV07dGhpcy53cmFwQXN5bmModGhpcy5sc3RhdEJhc2UsW3AoYSksCmIuYmlnaW50XSxkKX07YS5wcm90b3R5cGUuc3RhdEJhc2U9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0hMSk7dmFyIGQ9dGhpcy5nZXRSZXNvbHZlZExpbmsobihhKSk7aWYoIWQpdGhyb3cgaygiRU5PRU5UIiwic3RhdCIsYSk7cmV0dXJuIGViLmRlZmF1bHQuYnVpbGQoZC5nZXROb2RlKCksYil9O2EucHJvdG90eXBlLnN0YXRTeW5jPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuc3RhdEJhc2UocChhKSxmKGIpLmJpZ2ludCl9O2EucHJvdG90eXBlLnN0YXQ9ZnVuY3Rpb24oYSxiLGQpe2Q9ZShiLGQpO2I9ZFswXTtkPWRbMV07dGhpcy53cmFwQXN5bmModGhpcy5zdGF0QmFzZSxbcChhKSxiLmJpZ2ludF0sZCl9O2EucHJvdG90eXBlLmZzdGF0QmFzZT1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPSExKTthPXRoaXMuZ2V0RmlsZUJ5RmQoYSk7aWYoIWEpdGhyb3cgaygiRUJBREYiLCJmc3RhdCIpO3JldHVybiBlYi5kZWZhdWx0LmJ1aWxkKGEubm9kZSxiKX07YS5wcm90b3R5cGUuZnN0YXRTeW5jPQpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmZzdGF0QmFzZShhLGYoYikuYmlnaW50KX07YS5wcm90b3R5cGUuZnN0YXQ9ZnVuY3Rpb24oYSxiLGQpe2I9ZShiLGQpO3RoaXMud3JhcEFzeW5jKHRoaXMuZnN0YXRCYXNlLFthLGJbMF0uYmlnaW50XSxiWzFdKX07YS5wcm90b3R5cGUucmVuYW1lQmFzZT1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZ2V0TGluayhuKGEpKTtpZighZCl0aHJvdyBrKCJFTk9FTlQiLCJyZW5hbWUiLGEsYik7dmFyIGU9bihiKSxmPXRoaXMuZ2V0TGlua1BhcmVudChlKTtpZighZil0aHJvdyBrKCJFTk9FTlQiLCJyZW5hbWUiLGEsYik7KGE9ZC5wYXJlbnQpJiZhLmRlbGV0ZUNoaWxkKGQpO2Quc3RlcHM9ZmQoZi5zdGVwcyxbZVtlLmxlbmd0aC0xXV0pO2Yuc2V0Q2hpbGQoZC5nZXROYW1lKCksZCl9O2EucHJvdG90eXBlLnJlbmFtZVN5bmM9ZnVuY3Rpb24oYSxiKXthPXAoYSk7Yj1wKGIpO3RoaXMucmVuYW1lQmFzZShhLGIpfTthLnByb3RvdHlwZS5yZW5hbWU9CmZ1bmN0aW9uKGEsYixkKXthPXAoYSk7Yj1wKGIpO3RoaXMud3JhcEFzeW5jKHRoaXMucmVuYW1lQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUuZXhpc3RzQmFzZT1mdW5jdGlvbihhKXtyZXR1cm4hIXRoaXMuc3RhdEJhc2UoYSl9O2EucHJvdG90eXBlLmV4aXN0c1N5bmM9ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiB0aGlzLmV4aXN0c0Jhc2UocChhKSl9Y2F0Y2goemIpe3JldHVybiExfX07YS5wcm90b3R5cGUuZXhpc3RzPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcyxlPXAoYSk7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBiKXRocm93IEVycm9yKE0uQ0IpO2diLmRlZmF1bHQoZnVuY3Rpb24oKXt0cnl7YihkLmV4aXN0c0Jhc2UoZSkpfWNhdGNoKEFiKXtiKCExKX19KX07YS5wcm90b3R5cGUuYWNjZXNzQmFzZT1mdW5jdGlvbihhKXt0aGlzLmdldExpbmtPclRocm93KGEsImFjY2VzcyIpfTthLnByb3RvdHlwZS5hY2Nlc3NTeW5jPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9Uyk7CmE9cChhKTt0aGlzLmFjY2Vzc0Jhc2UoYSxifDApfTthLnByb3RvdHlwZS5hY2Nlc3M9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPVM7ImZ1bmN0aW9uIiE9PXR5cGVvZiBiJiYoZT1ifDAsYj1yKGQpKTthPXAoYSk7dGhpcy53cmFwQXN5bmModGhpcy5hY2Nlc3NCYXNlLFthLGVdLGIpfTthLnByb3RvdHlwZS5hcHBlbmRGaWxlU3luYz1mdW5jdGlvbihhLGIsZCl7dm9pZCAwPT09ZCYmKGQ9ZmEpO2Q9aGEoZCk7ZC5mbGFnJiZhPj4+MCE9PWF8fChkLmZsYWc9ImEiKTt0aGlzLndyaXRlRmlsZVN5bmMoYSxiLGQpfTthLnByb3RvdHlwZS5hcHBlbmRGaWxlPWZ1bmN0aW9uKGEsYixkLGUpe2U9bmEoZCxlKTtkPWVbMF07ZT1lWzFdO2QuZmxhZyYmYT4+PjAhPT1hfHwoZC5mbGFnPSJhIik7dGhpcy53cml0ZUZpbGUoYSxiLGQsZSl9O2EucHJvdG90eXBlLnJlYWRkaXJCYXNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9bihhKTtkPXRoaXMuZ2V0UmVzb2x2ZWRMaW5rKGQpO2lmKCFkKXRocm93IGsoIkVOT0VOVCIsCiJyZWFkZGlyIixhKTtpZighZC5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFTk9URElSIiwic2NhbmRpciIsYSk7aWYoYi53aXRoRmlsZVR5cGVzKXt2YXIgZT1bXTtmb3IoZiBpbiBkLmNoaWxkcmVuKShhPWQuZ2V0Q2hpbGQoZikpJiZlLnB1c2goJGMuZGVmYXVsdC5idWlsZChhLGIuZW5jb2RpbmcpKTtVfHwiYnVmZmVyIj09PWIuZW5jb2Rpbmd8fGUuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLm5hbWU8Yi5uYW1lPy0xOmEubmFtZT5iLm5hbWU/MTowfSk7cmV0dXJuIGV9dmFyIGY9W107Zm9yKGUgaW4gZC5jaGlsZHJlbilmLnB1c2gob2Euc3RyVG9FbmNvZGluZyhlLGIuZW5jb2RpbmcpKTtVfHwiYnVmZmVyIj09PWIuZW5jb2Rpbmd8fGYuc29ydCgpO3JldHVybiBmfTthLnByb3RvdHlwZS5yZWFkZGlyU3luYz1mdW5jdGlvbihhLGIpe2I9bWEoYik7YT1wKGEpO3JldHVybiB0aGlzLnJlYWRkaXJCYXNlKGEsYil9O2EucHJvdG90eXBlLnJlYWRkaXI9ZnVuY3Rpb24oYSwKYixkKXtkPXNhKGIsZCk7Yj1kWzBdO2Q9ZFsxXTthPXAoYSk7dGhpcy53cmFwQXN5bmModGhpcy5yZWFkZGlyQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUucmVhZGxpbmtCYXNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5nZXRMaW5rT3JUaHJvdyhhLCJyZWFkbGluayIpLmdldE5vZGUoKTtpZighZC5pc1N5bWxpbmsoKSl0aHJvdyBrKCJFSU5WQUwiLCJyZWFkbGluayIsYSk7YT1IK2Quc3ltbGluay5qb2luKEgpO3JldHVybiBvYS5zdHJUb0VuY29kaW5nKGEsYil9O2EucHJvdG90eXBlLnJlYWRsaW5rU3luYz1mdW5jdGlvbihhLGIpe2I9VyhiKTthPXAoYSk7cmV0dXJuIHRoaXMucmVhZGxpbmtCYXNlKGEsYi5lbmNvZGluZyl9O2EucHJvdG90eXBlLnJlYWRsaW5rPWZ1bmN0aW9uKGEsYixkKXtkPWFhKGIsZCk7Yj1kWzBdO2Q9ZFsxXTthPXAoYSk7dGhpcy53cmFwQXN5bmModGhpcy5yZWFkbGlua0Jhc2UsW2EsYi5lbmNvZGluZ10sZCl9O2EucHJvdG90eXBlLmZzeW5jQmFzZT0KZnVuY3Rpb24oYSl7dGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSwiZnN5bmMiKX07YS5wcm90b3R5cGUuZnN5bmNTeW5jPWZ1bmN0aW9uKGEpe3RoaXMuZnN5bmNCYXNlKGEpfTthLnByb3RvdHlwZS5mc3luYz1mdW5jdGlvbihhLGIpe3RoaXMud3JhcEFzeW5jKHRoaXMuZnN5bmNCYXNlLFthXSxiKX07YS5wcm90b3R5cGUuZmRhdGFzeW5jQmFzZT1mdW5jdGlvbihhKXt0aGlzLmdldEZpbGVCeUZkT3JUaHJvdyhhLCJmZGF0YXN5bmMiKX07YS5wcm90b3R5cGUuZmRhdGFzeW5jU3luYz1mdW5jdGlvbihhKXt0aGlzLmZkYXRhc3luY0Jhc2UoYSl9O2EucHJvdG90eXBlLmZkYXRhc3luYz1mdW5jdGlvbihhLGIpe3RoaXMud3JhcEFzeW5jKHRoaXMuZmRhdGFzeW5jQmFzZSxbYV0sYil9O2EucHJvdG90eXBlLmZ0cnVuY2F0ZUJhc2U9ZnVuY3Rpb24oYSxiKXt0aGlzLmdldEZpbGVCeUZkT3JUaHJvdyhhLCJmdHJ1bmNhdGUiKS50cnVuY2F0ZShiKX07YS5wcm90b3R5cGUuZnRydW5jYXRlU3luYz0KZnVuY3Rpb24oYSxiKXt0aGlzLmZ0cnVuY2F0ZUJhc2UoYSxiKX07YS5wcm90b3R5cGUuZnRydW5jYXRlPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT0ibnVtYmVyIj09PXR5cGVvZiBiP2I6MDtiPXIoIm51bWJlciI9PT10eXBlb2YgYj9kOmIpO3RoaXMud3JhcEFzeW5jKHRoaXMuZnRydW5jYXRlQmFzZSxbYSxlXSxiKX07YS5wcm90b3R5cGUudHJ1bmNhdGVCYXNlPWZ1bmN0aW9uKGEsYil7YT10aGlzLm9wZW5TeW5jKGEsInIrIik7dHJ5e3RoaXMuZnRydW5jYXRlU3luYyhhLGIpfWZpbmFsbHl7dGhpcy5jbG9zZVN5bmMoYSl9fTthLnByb3RvdHlwZS50cnVuY2F0ZVN5bmM9ZnVuY3Rpb24oYSxiKXtpZihhPj4+MD09PWEpcmV0dXJuIHRoaXMuZnRydW5jYXRlU3luYyhhLGIpO3RoaXMudHJ1bmNhdGVCYXNlKGEsYil9O2EucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT0ibnVtYmVyIj09PXR5cGVvZiBiP2I6MDtiPXIoIm51bWJlciI9PT10eXBlb2YgYj9kOmIpOwppZihhPj4+MD09PWEpcmV0dXJuIHRoaXMuZnRydW5jYXRlKGEsZSxiKTt0aGlzLndyYXBBc3luYyh0aGlzLnRydW5jYXRlQmFzZSxbYSxlXSxiKX07YS5wcm90b3R5cGUuZnV0aW1lc0Jhc2U9ZnVuY3Rpb24oYSxiLGQpe2E9dGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSwiZnV0aW1lcyIpLm5vZGU7YS5hdGltZT1uZXcgRGF0ZSgxRTMqYik7YS5tdGltZT1uZXcgRGF0ZSgxRTMqZCl9O2EucHJvdG90eXBlLmZ1dGltZXNTeW5jPWZ1bmN0aW9uKGEsYixkKXt0aGlzLmZ1dGltZXNCYXNlKGEsRChiKSxEKGQpKX07YS5wcm90b3R5cGUuZnV0aW1lcz1mdW5jdGlvbihhLGIsZCxlKXt0aGlzLndyYXBBc3luYyh0aGlzLmZ1dGltZXNCYXNlLFthLEQoYiksRChkKV0sZSl9O2EucHJvdG90eXBlLnV0aW1lc0Jhc2U9ZnVuY3Rpb24oYSxiLGQpe2E9dGhpcy5vcGVuU3luYyhhLCJyKyIpO3RyeXt0aGlzLmZ1dGltZXNCYXNlKGEsYixkKX1maW5hbGx5e3RoaXMuY2xvc2VTeW5jKGEpfX07YS5wcm90b3R5cGUudXRpbWVzU3luYz0KZnVuY3Rpb24oYSxiLGQpe3RoaXMudXRpbWVzQmFzZShwKGEpLEQoYiksRChkKSl9O2EucHJvdG90eXBlLnV0aW1lcz1mdW5jdGlvbihhLGIsZCxlKXt0aGlzLndyYXBBc3luYyh0aGlzLnV0aW1lc0Jhc2UsW3AoYSksRChiKSxEKGQpXSxlKX07YS5wcm90b3R5cGUubWtkaXJCYXNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9bihhKTtpZighZC5sZW5ndGgpdGhyb3cgaygiRUlTRElSIiwibWtkaXIiLGEpO3ZhciBlPXRoaXMuZ2V0TGlua1BhcmVudEFzRGlyT3JUaHJvdyhhLCJta2RpciIpO2Q9ZFtkLmxlbmd0aC0xXTtpZihlLmdldENoaWxkKGQpKXRocm93IGsoIkVFWElTVCIsIm1rZGlyIixhKTtlLmNyZWF0ZUNoaWxkKGQsdGhpcy5jcmVhdGVOb2RlKCEwLGIpKX07YS5wcm90b3R5cGUubWtkaXJwQmFzZT1mdW5jdGlvbihhLGIpe2E9bihhKTtmb3IodmFyIGQ9dGhpcy5yb290LGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIGY9YVtlXTtpZighZC5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFTk9URElSIiwKIm1rZGlyIixkLmdldFBhdGgoKSk7dmFyIGg9ZC5nZXRDaGlsZChmKTtpZihoKWlmKGguZ2V0Tm9kZSgpLmlzRGlyZWN0b3J5KCkpZD1oO2Vsc2UgdGhyb3cgaygiRU5PVERJUiIsIm1rZGlyIixoLmdldFBhdGgoKSk7ZWxzZSBkPWQuY3JlYXRlQ2hpbGQoZix0aGlzLmNyZWF0ZU5vZGUoITAsYikpfX07YS5wcm90b3R5cGUubWtkaXJTeW5jPWZ1bmN0aW9uKGEsYil7Yj1nKGIpO3ZhciBkPXkoYi5tb2RlLDUxMSk7YT1wKGEpO2IucmVjdXJzaXZlP3RoaXMubWtkaXJwQmFzZShhLGQpOnRoaXMubWtkaXJCYXNlKGEsZCl9O2EucHJvdG90eXBlLm1rZGlyPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT1nKGIpO2I9cigiZnVuY3Rpb24iPT09dHlwZW9mIGI/YjpkKTtkPXkoZS5tb2RlLDUxMSk7YT1wKGEpO2UucmVjdXJzaXZlP3RoaXMud3JhcEFzeW5jKHRoaXMubWtkaXJwQmFzZSxbYSxkXSxiKTp0aGlzLndyYXBBc3luYyh0aGlzLm1rZGlyQmFzZSxbYSxkXSxiKX07YS5wcm90b3R5cGUubWtkaXJwU3luYz0KZnVuY3Rpb24oYSxiKXt0aGlzLm1rZGlyU3luYyhhLHttb2RlOmIscmVjdXJzaXZlOiEwfSl9O2EucHJvdG90eXBlLm1rZGlycD1mdW5jdGlvbihhLGIsZCl7dmFyIGU9ImZ1bmN0aW9uIj09PXR5cGVvZiBiP3ZvaWQgMDpiO2I9cigiZnVuY3Rpb24iPT09dHlwZW9mIGI/YjpkKTt0aGlzLm1rZGlyKGEse21vZGU6ZSxyZWN1cnNpdmU6ITB9LGIpfTthLnByb3RvdHlwZS5ta2R0ZW1wQmFzZT1mdW5jdGlvbihhLGIsZCl7dm9pZCAwPT09ZCYmKGQ9NSk7dmFyIGU9YSt0aGlzLmdlblJuZFN0cigpO3RyeXtyZXR1cm4gdGhpcy5ta2RpckJhc2UoZSw1MTEpLG9hLnN0clRvRW5jb2RpbmcoZSxiKX1jYXRjaChBYil7aWYoIkVFWElTVCI9PT1BYi5jb2RlKXtpZigxPGQpcmV0dXJuIHRoaXMubWtkdGVtcEJhc2UoYSxiLGQtMSk7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBkaXIuIik7fXRocm93IEFiO319O2EucHJvdG90eXBlLm1rZHRlbXBTeW5jPWZ1bmN0aW9uKGEsYil7Yj0KVyhiKS5lbmNvZGluZztpZighYXx8InN0cmluZyIhPT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJmaWxlbmFtZSBwcmVmaXggaXMgcmVxdWlyZWQiKTtFKGEpO3JldHVybiB0aGlzLm1rZHRlbXBCYXNlKGEsYil9O2EucHJvdG90eXBlLm1rZHRlbXA9ZnVuY3Rpb24oYSxiLGQpe2Q9YWEoYixkKTtiPWRbMF0uZW5jb2Rpbmc7ZD1kWzFdO2lmKCFhfHwic3RyaW5nIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoImZpbGVuYW1lIHByZWZpeCBpcyByZXF1aXJlZCIpO0UoYSkmJnRoaXMud3JhcEFzeW5jKHRoaXMubWtkdGVtcEJhc2UsW2EsYl0sZCl9O2EucHJvdG90eXBlLnJtZGlyQmFzZT1mdW5jdGlvbihhLGIpe2I9eGEoe30sbGEsYik7dmFyIGQ9dGhpcy5nZXRMaW5rQXNEaXJPclRocm93KGEsInJtZGlyIik7aWYoZC5sZW5ndGgmJiFiLnJlY3Vyc2l2ZSl0aHJvdyBrKCJFTk9URU1QVFkiLCJybWRpciIsYSk7dGhpcy5kZWxldGVMaW5rKGQpfTthLnByb3RvdHlwZS5ybWRpclN5bmM9CmZ1bmN0aW9uKGEsYil7dGhpcy5ybWRpckJhc2UocChhKSxiKX07YS5wcm90b3R5cGUucm1kaXI9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPXhhKHt9LGxhLGIpO2I9cigiZnVuY3Rpb24iPT09dHlwZW9mIGI/YjpkKTt0aGlzLndyYXBBc3luYyh0aGlzLnJtZGlyQmFzZSxbcChhKSxlXSxiKX07YS5wcm90b3R5cGUuZmNobW9kQmFzZT1mdW5jdGlvbihhLGIpe3RoaXMuZ2V0RmlsZUJ5RmRPclRocm93KGEsImZjaG1vZCIpLmNobW9kKGIpfTthLnByb3RvdHlwZS5mY2htb2RTeW5jPWZ1bmN0aW9uKGEsYil7dGhpcy5mY2htb2RCYXNlKGEseShiKSl9O2EucHJvdG90eXBlLmZjaG1vZD1mdW5jdGlvbihhLGIsZCl7dGhpcy53cmFwQXN5bmModGhpcy5mY2htb2RCYXNlLFthLHkoYildLGQpfTthLnByb3RvdHlwZS5jaG1vZEJhc2U9ZnVuY3Rpb24oYSxiKXthPXRoaXMub3BlblN5bmMoYSwicisiKTt0cnl7dGhpcy5mY2htb2RCYXNlKGEsYil9ZmluYWxseXt0aGlzLmNsb3NlU3luYyhhKX19OwphLnByb3RvdHlwZS5jaG1vZFN5bmM9ZnVuY3Rpb24oYSxiKXtiPXkoYik7YT1wKGEpO3RoaXMuY2htb2RCYXNlKGEsYil9O2EucHJvdG90eXBlLmNobW9kPWZ1bmN0aW9uKGEsYixkKXtiPXkoYik7YT1wKGEpO3RoaXMud3JhcEFzeW5jKHRoaXMuY2htb2RCYXNlLFthLGJdLGQpfTthLnByb3RvdHlwZS5sY2htb2RCYXNlPWZ1bmN0aW9uKGEsYil7YT10aGlzLm9wZW5CYXNlKGEsQWEsMCwhMSk7dHJ5e3RoaXMuZmNobW9kQmFzZShhLGIpfWZpbmFsbHl7dGhpcy5jbG9zZVN5bmMoYSl9fTthLnByb3RvdHlwZS5sY2htb2RTeW5jPWZ1bmN0aW9uKGEsYil7Yj15KGIpO2E9cChhKTt0aGlzLmxjaG1vZEJhc2UoYSxiKX07YS5wcm90b3R5cGUubGNobW9kPWZ1bmN0aW9uKGEsYixkKXtiPXkoYik7YT1wKGEpO3RoaXMud3JhcEFzeW5jKHRoaXMubGNobW9kQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUuZmNob3duQmFzZT1mdW5jdGlvbihhLGIsZCl7dGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSwKImZjaG93biIpLmNob3duKGIsZCl9O2EucHJvdG90eXBlLmZjaG93blN5bmM9ZnVuY3Rpb24oYSxiLGQpe3coYik7RihkKTt0aGlzLmZjaG93bkJhc2UoYSxiLGQpfTthLnByb3RvdHlwZS5mY2hvd249ZnVuY3Rpb24oYSxiLGQsZSl7dyhiKTtGKGQpO3RoaXMud3JhcEFzeW5jKHRoaXMuZmNob3duQmFzZSxbYSxiLGRdLGUpfTthLnByb3RvdHlwZS5jaG93bkJhc2U9ZnVuY3Rpb24oYSxiLGQpe3RoaXMuZ2V0UmVzb2x2ZWRMaW5rT3JUaHJvdyhhLCJjaG93biIpLmdldE5vZGUoKS5jaG93bihiLGQpfTthLnByb3RvdHlwZS5jaG93blN5bmM9ZnVuY3Rpb24oYSxiLGQpe3coYik7RihkKTt0aGlzLmNob3duQmFzZShwKGEpLGIsZCl9O2EucHJvdG90eXBlLmNob3duPWZ1bmN0aW9uKGEsYixkLGUpe3coYik7RihkKTt0aGlzLndyYXBBc3luYyh0aGlzLmNob3duQmFzZSxbcChhKSxiLGRdLGUpfTthLnByb3RvdHlwZS5sY2hvd25CYXNlPWZ1bmN0aW9uKGEsYixkKXt0aGlzLmdldExpbmtPclRocm93KGEsCiJsY2hvd24iKS5nZXROb2RlKCkuY2hvd24oYixkKX07YS5wcm90b3R5cGUubGNob3duU3luYz1mdW5jdGlvbihhLGIsZCl7dyhiKTtGKGQpO3RoaXMubGNob3duQmFzZShwKGEpLGIsZCl9O2EucHJvdG90eXBlLmxjaG93bj1mdW5jdGlvbihhLGIsZCxlKXt3KGIpO0YoZCk7dGhpcy53cmFwQXN5bmModGhpcy5sY2hvd25CYXNlLFtwKGEpLGIsZF0sZSl9O2EucHJvdG90eXBlLndhdGNoRmlsZT1mdW5jdGlvbihhLGIsZCl7YT1wKGEpO3ZhciBlPWI7ImZ1bmN0aW9uIj09PXR5cGVvZiBlJiYoZD1iLGU9bnVsbCk7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBkKXRocm93IEVycm9yKCcid2F0Y2hGaWxlKCkiIHJlcXVpcmVzIGEgbGlzdGVuZXIgZnVuY3Rpb24nKTtiPTUwMDc7dmFyIGY9ITA7ZSYmIm9iamVjdCI9PT10eXBlb2YgZSYmKCJudW1iZXIiPT09dHlwZW9mIGUuaW50ZXJ2YWwmJihiPWUuaW50ZXJ2YWwpLCJib29sZWFuIj09PXR5cGVvZiBlLnBlcnNpc3RlbnQmJihmPWUucGVyc2lzdGVudCkpOwooZT10aGlzLnN0YXRXYXRjaGVyc1thXSl8fChlPW5ldyB0aGlzLlN0YXRXYXRjaGVyLGUuc3RhcnQoYSxmLGIpLHRoaXMuc3RhdFdhdGNoZXJzW2FdPWUpO2UuYWRkTGlzdGVuZXIoImNoYW5nZSIsZCk7cmV0dXJuIGV9O2EucHJvdG90eXBlLnVud2F0Y2hGaWxlPWZ1bmN0aW9uKGEsYil7YT1wKGEpO3ZhciBkPXRoaXMuc3RhdFdhdGNoZXJzW2FdO2QmJigiZnVuY3Rpb24iPT09dHlwZW9mIGI/ZC5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlIixiKTpkLnJlbW92ZUFsbExpc3RlbmVycygiY2hhbmdlIiksMD09PWQubGlzdGVuZXJDb3VudCgiY2hhbmdlIikmJihkLnN0b3AoKSxkZWxldGUgdGhpcy5zdGF0V2F0Y2hlcnNbYV0pKX07YS5wcm90b3R5cGUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgdGhpcy5SZWFkU3RyZWFtKGEsYil9O2EucHJvdG90eXBlLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyB0aGlzLldyaXRlU3RyZWFtKGEsCmIpfTthLnByb3RvdHlwZS53YXRjaD1mdW5jdGlvbihhLGIsZCl7YT1wKGEpO3ZhciBlPWI7ImZ1bmN0aW9uIj09PXR5cGVvZiBiJiYoZD1iLGU9bnVsbCk7dmFyIGY9VyhlKTtiPWYucGVyc2lzdGVudDtlPWYucmVjdXJzaXZlO2Y9Zi5lbmNvZGluZzt2b2lkIDA9PT1iJiYoYj0hMCk7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciBoPW5ldyB0aGlzLkZTV2F0Y2hlcjtoLnN0YXJ0KGEsYixlLGYpO2QmJmguYWRkTGlzdGVuZXIoImNoYW5nZSIsZCk7cmV0dXJuIGh9O2EuZmQ9MjE0NzQ4MzY0NztyZXR1cm4gYX0oKTtiLlZvbHVtZT1hO3ZhciBxYT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3ZhciBkPWEuY2FsbCh0aGlzKXx8dGhpcztkLm9uSW50ZXJ2YWw9ZnVuY3Rpb24oKXt0cnl7dmFyIGE9ZC52b2wuc3RhdFN5bmMoZC5maWxlbmFtZSk7ZC5oYXNDaGFuZ2VkKGEpJiYoZC5lbWl0KCJjaGFuZ2UiLGEsZC5wcmV2KSxkLnByZXY9YSl9ZmluYWxseXtkLmxvb3AoKX19O2Qudm9sPWI7cmV0dXJuIGR9CmhiKGIsYSk7Yi5wcm90b3R5cGUubG9vcD1mdW5jdGlvbigpe3RoaXMudGltZW91dFJlZj10aGlzLnNldFRpbWVvdXQodGhpcy5vbkludGVydmFsLHRoaXMuaW50ZXJ2YWwpfTtiLnByb3RvdHlwZS5oYXNDaGFuZ2VkPWZ1bmN0aW9uKGEpe3JldHVybiBhLm10aW1lTXM+dGhpcy5wcmV2Lm10aW1lTXN8fGEubmxpbmshPT10aGlzLnByZXYubmxpbms/ITA6ITF9O2IucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEsYixkKXt2b2lkIDA9PT1iJiYoYj0hMCk7dm9pZCAwPT09ZCYmKGQ9NTAwNyk7dGhpcy5maWxlbmFtZT1wKGEpO3RoaXMuc2V0VGltZW91dD1iP3NldFRpbWVvdXQ6bWYuZGVmYXVsdDt0aGlzLmludGVydmFsPWQ7dGhpcy5wcmV2PXRoaXMudm9sLnN0YXRTeW5jKHRoaXMuZmlsZW5hbWUpO3RoaXMubG9vcCgpfTtiLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFJlZik7WS5kZWZhdWx0Lm5leHRUaWNrKGJjLHRoaXMpfTtyZXR1cm4gYn0oeC5FdmVudEVtaXR0ZXIpOwpiLlN0YXRXYXRjaGVyPXFhO3ZhciBpYTt3Yi5pbmhlcml0cyh0YSxjYS5SZWFkYWJsZSk7Yi5SZWFkU3RyZWFtPXRhO3RhLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLl92b2wub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oYixkKXtiPyhhLmF1dG9DbG9zZSYmYS5kZXN0cm95JiZhLmRlc3Ryb3koKSxhLmVtaXQoImVycm9yIixiKSk6KGEuZmQ9ZCxhLmVtaXQoIm9wZW4iLGQpLGEucmVhZCgpKX0pfTt0YS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oYSl7aWYoIm51bWJlciIhPT10eXBlb2YgdGhpcy5mZClyZXR1cm4gdGhpcy5vbmNlKCJvcGVuIixmdW5jdGlvbigpe3RoaXMuX3JlYWQoYSl9KTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKCFpYXx8MTI4PmlhLmxlbmd0aC1pYS51c2VkKWlhPUouYnVmZmVyQWxsb2NVbnNhZmUodGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrKSxpYS51c2VkPTA7dmFyIGI9aWEsCmQ9TWF0aC5taW4oaWEubGVuZ3RoLWlhLnVzZWQsYSksZT1pYS51c2VkO3ZvaWQgMCE9PXRoaXMucG9zJiYoZD1NYXRoLm1pbih0aGlzLmVuZC10aGlzLnBvcysxLGQpKTtpZigwPj1kKXJldHVybiB0aGlzLnB1c2gobnVsbCk7dmFyIGY9dGhpczt0aGlzLl92b2wucmVhZCh0aGlzLmZkLGlhLGlhLnVzZWQsZCx0aGlzLnBvcyxmdW5jdGlvbihhLGQpe2E/KGYuYXV0b0Nsb3NlJiZmLmRlc3Ryb3kmJmYuZGVzdHJveSgpLGYuZW1pdCgiZXJyb3IiLGEpKTooYT1udWxsLDA8ZCYmKGYuYnl0ZXNSZWFkKz1kLGE9Yi5zbGljZShlLGUrZCkpLGYucHVzaChhKSl9KTt2b2lkIDAhPT10aGlzLnBvcyYmKHRoaXMucG9zKz1kKTtpYS51c2VkKz1kfX07dGEucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGEsYil7dGhpcy5jbG9zZShmdW5jdGlvbihkKXtiKGF8fGQpfSl9O3RhLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKGEpdGhpcy5vbmNlKCJjbG9zZSIsYSk7aWYodGhpcy5jbG9zZWR8fAoibnVtYmVyIiE9PXR5cGVvZiB0aGlzLmZkKXtpZigibnVtYmVyIiE9PXR5cGVvZiB0aGlzLmZkKXt0aGlzLm9uY2UoIm9wZW4iLGJoKTtyZXR1cm59cmV0dXJuIFkuZGVmYXVsdC5uZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBiLmVtaXQoImNsb3NlIil9KX10aGlzLmNsb3NlZD0hMDt0aGlzLl92b2wuY2xvc2UodGhpcy5mZCxmdW5jdGlvbihhKXthP2IuZW1pdCgiZXJyb3IiLGEpOmIuZW1pdCgiY2xvc2UiKX0pO3RoaXMuZmQ9bnVsbH07d2IuaW5oZXJpdHMoWixjYS5Xcml0YWJsZSk7Yi5Xcml0ZVN0cmVhbT1aO1oucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLl92b2wub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oYSxiKXthPyh0aGlzLmF1dG9DbG9zZSYmdGhpcy5kZXN0cm95JiZ0aGlzLmRlc3Ryb3koKSx0aGlzLmVtaXQoImVycm9yIixhKSk6KHRoaXMuZmQ9Yix0aGlzLmVtaXQoIm9wZW4iLGIpKX0uYmluZCh0aGlzKSl9O1oucHJvdG90eXBlLl93cml0ZT0KZnVuY3Rpb24oYSxiLGQpe2lmKCEoYSBpbnN0YW5jZW9mIEouQnVmZmVyKSlyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsRXJyb3IoIkludmFsaWQgZGF0YSIpKTtpZigibnVtYmVyIiE9PXR5cGVvZiB0aGlzLmZkKXJldHVybiB0aGlzLm9uY2UoIm9wZW4iLGZ1bmN0aW9uKCl7dGhpcy5fd3JpdGUoYSxiLGQpfSk7dmFyIGU9dGhpczt0aGlzLl92b2wud3JpdGUodGhpcy5mZCxhLDAsYS5sZW5ndGgsdGhpcy5wb3MsZnVuY3Rpb24oYSxiKXtpZihhKXJldHVybiBlLmF1dG9DbG9zZSYmZS5kZXN0cm95JiZlLmRlc3Ryb3koKSxkKGEpO2UuYnl0ZXNXcml0dGVuKz1iO2QoKX0pO3ZvaWQgMCE9PXRoaXMucG9zJiYodGhpcy5wb3MrPWEubGVuZ3RoKX07Wi5wcm90b3R5cGUuX3dyaXRldj1mdW5jdGlvbihhLGIpe2lmKCJudW1iZXIiIT09dHlwZW9mIHRoaXMuZmQpcmV0dXJuIHRoaXMub25jZSgib3BlbiIsZnVuY3Rpb24oKXt0aGlzLl93cml0ZXYoYSxiKX0pO2Zvcih2YXIgZD10aGlzLGU9CmEubGVuZ3RoLGY9QXJyYXkoZSksaD0wLGc9MDtnPGU7ZysrKXt2YXIgaz1hW2ddLmNodW5rO2ZbZ109aztoKz1rLmxlbmd0aH1lPUouQnVmZmVyLmNvbmNhdChmKTt0aGlzLl92b2wud3JpdGUodGhpcy5mZCxlLDAsZS5sZW5ndGgsdGhpcy5wb3MsZnVuY3Rpb24oYSxlKXtpZihhKXJldHVybiBkLmRlc3Ryb3kmJmQuZGVzdHJveSgpLGIoYSk7ZC5ieXRlc1dyaXR0ZW4rPWU7YigpfSk7dm9pZCAwIT09dGhpcy5wb3MmJih0aGlzLnBvcys9aCl9O1oucHJvdG90eXBlLl9kZXN0cm95PXRhLnByb3RvdHlwZS5fZGVzdHJveTtaLnByb3RvdHlwZS5jbG9zZT10YS5wcm90b3R5cGUuY2xvc2U7Wi5wcm90b3R5cGUuZGVzdHJveVNvb249Wi5wcm90b3R5cGUuZW5kO3ZhciByYT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3ZhciBkPWEuY2FsbCh0aGlzKXx8dGhpcztkLl9maWxlbmFtZT0iIjtkLl9maWxlbmFtZUVuY29kZWQ9IiI7ZC5fcmVjdXJzaXZlPSExO2QuX2VuY29kaW5nPW9hLkVOQ09ESU5HX1VURjg7CmQuX29uTm9kZUNoYW5nZT1mdW5jdGlvbigpe2QuX2VtaXQoImNoYW5nZSIpfTtkLl9vblBhcmVudENoaWxkPWZ1bmN0aW9uKGEpe2EuZ2V0TmFtZSgpPT09ZC5fZ2V0TmFtZSgpJiZkLl9lbWl0KCJyZW5hbWUiKX07ZC5fZW1pdD1mdW5jdGlvbihhKXtkLmVtaXQoImNoYW5nZSIsYSxkLl9maWxlbmFtZUVuY29kZWQpfTtkLl9wZXJzaXN0PWZ1bmN0aW9uKCl7ZC5fdGltZXI9c2V0VGltZW91dChkLl9wZXJzaXN0LDFFNil9O2QuX3ZvbD1iO3JldHVybiBkfWhiKGIsYSk7Yi5wcm90b3R5cGUuX2dldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RlcHNbdGhpcy5fc3RlcHMubGVuZ3RoLTFdfTtiLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihhLGIsZCxlKXt2b2lkIDA9PT1iJiYoYj0hMCk7dm9pZCAwPT09ZCYmKGQ9ITEpO3ZvaWQgMD09PWUmJihlPW9hLkVOQ09ESU5HX1VURjgpO3RoaXMuX2ZpbGVuYW1lPXAoYSk7dGhpcy5fc3RlcHM9bih0aGlzLl9maWxlbmFtZSk7dGhpcy5fZmlsZW5hbWVFbmNvZGVkPQpvYS5zdHJUb0VuY29kaW5nKHRoaXMuX2ZpbGVuYW1lKTt0aGlzLl9yZWN1cnNpdmU9ZDt0aGlzLl9lbmNvZGluZz1lO3RyeXt0aGlzLl9saW5rPXRoaXMuX3ZvbC5nZXRMaW5rT3JUaHJvdyh0aGlzLl9maWxlbmFtZSwiRlNXYXRjaGVyIil9Y2F0Y2goZWQpe3Rocm93IGI9RXJyb3IoIndhdGNoICIrdGhpcy5fZmlsZW5hbWUrIiAiK2VkLmNvZGUpLGIuY29kZT1lZC5jb2RlLGIuZXJybm89ZWQuY29kZSxiO310aGlzLl9saW5rLmdldE5vZGUoKS5vbigiY2hhbmdlIix0aGlzLl9vbk5vZGVDaGFuZ2UpO3RoaXMuX2xpbmsub24oImNoaWxkOmFkZCIsdGhpcy5fb25Ob2RlQ2hhbmdlKTt0aGlzLl9saW5rLm9uKCJjaGlsZDpkZWxldGUiLHRoaXMuX29uTm9kZUNoYW5nZSk7aWYoYT10aGlzLl9saW5rLnBhcmVudClhLnNldE1heExpc3RlbmVycyhhLmdldE1heExpc3RlbmVycygpKzEpLGEub24oImNoaWxkOmRlbGV0ZSIsdGhpcy5fb25QYXJlbnRDaGlsZCk7YiYmdGhpcy5fcGVyc2lzdCgpfTsKYi5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO3RoaXMuX2xpbmsuZ2V0Tm9kZSgpLnJlbW92ZUxpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuX29uTm9kZUNoYW5nZSk7dmFyIGE9dGhpcy5fbGluay5wYXJlbnQ7YSYmYS5yZW1vdmVMaXN0ZW5lcigiY2hpbGQ6ZGVsZXRlIix0aGlzLl9vblBhcmVudENoaWxkKX07cmV0dXJuIGJ9KHguRXZlbnRFbWl0dGVyKTtiLkZTV2F0Y2hlcj1yYX0pO1EoUWEpO3ZhciBlaD1RYS5wYXRoVG9GaWxlbmFtZSxmaD1RYS5maWxlbmFtZVRvU3RlcHMscWY9UWEuVm9sdW1lLGdkPUsoZnVuY3Rpb24oYSxiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Yi5mc1Byb3BzPSJjb25zdGFudHMgRl9PSyBSX09LIFdfT0sgWF9PSyBTdGF0cyIuc3BsaXQoIiAiKTtiLmZzU3luY01ldGhvZHM9InJlbmFtZVN5bmMgZnRydW5jYXRlU3luYyB0cnVuY2F0ZVN5bmMgY2hvd25TeW5jIGZjaG93blN5bmMgbGNob3duU3luYyBjaG1vZFN5bmMgZmNobW9kU3luYyBsY2htb2RTeW5jIHN0YXRTeW5jIGxzdGF0U3luYyBmc3RhdFN5bmMgbGlua1N5bmMgc3ltbGlua1N5bmMgcmVhZGxpbmtTeW5jIHJlYWxwYXRoU3luYyB1bmxpbmtTeW5jIHJtZGlyU3luYyBta2RpclN5bmMgbWtkaXJwU3luYyByZWFkZGlyU3luYyBjbG9zZVN5bmMgb3BlblN5bmMgdXRpbWVzU3luYyBmdXRpbWVzU3luYyBmc3luY1N5bmMgd3JpdGVTeW5jIHJlYWRTeW5jIHJlYWRGaWxlU3luYyB3cml0ZUZpbGVTeW5jIGFwcGVuZEZpbGVTeW5jIGV4aXN0c1N5bmMgYWNjZXNzU3luYyBmZGF0YXN5bmNTeW5jIG1rZHRlbXBTeW5jIGNvcHlGaWxlU3luYyBjcmVhdGVSZWFkU3RyZWFtIGNyZWF0ZVdyaXRlU3RyZWFtIi5zcGxpdCgiICIpOwpiLmZzQXN5bmNNZXRob2RzPSJyZW5hbWUgZnRydW5jYXRlIHRydW5jYXRlIGNob3duIGZjaG93biBsY2hvd24gY2htb2QgZmNobW9kIGxjaG1vZCBzdGF0IGxzdGF0IGZzdGF0IGxpbmsgc3ltbGluayByZWFkbGluayByZWFscGF0aCB1bmxpbmsgcm1kaXIgbWtkaXIgbWtkaXJwIHJlYWRkaXIgY2xvc2Ugb3BlbiB1dGltZXMgZnV0aW1lcyBmc3luYyB3cml0ZSByZWFkIHJlYWRGaWxlIHdyaXRlRmlsZSBhcHBlbmRGaWxlIGV4aXN0cyBhY2Nlc3MgZmRhdGFzeW5jIG1rZHRlbXAgY29weUZpbGUgd2F0Y2hGaWxlIHVud2F0Y2hGaWxlIHdhdGNoIi5zcGxpdCgiICIpfSk7UShnZCk7dmFyIHJmPUsoZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj17Rl9PSzpoLFJfT0s6ayxXX09LOmwsWF9PSzptLGNvbnN0YW50czp1LmNvbnN0YW50cyxTdGF0czplYi5kZWZhdWx0LERpcmVudDokYy5kZWZhdWx0fSxkPTAsZT1mO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcT1lW2RdOyJmdW5jdGlvbiI9PT0KdHlwZW9mIGFbcV0mJihiW3FdPWFbcV0uYmluZChhKSl9ZD0wO2ZvcihlPWc7ZDxlLmxlbmd0aDtkKyspcT1lW2RdLCJmdW5jdGlvbiI9PT10eXBlb2YgYVtxXSYmKGJbcV09YVtxXS5iaW5kKGEpKTtiLlN0YXRXYXRjaGVyPWEuU3RhdFdhdGNoZXI7Yi5GU1dhdGNoZXI9YS5GU1dhdGNoZXI7Yi5Xcml0ZVN0cmVhbT1hLldyaXRlU3RyZWFtO2IuUmVhZFN0cmVhbT1hLlJlYWRTdHJlYW07Yi5wcm9taXNlcz1hLnByb21pc2VzO2IuX3RvVW5peFRpbWVzdGFtcD1RYS50b1VuaXhUaW1lc3RhbXA7cmV0dXJuIGJ9dmFyIGU9TiYmTi5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGEpe2Zvcih2YXIgYixkPTEsZT1hcmd1bWVudHMubGVuZ3RoO2Q8ZTtkKyspe2I9YXJndW1lbnRzW2RdO2Zvcih2YXIgZiBpbiBiKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLGYpJiYoYVtmXT1iW2ZdKX1yZXR1cm4gYX07cmV0dXJuIGUuYXBwbHkodGhpcywKYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBmPWdkLmZzU3luY01ldGhvZHMsZz1nZC5mc0FzeW5jTWV0aG9kcyxoPXUuY29uc3RhbnRzLkZfT0ssaz11LmNvbnN0YW50cy5SX09LLGw9dS5jb25zdGFudHMuV19PSyxtPXUuY29uc3RhbnRzLlhfT0s7Yi5Wb2x1bWU9UWEuVm9sdW1lO2Iudm9sPW5ldyBRYS5Wb2x1bWU7Yi5jcmVhdGVGc0Zyb21Wb2x1bWU9ZDtiLmZzPWQoYi52b2wpO2EuZXhwb3J0cz1lKGUoe30sYS5leHBvcnRzKSxiLmZzKTthLmV4cG9ydHMuc2VtYW50aWM9ITB9KTtRKHJmKTt2YXIgc2Y9cmYuY3JlYXRlRnNGcm9tVm9sdW1lO1dnLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixkLGU9W10sZj0xO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspZVtmLTFdPWFyZ3VtZW50c1tmXTtmPXRoaXMubGlzdGVuZXJzKGEpO3RyeXtmb3IodmFyIGc9cmMoZiksaD1nLm5leHQoKTshaC5kb25lO2g9CmcubmV4dCgpKXt2YXIgaz1oLnZhbHVlO3RyeXtrLmFwcGx5KHZvaWQgMCxKZihlKSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19fWNhdGNoKHQpe2I9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2gmJiFoLmRvbmUmJihkPWcucmV0dXJuKSYmZC5jYWxsKGcpfWZpbmFsbHl7aWYoYil0aHJvdyBiLmVycm9yO319cmV0dXJuIDA8Zi5sZW5ndGh9O3ZhciBnaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLnZvbHVtZT1uZXcgcWY7dGhpcy5mcz1zZih0aGlzLnZvbHVtZSk7dGhpcy5mcm9tSlNPTih7Ii9kZXYvc3RkaW4iOiIiLCIvZGV2L3N0ZG91dCI6IiIsIi9kZXYvc3RkZXJyIjoiIn0pfWEucHJvdG90eXBlLl90b0pTT049ZnVuY3Rpb24oYSxkLGUpe3ZvaWQgMD09PWQmJihkPXt9KTt2YXIgYj0hMCxnO2ZvcihnIGluIGEuY2hpbGRyZW4pe2I9ITE7dmFyIGg9YS5nZXRDaGlsZChnKTtpZihoKXt2YXIgaz1oLmdldE5vZGUoKTtrJiZrLmlzRmlsZSgpPyhoPWguZ2V0UGF0aCgpLAplJiYoaD1QYihlLGgpKSxkW2hdPWsuZ2V0QnVmZmVyKCkpOmsmJmsuaXNEaXJlY3RvcnkoKSYmdGhpcy5fdG9KU09OKGgsZCxlKX19YT1hLmdldFBhdGgoKTtlJiYoYT1QYihlLGEpKTthJiZiJiYoZFthXT1udWxsKTtyZXR1cm4gZH07YS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEsZCxlKXt2YXIgYixnO3ZvaWQgMD09PWQmJihkPXt9KTt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIGg9W107aWYoYSl7YSBpbnN0YW5jZW9mIEFycmF5fHwoYT1bYV0pO3RyeXtmb3IodmFyIGs9cmMoYSksbD1rLm5leHQoKTshbC5kb25lO2w9ay5uZXh0KCkpe3ZhciBxPWVoKGwudmFsdWUpLG09dGhpcy52b2x1bWUuZ2V0UmVzb2x2ZWRMaW5rKHEpO20mJmgucHVzaChtKX19Y2F0Y2goWmMpe3ZhciBuPXtlcnJvcjpaY319ZmluYWxseXt0cnl7bCYmIWwuZG9uZSYmKGI9ay5yZXR1cm4pJiZiLmNhbGwoayl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3I7fX19ZWxzZSBoLnB1c2godGhpcy52b2x1bWUucm9vdCk7CmlmKCFoLmxlbmd0aClyZXR1cm4gZDt0cnl7Zm9yKHZhciBQPXJjKGgpLHA9UC5uZXh0KCk7IXAuZG9uZTtwPVAubmV4dCgpKW09cC52YWx1ZSx0aGlzLl90b0pTT04obSxkLGU/bS5nZXRQYXRoKCk6IiIpfWNhdGNoKFpjKXt2YXIgdT17ZXJyb3I6WmN9fWZpbmFsbHl7dHJ5e3AmJiFwLmRvbmUmJihnPVAucmV0dXJuKSYmZy5jYWxsKFApfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yO319cmV0dXJuIGR9O2EucHJvdG90eXBlLmZyb21KU09ORml4ZWQ9ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGIgaW4gZCl7dmFyIGY9ZFtiXTtpZihmP251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZik6bnVsbCE9PWYpe3ZhciBnPWZoKGIpOzE8Zy5sZW5ndGgmJihnPSIvIitnLnNsaWNlKDAsZy5sZW5ndGgtMSkuam9pbigiLyIpLGEubWtkaXJwQmFzZShnLDUxMSkpO2Eud3JpdGVGaWxlU3luYyhiLGZ8fCIiKX1lbHNlIGEubWtkaXJwQmFzZShiLDUxMSl9fTthLnByb3RvdHlwZS5mcm9tSlNPTj0KZnVuY3Rpb24oYSl7dGhpcy52b2x1bWU9bmV3IHFmO3RoaXMuZnJvbUpTT05GaXhlZCh0aGlzLnZvbHVtZSxhKTt0aGlzLmZzPXNmKHRoaXMudm9sdW1lKTt0aGlzLnZvbHVtZS5yZWxlYXNlZEZkcz1bMCwxLDJdO2E9dGhpcy52b2x1bWUub3BlblN5bmMoIi9kZXYvc3RkZXJyIiwidyIpO3ZhciBiPXRoaXMudm9sdW1lLm9wZW5TeW5jKCIvZGV2L3N0ZG91dCIsInciKSxlPXRoaXMudm9sdW1lLm9wZW5TeW5jKCIvZGV2L3N0ZGluIiwiciIpO2lmKDIhPT1hKXRocm93IEVycm9yKCJpbnZhbGlkIGhhbmRsZSBmb3Igc3RkZXJyOiAiK2EpO2lmKDEhPT1iKXRocm93IEVycm9yKCJpbnZhbGlkIGhhbmRsZSBmb3Igc3Rkb3V0OiAiK2IpO2lmKDAhPT1lKXRocm93IEVycm9yKCJpbnZhbGlkIGhhbmRsZSBmb3Igc3RkaW46ICIrZSk7fTthLnByb3RvdHlwZS5nZXRTdGRPdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGEsZD10aGlzO3JldHVybiBIZih0aGlzLApmdW5jdGlvbigpe2E9bmV3IFByb21pc2UoZnVuY3Rpb24oYSl7YShkLmZzLnJlYWRGaWxlU3luYygiL2Rldi9zdGRvdXQiLCJ1dGY4IikpfSk7cmV0dXJuWzIsYV19KX0pfTtyZXR1cm4gYX0oKSxkYz12b2lkIDA7Im9iamVjdCI9PT10eXBlb2Ygd2luZG93P2RjPXdpbmRvdy5UZXh0RGVjb2Rlcjoib2JqZWN0Ij09PXR5cGVvZiBzZWxmP2RjPXNlbGYuVGV4dERlY29kZXI6ImZ1bmN0aW9uIj09PXR5cGVvZiByZXF1aXJlJiYoZGM9cmVxdWlyZSgidXRpbCIpLlRleHREZWNvZGVyKTt2YXIgaGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3RoaXMud2FzbUZzPWE7dGhpcy53YXNtRnMudm9sdW1lLm1rZGlyU3luYygiL193YXNtZXIvZGV2L2ZiMCIse3JlY3Vyc2l2ZTohMH0pO3RoaXMud2FzbUZzLnZvbHVtZS53cml0ZUZpbGVTeW5jKCIvX3dhc21lci9kZXYvZmIwL2ZiIiwiIik7dGhpcy53YXNtRnMudm9sdW1lLndyaXRlRmlsZVN5bmMoIi9fd2FzbWVyL2Rldi9mYjAvdmlydHVhbF9zaXplIiwKIiIpO3RoaXMud2FzbUZzLnZvbHVtZS53cml0ZUZpbGVTeW5jKCIvX3dhc21lci9kZXYvZmIwL2RyYXciLCIiKTt0aGlzLndhc21Gcy52b2x1bWUud3JpdGVGaWxlU3luYygiL193YXNtZXIvZGV2L2ZiMC9pbnB1dCIsIiIpO3RoaXMud2luZG93U2l6ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7fTt0aGlzLmJ1ZmZlckluZGV4RGlzcGxheUNhbGxiYWNrPWZ1bmN0aW9uKCl7fTt0aGlzLmlucHV0Q2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXl9O3RoaXMuZmRGcmFtZUJ1ZmZlcj10aGlzLndhc21Gcy52b2x1bWUub3BlblN5bmMoIi9fd2FzbWVyL2Rldi9mYjAvZmIiLCJ3KyIpO3RoaXMuZmRCdWZmZXJJbmRleERpc3BsYXk9dGhpcy53YXNtRnMudm9sdW1lLm9wZW5TeW5jKCIvX3dhc21lci9kZXYvZmIwL2RyYXciLCJ3KyIpO3RoaXMuZmRXaW5kb3dTaXplPXRoaXMud2FzbUZzLmZzLm9wZW5TeW5jKCIvX3dhc21lci9kZXYvZmIwL3ZpcnR1YWxfc2l6ZSIsIncrIik7CnRoaXMuZmRJbnB1dD10aGlzLndhc21Gcy52b2x1bWUub3BlblN5bmMoIi9fd2FzbWVyL2Rldi9mYjAvaW5wdXQiLCJ3KyIpO3ZhciBiPXRoaXMsZT10aGlzLndhc21Gcy52b2x1bWUuZmRzW3RoaXMuZmRJbnB1dF0ubm9kZS5yZWFkO3RoaXMud2FzbUZzLnZvbHVtZS5mZHNbdGhpcy5mZElucHV0XS5ub2RlLnJlYWQ9ZnVuY3Rpb24oKXt2YXIgYT1iLmlucHV0Q2FsbGJhY2soKTtiLndhc21Gcy52b2x1bWUud3JpdGVGaWxlU3luYygiL193YXNtZXIvZGV2L2ZiMC9pbnB1dCIsYSk7YT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBlLmFwcGx5KGIud2FzbUZzLnZvbHVtZS5mZHNbYi5mZElucHV0XS5ub2RlLGEpfTt2YXIgZj10aGlzLndhc21Gcy52b2x1bWUuZmRzW3RoaXMuZmRXaW5kb3dTaXplXS5ub2RlLndyaXRlO3RoaXMud2FzbUZzLnZvbHVtZS5mZHNbdGhpcy5mZFdpbmRvd1NpemVdLm5vZGUud3JpdGU9ZnVuY3Rpb24oKXt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwphPWYuYXBwbHkoYi53YXNtRnMudm9sdW1lLmZkc1tiLmZkV2luZG93U2l6ZV0ubm9kZSxhKTtiLndpbmRvd1NpemVDYWxsYmFjaygpO3JldHVybiBhfTt2YXIgZz10aGlzLndhc21Gcy52b2x1bWUuZmRzW3RoaXMuZmRCdWZmZXJJbmRleERpc3BsYXldLm5vZGUud3JpdGU7dGhpcy53YXNtRnMudm9sdW1lLmZkc1t0aGlzLmZkQnVmZmVySW5kZXhEaXNwbGF5XS5ub2RlLndyaXRlPWZ1bmN0aW9uKCl7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTthPWcuYXBwbHkoYi53YXNtRnMudm9sdW1lLmZkc1tiLmZkQnVmZmVySW5kZXhEaXNwbGF5XS5ub2RlLGEpO2IuYnVmZmVySW5kZXhEaXNwbGF5Q2FsbGJhY2soKTtyZXR1cm4gYX19YS5wcm90b3R5cGUuZ2V0RnJhbWVCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53YXNtRnMuZnMucmVhZEZpbGVTeW5jKCIvX3dhc21lci9kZXYvZmIwL2ZiIil9O2EucHJvdG90eXBlLmdldFdpbmRvd1NpemU9ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy53YXNtRnMuZnMucmVhZEZpbGVTeW5jKCIvX3dhc21lci9kZXYvZmIwL3ZpcnR1YWxfc2l6ZSIpO3JldHVybiAwPGEubGVuZ3RoPyhhPShuZXcgZGMoInV0Zi04IikpLmRlY29kZShhKS5zcGxpdCgieCIpLFtwYXJzZUludChhWzBdLDEwKSxwYXJzZUludChhWzFdLDEwKV0pOlswLDBdfTthLnByb3RvdHlwZS5zZXRXaW5kb3dTaXplQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dGhpcy53aW5kb3dTaXplQ2FsbGJhY2s9YX07YS5wcm90b3R5cGUuc2V0QnVmZmVySW5kZXhEaXNwbGF5Q2FsbGJhY2s9ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXJJbmRleERpc3BsYXlDYWxsYmFjaz1hfTthLnByb3RvdHlwZS5zZXRJbnB1dENhbGxiYWNrPWZ1bmN0aW9uKGEpe3RoaXMuaW5wdXRDYWxsYmFjaz1hfTtyZXR1cm4gYX0oKSxpaD0idW5kZWZpbmVkIiE9PXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPT10eXBlb2YgbmE/bmE6e30sbj0idW5kZWZpbmVkIiE9PXR5cGVvZiBCaWdJbnQ/CkJpZ0ludDppaC5CaWdJbnR8fE51bWJlcixlYz1EYXRhVmlldztlYy5wcm90b3R5cGUuc2V0QmlnVWludDY0fHwoZWMucHJvdG90eXBlLnNldEJpZ1VpbnQ2ND1mdW5jdGlvbihhLGIsZCl7aWYoYjxNYXRoLnBvdygyLDMyKSl7Yj1OdW1iZXIoYik7dmFyIGU9MH1lbHNle2U9Yi50b1N0cmluZygyKTtiPSIiO2Zvcih2YXIgZj0wO2Y8NjQtZS5sZW5ndGg7ZisrKWIrPSIwIjtiKz1lO2U9cGFyc2VJbnQoYi5zdWJzdHJpbmcoMCwzMiksMik7Yj1wYXJzZUludChiLnN1YnN0cmluZygzMiksMil9dGhpcy5zZXRVaW50MzIoYSsoZD8wOjQpLGIsZCk7dGhpcy5zZXRVaW50MzIoYSsoZD80OjApLGUsZCl9LGVjLnByb3RvdHlwZS5nZXRCaWdVaW50NjQ9ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLmdldFVpbnQzMihhKyhiPzA6NCksYik7YT10aGlzLmdldFVpbnQzMihhKyhiPzQ6MCksYik7ZD1kLnRvU3RyaW5nKDIpO2E9YS50b1N0cmluZygyKTtiPSIiO2Zvcih2YXIgZT0wO2U8MzItZC5sZW5ndGg7ZSsrKWIrPQoiMCI7cmV0dXJuIG4oIjBiIithKyhiK2QpKX0pO3ZhciBCYj0idW5kZWZpbmVkIiE9PXR5cGVvZiBuYT9uYToidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxlYT1bXSxNPVtdLEpnPSJ1bmRlZmluZWQiIT09dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxTYz0hMSxqaD17fS50b1N0cmluZyxSZT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qaC5jYWxsKGEpfTttLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09QmIuVFlQRURfQVJSQVlfU1VQUE9SVD9CYi5UWVBFRF9BUlJBWV9TVVBQT1JUOiEwO3ZhciBraD1tLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzO20ucG9vbFNpemU9ODE5MjttLl9hdWdtZW50PWZ1bmN0aW9uKGEpe2EuX19wcm90b19fPW0ucHJvdG90eXBlO3JldHVybiBhfTttLmZyb209ZnVuY3Rpb24oYSwKYixkKXtyZXR1cm4gT2UobnVsbCxhLGIsZCl9O20uVFlQRURfQVJSQVlfU1VQUE9SVCYmKG0ucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxtLl9fcHJvdG9fXz1VaW50OEFycmF5KTttLmFsbG9jPWZ1bmN0aW9uKGEsYixkKXtRZShhKTtyZXR1cm4gYT0wPj1hP21hKG51bGwsYSk6dm9pZCAwIT09Yj8ic3RyaW5nIj09PXR5cGVvZiBkP21hKG51bGwsYSkuZmlsbChiLGQpOm1hKG51bGwsYSkuZmlsbChiKTptYShudWxsLGEpfTttLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGEpe3JldHVybiBUYyhudWxsLGEpfTttLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihhKXtyZXR1cm4gVGMobnVsbCxhKX07bS5pc0J1ZmZlcj1ZZTttLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtpZighZmEoYSl8fCFmYShiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoYT09PWIpcmV0dXJuIDA7Zm9yKHZhciBkPWEubGVuZ3RoLGU9Yi5sZW5ndGgsCmY9MCxnPU1hdGgubWluKGQsZSk7ZjxnOysrZilpZihhW2ZdIT09YltmXSl7ZD1hW2ZdO2U9YltmXTticmVha31yZXR1cm4gZDxlPy0xOmU8ZD8xOjB9O20uaXNFbmNvZGluZz1mdW5jdGlvbihhKXtzd2l0Y2goU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCkpe2Nhc2UgImhleCI6Y2FzZSAidXRmOCI6Y2FzZSAidXRmLTgiOmNhc2UgImFzY2lpIjpjYXNlICJsYXRpbjEiOmNhc2UgImJpbmFyeSI6Y2FzZSAiYmFzZTY0IjpjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTttLmNvbmNhdD1mdW5jdGlvbihhLGIpe2lmKCFSZShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWEubGVuZ3RoKXJldHVybiBtLmFsbG9jKDApO3ZhciBkO2lmKHZvaWQgMD09PWIpZm9yKGQ9Yj0wO2Q8YS5sZW5ndGg7KytkKWIrPQphW2RdLmxlbmd0aDtiPW0uYWxsb2NVbnNhZmUoYik7dmFyIGU9MDtmb3IoZD0wO2Q8YS5sZW5ndGg7KytkKXt2YXIgZj1hW2RdO2lmKCFmYShmKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7Zi5jb3B5KGIsZSk7ZSs9Zi5sZW5ndGh9cmV0dXJuIGJ9O20uYnl0ZUxlbmd0aD1QZTttLnByb3RvdHlwZS5faXNCdWZmZXI9ITA7bS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sZW5ndGg7aWYoMCE9PWElMil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGI9MDtiPGE7Yis9MilNYSh0aGlzLGIsYisxKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sZW5ndGg7aWYoMCE9PWElNCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTsKZm9yKHZhciBiPTA7YjxhO2IrPTQpTWEodGhpcyxiLGIrMyksTWEodGhpcyxiKzEsYisyKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sZW5ndGg7aWYoMCE9PWElOCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGI9MDtiPGE7Yis9OClNYSh0aGlzLGIsYis3KSxNYSh0aGlzLGIrMSxiKzYpLE1hKHRoaXMsYisyLGIrNSksTWEodGhpcyxiKzMsYis0KTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxlbmd0aHwwO3JldHVybiAwPT09YT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9UZSh0aGlzLDAsYSk6SGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfTttLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYSl7aWYoIWZhKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTsKcmV0dXJuIHRoaXM9PT1hPyEwOjA9PT1tLmNvbXBhcmUodGhpcyxhKX07bS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBhPSIiOzA8dGhpcy5sZW5ndGgmJihhPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLDUwPHRoaXMubGVuZ3RoJiYoYSs9IiAuLi4gIikpO3JldHVybiI8QnVmZmVyICIrYSsiPiJ9O20ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiLGQsZSxmKXtpZighZmEoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3ZvaWQgMD09PWImJihiPTApO3ZvaWQgMD09PWQmJihkPWE/YS5sZW5ndGg6MCk7dm9pZCAwPT09ZSYmKGU9MCk7dm9pZCAwPT09ZiYmKGY9dGhpcy5sZW5ndGgpO2lmKDA+Ynx8ZD5hLmxlbmd0aHx8MD5lfHxmPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihlPj1mJiZiPj1kKXJldHVybiAwOwppZihlPj1mKXJldHVybi0xO2lmKGI+PWQpcmV0dXJuIDE7Yj4+Pj0wO2Q+Pj49MDtlPj4+PTA7Zj4+Pj0wO2lmKHRoaXM9PT1hKXJldHVybiAwO3ZhciBnPWYtZSxoPWQtYixrPU1hdGgubWluKGcsaCk7ZT10aGlzLnNsaWNlKGUsZik7YT1hLnNsaWNlKGIsZCk7Zm9yKGI9MDtiPGs7KytiKWlmKGVbYl0hPT1hW2JdKXtnPWVbYl07aD1hW2JdO2JyZWFrfXJldHVybiBnPGg/LTE6aDxnPzE6MH07bS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oYSxiLGQpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGEsYixkKX07bS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIFVlKHRoaXMsYSxiLGQsITApfTttLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIFVlKHRoaXMsYSxiLGQsITEpfTttLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhLGIsZCxlKXtpZih2b2lkIDA9PT1iKWU9InV0ZjgiLGQ9dGhpcy5sZW5ndGgsYj0wO2Vsc2UgaWYodm9pZCAwPT09CmQmJiJzdHJpbmciPT09dHlwZW9mIGIpZT1iLGQ9dGhpcy5sZW5ndGgsYj0wO2Vsc2UgaWYoaXNGaW5pdGUoYikpYnw9MCxpc0Zpbml0ZShkKT8oZHw9MCx2b2lkIDA9PT1lJiYoZT0idXRmOCIpKTooZT1kLGQ9dm9pZCAwKTtlbHNlIHRocm93IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3ZhciBmPXRoaXMubGVuZ3RoLWI7aWYodm9pZCAwPT09ZHx8ZD5mKWQ9ZjtpZigwPGEubGVuZ3RoJiYoMD5kfHwwPmIpfHxiPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO2V8fChlPSJ1dGY4Iik7Zm9yKGY9ITE7Oylzd2l0Y2goZSl7Y2FzZSAiaGV4IjphOntiPU51bWJlcihiKXx8MDtlPXRoaXMubGVuZ3RoLWI7ZD8oZD1OdW1iZXIoZCksZD5lJiYoZD1lKSk6ZD1lO2U9YS5sZW5ndGg7aWYoMCE9PWUlMil0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTsKZD5lLzImJihkPWUvMik7Zm9yKGU9MDtlPGQ7KytlKXtmPXBhcnNlSW50KGEuc3Vic3RyKDIqZSwyKSwxNik7aWYoaXNOYU4oZikpe2E9ZTticmVhayBhfXRoaXNbYitlXT1mfWE9ZX1yZXR1cm4gYTtjYXNlICJ1dGY4IjpjYXNlICJ1dGYtOCI6cmV0dXJuIHViKFhiKGEsdGhpcy5sZW5ndGgtYiksdGhpcyxiLGQpO2Nhc2UgImFzY2lpIjpyZXR1cm4gdWIoWGUoYSksdGhpcyxiLGQpO2Nhc2UgImxhdGluMSI6Y2FzZSAiYmluYXJ5IjpyZXR1cm4gdWIoWGUoYSksdGhpcyxiLGQpO2Nhc2UgImJhc2U2NCI6cmV0dXJuIHViKFNlKGEpLHRoaXMsYixkKTtjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOmU9YTtmPXRoaXMubGVuZ3RoLWI7Zm9yKHZhciBnPVtdLGg9MDtoPGUubGVuZ3RoJiYhKDA+KGYtPTIpKTsrK2gpe3ZhciBrPWUuY2hhckNvZGVBdChoKTthPWs+Pjg7ayU9MjU2O2cucHVzaChrKTtnLnB1c2goYSl9cmV0dXJuIHViKGcsCnRoaXMsYixkKTtkZWZhdWx0OmlmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPSgiIitlKS50b0xvd2VyQ2FzZSgpO2Y9ITB9fTttLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBXZT00MDk2O20ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5sZW5ndGg7YT1+fmE7Yj12b2lkIDA9PT1iP2Q6fn5iOzA+YT8oYSs9ZCwwPmEmJihhPTApKTphPmQmJihhPWQpOzA+Yj8oYis9ZCwwPmImJihiPTApKTpiPmQmJihiPWQpO2I8YSYmKGI9YSk7aWYobS5UWVBFRF9BUlJBWV9TVVBQT1JUKWI9dGhpcy5zdWJhcnJheShhLGIpLGIuX19wcm90b19fPW0ucHJvdG90eXBlO2Vsc2V7ZD1iLWE7Yj1uZXcgbShkLHZvaWQgMCk7Zm9yKHZhciBlPTA7ZTxkOysrZSliW2VdPXRoaXNbZSthXX1yZXR1cm4gYn07Cm0ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYSxiLGQpe2F8PTA7Ynw9MDtkfHxJKGEsYix0aGlzLmxlbmd0aCk7ZD10aGlzW2FdO2Zvcih2YXIgZT0xLGY9MDsrK2Y8YiYmKGUqPTI1Nik7KWQrPXRoaXNbYStmXSplO3JldHVybiBkfTttLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGEsYixkKXthfD0wO2J8PTA7ZHx8SShhLGIsdGhpcy5sZW5ndGgpO2Q9dGhpc1thKy0tYl07Zm9yKHZhciBlPTE7MDxiJiYoZSo9MjU2KTspZCs9dGhpc1thKy0tYl0qZTtyZXR1cm4gZH07bS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGEsYil7Ynx8SShhLDEsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2FdfTttLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsMix0aGlzLmxlbmd0aCk7cmV0dXJuIHRoaXNbYV18dGhpc1thKzFdPDw4fTttLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsMix0aGlzLmxlbmd0aCk7CnJldHVybiB0aGlzW2FdPDw4fHRoaXNbYSsxXX07bS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGEsYil7Ynx8SShhLDQsdGhpcy5sZW5ndGgpO3JldHVybih0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2KSsxNjc3NzIxNip0aGlzW2ErM119O20ucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihhLGIpe2J8fEkoYSw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gMTY3NzcyMTYqdGhpc1thXSsodGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdKX07bS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGEsYixkKXthfD0wO2J8PTA7ZHx8SShhLGIsdGhpcy5sZW5ndGgpO2Q9dGhpc1thXTtmb3IodmFyIGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtkPj0xMjgqZSYmKGQtPU1hdGgucG93KDIsOCpiKSk7cmV0dXJuIGR9O20ucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihhLGIsZCl7YXw9MDtifD0wO2R8fEkoYSwKYix0aGlzLmxlbmd0aCk7ZD1iO2Zvcih2YXIgZT0xLGY9dGhpc1thKy0tZF07MDxkJiYoZSo9MjU2KTspZis9dGhpc1thKy0tZF0qZTtmPj0xMjgqZSYmKGYtPU1hdGgucG93KDIsOCpiKSk7cmV0dXJuIGZ9O20ucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGEsYil7Ynx8SShhLDEsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2FdJjEyOD8tMSooMjU1LXRoaXNbYV0rMSk6dGhpc1thXX07bS5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsMix0aGlzLmxlbmd0aCk7YT10aGlzW2FdfHRoaXNbYSsxXTw8ODtyZXR1cm4gYSYzMjc2OD9hfDQyOTQ5MDE3NjA6YX07bS5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsMix0aGlzLmxlbmd0aCk7YT10aGlzW2ErMV18dGhpc1thXTw8ODtyZXR1cm4gYSYzMjc2OD9hfDQyOTQ5MDE3NjA6YX07bS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsNCx0aGlzLmxlbmd0aCk7CnJldHVybiB0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2fHRoaXNbYSszXTw8MjR9O20ucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGEsYil7Ynx8SShhLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2FdPDwyNHx0aGlzW2ErMV08PDE2fHRoaXNbYSsyXTw8OHx0aGlzW2ErM119O20ucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGEsYil7Ynx8SShhLDQsdGhpcy5sZW5ndGgpO3JldHVybiBWYih0aGlzLGEsITAsMjMsNCl9O20ucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGEsYil7Ynx8SShhLDQsdGhpcy5sZW5ndGgpO3JldHVybiBWYih0aGlzLGEsITEsMjMsNCl9O20ucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihhLGIpe2J8fEkoYSw4LHRoaXMubGVuZ3RoKTtyZXR1cm4gVmIodGhpcyxhLCEwLDUyLDgpfTttLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsOCx0aGlzLmxlbmd0aCk7cmV0dXJuIFZiKHRoaXMsCmEsITEsNTIsOCl9O20ucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGEsYixkLGUpe2E9K2E7Ynw9MDtkfD0wO2V8fFYodGhpcyxhLGIsZCxNYXRoLnBvdygyLDgqZCktMSwwKTtlPTE7dmFyIGY9MDtmb3IodGhpc1tiXT1hJjI1NTsrK2Y8ZCYmKGUqPTI1Nik7KXRoaXNbYitmXT1hL2UmMjU1O3JldHVybiBiK2R9O20ucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGEsYixkLGUpe2E9K2E7Ynw9MDtkfD0wO2V8fFYodGhpcyxhLGIsZCxNYXRoLnBvdygyLDgqZCktMSwwKTtlPWQtMTt2YXIgZj0xO2Zvcih0aGlzW2IrZV09YSYyNTU7MDw9LS1lJiYoZio9MjU2KTspdGhpc1tiK2VdPWEvZiYyNTU7cmV0dXJuIGIrZH07bS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsMSwyNTUsMCk7bS5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKTt0aGlzW2JdPWEmMjU1O3JldHVybiBiKzF9O20ucHJvdG90eXBlLndyaXRlVUludDE2TEU9CmZ1bmN0aW9uKGEsYixkKXthPSthO2J8PTA7ZHx8Vih0aGlzLGEsYiwyLDY1NTM1LDApO20uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hJjI1NSx0aGlzW2IrMV09YT4+PjgpOlliKHRoaXMsYSxiLCEwKTtyZXR1cm4gYisyfTttLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGEsYixkKXthPSthO2J8PTA7ZHx8Vih0aGlzLGEsYiwyLDY1NTM1LDApO20uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+OCx0aGlzW2IrMV09YSYyNTUpOlliKHRoaXMsYSxiLCExKTtyZXR1cm4gYisyfTttLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGEsYixkKXthPSthO2J8PTA7ZHx8Vih0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCk7bS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2IrM109YT4+PjI0LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYl09YSYyNTUpOlpiKHRoaXMsYSxiLCEwKTtyZXR1cm4gYis0fTttLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPQpmdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsNCw0Mjk0OTY3Mjk1LDApO20uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+MjQsdGhpc1tiKzFdPWE+Pj4xNix0aGlzW2IrMl09YT4+PjgsdGhpc1tiKzNdPWEmMjU1KTpaYih0aGlzLGEsYiwhMSk7cmV0dXJuIGIrNH07bS5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihhLGIsZCxlKXthPSthO2J8PTA7ZXx8KGU9TWF0aC5wb3coMiw4KmQtMSksVih0aGlzLGEsYixkLGUtMSwtZSkpO2U9MDt2YXIgZj0xLGc9MDtmb3IodGhpc1tiXT1hJjI1NTsrK2U8ZCYmKGYqPTI1Nik7KTA+YSYmMD09PWcmJjAhPT10aGlzW2IrZS0xXSYmKGc9MSksdGhpc1tiK2VdPShhL2Y+PjApLWcmMjU1O3JldHVybiBiK2R9O20ucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oYSxiLGQsZSl7YT0rYTtifD0wO2V8fChlPU1hdGgucG93KDIsOCpkLTEpLFYodGhpcyxhLGIsZCxlLTEsLWUpKTtlPWQtMTt2YXIgZj0KMSxnPTA7Zm9yKHRoaXNbYitlXT1hJjI1NTswPD0tLWUmJihmKj0yNTYpOykwPmEmJjA9PT1nJiYwIT09dGhpc1tiK2UrMV0mJihnPTEpLHRoaXNbYitlXT0oYS9mPj4wKS1nJjI1NTtyZXR1cm4gYitkfTttLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYSxiLGQpe2E9K2E7Ynw9MDtkfHxWKHRoaXMsYSxiLDEsMTI3LC0xMjgpO20uVFlQRURfQVJSQVlfU1VQUE9SVHx8KGE9TWF0aC5mbG9vcihhKSk7MD5hJiYoYT0yNTUrYSsxKTt0aGlzW2JdPWEmMjU1O3JldHVybiBiKzF9O20ucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsMiwzMjc2NywtMzI3NjgpO20uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hJjI1NSx0aGlzW2IrMV09YT4+PjgpOlliKHRoaXMsYSxiLCEwKTtyZXR1cm4gYisyfTttLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oYSxiLGQpe2E9K2E7Ynw9MDtkfHxWKHRoaXMsYSxiLAoyLDMyNzY3LC0zMjc2OCk7bS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT1hJjI1NSk6WWIodGhpcyxhLGIsITEpO3JldHVybiBiKzJ9O20ucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KTttLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YSYyNTUsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzNdPWE+Pj4yNCk6WmIodGhpcyxhLGIsITApO3JldHVybiBiKzR9O20ucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KTswPmEmJihhPTQyOTQ5NjcyOTUrYSsxKTttLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0KYSYyNTUpOlpiKHRoaXMsYSxiLCExKTtyZXR1cm4gYis0fTttLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYSxiLGQpe2R8fCRiKHRoaXMsYSxiLDQpO1diKHRoaXMsYSxiLCEwLDIzLDQpO3JldHVybiBiKzR9O20ucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihhLGIsZCl7ZHx8JGIodGhpcyxhLGIsNCk7V2IodGhpcyxhLGIsITEsMjMsNCk7cmV0dXJuIGIrNH07bS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihhLGIsZCl7ZHx8JGIodGhpcyxhLGIsOCk7V2IodGhpcyxhLGIsITAsNTIsOCk7cmV0dXJuIGIrOH07bS5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihhLGIsZCl7ZHx8JGIodGhpcyxhLGIsOCk7V2IodGhpcyxhLGIsITEsNTIsOCk7cmV0dXJuIGIrOH07bS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhLGIsZCxlKXtkfHwoZD0wKTtlfHwwPT09ZXx8KGU9dGhpcy5sZW5ndGgpO2I+PWEubGVuZ3RoJiYoYj1hLmxlbmd0aCk7CmJ8fChiPTApOzA8ZSYmZTxkJiYoZT1kKTtpZihlPT09ZHx8MD09PWEubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoMD5iKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoMD5kfHxkPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKDA+ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtlPnRoaXMubGVuZ3RoJiYoZT10aGlzLmxlbmd0aCk7YS5sZW5ndGgtYjxlLWQmJihlPWEubGVuZ3RoLWIrZCk7dmFyIGY9ZS1kO2lmKHRoaXM9PT1hJiZkPGImJmI8ZSlmb3IoZT1mLTE7MDw9ZTstLWUpYVtlK2JdPXRoaXNbZStkXTtlbHNlIGlmKDFFMz5mfHwhbS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihlPTA7ZTxmOysrZSlhW2UrYl09dGhpc1tlK2RdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoYSx0aGlzLnN1YmFycmF5KGQsCmQrZiksYik7cmV0dXJuIGZ9O20ucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYSxiLGQsZSl7aWYoInN0cmluZyI9PT10eXBlb2YgYSl7InN0cmluZyI9PT10eXBlb2YgYj8oZT1iLGI9MCxkPXRoaXMubGVuZ3RoKToic3RyaW5nIj09PXR5cGVvZiBkJiYoZT1kLGQ9dGhpcy5sZW5ndGgpO2lmKDE9PT1hLmxlbmd0aCl7dmFyIGY9YS5jaGFyQ29kZUF0KDApOzI1Nj5mJiYoYT1mKX1pZih2b2lkIDAhPT1lJiYic3RyaW5nIiE9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09PXR5cGVvZiBlJiYhbS5pc0VuY29kaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7fWVsc2UibnVtYmVyIj09PXR5cGVvZiBhJiYoYSY9MjU1KTtpZigwPmJ8fHRoaXMubGVuZ3RoPGJ8fHRoaXMubGVuZ3RoPGQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKGQ8PQpiKXJldHVybiB0aGlzO2I+Pj49MDtkPXZvaWQgMD09PWQ/dGhpcy5sZW5ndGg6ZD4+PjA7YXx8KGE9MCk7aWYoIm51bWJlciI9PT10eXBlb2YgYSlmb3IoZT1iO2U8ZDsrK2UpdGhpc1tlXT1hO2Vsc2UgZm9yKGE9ZmEoYSk/YTpYYigobmV3IG0oYSxlKSkudG9TdHJpbmcoKSksZj1hLmxlbmd0aCxlPTA7ZTxkLWI7KytlKXRoaXNbZStiXT1hW2UlZl07cmV0dXJuIHRoaXN9O3ZhciBJZz0vW14rXC8wLTlBLVphLXotX10vZyxmYz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxJTlNQRUNUX01BWF9CWVRFUzo1MCxrTWF4TGVuZ3RoOmtoLEJ1ZmZlcjptLFNsb3dCdWZmZXI6ZnVuY3Rpb24oYSl7K2EhPWEmJihhPTApO3JldHVybiBtLmFsbG9jKCthKX0saXNCdWZmZXI6WWV9KSxHPW0sZ2M9InVuZGVmaW5lZCIhPT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPT10eXBlb2YgbmE/bmE6InVuZGVmaW5lZCIhPT0KdHlwZW9mIHNlbGY/c2VsZjp7fSxyYT0kZSx5YT1hZjsiZnVuY3Rpb24iPT09dHlwZW9mIEJiLnNldFRpbWVvdXQmJihyYT1zZXRUaW1lb3V0KTsiZnVuY3Rpb24iPT09dHlwZW9mIEJiLmNsZWFyVGltZW91dCYmKHlhPWNsZWFyVGltZW91dCk7dmFyIHNhPVtdLGFiPSExLE5hLGFjPS0xO2VmLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTt2YXIgamI9QmIucGVyZm9ybWFuY2V8fHt9LGxoPWpiLm5vd3x8amIubW96Tm93fHxqYi5tc05vd3x8amIub05vd3x8amIud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxtaD1uZXcgRGF0ZSxuaD17bmV4dFRpY2s6ZGYsdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpPYSxhZGRMaXN0ZW5lcjpPYSxvbmNlOk9hLG9mZjpPYSxyZW1vdmVMaXN0ZW5lcjpPYSxyZW1vdmVBbGxMaXN0ZW5lcnM6T2EsCmVtaXQ6T2EsYmluZGluZzpmdW5jdGlvbigpe3Rocm93IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpO30sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbigpe3Rocm93IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKTt9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihhKXt2YXIgYj0uMDAxKmxoLmNhbGwoamIpLGQ9TWF0aC5mbG9vcihiKTtiPU1hdGguZmxvb3IoYiUxKjFFOSk7YSYmKGQtPWFbMF0sYi09YVsxXSwwPmImJihkLS0sYis9MUU5KSk7cmV0dXJuW2QsYl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtbWgpLzFFM319LHRmPVdjKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgZCBpbiBhKWJbZF09YVtkXX1mdW5jdGlvbiBlKGEsYixkKXtyZXR1cm4gZihhLApiLGQpfXZhciBmPWZjLkJ1ZmZlcjtmLmZyb20mJmYuYWxsb2MmJmYuYWxsb2NVbnNhZmUmJmYuYWxsb2NVbnNhZmVTbG93P2EuZXhwb3J0cz1mYzooZChmYyxiKSxiLkJ1ZmZlcj1lKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGYucHJvdG90eXBlKTtkKGYsZSk7ZS5mcm9tPWZ1bmN0aW9uKGEsYixkKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGYoYSxiLGQpfTtlLmFsbG9jPWZ1bmN0aW9uKGEsYixkKXtpZigibnVtYmVyIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTthPWYoYSk7dm9pZCAwIT09Yj8ic3RyaW5nIj09PXR5cGVvZiBkP2EuZmlsbChiLGQpOmEuZmlsbChiKTphLmZpbGwoMCk7cmV0dXJuIGF9O2UuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oYSl7aWYoIm51bWJlciIhPT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7CnJldHVybiBmKGEpfTtlLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihhKXtpZigibnVtYmVyIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gZmMuU2xvd0J1ZmZlcihhKX19KSxvaD1XYyhmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoKXt0aHJvdyBFcnJvcigic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpO31mdW5jdGlvbiBlKGEsYil7aWYoIm51bWJlciIhPT10eXBlb2YgYXx8YSE9PWEpdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1iZXIiKTtpZihhPnJ8fDA+YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKGE+bXx8YT5iKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Cn1mdW5jdGlvbiBmKGEsYixkKXtpZigibnVtYmVyIiE9PXR5cGVvZiBhfHxhIT09YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihhPnJ8fDA+YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihhK2I+ZHx8YT5tKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIik7fWZ1bmN0aW9uIGcoYSxiLGQsZyl7aWYoIShsLmlzQnVmZmVyKGEpfHxhIGluc3RhbmNlb2YgZ2MuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBiKWc9YixiPTAsZD1hLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PT10eXBlb2YgZClnPWQsZD1hLmxlbmd0aC1iO2Vsc2UgaWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBnKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CmUoYixhLmxlbmd0aCk7ZihkLGIsYS5sZW5ndGgpO3JldHVybiBoKGEsYixkLGcpfWZ1bmN0aW9uIGgoYSxiLGQsZSl7Yj1uZXcgVWludDhBcnJheShhLmJ1ZmZlcixiLGQpO24uZ2V0UmFuZG9tVmFsdWVzKGIpO2lmKGUpZGYoZnVuY3Rpb24oKXtlKG51bGwsYSl9KTtlbHNlIHJldHVybiBhfWZ1bmN0aW9uIGsoYSxiLGQpeyJ1bmRlZmluZWQiPT09dHlwZW9mIGImJihiPTApO2lmKCEobC5pc0J1ZmZlcihhKXx8YSBpbnN0YW5jZW9mIGdjLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2UoYixhLmxlbmd0aCk7dm9pZCAwPT09ZCYmKGQ9YS5sZW5ndGgtYik7ZihkLGIsYS5sZW5ndGgpO3JldHVybiBoKGEsYixkKX12YXIgbD10Zi5CdWZmZXIsbT10Zi5rTWF4TGVuZ3RoLG49Z2MuY3J5cHRvfHxnYy5tc0NyeXB0byxyPU1hdGgucG93KDIsMzIpLTE7biYmbi5nZXRSYW5kb21WYWx1ZXM/KGIucmFuZG9tRmlsbD0KZyxiLnJhbmRvbUZpbGxTeW5jPWspOihiLnJhbmRvbUZpbGw9ZCxiLnJhbmRvbUZpbGxTeW5jPWQpfSkscGg9V2MoZnVuY3Rpb24oYSl7YS5leHBvcnRzPW9ofSkucmFuZG9tRmlsbFN5bmMscWg9TWF0aC5mbG9vciguMDAxKihEYXRlLm5vdygpLXBlcmZvcm1hbmNlLm5vdygpKSksQ2I9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9IiIsYj0hMSxkLGU9YXJndW1lbnRzLmxlbmd0aC0xOy0xPD1lJiYhYjtlLS0pe2lmKDA8PWUpdmFyIGY9YXJndW1lbnRzW2VdO2Vsc2Ugdm9pZCAwPT09ZCYmKGQ9bmguY3dkKCkpLGY9ZDtoYShmKTswIT09Zi5sZW5ndGgmJihhPWYrIi8iK2EsYj00Nz09PWYuY2hhckNvZGVBdCgwKSl9YT1mZihhLCFiKTtyZXR1cm4gYj8wPGEubGVuZ3RoPyIvIithOiIvIjowPGEubGVuZ3RoP2E6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24oYSl7aGEoYSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiIuIjt2YXIgYj00Nz09PWEuY2hhckNvZGVBdCgwKSxkPTQ3PT09CmEuY2hhckNvZGVBdChhLmxlbmd0aC0xKTthPWZmKGEsIWIpOzAhPT1hLmxlbmd0aHx8Ynx8KGE9Ii4iKTswPGEubGVuZ3RoJiZkJiYoYSs9Ii8iKTtyZXR1cm4gYj8iLyIrYTphfSxpc0Fic29sdXRlOmZ1bmN0aW9uKGEpe2hhKGEpO3JldHVybiAwPGEubGVuZ3RoJiY0Nz09PWEuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGEsYj0wO2I8YXJndW1lbnRzLmxlbmd0aDsrK2Ipe3ZhciBkPWFyZ3VtZW50c1tiXTtoYShkKTswPGQubGVuZ3RoJiYoYT12b2lkIDA9PT1hP2Q6YSsoIi8iK2QpKX1yZXR1cm4gdm9pZCAwPT09YT8iLiI6Q2Iubm9ybWFsaXplKGEpfSxyZWxhdGl2ZTpmdW5jdGlvbihhLGIpe2hhKGEpO2hhKGIpO2lmKGE9PT1iKXJldHVybiIiO2E9Q2IucmVzb2x2ZShhKTtiPUNiLnJlc29sdmUoYik7aWYoYT09PWIpcmV0dXJuIiI7Zm9yKHZhciBkPTE7ZDxhLmxlbmd0aCYmNDc9PT1hLmNoYXJDb2RlQXQoZCk7KytkKTsKZm9yKHZhciBlPWEubGVuZ3RoLGY9ZS1kLGc9MTtnPGIubGVuZ3RoJiY0Nz09PWIuY2hhckNvZGVBdChnKTsrK2cpO2Zvcih2YXIgaD1iLmxlbmd0aC1nLGs9ZjxoP2Y6aCxsPS0xLG09MDttPD1rOysrbSl7aWYobT09PWspe2lmKGg+ayl7aWYoNDc9PT1iLmNoYXJDb2RlQXQoZyttKSlyZXR1cm4gYi5zbGljZShnK20rMSk7aWYoMD09PW0pcmV0dXJuIGIuc2xpY2UoZyttKX1lbHNlIGY+ayYmKDQ3PT09YS5jaGFyQ29kZUF0KGQrbSk/bD1tOjA9PT1tJiYobD0wKSk7YnJlYWt9dmFyIG49YS5jaGFyQ29kZUF0KGQrbSkscj1iLmNoYXJDb2RlQXQoZyttKTtpZihuIT09cilicmVhaztlbHNlIDQ3PT09biYmKGw9bSl9Zj0iIjtmb3IobT1kK2wrMTttPD1lOysrbSlpZihtPT09ZXx8NDc9PT1hLmNoYXJDb2RlQXQobSkpZj0wPT09Zi5sZW5ndGg/ZisiLi4iOmYrIi8uLiI7aWYoMDxmLmxlbmd0aClyZXR1cm4gZitiLnNsaWNlKGcrbCk7Zys9bDs0Nz09PWIuY2hhckNvZGVBdChnKSYmKytnOwpyZXR1cm4gYi5zbGljZShnKX0sX21ha2VMb25nOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxkaXJuYW1lOmZ1bmN0aW9uKGEpe2hhKGEpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBiPWEuY2hhckNvZGVBdCgwKSxkPTQ3PT09YixlPS0xLGY9ITAsZz1hLmxlbmd0aC0xOzE8PWc7LS1nKWlmKGI9YS5jaGFyQ29kZUF0KGcpLDQ3PT09Yil7aWYoIWYpe2U9ZzticmVha319ZWxzZSBmPSExO3JldHVybi0xPT09ZT9kPyIvIjoiLiI6ZCYmMT09PWU/Ii8vIjphLnNsaWNlKDAsZSl9LGJhc2VuYW1lOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YiYmInN0cmluZyIhPT10eXBlb2YgYil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7aGEoYSk7dmFyIGQ9MCxlPS0xLGY9ITAsZztpZih2b2lkIDAhPT1iJiYwPGIubGVuZ3RoJiZiLmxlbmd0aDw9YS5sZW5ndGgpe2lmKGIubGVuZ3RoPT09YS5sZW5ndGgmJmI9PT1hKXJldHVybiIiOwp2YXIgaD1iLmxlbmd0aC0xLGs9LTE7Zm9yKGc9YS5sZW5ndGgtMTswPD1nOy0tZyl7dmFyIGw9YS5jaGFyQ29kZUF0KGcpO2lmKDQ3PT09bCl7aWYoIWYpe2Q9ZysxO2JyZWFrfX1lbHNlLTE9PT1rJiYoZj0hMSxrPWcrMSksMDw9aCYmKGw9PT1iLmNoYXJDb2RlQXQoaCk/LTE9PT0tLWgmJihlPWcpOihoPS0xLGU9aykpfWQ9PT1lP2U9azotMT09PWUmJihlPWEubGVuZ3RoKTtyZXR1cm4gYS5zbGljZShkLGUpfWZvcihnPWEubGVuZ3RoLTE7MDw9ZzstLWcpaWYoNDc9PT1hLmNoYXJDb2RlQXQoZykpe2lmKCFmKXtkPWcrMTticmVha319ZWxzZS0xPT09ZSYmKGY9ITEsZT1nKzEpO3JldHVybi0xPT09ZT8iIjphLnNsaWNlKGQsZSl9LGV4dG5hbWU6ZnVuY3Rpb24oYSl7aGEoYSk7Zm9yKHZhciBiPS0xLGQ9MCxlPS0xLGY9ITAsZz0wLGg9YS5sZW5ndGgtMTswPD1oOy0taCl7dmFyIGs9YS5jaGFyQ29kZUF0KGgpO2lmKDQ3PT09ayl7aWYoIWYpe2Q9aCsxO2JyZWFrfX1lbHNlLTE9PT0KZSYmKGY9ITEsZT1oKzEpLDQ2PT09az8tMT09PWI/Yj1oOjEhPT1nJiYoZz0xKTotMSE9PWImJihnPS0xKX1yZXR1cm4tMT09PWJ8fC0xPT09ZXx8MD09PWd8fDE9PT1nJiZiPT09ZS0xJiZiPT09ZCsxPyIiOmEuc2xpY2UoYixlKX0sZm9ybWF0OmZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hfHwib2JqZWN0IiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBhKTt2YXIgYj1hLmRpcnx8YS5yb290LGQ9YS5iYXNlfHwoYS5uYW1lfHwiIikrKGEuZXh0fHwiIik7cmV0dXJuIGE9Yj9iPT09YS5yb290P2IrZDpiKyIvIitkOmR9LHBhcnNlOmZ1bmN0aW9uKGEpe2hhKGEpO3ZhciBiPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7dmFyIGQ9YS5jaGFyQ29kZUF0KDApLGU9NDc9PT1kO2lmKGUpe2Iucm9vdD0KIi8iO3ZhciBmPTF9ZWxzZSBmPTA7Zm9yKHZhciBnPS0xLGg9MCxrPS0xLGw9ITAsbT1hLmxlbmd0aC0xLG49MDttPj1mOy0tbSlpZihkPWEuY2hhckNvZGVBdChtKSw0Nz09PWQpe2lmKCFsKXtoPW0rMTticmVha319ZWxzZS0xPT09ayYmKGw9ITEsaz1tKzEpLDQ2PT09ZD8tMT09PWc/Zz1tOjEhPT1uJiYobj0xKTotMSE9PWcmJihuPS0xKTstMT09PWd8fC0xPT09a3x8MD09PW58fDE9PT1uJiZnPT09ay0xJiZnPT09aCsxPy0xIT09ayYmKGIuYmFzZT0wPT09aCYmZT9iLm5hbWU9YS5zbGljZSgxLGspOmIubmFtZT1hLnNsaWNlKGgsaykpOigwPT09aCYmZT8oYi5uYW1lPWEuc2xpY2UoMSxnKSxiLmJhc2U9YS5zbGljZSgxLGspKTooYi5uYW1lPWEuc2xpY2UoaCxnKSxiLmJhc2U9YS5zbGljZShoLGspKSxiLmV4dD1hLnNsaWNlKGcsaykpOzA8aD9iLmRpcj1hLnNsaWNlKDAsaC0xKTplJiYoYi5kaXI9Ii8iKTtyZXR1cm4gYn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwsCnBvc2l4Om51bGx9LHVmPUNiLnBvc2l4PUNiLHJoPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLCJkZWZhdWx0Ijp1ZixfX21vZHVsZUV4cG9ydHM6dWZ9KSx3Zj17aHJ0aW1lOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtiPWEoYik7cmV0dXJuIDFFOSpiWzBdK2JbMV19fShmdW5jdGlvbihhKXt2YXIgYj0uMDAxKnBlcmZvcm1hbmNlLm5vdygpLGQ9TWF0aC5mbG9vcihiKStxaDtiPU1hdGguZmxvb3IoYiUxKjFFOSk7YSYmKGQtPWFbMF0sYi09YVsxXSwwPmImJihkLS0sYis9MUU5KSk7cmV0dXJuW2QsYl19KSxleGl0OmZ1bmN0aW9uKGEpe3Rocm93IG5ldyB2ZihhKTt9LGtpbGw6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IHNoKGEpO30scmFuZG9tRmlsbFN5bmM6cGgsaXNUVFk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scGF0aDpyaCxmczpudWxsfSxDLFJhPW4oMSksQmE9bigyKSxrYj1uKDQpLGxiPW4oOCksQ2E9bigxNiksaGQ9bigzMiksRGE9big2NCksbWI9bigxMjgpLApoYz1uKDI1NiksaWQ9big1MTIpLGpkPW4oMTAyNCksa2Q9bigyMDQ4KSxsZD1uKDQwOTYpLGljPW4oODE5MiksamM9bigxNjM4NCksbWQ9bigzMjc2OCksbmQ9big2NTUzNiksb2Q9bigxMzEwNzIpLHBkPW4oMjYyMTQ0KSxxZD1uKDUyNDI4OCkscmQ9bigxMDQ4NTc2KSxFYT1uKDIwOTcxNTIpLGtjPW4oNDE5NDMwNCksbGM9big4Mzg4NjA4KSxzZD1uKDE2Nzc3MjE2KSx0ZD1uKDMzNTU0NDMyKSx1ZD1uKDY3MTA4ODY0KSxTYT1uKDEzNDIxNzcyOCkseGY9bigyNjg0MzU0NTYpLGNiPVJhfEJhfGtifGxifENhfGhkfERhfG1ifGhjfGlkfGpkfGtkfGxkfGljfGpjfG1kfG5kfG9kfHBkfHFkfHJkfEVhfGxjfGtjfHNkfHVkfHRkfFNhfHhmLGxmPVJhfEJhfGtifGxifENhfGhkfERhfG1ifGhjfEVhfGtjfGxjfFNhLFBnPW4oMCksWWM9bGJ8Q2F8bWJ8aWR8amR8a2R8bGR8aWN8amN8bWR8bmR8b2R8cGR8cWR8cmR8RWF8bGN8c2R8dWR8dGR8U2EsamY9WWN8bGYsa2Y9QmF8bGJ8RGF8RWF8ClNhfHhmLE5nPUJhfGxifERhfEVhfFNhLE9nPW4oMCksTWc9e0UyQklHOjEsRUFDQ0VTOjIsRUFERFJJTlVTRTozLEVBRERSTk9UQVZBSUw6NCxFQUZOT1NVUFBPUlQ6NSxFQUxSRUFEWTo3LEVBR0FJTjo2LEVCQURGOjgsRUJBRE1TRzo5LEVCVVNZOjEwLEVDQU5DRUxFRDoxMSxFQ0hJTEQ6MTIsRUNPTk5BQk9SVEVEOjEzLEVDT05OUkVGVVNFRDoxNCxFQ09OTlJFU0VUOjE1LEVERUFETE9DSzoxNixFREVTVEFERFJSRVE6MTcsRURPTToxOCxFRFFVT1Q6MTksRUVYSVNUOjIwLEVGQVVMVDoyMSxFRkJJRzoyMixFSE9TVERPV046MjMsRUhPU1RVTlJFQUNIOjIzLEVJRFJNOjI0LEVJTFNFUToyNSxFSU5QUk9HUkVTUzoyNixFSU5UUjoyNyxFSU5WQUw6MjgsRUlPOjI5LEVJU0NPTk46MzAsRUlTRElSOjMxLEVMT09QOjMyLEVNRklMRTozMyxFTUxJTks6MzQsRU1TR1NJWkU6MzUsRU1VTFRJSE9QOjM2LEVOQU1FVE9PTE9ORzozNyxFTkVURE9XTjozOCxFTkVUUkVTRVQ6MzksRU5FVFVOUkVBQ0g6NDAsCkVORklMRTo0MSxFTk9CVUZTOjQyLEVOT0RFVjo0MyxFTk9FTlQ6NDQsRU5PRVhFQzo0NSxFTk9MQ0s6NDYsRU5PTElOSzo0NyxFTk9NRU06NDgsRU5PTVNHOjQ5LEVOT1BST1RPT1BUOjUwLEVOT1NQQzo1MSxFTk9TWVM6NTIsRU5PVENPTk46NTMsRU5PVERJUjo1NCxFTk9URU1QVFk6NTUsRU5PVFJFQ09WRVJBQkxFOjU2LEVOT1RTT0NLOjU3LEVOT1RUWTo1OSxFTlhJTzo2MCxFT1ZFUkZMT1c6NjEsRU9XTkVSREVBRDo2MixFUEVSTTo2MyxFUElQRTo2NCxFUFJPVE86NjUsRVBST1RPTk9TVVBQT1JUOjY2LEVQUk9UT1RZUEU6NjcsRVJBTkdFOjY4LEVST0ZTOjY5LEVTUElQRTo3MCxFU1JDSDo3MSxFU1RBTEU6NzIsRVRJTUVET1VUOjczLEVUWFRCU1k6NzQsRVhERVY6NzV9LHlmPShDPXt9LENbNl09IlNJR0hVUCIsQ1s4XT0iU0lHSU5UIixDWzExXT0iU0lHUVVJVCIsQ1s3XT0iU0lHSUxMIixDWzE1XT0iU0lHVFJBUCIsQ1swXT0iU0lHQUJSVCIsQ1syXT0iU0lHQlVTIixDWzVdPQoiU0lHRlBFIixDWzldPSJTSUdLSUxMIixDWzIwXT0iU0lHVVNSMSIsQ1sxMl09IlNJR1NFR1YiLENbMjFdPSJTSUdVU1IyIixDWzEwXT0iU0lHUElQRSIsQ1sxXT0iU0lHQUxSTSIsQ1sxNF09IlNJR1RFUk0iLENbM109IlNJR0NITEQiLENbNF09IlNJR0NPTlQiLENbMTNdPSJTSUdTVE9QIixDWzE2XT0iU0lHVFNUUCIsQ1sxN109IlNJR1RUSU4iLENbMThdPSJTSUdUVE9VIixDWzE5XT0iU0lHVVJHIixDWzIzXT0iU0lHWENQVSIsQ1syNF09IlNJR1hGU1oiLENbMjJdPSJTSUdWVEFMUk0iLEMpLHRoPVJhfEJhfENhfG1ifEVhfFNhLHpmPVJhfERhfENhfG1ifEVhfFNhLFhjPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZCl7dmFyIGU9YS5jYWxsKHRoaXMpfHx0aGlzO2UuZXJybm89ZDtPYmplY3Quc2V0UHJvdG90eXBlT2YoZSxiLnByb3RvdHlwZSk7cmV0dXJuIGV9UmMoYixhKTtyZXR1cm4gYn0oRXJyb3IpLHZmPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZCl7dmFyIGU9YS5jYWxsKHRoaXMsCiJXQVNJIEV4aXQgZXJyb3I6ICIrZCl8fHRoaXM7ZS5jb2RlPWQ7T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYi5wcm90b3R5cGUpO3JldHVybiBlfVJjKGIsYSk7cmV0dXJuIGJ9KEVycm9yKSxzaD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGQpe3ZhciBlPWEuY2FsbCh0aGlzLCJXQVNJIEtpbGwgc2lnbmFsOiAiK2QpfHx0aGlzO2Uuc2lnbmFsPWQ7T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYi5wcm90b3R5cGUpO3JldHVybiBlfVJjKGIsYSk7cmV0dXJuIGJ9KEVycm9yKSxBZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7ZnVuY3Rpb24gYihhKXtzd2l0Y2goYSl7Y2FzZSAxOnJldHVybiBBLmhydGltZSgpO2Nhc2UgMDpyZXR1cm4gUGEoRGF0ZS5ub3coKSk7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gQS5ocnRpbWUoKS1JO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGUoYSxiKXthPWdmKGgsYSk7aWYoYiE9PW4oMCkmJihhLnJpZ2h0cy5iYXNlJmIpPT09bigwKSl0aHJvdyBuZXcgWGMoNjMpOwpyZXR1cm4gYX1mdW5jdGlvbiBmKGEsYil7aC5yZWZyZXNoTWVtb3J5KCk7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDpifSxmdW5jdGlvbihiLGQpe2Q9YSs4KmQ7Yj1oLnZpZXcuZ2V0VWludDMyKGQsITApO2Q9aC52aWV3LmdldFVpbnQzMihkKzQsITApO3JldHVybiBuZXcgVWludDhBcnJheShoLm1lbW9yeS5idWZmZXIsYixkKX0pfXZhciBnLGg9dGhpcyxrPXt9O2EmJmEucHJlb3BlbnM/az1hLnByZW9wZW5zOmEmJmEucHJlb3BlbkRpcmVjdG9yaWVzJiYoaz1hLnByZW9wZW5EaXJlY3Rvcmllcyk7dmFyIGw9e307YSYmYS5lbnYmJihsPWEuZW52KTt2YXIgbT1bXTthJiZhLmFyZ3MmJihtPWEuYXJncyk7dmFyIEE9d2Y7YSYmYS5iaW5kaW5ncyYmKEE9YS5iaW5kaW5ncyk7dGhpcy52aWV3PXRoaXMubWVtb3J5PXZvaWQgMDt0aGlzLmJpbmRpbmdzPUE7dGhpcy5GRF9NQVA9bmV3IE1hcChbWzAse3JlYWw6MCxmaWxldHlwZToyLHJpZ2h0czp7YmFzZTp0aCxpbmhlcml0aW5nOm4oMCl9LApwYXRoOnZvaWQgMH1dLFsxLHtyZWFsOjEsZmlsZXR5cGU6MixyaWdodHM6e2Jhc2U6emYsaW5oZXJpdGluZzpuKDApfSxwYXRoOnZvaWQgMH1dLFsyLHtyZWFsOjIsZmlsZXR5cGU6MixyaWdodHM6e2Jhc2U6emYsaW5oZXJpdGluZzpuKDApfSxwYXRoOnZvaWQgMH1dXSk7dmFyIHI9dGhpcy5iaW5kaW5ncy5mcyx1PXRoaXMuYmluZGluZ3MucGF0aDt0cnl7Zm9yKHZhciBwPVNiKE9iamVjdC5lbnRyaWVzKGspKSx4PXAubmV4dCgpOyF4LmRvbmU7eD1wLm5leHQoKSl7dmFyIHk9VGIoeC52YWx1ZSwyKSx6PXlbMF0sQz15WzFdLEQ9ci5vcGVuU3luYyhDLHIuY29uc3RhbnRzLk9fUkRPTkxZKSxFPVViKHRoaXMuRkRfTUFQLmtleXMoKSkucmV2ZXJzZSgpWzBdKzE7dGhpcy5GRF9NQVAuc2V0KEUse3JlYWw6RCxmaWxldHlwZTozLHJpZ2h0czp7YmFzZTpZYyxpbmhlcml0aW5nOmpmfSxmYWtlUGF0aDp6LHBhdGg6Q30pfX1jYXRjaCh3KXt2YXIgSD17ZXJyb3I6d319ZmluYWxseXt0cnl7eCYmCiF4LmRvbmUmJihnPXAucmV0dXJuKSYmZy5jYWxsKHApfWZpbmFsbHl7aWYoSCl0aHJvdyBILmVycm9yO319dmFyIEk9QS5ocnRpbWUoKTt0aGlzLndhc2lJbXBvcnQ9e2FyZ3NfZ2V0OmZ1bmN0aW9uKGEsYil7aC5yZWZyZXNoTWVtb3J5KCk7dmFyIGQ9YSxlPWI7bS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2gudmlldy5zZXRVaW50MzIoZCxlLCEwKTtkKz00O2UrPUcuZnJvbShoLm1lbW9yeS5idWZmZXIpLndyaXRlKGErIlx4MDAiLGUpfSk7cmV0dXJuIDB9LGFyZ3Nfc2l6ZXNfZ2V0OmZ1bmN0aW9uKGEsYil7aC5yZWZyZXNoTWVtb3J5KCk7aC52aWV3LnNldFVpbnQzMihhLG0ubGVuZ3RoLCEwKTthPW0ucmVkdWNlKGZ1bmN0aW9uKGEsYil7cmV0dXJuIGErRy5ieXRlTGVuZ3RoKGIpKzF9LDApO2gudmlldy5zZXRVaW50MzIoYixhLCEwKTtyZXR1cm4gMH0sZW52aXJvbl9nZXQ6ZnVuY3Rpb24oYSxiKXtoLnJlZnJlc2hNZW1vcnkoKTt2YXIgZD1hLGU9YjtPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPQpUYihhLDIpO2E9YlswXTtiPWJbMV07aC52aWV3LnNldFVpbnQzMihkLGUsITApO2QrPTQ7ZSs9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcikud3JpdGUoYSsiPSIrYisiXHgwMCIsZSl9KTtyZXR1cm4gMH0sZW52aXJvbl9zaXplc19nZXQ6ZnVuY3Rpb24oYSxiKXtoLnJlZnJlc2hNZW1vcnkoKTt2YXIgZD1PYmplY3QuZW50cmllcyhsKS5tYXAoZnVuY3Rpb24oYSl7YT1UYihhLDIpO3JldHVybiBhWzBdKyI9IithWzFdKyJceDAwIn0pLGU9ZC5yZWR1Y2UoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStHLmJ5dGVMZW5ndGgoYil9LDApO2gudmlldy5zZXRVaW50MzIoYSxkLmxlbmd0aCwhMCk7aC52aWV3LnNldFVpbnQzMihiLGUsITApO3JldHVybiAwfSxjbG9ja19yZXNfZ2V0OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBkPW4oMSk7YnJlYWs7Y2FzZSAwOmQ9bigxRTMpfWgudmlldy5zZXRCaWdVaW50NjQoYixkKTtyZXR1cm4gMH0sY2xvY2tfdGltZV9nZXQ6ZnVuY3Rpb24oYSwKZCxlKXtoLnJlZnJlc2hNZW1vcnkoKTthPWIoYSk7aWYobnVsbD09PWEpcmV0dXJuIDI4O2gudmlldy5zZXRCaWdVaW50NjQoZSxuKGEpLCEwKTtyZXR1cm4gMH0sZmRfYWR2aXNlOkIoZnVuY3Rpb24oYSl7ZShhLG1iKTtyZXR1cm4gNTJ9KSxmZF9hbGxvY2F0ZTpCKGZ1bmN0aW9uKGEpe2UoYSxoYyk7cmV0dXJuIDUyfSksZmRfY2xvc2U6QihmdW5jdGlvbihhKXt2YXIgYj1lKGEsbigwKSk7ci5jbG9zZVN5bmMoYi5yZWFsKTtoLkZEX01BUC5kZWxldGUoYSk7cmV0dXJuIDB9KSxmZF9kYXRhc3luYzpCKGZ1bmN0aW9uKGEpe2E9ZShhLFJhKTtyLmZkYXRhc3luY1N5bmMoYS5yZWFsKTtyZXR1cm4gMH0pLGZkX2Zkc3RhdF9nZXQ6QihmdW5jdGlvbihhLGIpe2E9ZShhLG4oMCkpO2gucmVmcmVzaE1lbW9yeSgpO2gudmlldy5zZXRVaW50OChiLGEuZmlsZXR5cGUpO2gudmlldy5zZXRVaW50MTYoYisyLDAsITApO2gudmlldy5zZXRVaW50MTYoYis0LDAsITApO2gudmlldy5zZXRCaWdVaW50NjQoYisKOCxuKGEucmlnaHRzLmJhc2UpLCEwKTtoLnZpZXcuc2V0QmlnVWludDY0KGIrOCs4LG4oYS5yaWdodHMuaW5oZXJpdGluZyksITApO3JldHVybiAwfSksZmRfZmRzdGF0X3NldF9mbGFnczpCKGZ1bmN0aW9uKGEpe2UoYSxsYik7cmV0dXJuIDUyfSksZmRfZmRzdGF0X3NldF9yaWdodHM6QihmdW5jdGlvbihhLGIsZCl7YT1lKGEsbigwKSk7aWYoKGEucmlnaHRzLmJhc2V8Yik+YS5yaWdodHMuYmFzZXx8KGEucmlnaHRzLmluaGVyaXRpbmd8ZCk+YS5yaWdodHMuaW5oZXJpdGluZylyZXR1cm4gNjM7YS5yaWdodHMuYmFzZT1iO2EucmlnaHRzLmluaGVyaXRpbmc9ZDtyZXR1cm4gMH0pLGZkX2ZpbGVzdGF0X2dldDpCKGZ1bmN0aW9uKGEsYil7YT1lKGEsRWEpO3ZhciBkPXIuZnN0YXRTeW5jKGEucmVhbCk7aC5yZWZyZXNoTWVtb3J5KCk7aC52aWV3LnNldEJpZ1VpbnQ2NChiLG4oZC5kZXYpLCEwKTtiKz04O2gudmlldy5zZXRCaWdVaW50NjQoYixuKGQuaW5vKSwhMCk7Yis9ODtoLnZpZXcuc2V0VWludDgoYiwKYS5maWxldHlwZSk7Yis9ODtoLnZpZXcuc2V0QmlnVWludDY0KGIsbihkLm5saW5rKSwhMCk7Yis9ODtoLnZpZXcuc2V0QmlnVWludDY0KGIsbihkLnNpemUpLCEwKTtiKz04O2gudmlldy5zZXRCaWdVaW50NjQoYixQYShkLmF0aW1lTXMpLCEwKTtiKz04O2gudmlldy5zZXRCaWdVaW50NjQoYixQYShkLm10aW1lTXMpLCEwKTtoLnZpZXcuc2V0QmlnVWludDY0KGIrOCxQYShkLmN0aW1lTXMpLCEwKTtyZXR1cm4gMH0pLGZkX2ZpbGVzdGF0X3NldF9zaXplOkIoZnVuY3Rpb24oYSxiKXthPWUoYSxrYyk7ci5mdHJ1bmNhdGVTeW5jKGEucmVhbCxOdW1iZXIoYikpO3JldHVybiAwfSksZmRfZmlsZXN0YXRfc2V0X3RpbWVzOkIoZnVuY3Rpb24oYSxkLGYsaCl7YT1lKGEsbGMpO3ZhciBnPXIuZnN0YXRTeW5jKGEucmVhbCksaz1nLmF0aW1lO2c9Zy5tdGltZTt2YXIgbD1iYihiKDApKTtpZigzPT09KGgmMyl8fDEyPT09KGgmMTIpKXJldHVybiAyODsxPT09KGgmMSk/az1iYihkKToyPT09CihoJjIpJiYoaz1sKTs0PT09KGgmNCk/Zz1iYihmKTo4PT09KGgmOCkmJihnPWwpO3IuZnV0aW1lc1N5bmMoYS5yZWFsLG5ldyBEYXRlKGspLG5ldyBEYXRlKGcpKTtyZXR1cm4gMH0pLGZkX3ByZXN0YXRfZ2V0OkIoZnVuY3Rpb24oYSxiKXthPWUoYSxuKDApKTtpZighYS5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtoLnZpZXcuc2V0VWludDgoYiwwKTtoLnZpZXcuc2V0VWludDMyKGIrNCxHLmJ5dGVMZW5ndGgoYS5mYWtlUGF0aCksITApO3JldHVybiAwfSksZmRfcHJlc3RhdF9kaXJfbmFtZTpCKGZ1bmN0aW9uKGEsYixkKXthPWUoYSxuKDApKTtpZighYS5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtHLmZyb20oaC5tZW1vcnkuYnVmZmVyKS53cml0ZShhLmZha2VQYXRoLGIsZCwidXRmOCIpO3JldHVybiAwfSksZmRfcHdyaXRlOkIoZnVuY3Rpb24oYSxiLGQsZyxrKXt2YXIgbD1lKGEsRGF8a2IpLG09MDtmKGIsZCkuZm9yRWFjaChmdW5jdGlvbihhKXtmb3IodmFyIGI9CjA7YjxhLmJ5dGVMZW5ndGg7KWIrPXIud3JpdGVTeW5jKGwucmVhbCxhLGIsYS5ieXRlTGVuZ3RoLWIsTnVtYmVyKGcpK20rYik7bSs9Yn0pO2gudmlldy5zZXRVaW50MzIoayxtLCEwKTtyZXR1cm4gMH0pLGZkX3dyaXRlOkIoZnVuY3Rpb24oYSxiLGQsZyl7dmFyIGs9ZShhLERhKSxsPTA7ZihiLGQpLmZvckVhY2goZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7YjxhLmJ5dGVMZW5ndGg7KXt2YXIgZD1yLndyaXRlU3luYyhrLnJlYWwsYSxiLGEuYnl0ZUxlbmd0aC1iLGsub2Zmc2V0P051bWJlcihrLm9mZnNldCk6bnVsbCk7ay5vZmZzZXQmJihrLm9mZnNldCs9bihkKSk7Yis9ZH1sKz1ifSk7aC52aWV3LnNldFVpbnQzMihnLGwsITApO3JldHVybiAwfSksZmRfcHJlYWQ6QihmdW5jdGlvbihhLGIsZCxnLGspe3ZhciBsO2E9ZShhLEJhfGtiKTt2YXIgbT0wO3RyeXt2YXIgdz1TYihmKGIsZCkpLG49dy5uZXh0KCk7YTpmb3IoOyFuLmRvbmU7bj13Lm5leHQoKSl7dmFyIEY9bi52YWx1ZTsKZm9yKGI9MDtiPEYuYnl0ZUxlbmd0aDspe3ZhciBxPUYuYnl0ZUxlbmd0aC1iLHA9ci5yZWFkU3luYyhhLnJlYWwsRixiLEYuYnl0ZUxlbmd0aC1iLE51bWJlcihnKSttK2IpO2IrPXA7bSs9cDtpZigwPT09cHx8cDxxKWJyZWFrIGF9bSs9Yn19Y2F0Y2goTyl7dmFyIHQ9e2Vycm9yOk99fWZpbmFsbHl7dHJ5e24mJiFuLmRvbmUmJihsPXcucmV0dXJuKSYmbC5jYWxsKHcpfWZpbmFsbHl7aWYodCl0aHJvdyB0LmVycm9yO319aC52aWV3LnNldFVpbnQzMihrLG0sITApO3JldHVybiAwfSksZmRfcmVhZDpCKGZ1bmN0aW9uKGEsYixkLGcpe3ZhciBrO2E9ZShhLEJhKTt2YXIgbD0wPT09YS5yZWFsLG09MDt0cnl7dmFyIHc9U2IoZihiLGQpKSxGPXcubmV4dCgpO2E6Zm9yKDshRi5kb25lO0Y9dy5uZXh0KCkpe3ZhciBwPUYudmFsdWU7Zm9yKGI9MDtiPHAuYnl0ZUxlbmd0aDspe3ZhciBxPXAuYnl0ZUxlbmd0aC1iLHQ9ci5yZWFkU3luYyhhLnJlYWwscCxiLHEsbHx8dm9pZCAwPT09YS5vZmZzZXQ/Cm51bGw6TnVtYmVyKGEub2Zmc2V0KSk7bHx8KGEub2Zmc2V0PShhLm9mZnNldD9hLm9mZnNldDpuKDApKStuKHQpKTtiKz10O20rPXQ7aWYoMD09PXR8fHQ8cSlicmVhayBhfX19Y2F0Y2goTyl7dmFyIGJjPXtlcnJvcjpPfX1maW5hbGx5e3RyeXtGJiYhRi5kb25lJiYoaz13LnJldHVybikmJmsuY2FsbCh3KX1maW5hbGx5e2lmKGJjKXRocm93IGJjLmVycm9yO319aC52aWV3LnNldFVpbnQzMihnLG0sITApO3JldHVybiAwfSksZmRfcmVhZGRpcjpCKGZ1bmN0aW9uKGEsYixkLGYsZyl7YT1lKGEsamMpO2gucmVmcmVzaE1lbW9yeSgpO3ZhciBrPXIucmVhZGRpclN5bmMoYS5wYXRoLHt3aXRoRmlsZVR5cGVzOiEwfSksbD1iO2ZvcihmPU51bWJlcihmKTtmPGsubGVuZ3RoO2YrPTEpe3ZhciBtPWtbZl0sdz1HLmJ5dGVMZW5ndGgobS5uYW1lKTtpZihiLWw+ZClicmVhaztoLnZpZXcuc2V0QmlnVWludDY0KGIsbihmKzEpLCEwKTtiKz04O2lmKGItbD5kKWJyZWFrO3ZhciBwPXIuc3RhdFN5bmModS5yZXNvbHZlKGEucGF0aCwKbS5uYW1lKSk7aC52aWV3LnNldEJpZ1VpbnQ2NChiLG4ocC5pbm8pLCEwKTtiKz04O2lmKGItbD5kKWJyZWFrO2gudmlldy5zZXRVaW50MzIoYix3LCEwKTtiKz00O2lmKGItbD5kKWJyZWFrO3N3aXRjaCghMCl7Y2FzZSBwLmlzQmxvY2tEZXZpY2UoKTpwPTE7YnJlYWs7Y2FzZSBwLmlzQ2hhcmFjdGVyRGV2aWNlKCk6cD0yO2JyZWFrO2Nhc2UgcC5pc0RpcmVjdG9yeSgpOnA9MzticmVhaztjYXNlIHAuaXNGSUZPKCk6cD02O2JyZWFrO2Nhc2UgcC5pc0ZpbGUoKTpwPTQ7YnJlYWs7Y2FzZSBwLmlzU29ja2V0KCk6cD02O2JyZWFrO2Nhc2UgcC5pc1N5bWJvbGljTGluaygpOnA9NzticmVhaztkZWZhdWx0OnA9MH1oLnZpZXcuc2V0VWludDgoYixwKTtiKz0xO2IrPTM7aWYoYit3Pj1sK2QpYnJlYWs7Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcikud3JpdGUobS5uYW1lLGIpO2IrPXd9aC52aWV3LnNldFVpbnQzMihnLE1hdGgubWluKGItbCxkKSwhMCk7cmV0dXJuIDB9KSxmZF9yZW51bWJlcjpCKGZ1bmN0aW9uKGEsCmIpe2UoYSxuKDApKTtlKGIsbigwKSk7ci5jbG9zZVN5bmMoaC5GRF9NQVAuZ2V0KGEpLnJlYWwpO2guRkRfTUFQLnNldChhLGguRkRfTUFQLmdldChiKSk7aC5GRF9NQVAuZGVsZXRlKGIpO3JldHVybiAwfSksZmRfc2VlazpCKGZ1bmN0aW9uKGEsYixkLGYpe2E9ZShhLGtiKTtoLnJlZnJlc2hNZW1vcnkoKTtzd2l0Y2goZCl7Y2FzZSAxOmEub2Zmc2V0PShhLm9mZnNldD9hLm9mZnNldDpuKDApKStuKGIpO2JyZWFrO2Nhc2UgMjpkPXIuZnN0YXRTeW5jKGEucmVhbCkuc2l6ZTthLm9mZnNldD1uKGQpK24oYik7YnJlYWs7Y2FzZSAwOmEub2Zmc2V0PW4oYil9aC52aWV3LnNldEJpZ1VpbnQ2NChmLGEub2Zmc2V0LCEwKTtyZXR1cm4gMH0pLGZkX3RlbGw6QihmdW5jdGlvbihhLGIpe2E9ZShhLGhkKTtoLnJlZnJlc2hNZW1vcnkoKTthLm9mZnNldHx8KGEub2Zmc2V0PW4oMCkpO2gudmlldy5zZXRCaWdVaW50NjQoYixhLm9mZnNldCwhMCk7cmV0dXJuIDB9KSxmZF9zeW5jOkIoZnVuY3Rpb24oYSl7YT0KZShhLENhKTtyLmZzeW5jU3luYyhhLnJlYWwpO3JldHVybiAwfSkscGF0aF9jcmVhdGVfZGlyZWN0b3J5OkIoZnVuY3Rpb24oYSxiLGQpe2E9ZShhLGlkKTtpZighYS5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtiPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsYixkKS50b1N0cmluZygpO3IubWtkaXJTeW5jKHUucmVzb2x2ZShhLnBhdGgsYikpO3JldHVybiAwfSkscGF0aF9maWxlc3RhdF9nZXQ6QihmdW5jdGlvbihhLGIsZCxmLGcpe2E9ZShhLHBkKTtpZighYS5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtkPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsZCxmKS50b1N0cmluZygpO2Q9ci5zdGF0U3luYyh1LnJlc29sdmUoYS5wYXRoLGQpKTtoLnZpZXcuc2V0QmlnVWludDY0KGcsbihkLmRldiksITApO2crPTg7aC52aWV3LnNldEJpZ1VpbnQ2NChnLG4oZC5pbm8pLCEwKTtnKz04O2gudmlldy5zZXRVaW50OChnLGhmKGgsdm9pZCAwLGQpLmZpbGV0eXBlKTtnKz0KODtoLnZpZXcuc2V0QmlnVWludDY0KGcsbihkLm5saW5rKSwhMCk7Zys9ODtoLnZpZXcuc2V0QmlnVWludDY0KGcsbihkLnNpemUpLCEwKTtnKz04O2gudmlldy5zZXRCaWdVaW50NjQoZyxQYShkLmF0aW1lTXMpLCEwKTtnKz04O2gudmlldy5zZXRCaWdVaW50NjQoZyxQYShkLm10aW1lTXMpLCEwKTtoLnZpZXcuc2V0QmlnVWludDY0KGcrOCxQYShkLmN0aW1lTXMpLCEwKTtyZXR1cm4gMH0pLHBhdGhfZmlsZXN0YXRfc2V0X3RpbWVzOkIoZnVuY3Rpb24oYSxkLGYsZyxrLGwsbSl7YT1lKGEscmQpO2lmKCFhLnBhdGgpcmV0dXJuIDI4O2gucmVmcmVzaE1lbW9yeSgpO3ZhciBuPXIuZnN0YXRTeW5jKGEucmVhbCk7ZD1uLmF0aW1lO249bi5tdGltZTt2YXIgcD1iYihiKDApKTtpZigzPT09KG0mMyl8fDEyPT09KG0mMTIpKXJldHVybiAyODsxPT09KG0mMSk/ZD1iYihrKToyPT09KG0mMikmJihkPXApOzQ9PT0obSY0KT9uPWJiKGwpOjg9PT0obSY4KSYmKG49cCk7Zj1HLmZyb20oaC5tZW1vcnkuYnVmZmVyLApmLGcpLnRvU3RyaW5nKCk7ci51dGltZXNTeW5jKHUucmVzb2x2ZShhLnBhdGgsZiksbmV3IERhdGUoZCksbmV3IERhdGUobikpO3JldHVybiAwfSkscGF0aF9saW5rOkIoZnVuY3Rpb24oYSxiLGQsZixnLGssbCl7YT1lKGEsa2QpO2c9ZShnLGxkKTtpZighYS5wYXRofHwhZy5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtkPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsZCxmKS50b1N0cmluZygpO2s9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixrLGwpLnRvU3RyaW5nKCk7ci5saW5rU3luYyh1LnJlc29sdmUoYS5wYXRoLGQpLHUucmVzb2x2ZShnLnBhdGgsaykpO3JldHVybiAwfSkscGF0aF9vcGVuOkIoZnVuY3Rpb24oYSxiLGQsZixnLGssbCxtLHApe2I9ZShhLGljKTtrPW4oayk7bD1uKGwpO2E9KGsmKEJhfGpjKSkhPT1uKDApO3ZhciBxPShrJihSYXxEYXxoY3xrYykpIT09bigwKTtpZihxJiZhKXZhciB3PXIuY29uc3RhbnRzLk9fUkRXUjtlbHNlIGE/dz1yLmNvbnN0YW50cy5PX1JET05MWToKcSYmKHc9ci5jb25zdGFudHMuT19XUk9OTFkpO2E9a3xpYztrfD1sOzAhPT0oZyYxKSYmKHd8PXIuY29uc3RhbnRzLk9fQ1JFQVQsYXw9amQpOzAhPT0oZyYyKSYmKHd8PXIuY29uc3RhbnRzLk9fRElSRUNUT1JZKTswIT09KGcmNCkmJih3fD1yLmNvbnN0YW50cy5PX0VYQ0wpOzAhPT0oZyY4KSYmKHd8PXIuY29uc3RhbnRzLk9fVFJVTkMsYXw9cWQpOzAhPT0obSYxKSYmKHd8PXIuY29uc3RhbnRzLk9fQVBQRU5EKTswIT09KG0mMikmJih3PXIuY29uc3RhbnRzLk9fRFNZTkM/d3xyLmNvbnN0YW50cy5PX0RTWU5DOnd8ci5jb25zdGFudHMuT19TWU5DLGt8PVJhKTswIT09KG0mNCkmJih3fD1yLmNvbnN0YW50cy5PX05PTkJMT0NLKTswIT09KG0mOCkmJih3PXIuY29uc3RhbnRzLk9fUlNZTkM/d3xyLmNvbnN0YW50cy5PX1JTWU5DOnd8ci5jb25zdGFudHMuT19TWU5DLGt8PUNhKTswIT09KG0mMTYpJiYod3w9ci5jb25zdGFudHMuT19TWU5DLGt8PUNhKTtxJiYwPT09KHcmKHIuY29uc3RhbnRzLk9fQVBQRU5EfApyLmNvbnN0YW50cy5PX1RSVU5DKSkmJihrfD1rYik7aC5yZWZyZXNoTWVtb3J5KCk7ZD1HLmZyb20oaC5tZW1vcnkuYnVmZmVyLGQsZikudG9TdHJpbmcoKTtkPXUucmVzb2x2ZShiLnBhdGgsZCk7aWYodS5yZWxhdGl2ZShiLnBhdGgsZCkuc3RhcnRzV2l0aCgiLi4iKSlyZXR1cm4gNzY7dHJ5e3ZhciB0PXIucmVhbHBhdGhTeW5jKGQpO2lmKHUucmVsYXRpdmUoYi5wYXRoLHQpLnN0YXJ0c1dpdGgoIi4uIikpcmV0dXJuIDc2fWNhdGNoKE8pe2lmKCJFTk9FTlQiPT09Ty5jb2RlKXQ9ZDtlbHNlIHRocm93IE87fXRyeXt2YXIgRj1yLnN0YXRTeW5jKHQpLmlzRGlyZWN0b3J5KCl9Y2F0Y2goTyl7fXc9IXEmJkY/ci5vcGVuU3luYyh0LHIuY29uc3RhbnRzLk9fUkRPTkxZKTpyLm9wZW5TeW5jKHQsdyk7Rj1VYihoLkZEX01BUC5rZXlzKCkpLnJldmVyc2UoKVswXSsxO2guRkRfTUFQLnNldChGLHtyZWFsOncsZmlsZXR5cGU6dm9pZCAwLHJpZ2h0czp7YmFzZTphLGluaGVyaXRpbmc6a30sCnBhdGg6dH0pO2dmKGgsRik7aC52aWV3LnNldFVpbnQzMihwLEYsITApO3JldHVybiAwfSkscGF0aF9yZWFkbGluazpCKGZ1bmN0aW9uKGEsYixkLGYsZyxrKXthPWUoYSxtZCk7aWYoIWEucGF0aClyZXR1cm4gMjg7aC5yZWZyZXNoTWVtb3J5KCk7Yj1HLmZyb20oaC5tZW1vcnkuYnVmZmVyLGIsZCkudG9TdHJpbmcoKTtiPXUucmVzb2x2ZShhLnBhdGgsYik7Yj1yLnJlYWRsaW5rU3luYyhiKTtmPUcuZnJvbShoLm1lbW9yeS5idWZmZXIpLndyaXRlKGIsZixnKTtoLnZpZXcuc2V0VWludDMyKGssZiwhMCk7cmV0dXJuIDB9KSxwYXRoX3JlbW92ZV9kaXJlY3Rvcnk6QihmdW5jdGlvbihhLGIsZCl7YT1lKGEsdGQpO2lmKCFhLnBhdGgpcmV0dXJuIDI4O2gucmVmcmVzaE1lbW9yeSgpO2I9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixiLGQpLnRvU3RyaW5nKCk7ci5ybWRpclN5bmModS5yZXNvbHZlKGEucGF0aCxiKSk7cmV0dXJuIDB9KSxwYXRoX3JlbmFtZTpCKGZ1bmN0aW9uKGEsYixkLApmLGcsayl7YT1lKGEsbmQpO2Y9ZShmLG9kKTtpZighYS5wYXRofHwhZi5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtiPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsYixkKS50b1N0cmluZygpO2c9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixnLGspLnRvU3RyaW5nKCk7ci5yZW5hbWVTeW5jKHUucmVzb2x2ZShhLnBhdGgsYiksdS5yZXNvbHZlKGYucGF0aCxnKSk7cmV0dXJuIDB9KSxwYXRoX3N5bWxpbms6QihmdW5jdGlvbihhLGIsZCxmLGcpe2Q9ZShkLHNkKTtpZighZC5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTthPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsYSxiKS50b1N0cmluZygpO2Y9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixmLGcpLnRvU3RyaW5nKCk7ci5zeW1saW5rU3luYyhhLHUucmVzb2x2ZShkLnBhdGgsZikpO3JldHVybiAwfSkscGF0aF91bmxpbmtfZmlsZTpCKGZ1bmN0aW9uKGEsYixkKXthPWUoYSx1ZCk7aWYoIWEucGF0aClyZXR1cm4gMjg7CmgucmVmcmVzaE1lbW9yeSgpO2I9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixiLGQpLnRvU3RyaW5nKCk7ci51bmxpbmtTeW5jKHUucmVzb2x2ZShhLnBhdGgsYikpO3JldHVybiAwfSkscG9sbF9vbmVvZmY6ZnVuY3Rpb24oYSxkLGUsZil7dmFyIGc9MCxrPTA7aC5yZWZyZXNoTWVtb3J5KCk7Zm9yKHZhciBsPTA7bDxlO2wrPTEpe3ZhciBtPWgudmlldy5nZXRCaWdVaW50NjQoYSwhMCk7YSs9ODt2YXIgcD1oLnZpZXcuZ2V0VWludDgoYSk7YSs9MTtzd2l0Y2gocCl7Y2FzZSAwOmErPTc7aC52aWV3LmdldEJpZ1VpbnQ2NChhLCEwKTthKz04O3ZhciBxPWgudmlldy5nZXRVaW50MzIoYSwhMCk7YSs9NDthKz00O3A9aC52aWV3LmdldEJpZ1VpbnQ2NChhLCEwKTthKz04O2gudmlldy5nZXRCaWdVaW50NjQoYSwhMCk7YSs9ODt2YXIgcj1oLnZpZXcuZ2V0VWludDE2KGEsITApO2ErPTI7YSs9Njt2YXIgdD0xPT09cjtyPTA7cT1uKGIocSkpO251bGw9PT1xP3I9Mjg6KHA9dD9wOnErcCxrPQpwPms/cDprKTtoLnZpZXcuc2V0QmlnVWludDY0KGQsbSwhMCk7ZCs9ODtoLnZpZXcuc2V0VWludDE2KGQsciwhMCk7ZCs9MjtoLnZpZXcuc2V0VWludDgoZCwwKTtkKz0xO2QrPTU7Zys9MTticmVhaztjYXNlIDE6Y2FzZSAyOmErPTM7aC52aWV3LmdldFVpbnQzMihhLCEwKTthKz00O2gudmlldy5zZXRCaWdVaW50NjQoZCxtLCEwKTtkKz04O2gudmlldy5zZXRVaW50MTYoZCw1MiwhMCk7ZCs9MjtoLnZpZXcuc2V0VWludDgoZCxwKTtkKz0xO2QrPTU7Zys9MTticmVhaztkZWZhdWx0OnJldHVybiAyOH19Zm9yKGgudmlldy5zZXRVaW50MzIoZixnLCEwKTtBLmhydGltZSgpPGs7KTtyZXR1cm4gMH0scHJvY19leGl0OmZ1bmN0aW9uKGEpe0EuZXhpdChhKTtyZXR1cm4gMH0scHJvY19yYWlzZTpmdW5jdGlvbihhKXtpZighKGEgaW4geWYpKXJldHVybiAyODtBLmtpbGwoeWZbYV0pO3JldHVybiAwfSxyYW5kb21fZ2V0OmZ1bmN0aW9uKGEsYil7aC5yZWZyZXNoTWVtb3J5KCk7QS5yYW5kb21GaWxsU3luYyhuZXcgVWludDhBcnJheShoLm1lbW9yeS5idWZmZXIpLAphLGIpO3JldHVybiAwfSxzY2hlZF95aWVsZDpmdW5jdGlvbigpe3JldHVybiAwfSxzb2NrX3JlY3Y6ZnVuY3Rpb24oKXtyZXR1cm4gNTJ9LHNvY2tfc2VuZDpmdW5jdGlvbigpe3JldHVybiA1Mn0sc29ja19zaHV0ZG93bjpmdW5jdGlvbigpe3JldHVybiA1Mn19O2EudHJhY2VTeXNjYWxscyYmT2JqZWN0LmtleXModGhpcy53YXNpSW1wb3J0KS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWgud2FzaUltcG9ydFthXTtoLndhc2lJbXBvcnRbYV09ZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspZFtlXT1hcmd1bWVudHNbZV07Y29uc29sZS5sb2coIldBU0k6IHdhc2lJbXBvcnQgY2FsbGVkOiAiK2ErIiAoIitkKyIpIik7dHJ5e3ZhciBmPWIuYXBwbHkodm9pZCAwLFViKGQpKTtjb25zb2xlLmxvZygiV0FTSTogID0+ICIrZik7cmV0dXJuIGZ9Y2F0Y2goWil7dGhyb3cgY29uc29sZS5sb2coIkNhdGNoZWQgZXJyb3I6ICIrWiksWjt9fX0pfWEucHJvdG90eXBlLnJlZnJlc2hNZW1vcnk9CmZ1bmN0aW9uKCl7dGhpcy52aWV3JiYwIT09dGhpcy52aWV3LmJ1ZmZlci5ieXRlTGVuZ3RofHwodGhpcy52aWV3PW5ldyBlYyh0aGlzLm1lbW9yeS5idWZmZXIpKX07YS5wcm90b3R5cGUuc2V0TWVtb3J5PWZ1bmN0aW9uKGEpe3RoaXMubWVtb3J5PWF9O2EucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEpe2E9YS5leHBvcnRzO2lmKG51bGw9PT1hfHwib2JqZWN0IiE9PXR5cGVvZiBhKXRocm93IEVycm9yKCJpbnN0YW5jZS5leHBvcnRzIG11c3QgYmUgYW4gT2JqZWN0LiBSZWNlaXZlZCAiK2ErIi4iKTt2YXIgYj1hLm1lbW9yeTtpZighKGIgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5NZW1vcnkpKXRocm93IEVycm9yKCJpbnN0YW5jZS5leHBvcnRzLm1lbW9yeSBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuTWVtb3J5LiBSZWNjZWl2ZWQgIitiKyIuIik7dGhpcy5zZXRNZW1vcnkoYik7YS5fc3RhcnQmJmEuX3N0YXJ0KCl9O2EucHJvdG90eXBlLmdldEltcG9ydE5hbWVzcGFjZT1mdW5jdGlvbihhKXt2YXIgYiwKZT1udWxsO3RyeXtmb3IodmFyIGY9U2IoV2ViQXNzZW1ibHkuTW9kdWxlLmltcG9ydHMoYSkpLGc9Zi5uZXh0KCk7IWcuZG9uZTtnPWYubmV4dCgpKXt2YXIgaD1nLnZhbHVlO2lmKCJmdW5jdGlvbiI9PT1oLmtpbmQmJmgubW9kdWxlLnN0YXJ0c1dpdGgoIndhc2lfIikpaWYoIWUpZT1oLm1vZHVsZTtlbHNlIGlmKGUhPT1oLm1vZHVsZSl0aHJvdyBFcnJvcigiTXVsdGlwbGUgbmFtZXNwYWNlcyBkZXRlY3RlZC4iKTt9fWNhdGNoKHQpe3ZhciBrPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtnJiYhZy5kb25lJiYoYj1mLnJldHVybikmJmIuY2FsbChmKX1maW5hbGx5e2lmKGspdGhyb3cgay5lcnJvcjt9fXJldHVybiBlfTthLnByb3RvdHlwZS5nZXRJbXBvcnRzPWZ1bmN0aW9uKGEpe3N3aXRjaCh0aGlzLmdldEltcG9ydE5hbWVzcGFjZShhKSl7Y2FzZSAid2FzaV91bnN0YWJsZSI6cmV0dXJue3dhc2lfdW5zdGFibGU6dGhpcy53YXNpSW1wb3J0fTtjYXNlICJ3YXNpX3NuYXBzaG90X3ByZXZpZXcxIjpyZXR1cm57d2FzaV9zbmFwc2hvdF9wcmV2aWV3MTp0aGlzLndhc2lJbXBvcnR9OwpkZWZhdWx0OnRocm93IEVycm9yKCJDYW4ndCBkZXRlY3QgYSBXQVNJIG5hbWVzcGFjZSBmb3IgdGhlIFdlYkFzc2VtYmx5IE1vZHVsZSIpO319O2EuZGVmYXVsdEJpbmRpbmdzPXdmO3JldHVybiBhfSgpLEJmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXt0aGlzLm9wdGlvbnM9YX1hLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oYSl7cmV0dXJuIEViKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBGYih0aGlzLGZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJydW4gbm90IGltcGxlbWVudGVkIGJ5IHRoZSBDb21tYW5kIHN1YmNsYXNzIik7fSl9KX07cmV0dXJuIGF9KCksdWg9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXt2YXIgZD1hLmNhbGwodGhpcyxiKXx8dGhpcztpZighYi5tb2R1bGUpdGhyb3cgRXJyb3IoIkRpZCBub3QgZmluZCBhIFdlYkFzc2VtYmx5Lk1vZHVsZSBmb3IgdGhlIFdBU0kgQ29tbWFuZCIpO3JldHVybiBkfXpkKGIsYSk7Yi5wcm90b3R5cGUucnVuPQpmdW5jdGlvbihhKXtyZXR1cm4gRWIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsZCxnLGg7cmV0dXJuIEZiKHRoaXMsZnVuY3Rpb24oZSl7c3dpdGNoKGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj17cHJlb3BlbnM6ZGIoeyIuIjoiLiIsIi8iOiIvIn0sdGhpcy5vcHRpb25zLnByZW9wZW5zfHx7fSksZW52OnRoaXMub3B0aW9ucy5lbnYsYXJnczp0aGlzLm9wdGlvbnMuYXJncyxiaW5kaW5nczpkYihkYih7fSxBZi5kZWZhdWx0QmluZGluZ3MpLHtmczphLmZzfSl9LGQ9bmV3IEFmKGIpLGc9dGhpcy5vcHRpb25zLm1vZHVsZSxbNCxXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShnLGRiKHt9LGQuZ2V0SW1wb3J0cyhnKSkpXTtjYXNlIDE6cmV0dXJuIGg9ZS5zZW50KCksZC5zdGFydChoKSxbMl19fSl9KX07cmV0dXJuIGJ9KEJmKSx2aD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3ZhciBkPWEuY2FsbCh0aGlzLGIpfHx0aGlzO2lmKCFiLmNhbGxiYWNrKXRocm93IEVycm9yKCJUaGUgQ29tbWFuZCBPcHRpb25zIHByb3ZpZGVkIGFyZSBub3QgZm9yIGEgQ2FsbGJhY2sgQ29tbWFuZCIpOwpkLmNhbGxiYWNrPWIuY2FsbGJhY2s7cmV0dXJuIGR9emQoYixhKTtiLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oYSl7cmV0dXJuIEViKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiO3JldHVybiBGYih0aGlzLGZ1bmN0aW9uKGQpe3N3aXRjaChkLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsUHJvbWlzZS5yZXNvbHZlKHRoaXMuY2FsbGJhY2sodGhpcy5vcHRpb25zLGEpKV07Y2FzZSAxOnJldHVybiBiPWQuc2VudCgpLCJzdHJpbmciPT10eXBlb2YgYiYmYS5mcy53cml0ZUZpbGVTeW5jKCIvZGV2L3N0ZG91dCIsKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGIrIlxuIikpLFsyXX19KX0pfTtyZXR1cm4gYn0oQmYpLHdoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGQsZSxmLGcsaCxrLGwsbSl7dmFyIGI9dGhpczt0aGlzLnN0ZGluUHJvbXB0PSIiO3RoaXMuY29tbWFuZE9wdGlvbnM9YTt0aGlzLndhc21Gcz1uZXcgZ2g7dGhpcy53YXNtRnMuZnJvbUpTT04oZCk7dGhpcy5vcmlnaW5hbFdhc21Gc0pzb249CmQ7dGhpcy5pb0RldmljZXM9bmV3IGhoKHRoaXMud2FzbUZzKTt0aGlzLmlvRGV2aWNlV2luZG93PWg7dGhpcy5pb0RldmljZXMuc2V0V2luZG93U2l6ZUNhbGxiYWNrKGZ1bmN0aW9uKCl7dmFyIGE9Yi5pb0RldmljZXMuZ2V0V2luZG93U2l6ZSgpO2IuaW9EZXZpY2VXaW5kb3cucmVzaXplKGFbMF0sYVsxXSl9KTt0aGlzLmlvRGV2aWNlcy5zZXRCdWZmZXJJbmRleERpc3BsYXlDYWxsYmFjayhmdW5jdGlvbigpe3ZhciBhPWIuaW9EZXZpY2VzLmdldEZyYW1lQnVmZmVyKCk7Yi5pb0RldmljZVdpbmRvdy5kcmF3UmdiYUFycmF5VG9GcmFtZUJ1ZmZlcihhKX0pO3RoaXMuaW9EZXZpY2VzLnNldElucHV0Q2FsbGJhY2soZnVuY3Rpb24oKXtpZihiLnNoYXJlZElvRGV2aWNlSW5wdXQpe2IuaW9EZXZpY2VXaW5kb3cuZ2V0SW5wdXRCdWZmZXIoKTtBdG9taWNzLndhaXQoYi5zaGFyZWRJb0RldmljZUlucHV0LDAsLTEpO3ZhciBhPWIuc2hhcmVkSW9EZXZpY2VJbnB1dFswXTtiLnNoYXJlZElvRGV2aWNlSW5wdXRbMF09Ci0xO2lmKDA8YSl7Zm9yKHZhciBkPW5ldyBVaW50OEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5zaGFyZWRJb0RldmljZUlucHV0W2UrMV07cmV0dXJuIGR9cmV0dXJuIG5ldyBVaW50OEFycmF5fXJldHVybiBiLmlvRGV2aWNlV2luZG93LmdldElucHV0QnVmZmVyKCl9KTt0aGlzLmRhdGFDYWxsYmFjaz1lO3RoaXMuZW5kQ2FsbGJhY2s9Zjt0aGlzLmVycm9yQ2FsbGJhY2s9ZztkPXZvaWQgMDtrJiYoZD1uZXcgSW50MzJBcnJheShrKSk7dGhpcy5zaGFyZWRJb0RldmljZUlucHV0PWQ7az12b2lkIDA7bCYmKGs9bmV3IEludDMyQXJyYXkobCkpO3RoaXMuY29tbWFuZD1hLm1vZHVsZT9uZXcgdWgoYSk6bmV3IHZoKGEpO3RoaXMud2FzbUZzLnZvbHVtZS5mZHNbMF0ubm9kZS5yZWFkPXRoaXMuc3RkaW5SZWFkLmJpbmQodGhpcyk7dGhpcy53YXNtRnMudm9sdW1lLmZkc1sxXS5ub2RlLndyaXRlPXRoaXMuc3Rkb3V0V3JpdGUuYmluZCh0aGlzKTt0aGlzLndhc21Gcy52b2x1bWUuZmRzWzJdLm5vZGUud3JpdGU9CnRoaXMuc3Rkb3V0V3JpdGUuYmluZCh0aGlzKTthPXRoaXMud2FzbUZzLnZvbHVtZS5vcGVuU3luYygiL2Rldi90dHkiLCJ3KyIpO3RoaXMud2FzbUZzLnZvbHVtZS5mZHNbYV0ubm9kZS5yZWFkPXRoaXMuc3RkaW5SZWFkLmJpbmQodGhpcyk7dGhpcy53YXNtRnMudm9sdW1lLmZkc1thXS5ub2RlLndyaXRlPXRoaXMuc3Rkb3V0V3JpdGUuYmluZCh0aGlzKTt0aGlzLnNoYXJlZFN0ZGluPWs7dGhpcy5zdGFydFN0ZGluUmVhZENhbGxiYWNrPW07dGhpcy5yZWFkU3RkaW5Db3VudGVyPTA7dGhpcy5waXBlZFN0ZGluPSIifWEucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEpe3JldHVybiBFYih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixlLGYsZz10aGlzO3JldHVybiBGYih0aGlzLGZ1bmN0aW9uKGQpe3N3aXRjaChkLmxhYmVsKXtjYXNlIDA6Yj1mdW5jdGlvbigpe2cuaW9EZXZpY2VXaW5kb3cucmVzaXplKDAsMCk7c2V0VGltZW91dChmdW5jdGlvbigpe2cuZW5kQ2FsbGJhY2soZy53YXNtRnMudG9KU09OKCkpfSwKNTApfSxkLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBkLnRyeXMucHVzaChbMSwzLCw0XSksYSYmKHRoaXMucGlwZWRTdGRpbj0obmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpKS5kZWNvZGUoYSkpLFs0LHRoaXMuY29tbWFuZC5ydW4odGhpcy53YXNtRnMpXTtjYXNlIDI6cmV0dXJuIGQuc2VudCgpLGIoKSxbMyw0XTtjYXNlIDM6ZT1kLnNlbnQoKTtpZihlIGluc3RhbmNlb2YgdmYpcmV0dXJuIGIoKSxbMl07Zj0iVW5rbm93biBFcnJvciI7aWYodm9pZCAwIT09ZS5jb2RlKWY9ImV4aXRlZCB3aXRoIGNvZGU6ICIrZS5jb2RlO2Vsc2UgaWYodm9pZCAwIT09ZS5zaWduYWwpZj0ia2lsbGVkIHdpdGggc2lnbmFsOiAiK2Uuc2lnbmFsO2Vsc2UgaWYodm9pZCAwIT09ZS51c2VyKXJldHVybiBiKCksWzJdO2NvbnNvbGUuZXJyb3IoZSk7dGhpcy5lcnJvckNhbGxiYWNrKGYsdGhpcy53YXNtRnMudG9KU09OKCksdm9pZCAwIT09ZS51c2VyKTtyZXR1cm5bMyw0XTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9OwphLnByb3RvdHlwZS5zdGRvdXRXcml0ZT1mdW5jdGlvbihhLGQsZSxmKXt0aGlzLmRhdGFDYWxsYmFjayYmdGhpcy5kYXRhQ2FsbGJhY2soYSk7ZD0obmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpKS5kZWNvZGUoYSkuc3BsaXQoIlxuIik7dGhpcy5zdGRpblByb21wdD0wPGQubGVuZ3RoP2RbZC5sZW5ndGgtMV0ucmVwbGFjZSgvW1x1MDAxQlx1MDA5Ql1bW1xdKCkjOz9dKig/Oig/Oig/OlthLXpBLVpcZF0qKD86O1stYS16QS1aXGRcLyMmLjo9PyVAfl9dKikqKT9cdTAwMDcpfCg/Oig/OlxkezEsNH0oPzo7XGR7MCw0fSkqKT9bXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpL2csIiIpOiIiO3JldHVybiBhLmxlbmd0aH07YS5wcm90b3R5cGUuc3RkaW5SZWFkPWZ1bmN0aW9uKGEsZCxlLGYpe2lmKDAhPT10aGlzLnJlYWRTdGRpbkNvdW50ZXIlMilyZXR1cm4gdGhpcy5yZWFkU3RkaW5Db3VudGVyKyssMDtpZih0aGlzLnBpcGVkU3RkaW4pZD10aGlzLnBpcGVkU3RkaW4sdGhpcy5waXBlZFN0ZGluPQoiIix0aGlzLnJlYWRTdGRpbkNvdW50ZXIrKztlbHNlIGlmKHRoaXMuc2hhcmVkU3RkaW4mJnRoaXMuc3RhcnRTdGRpblJlYWRDYWxsYmFjayl7dGhpcy5zdGFydFN0ZGluUmVhZENhbGxiYWNrKCk7QXRvbWljcy53YWl0KHRoaXMuc2hhcmVkU3RkaW4sMCwtMSk7ZD10aGlzLnNoYXJlZFN0ZGluWzBdO3RoaXMuc2hhcmVkU3RkaW5bMF09LTE7ZT1uZXcgVWludDhBcnJheShkKTtmb3IoZj0wO2Y8ZDtmKyspZVtmXT10aGlzLnNoYXJlZFN0ZGluWzErZl07ZD0obmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpKS5kZWNvZGUoZSl9ZWxzZXtkPXByb21wdCgiUGxlYXNlIGVudGVyIHRleHQgZm9yIHN0ZGluOlxuIit0aGlzLnN0ZGluUHJvbXB0KTtpZihudWxsPT09ZCl0aHJvdyB0aGlzLmRhdGFDYWxsYmFjayYmdGhpcy5kYXRhQ2FsbGJhY2soKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKCJcbiIpKSxhPUVycm9yKCJQcm9jZXNzIGtpbGxlZCBieSB1c2VyIiksYS51c2VyPSEwLGE7ZCs9IlxuIjsKdGhpcy5kYXRhQ2FsbGJhY2smJnRoaXMuZGF0YUNhbGxiYWNrKChuZXcgVGV4dEVuY29kZXIpLmVuY29kZShkKSl9aWYoIWQpcmV0dXJuIDA7ZD0obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZCk7Zm9yKGU9MDtlPGQubGVuZ3RoOysrZSlhW2VdPWRbZV07cmV0dXJuIGQubGVuZ3RofTtyZXR1cm4gYX0oKTttYyh3aCl9KSgpCg=="; return[4,this._getBlobUrlForProcessWorker(b,this.wasmTty)];case 1:return d=c.sent(),e=new Worker(d),g=yh(e,[],void 0),f=new SharedArrayBuffer(8192),h=this.wasmTerminalConfig.wasmFs.toJSON(),k=new SharedArrayBuffer(8192),r=new Uk(k),[4,new g(this.commandOptionsForProcessesToRun[a],h,Bh(this._processDataCallback.bind(this,{commandOptionIndex:a,sync:!1})),Bh(this._processEndCallback.bind(this,{commandOptionIndex:a,processWorker:e})),Bh(this._processErrorCallback.bind(this,{commandOptionIndex:a})),Bh(r), k,f,Bh(this._processStartStdinReadCallback.bind(this)))];case 2:return q=c.sent(),t=new Int32Array(f),t[0]=-1,[2,{process:q,commandOptionIndex:a,ioDeviceWindow:r,worker:e,sharedStdin:t}]}})})};b.prototype._spawnProcessAsService=function(a){return rg(this,void 0,void 0,function(){var b,d,e;return sg(this,function(){b=this.wasmTerminalConfig.wasmFs.toJSON();d=new Uk;e=new Tk(this.commandOptionsForProcessesToRun[a],b,this._processDataCallback.bind(this,{commandOptionIndex:a,sync:!0}),this._processEndCallback.bind(this, {commandOptionIndex:a}),this._processErrorCallback.bind(this,{commandOptionIndex:a}),d);return[2,{process:e,commandOptionIndex:a,ioDeviceWindow:d}]})})};b.prototype._processDataCallback=function(a,b){var c=a.commandOptionIndex;a=a.sync;this.isRunning&&(cc?this._addStdinToSharedStdin(b,1):(c=new Uint8Array(b.length+ this.pipedStdinDataForNextProcess.length),c.set(this.pipedStdinDataForNextProcess),c.set(b,this.pipedStdinDataForNextProcess.length),this.pipedStdinDataForNextProcess=c):(b=(new TextDecoder("utf-8")).decode(b),this.wasmTty&&this.wasmTty.print(b,a)))};b.prototype._processEndCallback=function(a,b){var c=a.commandOptionIndex;(a=a.processWorker)&&a.terminate();b&&this.wasmTerminalConfig.wasmFs.fromJSON(b);ca&&(a=Math.max(a,-c.wasmTty.getCursor()),c.wasmTty.setCursorDirectly(c.wasmTty.getCursor()+a))};this.handleCursorErase=function(a){a?0>=c.wasmTty.getCursor()||(a=c.wasmTty.getInput().substr(0, c.wasmTty.getCursor()-1)+c.wasmTty.getInput().substr(c.wasmTty.getCursor()),c.wasmTty.clearInput(),c.wasmTty.setCursorDirectly(c.wasmTty.getCursor()-1),c.wasmTty.setInput(a,!0)):(a=c.wasmTty.getInput().substr(0,c.wasmTty.getCursor())+c.wasmTty.getInput().substr(c.wasmTty.getCursor()+1),c.wasmTty.setInput(a))};this.handleCursorInsert=function(a){var b=c.wasmTty.getInput().substr(0,c.wasmTty.getCursor())+a+c.wasmTty.getInput().substr(c.wasmTty.getCursor());c.wasmTty.setCursorDirectly(c.wasmTty.getCursor()+ a.length);c.wasmTty.setInput(b)};this.handleReadComplete=function(){c._activePrompt&&c._activePrompt.resolve&&(c._activePrompt.resolve(c.wasmTty.getInput()),c._activePrompt=void 0);c.wasmTty.print("\r\n");c._active=!1};this.handleTermData=function(a){if(c._active||"\u0003"===a){if(c.wasmTty.getFirstInit()&&c._activePrompt){var b=c.wasmTty.getBuffer().getLine(c.wasmTty.getBuffer().cursorY+c.wasmTty.getBuffer().baseY).translateToString(!1,0,c.wasmTty.getBuffer().cursorX);c._activePrompt.promptPrefix= b;c.wasmTty.setPromptPrefix(b);c.wasmTty.setFirstInit(!1)}c._activeCharPrompt&&c._activeCharPrompt.resolve?(c._activeCharPrompt.resolve(a),c._activeCharPrompt=void 0,c.wasmTty.print("\r\n")):3b||127===b)switch(a){case "\r":case "\n":case "\r":Jg(c.wasmTty.getInput())?c.handleCursorInsert("\n"):c.handleReadComplete();break;case "\u007f":case "\b":case "\u0004":c.handleCursorErase(!0);break;case "\t":if(0e&&(e=0);a>document.body.scrollHeight&&(a=document.body.scrollHeight);window.scrollTo(e,a)}};b.prototype.print=function(a,b){var c=this;a=a.replace(/\n\n/g,"\n \n");this.isOpen?this.wasmShell.isPrompting?this.wasmShell.printAndRestartPrompt(function(){c.wasmTty.print(a+"\n",b)}):this.wasmTty.print(a,b):this.pendingPrintOnOpen=this.pendingPrintOnOpen?this.pendingPrintOnOpen+a:a};b.prototype.runCommand=function(a){this.wasmShell.isPrompting()&&(this.wasmTty.setInput(a),this.wasmShell.handleReadComplete())}; b.prototype.destroy=function(){this.xterm.dispose();delete this.xterm};b.prototype.onPaste=function(a){this.wasmTty.print(a)};return b}(); function bl(b){return rg(void 0,void 0,void 0,function(){var a,c,d,e;return sg(this,function(g){switch(g.label){case 0:return[4,fetch("https://registry.wapm.io/graphql",{method:"POST",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({operationName:"shellGetCommandQuery",query:"query shellGetCommandQuery($command: String!) {\n command: getCommand(name: $command) {\n command\n module {\n abi\n publicUrl\n }\n packageVersion {\n package {\n displayName\n }\n }\n }\n}",variables:{command:b}})})]; case 1:return a=g.sent(),[4,a.json()];case 2:c=g.sent();d=function(a,b){a=a[b[0]];b.shift();return a?1